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

#include "Battleground.h"

Inheritance diagram for Battleground:
Arena BattlegroundAB BattlegroundAV BattlegroundEY BattlegroundIC BattlegroundSA BattlegroundWS BattlegroundBE BattlegroundDS BattlegroundNA BattlegroundRL BattlegroundRV

Public Types

typedef std::set< Player * > SpectatorList
 
typedef std::map< ObjectGuid, ObjectGuidToBeTeleportedMap
 
typedef std::map< ObjectGuid, Player * > BattlegroundPlayerMap
 
typedef std::unordered_map< ObjectGuid::LowType, BattlegroundScore * > BattlegroundScoreMap
 
typedef std::unordered_map< ObjectGuid, ArenaLogEntryDataArenaLogEntryDataMap
 
typedef GuidVector BGObjects
 
typedef GuidVector BGCreatures
 

Public Member Functions

 Battleground ()
 
virtual ~Battleground ()
 
void Update (uint32 diff)
 
virtual bool SetupBattleground ()
 
virtual void Init ()
 
virtual void StartingEventCloseDoors ()
 
virtual void StartingEventOpenDoors ()
 
virtual void ResetBGSubclass ()
 
virtual void DestroyGate (Player *, GameObject *)
 
virtual bool AllNodesConrolledByTeam (TeamId) const
 
void StartTimedAchievement (AchievementCriteriaTimedTypes type, uint32 entry)
 
std::string GetName () const
 
BattlegroundTypeId GetBgTypeID (bool GetRandom=false) const
 
BattlegroundBracketId GetBracketId () const
 
uint32 GetInstanceID () const
 
BattlegroundStatus GetStatus () const
 
uint32 GetClientInstanceID () const
 
uint32 GetStartTime () const
 
uint32 GetEndTime () const
 
uint32 GetLastResurrectTime () const
 
uint32 GetMinLevel () const
 
uint32 GetMaxLevel () const
 
bool isTemplate () const
 
bool isMaxLevel () const
 
uint32 GetMaxPlayersPerTeam () const
 
uint32 GetMinPlayersPerTeam () const
 
int32 GetStartDelayTime () const
 
uint8 GetArenaType () const
 
PvPTeamId GetWinner () const
 
uint32 GetScriptId () const
 
uint32 GetBonusHonorFromKill (uint32 kills) const
 
void SpiritOfCompetitionEvent (PvPTeamId winnerTeamId) const
 
bool IsRandom ()
 
void SetName (std::string_view name)
 
void SetBgTypeID (BattlegroundTypeId TypeID)
 
void SetRandomTypeID (BattlegroundTypeId TypeID)
 
void SetBracket (PvPDifficultyEntry const *bracketEntry)
 
void SetInstanceID (uint32 InstanceID)
 
void SetStatus (BattlegroundStatus Status)
 
void SetClientInstanceID (uint32 InstanceID)
 
void SetStartTime (uint32 Time)
 
void SetEndTime (uint32 Time)
 
void SetLastResurrectTime (uint32 Time)
 
void SetLevelRange (uint32 min, uint32 max)
 
void SetRated (bool state)
 
void SetArenaType (uint8 type)
 
void SetArenaorBGType (bool _isArena)
 
void SetWinner (PvPTeamId winner)
 
void SetScriptId (uint32 scriptId)
 
void SetRandom (bool isRandom)
 
void ModifyStartDelayTime (int32 diff)
 
void SetStartDelayTime (int32 Time)
 
void SetMaxPlayersPerTeam (uint32 MaxPlayers)
 
void SetMinPlayersPerTeam (uint32 MinPlayers)
 
void AddToBGFreeSlotQueue ()
 
void RemoveFromBGFreeSlotQueue ()
 
void DecreaseInvitedCount (TeamId teamId)
 
void IncreaseInvitedCount (TeamId teamId)
 
uint32 GetInvitedCount (TeamId teamId) const
 
bool HasFreeSlots () const
 
uint32 GetFreeSlotsForTeam (TeamId teamId) const
 
uint32 GetMaxFreeSlots () const
 
void AddSpectator (Player *p)
 
void RemoveSpectator (Player *p)
 
bool HaveSpectators ()
 
const SpectatorListGetSpectators () const
 
void AddToBeTeleported (ObjectGuid spectator, ObjectGuid participant)
 
void RemoveToBeTeleported (ObjectGuid spectator)
 
void SpectatorsSendPacket (WorldPacket &data)
 
bool isArena () const
 
bool isBattleground () const
 
bool isRated () const
 
BattlegroundPlayerMap const & GetPlayers () const
 
uint32 GetPlayersSize () const
 
void ReadyMarkerClicked (Player *p)
 
BattlegroundScoreMap const * GetPlayerScores () const
 
std::size_t GetPlayerScoresSize () const
 
uint32 GetReviveQueueSize () const
 
void AddPlayerToResurrectQueue (ObjectGuid npc_guid, ObjectGuid player_guid)
 
void RemovePlayerFromResurrectQueue (Player *player)
 
void RelocateDeadPlayers (ObjectGuid queueIndex)
 Relocate all players in ReviveQueue to the closest graveyard.
 
void StartBattleground ()
 
GameObjectGetBGObject (uint32 type)
 
CreatureGetBGCreature (uint32 type)
 
void SetMapId (uint32 MapID)
 
uint32 GetMapId () const
 
void SetBgMap (BattlegroundMap *map)
 
BattlegroundMapGetBgMap () const
 
BattlegroundMapFindBgMap () const
 
void SetTeamStartPosition (TeamId teamId, Position const &pos)
 
Position const * GetTeamStartPosition (TeamId teamId) const
 
void SetStartMaxDist (float startMaxDist)
 
float GetStartMaxDist () const
 
virtual void FillInitialWorldStates (WorldPackets::WorldState::InitWorldStates &)
 
void SendPacketToTeam (TeamId teamId, WorldPacket const *packet, Player *sender=nullptr, bool self=true)
 
void SendPacketToAll (WorldPacket const *packet)
 
void YellToAll (Creature *creature, const char *text, uint32 language)
 
void SendChatMessage (Creature *source, uint8 textId, WorldObject *target=nullptr)
 
void SendBroadcastText (uint32 id, ChatMsg msgType, WorldObject const *target=nullptr)
 
template<class Do >
void BroadcastWorker (Do &_do)
 
void PlaySoundToAll (uint32 soundId)
 
void CastSpellOnTeam (uint32 spellId, TeamId teamId)
 
void RemoveAuraOnTeam (uint32 spellId, TeamId teamId)
 
void RewardHonorToTeam (uint32 honor, TeamId teamId)
 
void RewardReputationToTeam (uint32 factionId, uint32 reputation, TeamId teamId)
 
uint32 GetRealRepFactionForPlayer (uint32 factionId, Player *player)
 
void UpdateWorldState (uint32 variable, uint32 value)
 
void EndBattleground (PvPTeamId winnerTeamId)
 
virtual void EndBattleground (TeamId winnerTeamId)
 
void BlockMovement (Player *player)
 
GroupGetBgRaid (TeamId teamId) const
 
void SetBgRaid (TeamId teamId, Group *bg_raid)
 
void BuildPvPLogDataPacket (WorldPacket &data)
 
virtual bool UpdatePlayerScore (Player *player, uint32 type, uint32 value, bool doAddHonor=true)
 
uint32 GetPlayersCountByTeam (TeamId teamId) const
 
uint32 GetAlivePlayersCountByTeam (TeamId teamId) const
 
void UpdatePlayersCountByTeam (TeamId teamId, bool remove)
 
virtual void CheckWinConditions ()
 
void SetArenaTeamIdForTeam (TeamId teamId, uint32 ArenaTeamId)
 
uint32 GetArenaTeamIdForTeam (TeamId teamId) const
 
void SetArenaMatchmakerRating (TeamId teamId, uint32 MMR)
 
uint32 GetArenaMatchmakerRating (TeamId teamId) const
 
virtual void HandleAreaTrigger (Player *, uint32)
 
virtual void HandleKillPlayer (Player *player, Player *killer)
 
virtual void HandleKillUnit (Creature *, Player *)
 
virtual void EventPlayerDroppedFlag (Player *)
 
virtual void EventPlayerClickedOnFlag (Player *, GameObject *)
 
virtual void EventPlayerDamagedGO (Player *, GameObject *, uint32)
 
virtual void EventPlayerUsedGO (Player *, GameObject *)
 
virtual void DoAction (uint32, ObjectGuid)
 
virtual void HandlePlayerResurrect (Player *)
 
virtual GraveyardStruct const * GetClosestGraveyard (Player *player)
 
virtual void AddPlayer (Player *player)
 
void AddOrSetPlayerToCorrectBgGroup (Player *player, TeamId teamId)
 
virtual void RemovePlayerAtLeave (Player *player)
 
void HandleTriggerBuff (GameObject *gameObject)
 
void SetHoliday (bool is_holiday)
 
void SpawnBGObject (uint32 type, uint32 respawntime, uint32 forceRespawnDelay=0)
 
bool AddObject (uint32 type, uint32 entry, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime=0, GOState goState=GO_STATE_READY)
 
CreatureAddCreature (uint32 entry, uint32 type, float x, float y, float z, float o, uint32 respawntime=0, MotionTransport *transport=nullptr)
 
bool DelCreature (uint32 type)
 
bool DelObject (uint32 type)
 
bool AddSpiritGuide (uint32 type, float x, float y, float z, float o, TeamId teamId)
 
int32 GetObjectType (ObjectGuid guid)
 
void DoorOpen (uint32 type)
 
void DoorClose (uint32 type)
 
virtual bool HandlePlayerUnderMap (Player *)
 
bool IsPlayerInBattleground (ObjectGuid guid) const
 
bool ToBeDeleted () const
 
void RewardXPAtKill (Player *killer, Player *victim)
 
virtual ObjectGuid GetFlagPickerGUID (TeamId=TEAM_NEUTRAL) const
 
virtual void SetDroppedFlagGUID (ObjectGuid, TeamId=TEAM_NEUTRAL)
 
uint32 GetTeamScore (TeamId teamId) const
 
virtual TeamId GetPrematureWinner ()
 
uint8 GetUniqueBracketId () const
 
BattlegroundAVToBattlegroundAV ()
 
BattlegroundAV const * ToBattlegroundAV () const
 
BattlegroundWSToBattlegroundWS ()
 
BattlegroundWS const * ToBattlegroundWS () const
 
BattlegroundABToBattlegroundAB ()
 
BattlegroundAB const * ToBattlegroundAB () const
 
BattlegroundNAToBattlegroundNA ()
 
BattlegroundNA const * ToBattlegroundNA () const
 
BattlegroundBEToBattlegroundBE ()
 
BattlegroundBE const * ToBattlegroundBE () const
 
BattlegroundEYToBattlegroundEY ()
 
BattlegroundEY const * ToBattlegroundEY () const
 
BattlegroundRLToBattlegroundRL ()
 
BattlegroundRL const * ToBattlegroundRL () const
 
BattlegroundSAToBattlegroundSA ()
 
BattlegroundSA const * ToBattlegroundSA () const
 
BattlegroundDSToBattlegroundDS ()
 
BattlegroundDS const * ToBattlegroundDS () const
 
BattlegroundRVToBattlegroundRV ()
 
BattlegroundRV const * ToBattlegroundRV () const
 
BattlegroundICToBattlegroundIC ()
 
BattlegroundIC const * ToBattlegroundIC () const
 

Static Public Member Functions

static TeamId GetOtherTeamId (TeamId teamId)
 

Public Attributes

GuidSet readyMarkerClickedSet
 
ArenaLogEntryDataMap ArenaLogEntries
 
BGObjects BgObjects
 
BGCreatures BgCreatures
 

Protected Member Functions

void EndNow ()
 
void PlayerAddedToBGCheckIfBGIsRunning (Player *player)
 
void _ProcessResurrect (uint32 diff)
 
void _ProcessProgress (uint32 diff)
 
void _ProcessLeave (uint32 diff)
 
void _ProcessJoin (uint32 diff)
 
void _CheckSafePositions (uint32 diff)
 
virtual void RemovePlayer (Player *)
 

Protected Attributes

bool m_SetupCompleted
 
BattlegroundScoreMap PlayerScores
 
BattlegroundPlayerMap m_Players
 
std::map< ObjectGuid, GuidVectorm_ReviveQueue
 
uint8 m_Events
 
BattlegroundStartTimeIntervals StartDelayTimes [BG_STARTING_EVENT_COUNT]
 
uint32 StartMessageIds [BG_STARTING_EVENT_COUNT]
 
bool m_BuffChange
 
bool m_IsRandom
 
BGHonorMode m_HonorMode
 
int32 m_TeamScores [PVP_TEAMS_COUNT]
 
ArenaTeamScore _arenaTeamScores [PVP_TEAMS_COUNT]
 
uint32 m_UpdateTimer
 
EventProcessor _reviveEvents
 

Private Member Functions

virtual bool PreUpdateImpl (uint32)
 Pre-update hook.
 
virtual void PostUpdateImpl (uint32)
 Post-update hook.
 

Private Attributes

BattlegroundTypeId m_RealTypeID
 
BattlegroundTypeId m_RandomTypeID
 
uint32 m_InstanceID
 
BattlegroundStatus m_Status
 
uint32 m_ClientInstanceID
 
uint32 m_StartTime
 
uint32 m_ResetStatTimer
 
uint32 m_ValidStartPositionTimer
 
int32 m_EndTime
 
uint32 m_LastResurrectTime
 
BattlegroundBracketId m_BracketId { BG_BRACKET_ID_FIRST }
 
uint8 m_ArenaType
 
bool _InBGFreeSlotQueue { false }
 
bool m_SetDeleteThis
 
bool m_IsArena
 
bool m_IsTemplate
 
PvPTeamId m_WinnerId
 
int32 m_StartDelayTime
 
bool m_IsRated
 
bool m_PrematureCountDown
 
uint32 m_PrematureCountDownTimer
 
std::string m_Name {}
 
GuidVector m_ResurrectQueue
 
GuidDeque m_OfflineQueue
 
uint32 m_BgInvitedPlayers [PVP_TEAMS_COUNT]
 
Groupm_BgRaids [PVP_TEAMS_COUNT]
 
SpectatorList m_Spectators
 
ToBeTeleportedMap m_ToBeTeleported
 
uint32 m_PlayersCount [PVP_TEAMS_COUNT]
 
uint32 m_ArenaTeamIds [PVP_TEAMS_COUNT]
 
uint32 m_ArenaTeamMMR [PVP_TEAMS_COUNT]
 
uint32 m_LevelMin
 
uint32 m_LevelMax
 
uint32 m_MaxPlayersPerTeam
 
uint32 m_MinPlayersPerTeam
 
uint32 m_MapId
 
BattlegroundMapm_Map
 
float m_StartMaxDist
 
std::array< Position, PVP_TEAMS_COUNT_startPosition
 
uint32 ScriptId
 

Detailed Description

Member Typedef Documentation

◆ ArenaLogEntryDataMap

◆ BattlegroundPlayerMap

◆ BattlegroundScoreMap

◆ BGCreatures

◆ BGObjects

Todo:
: make this protected:

◆ SpectatorList

typedef std::set<Player*> Battleground::SpectatorList

◆ ToBeTeleportedMap

Constructor & Destructor Documentation

◆ Battleground()

Battleground::Battleground ( )
143{
146 m_InstanceID = 0;
149 m_EndTime = 0;
151 m_ArenaType = 0;
152 m_IsArena = false;
153 m_IsTemplate = true;
155 m_StartTime = 0;
158 m_Events = 0;
160 m_IsRated = false;
161 m_BuffChange = false;
162 m_IsRandom = false;
163 m_LevelMin = 0;
164 m_LevelMax = 0;
165 m_SetDeleteThis = false;
166
169
170 m_MapId = 0;
171 m_Map = nullptr;
172 m_StartMaxDist = 0.0f;
173 ScriptId = 0;
174
177
180
181 m_BgRaids[TEAM_ALLIANCE] = nullptr;
182 m_BgRaids[TEAM_HORDE] = nullptr;
183
186
189
192
193 m_PrematureCountDown = false;
195
197
198 m_SetupCompleted = false;
199
204
209
210 // pussywizard:
211 m_UpdateTimer = 0;
212}
@ BG_TEXT_START_TWO_MINUTES
Definition Battleground.h:68
@ BG_TEXT_BATTLE_HAS_BEGUN
Definition Battleground.h:71
@ BG_TEXT_START_ONE_MINUTE
Definition Battleground.h:69
@ BG_TEXT_START_HALF_MINUTE
Definition Battleground.h:70
@ BG_NORMAL
Definition Battleground.h:270
@ BG_START_DELAY_1M
Definition Battleground.h:171
@ BG_START_DELAY_30S
Definition Battleground.h:172
@ BG_START_DELAY_2M
Definition Battleground.h:170
@ BG_START_DELAY_NONE
Definition Battleground.h:174
@ STATUS_NONE
Definition Battleground.h:190
@ BG_STARTING_EVENT_THIRD
Definition Battleground.h:232
@ BG_STARTING_EVENT_SECOND
Definition Battleground.h:231
@ BG_STARTING_EVENT_FIRST
Definition Battleground.h:230
@ BG_STARTING_EVENT_FOURTH
Definition Battleground.h:233
@ PVP_TEAM_NEUTRAL
Definition SharedDefines.h:3698
@ BATTLEGROUND_TYPE_NONE
Definition SharedDefines.h:3736
@ TEAM_ALLIANCE
Definition SharedDefines.h:771
@ TEAM_HORDE
Definition SharedDefines.h:772
uint32 m_ArenaTeamMMR[PVP_TEAMS_COUNT]
Definition Battleground.h:724
bool m_SetDeleteThis
Definition Battleground.h:664
BGHonorMode m_HonorMode
Definition Battleground.h:639
uint32 m_MapId
Definition Battleground.h:733
uint32 m_ArenaTeamIds[PVP_TEAMS_COUNT]
Definition Battleground.h:723
uint32 m_ValidStartPositionTimer
Definition Battleground.h:658
int32 m_StartDelayTime
Definition Battleground.h:668
uint32 m_ClientInstanceID
Definition Battleground.h:655
uint32 m_LevelMax
Definition Battleground.h:728
PvPTeamId m_WinnerId
Definition Battleground.h:667
uint32 m_LastResurrectTime
Definition Battleground.h:660
uint32 m_BgInvitedPlayers[PVP_TEAMS_COUNT]
Definition Battleground.h:711
BattlegroundTypeId m_RandomTypeID
Definition Battleground.h:652
bool m_IsArena
Definition Battleground.h:665
bool m_IsRated
Definition Battleground.h:669
bool m_PrematureCountDown
Definition Battleground.h:670
uint32 m_PlayersCount[PVP_TEAMS_COUNT]
Definition Battleground.h:720
Group * m_BgRaids[PVP_TEAMS_COUNT]
Definition Battleground.h:714
uint32 m_PrematureCountDownTimer
Definition Battleground.h:671
int32 m_TeamScores[PVP_TEAMS_COUNT]
Definition Battleground.h:640
uint32 m_UpdateTimer
Definition Battleground.h:645
bool m_IsRandom
Definition Battleground.h:637
BattlegroundTypeId m_RealTypeID
Definition Battleground.h:651
BattlegroundStartTimeIntervals StartDelayTimes[BG_STARTING_EVENT_COUNT]
Definition Battleground.h:632
int32 m_EndTime
Definition Battleground.h:659
uint32 ScriptId
Definition Battleground.h:737
uint32 m_InstanceID
Definition Battleground.h:653
uint32 m_ResetStatTimer
Definition Battleground.h:657
bool m_BuffChange
Definition Battleground.h:636
uint32 m_MinPlayersPerTeam
Definition Battleground.h:730
uint8 m_ArenaType
Definition Battleground.h:662
uint8 m_Events
Definition Battleground.h:631
float m_StartMaxDist
Definition Battleground.h:735
uint32 m_MaxPlayersPerTeam
Definition Battleground.h:729
bool m_IsTemplate
Definition Battleground.h:666
uint32 m_LevelMin
Definition Battleground.h:727
uint32 m_StartTime
Definition Battleground.h:656
bool m_SetupCompleted
Definition Battleground.h:618
BattlegroundMap * m_Map
Definition Battleground.h:734
BattlegroundStatus m_Status
Definition Battleground.h:654
uint32 StartMessageIds[BG_STARTING_EVENT_COUNT]
Definition Battleground.h:634

References BATTLEGROUND_TYPE_NONE, BG_NORMAL, BG_START_DELAY_1M, BG_START_DELAY_2M, BG_START_DELAY_30S, BG_START_DELAY_NONE, BG_STARTING_EVENT_FIRST, BG_STARTING_EVENT_FOURTH, BG_STARTING_EVENT_SECOND, BG_STARTING_EVENT_THIRD, BG_TEXT_BATTLE_HAS_BEGUN, BG_TEXT_START_HALF_MINUTE, BG_TEXT_START_ONE_MINUTE, BG_TEXT_START_TWO_MINUTES, m_ArenaTeamIds, m_ArenaTeamMMR, m_ArenaType, m_BgInvitedPlayers, m_BgRaids, m_BuffChange, m_ClientInstanceID, m_EndTime, m_Events, m_HonorMode, m_InstanceID, m_IsArena, m_IsRandom, m_IsRated, m_IsTemplate, m_LastResurrectTime, m_LevelMax, m_LevelMin, m_Map, m_MapId, m_MaxPlayersPerTeam, m_MinPlayersPerTeam, m_PlayersCount, m_PrematureCountDown, m_PrematureCountDownTimer, m_RandomTypeID, m_RealTypeID, m_ResetStatTimer, m_SetDeleteThis, m_SetupCompleted, m_StartDelayTime, m_StartMaxDist, m_StartTime, m_Status, m_TeamScores, m_UpdateTimer, m_ValidStartPositionTimer, m_WinnerId, PVP_TEAM_NEUTRAL, ScriptId, StartDelayTimes, StartMessageIds, STATUS_NONE, TEAM_ALLIANCE, and TEAM_HORDE.

◆ ~Battleground()

Battleground::~Battleground ( )
virtual
215{
216 LOG_DEBUG("bg.battleground", "> Remove Battleground {} {} {}", GetName(), GetBgTypeID(), GetInstanceID());
217
219
220 // remove objects and creatures
221 // (this is done automatically in mapmanager update, when the instance is reset after the reset time)
222 uint32 size = uint32(BgCreatures.size());
223 for (uint32 i = 0; i < size; ++i)
224 DelCreature(i);
225
226 size = uint32(BgObjects.size());
227 for (uint32 i = 0; i < size; ++i)
228 DelObject(i);
229
230 sScriptMgr->OnBattlegroundDestroy(this);
231
232 sBattlegroundMgr->RemoveBattleground(GetBgTypeID(), GetInstanceID());
233 // unload map
234 if (m_Map)
235 {
236 m_Map->SetUnload();
237 //unlink to prevent crash, always unlink all pointer reference before destruction
238 m_Map->SetBG(nullptr);
239 m_Map = nullptr;
240 }
241
242 // remove from bg free slot queue
244
245 for (auto const& itr : PlayerScores)
246 delete itr.second;
247}
#define sBattlegroundMgr
Definition BattlegroundMgr.h:187
std::uint32_t uint32
Definition Define.h:107
#define LOG_DEBUG(filterType__,...)
Definition Log.h:170
#define sScriptMgr
Definition ScriptMgr.h:719
void SetUnload()
Definition Map.cpp:2338
void SetBG(Battleground *bg)
Definition Map.h:694
bool DelCreature(uint32 type)
Definition Battleground.cpp:1669
EventProcessor _reviveEvents
Definition Battleground.h:647
uint32 GetInstanceID() const
Definition Battleground.h:322
BGObjects BgObjects
Definition Battleground.h:540
bool DelObject(uint32 type)
Definition Battleground.cpp:1688
BattlegroundScoreMap PlayerScores
Definition Battleground.h:621
void RemoveFromBGFreeSlotQueue()
Definition Battleground.cpp:1300
BGCreatures BgCreatures
Definition Battleground.h:541
std::string GetName() const
Definition Battleground.h:319
BattlegroundTypeId GetBgTypeID(bool GetRandom=false) const
Definition Battleground.h:320
void KillAllEvents(bool force)
Definition EventProcessor.cpp:82

References _reviveEvents, BgCreatures, BgObjects, DelCreature(), DelObject(), GetBgTypeID(), GetInstanceID(), GetName(), EventProcessor::KillAllEvents(), LOG_DEBUG, m_Map, PlayerScores, RemoveFromBGFreeSlotQueue(), sBattlegroundMgr, BattlegroundMap::SetBG(), BattlegroundMap::SetUnload(), and sScriptMgr.

Member Function Documentation

◆ _CheckSafePositions()

void Battleground::_CheckSafePositions ( uint32  diff)
inlineprotected
326{
327 float maxDist = GetStartMaxDist();
328 if (!maxDist)
329 return;
330
332
334 {
336
337 for (auto const& [playerGuid, player] : GetPlayers())
338 {
339 if (player->IsGameMaster())
340 continue;
341
342 Position pos = player->GetPosition();
343 Position const* startPos = GetTeamStartPosition(player->GetBgTeamId());
344
345 if (pos.GetExactDistSq(startPos) > maxDist)
346 {
347 LOG_DEBUG("bg.battleground", "BATTLEGROUND: Sending {} back to start location (map: {}) (possible exploit)", player->GetName(), GetMapId());
348 player->TeleportTo(GetMapId(), startPos->GetPositionX(), startPos->GetPositionY(), startPos->GetPositionZ(), startPos->GetOrientation());
349 }
350 }
351 }
352}
@ CHECK_PLAYER_POSITION_INVERVAL
Definition Battleground.h:153
uint32 GetMapId() const
Definition Battleground.h:436
Position const * GetTeamStartPosition(TeamId teamId) const
Definition Battleground.cpp:710
BattlegroundPlayerMap const & GetPlayers() const
Definition Battleground.h:409
float GetStartMaxDist() const
Definition Battleground.h:447
Definition Position.h:27
float GetPositionZ() const
Definition Position.h:123
float GetOrientation() const
Definition Position.h:124
float GetPositionX() const
Definition Position.h:121
void GetPosition(float &x, float &y) const
Definition Position.h:126
float GetPositionY() const
Definition Position.h:122
float GetExactDistSq(float x, float y, float z) const
Definition Position.h:174

References CHECK_PLAYER_POSITION_INVERVAL, Position::GetExactDistSq(), GetMapId(), Position::GetOrientation(), GetPlayers(), Position::GetPosition(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), GetStartMaxDist(), GetTeamStartPosition(), LOG_DEBUG, and m_ValidStartPositionTimer.

Referenced by Update().

◆ _ProcessJoin()

void Battleground::_ProcessJoin ( uint32  diff)
inlineprotected
470{
471 // *********************************************************
472 // *** BATTLEGROUND STARTING SYSTEM ***
473 // *********************************************************
475
476 if (m_ResetStatTimer > 5000)
477 {
479 for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
480 itr->second->ResetAllPowers();
481 }
482
483 if (!m_SetupCompleted)
484 {
485 if (!FindBgMap())
486 {
487 LOG_ERROR("bg.battleground", "Battleground::_ProcessJoin: map (map id: {}, instance id: {}) is not created!", m_MapId, m_InstanceID);
488 EndNow();
489 return;
490 }
491
492 // Setup here, only when at least one player has ported to the map
493 if (!SetupBattleground())
494 {
495 EndNow();
496 return;
497 }
498
500
501 // Get the configured prep time
502 uint32 configuredPrepTime;
503
504 // Special case for Strand of the Ancients - always use 120 seconds due to boat timing mechanics
506 configuredPrepTime = 120 * IN_MILLISECONDS;
507 else
508 configuredPrepTime = isArena() ?
511
512 SetStartDelayTime(configuredPrepTime);
513
514 // Pre-mark events for announcements that should be skipped based on configured prep time
515 if (configuredPrepTime < StartDelayTimes[BG_STARTING_EVENT_FIRST])
516 {
517 // Skip first announcement (120s for BG, 60s for Arena)
519
520 if (configuredPrepTime < StartDelayTimes[BG_STARTING_EVENT_SECOND])
521 {
522 // Skip second announcement (60s for BG, 30s for Arena)
524
525 if (configuredPrepTime < StartDelayTimes[BG_STARTING_EVENT_THIRD])
526 {
527 // Skip third announcement (30s for BG, 15s for Arena)
529 }
530 }
531 }
532
533 // Mark setup as completed
534 m_SetupCompleted = true;
535 }
536
537 // First announcement at 120s or 60s (Depending on BG or Arena and configured time)
539 {
541
544 }
545 // Second announcement at 60s or 30s
547 {
549
552 }
553 // Third announcement at 30s or 15s
555 {
557
560
561 if (isArena())
562 switch (GetBgTypeID())
563 {
564 case BATTLEGROUND_NA:
567 break;
568 case BATTLEGROUND_BE:
571 break;
572 case BATTLEGROUND_RL:
575 break;
576 case BATTLEGROUND_DS:
579 break;
580 case BATTLEGROUND_RV:
583 break;
584 default:
585 break;
586 }
587 }
588 // Delay expired (after configured prep time)
589 else if (GetStartDelayTime() <= 0 && !(m_Events & BG_STARTING_EVENT_4))
590 {
592
593 // Start the battle
595
598
601
602 // Remove preparation
603 if (isArena())
604 {
605 // pussywizard: initial visibility range is 30yd, set it to a proper value now:
606 if (BattlegroundMap* map = GetBgMap())
607 map->SetVisibilityRange(World::GetMaxVisibleDistanceInBGArenas());
608
609 for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
610 if (Player* player = itr->second)
611 {
612 WorldPacket status;
613 sBattlegroundMgr->BuildBattlegroundStatusPacket(&status, this, player->GetCurrentBattlegroundQueueSlot(), STATUS_IN_PROGRESS, 0, GetStartTime(), GetArenaType(), player->GetBgTeamId());
614 player->SendDirectMessage(&status);
615
616 player->RemoveAurasDueToSpell(SPELL_ARENA_PREPARATION);
617 player->ResetAllPowers();
618 // remove auras with duration lower than 30s
619 Unit::AuraApplicationMap& auraMap = player->GetAppliedAuras();
620 for (Unit::AuraApplicationMap::iterator iter = auraMap.begin(); iter != auraMap.end();)
621 {
622 AuraApplication* aurApp = iter->second;
623 Aura* aura = aurApp->GetBase();
624 if (!aura->IsPermanent()
625 && aura->GetDuration() <= 30 * IN_MILLISECONDS
626 && aurApp->IsPositive()
627 // && (!aura->GetSpellInfo()->HasAttribute(SPELL_ATTR0_NO_IMMUNITIES)) Xinef: condition, ALL buffs should be removed
629 player->RemoveAura(iter);
630 else
631 ++iter;
632 }
633
634 player->UpdateObjectVisibility(true);
635 }
636
637 for (SpectatorList::const_iterator itr = m_Spectators.begin(); itr != m_Spectators.end(); ++itr)
639
641
642 // pussywizard: arena spectator stuff
644 {
645 for (ToBeTeleportedMap::const_iterator itr = m_ToBeTeleported.begin(); itr != m_ToBeTeleported.end(); ++itr)
646 if (Player* p = ObjectAccessor::FindConnectedPlayer(itr->first))
647 if (Player* t = ObjectAccessor::FindPlayer(itr->second))
648 {
649 if (!t->FindMap() || t->FindMap() != GetBgMap())
650 continue;
651
652 p->SetSummonPoint(t->GetMapId(), t->GetPositionX(), t->GetPositionY(), t->GetPositionZ(), 15, true);
653
654 WorldPacket data(SMSG_SUMMON_REQUEST, 8 + 4 + 4);
655 data << t->GetGUID();
656 data << uint32(t->GetZoneId());
657 data << uint32(15 * IN_MILLISECONDS);
658 p->SendDirectMessage(&data);
659 }
660 m_ToBeTeleported.clear();
661 }
662
663 sScriptMgr->OnArenaStart(this);
664 }
665 else
666 {
668
669 for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
670 {
671 itr->second->RemoveAurasDueToSpell(SPELL_PREPARATION);
672 itr->second->ResetAllPowers();
673 }
674
675 // Announce BG starting
678
679 sScriptMgr->OnBattlegroundStart(this);
680 }
681 }
682}
@ BG_BE_OBJECT_READY_MARKER_1
Definition BattlegroundBE.h:31
@ BG_BE_OBJECT_READY_MARKER_2
Definition BattlegroundBE.h:32
@ BG_DS_OBJECT_READY_MARKER_1
Definition BattlegroundDS.h:33
@ BG_DS_OBJECT_READY_MARKER_2
Definition BattlegroundDS.h:34
@ BG_NA_OBJECT_READY_MARKER_1
Definition BattlegroundNA.h:31
@ BG_NA_OBJECT_READY_MARKER_2
Definition BattlegroundNA.h:32
@ BG_RL_OBJECT_READY_MARKER_2
Definition BattlegroundRL.h:30
@ BG_RL_OBJECT_READY_MARKER_1
Definition BattlegroundRL.h:29
@ BG_RV_OBJECT_READY_MARKER_2
Definition BattlegroundRV.h:46
@ BG_RV_OBJECT_READY_MARKER_1
Definition BattlegroundRV.h:45
@ BG_STARTING_EVENT_3
Definition Battleground.h:224
@ BG_STARTING_EVENT_2
Definition Battleground.h:223
@ BG_STARTING_EVENT_1
Definition Battleground.h:222
@ BG_STARTING_EVENT_4
Definition Battleground.h:225
@ SPELL_ARENA_PREPARATION
Definition Battleground.h:132
@ SPELL_PREPARATION
Definition Battleground.h:133
@ STATUS_IN_PROGRESS
Definition Battleground.h:193
@ SOUND_BG_START
Definition Battleground.h:78
constexpr auto IN_MILLISECONDS
Definition Common.h:53
@ LANG_BG_STARTED_ANNOUNCE_WORLD
Definition Language.h:696
#define LOG_ERROR(filterType__,...)
Definition Log.h:158
@ CHAT_MSG_BG_SYSTEM_NEUTRAL
Definition SharedDefines.h:3428
@ BATTLEGROUND_BE
Definition SharedDefines.h:3741
@ BATTLEGROUND_RV
Definition SharedDefines.h:3747
@ BATTLEGROUND_NA
Definition SharedDefines.h:3740
@ BATTLEGROUND_DS
Definition SharedDefines.h:3746
@ BATTLEGROUND_SA
Definition SharedDefines.h:3745
@ BATTLEGROUND_RL
Definition SharedDefines.h:3744
@ SPELL_AURA_MOD_INVISIBILITY
Definition SpellAuraDefines.h:81
@ CONFIG_ARENA_PREP_TIME
Definition WorldConfig.h:282
@ CONFIG_BATTLEGROUND_PREP_TIME
Definition WorldConfig.h:261
@ CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_ENABLE
Definition WorldConfig.h:71
Definition SpellAuras.h:37
bool IsPositive() const
Definition SpellAuras.h:68
Aura * GetBase() const
Definition SpellAuras.h:62
Definition SpellAuras.h:87
int32 GetDuration() const
Definition SpellAuras.h:133
bool HasEffectType(AuraType type) const
Definition SpellAuras.cpp:1174
bool IsPermanent() const
Definition SpellAuras.h:139
Definition Map.h:680
void EndNow()
Definition Battleground.cpp:1732
uint32 GetMinLevel() const
Definition Battleground.h:329
virtual bool SetupBattleground()
Definition Battleground.h:301
uint8 GetArenaType() const
Definition Battleground.h:348
SpectatorList m_Spectators
Definition Battleground.h:716
void SetStartDelayTime(int32 Time)
Definition Battleground.h:378
BattlegroundMap * GetBgMap() const
Definition Battleground.h:440
BattlegroundMap * FindBgMap() const
Definition Battleground.h:441
void SetStatus(BattlegroundStatus Status)
Definition Battleground.h:364
virtual void StartingEventCloseDoors()
Definition Battleground.h:307
bool isArena() const
Definition Battleground.h:404
void SendBroadcastText(uint32 id, ChatMsg msgType, WorldObject const *target=nullptr)
Definition Battleground.cpp:734
ToBeTeleportedMap m_ToBeTeleported
Definition Battleground.h:717
uint32 GetStartTime() const
Definition Battleground.h:325
int32 GetStartDelayTime() const
Definition Battleground.h:347
virtual void StartingEventOpenDoors()
Definition Battleground.h:308
BattlegroundStatus GetStatus() const
Definition Battleground.h:323
void ModifyStartDelayTime(int32 diff)
Definition Battleground.h:377
virtual void CheckWinConditions()
Definition Battleground.h:498
uint32 GetMaxLevel() const
Definition Battleground.h:330
void PlaySoundToAll(uint32 soundId)
Definition Battleground.cpp:747
Definition Chat.h:37
void SendWorldText(std::string_view str)
Definition Chat.cpp:131
Definition Player.h:1066
std::multimap< uint32, AuraApplication * > AuraApplicationMap
Definition Unit.h:664
Definition WorldPacket.h:26
static float GetMaxVisibleDistanceInBGArenas()
Definition World.h:215
@ SMSG_SUMMON_REQUEST
Definition Opcodes.h:713
#define sWorld
Definition World.h:316
AC_GAME_API void HandleResetCommand(Player *player)
Definition ArenaSpectator.cpp:227
Player * FindConnectedPlayer(ObjectGuid const guid)
Definition ObjectAccessor.cpp:257
Player * FindPlayer(ObjectGuid const guid)
Definition ObjectAccessor.cpp:245

References BATTLEGROUND_BE, BATTLEGROUND_DS, BATTLEGROUND_NA, BATTLEGROUND_RL, BATTLEGROUND_RV, BATTLEGROUND_SA, BG_BE_OBJECT_READY_MARKER_1, BG_BE_OBJECT_READY_MARKER_2, BG_DS_OBJECT_READY_MARKER_1, BG_DS_OBJECT_READY_MARKER_2, BG_NA_OBJECT_READY_MARKER_1, BG_NA_OBJECT_READY_MARKER_2, BG_RL_OBJECT_READY_MARKER_1, BG_RL_OBJECT_READY_MARKER_2, BG_RV_OBJECT_READY_MARKER_1, BG_RV_OBJECT_READY_MARKER_2, BG_STARTING_EVENT_1, BG_STARTING_EVENT_2, BG_STARTING_EVENT_3, BG_STARTING_EVENT_4, BG_STARTING_EVENT_FIRST, BG_STARTING_EVENT_FOURTH, BG_STARTING_EVENT_SECOND, BG_STARTING_EVENT_THIRD, CHAT_MSG_BG_SYSTEM_NEUTRAL, CheckWinConditions(), CONFIG_ARENA_PREP_TIME, CONFIG_BATTLEGROUND_PREP_TIME, CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_ENABLE, DelObject(), EndNow(), FindBgMap(), ObjectAccessor::FindConnectedPlayer(), ObjectAccessor::FindPlayer(), GetArenaType(), AuraApplication::GetBase(), GetBgMap(), GetBgTypeID(), Aura::GetDuration(), GetMaxLevel(), World::GetMaxVisibleDistanceInBGArenas(), GetMinLevel(), GetName(), GetPlayers(), GetStartDelayTime(), GetStartTime(), GetStatus(), ArenaSpectator::HandleResetCommand(), Aura::HasEffectType(), IN_MILLISECONDS, isArena(), Aura::IsPermanent(), AuraApplication::IsPositive(), LANG_BG_STARTED_ANNOUNCE_WORLD, LOG_ERROR, m_Events, m_InstanceID, m_MapId, m_ResetStatTimer, m_SetupCompleted, m_Spectators, m_ToBeTeleported, ModifyStartDelayTime(), PlaySoundToAll(), sBattlegroundMgr, SendBroadcastText(), ChatHandler::SendWorldText(), SetStartDelayTime(), SetStatus(), SetupBattleground(), SMSG_SUMMON_REQUEST, SOUND_BG_START, SPELL_ARENA_PREPARATION, SPELL_AURA_MOD_INVISIBILITY, SPELL_PREPARATION, sScriptMgr, StartDelayTimes, StartingEventCloseDoors(), StartingEventOpenDoors(), StartMessageIds, STATUS_IN_PROGRESS, and sWorld.

Referenced by Update().

◆ _ProcessLeave()

void Battleground::_ProcessLeave ( uint32  diff)
inlineprotected
685{
686 // *********************************************************
687 // *** BATTLEGROUND ENDING SYSTEM ***
688 // *********************************************************
689 // remove all players from battleground after 2 minutes
690 m_EndTime -= diff;
691 if (m_EndTime <= 0)
692 {
693 m_EndTime = TIME_TO_AUTOREMOVE; // pussywizard: 0 -> TIME_TO_AUTOREMOVE
694 BattlegroundPlayerMap::iterator itr, next;
695 for (itr = m_Players.begin(); itr != m_Players.end(); itr = next)
696 {
697 next = itr;
698 ++next;
699 itr->second->LeaveBattleground(this); //itr is erased here!
700 }
701 }
702}
@ TIME_TO_AUTOREMOVE
Definition Battleground.h:157
BattlegroundPlayerMap m_Players
Definition Battleground.h:626

References m_EndTime, m_Players, and TIME_TO_AUTOREMOVE.

Referenced by Update().

◆ _ProcessProgress()

void Battleground::_ProcessProgress ( uint32  diff)
inlineprotected
428{
429 // *********************************************************
430 // *** BATTLEGROUND BALLANCE SYSTEM ***
431 // *********************************************************
432 // if less then minimum players are in on one side, then start premature finish timer
434 {
436 m_PrematureCountDownTimer = sBattlegroundMgr->GetPrematureFinishTime();
437 }
438 else if (m_PrematureCountDownTimer < diff)
439 {
440 // time's up!
442 m_PrematureCountDown = false;
443 }
444 else if (!sBattlegroundMgr->isTesting())
445 {
446 uint32 newtime = m_PrematureCountDownTimer - diff;
447 // announce every minute
448 if (newtime > (MINUTE * IN_MILLISECONDS))
449 {
451 GetBgMap()->DoForAllPlayers([&](Player* player)
452 {
454 });
455 }
456 else
457 {
458 //announce every 15 seconds
459 if (newtime / (15 * IN_MILLISECONDS) != m_PrematureCountDownTimer / (15 * IN_MILLISECONDS))
460 GetBgMap()->DoForAllPlayers([&](Player* player)
461 {
463 });
464 }
466 }
467}
constexpr auto MINUTE
Definition Common.h:47
@ LANG_BATTLEGROUND_PREMATURE_FINISH_WARNING
Definition Language.h:729
@ LANG_BATTLEGROUND_PREMATURE_FINISH_WARNING_SECS
Definition Language.h:730
void EndBattleground(PvPTeamId winnerTeamId)
Definition Battleground.cpp:834
virtual TeamId GetPrematureWinner()
Definition Battleground.cpp:417
void PSendSysMessage(std::string_view str, bool escapeCharacters=false)
Definition Chat.cpp:211
void DoForAllPlayers(std::function< void(Player *)> exec)
Definition Map.cpp:2911
WorldSession * GetSession() const
Definition Player.h:1993

References Map::DoForAllPlayers(), EndBattleground(), GetBgMap(), GetPrematureWinner(), Player::GetSession(), IN_MILLISECONDS, LANG_BATTLEGROUND_PREMATURE_FINISH_WARNING, LANG_BATTLEGROUND_PREMATURE_FINISH_WARNING_SECS, m_PrematureCountDown, m_PrematureCountDownTimer, MINUTE, ChatHandler::PSendSysMessage(), and sBattlegroundMgr.

Referenced by Update().

◆ _ProcessResurrect()

void Battleground::_ProcessResurrect ( uint32  diff)
inlineprotected
355{
356 // *********************************************************
357 // *** BATTLEGROUND RESURRECTION SYSTEM ***
358 // *********************************************************
359 // this should be handled by spell system
360
361 _reviveEvents.Update(diff);
362
363 m_LastResurrectTime += diff;
365 {
366 if (GetReviveQueueSize())
367 {
368 for (std::map<ObjectGuid, GuidVector>::iterator itr = m_ReviveQueue.begin(); itr != m_ReviveQueue.end(); ++itr)
369 {
370 Creature* sh = nullptr;
371 for (ObjectGuid const& guid : itr->second)
372 {
373 Player* player = ObjectAccessor::FindPlayer(guid);
374 if (!player)
375 continue;
376
377 if (!sh && player->IsInWorld())
378 {
379 sh = player->GetMap()->GetCreature(itr->first);
380 // only for visual effect
381 if (sh)
382 // Spirit Heal, effect 117
383 sh->CastSpell(sh, SPELL_SPIRIT_HEAL, true);
384 }
385
386 // Resurrection visual
387 player->CastSpell(player, SPELL_RESURRECTION_VISUAL, true);
388 m_ResurrectQueue.push_back(guid);
389 }
390
391 itr->second.clear();
392 }
393
394 m_ReviveQueue.clear();
396 }
397 else
398 // queue is clear and time passed, just update last resurrection time
400 }
401 else if (m_LastResurrectTime > 500) // Resurrect players only half a second later, to see spirit heal effect on NPC
402 {
403 for (ObjectGuid const& guid : m_ResurrectQueue)
404 {
405 Player* player = ObjectAccessor::FindPlayer(guid);
406 if (!player)
407 continue;
408 player->ResurrectPlayer(1.0f);
409 player->CastSpell(player, 6962, true);
410 player->CastSpell(player, SPELL_SPIRIT_HEAL_MANA, true);
411 player->SpawnCorpseBones(false);
412 }
413 m_ResurrectQueue.clear();
414 }
415}
@ SPELL_SPIRIT_HEAL
Definition Battleground.h:130
@ SPELL_SPIRIT_HEAL_MANA
Definition Battleground.h:134
@ SPELL_RESURRECTION_VISUAL
Definition Battleground.h:131
#define RESURRECTION_INTERVAL
Definition Battleground.h:163
GuidVector m_ResurrectQueue
Definition Battleground.h:705
uint32 GetReviveQueueSize() const
Definition Battleground.h:421
std::map< ObjectGuid, GuidVector > m_ReviveQueue
Definition Battleground.h:628
Definition Creature.h:47
void Update(uint32 p_time)
Definition EventProcessor.cpp:40
Creature * GetCreature(ObjectGuid const &guid)
Definition Map.cpp:2357
Definition ObjectGuid.h:118
bool IsInWorld() const
Definition Object.h:108
void SpawnCorpseBones(bool triggerSave=true)
Definition Player.cpp:4600
void ResurrectPlayer(float restore_percent, bool applySickness=false)
Definition Player.cpp:4382
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:1194
Map * GetMap() const
Definition Object.h:620

References _reviveEvents, Unit::CastSpell(), ObjectAccessor::FindPlayer(), Map::GetCreature(), WorldObject::GetMap(), GetReviveQueueSize(), Object::IsInWorld(), m_LastResurrectTime, m_ResurrectQueue, m_ReviveQueue, RESURRECTION_INTERVAL, Player::ResurrectPlayer(), Player::SpawnCorpseBones(), SPELL_RESURRECTION_VISUAL, SPELL_SPIRIT_HEAL, SPELL_SPIRIT_HEAL_MANA, and EventProcessor::Update().

Referenced by Update().

◆ AddCreature()

Creature * Battleground::AddCreature ( uint32  entry,
uint32  type,
float  x,
float  y,
float  z,
float  o,
uint32  respawntime = 0,
MotionTransport transport = nullptr 
)
1607{
1608 // If the assert is called, means that BgCreatures must be resized!
1609 ASSERT(type < BgCreatures.size());
1610
1611 Map* map = FindBgMap();
1612 if (!map)
1613 return nullptr;
1614
1615 if (transport)
1616 {
1617 transport->CalculatePassengerPosition(x, y, z, &o);
1618 if (Creature* creature = transport->SummonCreature(entry, x, y, z, o, TEMPSUMMON_MANUAL_DESPAWN))
1619 {
1620 transport->AddPassenger(creature, true);
1621 BgCreatures[type] = creature->GetGUID();
1622 return creature;
1623 }
1624
1625 return nullptr;
1626 }
1627
1628 Creature* creature = new Creature();
1629 if (!creature->Create(map->GenerateLowGuid<HighGuid::Unit>(), map, PHASEMASK_NORMAL, entry, 0, x, y, z, o))
1630 {
1631 LOG_ERROR("bg.battleground", "Battleground::AddCreature: cannot create creature (entry: {}) for BG (map: {}, instance id: {})!",
1632 entry, m_MapId, m_InstanceID);
1633 delete creature;
1634 return nullptr;
1635 }
1636
1637 creature->SetHomePosition(x, y, z, o);
1638
1639 CreatureTemplate const* cinfo = sObjectMgr->GetCreatureTemplate(entry);
1640 if (!cinfo)
1641 {
1642 LOG_ERROR("bg.battleground", "Battleground::AddCreature: creature template (entry: {}) does not exist for BG (map: {}, instance id: {})!",
1643 entry, m_MapId, m_InstanceID);
1644 delete creature;
1645 return nullptr;
1646 }
1647 // Force using DB speeds
1648 creature->SetSpeed(MOVE_WALK, cinfo->speed_walk);
1649 creature->SetSpeed(MOVE_RUN, cinfo->speed_run);
1650
1651 if (!map->AddToMap(creature))
1652 {
1653 delete creature;
1654 return nullptr;
1655 }
1656
1657 BgCreatures[type] = creature->GetGUID();
1658
1659 if (respawntime)
1660 creature->SetRespawnDelay(respawntime);
1661
1662 // Xinef: Set PVP state for vehicles, should be for all creatures in bg?
1663 if (creature->IsVehicle())
1664 creature->SetPvP(true);
1665
1666 return creature;
1667}
#define ASSERT
Definition Errors.h:68
#define sObjectMgr
Definition ObjectMgr.h:1686
@ PHASEMASK_NORMAL
Definition Object.h:62
@ TEMPSUMMON_MANUAL_DESPAWN
Definition Object.h:55
@ MOVE_RUN
Definition UnitDefines.h:354
@ MOVE_WALK
Definition UnitDefines.h:353
void SetHomePosition(float x, float y, float z, float o)
Definition Creature.h:338
void SetRespawnDelay(uint32 delay)
Definition Creature.h:294
bool Create(ObjectGuid::LowType guidlow, Map *map, uint32 phaseMask, uint32 Entry, uint32 vehId, float x, float y, float z, float ang, const CreatureData *data=nullptr)
Definition Creature.cpp:1125
Definition Map.h:163
ObjectGuid::LowType GenerateLowGuid()
Definition Map.h:480
bool AddToMap(T *, bool checkTransport=false)
Definition Map.cpp:305
void AddPassenger(WorldObject *passenger, bool withAll=false) override
Definition Transport.cpp:264
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:113
void CalculatePassengerPosition(float &x, float &y, float &z, float *o=nullptr) const override
This method transforms supplied transport offsets into global coordinates.
Definition Transport.h:33
bool IsVehicle() const
Definition Unit.h:790
void SetPvP(bool state)
Definition Unit.h:1031
void SetSpeed(UnitMoveType mtype, float rate, bool forced=false)
Definition Unit.cpp:14606
TempSummon * SummonCreature(uint32 id, const Position &pos, TempSummonType spwtype=TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime=0, uint32 vehId=0, SummonPropertiesEntry const *properties=nullptr, bool visibleBySummonerOnly=false) const
Definition Object.cpp:2352
Definition CreatureData.h:186
float speed_run
Definition CreatureData.h:201
float speed_walk
Definition CreatureData.h:200

References MotionTransport::AddPassenger(), Map::AddToMap(), ASSERT, BgCreatures, Transport::CalculatePassengerPosition(), Creature::Create(), FindBgMap(), Map::GenerateLowGuid(), Object::GetGUID(), Unit::IsVehicle(), LOG_ERROR, m_InstanceID, m_MapId, MOVE_RUN, MOVE_WALK, PHASEMASK_NORMAL, Creature::SetHomePosition(), Unit::SetPvP(), Creature::SetRespawnDelay(), Unit::SetSpeed(), sObjectMgr, CreatureTemplate::speed_run, CreatureTemplate::speed_walk, WorldObject::SummonCreature(), TEMPSUMMON_MANUAL_DESPAWN, and Unit.

Referenced by BattlegroundAV::AddAVCreature(), AddSpiritGuide(), BattlegroundSA::CaptureGraveyard(), BattlegroundEY::EventTeamCapturedPoint(), BattlegroundIC::HandleCapturedNodes(), BattlegroundAB::NodeOccupied(), BattlegroundAV::PopulateNode(), BattlegroundSA::ResetObjs(), BattlegroundDS::SetupBattleground(), and BattlegroundIC::SetupBattleground().

◆ AddObject()

bool Battleground::AddObject ( uint32  type,
uint32  entry,
float  x,
float  y,
float  z,
float  o,
float  rotation0,
float  rotation1,
float  rotation2,
float  rotation3,
uint32  respawnTime = 0,
GOState  goState = GO_STATE_READY 
)
1485{
1486 // If the assert is called, means that BgObjects must be resized!
1487 ASSERT(type < BgObjects.size());
1488
1489 Map* map = FindBgMap();
1490 if (!map)
1491 return false;
1492 // Must be created this way, adding to godatamap would add it to the base map of the instance
1493 // and when loading it (in go::LoadFromDB()), a new guid would be assigned to the object, and a new object would be created
1494 // So we must create it specific for this instance
1495 GameObject* go = sObjectMgr->IsGameObjectStaticTransport(entry) ? new StaticTransport() : new GameObject();
1496 if (!go->Create(map->GenerateLowGuid<HighGuid::GameObject>(), entry, GetBgMap(),
1497 PHASEMASK_NORMAL, x, y, z, o, G3D::Quat(rotation0, rotation1, rotation2, rotation3), 100, goState))
1498 {
1499 LOG_ERROR("sql.sql", "Battleground::AddObject: cannot create gameobject (entry: {}) for BG (map: {}, instance id: {})!",
1500 entry, m_MapId, m_InstanceID);
1501 LOG_ERROR("bg.battleground", "Battleground::AddObject: cannot create gameobject (entry: {}) for BG (map: {}, instance id: {})!",
1502 entry, m_MapId, m_InstanceID);
1503 delete go;
1504 return false;
1505 }
1506 /*
1507 ObjectGuid::LowType spawnId = go->GetSpawnId();
1508
1509 // without this, UseButtonOrDoor caused the crash, since it tried to get go info from godata
1510 // iirc that was changed, so adding to go data map is no longer required if that was the only function using godata from GameObject without checking if it existed
1511 GameObjectData& data = sObjectMgr->NewGOData(spawnId);
1512
1513 data.id = entry;
1514 data.mapid = GetMapId();
1515 data.posX = x;
1516 data.posY = y;
1517 data.posZ = z;
1518 data.orientation = o;
1519 data.rotation0 = rotation0;
1520 data.rotation1 = rotation1;
1521 data.rotation2 = rotation2;
1522 data.rotation3 = rotation3;
1523 data.spawntimesecs = respawnTime;
1524 data.spawnMask = 1;
1525 data.animprogress = 100;
1526 data.go_state = 1;
1527 */
1528 // Add to world, so it can be later looked up from HashMapHolder
1529 if (!map->AddToMap(go))
1530 {
1531 delete go;
1532 return false;
1533 }
1534 BgObjects[type] = go->GetGUID();
1535 return true;
1536}
Definition GameObject.h:120
virtual bool Create(ObjectGuid::LowType guidlow, uint32 name_id, Map *map, uint32 phaseMask, float x, float y, float z, float ang, G3D::Quat const &rotation, uint32 animprogress, GOState go_state, uint32 artKit=0)
Definition GameObject.cpp:259
Definition Transport.h:115

References Map::AddToMap(), ASSERT, BgObjects, GameObject::Create(), FindBgMap(), GameObject, Map::GenerateLowGuid(), GetBgMap(), Object::GetGUID(), LOG_ERROR, m_InstanceID, m_MapId, PHASEMASK_NORMAL, and sObjectMgr.

Referenced by BattlegroundSA::CaptureGraveyard(), BattlegroundIC::EventPlayerClickedOnFlag(), BattlegroundIC::HandleCapturedNodes(), BattlegroundIC::PostUpdateImpl(), BattlegroundSA::ResetObjs(), BattlegroundAB::SetupBattleground(), BattlegroundAV::SetupBattleground(), BattlegroundBE::SetupBattleground(), BattlegroundDS::SetupBattleground(), BattlegroundEY::SetupBattleground(), BattlegroundIC::SetupBattleground(), BattlegroundNA::SetupBattleground(), BattlegroundRL::SetupBattleground(), BattlegroundRV::SetupBattleground(), and BattlegroundWS::SetupBattleground().

◆ AddOrSetPlayerToCorrectBgGroup()

void Battleground::AddOrSetPlayerToCorrectBgGroup ( Player player,
TeamId  teamId 
)
1255{
1256 if (player->GetGroup() && (player->GetGroup()->isBGGroup() || player->GetGroup()->isBFGroup()))
1257 {
1258 LOG_INFO("misc", "Battleground::AddOrSetPlayerToCorrectBgGroup - player is already in {} group!", (player->GetGroup()->isBGGroup() ? "BG" : "BF"));
1259 return;
1260 }
1261
1262 ObjectGuid playerGuid = player->GetGUID();
1263 Group* group = GetBgRaid(teamId);
1264 if (!group) // first player joined
1265 {
1266 group = new Group;
1267 SetBgRaid(teamId, group);
1268 group->Create(player);
1269 sGroupMgr->AddGroup(group);
1270 }
1271 else if (group->IsMember(playerGuid))
1272 {
1273 uint8 subgroup = group->GetMemberGroup(playerGuid);
1274 player->SetBattlegroundOrBattlefieldRaid(group, subgroup);
1275 }
1276 else
1277 {
1278 group->AddMember(player);
1279
1280 if (Group* originalGroup = player->GetOriginalGroup())
1281 if (originalGroup->IsLeader(playerGuid))
1282 {
1283 group->ChangeLeader(playerGuid);
1284 group->SendUpdate();
1285 }
1286 }
1287}
std::uint8_t uint8
Definition Define.h:109
#define sGroupMgr
Definition GroupMgr.h:51
#define LOG_INFO(filterType__,...)
Definition Log.h:166
Group * GetBgRaid(TeamId teamId) const
Definition Battleground.h:482
void SetBgRaid(TeamId teamId, Group *bg_raid)
Definition Battleground.cpp:1879
Definition Group.h:169
uint8 GetMemberGroup(ObjectGuid guid) const
Definition Group.cpp:2394
bool AddMember(Player *player)
Definition Group.cpp:390
void SendUpdate()
Definition Group.cpp:1665
bool isBGGroup() const
Definition Group.cpp:2286
void ChangeLeader(ObjectGuid guid)
Definition Group.cpp:712
bool isBFGroup() const
Definition Group.cpp:2291
bool IsMember(ObjectGuid guid) const
Definition Group.cpp:2346
bool Create(Player *leader)
Definition Group.cpp:108
Group * GetGroup()
Definition Player.h:2477
Group * GetOriginalGroup()
Definition Player.h:2492
void SetBattlegroundOrBattlefieldRaid(Group *group, int8 subgroup=-1)
Definition Player.cpp:13085

References Group::AddMember(), Group::ChangeLeader(), Group::Create(), GetBgRaid(), Player::GetGroup(), Object::GetGUID(), Group::GetMemberGroup(), Player::GetOriginalGroup(), Group::isBFGroup(), Group::isBGGroup(), Group::IsMember(), LOG_INFO, Group::SendUpdate(), Player::SetBattlegroundOrBattlefieldRaid(), SetBgRaid(), and sGroupMgr.

Referenced by AddPlayer().

◆ AddPlayer()

void Battleground::AddPlayer ( Player player)
virtual

Reimplemented in Arena, BattlegroundAB, BattlegroundAV, BattlegroundEY, BattlegroundIC, BattlegroundSA, and BattlegroundWS.

1190{
1191 // remove afk from player
1192 if (player->HasPlayerFlag(PLAYER_FLAGS_AFK))
1193 player->ToggleAFK();
1194
1195 sScriptMgr->OnBattlegroundBeforeAddPlayer(this, player);
1196
1197 // score struct must be created in inherited class
1198
1199 ObjectGuid guid = player->GetGUID();
1200 TeamId teamId = player->GetBgTeamId();
1201
1202 // Add to list/maps
1203 m_Players[guid] = player;
1204
1205 UpdatePlayersCountByTeam(teamId, false); // +1 player
1206
1207 WorldPacket data;
1208 sBattlegroundMgr->BuildPlayerJoinedBattlegroundPacket(&data, player);
1209 SendPacketToTeam(teamId, &data, player, false);
1210
1211 // add arena specific auras
1212 if (isArena())
1213 {
1214 // restore pets health before remove
1215 Pet* pet = player->GetPet();
1216 if (pet)
1217 if (pet->IsAlive())
1218 pet->SetHealth(pet->GetMaxHealth());
1219
1220 player->RemoveArenaAuras();
1221 if (pet)
1222 pet->RemoveArenaAuras();
1223 player->RemoveArenaSpellCooldowns(true);
1225 player->DestroyConjuredItems(true);
1226 player->UnsummonPetTemporaryIfAny();
1227
1228 if (GetStatus() == STATUS_WAIT_JOIN) // not started yet
1229 {
1230 player->CastSpell(player, SPELL_ARENA_PREPARATION, true);
1231 player->ResetAllPowers();
1232 }
1233 }
1234 else
1235 {
1236 if (GetStatus() == STATUS_WAIT_JOIN) // not started yet
1237 player->CastSpell(player, SPELL_PREPARATION, true); // reduces all mana cost of spells.
1238 }
1239
1240 // Xinef: reset all map criterias on map enter
1242
1243 // setup BG group membership
1245 AddOrSetPlayerToCorrectBgGroup(player, teamId);
1246
1247 sScriptMgr->OnBattlegroundAddPlayer(this, player);
1248
1249 // Log
1250 LOG_DEBUG("bg.battleground", "BATTLEGROUND: Player {} joined the battle.", player->GetName());
1251}
@ STATUS_WAIT_JOIN
Definition Battleground.h:192
@ ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP
Definition DBCEnums.h:90
@ TEMP_ENCHANTMENT_SLOT
Definition Item.h:170
@ PLAYER_FLAGS_AFK
Definition Player.h:461
TeamId
Definition SharedDefines.h:770
void PlayerAddedToBGCheckIfBGIsRunning(Player *player)
Definition Battleground.cpp:1837
void SendPacketToTeam(TeamId teamId, WorldPacket const *packet, Player *sender=nullptr, bool self=true)
Definition Battleground.cpp:722
void UpdatePlayersCountByTeam(TeamId teamId, bool remove)
Definition Battleground.h:490
void AddOrSetPlayerToCorrectBgGroup(Player *player, TeamId teamId)
Definition Battleground.cpp:1254
Definition Pet.h:41
Pet * GetPet() const
Definition Player.cpp:8947
void DestroyConjuredItems(bool update)
Definition PlayerStorage.cpp:3338
void UnsummonPetTemporaryIfAny()
Definition Player.cpp:14221
void ResetAchievementCriteria(AchievementCriteriaCondition condition, uint32 value, bool evenIfCriteriaComplete=false)
Definition Player.cpp:13937
void ToggleAFK()
Definition Player.cpp:1311
void ResetAllPowers()
Definition Player.cpp:2028
bool HasPlayerFlag(PlayerFlags flags) const
Definition Player.h:1105
void RemoveArenaEnchantments(EnchantmentSlot slot)
Definition PlayerStorage.cpp:4227
TeamId GetBgTeamId() const
Definition Player.h:2287
void RemoveArenaSpellCooldowns(bool removeActivePetCooldowns=false)
Definition Player.cpp:3537
uint32 GetMaxHealth() const
Definition Unit.h:1094
bool IsAlive() const
Definition Unit.h:1773
void SetHealth(uint32 val)
Definition Unit.cpp:15726
void RemoveArenaAuras()
Definition Unit.cpp:5465
std::string const & GetName() const
Definition Object.h:524

References ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP, AddOrSetPlayerToCorrectBgGroup(), Unit::CastSpell(), Player::DestroyConjuredItems(), Player::GetBgTeamId(), Object::GetGUID(), GetMapId(), Unit::GetMaxHealth(), WorldObject::GetName(), Player::GetPet(), GetStatus(), Player::HasPlayerFlag(), Unit::IsAlive(), isArena(), LOG_DEBUG, m_Players, PLAYER_FLAGS_AFK, PlayerAddedToBGCheckIfBGIsRunning(), Unit::RemoveArenaAuras(), Player::RemoveArenaEnchantments(), Player::RemoveArenaSpellCooldowns(), Player::ResetAchievementCriteria(), Player::ResetAllPowers(), sBattlegroundMgr, SendPacketToTeam(), Unit::SetHealth(), SPELL_ARENA_PREPARATION, SPELL_PREPARATION, sScriptMgr, STATUS_WAIT_JOIN, TEMP_ENCHANTMENT_SLOT, Player::ToggleAFK(), Player::UnsummonPetTemporaryIfAny(), and UpdatePlayersCountByTeam().

Referenced by Arena::AddPlayer(), BattlegroundAB::AddPlayer(), BattlegroundAV::AddPlayer(), BattlegroundEY::AddPlayer(), BattlegroundIC::AddPlayer(), BattlegroundSA::AddPlayer(), and BattlegroundWS::AddPlayer().

◆ AddPlayerToResurrectQueue()

void Battleground::AddPlayerToResurrectQueue ( ObjectGuid  npc_guid,
ObjectGuid  player_guid 
)
1438{
1439 m_ReviveQueue[npc_guid].push_back(player_guid);
1440
1441 Player* player = ObjectAccessor::FindPlayer(player_guid);
1442 if (!player)
1443 return;
1444
1445 player->CastSpell(player, SPELL_WAITING_FOR_RESURRECT, true);
1446}
@ SPELL_WAITING_FOR_RESURRECT
Definition Battleground.h:128

References Unit::CastSpell(), ObjectAccessor::FindPlayer(), m_ReviveQueue, and SPELL_WAITING_FOR_RESURRECT.

Referenced by WorldSession::HandleAreaSpiritHealerQueueOpcode(), and WorldSession::HandleGossipHelloOpcode().

◆ AddSpectator()

void Battleground::AddSpectator ( Player p)
inline
396{ m_Spectators.insert(p); }

References m_Spectators.

◆ AddSpiritGuide()

bool Battleground::AddSpiritGuide ( uint32  type,
float  x,
float  y,
float  z,
float  o,
TeamId  teamId 
)
Todo:
: Fix display here
1709{
1711
1712 if (Creature* creature = AddCreature(entry, type, x, y, z, o))
1713 {
1714 creature->setDeathState(DeathState::Dead);
1715 creature->SetGuidValue(UNIT_FIELD_CHANNEL_OBJECT, creature->GetGUID());
1716 // aura
1718 // creature->SetVisibleAura(0, SPELL_SPIRIT_HEAL_CHANNEL);
1719 // casting visual effect
1720 creature->SetUInt32Value(UNIT_CHANNEL_SPELL, SPELL_SPIRIT_HEAL_CHANNEL);
1721 // correct cast speed
1722 creature->SetFloatValue(UNIT_MOD_CAST_SPEED, 1.0f);
1723 //creature->CastSpell(creature, SPELL_SPIRIT_HEAL_CHANNEL, true);
1724 return true;
1725 }
1726 LOG_ERROR("bg.battleground", "Battleground::AddSpiritGuide: cannot create spirit guide (type: {}, entry: {}) for BG (map: {}, instance id: {})!",
1727 type, entry, m_MapId, m_InstanceID);
1728 EndNow();
1729 return false;
1730}
@ BG_CREATURE_ENTRY_H_SPIRITGUIDE
Definition Battleground.h:123
@ BG_CREATURE_ENTRY_A_SPIRITGUIDE
Definition Battleground.h:122
@ SPELL_SPIRIT_HEAL_CHANNEL
Definition Battleground.h:129
@ UNIT_FIELD_CHANNEL_OBJECT
Definition UpdateFields.h:93
@ UNIT_MOD_CAST_SPEED
Definition UpdateFields.h:137
@ UNIT_CHANNEL_SPELL
Definition UpdateFields.h:94
Creature * AddCreature(uint32 entry, uint32 type, float x, float y, float z, float o, uint32 respawntime=0, MotionTransport *transport=nullptr)
Definition Battleground.cpp:1606

References AddCreature(), BG_CREATURE_ENTRY_A_SPIRITGUIDE, BG_CREATURE_ENTRY_H_SPIRITGUIDE, Dead, EndNow(), LOG_ERROR, m_InstanceID, m_MapId, SPELL_SPIRIT_HEAL_CHANNEL, TEAM_ALLIANCE, UNIT_CHANNEL_SPELL, UNIT_FIELD_CHANNEL_OBJECT, and UNIT_MOD_CAST_SPEED.

Referenced by BattlegroundSA::CaptureGraveyard(), BattlegroundEY::EventTeamCapturedPoint(), BattlegroundIC::HandleCapturedNodes(), BattlegroundAB::NodeOccupied(), BattlegroundAV::PopulateNode(), BattlegroundSA::ResetObjs(), BattlegroundAB::SetupBattleground(), BattlegroundAV::SetupBattleground(), BattlegroundEY::SetupBattleground(), BattlegroundIC::SetupBattleground(), and BattlegroundWS::SetupBattleground().

◆ AddToBeTeleported()

void Battleground::AddToBeTeleported ( ObjectGuid  spectator,
ObjectGuid  participant 
)
inline
400{ m_ToBeTeleported[spectator] = participant; }

References m_ToBeTeleported.

Referenced by ArenaSpectator::HandleSpectatorSpectateCommand().

◆ AddToBGFreeSlotQueue()

void Battleground::AddToBGFreeSlotQueue ( )
1291{
1293 {
1294 sBattlegroundMgr->AddToBGFreeSlotQueue(m_RealTypeID, this);
1295 _InBGFreeSlotQueue = true;
1296 }
1297}
bool _InBGFreeSlotQueue
Definition Battleground.h:663
bool isBattleground() const
Definition Battleground.h:405

References _InBGFreeSlotQueue, isBattleground(), m_RealTypeID, and sBattlegroundMgr.

Referenced by RemovePlayerAtLeave(), and StartBattleground().

◆ AllNodesConrolledByTeam()

virtual bool Battleground::AllNodesConrolledByTeam ( TeamId  ) const
inlinevirtual

Reimplemented in BattlegroundAB, BattlegroundEY, and BattlegroundIC.

314{ return false; }

Referenced by achievement_bg_control_all_nodes::OnCheck().

◆ BlockMovement()

void Battleground::BlockMovement ( Player player)
1041{
1042 player->SetClientControl(player, 0); // movement disabled NOTE: the effect will be automatically removed by client when the player is teleported from the battleground, so no need to send with uint8(1) in RemovePlayerAtLeave()
1043}
void SetClientControl(Unit *target, bool allowMove, bool packetOnly=false)
Definition Player.cpp:12844

References Player::SetClientControl().

Referenced by EndBattleground(), and PlayerAddedToBGCheckIfBGIsRunning().

◆ BroadcastWorker()

template<class Do >
void Battleground::BroadcastWorker ( Do &  _do)
123{
124 for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
125 _do(itr->second);
126}

References m_Players.

Referenced by SendBroadcastText().

◆ BuildPvPLogDataPacket()

void Battleground::BuildPvPLogDataPacket ( WorldPacket data)
1394{
1395 uint8 type = (isArena() ? 1 : 0);
1396
1397 data.Initialize(MSG_PVP_LOG_DATA, 1 + 1 + 4 + 40 * GetPlayerScores()->size());
1398 data << uint8(type); // type (battleground = 0 / arena = 1)
1399
1400 if (type) // arena
1401 {
1402 for (uint8 i = 0; i < PVP_TEAMS_COUNT; ++i)
1403 _arenaTeamScores[i].BuildRatingInfoBlock(data);
1404
1405 for (uint8 i = 0; i < PVP_TEAMS_COUNT; ++i)
1406 _arenaTeamScores[i].BuildTeamInfoBlock(data);
1407 }
1408
1410 {
1411 data << uint8(1); // bg ended
1412 data << uint8(GetWinner()); // who win
1413 }
1414 else
1415 data << uint8(0); // bg not ended
1416
1417 data << uint32(GetPlayerScores()->size());
1418
1419 for (auto const& score : PlayerScores)
1420 score.second->AppendToPacket(data);
1421}
@ STATUS_WAIT_LEAVE
Definition Battleground.h:194
uint8 constexpr PVP_TEAMS_COUNT
Definition SharedDefines.h:3701
ArenaTeamScore _arenaTeamScores[PVP_TEAMS_COUNT]
Definition Battleground.h:642
PvPTeamId GetWinner() const
Definition Battleground.h:349
BattlegroundScoreMap const * GetPlayerScores() const
Definition Battleground.h:418
void Initialize(uint16 opcode, std::size_t newres=200)
Definition WorldPacket.h:68
@ MSG_PVP_LOG_DATA
Definition Opcodes.h:766

References _arenaTeamScores, GetPlayerScores(), GetStatus(), GetWinner(), WorldPacket::Initialize(), isArena(), MSG_PVP_LOG_DATA, PlayerScores, PVP_TEAMS_COUNT, and STATUS_WAIT_LEAVE.

Referenced by EndBattleground(), WorldSession::HandlePVPLogDataOpcode(), and PlayerAddedToBGCheckIfBGIsRunning().

◆ CastSpellOnTeam()

void Battleground::CastSpellOnTeam ( uint32  spellId,
TeamId  teamId 
)
753{
754 for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
755 if (itr->second->GetBgTeamId() == teamId)
756 itr->second->CastSpell(itr->second, spellId, true);
757}

References m_Players.

Referenced by BattlegroundIC::HandleCapturedNodes(), BattlegroundAV::HandleKillUnit(), BattlegroundAB::NodeOccupied(), and BattlegroundAV::PostUpdateImpl().

◆ CheckWinConditions()

virtual void Battleground::CheckWinConditions ( )
inlinevirtual

Reimplemented in Arena.

498{ }

Referenced by _ProcessJoin().

◆ DecreaseInvitedCount()

void Battleground::DecreaseInvitedCount ( TeamId  teamId)
inline
386{ if (m_BgInvitedPlayers[teamId]) --m_BgInvitedPlayers[teamId]; }

References m_BgInvitedPlayers.

Referenced by RemovePlayerAtLeave().

◆ DelCreature()

bool Battleground::DelCreature ( uint32  type)
1670{
1671 if (!BgCreatures[type])
1672 return true;
1673
1674 if (Creature* creature = GetBgMap()->GetCreature(BgCreatures[type]))
1675 {
1676 creature->AddObjectToRemoveList();
1677 BgCreatures[type].Clear();
1678 return true;
1679 }
1680
1681 LOG_ERROR("bg.battleground", "Battleground::DelCreature: creature (type: {}, {}) not found for BG (map: {}, instance id: {})!",
1682 type, BgCreatures[type].ToString(), m_MapId, m_InstanceID);
1683
1684 BgCreatures[type].Clear();
1685 return false;
1686}
std::string ToString(Type &&val, Params &&... params)
Definition StringConvert.h:250
Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
Definition ObjectAccessor.cpp:210

References WorldObject::AddObjectToRemoveList(), BgCreatures, GetBgMap(), LOG_ERROR, m_InstanceID, and m_MapId.

Referenced by BattlegroundSA::CaptureGraveyard(), BattlegroundAV::ChangeMineOwner(), BattlegroundAV::DePopulateNode(), BattlegroundAV::EventPlayerAssaultsPoint(), BattlegroundIC::EventPlayerClickedOnFlag(), BattlegroundAV::EventPlayerDestroyedPoint(), BattlegroundEY::EventTeamLostPoint(), BattlegroundIC::HandleContestedNodes(), BattlegroundAV::HandleKillUnit(), BattlegroundAB::NodeDeoccupied(), BattlegroundAV::PopulateNode(), BattlegroundAV::ResetBGSubclass(), BattlegroundSA::ResetObjs(), and ~Battleground().

◆ DelObject()

bool Battleground::DelObject ( uint32  type)
1689{
1690 if (!BgObjects[type])
1691 return true;
1692
1693 if (GameObject* obj = GetBgMap()->GetGameObject(BgObjects[type]))
1694 {
1695 obj->SetRespawnTime(0); // not save respawn time
1696 obj->Delete();
1697 BgObjects[type].Clear();
1698 return true;
1699 }
1700
1701 LOG_ERROR("bg.battleground", "Battleground::DelObject: gameobject (type: {}, {}) not found for BG (map: {}, instance id: {})!",
1702 type, BgObjects[type].ToString(), m_MapId, m_InstanceID);
1703
1704 BgObjects[type].Clear();
1705 return false;
1706}
GameObject * GetGameObject(WorldObject const &u, ObjectGuid const &guid)
Definition ObjectAccessor.cpp:184

References BgObjects, GetBgMap(), LOG_ERROR, m_InstanceID, and m_MapId.

Referenced by _ProcessJoin(), BattlegroundSA::CaptureGraveyard(), BattlegroundSA::DestroyGate(), BattlegroundIC::EventPlayerClickedOnFlag(), BattlegroundIC::HandleContestedNodes(), BattlegroundIC::PostUpdateImpl(), BattlegroundSA::ResetObjs(), and ~Battleground().

◆ DestroyGate()

virtual void Battleground::DestroyGate ( Player ,
GameObject  
)
inlinevirtual

Reimplemented in BattlegroundIC, and BattlegroundSA.

311{}

◆ DoAction()

virtual void Battleground::DoAction ( uint32  ,
ObjectGuid   
)
inlinevirtual

Reimplemented in BattlegroundIC.

520{}

◆ DoorClose()

void Battleground::DoorClose ( uint32  type)
1541{
1542 if (GameObject* obj = GetBgMap()->GetGameObject(BgObjects[type]))
1543 {
1544 // If doors are open, close it
1545 if (obj->getLootState() == GO_ACTIVATED && obj->GetGoState() != GO_STATE_READY)
1546 {
1547 obj->SetLootState(GO_READY);
1548 obj->SetGoState(GO_STATE_READY);
1549 }
1550 }
1551 else
1552 LOG_ERROR("bg.battleground", "Battleground::DoorClose: door gameobject (type: {}, {}) not found for BG (map: {}, instance id: {})!",
1553 type, BgObjects[type].ToString(), m_MapId, m_InstanceID);
1554}
@ GO_STATE_READY
Definition GameObjectData.h:706
@ GO_ACTIVATED
Definition GameObject.h:112
@ GO_READY
Definition GameObject.h:111

References BgObjects, GetBgMap(), GO_ACTIVATED, GO_READY, GO_STATE_READY, LOG_ERROR, m_InstanceID, and m_MapId.

Referenced by BattlegroundDS::PostUpdateImpl(), BattlegroundRV::PostUpdateImpl(), BattlegroundAB::StartingEventCloseDoors(), BattlegroundAV::StartingEventCloseDoors(), and BattlegroundWS::StartingEventCloseDoors().

◆ DoorOpen()

◆ EndBattleground() [1/2]

void Battleground::EndBattleground ( PvPTeamId  winnerTeamId)
835{
836 // xinef: if this is true, it means that endbattleground is called second time
837 // skip to avoid double rating reduce / add
838 // can bug out due to multithreading ?
839 // set as fast as possible
841 return;
842
845 SetWinner(winnerTeamId);
846
847 if (winnerTeamId == PVP_TEAM_ALLIANCE)
848 {
849 if (isBattleground())
851
852 PlaySoundToAll(SOUND_ALLIANCE_WINS); // alliance wins sound
853 }
854 else if (winnerTeamId == PVP_TEAM_HORDE)
855 {
856 if (isBattleground())
858
859 PlaySoundToAll(SOUND_HORDE_WINS); // horde wins sound
860 }
861
863 uint64 battlegroundId = 1;
865 {
866 stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PVPSTATS_MAXID);
867 PreparedQueryResult result = CharacterDatabase.Query(stmt);
868
869 if (result)
870 {
871 Field* fields = result->Fetch();
872 battlegroundId = fields[0].Get<uint64>() + 1;
873 }
874
875 stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PVPSTATS_BATTLEGROUND);
876 stmt->SetData(0, battlegroundId);
877 stmt->SetData(1, GetWinner());
878 stmt->SetData(2, GetUniqueBracketId());
879 stmt->SetData(3, GetBgTypeID(true));
880 CharacterDatabase.Execute(stmt);
881 }
882
883 //we must set it this way, because end time is sent in packet!
885
886 WorldPacket pvpLogData;
887 BuildPvPLogDataPacket(pvpLogData);
888
889 for (auto const& [playerGuid, player] : m_Players)
890 {
891 TeamId bgTeamId = player->GetBgTeamId();
892
893 // should remove spirit of redemption
894 if (player->HasSpiritOfRedemptionAura())
895 player->RemoveAurasByType(SPELL_AURA_MOD_SHAPESHIFT);
896
897 if (!player->IsAlive())
898 {
899 player->ResurrectPlayer(1.0f);
900 player->SpawnCorpseBones();
901 }
902 else
903 {
904 //needed cause else in av some creatures will kill the players at the end
905 player->CombatStop();
906 player->getHostileRefMgr().deleteReferences();
907 }
908
909 uint32 winner_kills = player->GetRandomWinner() ? sWorld->getIntConfig(CONFIG_BG_REWARD_WINNER_HONOR_LAST) : sWorld->getIntConfig(CONFIG_BG_REWARD_WINNER_HONOR_FIRST);
910 uint32 loser_kills = player->GetRandomWinner() ? sWorld->getIntConfig(CONFIG_BG_REWARD_LOSER_HONOR_LAST) : sWorld->getIntConfig(CONFIG_BG_REWARD_LOSER_HONOR_FIRST);
911 uint32 winner_arena = player->GetRandomWinner() ? sWorld->getIntConfig(CONFIG_BG_REWARD_WINNER_ARENA_LAST) : sWorld->getIntConfig(CONFIG_BG_REWARD_WINNER_ARENA_FIRST);
912
913 // Reward winner team
914 if (bgTeamId == GetTeamId(winnerTeamId))
915 {
917 {
919
920 // Xinef: check player level and not bracket level if (CanAwardArenaPoints())
921 if (player->GetLevel() >= sWorld->getIntConfig(CONFIG_DAILY_RBG_MIN_LEVEL_AP_REWARD))
922 player->ModifyArenaPoints(winner_arena);
923
924 if (!player->GetRandomWinner())
925 player->SetRandomWinner(true);
926
927 // Achievement 908 / 909 "Call to Arms!"
928 switch (GetBgTypeID(true))
929 {
930 case BATTLEGROUND_AB:
931 // Call to Arms: Arathi Basin
932 player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST, 11335);
933 player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST, 11339);
934 break;
935 case BATTLEGROUND_AV:
936 // Call to Arms: Alterac Valley
937 player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST, 11336);
938 player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST, 11340);
939 break;
940 case BATTLEGROUND_EY:
941 // Call to Arms: Eye of the Storm
942 player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST, 11337);
943 player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST, 11341);
944 break;
945 case BATTLEGROUND_WS:
946 // Call to Arms: Warsong Gulch
947 player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST, 11338);
948 player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST, 11342);
949 break;
950 default:
951 break;
952 }
953 }
954
955 player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_WIN_BG, player->GetMapId());
956 }
957 else
958 {
961 }
962
963 sScriptMgr->OnBattlegroundEndReward(this, player, GetTeamId(winnerTeamId));
964
965 player->ResetAllPowers();
966 player->CombatStopWithPets(true);
967
968 BlockMovement(player);
969
970 player->SendDirectMessage(&pvpLogData);
971
973 {
974 stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PVPSTATS_PLAYER);
975 auto const& score = PlayerScores.find(player->GetGUID().GetCounter());
976
977 stmt->SetData(0, battlegroundId);
978 stmt->SetData(1, player->GetGUID().GetCounter());
979 stmt->SetData(2, bgTeamId == GetTeamId(winnerTeamId));
980 stmt->SetData(3, score->second->GetKillingBlows());
981 stmt->SetData(4, score->second->GetDeaths());
982 stmt->SetData(5, score->second->GetHonorableKills());
983 stmt->SetData(6, score->second->GetBonusHonor());
984 stmt->SetData(7, score->second->GetDamageDone());
985 stmt->SetData(8, score->second->GetHealingDone());
986 stmt->SetData(9, score->second->GetAttr1());
987 stmt->SetData(10, score->second->GetAttr2());
988 stmt->SetData(11, score->second->GetAttr3());
989 stmt->SetData(12, score->second->GetAttr4());
990 stmt->SetData(13, score->second->GetAttr5());
991
992 CharacterDatabase.Execute(stmt);
993 }
994
995 WorldPacket data;
996 sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, player->GetCurrentBattlegroundQueueSlot(), STATUS_IN_PROGRESS, TIME_TO_AUTOREMOVE, GetStartTime(), GetArenaType(), player->GetBgTeamId());
997 player->SendDirectMessage(&data);
998
999 player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND, player->GetMapId());
1000 }
1001
1003 SpiritOfCompetitionEvent(winnerTeamId);
1004
1005 sScriptMgr->OnBattlegroundEnd(this, GetTeamId(winnerTeamId));
1006}
@ SCORE_BONUS_HONOR
Definition BattlegroundScore.h:31
@ BG_TEXT_ALLIANCE_WINS
Definition Battleground.h:65
@ BG_TEXT_HORDE_WINS
Definition Battleground.h:66
SpiritOfCompetitionEvent
Definition Battleground.h:237
@ EVENT_SPIRIT_OF_COMPETITION
Definition Battleground.h:238
@ SOUND_ALLIANCE_WINS
Definition Battleground.h:77
@ SOUND_HORDE_WINS
Definition Battleground.h:76
@ CHAR_SEL_PVPSTATS_MAXID
Definition CharacterDatabase.h:495
@ CHAR_INS_PVPSTATS_PLAYER
Definition CharacterDatabase.h:497
@ CHAR_INS_PVPSTATS_BATTLEGROUND
Definition CharacterDatabase.h:496
@ ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND
Definition DBCEnums.h:132
@ ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST
Definition DBCEnums.h:141
@ ACHIEVEMENT_CRITERIA_TYPE_WIN_BG
Definition DBCEnums.h:123
std::shared_ptr< PreparedResultSet > PreparedQueryResult
Definition DatabaseEnvFwd.h:45
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
Definition DatabaseEnv.cpp:21
std::uint64_t uint64
Definition Define.h:106
bool IsEventActive(uint16 eventId)
Definition GameEventMgr.cpp:2041
@ PVP_TEAM_HORDE
Definition SharedDefines.h:3696
@ PVP_TEAM_ALLIANCE
Definition SharedDefines.h:3697
TeamId GetTeamId(PvPTeamId teamId)
Definition SharedDefines.h:3718
@ BATTLEGROUND_WS
Definition SharedDefines.h:3738
@ BATTLEGROUND_EY
Definition SharedDefines.h:3743
@ BATTLEGROUND_AV
Definition SharedDefines.h:3737
@ BATTLEGROUND_AB
Definition SharedDefines.h:3739
@ SPELL_AURA_MOD_SHAPESHIFT
Definition SpellAuraDefines.h:99
@ CONFIG_DAILY_RBG_MIN_LEVEL_AP_REWARD
Definition WorldConfig.h:381
@ CONFIG_BG_REWARD_LOSER_HONOR_LAST
Definition WorldConfig.h:353
@ CONFIG_BATTLEGROUND_STORE_STATISTICS_ENABLE
Definition WorldConfig.h:74
@ CONFIG_BG_REWARD_WINNER_ARENA_FIRST
Definition WorldConfig.h:349
@ CONFIG_BG_REWARD_WINNER_ARENA_LAST
Definition WorldConfig.h:351
@ CONFIG_BG_REWARD_WINNER_HONOR_FIRST
Definition WorldConfig.h:348
@ CONFIG_BG_REWARD_LOSER_HONOR_FIRST
Definition WorldConfig.h:352
@ CONFIG_BG_REWARD_WINNER_HONOR_LAST
Definition WorldConfig.h:350
static bool IsBGWeekend(BattlegroundTypeId bgTypeId)
Definition BattlegroundMgr.cpp:910
uint8 GetUniqueBracketId() const
Definition Battleground.cpp:1922
void BlockMovement(Player *player)
Definition Battleground.cpp:1040
void SetWinner(PvPTeamId winner)
Definition Battleground.h:373
void BuildPvPLogDataPacket(WorldPacket &data)
Definition Battleground.cpp:1393
virtual bool UpdatePlayerScore(Player *player, uint32 type, uint32 value, bool doAddHonor=true)
Definition Battleground.cpp:1423
bool IsRandom()
Definition Battleground.h:356
uint32 GetBonusHonorFromKill(uint32 kills) const
Definition Battleground.cpp:1033
Class used to access individual fields of database query result.
Definition Field.h:98
std::enable_if_t< std::is_arithmetic_v< T >, T > Get() const
Definition Field.h:112
Acore::Types::is_default< T > SetData(const uint8 index, T value)
Definition PreparedStatement.h:77
Definition PreparedStatement.h:157

References ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND, ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST, ACHIEVEMENT_CRITERIA_TYPE_WIN_BG, BATTLEGROUND_AB, BATTLEGROUND_AV, BATTLEGROUND_EY, BATTLEGROUND_WS, BG_TEXT_ALLIANCE_WINS, BG_TEXT_HORDE_WINS, BlockMovement(), BuildPvPLogDataPacket(), CHAR_INS_PVPSTATS_BATTLEGROUND, CHAR_INS_PVPSTATS_PLAYER, CHAR_SEL_PVPSTATS_MAXID, CharacterDatabase, CHAT_MSG_BG_SYSTEM_NEUTRAL, CONFIG_BATTLEGROUND_STORE_STATISTICS_ENABLE, CONFIG_BG_REWARD_LOSER_HONOR_FIRST, CONFIG_BG_REWARD_LOSER_HONOR_LAST, CONFIG_BG_REWARD_WINNER_ARENA_FIRST, CONFIG_BG_REWARD_WINNER_ARENA_LAST, CONFIG_BG_REWARD_WINNER_HONOR_FIRST, CONFIG_BG_REWARD_WINNER_HONOR_LAST, CONFIG_DAILY_RBG_MIN_LEVEL_AP_REWARD, EVENT_SPIRIT_OF_COMPETITION, Field::Get(), GetArenaType(), GetBgTypeID(), GetBonusHonorFromKill(), GetStartTime(), GetStatus(), GetTeamId(), GetUniqueBracketId(), GetWinner(), isBattleground(), BattlegroundMgr::IsBGWeekend(), IsEventActive(), IsRandom(), m_EndTime, m_Players, PlayerScores, PlaySoundToAll(), PVP_TEAM_ALLIANCE, PVP_TEAM_HORDE, RemoveFromBGFreeSlotQueue(), sBattlegroundMgr, SCORE_BONUS_HONOR, SendBroadcastText(), PreparedStatementBase::SetData(), SetStatus(), SetWinner(), SOUND_ALLIANCE_WINS, SOUND_HORDE_WINS, SPELL_AURA_MOD_SHAPESHIFT, sScriptMgr, STATUS_IN_PROGRESS, STATUS_WAIT_LEAVE, sWorld, TIME_TO_AUTOREMOVE, and UpdatePlayerScore().

Referenced by _ProcessProgress(), EndBattleground(), Arena::EndBattleground(), BattlegroundAB::EndBattleground(), BattlegroundAV::EndBattleground(), BattlegroundEY::EndBattleground(), BattlegroundSA::EndBattleground(), BattlegroundWS::EndBattleground(), BattlegroundIC::HandleKillPlayer(), BattlegroundIC::HandleKillUnit(), and Update().

◆ EndBattleground() [2/2]

virtual void Battleground::EndBattleground ( TeamId  winnerTeamId)
inlinevirtual
Deprecated:
need delete

Reimplemented in Arena, BattlegroundAB, BattlegroundAV, BattlegroundEY, BattlegroundSA, and BattlegroundWS.

475 {
476 EndBattleground(GetPvPTeamId(winnerTeamId));
477 }
PvPTeamId GetPvPTeamId(TeamId teamId)
Definition SharedDefines.h:3703

References EndBattleground(), and GetPvPTeamId().

◆ EndNow()

void Battleground::EndNow ( )
protected
1733{
1736 SetEndTime(0);
1737}
void SetEndTime(uint32 Time)
Definition Battleground.h:367

References RemoveFromBGFreeSlotQueue(), SetEndTime(), SetStatus(), and STATUS_WAIT_LEAVE.

Referenced by _ProcessJoin(), and AddSpiritGuide().

◆ EventPlayerClickedOnFlag()

virtual void Battleground::EventPlayerClickedOnFlag ( Player ,
GameObject  
)
inlinevirtual

◆ EventPlayerDamagedGO()

virtual void Battleground::EventPlayerDamagedGO ( Player ,
GameObject ,
uint32   
)
inlinevirtual

Reimplemented in BattlegroundIC, and BattlegroundSA.

516{}

◆ EventPlayerDroppedFlag()

virtual void Battleground::EventPlayerDroppedFlag ( Player )
inlinevirtual

Reimplemented in BattlegroundEY, and BattlegroundWS.

514{}

◆ EventPlayerUsedGO()

virtual void Battleground::EventPlayerUsedGO ( Player ,
GameObject  
)
inlinevirtual

Reimplemented in BattlegroundSA.

517{}

◆ FillInitialWorldStates()

◆ FindBgMap()

◆ GetAlivePlayersCountByTeam()

uint32 Battleground::GetAlivePlayersCountByTeam ( TeamId  teamId) const
1853{
1854 uint32 count = 0;
1855 for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
1856 if (itr->second->IsAlive() && !itr->second->HasByteFlag(UNIT_FIELD_BYTES_2, 3, FORM_SPIRITOFREDEMPTION) && itr->second->GetBgTeamId() == teamId)
1857 ++count;
1858
1859 return count;
1860}
@ FORM_SPIRITOFREDEMPTION
Definition UnitDefines.h:99
@ UNIT_FIELD_BYTES_2
Definition UpdateFields.h:161

References FORM_SPIRITOFREDEMPTION, m_Players, and UNIT_FIELD_BYTES_2.

Referenced by Arena::CheckWinConditions(), Arena::EndBattleground(), Arena::FillInitialWorldStates(), and Arena::UpdateArenaWorldState().

◆ GetArenaMatchmakerRating()

uint32 Battleground::GetArenaMatchmakerRating ( TeamId  teamId) const
inline
504{ return m_ArenaTeamMMR[teamId]; }

References m_ArenaTeamMMR.

Referenced by Arena::EndBattleground(), and Arena::RemovePlayerAtLeave().

◆ GetArenaTeamIdForTeam()

uint32 Battleground::GetArenaTeamIdForTeam ( TeamId  teamId) const
inline
502{ return m_ArenaTeamIds[teamId]; }

References m_ArenaTeamIds.

Referenced by Arena::EndBattleground(), and Arena::RemovePlayerAtLeave().

◆ GetArenaType()

◆ GetBGCreature()

◆ GetBgMap()

◆ GetBGObject()

◆ GetBgRaid()

Group * Battleground::GetBgRaid ( TeamId  teamId) const
inline
482{ return m_BgRaids[teamId]; }

References m_BgRaids.

Referenced by AddOrSetPlayerToCorrectBgGroup(), RemovePlayerAtLeave(), and Group::~Group().

◆ GetBgTypeID()

BattlegroundTypeId Battleground::GetBgTypeID ( bool  GetRandom = false) const
inline
320{ return GetRandom ? m_RandomTypeID : m_RealTypeID; }

References m_RandomTypeID, and m_RealTypeID.

Referenced by _ProcessJoin(), BattlegroundMgr::AddBattleground(), BattlegroundQueue::BattlegroundQueueUpdate(), BattlegroundMgr::BuildBattlegroundStatusPacket(), BGSpamProtect::CanAnnounce(), Group::CanJoinBattlegroundQueue(), EndBattleground(), BattlegroundAV::EndBattleground(), GetTeamScore(), WorldSession::HandleBattleFieldPortOpcode(), WorldSession::HandleBattlemasterJoinArena(), WorldSession::HandleBattlemasterJoinOpcode(), misc_commandscript::HandleSkirmishCommand(), BattlegroundQueue::InviteGroupToBG(), SpellArea::IsFitToRequirements(), achievement_resilient_victory::OnCheck(), achievement_bg_ic_resource_glut::OnCheck(), achievement_everything_counts::OnCheck(), achievement_bg_av_perfection::OnCheck(), achievement_sa_defense_of_the_ancients::OnCheck(), achievement_not_even_a_scratch::OnCheck(), achievement_save_the_day::OnCheck(), RemovePlayerAtLeave(), Player::SendInitWorldStates(), BattlegroundAB::SetupBattleground(), BattlegroundAV::SetupBattleground(), BattlegroundEY::SetupBattleground(), BattlegroundWS::SetupBattleground(), ToBattlegroundAB(), ToBattlegroundAB(), ToBattlegroundAV(), ToBattlegroundAV(), ToBattlegroundBE(), ToBattlegroundBE(), ToBattlegroundDS(), ToBattlegroundDS(), ToBattlegroundEY(), ToBattlegroundEY(), ToBattlegroundIC(), ToBattlegroundIC(), ToBattlegroundNA(), ToBattlegroundNA(), ToBattlegroundRL(), ToBattlegroundRL(), ToBattlegroundRV(), ToBattlegroundRV(), ToBattlegroundSA(), ToBattlegroundSA(), ToBattlegroundWS(), ToBattlegroundWS(), GameObject::Use(), and ~Battleground().

◆ GetBonusHonorFromKill()

uint32 Battleground::GetBonusHonorFromKill ( uint32  kills) const
1034{
1035 //variable kills means how many honorable kills you scored (so we need kills * honor_for_one_kill)
1036 uint32 maxLevel = std::min<uint32>(GetMaxLevel(), 80U);
1037 return Acore::Honor::hk_honor_at_level(maxLevel, float(kills));
1038}
uint32 hk_honor_at_level(uint8 level, float multiplier=1.0f)
Definition Formulas.h:38

References GetMaxLevel(), and Acore::Honor::hk_honor_at_level().

Referenced by BattlegroundEY::AddPoints(), BattlegroundSA::DestroyGate(), EndBattleground(), BattlegroundAB::EndBattleground(), BattlegroundAV::EndBattleground(), BattlegroundEY::EndBattleground(), BattlegroundSA::EndBattleground(), BattlegroundWS::EndBattleground(), BattlegroundWS::EventPlayerCapturedFlag(), BattlegroundAV::EventPlayerDestroyedPoint(), BattlegroundAV::HandleKillUnit(), and BattlegroundAB::PostUpdateImpl().

◆ GetBracketId()

BattlegroundBracketId Battleground::GetBracketId ( ) const
inline

◆ GetClientInstanceID()

uint32 Battleground::GetClientInstanceID ( ) const
inline

◆ GetClosestGraveyard()

GraveyardStruct const * Battleground::GetClosestGraveyard ( Player player)
virtual

Reimplemented in BattlegroundAB, BattlegroundAV, BattlegroundEY, BattlegroundIC, BattlegroundSA, and BattlegroundWS.

1890{
1891 return sGraveyard->GetClosestGraveyard(player, player->GetBgTeamId());
1892}
#define sGraveyard
Definition GameGraveyard.h:74

References Player::GetBgTeamId(), and sGraveyard.

Referenced by RelocateDeadPlayers().

◆ GetEndTime()

uint32 Battleground::GetEndTime ( ) const
inline
326{ return m_EndTime; }

References m_EndTime.

Referenced by PlayerAddedToBGCheckIfBGIsRunning().

◆ GetFlagPickerGUID()

virtual ObjectGuid Battleground::GetFlagPickerGUID ( TeamId  = TEAM_NEUTRAL) const
inlinevirtual

Reimplemented in BattlegroundWS, and BattlegroundEY.

564{ return ObjectGuid::Empty; }
static ObjectGuid const Empty
Definition ObjectGuid.h:120

References ObjectGuid::Empty.

Referenced by WorldSession::HandleBattlegroundPlayerPositionsOpcode().

◆ GetFreeSlotsForTeam()

uint32 Battleground::GetFreeSlotsForTeam ( TeamId  teamId) const
1310{
1312 return 0;
1313
1314 // if CONFIG_BATTLEGROUND_INVITATION_TYPE == BG_QUEUE_INVITATION_TYPE_NO_BALANCE, invite everyone unless the BG is full
1316 return (GetInvitedCount(teamId) < GetMaxPlayersPerTeam()) ? GetMaxPlayersPerTeam() - GetInvitedCount(teamId) : 0;
1317
1318 // if BG is already started or CONFIG_BATTLEGROUND_INVITATION_TYPE != BG_QUEUE_INVITATION_TYPE_NO_BALANCE, do not allow to join too many players of one faction
1319 uint32 thisTeamInvitedCount = teamId == TEAM_ALLIANCE ? GetInvitedCount(TEAM_ALLIANCE) : GetInvitedCount(TEAM_HORDE);
1321 uint32 otherTeamInvitedCount = teamId == TEAM_ALLIANCE ? GetInvitedCount(TEAM_HORDE) : GetInvitedCount(TEAM_ALLIANCE);
1323
1324 // difference based on ppl invited (not necessarily entered battle)
1325 // default: allow 0
1326 uint32 diff = 0;
1327 uint32 maxPlayersPerTeam = GetMaxPlayersPerTeam();
1328 uint32 minPlayersPerTeam = GetMinPlayersPerTeam();
1329
1330 // allow join one person if the sides are equal (to fill up bg to minPlayerPerTeam)
1331 if (otherTeamInvitedCount == thisTeamInvitedCount)
1332 diff = 1;
1333 else if (otherTeamInvitedCount > thisTeamInvitedCount) // allow join more ppl if the other side has more players
1334 diff = otherTeamInvitedCount - thisTeamInvitedCount;
1335
1336 // difference based on max players per team (don't allow inviting more)
1337 uint32 diff2 = (thisTeamInvitedCount < maxPlayersPerTeam) ? maxPlayersPerTeam - thisTeamInvitedCount : 0;
1338
1339 // difference based on players who already entered
1340 // default: allow 0
1341 uint32 diff3 = 0;
1342
1343 // allow join one person if the sides are equal (to fill up bg minPlayerPerTeam)
1344 if (otherTeamPlayersCount == thisTeamPlayersCount)
1345 diff3 = 1;
1346 else if (otherTeamPlayersCount > thisTeamPlayersCount) // allow join more ppl if the other side has more players
1347 diff3 = otherTeamPlayersCount - thisTeamPlayersCount;
1348 else if (thisTeamInvitedCount <= minPlayersPerTeam) // or other side has less than minPlayersPerTeam
1349 diff3 = minPlayersPerTeam - thisTeamInvitedCount + 1;
1350
1351 // return the minimum of the 3 differences
1352 // min of diff, diff2 and diff3
1353 return std::min({ diff, diff2, diff3 });
1354}
@ BG_QUEUE_INVITATION_TYPE_NO_BALANCE
Definition Battleground.h:288
@ CONFIG_BATTLEGROUND_INVITATION_TYPE
Definition WorldConfig.h:269
uint32 GetMinPlayersPerTeam() const
Definition Battleground.h:341
uint32 GetMaxPlayersPerTeam() const
Definition Battleground.h:340
uint32 GetInvitedCount(TeamId teamId) const
Definition Battleground.h:388
uint32 GetPlayersCountByTeam(TeamId teamId) const
Definition Battleground.h:488

References BG_QUEUE_INVITATION_TYPE_NO_BALANCE, CONFIG_BATTLEGROUND_INVITATION_TYPE, GetInvitedCount(), GetMaxPlayersPerTeam(), GetMinPlayersPerTeam(), GetPlayersCountByTeam(), GetStatus(), STATUS_IN_PROGRESS, STATUS_WAIT_JOIN, sWorld, TEAM_ALLIANCE, and TEAM_HORDE.

Referenced by BattlegroundQueue::FillPlayersToBG(), GetMaxFreeSlots(), and HasFreeSlots().

◆ GetInstanceID()

◆ GetInvitedCount()

uint32 Battleground::GetInvitedCount ( TeamId  teamId) const
inline
388{ return m_BgInvitedPlayers[teamId]; }

References m_BgInvitedPlayers.

Referenced by GetFreeSlotsForTeam(), and Update().

◆ GetLastResurrectTime()

uint32 Battleground::GetLastResurrectTime ( ) const
inline

◆ GetMapId()

◆ GetMaxFreeSlots()

uint32 Battleground::GetMaxFreeSlots ( ) const
1357{
1359}
uint32 GetFreeSlotsForTeam(TeamId teamId) const
Definition Battleground.cpp:1309

References GetFreeSlotsForTeam(), TEAM_ALLIANCE, and TEAM_HORDE.

◆ GetMaxLevel()

◆ GetMaxPlayersPerTeam()

uint32 Battleground::GetMaxPlayersPerTeam ( ) const
inline

◆ GetMinLevel()

uint32 Battleground::GetMinLevel ( ) const
inline

◆ GetMinPlayersPerTeam()

uint32 Battleground::GetMinPlayersPerTeam ( ) const
inline
342 {
343 auto lowLevelsOverride = sWorld->getIntConfig(CONFIG_BATTLEGROUND_OVERRIDE_LOWLEVELS_MINPLAYERS);
344 return (lowLevelsOverride && !isTemplate() && !isMaxLevel() && !isArena()) ? lowLevelsOverride : m_MinPlayersPerTeam;
345 }
@ CONFIG_BATTLEGROUND_OVERRIDE_LOWLEVELS_MINPLAYERS
Definition WorldConfig.h:262
bool isMaxLevel() const
Definition Battleground.h:333
bool isTemplate() const
Definition Battleground.h:332

References CONFIG_BATTLEGROUND_OVERRIDE_LOWLEVELS_MINPLAYERS, isArena(), isMaxLevel(), isTemplate(), m_MinPlayersPerTeam, and sWorld.

Referenced by Group::CanJoinBattlegroundQueue(), GetFreeSlotsForTeam(), GetMinPlayersPerTeam(), GetPrematureWinner(), WorldSession::HandleBattlemasterJoinOpcode(), and Update().

◆ GetName()

std::string Battleground::GetName ( ) const
inline

◆ GetObjectType()

int32 Battleground::GetObjectType ( ObjectGuid  guid)
1868{
1869 for (uint32 i = 0; i < BgObjects.size(); ++i)
1870 if (BgObjects[i] == guid)
1871 return i;
1872
1873 LOG_ERROR("bg.battleground", "Battleground::GetObjectType: player used gameobject ({}) which is not in internal data for BG (map: {}, instance id: {}), cheating?",
1874 guid.ToString(), m_MapId, m_InstanceID);
1875
1876 return -1;
1877}
std::string ToString() const
Definition ObjectGuid.cpp:47

References BgObjects, LOG_ERROR, m_InstanceID, m_MapId, and ObjectGuid::ToString().

Referenced by BattlegroundAV::EventPlayerClickedOnFlag().

◆ GetOtherTeamId()

◆ GetPlayers()

◆ GetPlayerScores()

BattlegroundScoreMap const * Battleground::GetPlayerScores ( ) const
inline
418{ return &PlayerScores; }

References PlayerScores.

Referenced by BuildPvPLogDataPacket().

◆ GetPlayerScoresSize()

std::size_t Battleground::GetPlayerScoresSize ( ) const
inline
419{ return PlayerScores.size(); }

References PlayerScores.

◆ GetPlayersCountByTeam()

uint32 Battleground::GetPlayersCountByTeam ( TeamId  teamId) const
inline

◆ GetPlayersSize()

uint32 Battleground::GetPlayersSize ( ) const
inline
410{ return m_Players.size(); }

References m_Players.

Referenced by HandleTriggerBuff(), and Update().

◆ GetPrematureWinner()

◆ GetRealRepFactionForPlayer()

uint32 Battleground::GetRealRepFactionForPlayer ( uint32  factionId,
Player player 
)
799{
800 if (player)
801 {
802 // if the bg team is not the original team, reverse reputation
803 if (player->GetBgTeamId() != player->GetTeamId(true))
804 {
805 switch (factionId)
806 {
808 return BG_REP_AB_HORDE;
809 case BG_REP_AB_HORDE:
810 return BG_REP_AB_ALLIANCE;
812 return BG_REP_AV_HORDE;
813 case BG_REP_AV_HORDE:
814 return BG_REP_AV_ALLIANCE;
816 return BG_REP_WS_HORDE;
817 case BG_REP_WS_HORDE:
818 return BG_REP_WS_ALLIANCE;
819 }
820 }
821 }
822
823 return factionId;
824}
@ BG_REP_AV_HORDE
Definition Battleground.h:143
@ BG_REP_AB_HORDE
Definition Battleground.h:145
@ BG_REP_WS_HORDE
Definition Battleground.h:147
@ BG_REP_WS_ALLIANCE
Definition Battleground.h:148
@ BG_REP_AV_ALLIANCE
Definition Battleground.h:144
@ BG_REP_AB_ALLIANCE
Definition Battleground.h:146
TeamId GetTeamId(bool original=false) const
Definition Player.h:2101

References BG_REP_AB_ALLIANCE, BG_REP_AB_HORDE, BG_REP_AV_ALLIANCE, BG_REP_AV_HORDE, BG_REP_WS_ALLIANCE, BG_REP_WS_HORDE, Player::GetBgTeamId(), and Player::GetTeamId().

Referenced by RewardReputationToTeam().

◆ GetReviveQueueSize()

uint32 Battleground::GetReviveQueueSize ( ) const
inline
421{ return m_ReviveQueue.size(); }

References m_ReviveQueue.

Referenced by _ProcessResurrect().

◆ GetScriptId()

uint32 Battleground::GetScriptId ( ) const
inline
350{ return ScriptId; }

References ScriptId.

◆ GetSpectators()

const SpectatorList & Battleground::GetSpectators ( ) const
inline
399{ return m_Spectators; }

References m_Spectators.

◆ GetStartDelayTime()

int32 Battleground::GetStartDelayTime ( ) const
inline

◆ GetStartMaxDist()

float Battleground::GetStartMaxDist ( ) const
inline
447{ return m_StartMaxDist; }

References m_StartMaxDist.

Referenced by _CheckSafePositions().

◆ GetStartTime()

◆ GetStatus()

BattlegroundStatus Battleground::GetStatus ( ) const
inline
323{ return m_Status; }

References m_Status.

Referenced by _ProcessJoin(), AddPlayer(), BattlegroundQueue::BattlegroundQueueUpdate(), BuildPvPLogDataPacket(), BattlegroundWS::CheckFlagKeeperInArea(), MapInstanced::CreateInstanceForPlayer(), EndBattleground(), Arena::EndBattleground(), BattlegroundAV::EventPlayerAssaultsPoint(), BattlegroundWS::EventPlayerCapturedFlag(), BattlegroundEY::EventPlayerClickedOnFlag(), BattlegroundWS::EventPlayerClickedOnFlag(), BattlegroundIC::EventPlayerClickedOnFlag(), BattlegroundAB::EventPlayerClickedOnFlag(), BattlegroundAV::EventPlayerClickedOnFlag(), BattlegroundAV::EventPlayerDefendsPoint(), BattlegroundEY::EventPlayerDroppedFlag(), BattlegroundWS::EventPlayerDroppedFlag(), BGQueueRemoveEvent::Execute(), BattlegroundAV::FillInitialWorldStates(), BattlegroundWS::FillInitialWorldStates(), BattlegroundWS::GetClosestGraveyard(), GetFreeSlotsForTeam(), BattlegroundAB::HandleAreaTrigger(), BattlegroundAV::HandleAreaTrigger(), BattlegroundBE::HandleAreaTrigger(), BattlegroundDS::HandleAreaTrigger(), BattlegroundEY::HandleAreaTrigger(), BattlegroundIC::HandleAreaTrigger(), BattlegroundNA::HandleAreaTrigger(), BattlegroundRL::HandleAreaTrigger(), BattlegroundRV::HandleAreaTrigger(), BattlegroundSA::HandleAreaTrigger(), BattlegroundWS::HandleAreaTrigger(), WorldSession::HandleBattleFieldPortOpcode(), Arena::HandleKillPlayer(), BattlegroundAV::HandleKillPlayer(), BattlegroundEY::HandleKillPlayer(), BattlegroundIC::HandleKillPlayer(), BattlegroundWS::HandleKillPlayer(), BattlegroundAV::HandleKillUnit(), BattlegroundIC::HandleKillUnit(), BattlegroundAV::HandleQuestComplete(), ArenaSpectator::HandleResetCommand(), ArenaSpectator::HandleSpectatorSpectateCommand(), ArenaSpectator::HandleSpectatorWatchCommand(), HandleTriggerBuff(), HasFreeSlots(), Player::LeaveBattleground(), Player::NeedSendSpectatorData(), PlayerAddedToBGCheckIfBGIsRunning(), BattlegroundAB::PostUpdateImpl(), BattlegroundAV::PostUpdateImpl(), BattlegroundDS::PostUpdateImpl(), BattlegroundEY::PostUpdateImpl(), BattlegroundIC::PostUpdateImpl(), BattlegroundRV::PostUpdateImpl(), BattlegroundSA::PostUpdateImpl(), BattlegroundWS::PostUpdateImpl(), ReadyMarkerClicked(), Arena::RemovePlayer(), RemovePlayerAtLeave(), Arena::RemovePlayerAtLeave(), Player::ReportedAfkBy(), BattlegroundWS::RespawnFlagAfterDrop(), and Update().

◆ GetTeamScore()

uint32 Battleground::GetTeamScore ( TeamId  teamId) const

◆ GetTeamStartPosition()

Position const * Battleground::GetTeamStartPosition ( TeamId  teamId) const
711{
712 ASSERT(teamId < TEAM_NEUTRAL);
713 return &_startPosition[teamId];
714}
std::array< Position, PVP_TEAMS_COUNT > _startPosition
Definition Battleground.h:736

References _startPosition, ASSERT, and TEAM_NEUTRAL.

Referenced by _CheckSafePositions().

◆ GetUniqueBracketId()

uint8 Battleground::GetUniqueBracketId ( ) const
1923{
1924 return GetMaxLevel() / 10;
1925}

References GetMaxLevel().

Referenced by EndBattleground().

◆ GetWinner()

PvPTeamId Battleground::GetWinner ( ) const
inline

◆ HandleAreaTrigger()

virtual void Battleground::HandleAreaTrigger ( Player ,
uint32   
)
inlinevirtual

◆ HandleKillPlayer()

void Battleground::HandleKillPlayer ( Player player,
Player killer 
)
virtual

Reimplemented in Arena, BattlegroundAV, BattlegroundEY, BattlegroundIC, and BattlegroundWS.

1790{
1791 // Keep in mind that for arena this will have to be changed a bit
1792
1793 // Add +1 deaths
1794 UpdatePlayerScore(victim, SCORE_DEATHS, 1);
1795 // Add +1 kills to group and +1 killing_blows to killer
1796 if (killer)
1797 {
1798 // Don't reward credit for killing ourselves, like fall damage of hellfire (warlock)
1799 if (killer == victim)
1800 return;
1801
1804
1805 for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
1806 {
1807 Player* creditedPlayer = itr->second;
1808 if (creditedPlayer == killer)
1809 continue;
1810
1811 if (creditedPlayer->GetBgTeamId() == killer->GetBgTeamId() && (creditedPlayer == killer || creditedPlayer->IsAtGroupRewardDistance(victim)))
1812 UpdatePlayerScore(creditedPlayer, SCORE_HONORABLE_KILLS, 1);
1813 }
1814 }
1815
1816 if (!isArena())
1817 {
1818 // To be able to remove insignia -- ONLY IN Battlegrounds
1819 victim->SetUnitFlag(UNIT_FLAG_SKINNABLE);
1820 RewardXPAtKill(killer, victim);
1821 }
1822}
@ SCORE_KILLING_BLOWS
Definition BattlegroundScore.h:28
@ SCORE_DEATHS
Definition BattlegroundScore.h:29
@ SCORE_HONORABLE_KILLS
Definition BattlegroundScore.h:30
@ UNIT_FLAG_SKINNABLE
Definition UnitDefines.h:280
void RewardXPAtKill(Player *killer, Player *victim)
Definition Battleground.cpp:1916
bool IsAtGroupRewardDistance(WorldObject const *pRewardSource) const
Definition Player.cpp:12751

References Player::GetBgTeamId(), isArena(), Player::IsAtGroupRewardDistance(), m_Players, RewardXPAtKill(), SCORE_DEATHS, SCORE_HONORABLE_KILLS, SCORE_KILLING_BLOWS, Unit::SetUnitFlag(), UNIT_FLAG_SKINNABLE, and UpdatePlayerScore().

Referenced by Arena::HandleKillPlayer(), BattlegroundAV::HandleKillPlayer(), BattlegroundEY::HandleKillPlayer(), BattlegroundIC::HandleKillPlayer(), and BattlegroundWS::HandleKillPlayer().

◆ HandleKillUnit()

virtual void Battleground::HandleKillUnit ( Creature ,
Player  
)
inlinevirtual

Reimplemented in BattlegroundSA, BattlegroundAV, and BattlegroundIC.

511{ }

◆ HandlePlayerResurrect()

virtual void Battleground::HandlePlayerResurrect ( Player )
inlinevirtual

Reimplemented in BattlegroundIC.

522{}

◆ HandlePlayerUnderMap()

virtual bool Battleground::HandlePlayerUnderMap ( Player )
inlinevirtual

Reimplemented in BattlegroundBE, BattlegroundDS, BattlegroundNA, BattlegroundRL, and BattlegroundRV.

553{ return false; }

◆ HandleTriggerBuff()

void Battleground::HandleTriggerBuff ( GameObject gameObject)
1740{
1741 // Xinef: crash fix?
1742 if (GetStatus() != STATUS_IN_PROGRESS || !GetPlayersSize() || BgObjects.empty())
1743 return;
1744
1745 uint32 index = 0;
1746 for (; index < BgObjects.size() && BgObjects[index] != gameObject->GetGUID(); ++index);
1747 if (BgObjects[index] != gameObject->GetGUID())
1748 {
1749 return;
1750 }
1751
1752 if (m_BuffChange)
1753 {
1754 uint8 buff = urand(0, 2);
1755 if (gameObject->GetEntry() != Buff_Entries[buff])
1756 {
1758 for (uint8 currBuffTypeIndex = 0; currBuffTypeIndex < 3; ++currBuffTypeIndex)
1759 if (gameObject->GetEntry() == Buff_Entries[currBuffTypeIndex])
1760 {
1761 index -= currBuffTypeIndex;
1762 index += buff;
1763 }
1764 }
1765 }
1766
1767 uint32 respawnTime = SPEED_BUFF_RESPAWN_TIME;
1768 if (Map* map = FindBgMap())
1769 {
1770 if (GameObject* obj = map->GetGameObject(BgObjects[index]))
1771 {
1772 switch (obj->GetEntry())
1773 {
1775 respawnTime = RESTORATION_BUFF_RESPAWN_TIME;
1776 break;
1778 respawnTime = BERSERKING_BUFF_RESPAWN_TIME;
1779 break;
1780 default:
1781 break;
1782 }
1783 }
1784 }
1785
1786 SpawnBGObject(index, respawnTime);
1787}
@ RESPAWN_ONE_DAY
Definition Battleground.h:159
const uint32 Buff_Entries[3]
Definition Battleground.h:186
#define SPEED_BUFF_RESPAWN_TIME
Definition Battleground.h:166
@ BG_OBJECTID_REGENBUFF_ENTRY
Definition Battleground.h:182
@ BG_OBJECTID_BERSERKERBUFF_ENTRY
Definition Battleground.h:183
#define RESTORATION_BUFF_RESPAWN_TIME
Definition Battleground.h:164
#define BERSERKING_BUFF_RESPAWN_TIME
Definition Battleground.h:165
uint32 urand(uint32 min, uint32 max)
Definition Random.cpp:44
void SpawnBGObject(uint32 type, uint32 respawntime, uint32 forceRespawnDelay=0)
Definition Battleground.cpp:1586
uint32 GetPlayersSize() const
Definition Battleground.h:410
uint32 GetEntry() const
Definition Object.h:116

References BERSERKING_BUFF_RESPAWN_TIME, BG_OBJECTID_BERSERKERBUFF_ENTRY, BG_OBJECTID_REGENBUFF_ENTRY, BgObjects, Buff_Entries, FindBgMap(), Object::GetEntry(), Object::GetGUID(), GetPlayersSize(), GetStatus(), m_BuffChange, RESPAWN_ONE_DAY, RESTORATION_BUFF_RESPAWN_TIME, SpawnBGObject(), SPEED_BUFF_RESPAWN_TIME, STATUS_IN_PROGRESS, and urand().

◆ HasFreeSlots()

bool Battleground::HasFreeSlots ( ) const
1362{
1364 return false;
1365 for (uint8 i = 0; i < PVP_TEAMS_COUNT; ++i)
1366 if (GetFreeSlotsForTeam((TeamId)i) > 0)
1367 return true;
1368 return false;
1369}

References GetFreeSlotsForTeam(), GetStatus(), PVP_TEAMS_COUNT, STATUS_IN_PROGRESS, and STATUS_WAIT_JOIN.

Referenced by BattlegroundQueue::BattlegroundQueueUpdate().

◆ HaveSpectators()

bool Battleground::HaveSpectators ( )
inline
398{ return !m_Spectators.empty(); }

References m_Spectators.

Referenced by Player::NeedSendSpectatorData().

◆ IncreaseInvitedCount()

void Battleground::IncreaseInvitedCount ( TeamId  teamId)
inline
387{ ++m_BgInvitedPlayers[teamId]; }

References m_BgInvitedPlayers.

Referenced by BattlegroundQueue::InviteGroupToBG().

◆ Init()

void Battleground::Init ( )
virtual

Reimplemented in BattlegroundAB, BattlegroundEY, BattlegroundRV, BattlegroundSA, and BattlegroundWS.

1141{
1144 SetStartTime(0);
1145 SetEndTime(0);
1147
1148 m_Events = 0;
1149
1151 {
1152 LOG_ERROR("bg.battleground", "Battleground::Reset: one of the counters is not 0 (alliance: {}, horde: {}) for BG (map: {}, instance id: {})!", m_BgInvitedPlayers[TEAM_ALLIANCE], m_BgInvitedPlayers[TEAM_HORDE], m_MapId, m_InstanceID);
1153 ABORT();
1154 }
1155
1158 _InBGFreeSlotQueue = false;
1159
1160 m_Players.clear();
1161
1162 for (auto const& itr : PlayerScores)
1163 delete itr.second;
1164
1165 PlayerScores.clear();
1166
1167 for (auto& itr : _arenaTeamScores)
1168 itr.Reset();
1169
1171}
@ STATUS_WAIT_QUEUE
Definition Battleground.h:191
#define ABORT
Definition Errors.h:76
virtual void ResetBGSubclass()
Definition Battleground.h:309
void SetStartTime(uint32 Time)
Definition Battleground.h:366
void SetLastResurrectTime(uint32 Time)
Definition Battleground.h:368

References _arenaTeamScores, _InBGFreeSlotQueue, ABORT, LOG_ERROR, m_BgInvitedPlayers, m_Events, m_InstanceID, m_MapId, m_Players, PlayerScores, PVP_TEAM_NEUTRAL, ResetBGSubclass(), SetEndTime(), SetLastResurrectTime(), SetStartTime(), SetStatus(), SetWinner(), STATUS_WAIT_QUEUE, TEAM_ALLIANCE, and TEAM_HORDE.

Referenced by BattlegroundMgr::CreateNewBattleground(), BattlegroundAB::Init(), BattlegroundEY::Init(), BattlegroundRV::Init(), BattlegroundSA::Init(), and BattlegroundWS::Init().

◆ isArena()

◆ isBattleground()

◆ isMaxLevel()

bool Battleground::isMaxLevel ( ) const
inline
334 {
335 // NOTE: this only works when the BG is not a template but the real BG
336 auto maxPlayerLevel = sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL);
337 return GetMinLevel() <= maxPlayerLevel && maxPlayerLevel <= GetMaxLevel();
338 }
@ CONFIG_MAX_PLAYER_LEVEL
Definition WorldConfig.h:190

References CONFIG_MAX_PLAYER_LEVEL, GetMaxLevel(), GetMinLevel(), and sWorld.

Referenced by GetMinPlayersPerTeam().

◆ IsPlayerInBattleground()

bool Battleground::IsPlayerInBattleground ( ObjectGuid  guid) const
1830{
1831 BattlegroundPlayerMap::const_iterator itr = m_Players.find(guid);
1832 if (itr != m_Players.end())
1833 return true;
1834 return false;
1835}

References m_Players.

Referenced by ArenaSpectator::HandleSpectatorWatchCommand().

◆ IsRandom()

bool Battleground::IsRandom ( )
inline
356{ return m_IsRandom; }

References m_IsRandom.

Referenced by EndBattleground().

◆ isRated()

◆ isTemplate()

bool Battleground::isTemplate ( ) const
inline
332{ return m_IsTemplate; }

References m_IsTemplate.

Referenced by GetMinPlayersPerTeam(), and GetMinPlayersPerTeam().

◆ ModifyStartDelayTime()

void Battleground::ModifyStartDelayTime ( int32  diff)
inline
377{ m_StartDelayTime -= diff; }

References m_StartDelayTime.

Referenced by _ProcessJoin().

◆ PlayerAddedToBGCheckIfBGIsRunning()

void Battleground::PlayerAddedToBGCheckIfBGIsRunning ( Player player)
protected
1838{
1840 return;
1841
1842 WorldPacket data;
1843 BlockMovement(player);
1844
1846 player->SendDirectMessage(&data);
1847
1848 sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, player->GetCurrentBattlegroundQueueSlot(), STATUS_IN_PROGRESS, GetEndTime(), GetStartTime(), GetArenaType(), player->GetBgTeamId());
1849 player->SendDirectMessage(&data);
1850}
uint32 GetEndTime() const
Definition Battleground.h:326
uint32 GetCurrentBattlegroundQueueSlot() const
Definition Player.h:2265
void SendDirectMessage(WorldPacket const *data) const
Definition Player.cpp:5685

References BlockMovement(), BuildPvPLogDataPacket(), GetArenaType(), Player::GetBgTeamId(), Player::GetCurrentBattlegroundQueueSlot(), GetEndTime(), GetStartTime(), GetStatus(), sBattlegroundMgr, Player::SendDirectMessage(), STATUS_IN_PROGRESS, and STATUS_WAIT_LEAVE.

Referenced by AddPlayer().

◆ PlaySoundToAll()

◆ PostUpdateImpl()

virtual void Battleground::PostUpdateImpl ( uint32  )
inlineprivatevirtual

Post-update hook.

Will be called after battleground update has passed. May be used to implement custom update effects in subclasses.

Parameters
diffa time difference between two worldserver update loops in milliseconds.
See also
Update(), PreUpdateImpl().

Reimplemented in BattlegroundAB, BattlegroundAV, BattlegroundDS, BattlegroundEY, BattlegroundIC, BattlegroundRV, BattlegroundSA, and BattlegroundWS.

702{ }

Referenced by Update().

◆ PreUpdateImpl()

virtual bool Battleground::PreUpdateImpl ( uint32  )
inlineprivatevirtual

Pre-update hook.

Will be called before battleground update is started. Depending on the result of this call actual update body may be skipped.

Parameters
diffa time difference between two worldserver update loops in milliseconds.
Returns
true if update must be performed, false otherwise.
See also
Update(), PostUpdateImpl().
689{ return true; }

Referenced by Update().

◆ ReadyMarkerClicked()

void Battleground::ReadyMarkerClicked ( Player p)
1378{
1380 return;
1381 readyMarkerClickedSet.insert(p->GetGUID());
1382 uint32 count = readyMarkerClickedSet.size();
1384 ChatHandler(p->GetSession()).SendNotification("You are marked as ready {}/{}", count, req);
1385 if (count == req)
1386 {
1390 }
1391}
@ BG_START_DELAY_15S
Definition Battleground.h:173
static uint8 GetReqPlayersForType(uint32 type)
Definition ArenaTeam.cpp:1024
GuidSet readyMarkerClickedSet
Definition Battleground.h:413
void SendNotification(std::string_view str)
Definition Chat.cpp:105
bool IsSpectator() const
Definition Player.h:2583

References BG_START_DELAY_15S, BG_STARTING_EVENT_2, BG_STARTING_EVENT_3, GetArenaType(), Object::GetGUID(), ArenaTeam::GetReqPlayersForType(), Player::GetSession(), GetStartDelayTime(), GetStatus(), isArena(), Player::IsSpectator(), m_Events, m_StartTime, readyMarkerClickedSet, ChatHandler::SendNotification(), SetStartDelayTime(), and STATUS_IN_PROGRESS.

◆ RelocateDeadPlayers()

void Battleground::RelocateDeadPlayers ( ObjectGuid  queueIndex)

Relocate all players in ReviveQueue to the closest graveyard.

1461{
1462 // Those who are waiting to resurrect at this node are taken to the closest own node's graveyard
1463 GuidVector& ghostList = m_ReviveQueue[queueIndex];
1464 if (!ghostList.empty())
1465 {
1466 GraveyardStruct const* closestGrave = nullptr;
1467 for (ObjectGuid const& guid : ghostList)
1468 {
1469 Player* player = ObjectAccessor::FindPlayer(guid);
1470 if (!player)
1471 continue;
1472
1473 if (!closestGrave)
1474 closestGrave = GetClosestGraveyard(player);
1475
1476 if (closestGrave)
1477 player->TeleportTo(GetMapId(), closestGrave->x, closestGrave->y, closestGrave->z, player->GetOrientation());
1478 }
1479
1480 ghostList.clear();
1481 }
1482}
std::vector< ObjectGuid > GuidVector
Definition ObjectGuid.h:256
virtual GraveyardStruct const * GetClosestGraveyard(Player *player)
Definition Battleground.cpp:1889
bool TeleportTo(uint32 mapid, float x, float y, float z, float orientation, uint32 options=0, Unit *target=nullptr, bool newInstance=false)
Definition Player.cpp:1353
Definition GameGraveyard.h:27
float z
Definition GameGraveyard.h:32
float x
Definition GameGraveyard.h:30
float y
Definition GameGraveyard.h:31

References ObjectAccessor::FindPlayer(), GetClosestGraveyard(), GetMapId(), Position::GetOrientation(), m_ReviveQueue, Player::TeleportTo(), GraveyardStruct::x, GraveyardStruct::y, and GraveyardStruct::z.

Referenced by BattlegroundAV::EventPlayerAssaultsPoint(), BattlegroundIC::EventPlayerClickedOnFlag(), BattlegroundEY::EventTeamLostPoint(), and BattlegroundAB::NodeDeoccupied().

◆ RemoveAuraOnTeam()

void Battleground::RemoveAuraOnTeam ( uint32  spellId,
TeamId  teamId 
)
760{
761 for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
762 if (itr->second->GetBgTeamId() == teamId)
763 itr->second->RemoveAura(spellId);
764}

References m_Players.

Referenced by BattlegroundIC::HandleCapturedNodes().

◆ RemoveFromBGFreeSlotQueue()

void Battleground::RemoveFromBGFreeSlotQueue ( )

◆ RemovePlayer()

virtual void Battleground::RemovePlayer ( Player )
inlineprotectedvirtual

◆ RemovePlayerAtLeave()

void Battleground::RemovePlayerAtLeave ( Player player)
virtual

Reimplemented in Arena.

1046{
1047 TeamId teamId = player->GetBgTeamId();
1048
1049 // check if the player was a participant of the match, or only entered through gm command
1050 bool participant = false;
1051 BattlegroundPlayerMap::iterator itr = m_Players.find(player->GetGUID());
1052 if (itr != m_Players.end())
1053 {
1054 UpdatePlayersCountByTeam(teamId, true); // -1 player
1055 m_Players.erase(itr);
1056 participant = true;
1057 }
1058
1059 // delete player score if exists
1060 auto const& itr2 = PlayerScores.find(player->GetGUID().GetCounter());
1061 if (itr2 != PlayerScores.end())
1062 {
1063 delete itr2->second;
1064 PlayerScores.erase(itr2);
1065 }
1066
1068
1069 // resurrect on exit
1070 if (!player->IsAlive())
1071 {
1072 player->ResurrectPlayer(1.0f);
1073 player->SpawnCorpseBones();
1074 }
1075
1077
1078 // GetStatus might be changed in RemovePlayer - define it here
1079 BattlegroundStatus status = GetStatus();
1080
1081 // BG subclass specific code
1082 RemovePlayer(player);
1083
1084 // should remove spirit of redemption
1085 if (player->HasSpiritOfRedemptionAura())
1087
1088 // if the player was a match participant
1089 if (participant)
1090 {
1091 player->ClearAfkReports();
1092
1093 WorldPacket data;
1094 sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, player->GetCurrentBattlegroundQueueSlot(), STATUS_NONE, 0, 0, 0, TEAM_NEUTRAL);
1095 player->SendDirectMessage(&data);
1096
1098
1099 // this call is important, because player, when joins to battleground, this method is not called, so it must be called when leaving bg
1100 player->RemoveBattlegroundQueueId(bgQueueTypeId);
1101
1102 // remove from raid group if player is member
1103 if (Group* group = GetBgRaid(teamId))
1104 if (group->IsMember(player->GetGUID()))
1105 if (!group->RemoveMember(player->GetGUID())) // group was disbanded
1106 SetBgRaid(teamId, nullptr);
1107
1108 // let others know
1109 sBattlegroundMgr->BuildPlayerLeftBattlegroundPacket(&data, player->GetGUID());
1110 SendPacketToTeam(teamId, &data, player, false);
1111
1112 // cast deserter
1113 if (isBattleground() && !player->IsGameMaster() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_CAST_DESERTER))
1114 if (status == STATUS_IN_PROGRESS || status == STATUS_WAIT_JOIN)
1116
1117 DecreaseInvitedCount(teamId);
1118
1119 //we should update battleground queue, but only if bg isn't ending
1121 {
1122 BattlegroundTypeId bgTypeId = GetBgTypeID();
1124
1125 // a player has left the battleground, so there are free slots -> add to queue
1127 sBattlegroundMgr->ScheduleQueueUpdate(0, 0, bgQueueTypeId, bgTypeId, GetBracketId());
1128 }
1129 }
1130
1132
1133 // Xinef: remove all criterias on bg leave
1135
1136 sScriptMgr->OnBattlegroundRemovePlayerAtLeave(this, player);
1137}
BattlegroundStatus
Definition Battleground.h:189
@ DELAYED_SPELL_CAST_DESERTER
Definition Player.h:892
BattlegroundTypeId
Definition SharedDefines.h:3735
BattlegroundQueueTypeId
Definition SharedDefines.h:3875
#define PLAYER_MAX_BATTLEGROUND_QUEUES
Definition SharedDefines.h:176
@ SPELL_AURA_MOUNTED
Definition SpellAuraDefines.h:141
@ CONFIG_BATTLEGROUND_CAST_DESERTER
Definition WorldConfig.h:70
static BattlegroundQueueTypeId BGQueueTypeId(BattlegroundTypeId bgTypeId, uint8 arenaType)
Definition BattlegroundMgr.cpp:686
void DecreaseInvitedCount(TeamId teamId)
Definition Battleground.h:386
void RemovePlayerFromResurrectQueue(Player *player)
Definition Battleground.cpp:1448
void AddToBGFreeSlotQueue()
Definition Battleground.cpp:1290
virtual void RemovePlayer(Player *)
Definition Battleground.h:623
BattlegroundBracketId GetBracketId() const
Definition Battleground.h:321
LowType GetCounter() const
Definition ObjectGuid.h:145
void ScheduleDelayedOperation(uint32 operation)
Definition Player.h:2092
void ClearAfkReports()
Definition Player.h:2293
void SetBattlegroundId(uint32 id, BattlegroundTypeId bgTypeId, uint32 queueSlot, bool invited, bool isRandom, TeamId teamId)
Definition Player.cpp:12294
void RemoveBattlegroundQueueId(BattlegroundQueueTypeId val)
Definition Player.cpp:12256
bool IsGameMaster() const
Definition Player.h:1156
void RemoveAurasByType(AuraType auraType, ObjectGuid casterGUID=ObjectGuid::Empty, Aura *except=nullptr, bool negative=true, bool positive=true)
Definition Unit.cpp:5240
bool HasSpiritOfRedemptionAura() const
Definition Unit.h:1784

References ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP, AddToBGFreeSlotQueue(), BATTLEGROUND_TYPE_NONE, BattlegroundMgr::BGQueueTypeId(), Player::ClearAfkReports(), CONFIG_BATTLEGROUND_CAST_DESERTER, DecreaseInvitedCount(), DELAYED_SPELL_CAST_DESERTER, GetArenaType(), GetBgRaid(), Player::GetBgTeamId(), GetBgTypeID(), GetBracketId(), ObjectGuid::GetCounter(), Player::GetCurrentBattlegroundQueueSlot(), Object::GetGUID(), GetMapId(), GetStatus(), Unit::HasSpiritOfRedemptionAura(), Unit::IsAlive(), isBattleground(), Player::IsGameMaster(), m_Players, PLAYER_MAX_BATTLEGROUND_QUEUES, PlayerScores, Unit::RemoveAurasByType(), Player::RemoveBattlegroundQueueId(), RemovePlayer(), RemovePlayerFromResurrectQueue(), Player::ResetAchievementCriteria(), Player::ResurrectPlayer(), sBattlegroundMgr, Player::ScheduleDelayedOperation(), Player::SendDirectMessage(), SendPacketToTeam(), Player::SetBattlegroundId(), SetBgRaid(), Player::SpawnCorpseBones(), SPELL_AURA_MOD_SHAPESHIFT, SPELL_AURA_MOUNTED, sScriptMgr, STATUS_IN_PROGRESS, STATUS_NONE, STATUS_WAIT_JOIN, STATUS_WAIT_LEAVE, sWorld, TEAM_NEUTRAL, and UpdatePlayersCountByTeam().

Referenced by Arena::RemovePlayerAtLeave().

◆ RemovePlayerFromResurrectQueue()

void Battleground::RemovePlayerFromResurrectQueue ( Player player)
1449{
1450 for (std::map<ObjectGuid, GuidVector>::iterator itr = m_ReviveQueue.begin(); itr != m_ReviveQueue.end(); ++itr)
1451 for (GuidVector::iterator itr2 = itr->second.begin(); itr2 != itr->second.end(); ++itr2)
1452 if (*itr2 == player->GetGUID())
1453 {
1454 itr->second.erase(itr2);
1456 return;
1457 }
1458}
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:5032

References Object::GetGUID(), m_ReviveQueue, Unit::RemoveAurasDueToSpell(), and SPELL_WAITING_FOR_RESURRECT.

Referenced by RemovePlayerAtLeave().

◆ RemoveSpectator()

void Battleground::RemoveSpectator ( Player p)
inline
397{ m_Spectators.erase(p); }

References m_Spectators.

◆ RemoveToBeTeleported()

void Battleground::RemoveToBeTeleported ( ObjectGuid  spectator)
inline
401{ ToBeTeleportedMap::iterator itr = m_ToBeTeleported.find(spectator); if (itr != m_ToBeTeleported.end()) m_ToBeTeleported.erase(itr); }

References m_ToBeTeleported.

◆ ResetBGSubclass()

virtual void Battleground::ResetBGSubclass ( )
inlinevirtual

Reimplemented in BattlegroundAV.

309{ } // must be implemented in BG subclass

Referenced by Init().

◆ RewardHonorToTeam()

◆ RewardReputationToTeam()

void Battleground::RewardReputationToTeam ( uint32  factionId,
uint32  reputation,
TeamId  teamId 
)
784{
785 for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
786 if (itr->second->GetBgTeamId() == teamId)
787 {
788 uint32 realFactionId = GetRealRepFactionForPlayer(factionId, itr->second);
789
790 float repGain = static_cast<float>(reputation);
791 AddPct(repGain, itr->second->GetTotalAuraModifier(SPELL_AURA_MOD_REPUTATION_GAIN));
792 AddPct(repGain, itr->second->GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_FACTION_REPUTATION_GAIN, realFactionId));
793 if (FactionEntry const* factionEntry = sFactionStore.LookupEntry(realFactionId))
794 itr->second->GetReputationMgr().ModifyReputation(factionEntry, repGain);
795 }
796}
DBCStorage< FactionEntry > sFactionStore(FactionEntryfmt)
@ SPELL_AURA_MOD_REPUTATION_GAIN
Definition SpellAuraDefines.h:219
@ SPELL_AURA_MOD_FACTION_REPUTATION_GAIN
Definition SpellAuraDefines.h:253
T AddPct(T &base, U pct)
Definition Util.h:58
uint32 GetRealRepFactionForPlayer(uint32 factionId, Player *player)
Definition Battleground.cpp:798
Definition DBCStructure.h:907

References AddPct(), GetRealRepFactionForPlayer(), m_Players, sFactionStore, SPELL_AURA_MOD_FACTION_REPUTATION_GAIN, and SPELL_AURA_MOD_REPUTATION_GAIN.

Referenced by BattlegroundAV::EndBattleground(), BattlegroundWS::EventPlayerCapturedFlag(), BattlegroundAV::EventPlayerDestroyedPoint(), BattlegroundAV::HandleKillUnit(), BattlegroundAV::HandleQuestComplete(), and BattlegroundAB::PostUpdateImpl().

◆ RewardXPAtKill()

void Battleground::RewardXPAtKill ( Player killer,
Player victim 
)
1917{
1918 if (sWorld->getBoolConfig(CONFIG_BG_XP_FOR_KILL) && killer && victim)
1919 killer->RewardPlayerAndGroupAtKill(victim, true);
1920}
@ CONFIG_BG_XP_FOR_KILL
Definition WorldConfig.h:76
void RewardPlayerAndGroupAtKill(Unit *victim, bool isBattleGround)
Definition Player.cpp:12718

References CONFIG_BG_XP_FOR_KILL, Player::RewardPlayerAndGroupAtKill(), and sWorld.

Referenced by HandleKillPlayer().

◆ SendBroadcastText()

void Battleground::SendBroadcastText ( uint32  id,
ChatMsg  msgType,
WorldObject const *  target = nullptr 
)

◆ SendChatMessage()

void Battleground::SendChatMessage ( Creature source,
uint8  textId,
WorldObject target = nullptr 
)
730{
731 sCreatureTextMgr->SendChat(source, textId, target);
732}
#define sCreatureTextMgr
Definition CreatureTextMgr.h:110

References sCreatureTextMgr.

◆ SendPacketToAll()

void Battleground::SendPacketToAll ( WorldPacket const *  packet)
717{
718 for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
719 itr->second->SendDirectMessage(packet);
720}

References m_Players.

Referenced by PlaySoundToAll(), and UpdateWorldState().

◆ SendPacketToTeam()

void Battleground::SendPacketToTeam ( TeamId  teamId,
WorldPacket const *  packet,
Player sender = nullptr,
bool  self = true 
)
723{
724 for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
725 if (itr->second->GetBgTeamId() == teamId && (self || sender != itr->second))
726 itr->second->SendDirectMessage(packet);
727}

References m_Players.

Referenced by AddPlayer(), and RemovePlayerAtLeave().

◆ SetArenaMatchmakerRating()

void Battleground::SetArenaMatchmakerRating ( TeamId  teamId,
uint32  MMR 
)
inline

◆ SetArenaorBGType()

void Battleground::SetArenaorBGType ( bool  _isArena)
inline
372{ m_IsArena = _isArena; }

References m_IsArena.

Referenced by BattlegroundMgr::CreateBattleground().

◆ SetArenaTeamIdForTeam()

void Battleground::SetArenaTeamIdForTeam ( TeamId  teamId,
uint32  ArenaTeamId 
)
inline
501{ m_ArenaTeamIds[teamId] = ArenaTeamId; }

References m_ArenaTeamIds.

Referenced by BattlegroundQueue::InviteGroupToBG().

◆ SetArenaType()

void Battleground::SetArenaType ( uint8  type)
inline
371{ m_ArenaType = type; }

References m_ArenaType.

Referenced by BattlegroundMgr::CreateNewBattleground().

◆ SetBgMap()

void Battleground::SetBgMap ( BattlegroundMap map)
inline

◆ SetBgRaid()

void Battleground::SetBgRaid ( TeamId  teamId,
Group bg_raid 
)
1880{
1881 Group*& old_raid = m_BgRaids[teamId];
1882 if (old_raid)
1883 old_raid->SetBattlegroundGroup(nullptr);
1884 if (bg_raid)
1885 bg_raid->SetBattlegroundGroup(this);
1886 old_raid = bg_raid;
1887}
void SetBattlegroundGroup(Battleground *bg)
Definition Group.cpp:2402

References m_BgRaids, and Group::SetBattlegroundGroup().

Referenced by AddOrSetPlayerToCorrectBgGroup(), Arena::AddPlayer(), RemovePlayerAtLeave(), and Group::~Group().

◆ SetBgTypeID()

void Battleground::SetBgTypeID ( BattlegroundTypeId  TypeID)
inline
360{ m_RealTypeID = TypeID; }
TypeID
Definition ObjectGuid.h:31

References m_RealTypeID.

Referenced by BattlegroundMgr::CreateBattleground(), and BattlegroundMgr::CreateNewBattleground().

◆ SetBracket()

void Battleground::SetBracket ( PvPDifficultyEntry const *  bracketEntry)
1895{
1896 m_IsTemplate = false;
1897 m_BracketId = bracketEntry->GetBracketId();
1898 SetLevelRange(bracketEntry->minLevel, bracketEntry->maxLevel);
1899}
void SetLevelRange(uint32 min, uint32 max)
Definition Battleground.h:369

References PvPDifficultyEntry::GetBracketId(), m_BracketId, m_IsTemplate, PvPDifficultyEntry::maxLevel, PvPDifficultyEntry::minLevel, and SetLevelRange().

Referenced by BattlegroundMgr::CreateNewBattleground().

◆ SetClientInstanceID()

void Battleground::SetClientInstanceID ( uint32  InstanceID)
inline
365{ m_ClientInstanceID = InstanceID; }

References m_ClientInstanceID.

Referenced by BattlegroundMgr::CreateNewBattleground().

◆ SetDroppedFlagGUID()

virtual void Battleground::SetDroppedFlagGUID ( ObjectGuid  ,
TeamId  = TEAM_NEUTRAL 
)
inlinevirtual

Reimplemented in BattlegroundWS, and BattlegroundEY.

565{}

◆ SetEndTime()

void Battleground::SetEndTime ( uint32  Time)
inline
367{ m_EndTime = Time; }

References m_EndTime.

Referenced by EndNow(), and Init().

◆ SetHoliday()

void Battleground::SetHoliday ( bool  is_holiday)
1863{
1864 m_HonorMode = is_holiday ? BG_HOLIDAY : BG_NORMAL;
1865}
@ BG_HOLIDAY
Definition Battleground.h:271

References BG_HOLIDAY, BG_NORMAL, and m_HonorMode.

◆ SetInstanceID()

void Battleground::SetInstanceID ( uint32  InstanceID)
inline

◆ SetLastResurrectTime()

void Battleground::SetLastResurrectTime ( uint32  Time)
inline
368{ m_LastResurrectTime = Time; }

References m_LastResurrectTime.

Referenced by Init(), and StartBattleground().

◆ SetLevelRange()

void Battleground::SetLevelRange ( uint32  min,
uint32  max 
)
inline
369{ m_LevelMin = min; m_LevelMax = max; }

References m_LevelMax, and m_LevelMin.

Referenced by BattlegroundMgr::CreateBattleground(), and SetBracket().

◆ SetMapId()

void Battleground::SetMapId ( uint32  MapID)
inline
435{ m_MapId = MapID; }

References m_MapId.

Referenced by BattlegroundMgr::CreateBattleground().

◆ SetMaxPlayersPerTeam()

void Battleground::SetMaxPlayersPerTeam ( uint32  MaxPlayers)
inline

◆ SetMinPlayersPerTeam()

void Battleground::SetMinPlayersPerTeam ( uint32  MinPlayers)
inline
381{ m_MinPlayersPerTeam = MinPlayers; }

References m_MinPlayersPerTeam.

Referenced by BattlegroundMgr::CreateBattleground().

◆ SetName()

void Battleground::SetName ( std::string_view  name)
inline
359{ m_Name = std::string(name); }

References m_Name.

Referenced by BattlegroundMgr::CreateBattleground().

◆ SetRandom()

void Battleground::SetRandom ( bool  isRandom)
inline

◆ SetRandomTypeID()

void Battleground::SetRandomTypeID ( BattlegroundTypeId  TypeID)
inline

◆ SetRated()

void Battleground::SetRated ( bool  state)
inline

◆ SetScriptId()

void Battleground::SetScriptId ( uint32  scriptId)
inline
374{ ScriptId = scriptId; }

References ScriptId.

Referenced by BattlegroundMgr::CreateBattleground().

◆ SetStartDelayTime()

void Battleground::SetStartDelayTime ( int32  Time)
inline
378{ m_StartDelayTime = Time; }

References m_StartDelayTime.

Referenced by _ProcessJoin(), and ReadyMarkerClicked().

◆ SetStartMaxDist()

void Battleground::SetStartMaxDist ( float  startMaxDist)
inline
446{ m_StartMaxDist = startMaxDist; }

References m_StartMaxDist.

Referenced by BattlegroundMgr::CreateBattleground().

◆ SetStartTime()

void Battleground::SetStartTime ( uint32  Time)
inline
366{ m_StartTime = Time; }

References m_StartTime.

Referenced by Init(), and StartBattleground().

◆ SetStatus()

◆ SetTeamStartPosition()

void Battleground::SetTeamStartPosition ( TeamId  teamId,
Position const &  pos 
)
705{
706 ASSERT(teamId < TEAM_NEUTRAL);
707 _startPosition[teamId] = pos;
708}

References _startPosition, ASSERT, and TEAM_NEUTRAL.

Referenced by BattlegroundMgr::CreateBattleground().

◆ SetupBattleground()

virtual bool Battleground::SetupBattleground ( )
inlinevirtual

◆ SetWinner()

void Battleground::SetWinner ( PvPTeamId  winner)
inline
373{ m_WinnerId = winner; }

References m_WinnerId.

Referenced by EndBattleground(), and Init().

◆ SpawnBGObject()

void Battleground::SpawnBGObject ( uint32  type,
uint32  respawntime,
uint32  forceRespawnDelay = 0 
)
1587{
1588 if (Map* map = FindBgMap())
1589 if (GameObject* obj = map->GetGameObject(BgObjects[type]))
1590 {
1591 if (respawntime)
1592 obj->SetLootState(GO_JUST_DEACTIVATED);
1593 else if (obj->getLootState() == GO_JUST_DEACTIVATED)
1594 // Change state from GO_JUST_DEACTIVATED to GO_READY in case battleground is starting again
1595 obj->SetLootState(GO_READY);
1596 obj->SetRespawnTime(respawntime);
1597 map->AddToMap(obj);
1598
1599 if (forceRespawnDelay)
1600 {
1601 obj->SetRespawnDelay(forceRespawnDelay);
1602 }
1603 }
1604}
@ GO_JUST_DEACTIVATED
Definition GameObject.h:113

References BgObjects, FindBgMap(), GO_JUST_DEACTIVATED, GO_READY, and Creature::SetRespawnTime().

Referenced by BattlegroundAB::CreateBanner(), BattlegroundAB::DeleteBanner(), BattlegroundAV::EventPlayerAssaultsPoint(), BattlegroundWS::EventPlayerCapturedFlag(), BattlegroundEY::EventPlayerCapturedFlag(), BattlegroundEY::EventPlayerClickedOnFlag(), BattlegroundWS::EventPlayerClickedOnFlag(), BattlegroundAV::EventPlayerDefendsPoint(), BattlegroundAV::EventPlayerDestroyedPoint(), BattlegroundEY::EventTeamCapturedPoint(), BattlegroundEY::EventTeamLostPoint(), BattlegroundAV::HandleKillUnit(), HandleTriggerBuff(), BattlegroundWS::PostUpdateImpl(), BattlegroundSA::ResetObjs(), BattlegroundEY::RespawnFlag(), BattlegroundWS::RespawnFlagAfterDrop(), BattlegroundAV::SetupBattleground(), BattlegroundAB::StartingEventCloseDoors(), BattlegroundAV::StartingEventCloseDoors(), BattlegroundBE::StartingEventCloseDoors(), BattlegroundDS::StartingEventCloseDoors(), BattlegroundEY::StartingEventCloseDoors(), BattlegroundNA::StartingEventCloseDoors(), BattlegroundRL::StartingEventCloseDoors(), BattlegroundWS::StartingEventCloseDoors(), BattlegroundAB::StartingEventOpenDoors(), BattlegroundAV::StartingEventOpenDoors(), BattlegroundBE::StartingEventOpenDoors(), BattlegroundDS::StartingEventOpenDoors(), BattlegroundEY::StartingEventOpenDoors(), BattlegroundNA::StartingEventOpenDoors(), BattlegroundRL::StartingEventOpenDoors(), BattlegroundRV::StartingEventOpenDoors(), and BattlegroundWS::StartingEventOpenDoors().

◆ SpectatorsSendPacket()

void Battleground::SpectatorsSendPacket ( WorldPacket data)
1372{
1373 for (SpectatorList::const_iterator itr = m_Spectators.begin(); itr != m_Spectators.end(); ++itr)
1374 (*itr)->SendDirectMessage(&data);
1375}

References m_Spectators.

◆ SpiritOfCompetitionEvent()

void Battleground::SpiritOfCompetitionEvent ( PvPTeamId  winnerTeamId) const
1009{
1010 bool isDraw = winnerTeamId == PVP_TEAM_NEUTRAL;
1011
1012 std::vector<Player*> filteredPlayers;
1013 GetBgMap()->DoForAllPlayers([&](Player* player)
1014 {
1015 // Reward all eligible players the participant reward
1018
1019 // Collect players of the winning team who has yet to recieve the winner reward
1020 if (!isDraw && player->GetBgTeamId() == GetTeamId(winnerTeamId) &&
1022 filteredPlayers.push_back(player);
1023 });
1024
1025 // Randomly select one player from winners team to recieve the reward, if any eligible
1026 if (!filteredPlayers.empty())
1027 {
1028 Player* wPlayer = filteredPlayers[rand() % filteredPlayers.size()];
1029 wPlayer->CastSpell(wPlayer, SPELL_SPIRIT_OF_COMPETITION_WINNER, true);
1030 }
1031}
@ SPELL_SPIRIT_OF_COMPETITION_PARTICIPANT
Definition Battleground.h:241
@ QUEST_FLAG_WINNER
Definition Battleground.h:240
@ SPELL_SPIRIT_OF_COMPETITION_WINNER
Definition Battleground.h:242
@ QUEST_FLAG_PARTICIPANT
Definition Battleground.h:239
@ QUEST_STATUS_REWARDED
Definition QuestDef.h:106
QuestStatus GetQuestStatus(uint32 quest_id) const
Definition PlayerQuest.cpp:1462

References Unit::CastSpell(), Map::DoForAllPlayers(), GetBgMap(), Player::GetBgTeamId(), Player::GetQuestStatus(), GetTeamId(), PVP_TEAM_NEUTRAL, QUEST_FLAG_PARTICIPANT, QUEST_FLAG_WINNER, QUEST_STATUS_REWARDED, SPELL_SPIRIT_OF_COMPETITION_PARTICIPANT, and SPELL_SPIRIT_OF_COMPETITION_WINNER.

◆ StartBattleground()

void Battleground::StartBattleground ( )
1174{
1175 SetStartTime(0);
1177
1178 // add BG to free slot queue
1180
1181 // add bg to update list
1182 // this must be done here, because we need to have already invited some players when first Battleground::Update() method is executed
1183 sBattlegroundMgr->AddBattleground(this);
1184
1185 if (m_IsRated)
1186 LOG_DEBUG("bg.arena", "Arena match type: {} for Team1Id: {} - Team2Id: {} started.", m_ArenaType, m_ArenaTeamIds[TEAM_ALLIANCE], m_ArenaTeamIds[TEAM_HORDE]);
1187}

References AddToBGFreeSlotQueue(), LOG_DEBUG, m_ArenaTeamIds, m_ArenaType, m_IsRated, sBattlegroundMgr, SetLastResurrectTime(), SetStartTime(), TEAM_ALLIANCE, and TEAM_HORDE.

Referenced by BattlegroundQueue::BattlegroundQueueUpdate(), and misc_commandscript::HandleSkirmishCommand().

◆ StartingEventCloseDoors()

virtual void Battleground::StartingEventCloseDoors ( )
inlinevirtual

◆ StartingEventOpenDoors()

virtual void Battleground::StartingEventOpenDoors ( )
inlinevirtual

◆ StartTimedAchievement()

void Battleground::StartTimedAchievement ( AchievementCriteriaTimedTypes  type,
uint32  entry 
)
1902{
1903 for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
1904 itr->second->StartTimedAchievement(type, entry);
1905}

References GetPlayers().

Referenced by BattlegroundSA::PostUpdateImpl(), BattlegroundAB::StartingEventOpenDoors(), BattlegroundAV::StartingEventOpenDoors(), BattlegroundEY::StartingEventOpenDoors(), and BattlegroundWS::StartingEventOpenDoors().

◆ ToBattlegroundAB() [1/2]

BattlegroundAB * Battleground::ToBattlegroundAB ( )
inline
579{ if (GetBgTypeID(true) == BATTLEGROUND_AB) return reinterpret_cast<BattlegroundAB*>(this); else return nullptr; }
Definition BattlegroundAB.h:250

References BATTLEGROUND_AB, and GetBgTypeID().

Referenced by achievement_resilient_victory::OnCheck().

◆ ToBattlegroundAB() [2/2]

BattlegroundAB const * Battleground::ToBattlegroundAB ( ) const
inline
580{ if (GetBgTypeID(true) == BATTLEGROUND_AB) return reinterpret_cast<const BattlegroundAB*>(this); else return nullptr; }

References BATTLEGROUND_AB, and GetBgTypeID().

◆ ToBattlegroundAV() [1/2]

BattlegroundAV * Battleground::ToBattlegroundAV ( )
inline
573{ if (GetBgTypeID(true) == BATTLEGROUND_AV) return reinterpret_cast<BattlegroundAV*>(this); else return nullptr; }
Definition BattlegroundAV.h:1758

References BATTLEGROUND_AV, and GetBgTypeID().

Referenced by achievement_everything_counts::OnCheck(), and achievement_bg_av_perfection::OnCheck().

◆ ToBattlegroundAV() [2/2]

BattlegroundAV const * Battleground::ToBattlegroundAV ( ) const
inline
574{ if (GetBgTypeID(true) == BATTLEGROUND_AV) return reinterpret_cast<const BattlegroundAV*>(this); else return nullptr; }

References BATTLEGROUND_AV, and GetBgTypeID().

◆ ToBattlegroundBE() [1/2]

BattlegroundBE * Battleground::ToBattlegroundBE ( )
inline
585{ if (GetBgTypeID(true) == BATTLEGROUND_BE) return reinterpret_cast<BattlegroundBE*>(this); else return nullptr; }
Definition BattlegroundBE.h:47

References BATTLEGROUND_BE, and GetBgTypeID().

◆ ToBattlegroundBE() [2/2]

BattlegroundBE const * Battleground::ToBattlegroundBE ( ) const
inline
586{ if (GetBgTypeID(true) == BATTLEGROUND_BE) return reinterpret_cast<const BattlegroundBE*>(this); else return nullptr; }

References BATTLEGROUND_BE, and GetBgTypeID().

◆ ToBattlegroundDS() [1/2]

BattlegroundDS * Battleground::ToBattlegroundDS ( )
inline
597{ if (GetBgTypeID(true) == BATTLEGROUND_DS) return reinterpret_cast<BattlegroundDS*>(this); else return nullptr; }
Definition BattlegroundDS.h:94

References BATTLEGROUND_DS, and GetBgTypeID().

◆ ToBattlegroundDS() [2/2]

BattlegroundDS const * Battleground::ToBattlegroundDS ( ) const
inline
598{ if (GetBgTypeID(true) == BATTLEGROUND_DS) return reinterpret_cast<const BattlegroundDS*>(this); else return nullptr; }

References BATTLEGROUND_DS, and GetBgTypeID().

◆ ToBattlegroundEY() [1/2]

BattlegroundEY * Battleground::ToBattlegroundEY ( )
inline
588{ if (GetBgTypeID(true) == BATTLEGROUND_EY) return reinterpret_cast<BattlegroundEY*>(this); else return nullptr; }
Definition BattlegroundEY.h:350

References BATTLEGROUND_EY, and GetBgTypeID().

◆ ToBattlegroundEY() [2/2]

BattlegroundEY const * Battleground::ToBattlegroundEY ( ) const
inline
589{ if (GetBgTypeID(true) == BATTLEGROUND_EY) return reinterpret_cast<const BattlegroundEY*>(this); else return nullptr; }

References BATTLEGROUND_EY, and GetBgTypeID().

◆ ToBattlegroundIC() [1/2]

BattlegroundIC * Battleground::ToBattlegroundIC ( )
inline
603{ if (GetBgTypeID(true) == BATTLEGROUND_IC) return reinterpret_cast<BattlegroundIC*>(this); else return nullptr; }
@ BATTLEGROUND_IC
Definition SharedDefines.h:3748
Definition BattlegroundIC.h:891

References BATTLEGROUND_IC, and GetBgTypeID().

Referenced by SpellArea::IsFitToRequirements(), and achievement_bg_ic_resource_glut::OnCheck().

◆ ToBattlegroundIC() [2/2]

BattlegroundIC const * Battleground::ToBattlegroundIC ( ) const
inline
604{ if (GetBgTypeID(true) == BATTLEGROUND_IC) return reinterpret_cast<const BattlegroundIC*>(this); else return nullptr; }

References BATTLEGROUND_IC, and GetBgTypeID().

◆ ToBattlegroundNA() [1/2]

BattlegroundNA * Battleground::ToBattlegroundNA ( )
inline
582{ if (GetBgTypeID(true) == BATTLEGROUND_NA) return reinterpret_cast<BattlegroundNA*>(this); else return nullptr; }
Definition BattlegroundNA.h:47

References BATTLEGROUND_NA, and GetBgTypeID().

◆ ToBattlegroundNA() [2/2]

BattlegroundNA const * Battleground::ToBattlegroundNA ( ) const
inline
583{ if (GetBgTypeID(true) == BATTLEGROUND_NA) return reinterpret_cast<const BattlegroundNA*>(this); else return nullptr; }

References BATTLEGROUND_NA, and GetBgTypeID().

◆ ToBattlegroundRL() [1/2]

BattlegroundRL * Battleground::ToBattlegroundRL ( )
inline
591{ if (GetBgTypeID(true) == BATTLEGROUND_RL) return reinterpret_cast<BattlegroundRL*>(this); else return nullptr; }
Definition BattlegroundRL.h:43

References BATTLEGROUND_RL, and GetBgTypeID().

◆ ToBattlegroundRL() [2/2]

BattlegroundRL const * Battleground::ToBattlegroundRL ( ) const
inline
592{ if (GetBgTypeID(true) == BATTLEGROUND_RL) return reinterpret_cast<const BattlegroundRL*>(this); else return nullptr; }

References BATTLEGROUND_RL, and GetBgTypeID().

◆ ToBattlegroundRV() [1/2]

BattlegroundRV * Battleground::ToBattlegroundRV ( )
inline
600{ if (GetBgTypeID(true) == BATTLEGROUND_RV) return reinterpret_cast<BattlegroundRV*>(this); else return nullptr; }
Definition BattlegroundRV.h:82

References BATTLEGROUND_RV, and GetBgTypeID().

◆ ToBattlegroundRV() [2/2]

BattlegroundRV const * Battleground::ToBattlegroundRV ( ) const
inline
601{ if (GetBgTypeID(true) == BATTLEGROUND_RV) return reinterpret_cast<const BattlegroundRV*>(this); else return nullptr; }

References BATTLEGROUND_RV, and GetBgTypeID().

◆ ToBattlegroundSA() [1/2]

BattlegroundSA * Battleground::ToBattlegroundSA ( )
inline
594{ if (GetBgTypeID(true) == BATTLEGROUND_SA) return reinterpret_cast<BattlegroundSA*>(this); else return nullptr; }
Class for manage Strand of Ancient battleground.
Definition BattlegroundSA.h:428

References BATTLEGROUND_SA, and GetBgTypeID().

Referenced by achievement_sa_defense_of_the_ancients::OnCheck(), and achievement_not_even_a_scratch::OnCheck().

◆ ToBattlegroundSA() [2/2]

BattlegroundSA const * Battleground::ToBattlegroundSA ( ) const
inline
595{ if (GetBgTypeID(true) == BATTLEGROUND_SA) return reinterpret_cast<const BattlegroundSA*>(this); else return nullptr; }

References BATTLEGROUND_SA, and GetBgTypeID().

◆ ToBattlegroundWS() [1/2]

BattlegroundWS * Battleground::ToBattlegroundWS ( )
inline
576{ if (GetBgTypeID(true) == BATTLEGROUND_WS) return reinterpret_cast<BattlegroundWS*>(this); else return nullptr; }
Definition BattlegroundWS.h:209

References BATTLEGROUND_WS, and GetBgTypeID().

Referenced by achievement_save_the_day::OnCheck().

◆ ToBattlegroundWS() [2/2]

BattlegroundWS const * Battleground::ToBattlegroundWS ( ) const
inline
577{ if (GetBgTypeID(true) == BATTLEGROUND_WS) return reinterpret_cast<const BattlegroundWS*>(this); else return nullptr; }

References BATTLEGROUND_WS, and GetBgTypeID().

◆ ToBeDeleted()

bool Battleground::ToBeDeleted ( ) const
inline
559{ return m_SetDeleteThis; }

References m_SetDeleteThis.

Referenced by BattlegroundMgr::Update().

◆ Update()

void Battleground::Update ( uint32  diff)
250{
251 // pussywizard:
252 m_UpdateTimer += diff;
254 return;
255
256 diff = BATTLEGROUND_UPDATE_INTERVAL; // just change diff value, no need to replace variable name in many places
258
259 if (!PreUpdateImpl(diff))
260 return;
261
262 if (!GetPlayersSize())
263 {
264 //BG is empty
265 // if there are no players invited, delete BG
266 // this will delete arena or bg object, where any player entered
267 // [[ but if you use battleground object again (more battles possible to be played on 1 instance)
268 // then this condition should be removed and code:
269 // if (!GetInvitedCount(TEAM_HORDE) && !GetInvitedCount(TEAM_ALLIANCE))
270 // AddToFreeBGObjectsQueue(); // not yet implemented
271 // should be used instead of current
272 // ]]
273 // Battleground Template instance cannot be updated, because it would be deleted
275 {
276 m_SetDeleteThis = true;
277 }
278
279 return;
280 }
281
282 switch (GetStatus())
283 {
284 case STATUS_WAIT_JOIN:
285 if (GetPlayersSize())
286 {
287 _ProcessJoin(diff);
289 }
290 break;
292 if (isArena())
293 {
294 if (GetStartTime() >= 46 * MINUTE * IN_MILLISECONDS) // pussywizard: 1min startup + 45min allowed duration
295 {
297 return;
298 }
299 }
300 else
301 {
302 _ProcessResurrect(diff);
304 _ProcessProgress(diff);
305 else if (m_PrematureCountDown)
306 m_PrematureCountDown = false;
307 }
308 break;
310 _ProcessLeave(diff);
311 break;
312 default:
313 break;
314 }
315
316 // Update start time and reset stats timer
317 m_StartTime += diff;
318 m_ResetStatTimer += diff;
319
320 PostUpdateImpl(diff);
321
322 sScriptMgr->OnBattlegroundUpdate(this, diff);
323}
#define BATTLEGROUND_UPDATE_INTERVAL
Definition Battleground.h:177
virtual void PostUpdateImpl(uint32)
Post-update hook.
Definition Battleground.h:702
void _ProcessResurrect(uint32 diff)
Definition Battleground.cpp:354
void _ProcessProgress(uint32 diff)
Definition Battleground.cpp:427
virtual bool PreUpdateImpl(uint32)
Pre-update hook.
Definition Battleground.h:689
void _CheckSafePositions(uint32 diff)
Definition Battleground.cpp:325
void _ProcessJoin(uint32 diff)
Definition Battleground.cpp:469
void _ProcessLeave(uint32 diff)
Definition Battleground.cpp:684

References _CheckSafePositions(), _ProcessJoin(), _ProcessLeave(), _ProcessProgress(), _ProcessResurrect(), BATTLEGROUND_UPDATE_INTERVAL, EndBattleground(), GetInvitedCount(), GetMinPlayersPerTeam(), GetPlayersCountByTeam(), GetPlayersSize(), GetStartTime(), GetStatus(), IN_MILLISECONDS, isArena(), m_PrematureCountDown, m_ResetStatTimer, m_SetDeleteThis, m_StartTime, m_UpdateTimer, MINUTE, PostUpdateImpl(), PreUpdateImpl(), PVP_TEAM_NEUTRAL, sBattlegroundMgr, sScriptMgr, STATUS_IN_PROGRESS, STATUS_WAIT_JOIN, STATUS_WAIT_LEAVE, TEAM_ALLIANCE, and TEAM_HORDE.

Referenced by BattlegroundMgr::Update().

◆ UpdatePlayerScore()

bool Battleground::UpdatePlayerScore ( Player player,
uint32  type,
uint32  value,
bool  doAddHonor = true 
)
virtual

Reimplemented in BattlegroundAB, BattlegroundAV, BattlegroundEY, BattlegroundIC, and BattlegroundWS.

1424{
1425 auto const& itr = PlayerScores.find(player->GetGUID().GetCounter());
1426 if (itr == PlayerScores.end()) // player not found...
1427 return false;
1428
1429 if (type == SCORE_BONUS_HONOR && doAddHonor && isBattleground())
1430 player->RewardHonor(nullptr, 1, value); // RewardHonor calls UpdatePlayerScore with doAddHonor = false
1431 else
1432 itr->second->UpdateScore(type, value);
1433
1434 return true;
1435}
bool RewardHonor(Unit *victim, uint32 groupsize, int32 honor=-1, bool awardXP=true)
Definition Player.cpp:6091

References ObjectGuid::GetCounter(), Object::GetGUID(), isBattleground(), PlayerScores, Player::RewardHonor(), and SCORE_BONUS_HONOR.

Referenced by BattlegroundSA::DestroyGate(), EndBattleground(), HandleKillPlayer(), BattlegroundSA::HandleKillUnit(), RewardHonorToTeam(), BattlegroundAB::UpdatePlayerScore(), BattlegroundAV::UpdatePlayerScore(), BattlegroundEY::UpdatePlayerScore(), BattlegroundIC::UpdatePlayerScore(), and BattlegroundWS::UpdatePlayerScore().

◆ UpdatePlayersCountByTeam()

void Battleground::UpdatePlayersCountByTeam ( TeamId  teamId,
bool  remove 
)
inline
491 {
492 if (remove)
493 --m_PlayersCount[teamId];
494 else
495 ++m_PlayersCount[teamId];
496 }

References m_PlayersCount.

Referenced by AddPlayer(), and RemovePlayerAtLeave().

◆ UpdateWorldState()

void Battleground::UpdateWorldState ( uint32  variable,
uint32  value 
)
827{
829 worldstate.VariableID = variable;
830 worldstate.Value = value;
831 SendPacketToAll(worldstate.Write());
832}
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 SendPacketToAll(), WorldPackets::WorldState::UpdateWorldState::Value, WorldPackets::WorldState::UpdateWorldState::VariableID, and WorldPackets::WorldState::UpdateWorldState::Write().

Referenced by BattlegroundEY::AddPoints(), BattlegroundSA::CaptureGraveyard(), BattlegroundIC::DestroyGate(), BattlegroundSA::DestroyGate(), BattlegroundWS::EventPlayerCapturedFlag(), BattlegroundEY::EventPlayerClickedOnFlag(), BattlegroundSA::EventPlayerDamagedGO(), BattlegroundIC::HandleKillPlayer(), BattlegroundAB::PostUpdateImpl(), BattlegroundIC::PostUpdateImpl(), BattlegroundWS::PostUpdateImpl(), BattlegroundSA::ResetObjs(), BattlegroundEY::RespawnFlag(), BattlegroundAV::SendMineWorldStates(), BattlegroundAB::SendNodeUpdate(), BattlegroundSA::SendTime(), BattlegroundAV::StartingEventOpenDoors(), BattlegroundWS::StartingEventOpenDoors(), BattlegroundSA::ToggleTimer(), Arena::UpdateArenaWorldState(), BattlegroundWS::UpdateFlagState(), BattlegroundAV::UpdateNodeWorldState(), BattlegroundIC::UpdateNodeWorldState(), BattlegroundEY::UpdatePointsCount(), BattlegroundEY::UpdatePointsIcons(), and BattlegroundAV::UpdateScore().

◆ YellToAll()

void Battleground::YellToAll ( Creature creature,
const char *  text,
uint32  language 
)
767{
768 for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
769 {
770 WorldPacket data;
771 ChatHandler::BuildChatPacket(data, CHAT_MSG_MONSTER_YELL, Language(language), creature, itr->second, text);
772 itr->second->SendDirectMessage(&data);
773 }
774}
@ CHAT_MSG_MONSTER_YELL
Definition SharedDefines.h:3406
Language
Definition SharedDefines.h:745
static std::size_t BuildChatPacket(WorldPacket &data, ChatMsg chatType, Language language, ObjectGuid senderGUID, ObjectGuid receiverGUID, std::string_view message, uint8 chatTag, std::string const &senderName="", std::string const &receiverName="", uint32 achievementId=0, bool gmMessage=false, std::string const &channelName="")
Definition Chat.cpp:265

References ChatHandler::BuildChatPacket(), CHAT_MSG_MONSTER_YELL, and m_Players.

Referenced by BattlegroundAV::ChangeMineOwner(), and BattlegroundAV::PostUpdateImpl().

Member Data Documentation

◆ _arenaTeamScores

ArenaTeamScore Battleground::_arenaTeamScores[PVP_TEAMS_COUNT]
protected

◆ _InBGFreeSlotQueue

bool Battleground::_InBGFreeSlotQueue { false }
private
663{ false }; // used to make sure that BG is only once inserted into the BattlegroundMgr.BGFreeSlotQueue[bgTypeId] deque

Referenced by AddToBGFreeSlotQueue(), Init(), and RemoveFromBGFreeSlotQueue().

◆ _reviveEvents

◆ _startPosition

std::array<Position, PVP_TEAMS_COUNT> Battleground::_startPosition
private

◆ ArenaLogEntries

ArenaLogEntryDataMap Battleground::ArenaLogEntries

◆ BgCreatures

◆ BgObjects

◆ m_ArenaTeamIds

uint32 Battleground::m_ArenaTeamIds[PVP_TEAMS_COUNT]
private

◆ m_ArenaTeamMMR

uint32 Battleground::m_ArenaTeamMMR[PVP_TEAMS_COUNT]
private

◆ m_ArenaType

uint8 Battleground::m_ArenaType
private

◆ m_BgInvitedPlayers

uint32 Battleground::m_BgInvitedPlayers[PVP_TEAMS_COUNT]
private

◆ m_BgRaids

Group* Battleground::m_BgRaids[PVP_TEAMS_COUNT]
private

Referenced by Battleground(), GetBgRaid(), and SetBgRaid().

◆ m_BracketId

BattlegroundBracketId Battleground::m_BracketId { BG_BRACKET_ID_FIRST }
private
@ BG_BRACKET_ID_FIRST
Definition DBCEnums.h:47

Referenced by GetBracketId(), and SetBracket().

◆ m_BuffChange

bool Battleground::m_BuffChange
protected

◆ m_ClientInstanceID

uint32 Battleground::m_ClientInstanceID
private

◆ m_EndTime

int32 Battleground::m_EndTime
private

◆ m_Events

uint8 Battleground::m_Events
protected

◆ m_HonorMode

BGHonorMode Battleground::m_HonorMode
protected

Referenced by Battleground(), and SetHoliday().

◆ m_InstanceID

◆ m_IsArena

bool Battleground::m_IsArena
private

◆ m_IsRandom

bool Battleground::m_IsRandom
protected

Referenced by Battleground(), IsRandom(), and SetRandom().

◆ m_IsRated

bool Battleground::m_IsRated
private

◆ m_IsTemplate

bool Battleground::m_IsTemplate
private

◆ m_LastResurrectTime

uint32 Battleground::m_LastResurrectTime
private

◆ m_LevelMax

uint32 Battleground::m_LevelMax
private

◆ m_LevelMin

uint32 Battleground::m_LevelMin
private

◆ m_Map

BattlegroundMap* Battleground::m_Map
private

◆ m_MapId

◆ m_MaxPlayersPerTeam

uint32 Battleground::m_MaxPlayersPerTeam
private

◆ m_MinPlayersPerTeam

uint32 Battleground::m_MinPlayersPerTeam
private

◆ m_Name

std::string Battleground::m_Name {}
private
672{};

Referenced by GetName(), and SetName().

◆ m_OfflineQueue

GuidDeque Battleground::m_OfflineQueue
private

◆ m_Players

◆ m_PlayersCount

uint32 Battleground::m_PlayersCount[PVP_TEAMS_COUNT]
private

◆ m_PrematureCountDown

bool Battleground::m_PrematureCountDown
private

◆ m_PrematureCountDownTimer

uint32 Battleground::m_PrematureCountDownTimer
private

Referenced by _ProcessProgress(), and Battleground().

◆ m_RandomTypeID

BattlegroundTypeId Battleground::m_RandomTypeID
private

◆ m_RealTypeID

◆ m_ResetStatTimer

uint32 Battleground::m_ResetStatTimer
private

Referenced by _ProcessJoin(), Battleground(), and Update().

◆ m_ResurrectQueue

GuidVector Battleground::m_ResurrectQueue
private

Referenced by _ProcessResurrect().

◆ m_ReviveQueue

◆ m_SetDeleteThis

bool Battleground::m_SetDeleteThis
private

Referenced by Battleground(), ToBeDeleted(), and Update().

◆ m_SetupCompleted

bool Battleground::m_SetupCompleted
protected

Referenced by _ProcessJoin(), and Battleground().

◆ m_Spectators

◆ m_StartDelayTime

int32 Battleground::m_StartDelayTime
private

◆ m_StartMaxDist

float Battleground::m_StartMaxDist
private

◆ m_StartTime

uint32 Battleground::m_StartTime
private

◆ m_Status

BattlegroundStatus Battleground::m_Status
private

Referenced by Battleground(), GetStatus(), and SetStatus().

◆ m_TeamScores

◆ m_ToBeTeleported

ToBeTeleportedMap Battleground::m_ToBeTeleported
private

◆ m_UpdateTimer

uint32 Battleground::m_UpdateTimer
protected

Referenced by Battleground(), and Update().

◆ m_ValidStartPositionTimer

uint32 Battleground::m_ValidStartPositionTimer
private

◆ m_WinnerId

PvPTeamId Battleground::m_WinnerId
private

Referenced by Battleground(), GetWinner(), and SetWinner().

◆ PlayerScores

◆ readyMarkerClickedSet

GuidSet Battleground::readyMarkerClickedSet

Referenced by ReadyMarkerClicked().

◆ ScriptId

uint32 Battleground::ScriptId
private

◆ StartDelayTimes

BattlegroundStartTimeIntervals Battleground::StartDelayTimes[BG_STARTING_EVENT_COUNT]
protected

◆ StartMessageIds


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