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

#include "BattlefieldWG.h"

Inheritance diagram for BattlefieldWG:
Battlefield ZoneScript

Public Member Functions

 ~BattlefieldWG () override
 
void OnBattleStart () override
 Called when the battle start.
 
void OnBattleEnd (bool endByTimer) override
 Called when battle end.
 
void OnStartGrouping () override
 Called when grouping starts (15 minutes before battlestart)
 
void OnPlayerJoinWar (Player *player) override
 Called when player accept invite to join battle.
 
void OnPlayerLeaveWar (Player *player) override
 Called when player left the battle.
 
void OnPlayerLeaveZone (Player *player) override
 Called when player left the WG zone.
 
void OnPlayerEnterZone (Player *player) override
 Called when player enters in WG zone.
 
bool Update (uint32 diff) override
 Called for update battlefield data.
 
void OnCreatureCreate (Creature *creature) override
 Called when a creature is created.
 
void OnCreatureRemove (Creature *creature) override
 Called when a creature is removed.
 
void OnGameObjectCreate (GameObject *go) override
 Called when a gameobject is created.
 
void BrokenWallOrTower (TeamId team)
 Called when a wall/tower is broken.
 
void UpdateDamagedTowerCount (TeamId team)
 Called when a tower is damaged.
 
void UpdatedDestroyedTowerCount (TeamId team, GameObject *go)
 Called when tower is broken.
 
void RemoveAurasFromPlayer (Player *player)
 
bool SetupBattlefield () override
 Called when battlefield is setup, at server start.
 
GameObjectGetRelic ()
 Return pointer to relic object.
 
bool CanInteractWithRelic ()
 Define relic object.
 
void SetRelicInteractible (bool allow)
 Define if player can interact with the relic.
 
void UpdateCounterVehicle (bool init)
 Vehicle world states update.
 
void UpdateVehicleCountWG ()
 
void CapturePointTaken (uint32 areaId)
 
void SendInitWorldStatesTo (Player *player)
 
void SendInitWorldStatesToAll () override
 Send all worldstate data to all players in zone.
 
void FillInitialWorldStates (WorldPackets::WorldState::InitWorldStates &packet) override
 
void SendUpdateWorldStates (Player *player=nullptr) override
 
void SendUpdateWorldStateMessage (uint32 variable, uint32 value, Player *player=nullptr)
 
void HandleKill (Player *killer, Unit *victim) override
 Called when a Unit is killed in battlefield zone.
 
void OnUnitDeath (Unit *unit) override
 
void PromotePlayer (Player *killer)
 
uint32 GetHonorBuff (int32 stack) const
 
void UpdateTenacity ()
 
void AddUpdateTenacity (Player *player)
 
void RemoveUpdateTenacity (Player *player)
 
void ProcessEvent (WorldObject *obj, uint32 eventId) override
 
bool FindAndRemoveVehicleFromList (Unit *vehicle)
 
uint8 GetSpiritGraveyardId (uint32 areaId) const
 
uint32 GetAreaByGraveyardId (uint8 gId) const
 
uint32 GetData (uint32 data) const override
 
bool IsKeepNpc (uint32 entry)
 
- Public Member Functions inherited from Battlefield
 Battlefield ()
 Constructor.
 
 ~Battlefield () override
 Destructor.
 
void SendUpdateWorldState (uint32 field, uint32 value)
 Update data of a worldstate to all players present in zone.
 
void InvitePlayersInZoneToQueue ()
 Invite all players in zone to join the queue, called x minutes before battle start in Update()
 
void InvitePlayersInQueueToWar ()
 Invite all players in queue to join battle on battle start.
 
void InvitePlayersInZoneToWar ()
 Invite all players in zone to join battle on battle start.
 
uint32 GetTypeId () const
 
uint32 GetZoneId () const
 
void TeamApplyBuff (TeamId team, uint32 spellId, uint32 spellId2=0)
 
bool IsWarTime () const
 Return true if battle is started, false if battle is not started.
 
void ToggleBattlefield (bool enable)
 Enable or Disable battlefield.
 
bool IsEnabled () const
 Return if battlefield is enabled.
 
void KickPlayerFromBattlefield (ObjectGuid guid)
 Kick player from battlefield and teleport him to kick-point location.
 
void HandlePlayerEnterZone (Player *player, uint32 zone)
 Called when player (player) enters the zone.
 
void HandlePlayerLeaveZone (Player *player, uint32 zone)
 Called when player (player) leaves the zone.
 
uint64 GetData64 (uint32 dataId) const override
 
void SetData64 (uint32 dataId, uint64 value) override
 
void SetData (uint32 dataId, uint32 value) override
 
virtual void UpdateData (uint32 index, int32 pad)
 
TeamId GetDefenderTeam () const
 
TeamId GetAttackerTeam () const
 
TeamId GetOtherTeam (TeamId team) const
 
void SetDefenderTeam (TeamId team)
 
GroupGetFreeBfRaid (TeamId teamId)
 Find a not full battlefield group, if there is no, create one.
 
GroupGetGroupPlayer (ObjectGuid guid, TeamId teamId)
 Return battlefield group where player is.
 
bool AddOrSetPlayerToCorrectBfGroup (Player *player)
 Force player to join a battlefield group.
 
GraveyardStruct const * GetClosestGraveyard (Player *player)
 
virtual void AddPlayerToResurrectQueue (ObjectGuid npcGuid, ObjectGuid playerGuid)
 
void RemovePlayerFromResurrectQueue (ObjectGuid playerGuid)
 
void SetGraveyardNumber (uint32 number)
 
BfGraveyardGetGraveyardById (uint32 id) const
 
CreatureSpawnCreature (uint32 entry, float x, float y, float z, float o, TeamId teamId)
 
CreatureSpawnCreature (uint32 entry, Position pos, TeamId teamId)
 
GameObjectSpawnGameObject (uint32 entry, float x, float y, float z, float o)
 
CreatureGetCreature (ObjectGuid const &guid)
 
GameObjectGetGameObject (ObjectGuid const &guid)
 
void SendWarning (uint8 id, WorldObject const *target=nullptr)
 
void PlayerAcceptInviteToQueue (Player *player)
 
void PlayerAcceptInviteToWar (Player *player)
 
uint32 GetBattleId () const
 
void AskToLeaveQueue (Player *player)
 
void PlayerAskToLeave (Player *player)
 
bool CanFlyIn () const
 Return if we can use mount in battlefield.
 
void SendAreaSpiritHealerQueryOpcode (Player *player, ObjectGuid const &guid)
 
void StartBattle ()
 
void EndBattle (bool endByTimer)
 
void HideNpc (Creature *creature)
 
void ShowNpc (Creature *creature, bool aggressive)
 
GraveyardVect const & GetGraveyardVector () const
 
uint32 GetTimer () const
 
void SetTimer (uint32 timer)
 
uint32 GetPlayersInWarCount (TeamId teamId) const
 
uint32 GetPlayersInZoneCount (TeamId teamId) const
 
uint32 GetMaxPlayersPerTeam () const
 
bool HasWarVacancy (TeamId teamId) const
 Returns true if there is still room for another player on the given team in the active war.
 
GuidUnorderedSet const & GetPlayersQueueSet (TeamId teamId) const
 Returns the set of players waiting in the pre-battle queue (per team, read-only).
 
PlayerTimerMap const & GetInvitedPlayersMap (TeamId teamId) const
 
GuidUnorderedSet const & GetPlayersInWarSet (TeamId teamId) const
 Returns the set of players actively fighting in the war (per team, read-only).
 
void DoPlaySoundToAll (uint32 soundId)
 
void InvitePlayerToQueue (Player *player)
 
void InvitePlayerToWar (Player *player)
 
void InitStalker (uint32 entry, float x, float y, float z, float o)
 
- 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 OnGameObjectRemove (GameObject *)
 
virtual void OnCreatureEvade (Creature *)
 
virtual ObjectGuid GetGuidData (uint32) const
 
virtual void SetGuidData (uint32, ObjectGuid)
 

Protected Attributes

bool IsRelicInteractible
 
Workshop WorkshopsList
 
GameObjectSet DefenderPortalList
 
GameObjectSet KeepGameObject [2]
 
GameObjectBuilding BuildingsInZone
 
GuidUnorderedSet Vehicles [2]
 
GuidUnorderedSet CanonList
 
GuidUnorderedSet KeepCreature [2]
 
GuidUnorderedSet OutsideCreature [2]
 
GuidUnorderedSet UpdateTenacityList
 
int32 TenacityStack
 
ObjectGuid TitansRelic
 
- Protected Attributes inherited from Battlefield
ObjectGuid StalkerGuid
 
uint32 Timer
 
bool Enabled
 
bool Active
 
TeamId DefenderTeam
 
BfCapturePointVector CapturePoints
 
GuidUnorderedSet Players [PVP_TEAMS_COUNT]
 
GuidUnorderedSet PlayersInQueue [PVP_TEAMS_COUNT]
 
GuidUnorderedSet PlayersInWar [PVP_TEAMS_COUNT]
 
PlayerTimerMap InvitedPlayers [PVP_TEAMS_COUNT]
 
PlayerTimerMap PlayersWillBeKick [PVP_TEAMS_COUNT]
 
uint32 TypeId
 
uint32 BattleId
 
uint32 ZoneId
 
uint32 MapId
 
MapBfMap
 
uint32 MaxPlayer
 
uint32 MinPlayer
 
uint32 MinLevel
 
uint32 BattleTime
 
uint32 NoWarBattleTime
 
uint32 RestartAfterCrash
 
uint32 TimeForAcceptInvite
 
WorldLocation KickPosition
 
GraveyardVect GraveyardList
 
uint32 StartGroupingTimer
 
bool StartGrouping
 
TaskScheduler _scheduler
 
GuidUnorderedSet Groups [PVP_TEAMS_COUNT]
 
std::vector< uint64Data64
 
std::vector< uint32Data32
 

Additional Inherited Members

- Public Types inherited from Battlefield
using BfCapturePointVector = std::vector< BfCapturePoint * >
 Vector of capture points belonging to this battlefield.
 
- Protected Member Functions inherited from Battlefield
void KickAfkPlayers ()
 
virtual void SendRemoveWorldStates (Player *)
 
void BroadcastPacketToZone (WorldPacket const *data) const
 
void BroadcastPacketToQueue (WorldPacket const *data) const
 
void BroadcastPacketToWar (WorldPacket const *data) const
 
void AddCapturePoint (BfCapturePoint *cp)
 
void RegisterZone (uint32 zoneId)
 
bool HasPlayer (Player *player) const
 
void TeamCastSpell (TeamId team, int32 spellId)
 
bool IsPlayerInWarOrInvited (Player *player) const
 Returns true if the player is already tracked as actively in the war or invited to join it.
 
template<typename Func >
void ForEachPlayerInZone (Func &&fn) const
 
template<typename Func >
void ForEachPlayerInQueue (Func &&fn) const
 
template<typename Func >
void ForEachPlayerInWar (Func &&fn) const
 
template<typename Func >
void ForEachPlayerInWar (TeamId team, Func &&fn) const
 

Detailed Description

Constructor & Destructor Documentation

◆ ~BattlefieldWG()

BattlefieldWG::~BattlefieldWG ( )
override
Todo:

: Implement proper support for vehicle+player teleportation

: Use spell victory/defeat in wg instead of RewardMarkOfHonor() && RewardHonor

: Add proper implement of achievement

38{
39 for (WGWorkshop* workshop : WorkshopsList)
40 delete workshop;
41
43 delete building;
44}
Workshop WorkshopsList
Definition BattlefieldWG.h:439
GameObjectBuilding BuildingsInZone
Definition BattlefieldWG.h:443
Definition BattlefieldWG.h:1048
Definition BattlefieldWG.h:1401

References BuildingsInZone, and WorkshopsList.

Member Function Documentation

◆ AddUpdateTenacity()

void BattlefieldWG::AddUpdateTenacity ( Player player)
1146{
1147 UpdateTenacityList.insert(player->GetGUID());
1148}
GuidUnorderedSet UpdateTenacityList
Definition BattlefieldWG.h:449
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:114

References Object::GetGUID(), and UpdateTenacityList.

Referenced by OnPlayerJoinWar().

◆ BrokenWallOrTower()

void BattlefieldWG::BrokenWallOrTower ( TeamId  team)

Called when a wall/tower is broken.

  • Update quest
1020{
1021 // might be some use for this in the future. old code commented out below. KL
1022 /* if (team == GetDefenderTeam())
1023 {
1024 for (ObjectGuid const& guid : PlayersInWar[GetAttackerTeam()])
1025 {
1026 if (Player* player = ObjectAccessor::FindPlayer(guid))
1027 IncrementQuest(player, WGQuest[player->GetTeamId()][2], true);
1028 }
1029 }*/
1030}

Referenced by BfWGGameObjectBuilding::Destroyed().

◆ CanInteractWithRelic()

bool BattlefieldWG::CanInteractWithRelic ( )
inline

Define relic object.

Check if players can interact with the relic (Only if the last door has been broken)

372{ return IsRelicInteractible; }
bool IsRelicInteractible
Definition BattlefieldWG.h:437

References IsRelicInteractible.

Referenced by ProcessEvent().

◆ CapturePointTaken()

void BattlefieldWG::CapturePointTaken ( uint32  areaId)
340{
341 for (uint8 i = 0; i < PVP_TEAMS_COUNT; ++i)
342 for (ObjectGuid const& guid : Players[i])
343 if (Player* player = ObjectAccessor::FindPlayer(guid))
344 if (player->GetAreaId() == areaId)
345 player->UpdateAreaDependentAuras(areaId);
346}
std::uint8_t uint8
Definition Define.h:109
uint8 constexpr PVP_TEAMS_COUNT
Definition SharedDefines.h:3703
GuidUnorderedSet Players[PVP_TEAMS_COUNT]
Definition Battlefield.h:393
Definition ObjectGuid.h:118
Definition Player.h:1084
Definition ObjectAccessor.h:61
Player * FindPlayer(ObjectGuid const guid)
Definition ObjectAccessor.cpp:245

References ObjectAccessor::FindPlayer(), Battlefield::Players, and PVP_TEAMS_COUNT.

Referenced by WGWorkshop::GiveControlTo().

◆ FillInitialWorldStates()

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

Implements Battlefield.

937{
938 uint32 timer = GetTimer() / 1000;
939 bool iconActive = timer < 15 * MINUTE || IsWarTime();
940
941 packet.Worldstates.reserve(4+4+WG_MAX_OBJ+WG_MAX_WORKSHOP);
944
945 // Note: cleanup these two, their names look awkward
946 packet.Worldstates.emplace_back(WORLD_STATE_BATTLEFIELD_WG_ACTIVE, IsWarTime() ? 0 : 1);
947 packet.Worldstates.emplace_back(WORLD_STATE_BATTLEFIELD_WG_SHOW, IsWarTime() ? 1 : 0);
948 packet.Worldstates.emplace_back(WORLD_STATE_BATTLEFIELD_WG_CONTROL, DefenderTeam == TEAM_ALLIANCE ? 2 : 1); // Alliance 2, Hord 1
949 packet.Worldstates.emplace_back(WORLD_STATE_BATTLEFIELD_WG_ICON_ACTIVE, iconActive ? 1 : 0);
950
951 for (uint32 i = 0; i < 2; ++i)
952 packet.Worldstates.emplace_back(ClockWorldState[i], GameTime::GetGameTime().count() + timer);
953
958
963
965 packet.Worldstates.emplace_back(building->m_WorldState, building->m_State);
966
967 for (WGWorkshop* workshop : WorkshopsList)
968 if (workshop)
969 packet.Worldstates.emplace_back(WorkshopsData[workshop->workshopId].worldstate, workshop->state);
970}
WGWorkshopData const WorkshopsData[WG_MAX_WORKSHOP]
Definition BattlefieldWG.h:1028
uint8 const WG_MAX_OBJ
Definition BattlefieldWG.h:456
uint8 const WG_MAX_WORKSHOP
Definition BattlefieldWG.h:1018
uint32 const ClockWorldState[2]
Definition BattlefieldWG.h:43
@ BATTLEFIELD_WG_DATA_VEHICLE_A
Definition BattlefieldWG.h:99
@ BATTLEFIELD_WG_DATA_MAX_VEHICLE_A
Definition BattlefieldWG.h:97
@ BATTLEFIELD_WG_DATA_VEHICLE_H
Definition BattlefieldWG.h:100
@ BATTLEFIELD_WG_DATA_MAX_VEHICLE_H
Definition BattlefieldWG.h:98
constexpr auto MINUTE
Definition Common.h:47
std::uint32_t uint32
Definition Define.h:107
@ TEAM_ALLIANCE
Definition SharedDefines.h:748
@ WORLD_STATE_BATTLEFIELD_WG_HORDE_KEEP_DEFENDED
Definition WorldStateDefines.h:82
@ WORLD_STATE_BATTLEFIELD_WG_ACTIVE
Definition WorldStateDefines.h:76
@ WORLD_STATE_BATTLEFIELD_WG_VEHICLE_H
Definition WorldStateDefines.h:64
@ WORLD_STATE_BATTLEFIELD_WG_DEFENDER
Definition WorldStateDefines.h:77
@ WORLD_STATE_BATTLEFIELD_WG_VEHICLE_A
Definition WorldStateDefines.h:66
@ WORLD_STATE_BATTLEFIELD_WG_ALLIANCE_KEEP_DEFENDED
Definition WorldStateDefines.h:83
@ WORLD_STATE_BATTLEFIELD_WG_MAX_VEHICLE_H
Definition WorldStateDefines.h:65
@ WORLD_STATE_BATTLEFIELD_WG_ATTACKER
Definition WorldStateDefines.h:78
@ WORLD_STATE_BATTLEFIELD_WG_MAX_VEHICLE_A
Definition WorldStateDefines.h:67
@ WORLD_STATE_BATTLEFIELD_WG_HORDE_KEEP_CAPTURED
Definition WorldStateDefines.h:80
@ WORLD_STATE_BATTLEFIELD_WG_ALLIANCE_KEEP_CAPTURED
Definition WorldStateDefines.h:81
@ WORLD_STATE_BATTLEFIELD_WG_CONTROL
Definition WorldStateDefines.h:79
@ WORLD_STATE_BATTLEFIELD_WG_SHOW
Definition WorldStateDefines.h:74
@ WORLD_STATE_BATTLEFIELD_WG_ICON_ACTIVE
Definition WorldStateDefines.h:85
#define sWorldState
Definition WorldState.h:377
uint32 GetData(uint32 data) const override
Definition BattlefieldWG.cpp:913
TeamId DefenderTeam
Definition Battlefield.h:387
bool IsWarTime() const
Return true if battle is started, false if battle is not started.
Definition Battlefield.h:251
TeamId GetAttackerTeam() const
Definition Battlefield.h:280
TeamId GetDefenderTeam() const
Definition Battlefield.h:279
uint32 GetTimer() const
Definition Battlefield.h:355
std::vector< WorldStateInfo > Worldstates
Definition WorldStatePackets.h:46
Seconds GetGameTime()
Definition GameTime.cpp:38

References BATTLEFIELD_WG_DATA_MAX_VEHICLE_A, BATTLEFIELD_WG_DATA_MAX_VEHICLE_H, BATTLEFIELD_WG_DATA_VEHICLE_A, BATTLEFIELD_WG_DATA_VEHICLE_H, BuildingsInZone, ClockWorldState, Battlefield::DefenderTeam, Battlefield::GetAttackerTeam(), GetData(), Battlefield::GetDefenderTeam(), GameTime::GetGameTime(), Battlefield::GetTimer(), Battlefield::IsWarTime(), MINUTE, sWorldState, TEAM_ALLIANCE, WG_MAX_OBJ, WG_MAX_WORKSHOP, WorkshopsData, WorkshopsList, WORLD_STATE_BATTLEFIELD_WG_ACTIVE, WORLD_STATE_BATTLEFIELD_WG_ALLIANCE_KEEP_CAPTURED, WORLD_STATE_BATTLEFIELD_WG_ALLIANCE_KEEP_DEFENDED, WORLD_STATE_BATTLEFIELD_WG_ATTACKER, WORLD_STATE_BATTLEFIELD_WG_CONTROL, WORLD_STATE_BATTLEFIELD_WG_DEFENDER, WORLD_STATE_BATTLEFIELD_WG_HORDE_KEEP_CAPTURED, WORLD_STATE_BATTLEFIELD_WG_HORDE_KEEP_DEFENDED, WORLD_STATE_BATTLEFIELD_WG_ICON_ACTIVE, WORLD_STATE_BATTLEFIELD_WG_MAX_VEHICLE_A, WORLD_STATE_BATTLEFIELD_WG_MAX_VEHICLE_H, WORLD_STATE_BATTLEFIELD_WG_SHOW, WORLD_STATE_BATTLEFIELD_WG_VEHICLE_A, WORLD_STATE_BATTLEFIELD_WG_VEHICLE_H, WGWorkshopData::worldstate, and WorldPackets::WorldState::InitWorldStates::Worldstates.

Referenced by SendInitWorldStatesTo().

◆ FindAndRemoveVehicleFromList()

bool BattlefieldWG::FindAndRemoveVehicleFromList ( Unit vehicle)
774{
775 for (uint32 i = 0; i < 2; ++i)
776 {
777 if (Vehicles[i].find(vehicle->GetGUID()) != Vehicles[i].end())
778 {
779 //Vehicles[i].erase(vehicle->GetGUID());
780 if (i == TEAM_HORDE)
782 else
784 return true;
785 }
786 }
787 return false;
788}
@ TEAM_HORDE
Definition SharedDefines.h:749
GuidUnorderedSet Vehicles[2]
Definition BattlefieldWG.h:445
Definition UpdateData.h:52

References BATTLEFIELD_WG_DATA_VEHICLE_A, BATTLEFIELD_WG_DATA_VEHICLE_H, Object::GetGUID(), TEAM_HORDE, and Vehicles.

Referenced by OnUnitDeath().

◆ GetAreaByGraveyardId()

uint32 BattlefieldWG::GetAreaByGraveyardId ( uint8  gId) const
540{
541 switch (gId)
542 {
551 }
552
553 return 0;
554}
@ AREA_THE_SUNKEN_RING
Definition AreaDefines.h:155
@ AREA_EASTSPARK_WORKSHOP
Definition AreaDefines.h:161
@ AREA_THE_BROKEN_TEMPLE
Definition AreaDefines.h:156
@ AREA_WESTSPARK_WORKSHOP
Definition AreaDefines.h:160
@ BATTLEFIELD_WG_GY_WORKSHOP_NE
Definition BattlefieldWG.h:121
@ BATTLEFIELD_WG_GY_WORKSHOP_SW
Definition BattlefieldWG.h:124
@ BATTLEFIELD_WG_GY_WORKSHOP_SE
Definition BattlefieldWG.h:123
@ BATTLEFIELD_WG_GY_WORKSHOP_NW
Definition BattlefieldWG.h:122

References AREA_EASTSPARK_WORKSHOP, AREA_THE_BROKEN_TEMPLE, AREA_THE_SUNKEN_RING, AREA_WESTSPARK_WORKSHOP, BATTLEFIELD_WG_GY_WORKSHOP_NE, BATTLEFIELD_WG_GY_WORKSHOP_NW, BATTLEFIELD_WG_GY_WORKSHOP_SE, and BATTLEFIELD_WG_GY_WORKSHOP_SW.

Referenced by WGWorkshop::GiveControlTo().

◆ GetData()

uint32 BattlefieldWG::GetData ( uint32  data) const
overridevirtual

Reimplemented from Battlefield.

914{
915 // xinef: little hack, same area for default horde graveyard
916 // this graveyard is the one of broken temple!
917 if (data == AREA_THE_CHILLED_QUAGMIRE)
919
920 switch (data)
921 {
922 // Used to determine when the phasing spells must be casted
923 // See: SpellArea::IsFitToRequirements
928 // Graveyards and Workshops are controlled by the same team.
929 if (BfGraveyard const* graveyard = GetGraveyardById(GetSpiritGraveyardId(data)))
930 return graveyard->GetControlTeamId();
931 }
932
933 return Battlefield::GetData(data);
934}
@ AREA_THE_CHILLED_QUAGMIRE
Definition AreaDefines.h:159
uint8 GetSpiritGraveyardId(uint32 areaId) const
Definition BattlefieldWG.cpp:513
uint32 GetData(uint32 dataId) const override
Definition Battlefield.h:274
BfGraveyard * GetGraveyardById(uint32 id) const
Definition Battlefield.cpp:549
Definition Battlefield.h:154

References AREA_EASTSPARK_WORKSHOP, AREA_THE_BROKEN_TEMPLE, AREA_THE_CHILLED_QUAGMIRE, AREA_THE_SUNKEN_RING, AREA_WESTSPARK_WORKSHOP, Battlefield::GetData(), Battlefield::GetGraveyardById(), and GetSpiritGraveyardId().

Referenced by FillInitialWorldStates(), OnBattleEnd(), OnCreatureCreate(), OnPlayerJoinWar(), UpdatedDestroyedTowerCount(), and UpdateVehicleCountWG().

◆ GetHonorBuff()

uint32 BattlefieldWG::GetHonorBuff ( int32  stack) const
1135{
1136 if (stack < 5)
1137 return 0;
1138 if (stack < 10)
1139 return SPELL_GREAT_HONOR;
1140 if (stack < 15)
1141 return SPELL_GREATER_HONOR;
1142 return SPELL_GREATEST_HONOR;
1143}
@ SPELL_GREATEST_HONOR
Definition BattlefieldWG.h:59
@ SPELL_GREATER_HONOR
Definition BattlefieldWG.h:58
@ SPELL_GREAT_HONOR
Definition BattlefieldWG.h:57

References SPELL_GREAT_HONOR, SPELL_GREATER_HONOR, and SPELL_GREATEST_HONOR.

Referenced by UpdateTenacity().

◆ GetRelic()

GameObject * BattlefieldWG::GetRelic ( )
inline

Return pointer to relic object.

366{ return GetGameObject(TitansRelic); }
ObjectGuid TitansRelic
Definition BattlefieldWG.h:453
GameObject * GetGameObject(ObjectGuid const &guid)
Definition Battlefield.cpp:814

References Battlefield::GetGameObject(), and TitansRelic.

Referenced by BfWGGameObjectBuilding::Destroyed(), OnBattleEnd(), and ProcessEvent().

◆ GetSpiritGraveyardId()

uint8 BattlefieldWG::GetSpiritGraveyardId ( uint32  areaId) const
514{
515 switch (areaId)
516 {
527 case AREA_WINTERGRASP:
531 default:
532 LOG_ERROR("bg.battlefield", "BattlefieldWG::GetSpiritGraveyardId: Unexpected Area Id {}", areaId);
533 break;
534 }
535
536 return 0;
537}
@ AREA_WINTERGRASP_FORTRESS
Definition AreaDefines.h:158
@ AREA_WINTERGRASP
Definition AreaDefines.h:145
@ BATTLEFIELD_WG_GY_KEEP
Definition BattlefieldWG.h:125
@ BATTLEFIELD_WG_GY_HORDE
Definition BattlefieldWG.h:126
@ BATTLEFIELD_WG_GY_ALLIANCE
Definition BattlefieldWG.h:127
#define LOG_ERROR(filterType__,...)
Definition Log.h:158

References AREA_EASTSPARK_WORKSHOP, AREA_THE_BROKEN_TEMPLE, AREA_THE_CHILLED_QUAGMIRE, AREA_THE_SUNKEN_RING, AREA_WESTSPARK_WORKSHOP, AREA_WINTERGRASP, AREA_WINTERGRASP_FORTRESS, BATTLEFIELD_WG_GY_ALLIANCE, BATTLEFIELD_WG_GY_HORDE, BATTLEFIELD_WG_GY_KEEP, BATTLEFIELD_WG_GY_WORKSHOP_NE, BATTLEFIELD_WG_GY_WORKSHOP_NW, BATTLEFIELD_WG_GY_WORKSHOP_SE, BATTLEFIELD_WG_GY_WORKSHOP_SW, and LOG_ERROR.

Referenced by GetData(), and OnCreatureCreate().

◆ HandleKill()

void BattlefieldWG::HandleKill ( Player ,
Unit  
)
overridevirtual

Called when a Unit is killed in battlefield zone.

Reimplemented from Battlefield.

714{
715 if (killer == victim)
716 {
717 return;
718 }
719
720 TeamId killerTeam = killer->GetTeamId();
721
722 // xinef: tower cannons also grant rank
723 if (victim->IsPlayer() || IsKeepNpc(victim->GetEntry()) || victim->GetEntry() == NPC_WINTERGRASP_TOWER_CANNON)
724 {
725 if (victim->IsPlayer() && victim->HasAura(SPELL_LIEUTENANT))
726 {
727 // Quest - Wintergrasp - PvP Kill - Horde/Alliance
728 for (ObjectGuid const& playerGuid : PlayersInWar[killerTeam])
729 {
730 if (Player* player = ObjectAccessor::FindPlayer(playerGuid))
731 {
732 if (player->GetDistance2d(killer) < 40)
733 {
734 player->KilledMonsterCredit(killerTeam == TEAM_HORDE ? NPC_QUEST_PVP_KILL_ALLIANCE : NPC_QUEST_PVP_KILL_HORDE);
735 }
736 }
737 }
738 }
739
740 for (ObjectGuid const& playerGuid : PlayersInWar[killerTeam])
741 {
742 if (Player* player = ObjectAccessor::FindPlayer(playerGuid))
743 {
744 if (player->GetDistance2d(killer) < 40)
745 {
746 PromotePlayer(player);
747 }
748 }
749 }
750
751 // Xinef: Allow to Skin non-released corpse
752 if (victim->IsPlayer())
753 {
754 victim->SetUnitFlag(UNIT_FLAG_SKINNABLE);
755 }
756 }
757 else if (victim->IsVehicle() && !killer->IsFriendlyTo(victim))
758 {
759 // Quest - Wintergrasp - PvP Kill - Vehicle
760 for (ObjectGuid const& playerGuid : PlayersInWar[killerTeam])
761 {
762 if (Player* player = ObjectAccessor::FindPlayer(playerGuid))
763 {
764 if (player->GetDistance2d(killer) < 40)
765 {
766 player->KilledMonsterCredit(NPC_QUEST_PVP_KILL_VEHICLE);
767 }
768 }
769 }
770 }
771}
@ NPC_QUEST_PVP_KILL_VEHICLE
Definition BattlefieldWG.h:195
@ NPC_QUEST_PVP_KILL_ALLIANCE
Definition BattlefieldWG.h:197
@ NPC_WINTERGRASP_TOWER_CANNON
Definition BattlefieldWG.h:191
@ NPC_QUEST_PVP_KILL_HORDE
Definition BattlefieldWG.h:196
@ SPELL_LIEUTENANT
Definition BattlefieldWG.h:52
TeamId
Definition SharedDefines.h:747
@ UNIT_FLAG_SKINNABLE
Definition UnitDefines.h:283
void PromotePlayer(Player *killer)
Definition BattlefieldWG.cpp:799
bool IsKeepNpc(uint32 entry)
Definition BattlefieldWG.h:406
GuidUnorderedSet PlayersInWar[PVP_TEAMS_COUNT]
Definition Battlefield.h:395

References ObjectAccessor::FindPlayer(), Object::GetEntry(), Player::GetTeamId(), Unit::HasAura(), Unit::IsFriendlyTo(), IsKeepNpc(), Object::IsPlayer(), Unit::IsVehicle(), NPC_QUEST_PVP_KILL_ALLIANCE, NPC_QUEST_PVP_KILL_HORDE, NPC_QUEST_PVP_KILL_VEHICLE, NPC_WINTERGRASP_TOWER_CANNON, Battlefield::PlayersInWar, PromotePlayer(), Unit::SetUnitFlag(), SPELL_LIEUTENANT, TEAM_HORDE, and UNIT_FLAG_SKINNABLE.

◆ IsKeepNpc()

bool BattlefieldWG::IsKeepNpc ( uint32  entry)
inline
407 {
408 switch (entry)
409 {
432 return true;
433 }
434 return false;
435 }
@ BATTLEFIELD_WG_NPC_BRIGADIER_GENERAL
Definition BattlefieldWG.h:159
@ BATTLEFIELD_WG_NPC_SIEGE_MASTER_STOUTHANDLE
Definition BattlefieldWG.h:178
@ BATTLEFIELD_WG_NPC_TACTICAL_OFFICER_KILRATH
Definition BattlefieldWG.h:154
@ BATTLEFIELD_WG_NPC_HORDE_WARBRINGER
Definition BattlefieldWG.h:158
@ BATTLEFIELD_WG_NPC_COMMANDER_DARDOSH
Definition BattlefieldWG.h:153
@ BATTLEFIELD_WG_NPC_LIEUTENANT_MURP
Definition BattlefieldWG.h:157
@ BATTLEFIELD_WG_NPC_COMMANDER_ZANNETH
Definition BattlefieldWG.h:176
@ BATTLEFIELD_WG_NPC_ANCHORITE_TESSA
Definition BattlefieldWG.h:179
@ BATTLEFIELD_WG_NPC_BOWYER_RANDOLPH
Definition BattlefieldWG.h:172
@ BATTLEFIELD_WG_NPC_SIEGESMITH_STRONGHOOF
Definition BattlefieldWG.h:155
@ BATTLEFIELD_WG_NPC_KNIGHT_DAMERON
Definition BattlefieldWG.h:173
@ BATTLEFIELD_WG_NPC_GUARD_H
Definition BattlefieldWG.h:145
@ BATTLEFIELD_WG_NPC_VIERON_BLAZEFEATHER
Definition BattlefieldWG.h:149
@ BATTLEFIELD_WG_NPC_PRIMALIST_MULFORT
Definition BattlefieldWG.h:156
@ BATTLEFIELD_WG_NPC_STONE_GUARD_MUKAR
Definition BattlefieldWG.h:150
@ BATTLEFIELD_WG_NPC_GUARD_A
Definition BattlefieldWG.h:146
@ BATTLEFIELD_WG_NPC_CHAMPION_ROS_SLAI
Definition BattlefieldWG.h:152
@ BATTLEFIELD_WG_NPC_SORCERESS_KAYLANA
Definition BattlefieldWG.h:174
@ BATTLEFIELD_WG_NPC_SENIOR_DEMOLITIONIST_LEGOSO
Definition BattlefieldWG.h:180
@ BATTLEFIELD_WG_NPC_HOODOO_MASTER_FU_JIN
Definition BattlefieldWG.h:151
@ BATTLEFIELD_WG_NPC_TACTICAL_OFFICER_AHBRAMIS
Definition BattlefieldWG.h:177
@ BATTLEFIELD_WG_NPC_MARSHAL_MAGRUDER
Definition BattlefieldWG.h:175

References BATTLEFIELD_WG_NPC_ANCHORITE_TESSA, BATTLEFIELD_WG_NPC_BOWYER_RANDOLPH, BATTLEFIELD_WG_NPC_BRIGADIER_GENERAL, BATTLEFIELD_WG_NPC_CHAMPION_ROS_SLAI, BATTLEFIELD_WG_NPC_COMMANDER_DARDOSH, BATTLEFIELD_WG_NPC_COMMANDER_ZANNETH, BATTLEFIELD_WG_NPC_GUARD_A, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_HOODOO_MASTER_FU_JIN, BATTLEFIELD_WG_NPC_HORDE_WARBRINGER, BATTLEFIELD_WG_NPC_KNIGHT_DAMERON, BATTLEFIELD_WG_NPC_LIEUTENANT_MURP, BATTLEFIELD_WG_NPC_MARSHAL_MAGRUDER, BATTLEFIELD_WG_NPC_PRIMALIST_MULFORT, BATTLEFIELD_WG_NPC_SENIOR_DEMOLITIONIST_LEGOSO, BATTLEFIELD_WG_NPC_SIEGE_MASTER_STOUTHANDLE, BATTLEFIELD_WG_NPC_SIEGESMITH_STRONGHOOF, BATTLEFIELD_WG_NPC_SORCERESS_KAYLANA, BATTLEFIELD_WG_NPC_STONE_GUARD_MUKAR, BATTLEFIELD_WG_NPC_TACTICAL_OFFICER_AHBRAMIS, BATTLEFIELD_WG_NPC_TACTICAL_OFFICER_KILRATH, and BATTLEFIELD_WG_NPC_VIERON_BLAZEFEATHER.

Referenced by HandleKill().

◆ OnBattleEnd()

void BattlefieldWG::OnBattleEnd ( bool  endByTimer)
overridevirtual

Called when battle end.

  • Remove relic and turret
  • Change banner/npc in keep if it needed
  • Saving battlestate
  • Reward honor/mark to player
  • Remove vehicle
    Parameters
    endByTimer: true if battle ended when timer is at 00:00, false if battle ended by clicking on relic

Reimplemented from Battlefield.

349{
350 // Remove relic
351 if (GameObject* go = GetRelic())
352 go->RemoveFromWorld();
353
355
356 // Remove turret
357 for (ObjectGuid const& guid : CanonList)
358 {
359 if (Creature* creature = GetCreature(guid))
360 {
361 if (!endByTimer)
362 creature->SetFaction(WintergraspFaction[GetDefenderTeam()]);
363 HideNpc(creature);
364 }
365 }
366
367 // Change all npc in keep
368 for (ObjectGuid const& guid : KeepCreature[GetAttackerTeam()])
369 if (Creature* creature = GetCreature(guid))
370 HideNpc(creature);
371
372 for (ObjectGuid const& guid : KeepCreature[GetDefenderTeam()])
373 if (Creature* creature = GetCreature(guid))
374 ShowNpc(creature, true);
375
376 // Change all npc out of keep
377 for (ObjectGuid const& guid : OutsideCreature[GetDefenderTeam()])
378 if (Creature* creature = GetCreature(guid))
379 HideNpc(creature);
380
381 for (ObjectGuid const& guid : OutsideCreature[GetAttackerTeam()])
382 if (Creature* creature = GetCreature(guid))
383 ShowNpc(creature, true);
384
385 // Update all graveyard, control is to defender when no wartime
386 for (uint8 i = 0; i < BATTLEFIELD_WG_GY_HORDE; i++)
387 if (BfGraveyard* graveyard = GetGraveyardById(i))
389
391 go->SetRespawnTime(RESPAWN_IMMEDIATELY);
392
394 go->SetRespawnTime(RESPAWN_ONE_DAY);
395
396 // Update portal defender faction
399
400 // Saving data
402 {
403 building->Rebuild();
404 building->Save();
405 building->UpdateTurretAttack(true);
406 }
407
408 for (WGWorkshop* workshop : WorkshopsList)
409 {
410 workshop->GiveControlTo(workshop->workshopId == BATTLEFIELD_WG_WORKSHOP_SE || workshop->workshopId == BATTLEFIELD_WG_WORKSHOP_SW ? GetAttackerTeam() : GetDefenderTeam(), true);
411 workshop->Save();
412 }
413
414 for (uint8 team = 0; team < 2; ++team)
415 {
416 for (ObjectGuid const& guid : Vehicles[team])
417 if (Creature* creature = GetCreature(guid))
418 creature->DespawnOrUnsummon(1ms);
419
420 Vehicles[team].clear();
421 }
422
427 uint32 spellDamagedDef = SPELL_DAMAGED_TOWER;
428 uint32 spellFullDef = SPELL_DESTROYED_TOWER;
429 uint32 spellDamagedAtt = SPELL_DAMAGED_BUILDING;
430 uint32 spellFullAtt = SPELL_INTACT_BUILDING;
431
432 if (!endByTimer)
433 {
436 spellDamagedDef = SPELL_DAMAGED_BUILDING;
437 spellFullDef = SPELL_INTACT_BUILDING;
438 spellDamagedAtt = SPELL_DAMAGED_TOWER;
439 spellFullAtt = SPELL_DESTROYED_TOWER;
440 }
441
442 for (ObjectGuid const& guid : PlayersInWar[GetDefenderTeam()])
443 {
444 if (Player* player = ObjectAccessor::FindPlayer(guid))
445 {
446 // Victory in Wintergrasp
447 player->AreaExploredOrEventHappens(GetDefenderTeam() ? 13183 : 13181); // HORDE / ALLY win wg quest id
448
449 player->CastSpell(player, SPELL_ESSENCE_OF_WINTERGRASP, true);
450 player->CastSpell(player, SPELL_VICTORY_REWARD, true);
451 RemoveAurasFromPlayer(player);
452
453 for (uint8 i = 0; i < damagedTowersDef; ++i)
454 player->CastSpell(player, spellDamagedDef, true);
455 for (uint8 i = 0; i < brokenTowersDef; ++i)
456 player->CastSpell(player, spellFullDef, true);
457 }
458 }
459
460 for (ObjectGuid const& guid : PlayersInWar[GetAttackerTeam()])
461 if (Player* player = ObjectAccessor::FindPlayer(guid))
462 {
463 player->CastSpell(player, SPELL_DEFEAT_REWARD, true);
464 RemoveAurasFromPlayer(player);
465
466 for (uint8 i = 0; i < damagedTowersAtt; ++i)
467 player->CastSpell(player, spellDamagedAtt, true);
468 for (uint8 i = 0; i < brokenTowersAtt; ++i)
469 player->CastSpell(player, spellFullAtt, true);
470 }
471
472 if (!endByTimer)
473 {
474 for (uint8 team = 0; team < 2; ++team)
475 {
476 for (ObjectGuid const& guid : Players[team])
477 {
478 if (Player* player = ObjectAccessor::FindPlayer(guid))
479 {
480 player->RemoveAurasDueToSpell(DefenderTeam == TEAM_ALLIANCE ? SPELL_HORDE_CONTROL_PHASE_SHIFT : SPELL_ALLIANCE_CONTROL_PHASE_SHIFT, player->GetGUID());
482 }
483 }
484 }
485 }
486
487 // Clear players in war list at the end.
489 PlayersInWar[TEAM_HORDE].clear();
490
491 if (!endByTimer) // win alli/horde
492 {
494 sWorldState->setWorldState(worldStateId, sWorldState->getWorldState(worldStateId) + 1);
495
497 }
498 else // defend alli/horde
499 {
501 sWorldState->setWorldState(worldStateId, sWorldState->getWorldState(worldStateId) + 1);
502
504 }
505}
@ SPELL_ESSENCE_OF_WINTERGRASP
Definition BattlefieldWG.h:80
@ SPELL_HORDE_CONTROL_PHASE_SHIFT
Definition BattlefieldWG.h:88
@ SPELL_VICTORY_REWARD
Definition BattlefieldWG.h:65
@ SPELL_DAMAGED_BUILDING
Definition BattlefieldWG.h:69
@ SPELL_ALLIANCE_CONTROL_PHASE_SHIFT
Definition BattlefieldWG.h:89
@ SPELL_INTACT_BUILDING
Definition BattlefieldWG.h:70
@ SPELL_DESTROYED_TOWER
Definition BattlefieldWG.h:68
@ SPELL_DEFEAT_REWARD
Definition BattlefieldWG.h:66
@ SPELL_DAMAGED_TOWER
Definition BattlefieldWG.h:67
@ BATTLEFIELD_WG_TEXT_WIN_KEEP
Definition BattlefieldWG.h:510
@ BATTLEFIELD_WG_TEXT_DEFEND_KEEP
Definition BattlefieldWG.h:509
uint32 const WintergraspFaction[3]
Definition BattlefieldWG.h:44
@ BATTLEFIELD_WG_DATA_INTACT_TOWER_ATT
Definition BattlefieldWG.h:94
@ BATTLEFIELD_WG_DATA_BROKEN_TOWER_ATT
Definition BattlefieldWG.h:96
@ BATTLEFIELD_WG_DATA_DAMAGED_TOWER_ATT
Definition BattlefieldWG.h:95
@ BATTLEFIELD_WG_WORKSHOP_SE
Definition BattlefieldWG.h:491
@ BATTLEFIELD_WG_WORKSHOP_SW
Definition BattlefieldWG.h:492
@ RESPAWN_IMMEDIATELY
Definition Battleground.h:160
@ RESPAWN_ONE_DAY
Definition Battleground.h:159
@ GAMEOBJECT_FACTION
Definition UpdateFields.h:402
void RemoveAurasFromPlayer(Player *player)
Definition BattlefieldWG.cpp:832
GameObject * GetRelic()
Return pointer to relic object.
Definition BattlefieldWG.h:366
GuidUnorderedSet CanonList
Definition BattlefieldWG.h:446
GameObjectSet KeepGameObject[2]
Definition BattlefieldWG.h:442
GuidUnorderedSet KeepCreature[2]
Definition BattlefieldWG.h:447
GuidUnorderedSet OutsideCreature[2]
Definition BattlefieldWG.h:448
GameObjectSet DefenderPortalList
Definition BattlefieldWG.h:441
void ShowNpc(Creature *creature, bool aggressive)
Definition Battlefield.cpp:482
Creature * GetCreature(ObjectGuid const &guid)
Definition Battlefield.cpp:806
void SendWarning(uint8 id, WorldObject const *target=nullptr)
Definition Battlefield.cpp:456
void HideNpc(Creature *creature)
Definition Battlefield.cpp:472
Definition Creature.h:47
Definition GameObject.h:120
void Clear()
Definition ObjectGuid.h:138

References BATTLEFIELD_WG_DATA_BROKEN_TOWER_ATT, BATTLEFIELD_WG_DATA_DAMAGED_TOWER_ATT, BATTLEFIELD_WG_DATA_INTACT_TOWER_ATT, BATTLEFIELD_WG_GY_HORDE, BATTLEFIELD_WG_GY_WORKSHOP_SE, BATTLEFIELD_WG_GY_WORKSHOP_SW, BATTLEFIELD_WG_TEXT_DEFEND_KEEP, BATTLEFIELD_WG_TEXT_WIN_KEEP, BATTLEFIELD_WG_WORKSHOP_SE, BATTLEFIELD_WG_WORKSHOP_SW, BuildingsInZone, CanonList, ObjectGuid::Clear(), DefenderPortalList, Battlefield::DefenderTeam, ObjectAccessor::FindPlayer(), GAMEOBJECT_FACTION, Battlefield::GetAttackerTeam(), Battlefield::GetCreature(), GetData(), Battlefield::GetDefenderTeam(), Battlefield::GetGraveyardById(), GetRelic(), Battlefield::HideNpc(), KeepCreature, KeepGameObject, OutsideCreature, Battlefield::Players, Battlefield::PlayersInWar, RemoveAurasFromPlayer(), RESPAWN_IMMEDIATELY, RESPAWN_ONE_DAY, Battlefield::SendWarning(), Battlefield::ShowNpc(), SPELL_ALLIANCE_CONTROL_PHASE_SHIFT, SPELL_DAMAGED_BUILDING, SPELL_DAMAGED_TOWER, SPELL_DEFEAT_REWARD, SPELL_DESTROYED_TOWER, SPELL_ESSENCE_OF_WINTERGRASP, SPELL_HORDE_CONTROL_PHASE_SHIFT, SPELL_INTACT_BUILDING, SPELL_VICTORY_REWARD, sWorldState, TEAM_ALLIANCE, TEAM_HORDE, TitansRelic, Vehicles, WintergraspFaction, WorkshopsList, WORLD_STATE_BATTLEFIELD_WG_ALLIANCE_KEEP_CAPTURED, WORLD_STATE_BATTLEFIELD_WG_ALLIANCE_KEEP_DEFENDED, WORLD_STATE_BATTLEFIELD_WG_HORDE_KEEP_CAPTURED, and WORLD_STATE_BATTLEFIELD_WG_HORDE_KEEP_DEFENDED.

◆ OnBattleStart()

void BattlefieldWG::OnBattleStart ( )
overridevirtual

Called when the battle start.

  • Spawn relic and turret
  • Rebuild tower and wall
  • Invite player to war

Reimplemented from Battlefield.

218{
219 // Spawn titan relic
220 GameObject* go = SpawnGameObject(GO_WINTERGRASP_TITAN_S_RELIC, 5440.37890625f, 2840.493408203125f, 430.2816162109375, 4.45059061050415039f); // VerifiedBuild 51943
221 if (go)
222 {
223 // Update faction of relic, only attacker can click on
225 // Set in use (not allow to click on before last door is broken)
227
228 // save guid
229 TitansRelic = go->GetGUID();
230 }
231 else
232 LOG_ERROR("bg.battlefield", "WG: Failed to spawn titan relic.");
233
234 // Update tower visibility and update faction
235 for (ObjectGuid const& guid : CanonList)
236 {
237 if (Creature* creature = GetCreature(guid))
238 {
239 ShowNpc(creature, true);
240 creature->SetFaction(WintergraspFaction[GetDefenderTeam()]);
241 }
242 }
243
244 // Rebuild all wall
246 {
247 if (building)
248 {
249 building->Rebuild();
250 building->UpdateTurretAttack(false);
251 }
252 }
253
257
258 // Update graveyard (in no war time all graveyard is to deffender, in war time, depend of base)
259 for (WGWorkshop* workshop : WorkshopsList)
260 if (workshop)
261 workshop->UpdateGraveyardAndWorkshop();
262
263 // Set Sliders capture points data to his owners when battle start
264 for (BfCapturePoint* capturePoint : CapturePoints)
265 capturePoint->SetCapturePointData(capturePoint->GetCapturePointGo(),
266 capturePoint->GetCapturePointGo()->GetEntry() == GO_WINTERGRASP_FACTORY_BANNER_SE || capturePoint->GetCapturePointGo()->GetEntry() == GO_WINTERGRASP_FACTORY_BANNER_SW ? GetAttackerTeam() : GetDefenderTeam());
267
268 for (uint8 team = 0; team < 2; ++team)
269 for (ObjectGuid const& guid : Players[team])
270 {
271 // Kick player in orb room, TODO: offline player ?
272 if (Player* player = ObjectAccessor::FindPlayer(guid))
273 {
274 float x, y, z;
275 player->GetPosition(x, y, z);
276 if (5500 > x && x > 5392 && y < 2880 && y > 2800 && z < 480)
277 player->TeleportTo(MAP_NORTHREND, 5349.8686f, 2838.481f, 409.240f, 0.046328f);
278 SendInitWorldStatesTo(player);
279 }
280 }
281 // Initialize vehicle counter
283 // Send start warning to all players
285
286 // Xinef: reset tenacity counter
287 TenacityStack = 0;
288
290 {
291 if (!UpdateTenacityList.empty())
293 UpdateTenacityList.clear();
294 context.Repeat(10s);
295 });
296
299}
@ MAP_NORTHREND
Definition AreaDefines.h:243
@ BATTLEFIELD_WG_WORLD_START_MESSAGE
Definition BattlefieldWG.h:140
uint8 const WG_MAX_ATTACKTOWERS
Definition BattlefieldWG.h:760
@ GO_WINTERGRASP_FACTORY_BANNER_SW
Definition BattlefieldWG.h:535
@ GO_WINTERGRASP_TITAN_S_RELIC
Definition BattlefieldWG.h:537
@ GO_WINTERGRASP_FACTORY_BANNER_SE
Definition BattlefieldWG.h:534
@ BATTLEFIELD_WG_TEXT_START
Definition BattlefieldWG.h:500
@ BATTLEFIELD_TIMER_GROUP_WAR
Definition Battlefield.h:62
@ GO_FLAG_NOT_SELECTABLE
Definition SharedDefines.h:1613
@ CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_ENABLE
Definition WorldConfig.h:71
void UpdateCounterVehicle(bool init)
Vehicle world states update.
Definition BattlefieldWG.cpp:301
void SendInitWorldStatesTo(Player *player)
Definition BattlefieldWG.cpp:972
void UpdateTenacity()
Definition BattlefieldWG.cpp:1156
int32 TenacityStack
Definition BattlefieldWG.h:451
BfCapturePointVector CapturePoints
Definition Battlefield.h:390
void SetData(uint32 dataId, uint32 value) override
Definition Battlefield.h:275
TaskScheduler _scheduler
Definition Battlefield.h:420
GameObject * SpawnGameObject(uint32 entry, float x, float y, float z, float o)
Definition Battlefield.cpp:784
Definition Battlefield.h:86
Definition Chat.h:37
void SendWorldText(std::string_view str)
Definition Chat.cpp:131
void SetGameObjectFlag(GameObjectFlags flags)
Definition GameObject.h:217
void SetUInt32Value(uint16 index, uint32 value)
Definition Object.cpp:639
Definition TaskScheduler.h:421
TaskContext & Repeat(std::chrono::duration< _Rep, _Period > const &duration)
Definition TaskScheduler.h:493
TaskScheduler & Schedule(std::chrono::duration< _Rep, _Period > const &time, task_handler_t const &task)
Definition TaskScheduler.h:232
#define sWorld
Definition World.h:316

References Battlefield::_scheduler, BATTLEFIELD_TIMER_GROUP_WAR, BATTLEFIELD_WG_DATA_BROKEN_TOWER_ATT, BATTLEFIELD_WG_DATA_DAMAGED_TOWER_ATT, BATTLEFIELD_WG_DATA_INTACT_TOWER_ATT, BATTLEFIELD_WG_TEXT_START, BATTLEFIELD_WG_WORLD_START_MESSAGE, BuildingsInZone, CanonList, Battlefield::CapturePoints, CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_ENABLE, ObjectAccessor::FindPlayer(), GAMEOBJECT_FACTION, Battlefield::GetAttackerTeam(), Battlefield::GetCreature(), Battlefield::GetDefenderTeam(), Object::GetGUID(), GO_FLAG_NOT_SELECTABLE, GO_WINTERGRASP_FACTORY_BANNER_SE, GO_WINTERGRASP_FACTORY_BANNER_SW, GO_WINTERGRASP_TITAN_S_RELIC, LOG_ERROR, MAP_NORTHREND, Battlefield::Players, TaskContext::Repeat(), TaskScheduler::Schedule(), SendInitWorldStatesTo(), Battlefield::SendWarning(), ChatHandler::SendWorldText(), Battlefield::SetData(), GameObject::SetGameObjectFlag(), Object::SetUInt32Value(), Battlefield::ShowNpc(), Battlefield::SpawnGameObject(), sWorld, TenacityStack, TitansRelic, UpdateCounterVehicle(), UpdateTenacity(), UpdateTenacityList, WG_MAX_ATTACKTOWERS, WintergraspFaction, and WorkshopsList.

◆ OnCreatureCreate()

void BattlefieldWG::OnCreatureCreate ( Creature creature)
overridevirtual

Called when a creature is created.

  • Update vehicle count

Reimplemented from ZoneScript.

557{
558 // Accessing to db spawned creatures
559 switch (creature->GetEntry())
560 {
563 {
565 uint8 graveyardId = GetSpiritGraveyardId(creature->GetAreaId());
566 // xinef: little workaround, there are 2 spirit guides in same area
567 if (creature->IsWithinDist2d(5103.0f, 3461.5f, 5.0f))
568 graveyardId = BATTLEFIELD_WG_GY_WORKSHOP_NW;
569
570 if (GraveyardList[graveyardId])
571 GraveyardList[graveyardId]->SetSpirit(creature, teamId);
572 break;
573 }
574 }
575
576 // untested code - not sure if it is valid.
577 if (IsWarTime())
578 {
579 switch (creature->GetEntry())
580 {
585 {
586 if (!creature->IsSummon() || !creature->ToTempSummon()->GetSummonerGUID())
587 return;
588
590 if (!creator)
591 return;
592 TeamId team = creator->GetTeamId();
593
594 if (team == TEAM_HORDE)
595 {
597 {
599 creature->CastSpell(creature, SPELL_HORDE_FLAG, true);
600 Vehicles[team].insert(creature->GetGUID());
602 }
603 else
604 {
605 creature->DespawnOrUnsummon();
606 return;
607 }
608 }
609 else
610 {
612 {
614 creature->CastSpell(creature, SPELL_ALLIANCE_FLAG, true);
615 Vehicles[team].insert(creature->GetGUID());
617 }
618 else
619 {
620 creature->DespawnOrUnsummon();
621 return;
622 }
623 }
624 break;
625 }
628 {
629 if (!creature->IsSummon() || !creature->ToTempSummon()->GetSummonerGUID())
630 return;
631
632 if (Unit* owner = creature->ToTempSummon()->GetSummonerUnit())
633 creature->SetFaction(owner->GetFaction());
634 break;
635 }
636 }
637 }
638}
@ NPC_WINTERGRASP_SIEGE_ENGINE_HORDE
Definition BattlefieldWG.h:188
@ NPC_WINTERGRASP_CATAPULT
Definition BattlefieldWG.h:189
@ NPC_WINTERGRASP_DEMOLISHER
Definition BattlefieldWG.h:190
@ NPC_DWARVEN_SPIRIT_GUIDE
Definition BattlefieldWG.h:183
@ NPC_WINTERGRASP_SIEGE_ENGINE_TURRET_HORDE
Definition BattlefieldWG.h:186
@ NPC_WINTERGRASP_SIEGE_ENGINE_TURRET_ALLIANCE
Definition BattlefieldWG.h:185
@ NPC_TAUNKA_SPIRIT_GUIDE
Definition BattlefieldWG.h:182
@ NPC_WINTERGRASP_SIEGE_ENGINE_ALLIANCE
Definition BattlefieldWG.h:187
@ SPELL_HORDE_FLAG
Definition BattlefieldWG.h:61
@ SPELL_ALLIANCE_FLAG
Definition BattlefieldWG.h:60
void UpdateVehicleCountWG()
Definition BattlefieldWG.cpp:326
GraveyardVect GraveyardList
Definition Battlefield.h:415
void DespawnOrUnsummon(Milliseconds msTimeToDespawn=0ms, Seconds forcedRespawnTimer=0s)
Definition Creature.cpp:2126
uint32 GetEntry() const
Definition Object.h:117
TeamId GetTeamId(bool original=false) const
Definition Player.h:2127
ObjectGuid GetSummonerGUID() const
Definition TemporarySummon.h:66
Unit * GetSummonerUnit() const
Definition TemporarySummon.cpp:44
Definition Unit.h:664
void SetFaction(uint32 faction)
Definition Unit.cpp:7056
TempSummon * ToTempSummon()
Definition Unit.h:731
bool IsSummon() const
Definition Unit.h:794
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:1350
bool IsWithinDist2d(float x, float y, float dist) const
Definition Object.cpp:1355
uint32 GetAreaId() const
Definition Object.cpp:3120

References BATTLEFIELD_WG_DATA_MAX_VEHICLE_A, BATTLEFIELD_WG_DATA_MAX_VEHICLE_H, BATTLEFIELD_WG_DATA_VEHICLE_A, BATTLEFIELD_WG_DATA_VEHICLE_H, BATTLEFIELD_WG_GY_WORKSHOP_NW, Unit::CastSpell(), Creature::DespawnOrUnsummon(), ObjectAccessor::FindPlayer(), WorldObject::GetAreaId(), GetData(), Object::GetEntry(), Object::GetGUID(), GetSpiritGraveyardId(), TempSummon::GetSummonerGUID(), TempSummon::GetSummonerUnit(), Player::GetTeamId(), Battlefield::GraveyardList, Unit::IsSummon(), Battlefield::IsWarTime(), WorldObject::IsWithinDist2d(), NPC_DWARVEN_SPIRIT_GUIDE, NPC_TAUNKA_SPIRIT_GUIDE, NPC_WINTERGRASP_CATAPULT, NPC_WINTERGRASP_DEMOLISHER, NPC_WINTERGRASP_SIEGE_ENGINE_ALLIANCE, NPC_WINTERGRASP_SIEGE_ENGINE_HORDE, NPC_WINTERGRASP_SIEGE_ENGINE_TURRET_ALLIANCE, NPC_WINTERGRASP_SIEGE_ENGINE_TURRET_HORDE, Unit::SetFaction(), SPELL_ALLIANCE_FLAG, SPELL_HORDE_FLAG, TEAM_ALLIANCE, TEAM_HORDE, Unit::ToTempSummon(), UpdateVehicleCountWG(), and Vehicles.

◆ OnCreatureRemove()

void BattlefieldWG::OnCreatureRemove ( Creature creature)
overridevirtual

Called when a creature is removed.

  • Update vehicle count

Reimplemented from ZoneScript.

641{
642 /* possibly can be used later
643 if (IsWarTime())
644 {
645 switch (creature->GetEntry())
646 {
647 case NPC_WINTERGRASP_SIEGE_ENGINE_ALLIANCE:
648 case NPC_WINTERGRASP_SIEGE_ENGINE_HORDE:
649 case NPC_WINTERGRASP_CATAPULT:
650 case NPC_WINTERGRASP_DEMOLISHER:
651 {
652 uint8 team;
653 if (creature->GetFaction() == WintergraspFaction[TEAM_ALLIANCE])
654 team = TEAM_ALLIANCE;
655 else if (creature->GetFaction() == WintergraspFaction[TEAM_HORDE])
656 team = TEAM_HORDE;
657 else
658 return;
659
660 Vehicles[team].erase(creature->GetGUID());
661 if (team == TEAM_HORDE)
662 UpdateData(BATTLEFIELD_WG_DATA_VEHICLE_H, -1);
663 else
664 UpdateData(BATTLEFIELD_WG_DATA_VEHICLE_A, -1);
665 UpdateVehicleCountWG();
666
667 break;
668 }
669 }
670 }*/
671}

◆ OnGameObjectCreate()

void BattlefieldWG::OnGameObjectCreate ( GameObject go)
overridevirtual

Called when a gameobject is created.

Reimplemented from ZoneScript.

674{
675 uint8 workshopId = 0;
676
677 switch (go->GetEntry())
678 {
680 workshopId = BATTLEFIELD_WG_WORKSHOP_NE;
681 break;
683 workshopId = BATTLEFIELD_WG_WORKSHOP_NW;
684 break;
686 workshopId = BATTLEFIELD_WG_WORKSHOP_SE;
687 break;
689 workshopId = BATTLEFIELD_WG_WORKSHOP_SW;
690 break;
691 default:
692 return;
693 }
694
695 for (WGWorkshop* workshop : WorkshopsList)
696 {
697 if (workshop)
698 {
699 if (workshop->workshopId == workshopId)
700 {
701 WintergraspCapturePoint* capturePoint = new WintergraspCapturePoint(this, workshop->teamControl);
702 //Sending neutral team at start to set normal capture points by workshop->teamControl, TEAM_NEUTRAL is ignored at first call
703 capturePoint->SetCapturePointData(go, TEAM_NEUTRAL);
704 capturePoint->LinkToWorkshop(workshop);
705 AddCapturePoint(capturePoint);
706 break;
707 }
708 }
709 }
710}
@ GO_WINTERGRASP_FACTORY_BANNER_NW
Definition BattlefieldWG.h:533
@ GO_WINTERGRASP_FACTORY_BANNER_NE
Definition BattlefieldWG.h:532
@ BATTLEFIELD_WG_WORKSHOP_NW
Definition BattlefieldWG.h:490
@ BATTLEFIELD_WG_WORKSHOP_NE
Definition BattlefieldWG.h:489
@ TEAM_NEUTRAL
Definition SharedDefines.h:750
void AddCapturePoint(BfCapturePoint *cp)
Definition Battlefield.h:438
bool SetCapturePointData(GameObject *capturePoint, TeamId team)
Definition Battlefield.cpp:880
Definition BattlefieldWG.h:235
void LinkToWorkshop(WGWorkshop *workshop)
Definition BattlefieldWG.h:239

References Battlefield::AddCapturePoint(), BATTLEFIELD_WG_WORKSHOP_NE, BATTLEFIELD_WG_WORKSHOP_NW, BATTLEFIELD_WG_WORKSHOP_SE, BATTLEFIELD_WG_WORKSHOP_SW, Object::GetEntry(), GO_WINTERGRASP_FACTORY_BANNER_NE, GO_WINTERGRASP_FACTORY_BANNER_NW, GO_WINTERGRASP_FACTORY_BANNER_SE, GO_WINTERGRASP_FACTORY_BANNER_SW, WintergraspCapturePoint::LinkToWorkshop(), BfCapturePoint::SetCapturePointData(), TEAM_NEUTRAL, and WorkshopsList.

◆ OnPlayerEnterZone()

void BattlefieldWG::OnPlayerEnterZone ( Player player)
overridevirtual

Called when player enters in WG zone.

  • Update aura
  • Update worldstate
    Parameters
    player: Player who enters the zone

Reimplemented from Battlefield.

899{
900 if (!Active)
901 RemoveAurasFromPlayer(player);
902
904 // Send worldstate to player
905 SendInitWorldStatesTo(player);
906
907 // xinef: Attacker, if hidden in relic room kick him out
908 if (player->GetTeamId() == GetAttackerTeam())
909 if (player->GetPositionX() > 5400.0f && player->GetPositionX() < 5490.0f && player->GetPositionY() > 2803.0f && player->GetPositionY() < 2878.0f)
911}
bool Active
Definition Battlefield.h:386
void KickPlayerFromBattlefield(ObjectGuid guid)
Kick player from battlefield and teleport him to kick-point location.
Definition Battlefield.cpp:291
Aura * AddAura(uint32 spellId, Unit *target)
Definition Unit.cpp:15088
float GetPositionX() const
Definition Position.h:121
float GetPositionY() const
Definition Position.h:122

References Battlefield::Active, Unit::AddAura(), Battlefield::DefenderTeam, Battlefield::GetAttackerTeam(), Object::GetGUID(), Position::GetPositionX(), Position::GetPositionY(), Player::GetTeamId(), Battlefield::KickPlayerFromBattlefield(), RemoveAurasFromPlayer(), SendInitWorldStatesTo(), SPELL_ALLIANCE_CONTROL_PHASE_SHIFT, SPELL_HORDE_CONTROL_PHASE_SHIFT, and TEAM_HORDE.

◆ OnPlayerJoinWar()

void BattlefieldWG::OnPlayerJoinWar ( Player player)
overridevirtual

Called when player accept invite to join battle.

  • Update aura
  • Teleport if it needed
  • Update worldstate
  • Update tenacity
    Parameters
    playerPlayer who accepted invite

Reimplemented from Battlefield.

845{
846 RemoveAurasFromPlayer(player);
847
848 player->CastSpell(player, SPELL_RECRUIT, true);
849 AddUpdateTenacity(player);
850
851 if (player->GetTeamId() == GetDefenderTeam())
852 player->TeleportTo(MAP_NORTHREND, 5345, 2842, 410, 3.14f);
853 else
854 {
855 if (player->GetTeamId() == TEAM_HORDE)
856 player->TeleportTo(MAP_NORTHREND, 5025.857422f, 3674.628906f, 362.737122f, 4.135169f);
857 else
858 player->TeleportTo(MAP_NORTHREND, 5101.284f, 2186.564f, 365.549f, 3.812f);
859 }
860
861 if (player->GetTeamId() == GetAttackerTeam())
862 {
865 }
866 else
867 {
870 }
871 SendInitWorldStatesTo(player);
872}
@ SPELL_RECRUIT
Definition BattlefieldWG.h:50
@ SPELL_TOWER_CONTROL
Definition BattlefieldWG.h:55
void AddUpdateTenacity(Player *player)
Definition BattlefieldWG.cpp:1145
bool TeleportTo(uint32 mapid, float x, float y, float z, float orientation, uint32 options=0, Unit *target=nullptr, bool newInstance=false)
Definition Player.cpp:1352
void SetAuraStack(uint32 spellId, Unit *target, uint32 stack)
Definition Unit.cpp:15127

References AddUpdateTenacity(), BATTLEFIELD_WG_DATA_BROKEN_TOWER_ATT, Unit::CastSpell(), Battlefield::GetAttackerTeam(), GetData(), Battlefield::GetDefenderTeam(), Player::GetTeamId(), MAP_NORTHREND, RemoveAurasFromPlayer(), SendInitWorldStatesTo(), Unit::SetAuraStack(), SPELL_RECRUIT, SPELL_TOWER_CONTROL, TEAM_HORDE, and Player::TeleportTo().

◆ OnPlayerLeaveWar()

void BattlefieldWG::OnPlayerLeaveWar ( Player player)
overridevirtual

Called when player left the battle.

  • Update player aura
    Parameters
    player: Player who left the battle

Reimplemented from Battlefield.

875{
876 // Remove all aura from WG /// @todo: false we can go out of this zone on retail and keep Rank buff, remove on end of WG
877 if (!player->GetSession()->PlayerLogout())
878 {
879 if (player->GetVehicle()) // Remove vehicle of player if he go out.
880 player->GetVehicle()->Dismiss();
881 RemoveAurasFromPlayer(player);
882 }
883
884 RemoveUpdateTenacity(player);
885}
void RemoveUpdateTenacity(Player *player)
Definition BattlefieldWG.cpp:1150
WorldSession * GetSession() const
Definition Player.h:2019
Vehicle * GetVehicle() const
Definition Unit.h:1926
void Dismiss()
Definition Vehicle.cpp:546
bool PlayerLogout() const
Definition WorldSession.h:402

References Vehicle::Dismiss(), Player::GetSession(), Unit::GetVehicle(), WorldSession::PlayerLogout(), RemoveAurasFromPlayer(), and RemoveUpdateTenacity().

◆ OnPlayerLeaveZone()

void BattlefieldWG::OnPlayerLeaveZone ( Player player)
overridevirtual

Called when player left the WG zone.

Parameters
player: Player who left the zone

Reimplemented from Battlefield.

888{
889 if (!Active)
890 RemoveAurasFromPlayer(player);
891
896}
@ SPELL_ALLIANCE_CONTROLS_FACTORY_PHASE_SHIFT
Definition BattlefieldWG.h:86
@ SPELL_HORDE_CONTROLS_FACTORY_PHASE_SHIFT
Definition BattlefieldWG.h:85
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:5157

References Battlefield::Active, Unit::RemoveAurasDueToSpell(), RemoveAurasFromPlayer(), SPELL_ALLIANCE_CONTROL_PHASE_SHIFT, SPELL_ALLIANCE_CONTROLS_FACTORY_PHASE_SHIFT, SPELL_HORDE_CONTROL_PHASE_SHIFT, and SPELL_HORDE_CONTROLS_FACTORY_PHASE_SHIFT.

◆ OnStartGrouping()

void BattlefieldWG::OnStartGrouping ( )
overridevirtual

Called when grouping starts (15 minutes before battlestart)

  • Invite all player in zone to join queue

Reimplemented from Battlefield.

508{
509 if (!IsWarTime())
511}
@ BATTLEFIELD_WG_TEXT_WILL_START
Definition BattlefieldWG.h:511

References BATTLEFIELD_WG_TEXT_WILL_START, Battlefield::IsWarTime(), and Battlefield::SendWarning().

◆ OnUnitDeath()

void BattlefieldWG::OnUnitDeath ( Unit unit)
overridevirtual

Reimplemented from ZoneScript.

791{
792 if (IsWarTime())
793 if (unit->IsVehicle())
796}
bool FindAndRemoveVehicleFromList(Unit *vehicle)
Definition BattlefieldWG.cpp:773
bool IsVehicle() const
Definition Unit.h:800

References FindAndRemoveVehicleFromList(), Unit::IsVehicle(), Battlefield::IsWarTime(), and UpdateVehicleCountWG().

◆ ProcessEvent()

void BattlefieldWG::ProcessEvent ( WorldObject obj,
uint32  eventId 
)
overridevirtual

Reimplemented from ZoneScript.

1083{
1084 if (!obj || !IsWarTime())
1085 return;
1086
1087 // We handle only gameobjects here
1088 GameObject* go = obj->ToGameObject();
1089 if (!go)
1090 return;
1091
1092 // On click on titan relic
1094 {
1096 {
1097 EndBattle(false);
1098 }
1099 else if (GameObject* relic = GetRelic())
1100 {
1101 relic->SetRespawnTime(RESPAWN_IMMEDIATELY);
1102 }
1103 }
1104
1105 // if destroy or damage event, search the wall/tower and update worldstate/send warning message
1106 for (BfWGGameObjectBuilding* building : BuildingsInZone)
1107 {
1108 if (GameObject* build = ObjectAccessor::GetGameObject(*obj, building->m_Build))
1109 {
1110 if (go->GetEntry() == build->GetEntry())
1111 {
1112 if (build->GetGOInfo()->building.damagedEvent == eventId)
1113 building->Damaged();
1114
1115 if (build->GetGOInfo()->building.destroyedEvent == eventId)
1116 building->Destroyed();
1117
1118 break;
1119 }
1120 }
1121 }
1122}
bool CanInteractWithRelic()
Define relic object.
Definition BattlefieldWG.h:372
void EndBattle(bool endByTimer)
Definition Battlefield.cpp:347
GameObject * ToGameObject()
Definition Object.h:214
GameObject * GetGameObject(WorldObject const &u, ObjectGuid const &guid)
Definition ObjectAccessor.cpp:184

References BuildingsInZone, CanInteractWithRelic(), Battlefield::EndBattle(), Object::GetEntry(), ObjectAccessor::GetGameObject(), GetRelic(), GO_WINTERGRASP_TITAN_S_RELIC, Battlefield::IsWarTime(), RESPAWN_IMMEDIATELY, and Object::ToGameObject().

◆ PromotePlayer()

void BattlefieldWG::PromotePlayer ( Player killer)
800{
801 if (!Active)
802 return;
803 // Updating rank of player
804 if (Aura* recruitAura = killer->GetAura(SPELL_RECRUIT))
805 {
806 if (recruitAura->GetStackAmount() >= 5)
807 {
808 killer->RemoveAura(SPELL_RECRUIT);
809 killer->CastSpell(killer, SPELL_CORPORAL, true);
811 }
812 else
813 {
814 killer->CastSpell(killer, SPELL_RECRUIT, true);
815 }
816 }
817 else if (Aura* corporalAura = killer->GetAura(SPELL_CORPORAL))
818 {
819 if (corporalAura->GetStackAmount() >= 5)
820 {
821 killer->RemoveAura(SPELL_CORPORAL);
822 killer->CastSpell(killer, SPELL_LIEUTENANT, true);
824 }
825 else
826 {
827 killer->CastSpell(killer, SPELL_CORPORAL, true);
828 }
829 }
830}
@ SPELL_CORPORAL
Definition BattlefieldWG.h:51
@ BATTLEFIELD_WG_TEXT_SECONDRANK
Definition BattlefieldWG.h:513
@ BATTLEFIELD_WG_TEXT_FIRSTRANK
Definition BattlefieldWG.h:512
Definition SpellAuras.h:87
Aura * GetAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
Definition Unit.cpp:5842
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:5024

References Battlefield::Active, BATTLEFIELD_WG_TEXT_FIRSTRANK, BATTLEFIELD_WG_TEXT_SECONDRANK, Unit::CastSpell(), Unit::GetAura(), Unit::RemoveAura(), Battlefield::SendWarning(), SPELL_CORPORAL, SPELL_LIEUTENANT, and SPELL_RECRUIT.

Referenced by HandleKill().

◆ RemoveAurasFromPlayer()

◆ RemoveUpdateTenacity()

void BattlefieldWG::RemoveUpdateTenacity ( Player player)
1151{
1152 UpdateTenacityList.erase(player->GetGUID());
1154}
static ObjectGuid const Empty
Definition ObjectGuid.h:120

References ObjectGuid::Empty, Object::GetGUID(), and UpdateTenacityList.

Referenced by OnPlayerLeaveWar().

◆ SendInitWorldStatesTo()

void BattlefieldWG::SendInitWorldStatesTo ( Player player)
973{
975 packet.MapID = MapId;
976 packet.ZoneID = ZoneId;
977 packet.AreaID = player->GetAreaId();
979
980 player->SendDirectMessage(packet.Write());
981}
void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates &packet) override
Definition BattlefieldWG.cpp:936
uint32 MapId
Definition Battlefield.h:403
uint32 ZoneId
Definition Battlefield.h:402
void SendDirectMessage(WorldPacket const *data) const
Definition Player.cpp:5680
Definition WorldStatePackets.h:28
int32 MapID
Definition WorldStatePackets.h:42
int32 AreaID
Definition WorldStatePackets.h:44
WorldPacket const * Write() override
Definition WorldStatePackets.cpp:22
int32 ZoneID
Definition WorldStatePackets.h:43

References WorldPackets::WorldState::InitWorldStates::AreaID, FillInitialWorldStates(), WorldObject::GetAreaId(), Battlefield::MapId, WorldPackets::WorldState::InitWorldStates::MapID, Player::SendDirectMessage(), WorldPackets::WorldState::InitWorldStates::Write(), Battlefield::ZoneId, and WorldPackets::WorldState::InitWorldStates::ZoneID.

Referenced by OnBattleStart(), OnPlayerEnterZone(), OnPlayerJoinWar(), and SendInitWorldStatesToAll().

◆ SendInitWorldStatesToAll()

void BattlefieldWG::SendInitWorldStatesToAll ( )
overridevirtual

Send all worldstate data to all players in zone.

Implements Battlefield.

984{
985 for (uint8 team = 0; team < 2; team++)
986 for (ObjectGuid const& guid : Players[team])
987 if (Player* player = ObjectAccessor::FindPlayer(guid))
988 SendInitWorldStatesTo(player);
989}

References ObjectAccessor::FindPlayer(), Battlefield::Players, and SendInitWorldStatesTo().

Referenced by UpdatedDestroyedTowerCount().

◆ SendUpdateWorldStateMessage()

void BattlefieldWG::SendUpdateWorldStateMessage ( uint32  variable,
uint32  value,
Player player = nullptr 
)
1008{
1010 worldState.VariableID = variable;
1011 worldState.Value = value;
1012
1013 if (player)
1014 player->SendDirectMessage(worldState.Write());
1015 else
1016 sWorldSessionMgr->SendGlobalMessage(worldState.Write());
1017}
#define sWorldSessionMgr
Definition WorldSessionMgr.h:108
Definition WorldStatePackets.h:50
int32 Value
Definition WorldStatePackets.h:57
WorldPacket const * Write() override
Definition WorldStatePackets.cpp:40
int32 VariableID
Definition WorldStatePackets.h:56

References Player::SendDirectMessage(), sWorldSessionMgr, WorldPackets::WorldState::UpdateWorldState::Value, WorldPackets::WorldState::UpdateWorldState::VariableID, and WorldPackets::WorldState::UpdateWorldState::Write().

Referenced by SendUpdateWorldStates().

◆ SendUpdateWorldStates()

void BattlefieldWG::SendUpdateWorldStates ( Player player = nullptr)
overridevirtual

Implements Battlefield.

992{
993 uint32 timer = GetTimer() / 1000;
994 bool iconActive = timer < 15 * MINUTE || IsWarTime();
995
1002
1003 for (uint32 i = 0; i < 2; ++i)
1005}
void SendUpdateWorldStateMessage(uint32 variable, uint32 value, Player *player=nullptr)
Definition BattlefieldWG.cpp:1007

References ClockWorldState, Battlefield::GetAttackerTeam(), Battlefield::GetDefenderTeam(), GameTime::GetGameTime(), Battlefield::GetTimer(), Battlefield::IsWarTime(), MINUTE, SendUpdateWorldStateMessage(), TEAM_ALLIANCE, WORLD_STATE_BATTLEFIELD_WG_ACTIVE, WORLD_STATE_BATTLEFIELD_WG_ATTACKER, WORLD_STATE_BATTLEFIELD_WG_CONTROL, WORLD_STATE_BATTLEFIELD_WG_DEFENDER, WORLD_STATE_BATTLEFIELD_WG_ICON_ACTIVE, and WORLD_STATE_BATTLEFIELD_WG_SHOW.

◆ SetRelicInteractible()

void BattlefieldWG::SetRelicInteractible ( bool  allow)
inline

Define if player can interact with the relic.

375{ IsRelicInteractible = allow; }

References IsRelicInteractible.

Referenced by BfWGGameObjectBuilding::Destroyed().

◆ SetupBattlefield()

bool BattlefieldWG::SetupBattlefield ( )
overridevirtual

Called when battlefield is setup, at server start.

Reimplemented from Battlefield.

47{
48 TypeId = BATTLEFIELD_WG; // See enum BattlefieldTypes
52 BfMap = sMapMgr->FindMap(MapId, 0);
53
54 // init stalker AFTER setting map id... we spawn it at map=random memory value?...
56
58 Enabled = sWorld->getIntConfig(CONFIG_WINTERGRASP_ENABLE) == 1;
64
67 StartGrouping = false;
68
69 TenacityStack = 0;
71 IsRelicInteractible = false;
72
73 KickPosition.Relocate(5728.117f, 2714.346f, 697.733f, 0);
75
77
79
80 // Init Graveyards
82
83 // Load from db
86 !sWorldState->getWorldState(ClockWorldState[0]))
87 {
91 }
92
95
96 Timer = sWorldState->getWorldState(ClockWorldState[0]);
97 if (Active)
98 {
99 Active = false;
101 }
102
103 for (uint8 i = 0; i < BATTLEFIELD_WG_GRAVEYARD_MAX; i++)
104 {
105 BfGraveyardWG* graveyard = new BfGraveyardWG(this);
106
107 // When between games, the graveyard is controlled by the defending team
108 if (WGGraveyard[i].startcontrol == TEAM_NEUTRAL)
110 else
111 graveyard->Initialize(WGGraveyard[i].startcontrol, WGGraveyard[i].gyid);
112
113 graveyard->SetTextId(WGGraveyard[i].textid);
114 GraveyardList[i] = graveyard;
115 }
116
117 // Spawn workshop creatures and gameobjects
118 for (uint8 i = 0; i < WG_MAX_WORKSHOP; i++)
119 {
120 WGWorkshop* workshop = new WGWorkshop(this, i);
122 workshop->GiveControlTo(GetAttackerTeam(), true);
123 else
124 workshop->GiveControlTo(GetDefenderTeam(), true);
125
126 // Note: Capture point is added once the gameobject is created.
127 WorkshopsList.insert(workshop);
128 }
129
130 // Spawn NPCs in the defender's keep, both Horde and Alliance
131 for (uint8 i = 0; i < WG_MAX_KEEP_NPC; i++)
132 {
133 // Horde npc
134 if (Creature* creature = SpawnCreature(WGKeepNPC[i].entryHorde, WGKeepNPC[i].x, WGKeepNPC[i].y, WGKeepNPC[i].z, WGKeepNPC[i].o, TEAM_HORDE))
135 KeepCreature[TEAM_HORDE].insert(creature->GetGUID());
136 // Alliance npc
137 if (Creature* creature = SpawnCreature(WGKeepNPC[i].entryAlliance, WGKeepNPC[i].x, WGKeepNPC[i].y, WGKeepNPC[i].z, WGKeepNPC[i].o, TEAM_ALLIANCE))
138 KeepCreature[TEAM_ALLIANCE].insert(creature->GetGUID());
139 }
140
141 // Hide NPCs from the Attacker's team in the keep
142 for (ObjectGuid const& guid : KeepCreature[GetAttackerTeam()])
143 if (Creature* creature = GetCreature(guid))
144 HideNpc(creature);
145
146 // Spawn Horde NPCs outside the keep
147 for (uint8 i = 0; i < WG_OUTSIDE_ALLIANCE_NPC; i++)
148 if (Creature* creature = SpawnCreature(WGOutsideNPC[i].entryHorde, WGOutsideNPC[i].x, WGOutsideNPC[i].y, WGOutsideNPC[i].z, WGOutsideNPC[i].o, TEAM_HORDE))
149 OutsideCreature[TEAM_HORDE].insert(creature->GetGUID());
150
151 // Spawn Alliance NPCs outside the keep
153 if (Creature* creature = SpawnCreature(WGOutsideNPC[i].entryAlliance, WGOutsideNPC[i].x, WGOutsideNPC[i].y, WGOutsideNPC[i].z, WGOutsideNPC[i].o, TEAM_ALLIANCE))
154 OutsideCreature[TEAM_ALLIANCE].insert(creature->GetGUID());
155
156 // Hide units outside the keep that are defenders
157 for (ObjectGuid const& guid : OutsideCreature[GetDefenderTeam()])
158 if (Creature* creature = GetCreature(guid))
159 HideNpc(creature);
160
161 // Spawn turrets and hide them per default
162 for (uint8 i = 0; i < WG_MAX_TURRET; i++)
163 {
164 Position towerCannonPos = WGTurret[i].GetPosition();
165 if (Creature* creature = SpawnCreature(NPC_WINTERGRASP_TOWER_CANNON, towerCannonPos, TEAM_ALLIANCE))
166 {
167 CanonList.insert(creature->GetGUID());
168 HideNpc(creature);
169 }
170 }
171
172 // Spawn all gameobjects
173 for (uint8 i = 0; i < WG_MAX_OBJ; i++)
174 {
178 BuildingsInZone.insert(b);
179 }
180
181 // Spawning portal defender
182 for (uint8 i = 0; i < WG_MAX_TELEPORTER; i++)
183 {
185 DefenderPortalList.insert(go);
187 }
188
190
191 // Schedule always-running periodic timers
194 {
195 for (BfGraveyard* gy : GraveyardList)
196 if (gy)
197 gy->Resurrect();
198 context.Repeat();
199 });
200
202 {
205 sWorldState->setWorldState(ClockWorldState[0], Timer);
206 context.Repeat();
207 });
208
209 return true;
210}
uint8 const WG_OUTSIDE_ALLIANCE_NPC
Definition BattlefieldWG.h:460
uint8 const WG_MAX_KEEP_NPC
Definition BattlefieldWG.h:458
uint8 const WG_MAX_TURRET
Definition BattlefieldWG.h:457
@ BATTLEFIELD_WG_NPC_STALKER
Definition BattlefieldWG.h:147
WintergraspObjectPositionData const WGKeepNPC[WG_MAX_KEEP_NPC]
Definition BattlefieldWG.h:642
WintergraspTeleporterData const WGPortalDefenderData[WG_MAX_TELEPORTER]
Definition BattlefieldWG.h:728
uint8 const WG_MAX_OUTSIDE_NPC
Definition BattlefieldWG.h:459
@ BATTLEFIELD_WG_GRAVEYARD_MAX
Definition BattlefieldWG.h:128
uint8 const WG_MAX_TELEPORTER
Definition BattlefieldWG.h:461
WintergraspObjectPositionData const WGOutsideNPC[WG_MAX_OUTSIDE_NPC]
Definition BattlefieldWG.h:701
BfWGCoordGY const WGGraveyard[BATTLEFIELD_WG_GRAVEYARD_MAX]
Definition BattlefieldWG.h:219
Position const WGTurret[WG_MAX_TURRET]
Definition BattlefieldWG.h:621
@ BATTLEFIELD_WG_DATA_MAX
Definition BattlefieldWG.h:101
WintergraspBuildingSpawnData const WGGameObjectBuilding[WG_MAX_OBJ]
Definition BattlefieldWG.h:573
float const WintergraspStalkerPos[4]
Definition BattlefieldWG.h:45
@ BATTLEFIELD_WG
Definition Battlefield.h:30
@ BATTLEFIELD_TIMER_GROUP_RESURRECT
Definition Battlefield.h:61
@ BATTLEFIELD_TIMER_GROUP_SAVE
Definition Battlefield.h:63
@ BATTLEFIELD_BATTLEID_WG
Definition Battlefield.h:36
#define RESURRECTION_INTERVAL
Definition Battleground.h:163
constexpr auto IN_MILLISECONDS
Definition Common.h:53
std::uint64_t uint64
Definition Define.h:106
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
Definition Duration.h:27
#define sMapMgr
Definition MapMgr.h:220
uint32 urand(uint32 min, uint32 max)
Definition Random.cpp:44
@ CONFIG_WINTERGRASP_PLR_MIN_LVL
Definition WorldConfig.h:328
@ CONFIG_WINTERGRASP_BATTLETIME
Definition WorldConfig.h:329
@ CONFIG_WINTERGRASP_NOBATTLETIME
Definition WorldConfig.h:330
@ CONFIG_WINTERGRASP_RESTART_AFTER_CRASH
Definition WorldConfig.h:331
@ CONFIG_WINTERGRASP_ENABLE
Definition WorldConfig.h:284
@ CONFIG_WINTERGRASP_PLR_MAX
Definition WorldConfig.h:326
@ CONFIG_WINTERGRASP_PLR_MIN
Definition WorldConfig.h:327
Timer
Definition boss_solakar_flamewreath.cpp:29
void Resurrect(Creature *target)
Definition bosses_opera.cpp:885
uint32 BattleTime
Definition Battlefield.h:408
uint32 MaxPlayer
Definition Battlefield.h:405
bool StartGrouping
Definition Battlefield.h:418
uint32 BattleId
Definition Battlefield.h:401
Creature * SpawnCreature(uint32 entry, float x, float y, float z, float o, TeamId teamId)
Definition Battlefield.cpp:744
uint32 MinPlayer
Definition Battlefield.h:406
void RegisterZone(uint32 zoneId)
Definition Battlefield.cpp:467
uint32 NoWarBattleTime
Definition Battlefield.h:409
void InitStalker(uint32 entry, float x, float y, float z, float o)
Definition Battlefield.cpp:268
uint32 MinLevel
Definition Battlefield.h:407
uint32 RestartAfterCrash
Definition Battlefield.h:410
uint32 StartGroupingTimer
Definition Battlefield.h:417
std::vector< uint32 > Data32
Definition Battlefield.h:425
Map * BfMap
Definition Battlefield.h:404
WorldLocation KickPosition
Definition Battlefield.h:412
uint32 TimeForAcceptInvite
Definition Battlefield.h:411
void SetGraveyardNumber(uint32 number)
Definition Battlefield.h:301
bool Enabled
Definition Battlefield.h:385
uint32 TypeId
Definition Battlefield.h:400
Definition BattlefieldWG.h:109
void SetTextId(uint32 textid)
Definition BattlefieldWG.h:113
void Initialize(TeamId startControl, uint32 graveyardId)
Definition Battlefield.cpp:639
uint32 m_mapId
Definition Position.h:324
Definition WorldState.h:284
void Init(GameObject *gobj, uint32 type, uint32 worldstate, uint8 damageText, uint8 destroyText)
Definition BattlefieldWG.h:1180
Definition Position.h:27
void GetPosition(float &x, float &y) const
Definition Position.h:126
void Relocate(float x, float y)
Definition Position.h:77
void GiveControlTo(TeamId team, bool init)
Definition BattlefieldWG.h:1421

References Battlefield::_scheduler, Battlefield::Active, AREA_WINTERGRASP, BATTLEFIELD_BATTLEID_WG, BATTLEFIELD_TIMER_GROUP_RESURRECT, BATTLEFIELD_TIMER_GROUP_SAVE, BATTLEFIELD_WG, BATTLEFIELD_WG_DATA_MAX, BATTLEFIELD_WG_GRAVEYARD_MAX, BATTLEFIELD_WG_GY_WORKSHOP_SE, BATTLEFIELD_WG_GY_WORKSHOP_SW, BATTLEFIELD_WG_NPC_STALKER, BATTLEFIELD_WG_WORKSHOP_SE, BATTLEFIELD_WG_WORKSHOP_SW, Battlefield::BattleId, Battlefield::BattleTime, Battlefield::BfMap, BuildingsInZone, CanonList, ObjectGuid::Clear(), ClockWorldState, CONFIG_WINTERGRASP_BATTLETIME, CONFIG_WINTERGRASP_ENABLE, CONFIG_WINTERGRASP_NOBATTLETIME, CONFIG_WINTERGRASP_PLR_MAX, CONFIG_WINTERGRASP_PLR_MIN, CONFIG_WINTERGRASP_PLR_MIN_LVL, CONFIG_WINTERGRASP_RESTART_AFTER_CRASH, Battlefield::Data32, DefenderPortalList, Battlefield::DefenderTeam, Battlefield::Enabled, GAMEOBJECT_FACTION, Battlefield::GetAttackerTeam(), Battlefield::GetCreature(), Battlefield::GetDefenderTeam(), Position::GetPosition(), WGWorkshop::GiveControlTo(), Battlefield::GraveyardList, BfWGCoordGY::gyid, Battlefield::HideNpc(), IN_MILLISECONDS, BfWGGameObjectBuilding::Init(), BfGraveyard::Initialize(), Battlefield::InitStalker(), IsRelicInteractible, KeepCreature, Battlefield::KickPosition, WorldLocation::m_mapId, MAP_NORTHREND, Battlefield::MapId, Battlefield::MaxPlayer, Battlefield::MinLevel, Battlefield::MinPlayer, MINUTE, Battlefield::NoWarBattleTime, NPC_WINTERGRASP_TOWER_CANNON, OutsideCreature, Battlefield::RegisterZone(), Position::Relocate(), TaskContext::Repeat(), Battlefield::RestartAfterCrash, RESURRECTION_INTERVAL, TaskScheduler::Schedule(), Battlefield::SetGraveyardNumber(), BfGraveyardWG::SetTextId(), Object::SetUInt32Value(), sMapMgr, Battlefield::SpawnCreature(), Battlefield::SpawnGameObject(), Battlefield::StartGrouping, Battlefield::StartGroupingTimer, sWorld, sWorldState, TEAM_ALLIANCE, TEAM_HORDE, TEAM_NEUTRAL, TenacityStack, Battlefield::TimeForAcceptInvite, TitansRelic, Battlefield::TypeId, UpdateCounterVehicle(), urand(), WG_MAX_KEEP_NPC, WG_MAX_OBJ, WG_MAX_OUTSIDE_NPC, WG_MAX_TELEPORTER, WG_MAX_TURRET, WG_MAX_WORKSHOP, WG_OUTSIDE_ALLIANCE_NPC, WGGameObjectBuilding, WGGraveyard, WGKeepNPC, WGOutsideNPC, WGPortalDefenderData, WGTurret, WintergraspFaction, WintergraspStalkerPos, WorkshopsList, WORLD_STATE_BATTLEFIELD_WG_ACTIVE, WORLD_STATE_BATTLEFIELD_WG_DEFENDER, and Battlefield::ZoneId.

◆ Update()

bool BattlefieldWG::Update ( uint32  diff)
overridevirtual

Called for update battlefield data.

  • Save battle timer in database every minutes
  • Update imunity aura from graveyard
    Parameters
    diff: time elapsed since the last call (in ms)

Reimplemented from Battlefield.

213{
214 return Battlefield::Update(diff);
215}
virtual bool Update(uint32 diff)
Called every time for update bf data and time.
Definition Battlefield.cpp:145

References Battlefield::Update().

◆ UpdateCounterVehicle()

void BattlefieldWG::UpdateCounterVehicle ( bool  init)

◆ UpdateDamagedTowerCount()

void BattlefieldWG::UpdateDamagedTowerCount ( TeamId  team)

Called when a tower is damaged.

  • Update tower count (for reward calcul)
1126{
1127 if (team == GetAttackerTeam())
1128 {
1131 }
1132}

References BATTLEFIELD_WG_DATA_DAMAGED_TOWER_ATT, BATTLEFIELD_WG_DATA_INTACT_TOWER_ATT, and Battlefield::GetAttackerTeam().

Referenced by BfWGGameObjectBuilding::Damaged().

◆ UpdatedDestroyedTowerCount()

void BattlefieldWG::UpdatedDestroyedTowerCount ( TeamId  team,
GameObject go 
)

Called when tower is broken.

  • Update tower buff
  • check if three south tower is down for remove 10 minutes to wg
1034{
1035 // Destroy an attack tower
1036 if (team == GetAttackerTeam())
1037 {
1038 // Update counter
1041
1042 // Remove buff stack on attackers
1043 for (ObjectGuid const& guid : PlayersInWar[GetAttackerTeam()])
1044 if (Player* player = ObjectAccessor::FindPlayer(guid))
1045 player->RemoveAuraFromStack(SPELL_TOWER_CONTROL);
1046
1047 // Add buff stack to defenders
1048 for (ObjectGuid const& guid : PlayersInWar[GetDefenderTeam()])
1049 if (Player* player = ObjectAccessor::FindPlayer(guid))
1050 {
1051 // Quest - Wintergrasp - Southern Tower Kill
1052 if (go && player->GetDistance2d(go) < 200.0f)
1053 player->KilledMonsterCredit(NPC_QUEST_SOUTHERN_TOWER_KILL);
1054
1055 player->CastSpell(player, SPELL_TOWER_CONTROL, true);
1056 player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, SPELL_LEANING_TOWER_ACHIEVEMENT, 0, 0);
1057 }
1058
1059 // If all three south towers are destroyed (ie. all attack towers), remove ten minutes from battle time
1061 {
1062 if (int32(Timer - 600000) < 0)
1063 Timer = 0;
1064 else
1065 Timer -= 600000;
1067 }
1068 }
1069 else
1070 {
1071 // Xinef: rest of structures, quest credit
1072 for (ObjectGuid const& guid : PlayersInWar[GetAttackerTeam()])
1073 if (Player* player = ObjectAccessor::FindPlayer(guid))
1074 {
1075 // Quest - Wintergrasp - Vehicle Protected
1076 if (go && player->GetDistance2d(go) < 100.0f)
1077 player->KilledMonsterCredit(NPC_QUEST_VEHICLE_PROTECTED);
1078 }
1079 }
1080}
@ NPC_QUEST_VEHICLE_PROTECTED
Definition BattlefieldWG.h:194
@ NPC_QUEST_SOUTHERN_TOWER_KILL
Definition BattlefieldWG.h:193
@ SPELL_LEANING_TOWER_ACHIEVEMENT
Definition BattlefieldWG.h:82
@ ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET
Definition DBCEnums.h:142
std::int32_t int32
Definition Define.h:103
void SendInitWorldStatesToAll() override
Send all worldstate data to all players in zone.
Definition BattlefieldWG.cpp:983

References ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, BATTLEFIELD_WG_DATA_BROKEN_TOWER_ATT, BATTLEFIELD_WG_DATA_DAMAGED_TOWER_ATT, ObjectAccessor::FindPlayer(), Battlefield::GetAttackerTeam(), GetData(), Battlefield::GetDefenderTeam(), WorldObject::GetDistance2d(), NPC_QUEST_SOUTHERN_TOWER_KILL, NPC_QUEST_VEHICLE_PROTECTED, Battlefield::PlayersInWar, SendInitWorldStatesToAll(), SPELL_LEANING_TOWER_ACHIEVEMENT, and SPELL_TOWER_CONTROL.

Referenced by BfWGGameObjectBuilding::Destroyed().

◆ UpdateTenacity()

void BattlefieldWG::UpdateTenacity ( )
1157{
1158 TeamId team = TEAM_NEUTRAL;
1159 uint32 alliancePlayers = PlayersInWar[TEAM_ALLIANCE].size();
1160 uint32 hordePlayers = PlayersInWar[TEAM_HORDE].size();
1161 int32 newStack = 0;
1162
1163 if (alliancePlayers && hordePlayers)
1164 {
1165 if (alliancePlayers < hordePlayers)
1166 newStack = int32((((float)hordePlayers / alliancePlayers) - 1.0f) * 4.0f); // positive, should cast on alliance
1167 else if (alliancePlayers > hordePlayers)
1168 newStack = int32((1.0f - ((float)alliancePlayers / hordePlayers)) * 4.0f); // negative, should cast on horde
1169 }
1170
1171 // Return if no change in stack and apply tenacity to new player
1172 if (newStack == TenacityStack)
1173 {
1174 for (ObjectGuid const& guid : UpdateTenacityList)
1175 if (Player* newPlayer = ObjectAccessor::FindPlayer(guid))
1176 if ((newPlayer->GetTeamId() == TEAM_ALLIANCE && TenacityStack > 0) || (newPlayer->GetTeamId() == TEAM_HORDE && TenacityStack < 0))
1177 {
1178 newStack = std::min(std::abs(newStack), 20);
1179 uint32 buff_honor = GetHonorBuff(newStack);
1180 newPlayer->SetAuraStack(SPELL_TENACITY, newPlayer, newStack);
1181 if (buff_honor)
1182 newPlayer->CastSpell(newPlayer, buff_honor, true);
1183 }
1184 return;
1185 }
1186
1187 if (TenacityStack != 0)
1188 {
1189 if (TenacityStack > 0 && newStack <= 0) // old buff was on alliance
1190 team = TEAM_ALLIANCE;
1191 else if (TenacityStack < 0 && newStack >= 0) // old buff was on horde
1192 team = TEAM_HORDE;
1193 }
1194
1195 TenacityStack = newStack;
1196 // Remove old buff
1197 if (team != TEAM_NEUTRAL)
1198 {
1199 for (ObjectGuid const& guid : PlayersInWar[team])
1200 if (Player* player = ObjectAccessor::FindPlayer(guid))
1201 player->RemoveAurasDueToSpell(SPELL_TENACITY);
1202
1203 for (ObjectGuid const& guid : Vehicles[team])
1204 if (Creature* creature = GetCreature(guid))
1205 creature->RemoveAurasDueToSpell(SPELL_TENACITY_VEHICLE);
1206 }
1207
1208 // Apply new buff
1209 if (newStack)
1210 {
1211 team = newStack > 0 ? TEAM_ALLIANCE : TEAM_HORDE;
1212 newStack = std::min(std::abs(newStack), 20);
1213 uint32 buff_honor = GetHonorBuff(newStack);
1214
1215 for (ObjectGuid const& guid : PlayersInWar[team])
1216 if (Player* player = ObjectAccessor::FindPlayer(guid))
1217 {
1218 player->SetAuraStack(SPELL_TENACITY, player, newStack);
1219 if (buff_honor)
1220 player->CastSpell(player, buff_honor, true);
1221 }
1222
1223 for (ObjectGuid const& guid : Vehicles[team])
1224 if (Creature* creature = GetCreature(guid))
1225 {
1226 creature->SetAuraStack(SPELL_TENACITY_VEHICLE, creature, newStack);
1227 if (buff_honor)
1228 creature->CastSpell(creature, buff_honor, true);
1229 }
1230 }
1231}
@ SPELL_TENACITY_VEHICLE
Definition BattlefieldWG.h:54
TeamId GetTeamId(PvPTeamId teamId)
Definition SharedDefines.h:3720
uint32 GetHonorBuff(int32 stack) const
Definition BattlefieldWG.cpp:1134

References ObjectAccessor::FindPlayer(), Battlefield::GetCreature(), GetHonorBuff(), Battlefield::PlayersInWar, SPELL_TENACITY, SPELL_TENACITY_VEHICLE, TEAM_ALLIANCE, TEAM_HORDE, TEAM_NEUTRAL, TenacityStack, UpdateTenacityList, and Vehicles.

Referenced by OnBattleStart().

◆ UpdateVehicleCountWG()

Member Data Documentation

◆ BuildingsInZone

◆ CanonList

GuidUnorderedSet BattlefieldWG::CanonList
protected

◆ DefenderPortalList

GameObjectSet BattlefieldWG::DefenderPortalList
protected

Referenced by OnBattleEnd(), and SetupBattlefield().

◆ IsRelicInteractible

bool BattlefieldWG::IsRelicInteractible
protected

◆ KeepCreature

GuidUnorderedSet BattlefieldWG::KeepCreature[2]
protected

Referenced by OnBattleEnd(), and SetupBattlefield().

◆ KeepGameObject

GameObjectSet BattlefieldWG::KeepGameObject[2]
protected

Referenced by OnBattleEnd().

◆ OutsideCreature

GuidUnorderedSet BattlefieldWG::OutsideCreature[2]
protected

Referenced by OnBattleEnd(), and SetupBattlefield().

◆ TenacityStack

int32 BattlefieldWG::TenacityStack
protected

◆ TitansRelic

ObjectGuid BattlefieldWG::TitansRelic
protected

◆ UpdateTenacityList

GuidUnorderedSet BattlefieldWG::UpdateTenacityList
protected

◆ Vehicles

GuidUnorderedSet BattlefieldWG::Vehicles[2]
protected

◆ WorkshopsList


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