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 (WorldPacket &data) 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 ()
 
 ~OutdoorPvP () override
 
void DeleteSpawns ()
 
virtual void FillInitialWorldStates (WorldPacket &)
 
virtual bool HandleAreaTrigger (Player *player, uint32 trigger)
 
virtual bool HandleCustomSpell (Player *player, uint32 spellId, GameObject *go)
 
virtual bool HandleOpenGo (Player *player, GameObject *go)
 
virtual bool SetupOutdoorPvP ()
 
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 bool Update (uint32 diff)
 
virtual void HandleKill (Player *killer, Unit *killed)
 
virtual void HandleKillImpl (Player *, Unit *)
 
bool IsInsideObjective (Player *player) const
 
virtual void AwardKillBonus (Player *)
 
uint32 GetTypeId ()
 
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 OnCreatureCreate (Creature *)
 
virtual void OnCreatureRemove (Creature *)
 
virtual void OnGameObjectCreate (GameObject *)
 
virtual void OnGameObjectRemove (GameObject *)
 
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
virtual void SendRemoveWorldStates (Player *)
 
void BroadcastPacket (WorldPacket &data) const
 
virtual void HandlePlayerEnterZone (Player *player, uint32 zone)
 
virtual void HandlePlayerLeaveZone (Player *player, uint32 zone)
 
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 m_capturePoints
 
PlayerSet m_players [2]
 
uint32 m_TypeId
 
bool m_sendUpdate
 
std::map< ObjectGuid::LowType, GameObject * > m_GoScriptStore
 
std::map< ObjectGuid::LowType, Creature * > m_CreatureScriptStore
 
Mapm_map
 

Detailed Description

Constructor & Destructor Documentation

◆ OutdoorPvPTF()

OutdoorPvPTF::OutdoorPvPTF ( )
30{
32
33 m_IsLocked = false;
34 m_JustLocked = false;
37
40
41 hours_left = 6;
42 second_digit = 0;
43 first_digit = 0;
44}
@ OUTDOOR_PVP_TF
Definition: OutdoorPvP.h:31
const uint32 TF_LOCK_TIME
Definition: OutdoorPvPTF.h:35
uint32 m_TypeId
Definition: OutdoorPvP.h:267
bool m_IsLocked
Definition: OutdoorPvPTF.h:189
uint32 m_HordeTowersControlled
Definition: OutdoorPvPTF.h:195
uint32 m_AllianceTowersControlled
Definition: OutdoorPvPTF.h:194
uint32 second_digit
Definition: OutdoorPvPTF.h:197
uint32 m_LockTimer
Definition: OutdoorPvPTF.h:191
bool m_JustLocked
Definition: OutdoorPvPTF.h:190
uint32 m_LockTimerUpdate
Definition: OutdoorPvPTF.h:192
uint32 hours_left
Definition: OutdoorPvPTF.h:197
uint32 first_digit
Definition: OutdoorPvPTF.h:197

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

Member Function Documentation

◆ FillInitialWorldStates()

void OutdoorPvPTF::FillInitialWorldStates ( WorldPacket data)
overridevirtual

Reimplemented from OutdoorPvP.

60{
61 data << TF_UI_TOWER_SLIDER_POS << uint32(50);
62 data << TF_UI_TOWER_SLIDER_N << uint32(100);
64
68
72
76
77 for (OPvPCapturePointMap::iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr)
78 {
79 itr->second->FillInitialWorldStates(data);
80 }
81}
std::uint32_t uint32
Definition: Define.h:108
@ TF_UI_TOWER_SLIDER_DISPLAY
Definition: OutdoorPvPTF.h:103
@ TF_UI_TOWER_SLIDER_POS
Definition: OutdoorPvPTF.h:101
@ TF_UI_LOCKED_TIME_MINUTES_FIRST_DIGIT
Definition: OutdoorPvPTF.h:109
@ TF_UI_LOCKED_DISPLAY_ALLIANCE
Definition: OutdoorPvPTF.h:114
@ TF_UI_LOCKED_TIME_MINUTES_SECOND_DIGIT
Definition: OutdoorPvPTF.h:110
@ TF_UI_LOCKED_DISPLAY_NEUTRAL
Definition: OutdoorPvPTF.h:112
@ TF_UI_TOWER_SLIDER_N
Definition: OutdoorPvPTF.h:102
@ TF_UI_LOCKED_DISPLAY_HORDE
Definition: OutdoorPvPTF.h:113
@ TF_UI_TOWER_COUNT_H
Definition: OutdoorPvPTF.h:105
@ TF_UI_TOWERS_CONTROLLED_DISPLAY
Definition: OutdoorPvPTF.h:107
@ TF_UI_TOWER_COUNT_A
Definition: OutdoorPvPTF.h:106
@ TF_UI_LOCKED_TIME_HOURS
Definition: OutdoorPvPTF.h:111
OPvPCapturePointMap m_capturePoints
Definition: OutdoorPvP.h:263

References first_digit, hours_left, m_AllianceTowersControlled, OutdoorPvP::m_capturePoints, m_HordeTowersControlled, m_IsLocked, second_digit, TF_UI_LOCKED_DISPLAY_ALLIANCE, TF_UI_LOCKED_DISPLAY_HORDE, TF_UI_LOCKED_DISPLAY_NEUTRAL, TF_UI_LOCKED_TIME_HOURS, TF_UI_LOCKED_TIME_MINUTES_FIRST_DIGIT, TF_UI_LOCKED_TIME_MINUTES_SECOND_DIGIT, TF_UI_TOWER_COUNT_A, TF_UI_TOWER_COUNT_H, TF_UI_TOWER_SLIDER_DISPLAY, TF_UI_TOWER_SLIDER_N, TF_UI_TOWER_SLIDER_POS, and TF_UI_TOWERS_CONTROLLED_DISPLAY.

◆ GetAllianceTowersControlled()

uint32 OutdoorPvPTF::GetAllianceTowersControlled ( ) const
306{
308}

References m_AllianceTowersControlled.

◆ GetHordeTowersControlled()

uint32 OutdoorPvPTF::GetHordeTowersControlled ( ) const
316{
318}

References m_HordeTowersControlled.

◆ HandlePlayerEnterZone()

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

Reimplemented from OutdoorPvP.

284{
285 if (player->GetTeamId() == TEAM_ALLIANCE)
286 {
288 player->CastSpell(player, TF_CAPTURE_BUFF, true);
289 }
290 else
291 {
293 player->CastSpell(player, TF_CAPTURE_BUFF, true);
294 }
296}
@ TF_TOWER_NUM
Definition: OutdoorPvPTF.h:53
#define TF_CAPTURE_BUFF
Definition: OutdoorPvPTF.h:41
@ TEAM_ALLIANCE
Definition: SharedDefines.h:732
TeamId GetTeamId(bool original=false) const
Definition: Player.h:2059
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:1169
virtual void HandlePlayerEnterZone(Player *player, uint32 zone)
Definition: OutdoorPvP.cpp:255

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.

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

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

◆ IsLocked()

bool OutdoorPvPTF::IsLocked ( ) const
326{
327 return m_IsLocked;
328}

References m_IsLocked.

◆ RecalculateClientUILockTime()

void OutdoorPvPTF::RecalculateClientUILockTime ( )
inline
172 {
173 uint32 minutes_left = m_LockTimer / 60000;
174 hours_left = minutes_left / 60;
175 minutes_left -= hours_left * 60;
176 second_digit = minutes_left % 10;
177 first_digit = minutes_left / 10;
178 }

References first_digit, hours_left, m_LockTimer, and second_digit.

Referenced by SetupOutdoorPvP(), and Update().

◆ ResetZoneToTeamControlled()

void OutdoorPvPTF::ResetZoneToTeamControlled ( TeamId  team)
122{
123 switch (team)
124 {
125 case TEAM_HORDE:
128 break;
129 case TEAM_ALLIANCE:
132 break;
133 case TEAM_NEUTRAL:
136 break;
137 }
138
139 for (auto& [guid, tower] : m_capturePoints)
140 {
141 dynamic_cast<OPvPCapturePointTF*>(tower)->ResetToTeamControlled(team);
142 }
143
146}
@ TEAM_NEUTRAL
Definition: SharedDefines.h:734
@ TEAM_HORDE
Definition: SharedDefines.h:733
void SendUpdateWorldState(uint32 field, uint32 value)
Definition: OutdoorPvP.cpp:411
Definition: OutdoorPvPTF.h:125

References m_AllianceTowersControlled, OutdoorPvP::m_capturePoints, m_HordeTowersControlled, OutdoorPvP::SendUpdateWorldState(), TEAM_ALLIANCE, TEAM_HORDE, TEAM_NEUTRAL, TF_TOWER_NUM, TF_UI_TOWER_COUNT_A, and TF_UI_TOWER_COUNT_H.

Referenced by SetupOutdoorPvP(), and Update().

◆ SaveRequiredWorldStates()

void OutdoorPvPTF::SaveRequiredWorldStates ( ) const
110{
113
115
116 // Save expiry as unix
117 uint32 const lockExpireTime = GameTime::GetGameTime().count() + (m_LockTimer / IN_MILLISECONDS);
118 sWorld->setWorldState(TF_UI_LOCKED_TIME_HOURS, lockExpireTime);
119}
constexpr auto IN_MILLISECONDS
Definition: Common.h:62
#define sWorld
Definition: World.h:451
Seconds GetGameTime()
Definition: GameTime.cpp:38

References GameTime::GetGameTime(), IN_MILLISECONDS, m_AllianceTowersControlled, m_HordeTowersControlled, m_IsLocked, m_LockTimer, sWorld, TF_UI_LOCKED_TIME_HOURS, TF_UI_TOWER_COUNT_A, TF_UI_TOWER_COUNT_H, and TF_UI_TOWERS_CONTROLLED_DISPLAY.

Referenced by SetupOutdoorPvP(), and Update().

◆ SendRemoveWorldStates()

void OutdoorPvPTF::SendRemoveWorldStates ( Player player)
overridevirtual

Reimplemented from OutdoorPvP.

84{
88
92
96
100
101 for (int i = 0; i < TF_TOWER_NUM; ++i)
102 {
106 }
107}
const tf_tower_world_state TFTowerWorldStates[TF_TOWER_NUM]
Definition: OutdoorPvPTF.h:72
void SendUpdateWorldState(uint32 variable, uint32 value) const
Definition: PlayerUpdates.cpp:2194

References Player::SendUpdateWorldState(), TF_TOWER_NUM, TF_UI_LOCKED_DISPLAY_ALLIANCE, TF_UI_LOCKED_DISPLAY_HORDE, TF_UI_LOCKED_DISPLAY_NEUTRAL, TF_UI_LOCKED_TIME_HOURS, TF_UI_LOCKED_TIME_MINUTES_FIRST_DIGIT, TF_UI_LOCKED_TIME_MINUTES_SECOND_DIGIT, TF_UI_TOWER_COUNT_A, TF_UI_TOWER_COUNT_H, TF_UI_TOWER_SLIDER_DISPLAY, TF_UI_TOWER_SLIDER_N, TF_UI_TOWER_SLIDER_POS, TF_UI_TOWERS_CONTROLLED_DISPLAY, and TFTowerWorldStates.

◆ SetAllianceTowersControlled()

void OutdoorPvPTF::SetAllianceTowersControlled ( uint32  count)
311{
313}

References m_AllianceTowersControlled.

◆ SetHordeTowersControlled()

void OutdoorPvPTF::SetHordeTowersControlled ( uint32  count)
321{
323}

References m_HordeTowersControlled.

◆ SetupOutdoorPvP()

bool OutdoorPvPTF::SetupOutdoorPvP ( )
overridevirtual

Reimplemented from OutdoorPvP.

331{
334
335 m_IsLocked = bool(sWorld->getWorldState(TF_UI_TOWERS_CONTROLLED_DISPLAY));
336 m_JustLocked = false;
339 hours_left = 6;
340 second_digit = 0;
341 first_digit = 0;
342
343 // add the zones affected by the pvp buff
344 for (uint8 i = 0; i < OutdoorPvPTFBuffZonesNum; ++i)
346
348
354
355 if (m_IsLocked)
356 {
357 // Core shutdown while locked -- init from latest known data in WorldState
358 // Convert from unix
359 int32 const lockRemainingTime = int32((sWorld->getWorldState(TF_UI_LOCKED_TIME_HOURS) - GameTime::GetGameTime().count()) * IN_MILLISECONDS);
360 if (lockRemainingTime > 0)
361 {
362 m_LockTimer = lockRemainingTime;
364
365 uint32 const hordeTowers = uint32(sWorld->getWorldState(TF_UI_TOWER_COUNT_H));
366 uint32 const allianceTowers = uint32(sWorld->getWorldState(TF_UI_TOWER_COUNT_A));
367 TeamId const controllingTeam = hordeTowers > allianceTowers ? TEAM_HORDE : TEAM_ALLIANCE;
368
369 ResetZoneToTeamControlled(controllingTeam);
370 }
371 else
372 {
373 // Lock expired while core was offline
374 m_IsLocked = false;
376 }
377 }
378
379 return true;
380}
std::int32_t int32
Definition: Define.h:104
std::uint8_t uint8
Definition: Define.h:110
const uint32 OutdoorPvPTFBuffZones[OutdoorPvPTFBuffZonesNum]
Definition: OutdoorPvPTF.h:25
@ TF_TOWER_SE
Definition: OutdoorPvPTF.h:51
@ TF_TOWER_N
Definition: OutdoorPvPTF.h:49
@ TF_TOWER_NE
Definition: OutdoorPvPTF.h:50
@ TF_TOWER_NW
Definition: OutdoorPvPTF.h:48
@ TF_TOWER_S
Definition: OutdoorPvPTF.h:52
const uint8 OutdoorPvPTFBuffZonesNum
Definition: OutdoorPvPTF.h:23
TeamId
Definition: SharedDefines.h:731
void RegisterZone(uint32 zoneid)
Definition: OutdoorPvP.cpp:591
void SetMapFromZone(uint32 zone)
Definition: OutdoorPvP.cpp:660
void AddCapturePoint(OPvPCapturePoint *cp)
Definition: OutdoorPvP.h:281
void RecalculateClientUILockTime()
Definition: OutdoorPvPTF.h:171
void SaveRequiredWorldStates() const
Definition: OutdoorPvPTF.cpp:109
void ResetZoneToTeamControlled(TeamId team)
Definition: OutdoorPvPTF.cpp:121

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, TF_UI_LOCKED_TIME_HOURS, TF_UI_TOWER_COUNT_A, TF_UI_TOWER_COUNT_H, and TF_UI_TOWERS_CONTROLLED_DISPLAY.

◆ Update()

bool OutdoorPvPTF::Update ( uint32  diff)
overridevirtual

Reimplemented from OutdoorPvP.

201{
202 bool changed = OutdoorPvP::Update(diff);
203
204 if (changed)
205 {
207 {
209 m_IsLocked = true;
210 m_JustLocked = true;
215 }
217 {
219 m_IsLocked = true;
220 m_JustLocked = true;
225 }
226 else
227 {
230 }
231
234 }
235
236 if (m_IsLocked)
237 {
238 if (m_JustLocked)
239 {
240 m_JustLocked = false;
242 }
243
244 // lock timer is down, release lock
245 if (m_LockTimer < diff)
246 {
249 m_IsLocked = false;
250
253
258 }
259 else
260 {
261 // worldstateui update timer is down, update ui with new time data
262 if (m_LockTimerUpdate < diff)
263 {
266
270 }
271 else
272 {
273 m_LockTimerUpdate -= diff;
274 }
275
276 m_LockTimer -= diff;
277 }
278 }
279
280 return changed;
281}
const uint32 TF_LOCK_TIME_UPDATE
Definition: OutdoorPvPTF.h:38
void TeamApplyBuff(TeamId teamId, uint32 spellId, uint32 spellId2=0, Player *sameMapPlr=nullptr)
Definition: OutdoorPvP.cpp:620
virtual bool Update(uint32 diff)
Definition: OutdoorPvP.cpp:276
void TeamCastSpell(TeamId team, int32 spellId, Player *sameMapPlr=nullptr)
Definition: OutdoorPvP.cpp:602

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, TF_UI_LOCKED_DISPLAY_ALLIANCE, TF_UI_LOCKED_DISPLAY_HORDE, TF_UI_LOCKED_DISPLAY_NEUTRAL, TF_UI_LOCKED_TIME_HOURS, TF_UI_LOCKED_TIME_MINUTES_FIRST_DIGIT, TF_UI_LOCKED_TIME_MINUTES_SECOND_DIGIT, TF_UI_TOWER_COUNT_A, TF_UI_TOWER_COUNT_H, TF_UI_TOWERS_CONTROLLED_DISPLAY, and OutdoorPvP::Update().

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