AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
OutdoorPvPTF Class Reference

#include "OutdoorPvPTF.h"

Inheritance diagram for OutdoorPvPTF:
OutdoorPvP ZoneScript

Public Member Functions

 OutdoorPvPTF ()
 
bool SetupOutdoorPvP () override
 
void HandlePlayerEnterZone (Player *player, uint32 zone) override
 
void HandlePlayerLeaveZone (Player *player, uint32 zone) override
 
bool Update (uint32 diff) override
 
void FillInitialWorldStates (WorldPackets::WorldState::InitWorldStates &packet) override
 
void SendRemoveWorldStates (Player *player) override
 
void SaveRequiredWorldStates () const
 
void ResetZoneToTeamControlled (TeamId team)
 
void RecalculateClientUILockTime ()
 
uint32 GetAllianceTowersControlled () const
 
void SetAllianceTowersControlled (uint32 count)
 
uint32 GetHordeTowersControlled () const
 
void SetHordeTowersControlled (uint32 count)
 
bool IsLocked () const
 
- Public Member Functions inherited from OutdoorPvP
 OutdoorPvP ()=default
 
 ~OutdoorPvP () override
 
void DeleteSpawns ()
 
virtual bool HandleAreaTrigger (Player *player, uint32 trigger)
 
virtual bool HandleCustomSpell (Player *player, uint32 spellId, GameObject *go)
 
virtual bool HandleOpenGo (Player *player, GameObject *go)
 
void OnGameObjectCreate (GameObject *go) override
 
void OnGameObjectRemove (GameObject *go) override
 
void OnCreatureCreate (Creature *creature) override
 
void OnCreatureRemove (Creature *creature) override
 
void SendUpdateWorldState (uint32 field, uint32 value)
 
virtual void HandleKill (Player *killer, Unit *killed)
 
virtual void HandleKillImpl (Player *, Unit *)
 
bool IsInsideObjective (Player *player) const
 
virtual void AwardKillBonus (Player *)
 
uint32 GetTypeId () const
 
virtual bool HandleDropFlag (Player *player, uint32 spellId)
 
virtual bool HandleGossipOption (Player *player, Creature *creature, uint32 gossipId)
 
virtual bool CanTalkTo (Player *player, Creature *c, GossipMenuItems const &gso)
 
void TeamApplyBuff (TeamId teamId, uint32 spellId, uint32 spellId2=0, Player *sameMapPlr=nullptr)
 
MapGetMap () const
 
- Public Member Functions inherited from ZoneScript
 ZoneScript ()
 
virtual ~ZoneScript ()
 
virtual uint32 GetCreatureEntry (ObjectGuid::LowType, CreatureData const *data)
 
virtual uint32 GetGameObjectEntry (ObjectGuid::LowType, uint32 entry)
 
virtual void OnUnitDeath (Unit *)
 
virtual void OnCreatureEvade (Creature *)
 
virtual ObjectGuid GetGuidData (uint32) const
 
virtual void SetGuidData (uint32, ObjectGuid)
 
virtual uint64 GetData64 (uint32) const
 
virtual void SetData64 (uint32, uint64)
 
virtual uint32 GetData (uint32) const
 
virtual void SetData (uint32, uint32)
 
virtual void ProcessEvent (WorldObject *, uint32)
 

Private Attributes

bool m_IsLocked
 
bool m_JustLocked
 
uint32 m_LockTimer
 
uint32 m_LockTimerUpdate
 
uint32 m_AllianceTowersControlled
 
uint32 m_HordeTowersControlled
 
uint32 hours_left
 
uint32 second_digit
 
uint32 first_digit
 

Additional Inherited Members

- Public Types inherited from OutdoorPvP
typedef std::map< ObjectGuid::LowType, OPvPCapturePoint * > OPvPCapturePointMap
 
typedef std::pair< ObjectGuid::LowType, GameObject * > GoScriptPair
 
typedef std::pair< ObjectGuid::LowType, Creature * > CreatureScriptPair
 
- Protected Member Functions inherited from OutdoorPvP
void BroadcastPacket (WorldPacket &data) const
 
virtual void HandlePlayerResurrects (Player *player, uint32 zone)
 
void AddCapturePoint (OPvPCapturePoint *cp)
 
OPvPCapturePointGetCapturePoint (ObjectGuid::LowType spawnId) const
 
void RegisterZone (uint32 zoneid)
 
bool HasPlayer (Player const *player) const
 
void TeamCastSpell (TeamId team, int32 spellId, Player *sameMapPlr=nullptr)
 
void SetMapFromZone (uint32 zone)
 
- Protected Attributes inherited from OutdoorPvP
OPvPCapturePointMap _capturePoints
 
std::array< PlayerSet, 2 > _players
 
uint32 _typeId {}
 
bool _sendUpdate { true }
 
Map_map {}
 
std::unordered_map< ObjectGuid::LowType, GameObject * > _goScriptStore
 
std::unordered_map< ObjectGuid::LowType, Creature * > _creatureScriptStore
 

Detailed Description

Constructor & Destructor Documentation

◆ OutdoorPvPTF()

OutdoorPvPTF::OutdoorPvPTF ( )
33{
35
36 m_IsLocked = false;
37 m_JustLocked = false;
40
43
44 hours_left = 6;
45 second_digit = 0;
46 first_digit = 0;
47}
const uint32 TF_LOCK_TIME
Definition OutdoorPvPTF.h:36
@ OUTDOOR_PVP_TF
Definition OutdoorPvP.h:32
bool m_IsLocked
Definition OutdoorPvPTF.h:171
uint32 m_HordeTowersControlled
Definition OutdoorPvPTF.h:177
uint32 m_AllianceTowersControlled
Definition OutdoorPvPTF.h:176
uint32 second_digit
Definition OutdoorPvPTF.h:179
uint32 m_LockTimer
Definition OutdoorPvPTF.h:173
bool m_JustLocked
Definition OutdoorPvPTF.h:172
uint32 m_LockTimerUpdate
Definition OutdoorPvPTF.h:174
uint32 hours_left
Definition OutdoorPvPTF.h:179
uint32 first_digit
Definition OutdoorPvPTF.h:179
uint32 _typeId
Definition OutdoorPvP.h:270

References OutdoorPvP::_typeId, first_digit, hours_left, m_AllianceTowersControlled, m_HordeTowersControlled, m_IsLocked, m_JustLocked, m_LockTimer, m_LockTimerUpdate, OUTDOOR_PVP_TF, second_digit, and TF_LOCK_TIME.

Member Function Documentation

◆ FillInitialWorldStates()

void OutdoorPvPTF::FillInitialWorldStates ( WorldPackets::WorldState::InitWorldStates packet)
overridevirtual

Reimplemented from OutdoorPvP.

64{
65 packet.Worldstates.reserve(12);
67 packet.Worldstates.emplace_back(WORLD_STATE_OPVP_TF_UI_TOWER_SLIDER_N, 100);
69
79
80 for (OPvPCapturePointMap::iterator itr = _capturePoints.begin(); itr != _capturePoints.end(); ++itr)
81 {
82 itr->second->FillInitialWorldStates(packet);
83 }
84}
@ WORLD_STATE_OPVP_TF_UI_TOWER_SLIDER_N
Definition WorldStateDefines.h:452
@ WORLD_STATE_OPVP_TF_UI_TOWERS_CONTROLLED_DISPLAY
Definition WorldStateDefines.h:448
@ WORLD_STATE_OPVP_TF_UI_LOCKED_TIME_MINUTES_SECOND_DIGIT
Definition WorldStateDefines.h:446
@ WORLD_STATE_OPVP_TF_UI_LOCKED_TIME_HOURS
Definition WorldStateDefines.h:445
@ WORLD_STATE_OPVP_TF_UI_LOCKED_DISPLAY_HORDE
Definition WorldStateDefines.h:471
@ WORLD_STATE_OPVP_TF_UI_LOCKED_DISPLAY_ALLIANCE
Definition WorldStateDefines.h:470
@ WORLD_STATE_OPVP_TF_UI_LOCKED_TIME_MINUTES_FIRST_DIGIT
Definition WorldStateDefines.h:447
@ WORLD_STATE_OPVP_TF_UI_TOWER_SLIDER_DISPLAY
Definition WorldStateDefines.h:451
@ WORLD_STATE_OPVP_TF_UI_TOWER_SLIDER_POS
Definition WorldStateDefines.h:453
@ WORLD_STATE_OPVP_TF_UI_TOWER_COUNT_A
Definition WorldStateDefines.h:449
@ WORLD_STATE_OPVP_TF_UI_TOWER_COUNT_H
Definition WorldStateDefines.h:450
@ WORLD_STATE_OPVP_TF_UI_LOCKED_DISPLAY_NEUTRAL
Definition WorldStateDefines.h:444
OPvPCapturePointMap _capturePoints
Definition OutdoorPvP.h:268
std::vector< WorldStateInfo > Worldstates
Definition WorldStatePackets.h:46

References OutdoorPvP::_capturePoints, first_digit, hours_left, m_AllianceTowersControlled, m_HordeTowersControlled, m_IsLocked, second_digit, WORLD_STATE_OPVP_TF_UI_LOCKED_DISPLAY_ALLIANCE, WORLD_STATE_OPVP_TF_UI_LOCKED_DISPLAY_HORDE, WORLD_STATE_OPVP_TF_UI_LOCKED_DISPLAY_NEUTRAL, WORLD_STATE_OPVP_TF_UI_LOCKED_TIME_HOURS, WORLD_STATE_OPVP_TF_UI_LOCKED_TIME_MINUTES_FIRST_DIGIT, WORLD_STATE_OPVP_TF_UI_LOCKED_TIME_MINUTES_SECOND_DIGIT, WORLD_STATE_OPVP_TF_UI_TOWER_COUNT_A, WORLD_STATE_OPVP_TF_UI_TOWER_COUNT_H, WORLD_STATE_OPVP_TF_UI_TOWER_SLIDER_DISPLAY, WORLD_STATE_OPVP_TF_UI_TOWER_SLIDER_N, WORLD_STATE_OPVP_TF_UI_TOWER_SLIDER_POS, WORLD_STATE_OPVP_TF_UI_TOWERS_CONTROLLED_DISPLAY, and WorldPackets::WorldState::InitWorldStates::Worldstates.

◆ GetAllianceTowersControlled()

uint32 OutdoorPvPTF::GetAllianceTowersControlled ( ) const
309{
311}

References m_AllianceTowersControlled.

◆ GetHordeTowersControlled()

uint32 OutdoorPvPTF::GetHordeTowersControlled ( ) const
319{
321}

References m_HordeTowersControlled.

◆ HandlePlayerEnterZone()

void OutdoorPvPTF::HandlePlayerEnterZone ( Player player,
uint32  zone 
)
overridevirtual

Reimplemented from OutdoorPvP.

287{
288 if (player->GetTeamId() == TEAM_ALLIANCE)
289 {
291 player->CastSpell(player, TF_CAPTURE_BUFF, true);
292 }
293 else
294 {
296 player->CastSpell(player, TF_CAPTURE_BUFF, true);
297 }
299}
@ TF_TOWER_NUM
Definition OutdoorPvPTF.h:54
#define TF_CAPTURE_BUFF
Definition OutdoorPvPTF.h:42
@ TEAM_ALLIANCE
Definition SharedDefines.h:760
virtual void HandlePlayerEnterZone(Player *player, uint32 zone)
Definition OutdoorPvP.cpp:277
TeamId GetTeamId(bool original=false) const
Definition Player.h:2116
SpellCastResult CastSpell(SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
Definition Unit.cpp:1178

References Unit::CastSpell(), Player::GetTeamId(), OutdoorPvP::HandlePlayerEnterZone(), m_AllianceTowersControlled, m_HordeTowersControlled, TEAM_ALLIANCE, TF_CAPTURE_BUFF, and TF_TOWER_NUM.

◆ HandlePlayerLeaveZone()

void OutdoorPvPTF::HandlePlayerLeaveZone ( Player player,
uint32  zone 
)
overridevirtual

Reimplemented from OutdoorPvP.

302{
303 // remove buffs
306}
virtual void HandlePlayerLeaveZone(Player *player, uint32 zone)
Definition OutdoorPvP.cpp:282
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:4941

References OutdoorPvP::HandlePlayerLeaveZone(), Unit::RemoveAurasDueToSpell(), and TF_CAPTURE_BUFF.

◆ IsLocked()

bool OutdoorPvPTF::IsLocked ( ) const
329{
330 return m_IsLocked;
331}

References m_IsLocked.

◆ RecalculateClientUILockTime()

void OutdoorPvPTF::RecalculateClientUILockTime ( )
inline
154 {
155 uint32 minutes_left = m_LockTimer / 60000;
156 hours_left = minutes_left / 60;
157 minutes_left -= hours_left * 60;
158 second_digit = minutes_left % 10;
159 first_digit = minutes_left / 10;
160 }
std::uint32_t uint32
Definition Define.h:107

References first_digit, hours_left, m_LockTimer, and second_digit.

Referenced by SetupOutdoorPvP(), and Update().

◆ ResetZoneToTeamControlled()

void OutdoorPvPTF::ResetZoneToTeamControlled ( TeamId  team)
125{
126 switch (team)
127 {
128 case TEAM_HORDE:
131 break;
132 case TEAM_ALLIANCE:
135 break;
136 case TEAM_NEUTRAL:
139 break;
140 }
141
142 for (auto& [guid, tower] : _capturePoints)
143 {
144 dynamic_cast<OPvPCapturePointTF*>(tower)->ResetToTeamControlled(team);
145 }
146
149}
@ TEAM_NEUTRAL
Definition SharedDefines.h:762
@ TEAM_HORDE
Definition SharedDefines.h:761
Definition OutdoorPvPTF.h:108
void SendUpdateWorldState(uint32 field, uint32 value)
Definition OutdoorPvP.cpp:456

References OutdoorPvP::_capturePoints, m_AllianceTowersControlled, m_HordeTowersControlled, OutdoorPvP::SendUpdateWorldState(), TEAM_ALLIANCE, TEAM_HORDE, TEAM_NEUTRAL, TF_TOWER_NUM, WORLD_STATE_OPVP_TF_UI_TOWER_COUNT_A, and WORLD_STATE_OPVP_TF_UI_TOWER_COUNT_H.

Referenced by SetupOutdoorPvP(), and Update().

◆ SaveRequiredWorldStates()

void OutdoorPvPTF::SaveRequiredWorldStates ( ) const

◆ SendRemoveWorldStates()

void OutdoorPvPTF::SendRemoveWorldStates ( Player player)
overridevirtual

Reimplemented from OutdoorPvP.

87{
91
95
99
103
104 for (int i = 0; i < TF_TOWER_NUM; ++i)
105 {
109 }
110}
const tf_tower_world_state TFTowerWorldStates[TF_TOWER_NUM]
Definition OutdoorPvPTF.h:73
void SendUpdateWorldState(uint32 variable, uint32 value) const
Definition PlayerUpdates.cpp:2243

References Player::SendUpdateWorldState(), TF_TOWER_NUM, TFTowerWorldStates, WORLD_STATE_OPVP_TF_UI_LOCKED_DISPLAY_ALLIANCE, WORLD_STATE_OPVP_TF_UI_LOCKED_DISPLAY_HORDE, WORLD_STATE_OPVP_TF_UI_LOCKED_DISPLAY_NEUTRAL, WORLD_STATE_OPVP_TF_UI_LOCKED_TIME_HOURS, WORLD_STATE_OPVP_TF_UI_LOCKED_TIME_MINUTES_FIRST_DIGIT, WORLD_STATE_OPVP_TF_UI_LOCKED_TIME_MINUTES_SECOND_DIGIT, WORLD_STATE_OPVP_TF_UI_TOWER_COUNT_A, WORLD_STATE_OPVP_TF_UI_TOWER_COUNT_H, WORLD_STATE_OPVP_TF_UI_TOWER_SLIDER_DISPLAY, WORLD_STATE_OPVP_TF_UI_TOWER_SLIDER_N, WORLD_STATE_OPVP_TF_UI_TOWER_SLIDER_POS, and WORLD_STATE_OPVP_TF_UI_TOWERS_CONTROLLED_DISPLAY.

◆ SetAllianceTowersControlled()

void OutdoorPvPTF::SetAllianceTowersControlled ( uint32  count)
314{
316}

References m_AllianceTowersControlled.

◆ SetHordeTowersControlled()

void OutdoorPvPTF::SetHordeTowersControlled ( uint32  count)
324{
326}

References m_HordeTowersControlled.

◆ SetupOutdoorPvP()

bool OutdoorPvPTF::SetupOutdoorPvP ( )
overridevirtual

Reimplemented from OutdoorPvP.

334{
337
339 m_JustLocked = false;
342 hours_left = 6;
343 second_digit = 0;
344 first_digit = 0;
345
346 // add the zones affected by the pvp buff
347 for (uint8 i = 0; i < OutdoorPvPTFBuffZonesNum; ++i)
349
351
357
358 if (m_IsLocked)
359 {
360 // Core shutdown while locked -- init from latest known data in WorldState
361 // Convert from unix
362 int32 const lockRemainingTime = int32((sWorld->getWorldState(WORLD_STATE_OPVP_TF_UI_LOCKED_TIME_HOURS) - GameTime::GetGameTime().count()) * IN_MILLISECONDS);
363 if (lockRemainingTime > 0)
364 {
365 m_LockTimer = lockRemainingTime;
367
368 uint32 const hordeTowers = uint32(sWorld->getWorldState(WORLD_STATE_OPVP_TF_UI_TOWER_COUNT_H));
369 uint32 const allianceTowers = uint32(sWorld->getWorldState(WORLD_STATE_OPVP_TF_UI_TOWER_COUNT_A));
370 TeamId const controllingTeam = hordeTowers > allianceTowers ? TEAM_HORDE : TEAM_ALLIANCE;
371
372 ResetZoneToTeamControlled(controllingTeam);
373 }
374 else
375 {
376 // Lock expired while core was offline
377 m_IsLocked = false;
379 }
380 }
381
382 return true;
383}
std::int32_t int32
Definition Define.h:103
std::uint8_t uint8
Definition Define.h:109
const uint32 OutdoorPvPTFBuffZones[OutdoorPvPTFBuffZonesNum]
Definition OutdoorPvPTF.h:26
@ TF_TOWER_SE
Definition OutdoorPvPTF.h:52
@ TF_TOWER_N
Definition OutdoorPvPTF.h:50
@ TF_TOWER_NE
Definition OutdoorPvPTF.h:51
@ TF_TOWER_NW
Definition OutdoorPvPTF.h:49
@ TF_TOWER_S
Definition OutdoorPvPTF.h:53
const uint8 OutdoorPvPTFBuffZonesNum
Definition OutdoorPvPTF.h:24
TeamId
Definition SharedDefines.h:759
void RecalculateClientUILockTime()
Definition OutdoorPvPTF.h:153
void SaveRequiredWorldStates() const
Definition OutdoorPvPTF.cpp:112
void ResetZoneToTeamControlled(TeamId team)
Definition OutdoorPvPTF.cpp:124
void RegisterZone(uint32 zoneid)
Definition OutdoorPvP.cpp:641
void SetMapFromZone(uint32 zone)
Definition OutdoorPvP.cpp:718
void AddCapturePoint(OPvPCapturePoint *cp)
Definition OutdoorPvP.h:254

References OutdoorPvP::AddCapturePoint(), first_digit, GameTime::GetGameTime(), hours_left, IN_MILLISECONDS, m_AllianceTowersControlled, m_HordeTowersControlled, m_IsLocked, m_JustLocked, m_LockTimer, m_LockTimerUpdate, OutdoorPvPTFBuffZones, OutdoorPvPTFBuffZonesNum, RecalculateClientUILockTime(), OutdoorPvP::RegisterZone(), ResetZoneToTeamControlled(), SaveRequiredWorldStates(), second_digit, OutdoorPvP::SetMapFromZone(), sWorld, TEAM_ALLIANCE, TEAM_HORDE, TF_LOCK_TIME, TF_TOWER_N, TF_TOWER_NE, TF_TOWER_NW, TF_TOWER_S, TF_TOWER_SE, WORLD_STATE_OPVP_TF_UI_LOCKED_TIME_HOURS, WORLD_STATE_OPVP_TF_UI_TOWER_COUNT_A, WORLD_STATE_OPVP_TF_UI_TOWER_COUNT_H, and WORLD_STATE_OPVP_TF_UI_TOWERS_CONTROLLED_DISPLAY.

◆ Update()

bool OutdoorPvPTF::Update ( uint32  diff)
overridevirtual

Reimplemented from OutdoorPvP.

204{
205 bool changed = OutdoorPvP::Update(diff);
206
207 if (changed)
208 {
210 {
212 m_IsLocked = true;
213 m_JustLocked = true;
218 }
220 {
222 m_IsLocked = true;
223 m_JustLocked = true;
228 }
229 else
230 {
233 }
234
237 }
238
239 if (m_IsLocked)
240 {
241 if (m_JustLocked)
242 {
243 m_JustLocked = false;
245 }
246
247 // lock timer is down, release lock
248 if (m_LockTimer < diff)
249 {
252 m_IsLocked = false;
253
256
261 }
262 else
263 {
264 // worldstateui update timer is down, update ui with new time data
265 if (m_LockTimerUpdate < diff)
266 {
269
273 }
274 else
275 {
276 m_LockTimerUpdate -= diff;
277 }
278
279 m_LockTimer -= diff;
280 }
281 }
282
283 return changed;
284}
const uint32 TF_LOCK_TIME_UPDATE
Definition OutdoorPvPTF.h:39
void TeamApplyBuff(TeamId teamId, uint32 spellId, uint32 spellId2=0, Player *sameMapPlr=nullptr)
Definition OutdoorPvP.cpp:670
virtual bool Update(uint32 diff)
Definition OutdoorPvP.cpp:304
void TeamCastSpell(TeamId team, int32 spellId, Player *sameMapPlr=nullptr)
Definition OutdoorPvP.cpp:652

References first_digit, hours_left, m_AllianceTowersControlled, m_HordeTowersControlled, m_IsLocked, m_JustLocked, m_LockTimer, m_LockTimerUpdate, RecalculateClientUILockTime(), ResetZoneToTeamControlled(), SaveRequiredWorldStates(), second_digit, OutdoorPvP::SendUpdateWorldState(), TEAM_ALLIANCE, TEAM_HORDE, TEAM_NEUTRAL, OutdoorPvP::TeamApplyBuff(), OutdoorPvP::TeamCastSpell(), TF_CAPTURE_BUFF, TF_LOCK_TIME, TF_LOCK_TIME_UPDATE, TF_TOWER_NUM, OutdoorPvP::Update(), WORLD_STATE_OPVP_TF_UI_LOCKED_DISPLAY_ALLIANCE, WORLD_STATE_OPVP_TF_UI_LOCKED_DISPLAY_HORDE, WORLD_STATE_OPVP_TF_UI_LOCKED_DISPLAY_NEUTRAL, WORLD_STATE_OPVP_TF_UI_LOCKED_TIME_HOURS, WORLD_STATE_OPVP_TF_UI_LOCKED_TIME_MINUTES_FIRST_DIGIT, WORLD_STATE_OPVP_TF_UI_LOCKED_TIME_MINUTES_SECOND_DIGIT, WORLD_STATE_OPVP_TF_UI_TOWER_COUNT_A, WORLD_STATE_OPVP_TF_UI_TOWER_COUNT_H, and WORLD_STATE_OPVP_TF_UI_TOWERS_CONTROLLED_DISPLAY.

Member Data Documentation

◆ first_digit

◆ hours_left

◆ m_AllianceTowersControlled

◆ m_HordeTowersControlled

◆ m_IsLocked

bool OutdoorPvPTF::m_IsLocked
private

◆ m_JustLocked

bool OutdoorPvPTF::m_JustLocked
private

◆ m_LockTimer

◆ m_LockTimerUpdate

uint32 OutdoorPvPTF::m_LockTimerUpdate
private

◆ second_digit


The documentation for this class was generated from the following files: