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

37{
38 for (Workshop::const_iterator itr = WorkshopsList.begin(); itr != WorkshopsList.end(); ++itr)
39 delete *itr;
40
41 for (GameObjectBuilding::const_iterator itr = BuildingsInZone.begin(); itr != BuildingsInZone.end(); ++itr)
42 delete *itr;
43}
Workshop WorkshopsList
Definition BattlefieldWG.h:452
GameObjectBuilding BuildingsInZone
Definition BattlefieldWG.h:456

References BuildingsInZone, and WorkshopsList.

Member Function Documentation

◆ AddUpdateTenacity()

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

References Object::GetGUID(), and m_updateTenacityList.

Referenced by OnPlayerJoinWar().

◆ BrokenWallOrTower()

void BattlefieldWG::BrokenWallOrTower ( TeamId  team)

Called when a wall/tower is broken.

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

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)

385{ return m_isRelicInteractible; }
bool m_isRelicInteractible
Definition BattlefieldWG.h:450

References m_isRelicInteractible.

Referenced by ProcessEvent().

◆ CapturePointTaken()

void BattlefieldWG::CapturePointTaken ( uint32  areaId)
339{
340 for (uint8 i = 0; i < PVP_TEAMS_COUNT; ++i)
341 for (GuidUnorderedSet::iterator itr = m_players[i].begin(); itr != m_players[i].end(); ++itr)
342 if (Player* player = ObjectAccessor::FindPlayer(*itr))
343 if (player->GetAreaId() == areaId)
344 player->UpdateAreaDependentAuras(areaId);
345}
std::uint8_t uint8
Definition Define.h:109
uint8 constexpr PVP_TEAMS_COUNT
Definition SharedDefines.h:3445
GuidUnorderedSet m_players[PVP_TEAMS_COUNT]
Definition Battlefield.h:374
Definition Player.h:1081
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.

940{
941 uint32 timer = GetTimer() / 1000;
942 bool iconActive = timer < 15 * MINUTE || IsWarTime();
943
944 packet.Worldstates.reserve(4+4+WG_MAX_OBJ+WG_MAX_WORKSHOP);
947
948 // Note: cleanup these two, their names look awkward
949 packet.Worldstates.emplace_back(WORLD_STATE_BATTLEFIELD_WG_ACTIVE, IsWarTime() ? 0 : 1);
950 packet.Worldstates.emplace_back(WORLD_STATE_BATTLEFIELD_WG_SHOW, IsWarTime() ? 1 : 0);
951 packet.Worldstates.emplace_back(WORLD_STATE_BATTLEFIELD_WG_CONTROL, m_DefenderTeam == TEAM_ALLIANCE ? 2 : 1); // Alliance 2, Hord 1
952 packet.Worldstates.emplace_back(WORLD_STATE_BATTLEFIELD_WG_ICON_ACTIVE, iconActive ? 1 : 0);
953
954 for (uint32 i = 0; i < 2; ++i)
955 packet.Worldstates.emplace_back(ClockWorldState[i], GameTime::GetGameTime().count() + timer);
956
961
966
967 for (GameObjectBuilding::const_iterator itr = BuildingsInZone.begin(); itr != BuildingsInZone.end(); ++itr)
968 packet.Worldstates.emplace_back((*itr)->m_WorldState, (*itr)->m_State);
969
970 for (Workshop::const_iterator itr = WorkshopsList.begin(); itr != WorkshopsList.end(); ++itr)
971 if (*itr)
972 packet.Worldstates.emplace_back(WorkshopsData[(*itr)->workshopId].worldstate, (*itr)->state);
973}
WGWorkshopData const WorkshopsData[WG_MAX_WORKSHOP]
Definition BattlefieldWG.h:1052
uint8 const WG_MAX_OBJ
Definition BattlefieldWG.h:471
uint8 const WG_MAX_WORKSHOP
Definition BattlefieldWG.h:1042
uint32 const ClockWorldState[2]
Definition BattlefieldWG.h:42
@ BATTLEFIELD_WG_DATA_VEHICLE_A
Definition BattlefieldWG.h:98
@ BATTLEFIELD_WG_DATA_MAX_VEHICLE_A
Definition BattlefieldWG.h:96
@ BATTLEFIELD_WG_DATA_VEHICLE_H
Definition BattlefieldWG.h:99
@ BATTLEFIELD_WG_DATA_MAX_VEHICLE_H
Definition BattlefieldWG.h:97
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
uint32 GetData(uint32 data) const override
Definition BattlefieldWG.cpp:916
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
#define sWorld
Definition World.h:363
Seconds GetGameTime()
Definition GameTime.cpp:38
uint32 worldstate
Definition BattlefieldWG.h:1047

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, sWorld, 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)
777{
778 for (uint32 itr = 0; itr < 2; ++itr)
779 {
780 if (m_vehicles[itr].find(vehicle->GetGUID()) != m_vehicles[itr].end())
781 {
782 //m_vehicles[itr].erase(vehicle->GetGUID());
783 if (itr == TEAM_HORDE)
785 else
787 return true;
788 }
789 }
790 return false;
791}
@ TEAM_HORDE
Definition SharedDefines.h:761
GuidUnorderedSet m_vehicles[2]
Definition BattlefieldWG.h:458
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
543{
544 switch (gId)
545 {
554 }
555
556 return 0;
557}
@ AREA_THE_SUNKEN_RING
Definition BattlefieldWG.h:109
@ AREA_EASTPARK_WORKSHOP
Definition BattlefieldWG.h:112
@ AREA_THE_BROKEN_TEMPLE
Definition BattlefieldWG.h:110
@ AREA_WESTPARK_WORKSHOP
Definition BattlefieldWG.h:111
@ BATTLEFIELD_WG_GY_WORKSHOP_NE
Definition BattlefieldWG.h:134
@ BATTLEFIELD_WG_GY_WORKSHOP_SW
Definition BattlefieldWG.h:137
@ BATTLEFIELD_WG_GY_WORKSHOP_SE
Definition BattlefieldWG.h:136
@ BATTLEFIELD_WG_GY_WORKSHOP_NW
Definition BattlefieldWG.h:135

References AREA_EASTPARK_WORKSHOP, AREA_THE_BROKEN_TEMPLE, AREA_THE_SUNKEN_RING, AREA_WESTPARK_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.

917{
918 // xinef: little hack, same area for default horde graveyard
919 // this graveyard is the one of broken temple!
920 if (data == AREA_THE_CHILLED_QUAGMIRE)
922
923 switch (data)
924 {
925 // Used to determine when the phasing spells must be casted
926 // See: SpellArea::IsFitToRequirements
931 // Graveyards and Workshops are controlled by the same team.
932 if (BfGraveyard const* graveyard = GetGraveyardById(GetSpiritGraveyardId(data)))
933 return graveyard->GetControlTeamId();
934 }
935
936 return Battlefield::GetData(data);
937}
@ AREA_THE_CHILLED_QUAGMIRE
Definition BattlefieldWG.h:114
uint8 GetSpiritGraveyardId(uint32 areaId) const
Definition BattlefieldWG.cpp:516
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_EASTPARK_WORKSHOP, AREA_THE_BROKEN_TEMPLE, AREA_THE_CHILLED_QUAGMIRE, AREA_THE_SUNKEN_RING, AREA_WESTPARK_WORKSHOP, Battlefield::GetData(), Battlefield::GetGraveyardById(), and GetSpiritGraveyardId().

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

◆ GetHonorBuff()

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

References SPELL_GREAT_HONOR, SPELL_GREATER_HONOR, and SPELL_GREATEST_HONOR.

Referenced by UpdateTenacity().

◆ GetRelic()

GameObject * BattlefieldWG::GetRelic ( )
inline

Return pointer to relic object.

379{ return GetGameObject(m_titansRelic); }
ObjectGuid m_titansRelic
Definition BattlefieldWG.h:468
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
517{
518 switch (areaId)
519 {
530 case AREA_WINTERGRASP:
534 default:
535 LOG_ERROR("bg.battlefield", "BattlefieldWG::GetSpiritGraveyardId: Unexpected Area Id {}", areaId);
536 break;
537 }
538
539 return 0;
540}
@ AREA_WINTERGRASP_FORTRESS
Definition BattlefieldWG.h:108
@ AREA_WINTERGRASP
Definition BattlefieldWG.h:113
@ BATTLEFIELD_WG_GY_KEEP
Definition BattlefieldWG.h:138
@ BATTLEFIELD_WG_GY_HORDE
Definition BattlefieldWG.h:139
@ BATTLEFIELD_WG_GY_ALLIANCE
Definition BattlefieldWG.h:140
#define LOG_ERROR(filterType__,...)
Definition Log.h:157

References AREA_EASTPARK_WORKSHOP, AREA_THE_BROKEN_TEMPLE, AREA_THE_CHILLED_QUAGMIRE, AREA_THE_SUNKEN_RING, AREA_WESTPARK_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.

717{
718 if (killer == victim)
719 {
720 return;
721 }
722
723 TeamId killerTeam = killer->GetTeamId();
724
725 // xinef: tower cannons also grant rank
726 if (victim->IsPlayer() || IsKeepNpc(victim->GetEntry()) || victim->GetEntry() == NPC_WINTERGRASP_TOWER_CANNON)
727 {
728 if (victim->IsPlayer() && victim->HasAura(SPELL_LIEUTENANT))
729 {
730 // Quest - Wintergrasp - PvP Kill - Horde/Alliance
731 for (auto& playerGuid : m_PlayersInWar[killerTeam])
732 {
733 if (Player* player = ObjectAccessor::FindPlayer(playerGuid))
734 {
735 if (player->GetDistance2d(killer) < 40)
736 {
737 player->KilledMonsterCredit(killerTeam == TEAM_HORDE ? NPC_QUEST_PVP_KILL_ALLIANCE : NPC_QUEST_PVP_KILL_HORDE);
738 }
739 }
740 }
741 }
742
743 for (auto& playerGuid : m_PlayersInWar[killerTeam])
744 {
745 if (Player* player = ObjectAccessor::FindPlayer(playerGuid))
746 {
747 if (player->GetDistance2d(killer) < 40)
748 {
749 PromotePlayer(player);
750 }
751 }
752 }
753
754 // Xinef: Allow to Skin non-released corpse
755 if (victim->IsPlayer())
756 {
757 victim->SetUnitFlag(UNIT_FLAG_SKINNABLE);
758 }
759 }
760 else if (victim->IsVehicle() && !killer->IsFriendlyTo(victim))
761 {
762 // Quest - Wintergrasp - PvP Kill - Vehicle
763 for (auto& playerGuid : m_PlayersInWar[killerTeam])
764 {
765 if (Player* player = ObjectAccessor::FindPlayer(playerGuid))
766 {
767 if (player->GetDistance2d(killer) < 40)
768 {
769 player->KilledMonsterCredit(NPC_QUEST_PVP_KILL_VEHICLE);
770 }
771 }
772 }
773 }
774}
@ NPC_QUEST_PVP_KILL_VEHICLE
Definition BattlefieldWG.h:208
@ NPC_QUEST_PVP_KILL_ALLIANCE
Definition BattlefieldWG.h:210
@ NPC_WINTERGRASP_TOWER_CANNON
Definition BattlefieldWG.h:204
@ NPC_QUEST_PVP_KILL_HORDE
Definition BattlefieldWG.h:209
@ SPELL_LIEUTENANT
Definition BattlefieldWG.h:51
TeamId
Definition SharedDefines.h:759
@ UNIT_FLAG_SKINNABLE
Definition UnitDefines.h:276
void PromotePlayer(Player *killer)
Definition BattlefieldWG.cpp:802
bool IsKeepNpc(uint32 entry)
Definition BattlefieldWG.h:419
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
420 {
421 switch (entry)
422 {
445 return true;
446 }
447 return false;
448 }
@ BATTLEFIELD_WG_NPC_BRIGADIER_GENERAL
Definition BattlefieldWG.h:172
@ BATTLEFIELD_WG_NPC_SIEGE_MASTER_STOUTHANDLE
Definition BattlefieldWG.h:191
@ BATTLEFIELD_WG_NPC_TACTICAL_OFFICER_KILRATH
Definition BattlefieldWG.h:167
@ BATTLEFIELD_WG_NPC_HORDE_WARBRINGER
Definition BattlefieldWG.h:171
@ BATTLEFIELD_WG_NPC_COMMANDER_DARDOSH
Definition BattlefieldWG.h:166
@ BATTLEFIELD_WG_NPC_LIEUTENANT_MURP
Definition BattlefieldWG.h:170
@ BATTLEFIELD_WG_NPC_COMMANDER_ZANNETH
Definition BattlefieldWG.h:189
@ BATTLEFIELD_WG_NPC_ANCHORITE_TESSA
Definition BattlefieldWG.h:192
@ BATTLEFIELD_WG_NPC_BOWYER_RANDOLPH
Definition BattlefieldWG.h:185
@ BATTLEFIELD_WG_NPC_SIEGESMITH_STRONGHOOF
Definition BattlefieldWG.h:168
@ BATTLEFIELD_WG_NPC_KNIGHT_DAMERON
Definition BattlefieldWG.h:186
@ BATTLEFIELD_WG_NPC_GUARD_H
Definition BattlefieldWG.h:158
@ BATTLEFIELD_WG_NPC_VIERON_BLAZEFEATHER
Definition BattlefieldWG.h:162
@ BATTLEFIELD_WG_NPC_PRIMALIST_MULFORT
Definition BattlefieldWG.h:169
@ BATTLEFIELD_WG_NPC_STONE_GUARD_MUKAR
Definition BattlefieldWG.h:163
@ BATTLEFIELD_WG_NPC_GUARD_A
Definition BattlefieldWG.h:159
@ BATTLEFIELD_WG_NPC_CHAMPION_ROS_SLAI
Definition BattlefieldWG.h:165
@ BATTLEFIELD_WG_NPC_SORCERESS_KAYLANA
Definition BattlefieldWG.h:187
@ BATTLEFIELD_WG_NPC_SENIOR_DEMOLITIONIST_LEGOSO
Definition BattlefieldWG.h:193
@ BATTLEFIELD_WG_NPC_HOODOO_MASTER_FU_JIN
Definition BattlefieldWG.h:164
@ BATTLEFIELD_WG_NPC_TACTICAL_OFFICER_AHBRAMIS
Definition BattlefieldWG.h:190
@ BATTLEFIELD_WG_NPC_MARSHAL_MAGRUDER
Definition BattlefieldWG.h:188

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.

348{
349 // Remove relic
350 if (GameObject* go = GetRelic())
351 go->RemoveFromWorld();
352
354
355 // Remove turret
356 for (GuidUnorderedSet::const_iterator itr = CanonList.begin(); itr != CanonList.end(); ++itr)
357 {
358 if (Creature* creature = GetCreature(*itr))
359 {
360 if (!endByTimer)
361 creature->SetFaction(WintergraspFaction[GetDefenderTeam()]);
362 HideNpc(creature);
363 }
364 }
365
366 // Change all npc in keep
367 for (GuidUnorderedSet::const_iterator itr = KeepCreature[GetAttackerTeam()].begin(); itr != KeepCreature[GetAttackerTeam()].end(); ++itr)
368 if (Creature* creature = GetCreature(*itr))
369 HideNpc(creature);
370
371 for (GuidUnorderedSet::const_iterator itr = KeepCreature[GetDefenderTeam()].begin(); itr != KeepCreature[GetDefenderTeam()].end(); ++itr)
372 if (Creature* creature = GetCreature(*itr))
373 ShowNpc(creature, true);
374
375 // Change all npc out of keep
376 for (GuidUnorderedSet::const_iterator itr = OutsideCreature[GetDefenderTeam()].begin(); itr != OutsideCreature[GetDefenderTeam()].end(); ++itr)
377 if (Creature* creature = GetCreature(*itr))
378 HideNpc(creature);
379
380 for (GuidUnorderedSet::const_iterator itr = OutsideCreature[GetAttackerTeam()].begin(); itr != OutsideCreature[GetAttackerTeam()].end(); ++itr)
381 if (Creature* creature = GetCreature(*itr))
382 ShowNpc(creature, true);
383
384 // Update all graveyard, control is to defender when no wartime
385 for (uint8 i = 0; i < BATTLEFIELD_WG_GY_HORDE; i++)
386 if (BfGraveyard* graveyard = GetGraveyardById(i))
388
389 for (GameObjectSet::const_iterator itr = m_KeepGameObject[GetDefenderTeam()].begin(); itr != m_KeepGameObject[GetDefenderTeam()].end(); ++itr)
390 (*itr)->SetRespawnTime(RESPAWN_IMMEDIATELY);
391
392 for (GameObjectSet::const_iterator itr = m_KeepGameObject[GetAttackerTeam()].begin(); itr != m_KeepGameObject[GetAttackerTeam()].end(); ++itr)
393 (*itr)->SetRespawnTime(RESPAWN_ONE_DAY);
394
395 // Update portal defender faction
396 for (GameObjectSet::const_iterator itr = DefenderPortalList.begin(); itr != DefenderPortalList.end(); ++itr)
397 (*itr)->SetUInt32Value(GAMEOBJECT_FACTION, WintergraspFaction[GetDefenderTeam()]);
398
399 // Saving data
400 for (GameObjectBuilding::const_iterator itr = BuildingsInZone.begin(); itr != BuildingsInZone.end(); ++itr)
401 {
402 (*itr)->Rebuild();
403 (*itr)->Save();
404 (*itr)->UpdateTurretAttack(true);
405 }
406
407 for (Workshop::const_iterator itr = WorkshopsList.begin(); itr != WorkshopsList.end(); ++itr)
408 {
409 (*itr)->GiveControlTo((*itr)->workshopId == BATTLEFIELD_WG_WORKSHOP_SE || (*itr)->workshopId == BATTLEFIELD_WG_WORKSHOP_SW ? GetAttackerTeam() : GetDefenderTeam(), true);
410 (*itr)->Save();
411 }
412
413 for (uint8 team = 0; team < 2; ++team)
414 {
415 for (GuidUnorderedSet::const_iterator itr = m_vehicles[team].begin(); itr != m_vehicles[team].end(); ++itr)
416 if (Creature* creature = GetCreature(*itr))
417 creature->DespawnOrUnsummon(1);
418
419 m_vehicles[team].clear();
420 }
421
426 uint32 spellDamagedDef = SPELL_DAMAGED_TOWER;
427 uint32 spellFullDef = SPELL_DESTROYED_TOWER;
428 uint32 spellDamagedAtt = SPELL_DAMAGED_BUILDING;
429 uint32 spellFullAtt = SPELL_INTACT_BUILDING;
430
431 if (!endByTimer)
432 {
435 spellDamagedDef = SPELL_DAMAGED_BUILDING;
436 spellFullDef = SPELL_INTACT_BUILDING;
437 spellDamagedAtt = SPELL_DAMAGED_TOWER;
438 spellFullAtt = SPELL_DESTROYED_TOWER;
439 }
440
441 for (GuidUnorderedSet::const_iterator itr = m_PlayersInWar[GetDefenderTeam()].begin(); itr != m_PlayersInWar[GetDefenderTeam()].end(); ++itr)
442 {
443 if (Player* player = ObjectAccessor::FindPlayer(*itr))
444 {
445 // Victory in Wintergrasp
446 player->AreaExploredOrEventHappens(GetDefenderTeam() ? 13183 : 13181); // HORDE / ALLY win wg quest id
447
448 player->CastSpell(player, SPELL_ESSENCE_OF_WINTERGRASP, true);
449 player->CastSpell(player, SPELL_VICTORY_REWARD, true);
450 RemoveAurasFromPlayer(player);
451
452 for (uint8 i = 0; i < damagedTowersDef; ++i)
453 player->CastSpell(player, spellDamagedDef, true);
454 for (uint8 i = 0; i < brokenTowersDef; ++i)
455 player->CastSpell(player, spellFullDef, true);
456 }
457 }
458
459 for (GuidUnorderedSet::const_iterator itr = m_PlayersInWar[GetAttackerTeam()].begin(); itr != m_PlayersInWar[GetAttackerTeam()].end(); ++itr)
460 if (Player* player = ObjectAccessor::FindPlayer(*itr))
461 {
462 player->CastSpell(player, SPELL_DEFEAT_REWARD, true);
463 RemoveAurasFromPlayer(player);
464
465 for (uint8 i = 0; i < damagedTowersAtt; ++i)
466 player->CastSpell(player, spellDamagedAtt, true);
467 for (uint8 i = 0; i < brokenTowersAtt; ++i)
468 player->CastSpell(player, spellFullAtt, true);
469 }
470
471 if (!endByTimer)
472 {
473 for (uint8 team = 0; team < 2; ++team)
474 {
475 for (GuidUnorderedSet::const_iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr)
476 {
477 if (Player* player = ObjectAccessor::FindPlayer(*itr))
478 {
479 player->RemoveAurasDueToSpell(m_DefenderTeam == TEAM_ALLIANCE ? SPELL_HORDE_CONTROL_PHASE_SHIFT : SPELL_ALLIANCE_CONTROL_PHASE_SHIFT, player->GetGUID());
481 }
482 }
483 }
484 }
485
486 // Clear players in war list at the end.
488 m_PlayersInWar[TEAM_HORDE].clear();
489
490 if (!endByTimer) // win alli/horde
491 {
493 sWorld->setWorldState(worldStateId, sWorld->getWorldState(worldStateId) + 1);
494
496 }
497 else // defend alli/horde
498 {
500 sWorld->setWorldState(worldStateId, sWorld->getWorldState(worldStateId) + 1);
501
503 }
504}
@ SPELL_ESSENCE_OF_WINTERGRASP
Definition BattlefieldWG.h:79
@ SPELL_HORDE_CONTROL_PHASE_SHIFT
Definition BattlefieldWG.h:87
@ SPELL_VICTORY_REWARD
Definition BattlefieldWG.h:64
@ SPELL_DAMAGED_BUILDING
Definition BattlefieldWG.h:68
@ SPELL_ALLIANCE_CONTROL_PHASE_SHIFT
Definition BattlefieldWG.h:88
@ SPELL_INTACT_BUILDING
Definition BattlefieldWG.h:69
@ SPELL_DESTROYED_TOWER
Definition BattlefieldWG.h:67
@ SPELL_DEFEAT_REWARD
Definition BattlefieldWG.h:65
@ SPELL_DAMAGED_TOWER
Definition BattlefieldWG.h:66
@ BATTLEFIELD_WG_TEXT_WIN_KEEP
Definition BattlefieldWG.h:525
@ BATTLEFIELD_WG_TEXT_DEFEND_KEEP
Definition BattlefieldWG.h:524
uint32 const WintergraspFaction[3]
Definition BattlefieldWG.h:43
@ BATTLEFIELD_WG_DATA_INTACT_TOWER_ATT
Definition BattlefieldWG.h:93
@ BATTLEFIELD_WG_DATA_BROKEN_TOWER_ATT
Definition BattlefieldWG.h:95
@ BATTLEFIELD_WG_DATA_DAMAGED_TOWER_ATT
Definition BattlefieldWG.h:94
@ BATTLEFIELD_WG_WORKSHOP_SE
Definition BattlefieldWG.h:506
@ BATTLEFIELD_WG_WORKSHOP_SW
Definition BattlefieldWG.h:507
@ RESPAWN_IMMEDIATELY
Definition Battleground.h:170
@ RESPAWN_ONE_DAY
Definition Battleground.h:169
@ GAMEOBJECT_FACTION
Definition UpdateFields.h:402
GameObjectSet m_KeepGameObject[2]
Definition BattlefieldWG.h:455
void RemoveAurasFromPlayer(Player *player)
Definition BattlefieldWG.cpp:835
GameObject * GetRelic()
Return pointer to relic object.
Definition BattlefieldWG.h:379
GuidUnorderedSet CanonList
Definition BattlefieldWG.h:459
GuidUnorderedSet KeepCreature[2]
Definition BattlefieldWG.h:460
GuidUnorderedSet OutsideCreature[2]
Definition BattlefieldWG.h:461
GameObjectSet DefenderPortalList
Definition BattlefieldWG.h:454
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, sWorld, 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.

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

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

560{
561 // Accessing to db spawned creatures
562 switch (creature->GetEntry())
563 {
566 {
568 uint8 graveyardId = GetSpiritGraveyardId(creature->GetAreaId());
569 // xinef: little workaround, there are 2 spirit guides in same area
570 if (creature->IsWithinDist2d(5103.0f, 3461.5f, 5.0f))
571 graveyardId = BATTLEFIELD_WG_GY_WORKSHOP_NW;
572
573 if (m_GraveyardList[graveyardId])
574 m_GraveyardList[graveyardId]->SetSpirit(creature, teamId);
575 break;
576 }
577 }
578
579 // untested code - not sure if it is valid.
580 if (IsWarTime())
581 {
582 switch (creature->GetEntry())
583 {
588 {
589 if (!creature->IsSummon() || !creature->ToTempSummon()->GetSummonerGUID())
590 return;
591
593 if (!creator)
594 return;
595 TeamId team = creator->GetTeamId();
596
597 if (team == TEAM_HORDE)
598 {
600 {
602 creature->CastSpell(creature, SPELL_HORDE_FLAG, true);
603 m_vehicles[team].insert(creature->GetGUID());
605 }
606 else
607 {
608 creature->DespawnOrUnsummon();
609 return;
610 }
611 }
612 else
613 {
615 {
617 creature->CastSpell(creature, SPELL_ALLIANCE_FLAG, true);
618 m_vehicles[team].insert(creature->GetGUID());
620 }
621 else
622 {
623 creature->DespawnOrUnsummon();
624 return;
625 }
626 }
627 break;
628 }
631 {
632 if (!creature->IsSummon() || !creature->ToTempSummon()->GetSummonerGUID())
633 return;
634
635 if (Unit* owner = creature->ToTempSummon()->GetSummonerUnit())
636 creature->SetFaction(owner->GetFaction());
637 break;
638 }
639 }
640 }
641}
@ NPC_WINTERGRASP_SIEGE_ENGINE_HORDE
Definition BattlefieldWG.h:201
@ NPC_WINTERGRASP_CATAPULT
Definition BattlefieldWG.h:202
@ NPC_WINTERGRASP_DEMOLISHER
Definition BattlefieldWG.h:203
@ NPC_DWARVEN_SPIRIT_GUIDE
Definition BattlefieldWG.h:196
@ NPC_WINTERGRASP_SIEGE_ENGINE_TURRET_HORDE
Definition BattlefieldWG.h:199
@ NPC_WINTERGRASP_SIEGE_ENGINE_TURRET_ALLIANCE
Definition BattlefieldWG.h:198
@ NPC_TAUNKA_SPIRIT_GUIDE
Definition BattlefieldWG.h:195
@ NPC_WINTERGRASP_SIEGE_ENGINE_ALLIANCE
Definition BattlefieldWG.h:200
@ SPELL_HORDE_FLAG
Definition BattlefieldWG.h:60
@ SPELL_ALLIANCE_FLAG
Definition BattlefieldWG.h:59
void UpdateVehicleCountWG()
Definition BattlefieldWG.cpp:325
GraveyardVect m_GraveyardList
Definition Battlefield.h:399
void DespawnOrUnsummon(Milliseconds msTimeToDespawn, Seconds forcedRespawnTimer)
Definition Creature.cpp:2183
uint32 GetEntry() const
Definition Object.h:115
TeamId GetTeamId(bool original=false) const
Definition Player.h:2116
ObjectGuid GetSummonerGUID() const
Definition TemporarySummon.h:56
Unit * GetSummonerUnit() const
Definition TemporarySummon.cpp:44
Definition Unit.h:636
void SetFaction(uint32 faction)
Definition Unit.cpp:10097
TempSummon * ToTempSummon()
Definition Unit.h:702
bool IsSummon() const
Definition Unit.h:760
SpellCastResult CastSpell(SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
Definition Unit.cpp:1178
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.

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

◆ OnGameObjectCreate()

void BattlefieldWG::OnGameObjectCreate ( GameObject go)
overridevirtual

Called when a gameobject is created.

Reimplemented from ZoneScript.

677{
678 uint8 workshopId = 0;
679
680 switch (go->GetEntry())
681 {
683 workshopId = BATTLEFIELD_WG_WORKSHOP_NE;
684 break;
686 workshopId = BATTLEFIELD_WG_WORKSHOP_NW;
687 break;
689 workshopId = BATTLEFIELD_WG_WORKSHOP_SE;
690 break;
692 workshopId = BATTLEFIELD_WG_WORKSHOP_SW;
693 break;
694 default:
695 return;
696 }
697
698 for (Workshop::const_iterator itr = WorkshopsList.begin(); itr != WorkshopsList.end(); ++itr)
699 {
700 if (WGWorkshop* workshop = (*itr))
701 {
702 if (workshop->workshopId == workshopId)
703 {
704 WintergraspCapturePoint* capturePoint = new WintergraspCapturePoint(this, workshop->teamControl);
705 //Sending neutral team at start to set normal capture points by workshop->teamControl, TEAM_NEUTRAL is ignored at first call
706 capturePoint->SetCapturePointData(go, TEAM_NEUTRAL);
707 capturePoint->LinkToWorkshop(workshop);
708 AddCapturePoint(capturePoint);
709 break;
710 }
711 }
712 }
713}
@ GO_WINTERGRASP_FACTORY_BANNER_NW
Definition BattlefieldWG.h:548
@ GO_WINTERGRASP_FACTORY_BANNER_NE
Definition BattlefieldWG.h:547
@ BATTLEFIELD_WG_WORKSHOP_NW
Definition BattlefieldWG.h:505
@ BATTLEFIELD_WG_WORKSHOP_NE
Definition BattlefieldWG.h:504
@ 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:248
void LinkToWorkshop(WGWorkshop *workshop)
Definition BattlefieldWG.h:252
Definition BattlefieldWG.h:1426

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.

902{
903 if (!m_isActive)
904 RemoveAurasFromPlayer(player);
905
907 // Send worldstate to player
908 SendInitWorldStatesTo(player);
909
910 // xinef: Attacker, if hidden in relic room kick him out
911 if (player->GetTeamId() == GetAttackerTeam())
912 if (player->GetPositionX() > 5400.0f && player->GetPositionX() < 5490.0f && player->GetPositionY() > 2803.0f && player->GetPositionY() < 2878.0f)
914}
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:18915
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.

848{
849 RemoveAurasFromPlayer(player);
850
851 player->CastSpell(player, SPELL_RECRUIT, true);
852 AddUpdateTenacity(player);
853
854 if (player->GetTeamId() == GetDefenderTeam())
855 player->TeleportTo(571, 5345, 2842, 410, 3.14f);
856 else
857 {
858 if (player->GetTeamId() == TEAM_HORDE)
859 player->TeleportTo(571, 5025.857422f, 3674.628906f, 362.737122f, 4.135169f);
860 else
861 player->TeleportTo(571, 5101.284f, 2186.564f, 365.549f, 3.812f);
862 }
863
864 if (player->GetTeamId() == GetAttackerTeam())
865 {
868 }
869 else
870 {
873 }
874 SendInitWorldStatesTo(player);
875}
@ SPELL_RECRUIT
Definition BattlefieldWG.h:49
@ SPELL_TOWER_CONTROL
Definition BattlefieldWG.h:54
void AddUpdateTenacity(Player *player)
Definition BattlefieldWG.cpp:1148
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:18954

References AddUpdateTenacity(), BATTLEFIELD_WG_DATA_BROKEN_TOWER_ATT, Unit::CastSpell(), Battlefield::GetAttackerTeam(), GetData(), Battlefield::GetDefenderTeam(), Player::GetTeamId(), 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.

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

891{
892 if (!m_isActive)
893 RemoveAurasFromPlayer(player);
894
899}
@ SPELL_ALLIANCE_CONTROLS_FACTORY_PHASE_SHIFT
Definition BattlefieldWG.h:85
@ SPELL_HORDE_CONTROLS_FACTORY_PHASE_SHIFT
Definition BattlefieldWG.h:84
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:4941

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.

511{
512 if (!IsWarTime())
514}
@ BATTLEFIELD_WG_TEXT_WILL_START
Definition BattlefieldWG.h:526

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

◆ OnUnitDeath()

void BattlefieldWG::OnUnitDeath ( Unit unit)
overridevirtual

Reimplemented from ZoneScript.

794{
795 if (IsWarTime())
796 if (unit->IsVehicle())
799}
bool FindAndRemoveVehicleFromList(Unit *vehicle)
Definition BattlefieldWG.cpp:776
bool IsVehicle() const
Definition Unit.h:766

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

◆ ProcessEvent()

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

Reimplemented from ZoneScript.

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

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)
1154{
1155 m_updateTenacityList.erase(player->GetGUID());
1157}
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)
976{
978 packet.MapID = m_MapId;
979 packet.ZoneID = m_ZoneId;
980 packet.AreaID = player->GetAreaId();
982
983 player->SendDirectMessage(packet.Write());
984}
void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates &packet) override
Definition BattlefieldWG.cpp:939
uint32 m_MapId
Definition Battlefield.h:384
uint32 m_ZoneId
Definition Battlefield.h:383
void SendDirectMessage(WorldPacket const *data) const
Definition Player.cpp:5733
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.

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

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

Referenced by UpdatedDestroyedTowerCount().

◆ SendUpdateWorldStateMessage()

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

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

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.

388{ 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.

46{
47 m_TypeId = BATTLEFIELD_WG; // See enum BattlefieldTypes
51 m_Map = sMapMgr->FindMap(m_MapId, 0);
52
53 // init stalker AFTER setting map id... we spawn it at map=random memory value?...
55
57 m_IsEnabled = sWorld->getIntConfig(CONFIG_WINTERGRASP_ENABLE) == 1;
63
66 m_StartGrouping = false;
67
70
71 KickPosition.Relocate(5728.117f, 2714.346f, 697.733f, 0);
73
75
77
78 m_saveTimer = 60000;
79
80 // Init Graveyards
82
83 // Load from db
84 if (!sWorld->getWorldState(WORLD_STATE_BATTLEFIELD_WG_ACTIVE) &&
86 !sWorld->getWorldState(ClockWorldState[0]))
87 {
88 sWorld->setWorldState(WORLD_STATE_BATTLEFIELD_WG_ACTIVE, uint64(false));
91 }
92
95
96 m_Timer = sWorld->getWorldState(ClockWorldState[0]);
97 if (m_isActive)
98 {
99 m_isActive = 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 m_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 (GuidUnorderedSet::const_iterator itr = KeepCreature[GetAttackerTeam()].begin(); itr != KeepCreature[GetAttackerTeam()].end(); ++itr)
143 if (Creature* creature = GetCreature(*itr))
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 (GuidUnorderedSet::const_iterator itr = OutsideCreature[GetDefenderTeam()].begin(); itr != OutsideCreature[GetDefenderTeam()].end(); ++itr)
158 if (Creature* creature = GetCreature(*itr))
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 return true;
191}
uint8 const WG_OUTSIDE_ALLIANCE_NPC
Definition BattlefieldWG.h:475
uint8 const WG_MAX_KEEP_NPC
Definition BattlefieldWG.h:473
@ BATTLEFIELD_WG_MAPID
Definition BattlefieldWG.h:106
@ BATTLEFIELD_WG_ZONEID
Definition BattlefieldWG.h:105
uint8 const WG_MAX_TURRET
Definition BattlefieldWG.h:472
@ BATTLEFIELD_WG_NPC_STALKER
Definition BattlefieldWG.h:160
WintergraspObjectPositionData const WGKeepNPC[WG_MAX_KEEP_NPC]
Definition BattlefieldWG.h:660
WintergraspTeleporterData const WGPortalDefenderData[WG_MAX_TELEPORTER]
Definition BattlefieldWG.h:746
uint8 const WG_MAX_OUTSIDE_NPC
Definition BattlefieldWG.h:474
@ BATTLEFIELD_WG_GRAVEYARD_MAX
Definition BattlefieldWG.h:141
uint8 const WG_MAX_TELEPORTER
Definition BattlefieldWG.h:476
WintergraspObjectPositionData const WGOutsideNPC[WG_MAX_OUTSIDE_NPC]
Definition BattlefieldWG.h:719
BfWGCoordGY const WGGraveyard[BATTLEFIELD_WG_GRAVEYARD_MAX]
Definition BattlefieldWG.h:232
Position const WGTurret[WG_MAX_TURRET]
Definition BattlefieldWG.h:639
@ BATTLEFIELD_WG_DATA_MAX
Definition BattlefieldWG.h:100
WintergraspBuildingSpawnData const WGGameObjectBuilding[WG_MAX_OBJ]
Definition BattlefieldWG.h:591
float const WintergraspStalkerPos[4]
Definition BattlefieldWG.h:44
@ 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:370
@ CONFIG_WINTERGRASP_BATTLETIME
Definition IWorld.h:371
@ CONFIG_WINTERGRASP_NOBATTLETIME
Definition IWorld.h:372
@ CONFIG_WINTERGRASP_RESTART_AFTER_CRASH
Definition IWorld.h:373
@ CONFIG_WINTERGRASP_ENABLE
Definition IWorld.h:326
@ CONFIG_WINTERGRASP_PLR_MAX
Definition IWorld.h:368
@ CONFIG_WINTERGRASP_PLR_MIN
Definition IWorld.h:369
#define sMapMgr
Definition MapMgr.h:220
uint32 urand(uint32 min, uint32 max)
Definition Random.cpp:44
uint32 m_saveTimer
Definition BattlefieldWG.h:466
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:122
void SetTextId(uint32 textid)
Definition BattlefieldWG.h:126
void Initialize(TeamId startcontrol, uint32 gy)
Definition Battlefield.cpp:680
uint32 m_mapId
Definition Position.h:323
Definition WorldState.h:174
Definition BattlefieldWG.h:1073
void Init(GameObject *gobj, uint32 type, uint32 worldstate, uint8 damageText, uint8 destroyText)
Definition BattlefieldWG.h:1205
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:1446

References 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_MAPID, BATTLEFIELD_WG_NPC_STALKER, BATTLEFIELD_WG_WORKSHOP_SE, BATTLEFIELD_WG_WORKSHOP_SW, BATTLEFIELD_WG_ZONEID, 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, MINUTE, NPC_WINTERGRASP_TOWER_CANNON, OutsideCreature, Battlefield::RegisterZone(), Position::Relocate(), Battlefield::SetGraveyardNumber(), BfGraveyardWG::SetTextId(), Object::SetUInt32Value(), sMapMgr, Battlefield::SpawnCreature(), Battlefield::SpawnGameObject(), sWorld, 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.

194{
195 bool m_return = Battlefield::Update(diff);
196 if (m_saveTimer <= diff)
197 {
200 sWorld->setWorldState(ClockWorldState[0], m_Timer);
202 }
203 else
204 m_saveTimer -= diff;
205
206 // Update Tenacity
207 if (IsWarTime())
208 {
209 if (m_tenacityUpdateTimer <= diff)
210 {
211 m_tenacityUpdateTimer = 10000;
212 if (!m_updateTenacityList.empty())
214 m_updateTenacityList.clear();
215 }
216 else
217 m_tenacityUpdateTimer -= diff;
218 }
219
220 return m_return;
221}
void UpdateTenacity()
Definition BattlefieldWG.cpp:1159
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, sWorld, Battlefield::Update(), UpdateTenacity(), WORLD_STATE_BATTLEFIELD_WG_ACTIVE, and WORLD_STATE_BATTLEFIELD_WG_DEFENDER.

◆ UpdateCounterVehicle()

void BattlefieldWG::UpdateCounterVehicle ( bool  init)

Vehicle world states update.

301{
302 if (init)
303 {
306 }
309
310 for (Workshop::const_iterator itr = WorkshopsList.begin(); itr != WorkshopsList.end(); ++itr)
311 {
312 if (WGWorkshop* workshop = (*itr))
313 {
314 if (workshop->teamControl == TEAM_ALLIANCE)
316 else if (workshop->teamControl == TEAM_HORDE)
318 }
319 }
320
322}

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)
1129{
1130 if (team == GetAttackerTeam())
1131 {
1134 }
1135}

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

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

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: