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 player 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 kill 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 ()
 
uint32 GetZoneId ()
 
void TeamApplyBuff (TeamId team, uint32 spellId, uint32 spellId2=0)
 
bool IsWarTime ()
 Return true if battle is start, false if battle is not started.
 
void ToggleBattlefield (bool enable)
 Enable or Disable battlefield.
 
bool IsEnabled ()
 Return if battlefield is enable.
 
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) enter in zone.
 
void HandlePlayerLeaveZone (Player *player, uint32 zone)
 Called when player (player) leave 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 ()
 
TeamId GetAttackerTeam ()
 
TeamId GetOtherTeam (TeamId team)
 
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 npc_guid, ObjectGuid player_guid)
 
void RemovePlayerFromResurrectQueue (ObjectGuid player_guid)
 
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 ()
 
void AskToLeaveQueue (Player *player)
 
void PlayerAskToLeave (Player *player)
 
bool CanFlyIn ()
 Return if we can use mount in battlefield.
 
void SendAreaSpiritHealerQueryOpcode (Player *player, const ObjectGuid &guid)
 
void StartBattle ()
 
void EndBattle (bool endByTimer)
 
void HideNpc (Creature *creature)
 
void ShowNpc (Creature *creature, bool aggressive)
 
GraveyardVect GetGraveyardVector ()
 
uint32 GetTimer ()
 
void SetTimer (uint32 timer)
 
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 m_isRelicInteractible
 
Workshop WorkshopsList
 
GameObjectSet DefenderPortalList
 
GameObjectSet m_KeepGameObject [2]
 
GameObjectBuilding BuildingsInZone
 
GuidUnorderedSet m_vehicles [2]
 
GuidUnorderedSet CanonList
 
GuidUnorderedSet KeepCreature [2]
 
GuidUnorderedSet OutsideCreature [2]
 
GuidUnorderedSet m_updateTenacityList
 
int32 m_tenacityStack
 
uint32 m_tenacityUpdateTimer
 
uint32 m_saveTimer
 
ObjectGuid m_titansRelic
 
- Protected Attributes inherited from Battlefield
ObjectGuid StalkerGuid
 
uint32 m_Timer
 
bool m_IsEnabled
 
bool m_isActive
 
TeamId m_DefenderTeam
 
BfCapturePointVector m_capturePoints
 
GuidUnorderedSet m_players [PVP_TEAMS_COUNT]
 
GuidUnorderedSet m_PlayersInQueue [PVP_TEAMS_COUNT]
 
GuidUnorderedSet m_PlayersInWar [PVP_TEAMS_COUNT]
 
PlayerTimerMap m_InvitedPlayers [PVP_TEAMS_COUNT]
 
PlayerTimerMap m_PlayersWillBeKick [PVP_TEAMS_COUNT]
 
uint32 m_TypeId
 
uint32 m_BattleId
 
uint32 m_ZoneId
 
uint32 m_MapId
 
Mapm_Map
 
uint32 m_MaxPlayer
 
uint32 m_MinPlayer
 
uint32 m_MinLevel
 
uint32 m_BattleTime
 
uint32 m_NoWarBattleTime
 
uint32 m_RestartAfterCrash
 
uint32 m_TimeForAcceptInvite
 
uint32 m_uiKickDontAcceptTimer
 
WorldLocation KickPosition
 
uint32 m_uiKickAfkPlayersTimer
 
GraveyardVect m_GraveyardList
 
uint32 m_LastResurectTimer
 
uint32 m_StartGroupingTimer
 
bool m_StartGrouping
 
GuidUnorderedSet m_Groups [PVP_TEAMS_COUNT]
 
std::vector< uint64m_Data64
 
std::vector< uint32m_Data32
 

Additional Inherited Members

- Public Types inherited from Battlefield
typedef std::vector< BfCapturePoint * > BfCapturePointVector
 typedef of map witch store capturepoint and the associate gameobject entry
 
- 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)
 

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 (Workshop::const_iterator itr = WorkshopsList.begin(); itr != WorkshopsList.end(); ++itr)
40 delete *itr;
41
42 for (GameObjectBuilding::const_iterator itr = BuildingsInZone.begin(); itr != BuildingsInZone.end(); ++itr)
43 delete *itr;
44}
Workshop WorkshopsList
Definition BattlefieldWG.h:439
GameObjectBuilding BuildingsInZone
Definition BattlefieldWG.h:443

References BuildingsInZone, and WorkshopsList.

Member Function Documentation

◆ AddUpdateTenacity()

void BattlefieldWG::AddUpdateTenacity ( Player player)
1150{
1151 m_updateTenacityList.insert(player->GetGUID());
1152}
GuidUnorderedSet m_updateTenacityList
Definition BattlefieldWG.h:449
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:113

References Object::GetGUID(), and m_updateTenacityList.

Referenced by OnPlayerJoinWar().

◆ BrokenWallOrTower()

void BattlefieldWG::BrokenWallOrTower ( TeamId  team)

Called when a wall/tower is broken.

  • Update quest
1024{
1025 // might be some use for this in the future. old code commented out below. KL
1026 /* if (team == GetDefenderTeam())
1027 {
1028 for (GuidUnorderedSet::const_iterator itr = m_PlayersInWar[GetAttackerTeam()].begin(); itr != m_PlayersInWar[GetAttackerTeam()].end(); ++itr)
1029 {
1030 if (Player* player = ObjectAccessor::FindPlayer(*itr))
1031 IncrementQuest(player, WGQuest[player->GetTeamId()][2], true);
1032 }
1033 }*/
1034}

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 m_isRelicInteractible; }
bool m_isRelicInteractible
Definition BattlefieldWG.h:437

References m_isRelicInteractible.

Referenced by ProcessEvent().

◆ CapturePointTaken()

void BattlefieldWG::CapturePointTaken ( uint32  areaId)
340{
341 for (uint8 i = 0; i < PVP_TEAMS_COUNT; ++i)
342 for (GuidUnorderedSet::iterator itr = m_players[i].begin(); itr != m_players[i].end(); ++itr)
343 if (Player* player = ObjectAccessor::FindPlayer(*itr))
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:3461
GuidUnorderedSet m_players[PVP_TEAMS_COUNT]
Definition Battlefield.h:374
Definition Player.h:1082
Player * FindPlayer(ObjectGuid const guid)
Definition ObjectAccessor.cpp:245

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

Referenced by WGWorkshop::GiveControlTo().

◆ FillInitialWorldStates()

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

Implements Battlefield.

941{
942 uint32 timer = GetTimer() / 1000;
943 bool iconActive = timer < 15 * MINUTE || IsWarTime();
944
945 packet.Worldstates.reserve(4+4+WG_MAX_OBJ+WG_MAX_WORKSHOP);
948
949 // Note: cleanup these two, their names look awkward
950 packet.Worldstates.emplace_back(WORLD_STATE_BATTLEFIELD_WG_ACTIVE, IsWarTime() ? 0 : 1);
951 packet.Worldstates.emplace_back(WORLD_STATE_BATTLEFIELD_WG_SHOW, IsWarTime() ? 1 : 0);
952 packet.Worldstates.emplace_back(WORLD_STATE_BATTLEFIELD_WG_CONTROL, m_DefenderTeam == TEAM_ALLIANCE ? 2 : 1); // Alliance 2, Hord 1
953 packet.Worldstates.emplace_back(WORLD_STATE_BATTLEFIELD_WG_ICON_ACTIVE, iconActive ? 1 : 0);
954
955 for (uint32 i = 0; i < 2; ++i)
956 packet.Worldstates.emplace_back(ClockWorldState[i], GameTime::GetGameTime().count() + timer);
957
962
967
968 for (GameObjectBuilding::const_iterator itr = BuildingsInZone.begin(); itr != BuildingsInZone.end(); ++itr)
969 packet.Worldstates.emplace_back((*itr)->m_WorldState, (*itr)->m_State);
970
971 for (Workshop::const_iterator itr = WorkshopsList.begin(); itr != WorkshopsList.end(); ++itr)
972 if (*itr)
973 packet.Worldstates.emplace_back(WorkshopsData[(*itr)->workshopId].worldstate, (*itr)->state);
974}
WGWorkshopData const WorkshopsData[WG_MAX_WORKSHOP]
Definition BattlefieldWG.h:1039
uint8 const WG_MAX_OBJ
Definition BattlefieldWG.h:458
uint8 const WG_MAX_WORKSHOP
Definition BattlefieldWG.h:1029
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:760
@ 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:202
uint32 GetData(uint32 data) const override
Definition BattlefieldWG.cpp:917
TeamId GetDefenderTeam()
Definition Battlefield.h:275
TeamId m_DefenderTeam
Definition Battlefield.h:368
uint32 GetTimer()
Definition Battlefield.h:353
bool IsWarTime()
Return true if battle is start, false if battle is not started.
Definition Battlefield.h:247
TeamId GetAttackerTeam()
Definition Battlefield.h:276
std::vector< WorldStateInfo > Worldstates
Definition WorldStatePackets.h:46
Seconds GetGameTime()
Definition GameTime.cpp:38
uint32 worldstate
Definition BattlefieldWG.h:1034

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::GetAttackerTeam(), GetData(), Battlefield::GetDefenderTeam(), GameTime::GetGameTime(), Battlefield::GetTimer(), Battlefield::IsWarTime(), Battlefield::m_DefenderTeam, 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)
778{
779 for (uint32 itr = 0; itr < 2; ++itr)
780 {
781 if (m_vehicles[itr].find(vehicle->GetGUID()) != m_vehicles[itr].end())
782 {
783 //m_vehicles[itr].erase(vehicle->GetGUID());
784 if (itr == TEAM_HORDE)
786 else
788 return true;
789 }
790 }
791 return false;
792}
@ TEAM_HORDE
Definition SharedDefines.h:761
GuidUnorderedSet m_vehicles[2]
Definition BattlefieldWG.h:445
Definition UpdateData.h:52

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

Referenced by OnUnitDeath().

◆ GetAreaByGraveyardId()

uint32 BattlefieldWG::GetAreaByGraveyardId ( uint8  gId) const
544{
545 switch (gId)
546 {
555 }
556
557 return 0;
558}
@ AREA_THE_SUNKEN_RING
Definition AreaDefines.h:153
@ AREA_EASTSPARK_WORKSHOP
Definition AreaDefines.h:159
@ AREA_THE_BROKEN_TEMPLE
Definition AreaDefines.h:154
@ AREA_WESTSPARK_WORKSHOP
Definition AreaDefines.h:158
@ 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.

918{
919 // xinef: little hack, same area for default horde graveyard
920 // this graveyard is the one of broken temple!
921 if (data == AREA_THE_CHILLED_QUAGMIRE)
923
924 switch (data)
925 {
926 // Used to determine when the phasing spells must be casted
927 // See: SpellArea::IsFitToRequirements
932 // Graveyards and Workshops are controlled by the same team.
933 if (BfGraveyard const* graveyard = GetGraveyardById(GetSpiritGraveyardId(data)))
934 return graveyard->GetControlTeamId();
935 }
936
937 return Battlefield::GetData(data);
938}
@ AREA_THE_CHILLED_QUAGMIRE
Definition AreaDefines.h:157
uint8 GetSpiritGraveyardId(uint32 areaId) const
Definition BattlefieldWG.cpp:517
uint32 GetData(uint32 dataId) const override
Definition Battlefield.h:270
BfGraveyard * GetGraveyardById(uint32 id) const
Definition Battlefield.cpp:588
Definition Battlefield.h:146

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
1139{
1140 if (stack < 5)
1141 return 0;
1142 if (stack < 10)
1143 return SPELL_GREAT_HONOR;
1144 if (stack < 15)
1145 return SPELL_GREATER_HONOR;
1146 return SPELL_GREATEST_HONOR;
1147}
@ 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(m_titansRelic); }
ObjectGuid m_titansRelic
Definition BattlefieldWG.h:455
GameObject * GetGameObject(ObjectGuid const guid)
Definition Battlefield.cpp:866

References Battlefield::GetGameObject(), and m_titansRelic.

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

◆ GetSpiritGraveyardId()

uint8 BattlefieldWG::GetSpiritGraveyardId ( uint32  areaId) const
518{
519 switch (areaId)
520 {
531 case AREA_WINTERGRASP:
535 default:
536 LOG_ERROR("bg.battlefield", "BattlefieldWG::GetSpiritGraveyardId: Unexpected Area Id {}", areaId);
537 break;
538 }
539
540 return 0;
541}
@ AREA_WINTERGRASP_FORTRESS
Definition AreaDefines.h:156
@ AREA_WINTERGRASP
Definition AreaDefines.h:143
@ 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:157

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 kill in battlefield zone.

Reimplemented from Battlefield.

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

References ObjectAccessor::FindPlayer(), Object::GetEntry(), Player::GetTeamId(), Unit::HasAura(), Unit::IsFriendlyTo(), IsKeepNpc(), Object::IsPlayer(), Unit::IsVehicle(), Battlefield::m_PlayersInWar, NPC_QUEST_PVP_KILL_ALLIANCE, NPC_QUEST_PVP_KILL_HORDE, NPC_QUEST_PVP_KILL_VEHICLE, NPC_WINTERGRASP_TOWER_CANNON, 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 (GuidUnorderedSet::const_iterator itr = CanonList.begin(); itr != CanonList.end(); ++itr)
358 {
359 if (Creature* creature = GetCreature(*itr))
360 {
361 if (!endByTimer)
362 creature->SetFaction(WintergraspFaction[GetDefenderTeam()]);
363 HideNpc(creature);
364 }
365 }
366
367 // Change all npc in keep
368 for (GuidUnorderedSet::const_iterator itr = KeepCreature[GetAttackerTeam()].begin(); itr != KeepCreature[GetAttackerTeam()].end(); ++itr)
369 if (Creature* creature = GetCreature(*itr))
370 HideNpc(creature);
371
372 for (GuidUnorderedSet::const_iterator itr = KeepCreature[GetDefenderTeam()].begin(); itr != KeepCreature[GetDefenderTeam()].end(); ++itr)
373 if (Creature* creature = GetCreature(*itr))
374 ShowNpc(creature, true);
375
376 // Change all npc out of keep
377 for (GuidUnorderedSet::const_iterator itr = OutsideCreature[GetDefenderTeam()].begin(); itr != OutsideCreature[GetDefenderTeam()].end(); ++itr)
378 if (Creature* creature = GetCreature(*itr))
379 HideNpc(creature);
380
381 for (GuidUnorderedSet::const_iterator itr = OutsideCreature[GetAttackerTeam()].begin(); itr != OutsideCreature[GetAttackerTeam()].end(); ++itr)
382 if (Creature* creature = GetCreature(*itr))
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
390 for (GameObjectSet::const_iterator itr = m_KeepGameObject[GetDefenderTeam()].begin(); itr != m_KeepGameObject[GetDefenderTeam()].end(); ++itr)
391 (*itr)->SetRespawnTime(RESPAWN_IMMEDIATELY);
392
393 for (GameObjectSet::const_iterator itr = m_KeepGameObject[GetAttackerTeam()].begin(); itr != m_KeepGameObject[GetAttackerTeam()].end(); ++itr)
394 (*itr)->SetRespawnTime(RESPAWN_ONE_DAY);
395
396 // Update portal defender faction
397 for (GameObjectSet::const_iterator itr = DefenderPortalList.begin(); itr != DefenderPortalList.end(); ++itr)
398 (*itr)->SetUInt32Value(GAMEOBJECT_FACTION, WintergraspFaction[GetDefenderTeam()]);
399
400 // Saving data
401 for (GameObjectBuilding::const_iterator itr = BuildingsInZone.begin(); itr != BuildingsInZone.end(); ++itr)
402 {
403 (*itr)->Rebuild();
404 (*itr)->Save();
405 (*itr)->UpdateTurretAttack(true);
406 }
407
408 for (Workshop::const_iterator itr = WorkshopsList.begin(); itr != WorkshopsList.end(); ++itr)
409 {
410 (*itr)->GiveControlTo((*itr)->workshopId == BATTLEFIELD_WG_WORKSHOP_SE || (*itr)->workshopId == BATTLEFIELD_WG_WORKSHOP_SW ? GetAttackerTeam() : GetDefenderTeam(), true);
411 (*itr)->Save();
412 }
413
414 for (uint8 team = 0; team < 2; ++team)
415 {
416 for (GuidUnorderedSet::const_iterator itr = m_vehicles[team].begin(); itr != m_vehicles[team].end(); ++itr)
417 if (Creature* creature = GetCreature(*itr))
418 creature->DespawnOrUnsummon(1);
419
420 m_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 (GuidUnorderedSet::const_iterator itr = m_PlayersInWar[GetDefenderTeam()].begin(); itr != m_PlayersInWar[GetDefenderTeam()].end(); ++itr)
443 {
444 if (Player* player = ObjectAccessor::FindPlayer(*itr))
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 (GuidUnorderedSet::const_iterator itr = m_PlayersInWar[GetAttackerTeam()].begin(); itr != m_PlayersInWar[GetAttackerTeam()].end(); ++itr)
461 if (Player* player = ObjectAccessor::FindPlayer(*itr))
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 (GuidUnorderedSet::const_iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr)
477 {
478 if (Player* player = ObjectAccessor::FindPlayer(*itr))
479 {
480 player->RemoveAurasDueToSpell(m_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 m_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:512
@ BATTLEFIELD_WG_TEXT_DEFEND_KEEP
Definition BattlefieldWG.h:511
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:493
@ BATTLEFIELD_WG_WORKSHOP_SW
Definition BattlefieldWG.h:494
@ RESPAWN_IMMEDIATELY
Definition Battleground.h:160
@ RESPAWN_ONE_DAY
Definition Battleground.h:159
@ GAMEOBJECT_FACTION
Definition UpdateFields.h:402
GameObjectSet m_KeepGameObject[2]
Definition BattlefieldWG.h:442
void RemoveAurasFromPlayer(Player *player)
Definition BattlefieldWG.cpp:836
GameObject * GetRelic()
Return pointer to relic object.
Definition BattlefieldWG.h:366
GuidUnorderedSet CanonList
Definition BattlefieldWG.h:446
GuidUnorderedSet KeepCreature[2]
Definition BattlefieldWG.h:447
GuidUnorderedSet OutsideCreature[2]
Definition BattlefieldWG.h:448
GameObjectSet DefenderPortalList
Definition BattlefieldWG.h:441
Creature * GetCreature(ObjectGuid const guid)
Definition Battlefield.cpp:858
void ShowNpc(Creature *creature, bool aggressive)
Definition Battlefield.cpp:509
void SendWarning(uint8 id, WorldObject const *target=nullptr)
Definition Battlefield.cpp:480
void HideNpc(Creature *creature)
Definition Battlefield.cpp:499
Definition Creature.h:43
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, ObjectAccessor::FindPlayer(), GAMEOBJECT_FACTION, Battlefield::GetAttackerTeam(), Battlefield::GetCreature(), GetData(), Battlefield::GetDefenderTeam(), Battlefield::GetGraveyardById(), GetRelic(), Battlefield::HideNpc(), KeepCreature, Battlefield::m_DefenderTeam, m_KeepGameObject, Battlefield::m_players, Battlefield::m_PlayersInWar, m_titansRelic, m_vehicles, OutsideCreature, 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, 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.

225{
226 // Spawn titan relic
227 GameObject* go = SpawnGameObject(GO_WINTERGRASP_TITAN_S_RELIC, 5440.0f, 2840.8f, 430.43f, 0);
228 if (go)
229 {
230 // Update faction of relic, only attacker can click on
232 // Set in use (not allow to click on before last door is broken)
234
235 // save guid
236 m_titansRelic = go->GetGUID();
237 }
238 else
239 LOG_ERROR("bg.battlefield", "WG: Failed to spawn titan relic.");
240
241 // Update tower visibility and update faction
242 for (GuidUnorderedSet::const_iterator itr = CanonList.begin(); itr != CanonList.end(); ++itr)
243 {
244 if (Creature* creature = GetCreature(*itr))
245 {
246 ShowNpc(creature, true);
247 creature->SetFaction(WintergraspFaction[GetDefenderTeam()]);
248 }
249 }
250
251 // Rebuild all wall
252 for (GameObjectBuilding::const_iterator itr = BuildingsInZone.begin(); itr != BuildingsInZone.end(); ++itr)
253 {
254 if (*itr)
255 {
256 (*itr)->Rebuild();
257 (*itr)->UpdateTurretAttack(false);
258 }
259 }
260
264
265 // Update graveyard (in no war time all graveyard is to deffender, in war time, depend of base)
266 for (Workshop::const_iterator itr = WorkshopsList.begin(); itr != WorkshopsList.end(); ++itr)
267 if (*itr)
268 (*itr)->UpdateGraveyardAndWorkshop();
269
270 // Set Sliders capture points data to his owners when battle start
271 for (BfCapturePointVector::const_iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr)
272 (*itr)->SetCapturePointData((*itr)->GetCapturePointGo(),
273 (*itr)->GetCapturePointGo()->GetEntry() == GO_WINTERGRASP_FACTORY_BANNER_SE || (*itr)->GetCapturePointGo()->GetEntry() == GO_WINTERGRASP_FACTORY_BANNER_SW ? GetAttackerTeam() : GetDefenderTeam());
274
275 for (uint8 team = 0; team < 2; ++team)
276 for (GuidUnorderedSet::const_iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr)
277 {
278 // Kick player in orb room, TODO: offline player ?
279 if (Player* player = ObjectAccessor::FindPlayer(*itr))
280 {
281 float x, y, z;
282 player->GetPosition(x, y, z);
283 if (5500 > x && x > 5392 && y < 2880 && y > 2800 && z < 480)
284 player->TeleportTo(MAP_NORTHREND, 5349.8686f, 2838.481f, 409.240f, 0.046328f);
285 SendInitWorldStatesTo(player);
286 }
287 }
288 // Initialize vehicle counter
290 // Send start warning to all players
292
293 // Xinef: reset tenacity counter
294 m_tenacityStack = 0;
295 m_tenacityUpdateTimer = 20000;
296
299}
@ MAP_NORTHREND
Definition AreaDefines.h:241
@ BATTLEFIELD_WG_WORLD_START_MESSAGE
Definition BattlefieldWG.h:140
uint8 const WG_MAX_ATTACKTOWERS
Definition BattlefieldWG.h:768
@ GO_WINTERGRASP_FACTORY_BANNER_SW
Definition BattlefieldWG.h:537
@ GO_WINTERGRASP_TITAN_S_RELIC
Definition BattlefieldWG.h:539
@ GO_WINTERGRASP_FACTORY_BANNER_SE
Definition BattlefieldWG.h:536
@ BATTLEFIELD_WG_TEXT_START
Definition BattlefieldWG.h:502
@ CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_ENABLE
Definition IWorld.h:110
@ GO_FLAG_NOT_SELECTABLE
Definition SharedDefines.h:1607
int32 m_tenacityStack
Definition BattlefieldWG.h:451
void UpdateCounterVehicle(bool init)
Vehicle world states update.
Definition BattlefieldWG.cpp:301
uint32 m_tenacityUpdateTimer
Definition BattlefieldWG.h:452
void SendInitWorldStatesTo(Player *player)
Definition BattlefieldWG.cpp:976
void SetData(uint32 dataId, uint32 value) override
Definition Battlefield.h:271
GameObject * SpawnGameObject(uint32 entry, float x, float y, float z, float o)
Definition Battlefield.cpp:834
BfCapturePointVector m_capturePoints
Definition Battlefield.h:371
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:650
#define sWorld
Definition World.h:357

References 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, 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, Battlefield::m_capturePoints, Battlefield::m_players, m_tenacityStack, m_tenacityUpdateTimer, m_titansRelic, MAP_NORTHREND, SendInitWorldStatesTo(), Battlefield::SendWarning(), ChatHandler::SendWorldText(), Battlefield::SetData(), GameObject::SetGameObjectFlag(), Object::SetUInt32Value(), Battlefield::ShowNpc(), Battlefield::SpawnGameObject(), sWorld, UpdateCounterVehicle(), 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.

561{
562 // Accessing to db spawned creatures
563 switch (creature->GetEntry())
564 {
567 {
569 uint8 graveyardId = GetSpiritGraveyardId(creature->GetAreaId());
570 // xinef: little workaround, there are 2 spirit guides in same area
571 if (creature->IsWithinDist2d(5103.0f, 3461.5f, 5.0f))
572 graveyardId = BATTLEFIELD_WG_GY_WORKSHOP_NW;
573
574 if (m_GraveyardList[graveyardId])
575 m_GraveyardList[graveyardId]->SetSpirit(creature, teamId);
576 break;
577 }
578 }
579
580 // untested code - not sure if it is valid.
581 if (IsWarTime())
582 {
583 switch (creature->GetEntry())
584 {
589 {
590 if (!creature->IsSummon() || !creature->ToTempSummon()->GetSummonerGUID())
591 return;
592
594 if (!creator)
595 return;
596 TeamId team = creator->GetTeamId();
597
598 if (team == TEAM_HORDE)
599 {
601 {
603 creature->CastSpell(creature, SPELL_HORDE_FLAG, true);
604 m_vehicles[team].insert(creature->GetGUID());
606 }
607 else
608 {
609 creature->DespawnOrUnsummon();
610 return;
611 }
612 }
613 else
614 {
616 {
618 creature->CastSpell(creature, SPELL_ALLIANCE_FLAG, true);
619 m_vehicles[team].insert(creature->GetGUID());
621 }
622 else
623 {
624 creature->DespawnOrUnsummon();
625 return;
626 }
627 }
628 break;
629 }
632 {
633 if (!creature->IsSummon() || !creature->ToTempSummon()->GetSummonerGUID())
634 return;
635
636 if (Unit* owner = creature->ToTempSummon()->GetSummonerUnit())
637 creature->SetFaction(owner->GetFaction());
638 break;
639 }
640 }
641 }
642}
@ 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 m_GraveyardList
Definition Battlefield.h:399
void DespawnOrUnsummon(Milliseconds msTimeToDespawn, Seconds forcedRespawnTimer)
Definition Creature.cpp:2177
uint32 GetEntry() const
Definition Object.h:116
TeamId GetTeamId(bool original=false) const
Definition Player.h:2118
ObjectGuid GetSummonerGUID() const
Definition TemporarySummon.h:56
Unit * GetSummonerUnit() const
Definition TemporarySummon.cpp:44
Definition Unit.h:620
void SetFaction(uint32 faction)
Definition Unit.cpp:10096
TempSummon * ToTempSummon()
Definition Unit.h:686
bool IsSummon() const
Definition Unit.h:744
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:1179
bool IsWithinDist2d(float x, float y, float dist) const
Definition Object.cpp:1316
uint32 GetAreaId() const
Definition Object.cpp:3156

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(), Unit::IsSummon(), Battlefield::IsWarTime(), WorldObject::IsWithinDist2d(), Battlefield::m_GraveyardList, m_vehicles, 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(), and UpdateVehicleCountWG().

◆ OnCreatureRemove()

void BattlefieldWG::OnCreatureRemove ( Creature creature)
overridevirtual

Called when a creature is removed.

  • Update vehicle count

Reimplemented from ZoneScript.

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

◆ OnGameObjectCreate()

void BattlefieldWG::OnGameObjectCreate ( GameObject go)
overridevirtual

Called when a gameobject is created.

Reimplemented from ZoneScript.

678{
679 uint8 workshopId = 0;
680
681 switch (go->GetEntry())
682 {
684 workshopId = BATTLEFIELD_WG_WORKSHOP_NE;
685 break;
687 workshopId = BATTLEFIELD_WG_WORKSHOP_NW;
688 break;
690 workshopId = BATTLEFIELD_WG_WORKSHOP_SE;
691 break;
693 workshopId = BATTLEFIELD_WG_WORKSHOP_SW;
694 break;
695 default:
696 return;
697 }
698
699 for (Workshop::const_iterator itr = WorkshopsList.begin(); itr != WorkshopsList.end(); ++itr)
700 {
701 if (WGWorkshop* workshop = (*itr))
702 {
703 if (workshop->workshopId == workshopId)
704 {
705 WintergraspCapturePoint* capturePoint = new WintergraspCapturePoint(this, workshop->teamControl);
706 //Sending neutral team at start to set normal capture points by workshop->teamControl, TEAM_NEUTRAL is ignored at first call
707 capturePoint->SetCapturePointData(go, TEAM_NEUTRAL);
708 capturePoint->LinkToWorkshop(workshop);
709 AddCapturePoint(capturePoint);
710 break;
711 }
712 }
713 }
714}
@ GO_WINTERGRASP_FACTORY_BANNER_NW
Definition BattlefieldWG.h:535
@ GO_WINTERGRASP_FACTORY_BANNER_NE
Definition BattlefieldWG.h:534
@ BATTLEFIELD_WG_WORKSHOP_NW
Definition BattlefieldWG.h:492
@ BATTLEFIELD_WG_WORKSHOP_NE
Definition BattlefieldWG.h:491
@ TEAM_NEUTRAL
Definition SharedDefines.h:762
void AddCapturePoint(BfCapturePoint *cp)
Definition Battlefield.h:421
bool SetCapturePointData(GameObject *capturePoint, TeamId team)
Definition Battlefield.cpp:935
Definition BattlefieldWG.h:235
void LinkToWorkshop(WGWorkshop *workshop)
Definition BattlefieldWG.h:239
Definition BattlefieldWG.h:1413

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.

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

References Unit::AddAura(), Battlefield::GetAttackerTeam(), Object::GetGUID(), Position::GetPositionX(), Position::GetPositionY(), Player::GetTeamId(), Battlefield::KickPlayerFromBattlefield(), Battlefield::m_DefenderTeam, Battlefield::m_isActive, 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.

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

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.

879{
880 // 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
881 if (!player->GetSession()->PlayerLogout())
882 {
883 if (player->GetVehicle()) // Remove vehicle of player if he go out.
884 player->GetVehicle()->Dismiss();
885 RemoveAurasFromPlayer(player);
886 }
887
888 RemoveUpdateTenacity(player);
889}
void RemoveUpdateTenacity(Player *player)
Definition BattlefieldWG.cpp:1154
WorldSession * GetSession() const
Definition Player.h:2007
Vehicle * GetVehicle() const
Definition Unit.h:1830
void Dismiss()
Definition Vehicle.cpp:539
bool PlayerLogout() const
Definition WorldSession.h:338

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.

892{
893 if (!m_isActive)
894 RemoveAurasFromPlayer(player);
895
900}
@ 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:4942

References Battlefield::m_isActive, 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.

512{
513 if (!IsWarTime())
515}
@ BATTLEFIELD_WG_TEXT_WILL_START
Definition BattlefieldWG.h:513

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

◆ OnUnitDeath()

void BattlefieldWG::OnUnitDeath ( Unit unit)
overridevirtual

Reimplemented from ZoneScript.

795{
796 if (IsWarTime())
797 if (unit->IsVehicle())
800}
bool FindAndRemoveVehicleFromList(Unit *vehicle)
Definition BattlefieldWG.cpp:777
bool IsVehicle() const
Definition Unit.h:750

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

◆ ProcessEvent()

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

Reimplemented from ZoneScript.

1087{
1088 if (!obj || !IsWarTime())
1089 return;
1090
1091 // We handle only gameobjects here
1092 GameObject* go = obj->ToGameObject();
1093 if (!go)
1094 return;
1095
1096 // On click on titan relic
1098 {
1100 {
1101 EndBattle(false);
1102 }
1103 else if (GameObject* relic = GetRelic())
1104 {
1105 relic->SetRespawnTime(RESPAWN_IMMEDIATELY);
1106 }
1107 }
1108
1109 // if destroy or damage event, search the wall/tower and update worldstate/send warning message
1110 for (GameObjectBuilding::const_iterator itr = BuildingsInZone.begin(); itr != BuildingsInZone.end(); ++itr)
1111 {
1112 if (GameObject* build = ObjectAccessor::GetGameObject(*obj, (*itr)->m_Build))
1113 {
1114 if (go->GetEntry() == build->GetEntry())
1115 {
1116 if (build->GetGOInfo()->building.damagedEvent == eventId)
1117 (*itr)->Damaged();
1118
1119 if (build->GetGOInfo()->building.destroyedEvent == eventId)
1120 (*itr)->Destroyed();
1121
1122 break;
1123 }
1124 }
1125 }
1126}
bool CanInteractWithRelic()
Define relic object.
Definition BattlefieldWG.h:372
void EndBattle(bool endByTimer)
Definition Battlefield.cpp:361
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)
804{
805 if (!m_isActive)
806 return;
807 // Updating rank of player
808 if (Aura* recruitAura = killer->GetAura(SPELL_RECRUIT))
809 {
810 if (recruitAura->GetStackAmount() >= 5)
811 {
812 killer->RemoveAura(SPELL_RECRUIT);
813 killer->CastSpell(killer, SPELL_CORPORAL, true);
815 }
816 else
817 {
818 killer->CastSpell(killer, SPELL_RECRUIT, true);
819 }
820 }
821 else if (Aura* corporalAura = killer->GetAura(SPELL_CORPORAL))
822 {
823 if (corporalAura->GetStackAmount() >= 5)
824 {
825 killer->RemoveAura(SPELL_CORPORAL);
826 killer->CastSpell(killer, SPELL_LIEUTENANT, true);
828 }
829 else
830 {
831 killer->CastSpell(killer, SPELL_CORPORAL, true);
832 }
833 }
834}
@ SPELL_CORPORAL
Definition BattlefieldWG.h:51
@ BATTLEFIELD_WG_TEXT_SECONDRANK
Definition BattlefieldWG.h:515
@ BATTLEFIELD_WG_TEXT_FIRSTRANK
Definition BattlefieldWG.h:514
Definition SpellAuras.h:87
Aura * GetAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
Definition Unit.cpp:5614
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:4809

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

Referenced by HandleKill().

◆ RemoveAurasFromPlayer()

◆ RemoveUpdateTenacity()

void BattlefieldWG::RemoveUpdateTenacity ( Player player)
1155{
1156 m_updateTenacityList.erase(player->GetGUID());
1158}
static ObjectGuid const Empty
Definition ObjectGuid.h:120

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

Referenced by OnPlayerLeaveWar().

◆ SendInitWorldStatesTo()

void BattlefieldWG::SendInitWorldStatesTo ( Player player)
977{
979 packet.MapID = m_MapId;
980 packet.ZoneID = m_ZoneId;
981 packet.AreaID = player->GetAreaId();
983
984 player->SendDirectMessage(packet.Write());
985}
void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates &packet) override
Definition BattlefieldWG.cpp:940
uint32 m_MapId
Definition Battlefield.h:384
uint32 m_ZoneId
Definition Battlefield.h:383
void SendDirectMessage(WorldPacket const *data) const
Definition Player.cpp:5712
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::m_MapId, Battlefield::m_ZoneId, WorldPackets::WorldState::InitWorldStates::MapID, Player::SendDirectMessage(), WorldPackets::WorldState::InitWorldStates::Write(), and WorldPackets::WorldState::InitWorldStates::ZoneID.

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

◆ SendInitWorldStatesToAll()

void BattlefieldWG::SendInitWorldStatesToAll ( )
overridevirtual

Send all worldstate data to all player in zone.

Implements Battlefield.

988{
989 for (uint8 team = 0; team < 2; team++)
990 for (GuidUnorderedSet::iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr)
991 if (Player* player = ObjectAccessor::FindPlayer(*itr))
992 SendInitWorldStatesTo(player);
993}

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

Referenced by UpdatedDestroyedTowerCount().

◆ SendUpdateWorldStateMessage()

void BattlefieldWG::SendUpdateWorldStateMessage ( uint32  variable,
uint32  value,
Player player = nullptr 
)
1012{
1014 worldState.VariableID = variable;
1015 worldState.Value = value;
1016
1017 if (player)
1018 player->SendDirectMessage(worldState.Write());
1019 else
1020 sWorldSessionMgr->SendGlobalMessage(worldState.Write());
1021}
#define sWorldSessionMgr
Definition WorldSessionMgr.h:110
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.

996{
997 uint32 timer = GetTimer() / 1000;
998 bool iconActive = timer < 15 * MINUTE || IsWarTime();
999
1006
1007 for (uint32 i = 0; i < 2; ++i)
1009}
void SendUpdateWorldStateMessage(uint32 variable, uint32 value, Player *player=nullptr)
Definition BattlefieldWG.cpp:1011

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{ m_isRelicInteractible = allow; }

References m_isRelicInteractible.

Referenced by BfWGGameObjectBuilding::Destroyed().

◆ SetupBattlefield()

bool BattlefieldWG::SetupBattlefield ( )
overridevirtual

Called when battlefield is setup, at server start.

Reimplemented from Battlefield.

47{
48 m_TypeId = BATTLEFIELD_WG; // See enum BattlefieldTypes
52 m_Map = sMapMgr->FindMap(m_MapId, 0);
53
54 // init stalker AFTER setting map id... we spawn it at map=random memory value?...
56
58 m_IsEnabled = sWorld->getIntConfig(CONFIG_WINTERGRASP_ENABLE) == 1;
64
67 m_StartGrouping = false;
68
71
72 KickPosition.Relocate(5728.117f, 2714.346f, 697.733f, 0);
74
76
78
79 m_saveTimer = 60000;
80
81 // Init Graveyards
83
84 // Load from db
87 !sWorldState->getWorldState(ClockWorldState[0]))
88 {
92 }
93
96
97 m_Timer = sWorldState->getWorldState(ClockWorldState[0]);
98 if (m_isActive)
99 {
100 m_isActive = false;
102 }
103
104 for (uint8 i = 0; i < BATTLEFIELD_WG_GRAVEYARD_MAX; i++)
105 {
106 BfGraveyardWG* graveyard = new BfGraveyardWG(this);
107
108 // When between games, the graveyard is controlled by the defending team
109 if (WGGraveyard[i].startcontrol == TEAM_NEUTRAL)
111 else
112 graveyard->Initialize(WGGraveyard[i].startcontrol, WGGraveyard[i].gyid);
113
114 graveyard->SetTextId(WGGraveyard[i].textid);
115 m_GraveyardList[i] = graveyard;
116 }
117
118 // Spawn workshop creatures and gameobjects
119 for (uint8 i = 0; i < WG_MAX_WORKSHOP; i++)
120 {
121 WGWorkshop* workshop = new WGWorkshop(this, i);
123 workshop->GiveControlTo(GetAttackerTeam(), true);
124 else
125 workshop->GiveControlTo(GetDefenderTeam(), true);
126
127 // Note: Capture point is added once the gameobject is created.
128 WorkshopsList.insert(workshop);
129 }
130
131 // Spawn NPCs in the defender's keep, both Horde and Alliance
132 for (uint8 i = 0; i < WG_MAX_KEEP_NPC; i++)
133 {
134 // Horde npc
135 if (Creature* creature = SpawnCreature(WGKeepNPC[i].entryHorde, WGKeepNPC[i].x, WGKeepNPC[i].y, WGKeepNPC[i].z, WGKeepNPC[i].o, TEAM_HORDE))
136 KeepCreature[TEAM_HORDE].insert(creature->GetGUID());
137 // Alliance npc
138 if (Creature* creature = SpawnCreature(WGKeepNPC[i].entryAlliance, WGKeepNPC[i].x, WGKeepNPC[i].y, WGKeepNPC[i].z, WGKeepNPC[i].o, TEAM_ALLIANCE))
139 KeepCreature[TEAM_ALLIANCE].insert(creature->GetGUID());
140 }
141
142 // Hide NPCs from the Attacker's team in the keep
143 for (GuidUnorderedSet::const_iterator itr = KeepCreature[GetAttackerTeam()].begin(); itr != KeepCreature[GetAttackerTeam()].end(); ++itr)
144 if (Creature* creature = GetCreature(*itr))
145 HideNpc(creature);
146
147 // Spawn Horde NPCs outside the keep
148 for (uint8 i = 0; i < WG_OUTSIDE_ALLIANCE_NPC; i++)
149 if (Creature* creature = SpawnCreature(WGOutsideNPC[i].entryHorde, WGOutsideNPC[i].x, WGOutsideNPC[i].y, WGOutsideNPC[i].z, WGOutsideNPC[i].o, TEAM_HORDE))
150 OutsideCreature[TEAM_HORDE].insert(creature->GetGUID());
151
152 // Spawn Alliance NPCs outside the keep
154 if (Creature* creature = SpawnCreature(WGOutsideNPC[i].entryAlliance, WGOutsideNPC[i].x, WGOutsideNPC[i].y, WGOutsideNPC[i].z, WGOutsideNPC[i].o, TEAM_ALLIANCE))
155 OutsideCreature[TEAM_ALLIANCE].insert(creature->GetGUID());
156
157 // Hide units outside the keep that are defenders
158 for (GuidUnorderedSet::const_iterator itr = OutsideCreature[GetDefenderTeam()].begin(); itr != OutsideCreature[GetDefenderTeam()].end(); ++itr)
159 if (Creature* creature = GetCreature(*itr))
160 HideNpc(creature);
161
162 // Spawn turrets and hide them per default
163 for (uint8 i = 0; i < WG_MAX_TURRET; i++)
164 {
165 Position towerCannonPos = WGTurret[i].GetPosition();
166 if (Creature* creature = SpawnCreature(NPC_WINTERGRASP_TOWER_CANNON, towerCannonPos, TEAM_ALLIANCE))
167 {
168 CanonList.insert(creature->GetGUID());
169 HideNpc(creature);
170 }
171 }
172
173 // Spawn all gameobjects
174 for (uint8 i = 0; i < WG_MAX_OBJ; i++)
175 {
179 BuildingsInZone.insert(b);
180 }
181
182 // Spawning portal defender
183 for (uint8 i = 0; i < WG_MAX_TELEPORTER; i++)
184 {
186 DefenderPortalList.insert(go);
188 }
189
191 return true;
192}
uint8 const WG_OUTSIDE_ALLIANCE_NPC
Definition BattlefieldWG.h:462
uint8 const WG_MAX_KEEP_NPC
Definition BattlefieldWG.h:460
uint8 const WG_MAX_TURRET
Definition BattlefieldWG.h:459
@ BATTLEFIELD_WG_NPC_STALKER
Definition BattlefieldWG.h:147
WintergraspObjectPositionData const WGKeepNPC[WG_MAX_KEEP_NPC]
Definition BattlefieldWG.h:647
WintergraspTeleporterData const WGPortalDefenderData[WG_MAX_TELEPORTER]
Definition BattlefieldWG.h:733
uint8 const WG_MAX_OUTSIDE_NPC
Definition BattlefieldWG.h:461
@ BATTLEFIELD_WG_GRAVEYARD_MAX
Definition BattlefieldWG.h:128
uint8 const WG_MAX_TELEPORTER
Definition BattlefieldWG.h:463
WintergraspObjectPositionData const WGOutsideNPC[WG_MAX_OUTSIDE_NPC]
Definition BattlefieldWG.h:706
BfWGCoordGY const WGGraveyard[BATTLEFIELD_WG_GRAVEYARD_MAX]
Definition BattlefieldWG.h:219
Position const WGTurret[WG_MAX_TURRET]
Definition BattlefieldWG.h:626
@ BATTLEFIELD_WG_DATA_MAX
Definition BattlefieldWG.h:101
WintergraspBuildingSpawnData const WGGameObjectBuilding[WG_MAX_OBJ]
Definition BattlefieldWG.h:578
float const WintergraspStalkerPos[4]
Definition BattlefieldWG.h:45
@ BATTLEFIELD_WG
Definition Battlefield.h:29
@ BATTLEFIELD_BATTLEID_WG
Definition Battlefield.h:35
constexpr auto IN_MILLISECONDS
Definition Common.h:53
std::uint64_t uint64
Definition Define.h:106
@ CONFIG_WINTERGRASP_PLR_MIN_LVL
Definition IWorld.h:371
@ CONFIG_WINTERGRASP_BATTLETIME
Definition IWorld.h:372
@ CONFIG_WINTERGRASP_NOBATTLETIME
Definition IWorld.h:373
@ CONFIG_WINTERGRASP_RESTART_AFTER_CRASH
Definition IWorld.h:374
@ CONFIG_WINTERGRASP_ENABLE
Definition IWorld.h:327
@ CONFIG_WINTERGRASP_PLR_MAX
Definition IWorld.h:369
@ CONFIG_WINTERGRASP_PLR_MIN
Definition IWorld.h:370
#define sMapMgr
Definition MapMgr.h:220
uint32 urand(uint32 min, uint32 max)
Definition Random.cpp:44
uint32 m_saveTimer
Definition BattlefieldWG.h:453
uint32 m_Timer
Definition Battlefield.h:365
uint32 m_MaxPlayer
Definition Battlefield.h:386
std::vector< uint32 > m_Data32
Definition Battlefield.h:408
uint32 m_NoWarBattleTime
Definition Battlefield.h:390
uint32 m_BattleTime
Definition Battlefield.h:389
uint32 m_TypeId
Definition Battlefield.h:381
uint32 m_BattleId
Definition Battlefield.h:382
Creature * SpawnCreature(uint32 entry, float x, float y, float z, float o, TeamId teamId)
Definition Battlefield.cpp:791
uint32 m_StartGroupingTimer
Definition Battlefield.h:402
Map * m_Map
Definition Battlefield.h:385
void RegisterZone(uint32 zoneid)
Definition Battlefield.cpp:494
uint32 m_TimeForAcceptInvite
Definition Battlefield.h:392
uint32 m_RestartAfterCrash
Definition Battlefield.h:391
uint32 m_MinLevel
Definition Battlefield.h:388
void InitStalker(uint32 entry, float x, float y, float z, float o)
Definition Battlefield.cpp:310
uint32 m_MinPlayer
Definition Battlefield.h:387
bool m_IsEnabled
Definition Battlefield.h:366
bool m_StartGrouping
Definition Battlefield.h:403
WorldLocation KickPosition
Definition Battlefield.h:394
void SetGraveyardNumber(uint32 number)
Definition Battlefield.h:297
Definition BattlefieldWG.h:109
void SetTextId(uint32 textid)
Definition BattlefieldWG.h:113
void Initialize(TeamId startcontrol, uint32 gy)
Definition Battlefield.cpp:680
uint32 m_mapId
Definition Position.h:323
Definition WorldState.h:156
Definition BattlefieldWG.h:1060
void Init(GameObject *gobj, uint32 type, uint32 worldstate, uint8 damageText, uint8 destroyText)
Definition BattlefieldWG.h:1192
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:1433

References AREA_WINTERGRASP, BATTLEFIELD_BATTLEID_WG, 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, 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, DefenderPortalList, GAMEOBJECT_FACTION, Battlefield::GetAttackerTeam(), Battlefield::GetCreature(), Battlefield::GetDefenderTeam(), Position::GetPosition(), WGWorkshop::GiveControlTo(), BfWGCoordGY::gyid, Battlefield::HideNpc(), IN_MILLISECONDS, BfWGGameObjectBuilding::Init(), BfGraveyard::Initialize(), Battlefield::InitStalker(), KeepCreature, Battlefield::KickPosition, Battlefield::m_BattleId, Battlefield::m_BattleTime, Battlefield::m_Data32, Battlefield::m_DefenderTeam, Battlefield::m_GraveyardList, Battlefield::m_isActive, Battlefield::m_IsEnabled, Battlefield::m_Map, Battlefield::m_MapId, WorldLocation::m_mapId, Battlefield::m_MaxPlayer, Battlefield::m_MinLevel, Battlefield::m_MinPlayer, Battlefield::m_NoWarBattleTime, Battlefield::m_RestartAfterCrash, m_saveTimer, Battlefield::m_StartGrouping, Battlefield::m_StartGroupingTimer, m_tenacityStack, Battlefield::m_TimeForAcceptInvite, Battlefield::m_Timer, m_titansRelic, Battlefield::m_TypeId, Battlefield::m_ZoneId, MAP_NORTHREND, MINUTE, NPC_WINTERGRASP_TOWER_CANNON, OutsideCreature, Battlefield::RegisterZone(), Position::Relocate(), Battlefield::SetGraveyardNumber(), BfGraveyardWG::SetTextId(), Object::SetUInt32Value(), sMapMgr, Battlefield::SpawnCreature(), Battlefield::SpawnGameObject(), sWorld, sWorldState, TEAM_ALLIANCE, TEAM_HORDE, TEAM_NEUTRAL, 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, and WORLD_STATE_BATTLEFIELD_WG_DEFENDER.

◆ 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.

195{
196 bool m_return = Battlefield::Update(diff);
197 if (m_saveTimer <= diff)
198 {
201 sWorldState->setWorldState(ClockWorldState[0], m_Timer);
203 }
204 else
205 m_saveTimer -= diff;
206
207 // Update Tenacity
208 if (IsWarTime())
209 {
210 if (m_tenacityUpdateTimer <= diff)
211 {
212 m_tenacityUpdateTimer = 10000;
213 if (!m_updateTenacityList.empty())
215 m_updateTenacityList.clear();
216 }
217 else
218 m_tenacityUpdateTimer -= diff;
219 }
220
221 return m_return;
222}
void UpdateTenacity()
Definition BattlefieldWG.cpp:1160
virtual bool Update(uint32 diff)
Called every time for update bf data and time.
Definition Battlefield.cpp:143

References ClockWorldState, IN_MILLISECONDS, Battlefield::IsWarTime(), Battlefield::m_DefenderTeam, Battlefield::m_isActive, m_saveTimer, m_tenacityUpdateTimer, Battlefield::m_Timer, m_updateTenacityList, sWorldState, Battlefield::Update(), UpdateTenacity(), WORLD_STATE_BATTLEFIELD_WG_ACTIVE, and WORLD_STATE_BATTLEFIELD_WG_DEFENDER.

◆ UpdateCounterVehicle()

void BattlefieldWG::UpdateCounterVehicle ( bool  init)

Vehicle world states update.

302{
303 if (init)
304 {
307 }
310
311 for (Workshop::const_iterator itr = WorkshopsList.begin(); itr != WorkshopsList.end(); ++itr)
312 {
313 if (WGWorkshop* workshop = (*itr))
314 {
315 if (workshop->teamControl == TEAM_ALLIANCE)
317 else if (workshop->teamControl == TEAM_HORDE)
319 }
320 }
321
323}

References BATTLEFIELD_WG_DATA_MAX_VEHICLE_A, BATTLEFIELD_WG_DATA_MAX_VEHICLE_H, BATTLEFIELD_WG_DATA_VEHICLE_A, BATTLEFIELD_WG_DATA_VEHICLE_H, Battlefield::SetData(), TEAM_ALLIANCE, TEAM_HORDE, UpdateVehicleCountWG(), and WorkshopsList.

Referenced by WGWorkshop::GiveControlTo(), OnBattleStart(), and SetupBattlefield().

◆ UpdateDamagedTowerCount()

void BattlefieldWG::UpdateDamagedTowerCount ( TeamId  team)

Called when a tower is damaged.

  • Update tower count (for reward calcul)
1130{
1131 if (team == GetAttackerTeam())
1132 {
1135 }
1136}

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
1038{
1039 // Destroy an attack tower
1040 if (team == GetAttackerTeam())
1041 {
1042 // Update counter
1045
1046 // Remove buff stack on attackers
1047 for (GuidUnorderedSet::const_iterator itr = m_PlayersInWar[GetAttackerTeam()].begin(); itr != m_PlayersInWar[GetAttackerTeam()].end(); ++itr)
1048 if (Player* player = ObjectAccessor::FindPlayer(*itr))
1049 player->RemoveAuraFromStack(SPELL_TOWER_CONTROL);
1050
1051 // Add buff stack to defenders
1052 for (GuidUnorderedSet::const_iterator itr = m_PlayersInWar[GetDefenderTeam()].begin(); itr != m_PlayersInWar[GetDefenderTeam()].end(); ++itr)
1053 if (Player* player = ObjectAccessor::FindPlayer(*itr))
1054 {
1055 // Quest - Wintergrasp - Southern Tower Kill
1056 if (go && player->GetDistance2d(go) < 200.0f)
1057 player->KilledMonsterCredit(NPC_QUEST_SOUTHERN_TOWER_KILL);
1058
1059 player->CastSpell(player, SPELL_TOWER_CONTROL, true);
1060 player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, SPELL_LEANING_TOWER_ACHIEVEMENT, 0, 0);
1061 }
1062
1063 // If all three south towers are destroyed (ie. all attack towers), remove ten minutes from battle time
1065 {
1066 if (int32(m_Timer - 600000) < 0)
1067 m_Timer = 0;
1068 else
1069 m_Timer -= 600000;
1071 }
1072 }
1073 else
1074 {
1075 // Xinef: rest of structures, quest credit
1076 for (GuidUnorderedSet::const_iterator itr = m_PlayersInWar[GetAttackerTeam()].begin(); itr != m_PlayersInWar[GetAttackerTeam()].end(); ++itr)
1077 if (Player* player = ObjectAccessor::FindPlayer(*itr))
1078 {
1079 // Quest - Wintergrasp - Vehicle Protected
1080 if (go && player->GetDistance2d(go) < 100.0f)
1081 player->KilledMonsterCredit(NPC_QUEST_VEHICLE_PROTECTED);
1082 }
1083 }
1084}
@ 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 player in zone.
Definition BattlefieldWG.cpp:987

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(), Battlefield::m_PlayersInWar, Battlefield::m_Timer, NPC_QUEST_SOUTHERN_TOWER_KILL, NPC_QUEST_VEHICLE_PROTECTED, SendInitWorldStatesToAll(), SPELL_LEANING_TOWER_ACHIEVEMENT, and SPELL_TOWER_CONTROL.

Referenced by BfWGGameObjectBuilding::Destroyed().

◆ UpdateTenacity()

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

References ObjectAccessor::FindPlayer(), Battlefield::GetCreature(), GetHonorBuff(), Battlefield::m_PlayersInWar, m_tenacityStack, m_updateTenacityList, m_vehicles, SPELL_TENACITY, SPELL_TENACITY_VEHICLE, TEAM_ALLIANCE, TEAM_HORDE, and TEAM_NEUTRAL.

Referenced by Update().

◆ UpdateVehicleCountWG()

Member Data Documentation

◆ BuildingsInZone

◆ CanonList

GuidUnorderedSet BattlefieldWG::CanonList
protected

◆ DefenderPortalList

GameObjectSet BattlefieldWG::DefenderPortalList
protected

Referenced by OnBattleEnd(), and SetupBattlefield().

◆ KeepCreature

GuidUnorderedSet BattlefieldWG::KeepCreature[2]
protected

Referenced by OnBattleEnd(), and SetupBattlefield().

◆ m_isRelicInteractible

bool BattlefieldWG::m_isRelicInteractible
protected

◆ m_KeepGameObject

GameObjectSet BattlefieldWG::m_KeepGameObject[2]
protected

Referenced by OnBattleEnd().

◆ m_saveTimer

uint32 BattlefieldWG::m_saveTimer
protected

Referenced by SetupBattlefield(), and Update().

◆ m_tenacityStack

int32 BattlefieldWG::m_tenacityStack
protected

◆ m_tenacityUpdateTimer

uint32 BattlefieldWG::m_tenacityUpdateTimer
protected

Referenced by OnBattleStart(), and Update().

◆ m_titansRelic

ObjectGuid BattlefieldWG::m_titansRelic
protected

◆ m_updateTenacityList

GuidUnorderedSet BattlefieldWG::m_updateTenacityList
protected

◆ m_vehicles

GuidUnorderedSet BattlefieldWG::m_vehicles[2]
protected

◆ OutsideCreature

GuidUnorderedSet BattlefieldWG::OutsideCreature[2]
protected

Referenced by OnBattleEnd(), and SetupBattlefield().

◆ WorkshopsList


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