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

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
202
207
208 // pussywizard:
209 m_UpdateTimer = 0;
210}
@ BG_TEXT_START_TWO_MINUTES
Definition Battleground.h:78
@ BG_TEXT_BATTLE_HAS_BEGUN
Definition Battleground.h:81
@ BG_TEXT_START_ONE_MINUTE
Definition Battleground.h:79
@ BG_TEXT_START_HALF_MINUTE
Definition Battleground.h:80
@ BG_NORMAL
Definition Battleground.h:280
@ BG_START_DELAY_1M
Definition Battleground.h:181
@ BG_START_DELAY_30S
Definition Battleground.h:182
@ BG_START_DELAY_2M
Definition Battleground.h:180
@ BG_START_DELAY_NONE
Definition Battleground.h:184
@ STATUS_NONE
Definition Battleground.h:200
@ BG_STARTING_EVENT_THIRD
Definition Battleground.h:242
@ BG_STARTING_EVENT_SECOND
Definition Battleground.h:241
@ BG_STARTING_EVENT_FIRST
Definition Battleground.h:240
@ BG_STARTING_EVENT_FOURTH
Definition Battleground.h:243
@ PVP_TEAM_NEUTRAL
Definition SharedDefines.h:3442
@ BATTLEGROUND_TYPE_NONE
Definition SharedDefines.h:3480
@ TEAM_ALLIANCE
Definition SharedDefines.h:760
@ TEAM_HORDE
Definition SharedDefines.h:761
uint32 m_ArenaTeamMMR[PVP_TEAMS_COUNT]
Definition Battleground.h:731
bool m_SetDeleteThis
Definition Battleground.h:671
BGHonorMode m_HonorMode
Definition Battleground.h:646
uint32 m_MapId
Definition Battleground.h:740
uint32 m_ArenaTeamIds[PVP_TEAMS_COUNT]
Definition Battleground.h:730
uint32 m_ValidStartPositionTimer
Definition Battleground.h:665
int32 m_StartDelayTime
Definition Battleground.h:675
uint32 m_ClientInstanceID
Definition Battleground.h:662
uint32 m_LevelMax
Definition Battleground.h:735
PvPTeamId m_WinnerId
Definition Battleground.h:674
uint32 m_LastResurrectTime
Definition Battleground.h:667
uint32 m_BgInvitedPlayers[PVP_TEAMS_COUNT]
Definition Battleground.h:718
BattlegroundTypeId m_RandomTypeID
Definition Battleground.h:659
bool m_IsArena
Definition Battleground.h:672
bool m_IsRated
Definition Battleground.h:676
bool m_PrematureCountDown
Definition Battleground.h:677
uint32 m_PlayersCount[PVP_TEAMS_COUNT]
Definition Battleground.h:727
Group * m_BgRaids[PVP_TEAMS_COUNT]
Definition Battleground.h:721
uint32 m_PrematureCountDownTimer
Definition Battleground.h:678
int32 m_TeamScores[PVP_TEAMS_COUNT]
Definition Battleground.h:647
uint32 m_UpdateTimer
Definition Battleground.h:652
bool m_IsRandom
Definition Battleground.h:644
BattlegroundTypeId m_RealTypeID
Definition Battleground.h:658
BattlegroundStartTimeIntervals StartDelayTimes[BG_STARTING_EVENT_COUNT]
Definition Battleground.h:639
int32 m_EndTime
Definition Battleground.h:666
uint32 ScriptId
Definition Battleground.h:744
uint32 m_InstanceID
Definition Battleground.h:660
uint32 m_ResetStatTimer
Definition Battleground.h:664
bool m_BuffChange
Definition Battleground.h:643
uint32 m_MinPlayersPerTeam
Definition Battleground.h:737
uint8 m_ArenaType
Definition Battleground.h:669
uint8 m_Events
Definition Battleground.h:638
float m_StartMaxDist
Definition Battleground.h:742
uint32 m_MaxPlayersPerTeam
Definition Battleground.h:736
bool m_IsTemplate
Definition Battleground.h:673
uint32 m_LevelMin
Definition Battleground.h:734
uint32 m_StartTime
Definition Battleground.h:663
BattlegroundMap * m_Map
Definition Battleground.h:741
BattlegroundStatus m_Status
Definition Battleground.h:661
uint32 StartMessageIds[BG_STARTING_EVENT_COUNT]
Definition Battleground.h:641

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_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
213{
214 LOG_DEBUG("bg.battleground", "> Remove Battleground {} {} {}", GetName(), GetBgTypeID(), GetInstanceID());
215
217
218 // remove objects and creatures
219 // (this is done automatically in mapmanager update, when the instance is reset after the reset time)
220 uint32 size = uint32(BgCreatures.size());
221 for (uint32 i = 0; i < size; ++i)
222 DelCreature(i);
223
224 size = uint32(BgObjects.size());
225 for (uint32 i = 0; i < size; ++i)
226 DelObject(i);
227
228 sScriptMgr->OnBattlegroundDestroy(this);
229
230 sBattlegroundMgr->RemoveBattleground(GetBgTypeID(), GetInstanceID());
231 // unload map
232 if (m_Map)
233 {
234 m_Map->SetUnload();
235 //unlink to prevent crash, always unlink all pointer reference before destruction
236 m_Map->SetBG(nullptr);
237 m_Map = nullptr;
238 }
239
240 // remove from bg free slot queue
242
243 for (auto const& itr : PlayerScores)
244 delete itr.second;
245}
#define sBattlegroundMgr
Definition BattlegroundMgr.h:187
std::uint32_t uint32
Definition Define.h:107
#define LOG_DEBUG(filterType__,...)
Definition Log.h:169
#define sScriptMgr
Definition ScriptMgr.h:727
void SetUnload()
Definition Map.cpp:2479
void SetBG(Battleground *bg)
Definition Map.h:700
bool DelCreature(uint32 type)
Definition Battleground.cpp:1596
EventProcessor _reviveEvents
Definition Battleground.h:654
uint32 GetInstanceID() const
Definition Battleground.h:332
BGObjects BgObjects
Definition Battleground.h:550
bool DelObject(uint32 type)
Definition Battleground.cpp:1615
BattlegroundScoreMap PlayerScores
Definition Battleground.h:628
void RemoveFromBGFreeSlotQueue()
Definition Battleground.cpp:1227
BGCreatures BgCreatures
Definition Battleground.h:551
std::string GetName() const
Definition Battleground.h:329
BattlegroundTypeId GetBgTypeID(bool GetRandom=false) const
Definition Battleground.h:330
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
324{
325 float maxDist = GetStartMaxDist();
326 if (!maxDist)
327 return;
328
330
332 {
334
335 for (auto const& [playerGuid, player] : GetPlayers())
336 {
337 Position pos = player->GetPosition();
338 Position const* startPos = GetTeamStartPosition(player->GetBgTeamId());
339
340 if (pos.GetExactDistSq(startPos) > maxDist)
341 {
342 LOG_DEBUG("bg.battleground", "BATTLEGROUND: Sending {} back to start location (map: {}) (possible exploit)", player->GetName(), GetMapId());
343 player->TeleportTo(GetMapId(), startPos->GetPositionX(), startPos->GetPositionY(), startPos->GetPositionZ(), startPos->GetOrientation());
344 }
345 }
346 }
347}
@ CHECK_PLAYER_POSITION_INVERVAL
Definition Battleground.h:163
uint32 GetMapId() const
Definition Battleground.h:446
Position const * GetTeamStartPosition(TeamId teamId) const
Definition Battleground.cpp:667
BattlegroundPlayerMap const & GetPlayers() const
Definition Battleground.h:419
float GetStartMaxDist() const
Definition Battleground.h:457
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
465{
466 // *********************************************************
467 // *** BATTLEGROUND STARTING SYSTEM ***
468 // *********************************************************
470
471 if (m_ResetStatTimer > 5000)
472 {
474 for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
475 itr->second->ResetAllPowers();
476 }
477
479 {
481
482 if (!FindBgMap())
483 {
484 LOG_ERROR("bg.battleground", "Battleground::_ProcessJoin: map (map id: {}, instance id: {}) is not created!", m_MapId, m_InstanceID);
485 EndNow();
486 return;
487 }
488
489 // Setup here, only when at least one player has ported to the map
490 if (!SetupBattleground())
491 {
492 EndNow();
493 return;
494 }
495
498
499 // First start warning - 2 or 1 minute
502 }
503 // After 1 minute or 30 seconds, warning is signaled
505 {
507
510 }
511 // After 30 or 15 seconds, warning is signaled
513 {
515
518
519 if (isArena())
520 switch (GetBgTypeID())
521 {
522 case BATTLEGROUND_NA:
525 break;
526 case BATTLEGROUND_BE:
529 break;
530 case BATTLEGROUND_RL:
533 break;
534 case BATTLEGROUND_DS:
537 break;
538 case BATTLEGROUND_RV:
541 break;
542 default:
543 break;
544 }
545 }
546 // Delay expired (after 2 or 1 minute)
547 else if (GetStartDelayTime() <= 0 && !(m_Events & BG_STARTING_EVENT_4))
548 {
550
552
555
558
559 // Remove preparation
560 if (isArena())
561 {
562 // pussywizard: initial visibility range is 30yd, set it to a proper value now:
563 if (BattlegroundMap* map = GetBgMap())
564 map->SetVisibilityRange(World::GetMaxVisibleDistanceInBGArenas());
565
566 for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
567 if (Player* player = itr->second)
568 {
569 WorldPacket status;
570 sBattlegroundMgr->BuildBattlegroundStatusPacket(&status, this, player->GetCurrentBattlegroundQueueSlot(), STATUS_IN_PROGRESS, 0, GetStartTime(), GetArenaType(), player->GetBgTeamId());
571 player->GetSession()->SendPacket(&status);
572
573 player->RemoveAurasDueToSpell(SPELL_ARENA_PREPARATION);
574 player->ResetAllPowers();
575 // remove auras with duration lower than 30s
576 Unit::AuraApplicationMap& auraMap = player->GetAppliedAuras();
577 for (Unit::AuraApplicationMap::iterator iter = auraMap.begin(); iter != auraMap.end();)
578 {
579 AuraApplication* aurApp = iter->second;
580 Aura* aura = aurApp->GetBase();
581 if (!aura->IsPermanent()
582 && aura->GetDuration() <= 30 * IN_MILLISECONDS
583 && aurApp->IsPositive()
584 // && (!aura->GetSpellInfo()->HasAttribute(SPELL_ATTR0_NO_IMMUNITIES)) Xinef: condition, ALL buffs should be removed
586 player->RemoveAura(iter);
587 else
588 ++iter;
589 }
590
591 player->UpdateObjectVisibility(true);
592 }
593
594 for (SpectatorList::const_iterator itr = m_Spectators.begin(); itr != m_Spectators.end(); ++itr)
596
598
599 // pussywizard: arena spectator stuff
601 {
602 for (ToBeTeleportedMap::const_iterator itr = m_ToBeTeleported.begin(); itr != m_ToBeTeleported.end(); ++itr)
603 if (Player* p = ObjectAccessor::FindConnectedPlayer(itr->first))
604 if (Player* t = ObjectAccessor::FindPlayer(itr->second))
605 {
606 if (!t->FindMap() || t->FindMap() != GetBgMap())
607 continue;
608
609 p->SetSummonPoint(t->GetMapId(), t->GetPositionX(), t->GetPositionY(), t->GetPositionZ(), 15, true);
610
611 WorldPacket data(SMSG_SUMMON_REQUEST, 8 + 4 + 4);
612 data << t->GetGUID();
613 data << uint32(t->GetZoneId());
614 data << uint32(15 * IN_MILLISECONDS);
615 p->GetSession()->SendPacket(&data);
616 }
617 m_ToBeTeleported.clear();
618 }
619
620 sScriptMgr->OnArenaStart(this);
621 }
622 else
623 {
625
626 for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
627 {
628 itr->second->RemoveAurasDueToSpell(SPELL_PREPARATION);
629 itr->second->ResetAllPowers();
630 }
631
632 // Announce BG starting
635
636 sScriptMgr->OnBattlegroundStart(this);
637 }
638 }
639}
@ 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:234
@ BG_STARTING_EVENT_2
Definition Battleground.h:233
@ BG_STARTING_EVENT_1
Definition Battleground.h:232
@ BG_STARTING_EVENT_4
Definition Battleground.h:235
@ SPELL_ARENA_PREPARATION
Definition Battleground.h:142
@ SPELL_PREPARATION
Definition Battleground.h:143
@ STATUS_IN_PROGRESS
Definition Battleground.h:203
@ SOUND_BG_START
Definition Battleground.h:88
constexpr auto IN_MILLISECONDS
Definition Common.h:53
@ CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_ENABLE
Definition IWorld.h:110
@ LANG_BG_STARTED_ANNOUNCE_WORLD
Definition Language.h:689
#define LOG_ERROR(filterType__,...)
Definition Log.h:157
@ CHAT_MSG_BG_SYSTEM_NEUTRAL
Definition SharedDefines.h:3188
@ BATTLEGROUND_BE
Definition SharedDefines.h:3485
@ BATTLEGROUND_RV
Definition SharedDefines.h:3491
@ BATTLEGROUND_NA
Definition SharedDefines.h:3484
@ BATTLEGROUND_DS
Definition SharedDefines.h:3490
@ BATTLEGROUND_RL
Definition SharedDefines.h:3488
@ SPELL_AURA_MOD_INVISIBILITY
Definition SpellAuraDefines.h:81
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:1222
bool IsPermanent() const
Definition SpellAuras.h:139
Definition Map.h:686
void EndNow()
Definition Battleground.cpp:1659
uint32 GetMinLevel() const
Definition Battleground.h:339
virtual bool SetupBattleground()
Definition Battleground.h:311
uint8 GetArenaType() const
Definition Battleground.h:358
SpectatorList m_Spectators
Definition Battleground.h:723
void SetStartDelayTime(int32 Time)
Definition Battleground.h:388
BattlegroundMap * GetBgMap() const
Definition Battleground.h:450
BattlegroundMap * FindBgMap() const
Definition Battleground.h:451
void SetStatus(BattlegroundStatus Status)
Definition Battleground.h:374
virtual void StartingEventCloseDoors()
Definition Battleground.h:317
bool isArena() const
Definition Battleground.h:414
void SendBroadcastText(uint32 id, ChatMsg msgType, WorldObject const *target=nullptr)
Definition Battleground.cpp:691
ToBeTeleportedMap m_ToBeTeleported
Definition Battleground.h:724
uint32 GetStartTime() const
Definition Battleground.h:335
int32 GetStartDelayTime() const
Definition Battleground.h:357
virtual void StartingEventOpenDoors()
Definition Battleground.h:318
BattlegroundStatus GetStatus() const
Definition Battleground.h:333
void ModifyStartDelayTime(int32 diff)
Definition Battleground.h:387
virtual void CheckWinConditions()
Definition Battleground.h:508
uint32 GetMaxLevel() const
Definition Battleground.h:340
void PlaySoundToAll(uint32 soundId)
Definition Battleground.cpp:704
Definition Chat.h:37
void SendWorldText(std::string_view str)
Definition Chat.cpp:131
Definition Player.h:1081
std::multimap< uint32, AuraApplication * > AuraApplicationMap
Definition Unit.h:645
Definition WorldPacket.h:26
static float GetMaxVisibleDistanceInBGArenas()
Definition World.h:255
@ SMSG_SUMMON_REQUEST
Definition Opcodes.h:713
#define sWorld
Definition World.h:363
AC_GAME_API void HandleResetCommand(Player *player)
Definition ArenaSpectator.cpp:226
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, 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_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_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
642{
643 // *********************************************************
644 // *** BATTLEGROUND ENDING SYSTEM ***
645 // *********************************************************
646 // remove all players from battleground after 2 minutes
647 m_EndTime -= diff;
648 if (m_EndTime <= 0)
649 {
650 m_EndTime = TIME_TO_AUTOREMOVE; // pussywizard: 0 -> TIME_TO_AUTOREMOVE
651 BattlegroundPlayerMap::iterator itr, next;
652 for (itr = m_Players.begin(); itr != m_Players.end(); itr = next)
653 {
654 next = itr;
655 ++next;
656 itr->second->LeaveBattleground(this); //itr is erased here!
657 }
658 }
659}
@ TIME_TO_AUTOREMOVE
Definition Battleground.h:167
BattlegroundPlayerMap m_Players
Definition Battleground.h:633

References m_EndTime, m_Players, and TIME_TO_AUTOREMOVE.

Referenced by Update().

◆ _ProcessProgress()

void Battleground::_ProcessProgress ( uint32  diff)
inlineprotected
423{
424 // *********************************************************
425 // *** BATTLEGROUND BALLANCE SYSTEM ***
426 // *********************************************************
427 // if less then minimum players are in on one side, then start premature finish timer
429 {
431 m_PrematureCountDownTimer = sBattlegroundMgr->GetPrematureFinishTime();
432 }
433 else if (m_PrematureCountDownTimer < diff)
434 {
435 // time's up!
437 m_PrematureCountDown = false;
438 }
439 else if (!sBattlegroundMgr->isTesting())
440 {
441 uint32 newtime = m_PrematureCountDownTimer - diff;
442 // announce every minute
443 if (newtime > (MINUTE * IN_MILLISECONDS))
444 {
446 GetBgMap()->DoForAllPlayers([&](Player* player)
447 {
449 });
450 }
451 else
452 {
453 //announce every 15 seconds
454 if (newtime / (15 * IN_MILLISECONDS) != m_PrematureCountDownTimer / (15 * IN_MILLISECONDS))
455 GetBgMap()->DoForAllPlayers([&](Player* player)
456 {
458 });
459 }
461 }
462}
constexpr auto MINUTE
Definition Common.h:47
@ LANG_BATTLEGROUND_PREMATURE_FINISH_WARNING
Definition Language.h:722
@ LANG_BATTLEGROUND_PREMATURE_FINISH_WARNING_SECS
Definition Language.h:723
void EndBattleground(PvPTeamId winnerTeamId)
Definition Battleground.cpp:791
virtual TeamId GetPrematureWinner()
Definition Battleground.cpp:412
void PSendSysMessage(std::string_view str, bool escapeCharacters=false)
Definition Chat.cpp:211
void DoForAllPlayers(std::function< void(Player *)> exec)
Definition Map.cpp:3008
WorldSession * GetSession() const
Definition Player.h:2005

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
350{
351 // *********************************************************
352 // *** BATTLEGROUND RESURRECTION SYSTEM ***
353 // *********************************************************
354 // this should be handled by spell system
355
356 _reviveEvents.Update(diff);
357
358 m_LastResurrectTime += diff;
360 {
361 if (GetReviveQueueSize())
362 {
363 for (std::map<ObjectGuid, GuidVector>::iterator itr = m_ReviveQueue.begin(); itr != m_ReviveQueue.end(); ++itr)
364 {
365 Creature* sh = nullptr;
366 for (ObjectGuid const& guid : itr->second)
367 {
368 Player* player = ObjectAccessor::FindPlayer(guid);
369 if (!player)
370 continue;
371
372 if (!sh && player->IsInWorld())
373 {
374 sh = player->GetMap()->GetCreature(itr->first);
375 // only for visual effect
376 if (sh)
377 // Spirit Heal, effect 117
378 sh->CastSpell(sh, SPELL_SPIRIT_HEAL, true);
379 }
380
381 // Resurrection visual
382 player->CastSpell(player, SPELL_RESURRECTION_VISUAL, true);
383 m_ResurrectQueue.push_back(guid);
384 }
385
386 itr->second.clear();
387 }
388
389 m_ReviveQueue.clear();
391 }
392 else
393 // queue is clear and time passed, just update last resurrection time
395 }
396 else if (m_LastResurrectTime > 500) // Resurrect players only half a second later, to see spirit heal effect on NPC
397 {
398 for (ObjectGuid const& guid : m_ResurrectQueue)
399 {
400 Player* player = ObjectAccessor::FindPlayer(guid);
401 if (!player)
402 continue;
403 player->ResurrectPlayer(1.0f);
404 player->CastSpell(player, 6962, true);
405 player->CastSpell(player, SPELL_SPIRIT_HEAL_MANA, true);
406 player->SpawnCorpseBones(false);
407 }
408 m_ResurrectQueue.clear();
409 }
410}
@ SPELL_SPIRIT_HEAL
Definition Battleground.h:140
@ SPELL_SPIRIT_HEAL_MANA
Definition Battleground.h:144
@ SPELL_RESURRECTION_VISUAL
Definition Battleground.h:141
#define RESURRECTION_INTERVAL
Definition Battleground.h:173
GuidVector m_ResurrectQueue
Definition Battleground.h:712
uint32 GetReviveQueueSize() const
Definition Battleground.h:431
std::map< ObjectGuid, GuidVector > m_ReviveQueue
Definition Battleground.h:635
Definition Creature.h:43
void Update(uint32 p_time)
Definition EventProcessor.cpp:40
Creature * GetCreature(ObjectGuid const guid)
Definition Map.cpp:2498
Definition ObjectGuid.h:118
bool IsInWorld() const
Definition Object.h:107
void SpawnCorpseBones(bool triggerSave=true)
Definition Player.cpp:4715
void ResurrectPlayer(float restore_percent, bool applySickness=false)
Definition Player.cpp:4499
SpellCastResult CastSpell(SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
Definition Unit.cpp:1178
Map * GetMap() const
Definition Object.h:536

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 
)
1534{
1535 // If the assert is called, means that BgCreatures must be resized!
1536 ASSERT(type < BgCreatures.size());
1537
1538 Map* map = FindBgMap();
1539 if (!map)
1540 return nullptr;
1541
1542 if (transport)
1543 {
1544 transport->CalculatePassengerPosition(x, y, z, &o);
1545 if (Creature* creature = transport->SummonCreature(entry, x, y, z, o, TEMPSUMMON_MANUAL_DESPAWN))
1546 {
1547 transport->AddPassenger(creature, true);
1548 BgCreatures[type] = creature->GetGUID();
1549 return creature;
1550 }
1551
1552 return nullptr;
1553 }
1554
1555 Creature* creature = new Creature();
1556 if (!creature->Create(map->GenerateLowGuid<HighGuid::Unit>(), map, PHASEMASK_NORMAL, entry, 0, x, y, z, o))
1557 {
1558 LOG_ERROR("bg.battleground", "Battleground::AddCreature: cannot create creature (entry: {}) for BG (map: {}, instance id: {})!",
1559 entry, m_MapId, m_InstanceID);
1560 delete creature;
1561 return nullptr;
1562 }
1563
1564 creature->SetHomePosition(x, y, z, o);
1565
1566 CreatureTemplate const* cinfo = sObjectMgr->GetCreatureTemplate(entry);
1567 if (!cinfo)
1568 {
1569 LOG_ERROR("bg.battleground", "Battleground::AddCreature: creature template (entry: {}) does not exist for BG (map: {}, instance id: {})!",
1570 entry, m_MapId, m_InstanceID);
1571 delete creature;
1572 return nullptr;
1573 }
1574 // Force using DB speeds
1575 creature->SetSpeed(MOVE_WALK, cinfo->speed_walk);
1576 creature->SetSpeed(MOVE_RUN, cinfo->speed_run);
1577
1578 if (!map->AddToMap(creature))
1579 {
1580 delete creature;
1581 return nullptr;
1582 }
1583
1584 BgCreatures[type] = creature->GetGUID();
1585
1586 if (respawntime)
1587 creature->SetRespawnDelay(respawntime);
1588
1589 // Xinef: Set PVP state for vehicles, should be for all creatures in bg?
1590 if (creature->IsVehicle())
1591 creature->SetPvP(true);
1592
1593 return creature;
1594}
#define ASSERT
Definition Errors.h:68
#define sObjectMgr
Definition ObjectMgr.h:1636
@ PHASEMASK_NORMAL
Definition Object.h:60
@ TEMPSUMMON_MANUAL_DESPAWN
Definition Object.h:53
@ MOVE_RUN
Definition UnitDefines.h:350
@ MOVE_WALK
Definition UnitDefines.h:349
void SetHomePosition(float x, float y, float z, float o)
Definition Creature.h:340
void SetRespawnDelay(uint32 delay)
Definition Creature.h:296
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:1131
Definition Map.h:156
ObjectGuid::LowType GenerateLowGuid()
Definition Map.h:487
bool AddToMap(T *, bool checkTransport=false)
Definition Map.cpp:394
void AddPassenger(WorldObject *passenger, bool withAll=false) override
Definition Transport.cpp:264
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:112
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:766
void SetPvP(bool state)
Definition Unit.h:992
void SetSpeed(UnitMoveType mtype, float rate, bool forced=false)
Definition Unit.cpp:14481
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:2368
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 
)
1412{
1413 // If the assert is called, means that BgObjects must be resized!
1414 ASSERT(type < BgObjects.size());
1415
1416 Map* map = FindBgMap();
1417 if (!map)
1418 return false;
1419 // Must be created this way, adding to godatamap would add it to the base map of the instance
1420 // and when loading it (in go::LoadFromDB()), a new guid would be assigned to the object, and a new object would be created
1421 // So we must create it specific for this instance
1422 GameObject* go = sObjectMgr->IsGameObjectStaticTransport(entry) ? new StaticTransport() : new GameObject();
1423 if (!go->Create(map->GenerateLowGuid<HighGuid::GameObject>(), entry, GetBgMap(),
1424 PHASEMASK_NORMAL, x, y, z, o, G3D::Quat(rotation0, rotation1, rotation2, rotation3), 100, goState))
1425 {
1426 LOG_ERROR("sql.sql", "Battleground::AddObject: cannot create gameobject (entry: {}) for BG (map: {}, instance id: {})!",
1427 entry, m_MapId, m_InstanceID);
1428 LOG_ERROR("bg.battleground", "Battleground::AddObject: cannot create gameobject (entry: {}) for BG (map: {}, instance id: {})!",
1429 entry, m_MapId, m_InstanceID);
1430 delete go;
1431 return false;
1432 }
1433 /*
1434 ObjectGuid::LowType spawnId = go->GetSpawnId();
1435
1436 // without this, UseButtonOrDoor caused the crash, since it tried to get go info from godata
1437 // 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
1438 GameObjectData& data = sObjectMgr->NewGOData(spawnId);
1439
1440 data.id = entry;
1441 data.mapid = GetMapId();
1442 data.posX = x;
1443 data.posY = y;
1444 data.posZ = z;
1445 data.orientation = o;
1446 data.rotation0 = rotation0;
1447 data.rotation1 = rotation1;
1448 data.rotation2 = rotation2;
1449 data.rotation3 = rotation3;
1450 data.spawntimesecs = respawnTime;
1451 data.spawnMask = 1;
1452 data.animprogress = 100;
1453 data.go_state = 1;
1454 */
1455 // Add to world, so it can be later looked up from HashMapHolder
1456 if (!map->AddToMap(go))
1457 {
1458 delete go;
1459 return false;
1460 }
1461 BgObjects[type] = go->GetGUID();
1462 return true;
1463}
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:254
Definition Transport.h:113

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 
)
1182{
1183 if (player->GetGroup() && (player->GetGroup()->isBGGroup() || player->GetGroup()->isBFGroup()))
1184 {
1185 LOG_INFO("misc", "Battleground::AddOrSetPlayerToCorrectBgGroup - player is already in {} group!", (player->GetGroup()->isBGGroup() ? "BG" : "BF"));
1186 return;
1187 }
1188
1189 ObjectGuid playerGuid = player->GetGUID();
1190 Group* group = GetBgRaid(teamId);
1191 if (!group) // first player joined
1192 {
1193 group = new Group;
1194 SetBgRaid(teamId, group);
1195 group->Create(player);
1196 sGroupMgr->AddGroup(group);
1197 }
1198 else if (group->IsMember(playerGuid))
1199 {
1200 uint8 subgroup = group->GetMemberGroup(playerGuid);
1201 player->SetBattlegroundOrBattlefieldRaid(group, subgroup);
1202 }
1203 else
1204 {
1205 group->AddMember(player);
1206
1207 if (Group* originalGroup = player->GetOriginalGroup())
1208 if (originalGroup->IsLeader(playerGuid))
1209 {
1210 group->ChangeLeader(playerGuid);
1211 group->SendUpdate();
1212 }
1213 }
1214}
std::uint8_t uint8
Definition Define.h:109
#define sGroupMgr
Definition GroupMgr.h:51
#define LOG_INFO(filterType__,...)
Definition Log.h:165
Group * GetBgRaid(TeamId teamId) const
Definition Battleground.h:492
void SetBgRaid(TeamId teamId, Group *bg_raid)
Definition Battleground.cpp:1806
Definition Group.h:169
uint8 GetMemberGroup(ObjectGuid guid) const
Definition Group.cpp:2382
bool AddMember(Player *player)
Definition Group.cpp:388
void SendUpdate()
Definition Group.cpp:1663
bool isBGGroup() const
Definition Group.cpp:2274
void ChangeLeader(ObjectGuid guid)
Definition Group.cpp:710
bool isBFGroup() const
Definition Group.cpp:2279
bool IsMember(ObjectGuid guid) const
Definition Group.cpp:2334
bool Create(Player *leader)
Definition Group.cpp:106
Group * GetGroup()
Definition Player.h:2476
Group * GetOriginalGroup()
Definition Player.h:2491
void SetBattlegroundOrBattlefieldRaid(Group *group, int8 subgroup=-1)
Definition Player.cpp:13142

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.

1120{
1121 // remove afk from player
1122 if (player->HasPlayerFlag(PLAYER_FLAGS_AFK))
1123 player->ToggleAFK();
1124
1125 sScriptMgr->OnBattlegroundBeforeAddPlayer(this, player);
1126
1127 // score struct must be created in inherited class
1128
1129 ObjectGuid guid = player->GetGUID();
1130 TeamId teamId = player->GetBgTeamId();
1131
1132 // Add to list/maps
1133 m_Players[guid] = player;
1134
1135 UpdatePlayersCountByTeam(teamId, false); // +1 player
1136
1137 WorldPacket data;
1138 sBattlegroundMgr->BuildPlayerJoinedBattlegroundPacket(&data, player);
1139 SendPacketToTeam(teamId, &data, player, false);
1140
1142
1143 // add arena specific auras
1144 if (isArena())
1145 {
1146 // restore pets health before remove
1147 if (Pet* pet = player->GetPet())
1148 if (pet->IsAlive())
1149 pet->SetHealth(pet->GetMaxHealth());
1150
1152 player->DestroyConjuredItems(true);
1153 player->UnsummonPetTemporaryIfAny();
1154
1155 if (GetStatus() == STATUS_WAIT_JOIN) // not started yet
1156 {
1157 player->CastSpell(player, SPELL_ARENA_PREPARATION, true);
1158 player->ResetAllPowers();
1159 }
1160 }
1161 else
1162 {
1163 if (GetStatus() == STATUS_WAIT_JOIN) // not started yet
1164 player->CastSpell(player, SPELL_PREPARATION, true); // reduces all mana cost of spells.
1165 }
1166
1167 // Xinef: reset all map criterias on map enter
1169
1170 // setup BG group membership
1172 AddOrSetPlayerToCorrectBgGroup(player, teamId);
1173
1174 sScriptMgr->OnBattlegroundAddPlayer(this, player);
1175
1176 // Log
1177 LOG_DEBUG("bg.battleground", "BATTLEGROUND: Player {} joined the battle.", player->GetName());
1178}
@ STATUS_WAIT_JOIN
Definition Battleground.h:202
@ ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP
Definition DBCEnums.h:90
@ TEMP_ENCHANTMENT_SLOT
Definition Item.h:170
@ PLAYER_FLAGS_AFK
Definition Player.h:480
TeamId
Definition SharedDefines.h:759
@ SPELL_AURA_MOUNTED
Definition SpellAuraDefines.h:141
void PlayerAddedToBGCheckIfBGIsRunning(Player *player)
Definition Battleground.cpp:1764
void SendPacketToTeam(TeamId teamId, WorldPacket const *packet, Player *sender=nullptr, bool self=true)
Definition Battleground.cpp:679
void UpdatePlayersCountByTeam(TeamId teamId, bool remove)
Definition Battleground.h:500
void AddOrSetPlayerToCorrectBgGroup(Player *player, TeamId teamId)
Definition Battleground.cpp:1181
Definition Pet.h:41
Pet * GetPet() const
Definition Player.cpp:8968
void DestroyConjuredItems(bool update)
Definition PlayerStorage.cpp:3342
void UnsummonPetTemporaryIfAny()
Definition Player.cpp:14273
void ResetAchievementCriteria(AchievementCriteriaCondition condition, uint32 value, bool evenIfCriteriaComplete=false)
Definition Player.cpp:13989
void ToggleAFK()
Definition Player.cpp:1297
void ResetAllPowers()
Definition Player.cpp:2064
bool HasPlayerFlag(PlayerFlags flags) const
Definition Player.h:1125
void RemoveArenaEnchantments(EnchantmentSlot slot)
Definition PlayerStorage.cpp:4225
TeamId GetBgTeamId() const
Definition Player.h:2286
void RemoveAurasByType(AuraType auraType, ObjectGuid casterGUID=ObjectGuid::Empty, Aura *except=nullptr, bool negative=true, bool positive=true)
Definition Unit.cpp:5142
std::string const & GetName() const
Definition Object.h:463

References ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP, AddOrSetPlayerToCorrectBgGroup(), Unit::CastSpell(), Player::DestroyConjuredItems(), Player::GetBgTeamId(), Object::GetGUID(), GetMapId(), WorldObject::GetName(), Player::GetPet(), GetStatus(), Player::HasPlayerFlag(), isArena(), LOG_DEBUG, m_Players, PLAYER_FLAGS_AFK, PlayerAddedToBGCheckIfBGIsRunning(), Player::RemoveArenaEnchantments(), Unit::RemoveAurasByType(), Player::ResetAchievementCriteria(), Player::ResetAllPowers(), sBattlegroundMgr, SendPacketToTeam(), SPELL_ARENA_PREPARATION, SPELL_AURA_MOUNTED, 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 
)
1365{
1366 m_ReviveQueue[npc_guid].push_back(player_guid);
1367
1368 Player* player = ObjectAccessor::FindPlayer(player_guid);
1369 if (!player)
1370 return;
1371
1372 player->CastSpell(player, SPELL_WAITING_FOR_RESURRECT, true);
1373}
@ SPELL_WAITING_FOR_RESURRECT
Definition Battleground.h:138

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
406{ 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
1636{
1638
1639 if (Creature* creature = AddCreature(entry, type, x, y, z, o))
1640 {
1641 creature->setDeathState(DeathState::Dead);
1642 creature->SetGuidValue(UNIT_FIELD_CHANNEL_OBJECT, creature->GetGUID());
1643 // aura
1645 // creature->SetVisibleAura(0, SPELL_SPIRIT_HEAL_CHANNEL);
1646 // casting visual effect
1647 creature->SetUInt32Value(UNIT_CHANNEL_SPELL, SPELL_SPIRIT_HEAL_CHANNEL);
1648 // correct cast speed
1649 creature->SetFloatValue(UNIT_MOD_CAST_SPEED, 1.0f);
1650 //creature->CastSpell(creature, SPELL_SPIRIT_HEAL_CHANNEL, true);
1651 return true;
1652 }
1653 LOG_ERROR("bg.battleground", "Battleground::AddSpiritGuide: cannot create spirit guide (type: {}, entry: {}) for BG (map: {}, instance id: {})!",
1654 type, entry, m_MapId, m_InstanceID);
1655 EndNow();
1656 return false;
1657}
@ BG_CREATURE_ENTRY_H_SPIRITGUIDE
Definition Battleground.h:133
@ BG_CREATURE_ENTRY_A_SPIRITGUIDE
Definition Battleground.h:132
@ SPELL_SPIRIT_HEAL_CHANNEL
Definition Battleground.h:139
@ 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:1533

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
410{ m_ToBeTeleported[spectator] = participant; }

References m_ToBeTeleported.

Referenced by ArenaSpectator::HandleSpectatorSpectateCommand().

◆ AddToBGFreeSlotQueue()

void Battleground::AddToBGFreeSlotQueue ( )
1218{
1220 {
1221 sBattlegroundMgr->AddToBGFreeSlotQueue(m_RealTypeID, this);
1222 _InBGFreeSlotQueue = true;
1223 }
1224}
bool _InBGFreeSlotQueue
Definition Battleground.h:670
bool isBattleground() const
Definition Battleground.h:415

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.

324{ return false; }

Referenced by achievement_bg_control_all_nodes::OnCheck().

◆ BlockMovement()

void Battleground::BlockMovement ( Player player)
971{
972 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()
973}
void SetClientControl(Unit *target, bool allowMove, bool packetOnly=false)
Definition Player.cpp:12913

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)
1321{
1322 uint8 type = (isArena() ? 1 : 0);
1323
1324 data.Initialize(MSG_PVP_LOG_DATA, 1 + 1 + 4 + 40 * GetPlayerScores()->size());
1325 data << uint8(type); // type (battleground = 0 / arena = 1)
1326
1327 if (type) // arena
1328 {
1329 for (uint8 i = 0; i < PVP_TEAMS_COUNT; ++i)
1330 _arenaTeamScores[i].BuildRatingInfoBlock(data);
1331
1332 for (uint8 i = 0; i < PVP_TEAMS_COUNT; ++i)
1333 _arenaTeamScores[i].BuildTeamInfoBlock(data);
1334 }
1335
1337 {
1338 data << uint8(1); // bg ended
1339 data << uint8(GetWinner()); // who win
1340 }
1341 else
1342 data << uint8(0); // bg not ended
1343
1344 data << uint32(GetPlayerScores()->size());
1345
1346 for (auto const& score : PlayerScores)
1347 score.second->AppendToPacket(data);
1348}
@ STATUS_WAIT_LEAVE
Definition Battleground.h:204
uint8 constexpr PVP_TEAMS_COUNT
Definition SharedDefines.h:3445
ArenaTeamScore _arenaTeamScores[PVP_TEAMS_COUNT]
Definition Battleground.h:649
PvPTeamId GetWinner() const
Definition Battleground.h:359
BattlegroundScoreMap const * GetPlayerScores() const
Definition Battleground.h:428
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 
)
710{
711 for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
712 if (itr->second->GetBgTeamId() == teamId)
713 itr->second->CastSpell(itr->second, spellId, true);
714}

References m_Players.

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

◆ CheckWinConditions()

virtual void Battleground::CheckWinConditions ( )
inlinevirtual

Reimplemented in Arena.

508{ }

Referenced by _ProcessJoin().

◆ DecreaseInvitedCount()

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

References m_BgInvitedPlayers.

Referenced by RemovePlayerAtLeave().

◆ DelCreature()

bool Battleground::DelCreature ( uint32  type)
1597{
1598 if (!BgCreatures[type])
1599 return true;
1600
1601 if (Creature* creature = GetBgMap()->GetCreature(BgCreatures[type]))
1602 {
1603 creature->AddObjectToRemoveList();
1604 BgCreatures[type].Clear();
1605 return true;
1606 }
1607
1608 LOG_ERROR("bg.battleground", "Battleground::DelCreature: creature (type: {}, {}) not found for BG (map: {}, instance id: {})!",
1609 type, BgCreatures[type].ToString(), m_MapId, m_InstanceID);
1610
1611 BgCreatures[type].Clear();
1612 return false;
1613}
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)
1616{
1617 if (!BgObjects[type])
1618 return true;
1619
1620 if (GameObject* obj = GetBgMap()->GetGameObject(BgObjects[type]))
1621 {
1622 obj->SetRespawnTime(0); // not save respawn time
1623 obj->Delete();
1624 BgObjects[type].Clear();
1625 return true;
1626 }
1627
1628 LOG_ERROR("bg.battleground", "Battleground::DelObject: gameobject (type: {}, {}) not found for BG (map: {}, instance id: {})!",
1629 type, BgObjects[type].ToString(), m_MapId, m_InstanceID);
1630
1631 BgObjects[type].Clear();
1632 return false;
1633}
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.

321{}

◆ DoAction()

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

Reimplemented in BattlegroundIC.

530{}

◆ DoorClose()

void Battleground::DoorClose ( uint32  type)
1468{
1469 if (GameObject* obj = GetBgMap()->GetGameObject(BgObjects[type]))
1470 {
1471 // If doors are open, close it
1472 if (obj->getLootState() == GO_ACTIVATED && obj->GetGoState() != GO_STATE_READY)
1473 {
1474 obj->SetLootState(GO_READY);
1475 obj->SetGoState(GO_STATE_READY);
1476 }
1477 }
1478 else
1479 LOG_ERROR("bg.battleground", "Battleground::DoorClose: door gameobject (type: {}, {}) not found for BG (map: {}, instance id: {})!",
1480 type, BgObjects[type].ToString(), m_MapId, m_InstanceID);
1481}
@ GO_STATE_READY
Definition GameObjectData.h:690
@ 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)
792{
793 // xinef: if this is true, it means that endbattleground is called second time
794 // skip to avoid double rating reduce / add
795 // can bug out due to multithreading ?
796 // set as fast as possible
798 return;
799
802 SetWinner(winnerTeamId);
803
804 if (winnerTeamId == PVP_TEAM_ALLIANCE)
805 {
806 if (isBattleground())
808
809 PlaySoundToAll(SOUND_ALLIANCE_WINS); // alliance wins sound
810 }
811 else if (winnerTeamId == PVP_TEAM_HORDE)
812 {
813 if (isBattleground())
815
816 PlaySoundToAll(SOUND_HORDE_WINS); // horde wins sound
817 }
818
820 uint64 battlegroundId = 1;
822 {
823 stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PVPSTATS_MAXID);
824 PreparedQueryResult result = CharacterDatabase.Query(stmt);
825
826 if (result)
827 {
828 Field* fields = result->Fetch();
829 battlegroundId = fields[0].Get<uint64>() + 1;
830 }
831
832 stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PVPSTATS_BATTLEGROUND);
833 stmt->SetData(0, battlegroundId);
834 stmt->SetData(1, GetWinner());
835 stmt->SetData(2, GetUniqueBracketId());
836 stmt->SetData(3, GetBgTypeID(true));
837 CharacterDatabase.Execute(stmt);
838 }
839
840 //we must set it this way, because end time is sent in packet!
842
843 WorldPacket pvpLogData;
844 BuildPvPLogDataPacket(pvpLogData);
845
846 for (auto const& [playerGuid, player] : m_Players)
847 {
848 TeamId bgTeamId = player->GetBgTeamId();
849
850 // should remove spirit of redemption
851 if (player->HasSpiritOfRedemptionAura())
852 player->RemoveAurasByType(SPELL_AURA_MOD_SHAPESHIFT);
853
854 if (!player->IsAlive())
855 {
856 player->ResurrectPlayer(1.0f);
857 player->SpawnCorpseBones();
858 }
859 else
860 {
861 //needed cause else in av some creatures will kill the players at the end
862 player->CombatStop();
863 player->getHostileRefMgr().deleteReferences();
864 }
865
866 uint32 winner_kills = player->GetRandomWinner() ? sWorld->getIntConfig(CONFIG_BG_REWARD_WINNER_HONOR_LAST) : sWorld->getIntConfig(CONFIG_BG_REWARD_WINNER_HONOR_FIRST);
867 uint32 loser_kills = player->GetRandomWinner() ? sWorld->getIntConfig(CONFIG_BG_REWARD_LOSER_HONOR_LAST) : sWorld->getIntConfig(CONFIG_BG_REWARD_LOSER_HONOR_FIRST);
868 uint32 winner_arena = player->GetRandomWinner() ? sWorld->getIntConfig(CONFIG_BG_REWARD_WINNER_ARENA_LAST) : sWorld->getIntConfig(CONFIG_BG_REWARD_WINNER_ARENA_FIRST);
869
870 // Reward winner team
871 if (bgTeamId == GetTeamId(winnerTeamId))
872 {
874 {
876
877 // Xinef: check player level and not bracket level if (CanAwardArenaPoints())
878 if (player->GetLevel() >= sWorld->getIntConfig(CONFIG_DAILY_RBG_MIN_LEVEL_AP_REWARD))
879 player->ModifyArenaPoints(winner_arena);
880
881 if (!player->GetRandomWinner())
882 player->SetRandomWinner(true);
883 }
884
885 player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_WIN_BG, player->GetMapId());
886 }
887 else
888 {
891 }
892
893 sScriptMgr->OnBattlegroundEndReward(this, player, GetTeamId(winnerTeamId));
894
895 player->ResetAllPowers();
896 player->CombatStopWithPets(true);
897
898 BlockMovement(player);
899
900 player->GetSession()->SendPacket(&pvpLogData);
901
903 {
904 stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PVPSTATS_PLAYER);
905 auto const& score = PlayerScores.find(player->GetGUID().GetCounter());
906
907 stmt->SetData(0, battlegroundId);
908 stmt->SetData(1, player->GetGUID().GetCounter());
909 stmt->SetData(2, bgTeamId == GetTeamId(winnerTeamId));
910 stmt->SetData(3, score->second->GetKillingBlows());
911 stmt->SetData(4, score->second->GetDeaths());
912 stmt->SetData(5, score->second->GetHonorableKills());
913 stmt->SetData(6, score->second->GetBonusHonor());
914 stmt->SetData(7, score->second->GetDamageDone());
915 stmt->SetData(8, score->second->GetHealingDone());
916 stmt->SetData(9, score->second->GetAttr1());
917 stmt->SetData(10, score->second->GetAttr2());
918 stmt->SetData(11, score->second->GetAttr3());
919 stmt->SetData(12, score->second->GetAttr4());
920 stmt->SetData(13, score->second->GetAttr5());
921
922 CharacterDatabase.Execute(stmt);
923 }
924
925 WorldPacket data;
926 sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, player->GetCurrentBattlegroundQueueSlot(), STATUS_IN_PROGRESS, TIME_TO_AUTOREMOVE, GetStartTime(), GetArenaType(), player->GetBgTeamId());
927 player->GetSession()->SendPacket(&data);
928
929 player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND, player->GetMapId());
930 }
931
933 SpiritOfCompetitionEvent(winnerTeamId);
934
935 sScriptMgr->OnBattlegroundEnd(this, GetTeamId(winnerTeamId));
936}
@ SCORE_BONUS_HONOR
Definition BattlegroundScore.h:31
@ BG_TEXT_ALLIANCE_WINS
Definition Battleground.h:75
@ BG_TEXT_HORDE_WINS
Definition Battleground.h:76
SpiritOfCompetitionEvent
Definition Battleground.h:247
@ EVENT_SPIRIT_OF_COMPETITION
Definition Battleground.h:248
@ SOUND_ALLIANCE_WINS
Definition Battleground.h:87
@ SOUND_HORDE_WINS
Definition Battleground.h:86
@ 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_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:1964
@ CONFIG_DAILY_RBG_MIN_LEVEL_AP_REWARD
Definition IWorld.h:423
@ CONFIG_BG_REWARD_LOSER_HONOR_LAST
Definition IWorld.h:397
@ CONFIG_BG_REWARD_WINNER_ARENA_FIRST
Definition IWorld.h:393
@ CONFIG_BG_REWARD_WINNER_ARENA_LAST
Definition IWorld.h:395
@ CONFIG_BG_REWARD_WINNER_HONOR_FIRST
Definition IWorld.h:392
@ CONFIG_BG_REWARD_LOSER_HONOR_FIRST
Definition IWorld.h:396
@ CONFIG_BG_REWARD_WINNER_HONOR_LAST
Definition IWorld.h:394
@ CONFIG_BATTLEGROUND_STORE_STATISTICS_ENABLE
Definition IWorld.h:113
@ PVP_TEAM_HORDE
Definition SharedDefines.h:3440
@ PVP_TEAM_ALLIANCE
Definition SharedDefines.h:3441
TeamId GetTeamId(PvPTeamId teamId)
Definition SharedDefines.h:3462
@ SPELL_AURA_MOD_SHAPESHIFT
Definition SpellAuraDefines.h:99
static bool IsBGWeekend(BattlegroundTypeId bgTypeId)
Definition BattlegroundMgr.cpp:909
uint8 GetUniqueBracketId() const
Definition Battleground.cpp:1849
void BlockMovement(Player *player)
Definition Battleground.cpp:970
void SetWinner(PvPTeamId winner)
Definition Battleground.h:383
void BuildPvPLogDataPacket(WorldPacket &data)
Definition Battleground.cpp:1320
virtual bool UpdatePlayerScore(Player *player, uint32 type, uint32 value, bool doAddHonor=true)
Definition Battleground.cpp:1350
bool IsRandom()
Definition Battleground.h:366
uint32 GetBonusHonorFromKill(uint32 kills) const
Definition Battleground.cpp:963
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_WIN_BG, 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.

485 {
486 EndBattleground(GetPvPTeamId(winnerTeamId));
487 }
PvPTeamId GetPvPTeamId(TeamId teamId)
Definition SharedDefines.h:3447

References EndBattleground(), and GetPvPTeamId().

◆ EndNow()

void Battleground::EndNow ( )
protected
1660{
1663 SetEndTime(0);
1664}
void SetEndTime(uint32 Time)
Definition Battleground.h:377

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.

526{}

◆ EventPlayerDroppedFlag()

virtual void Battleground::EventPlayerDroppedFlag ( Player )
inlinevirtual

Reimplemented in BattlegroundEY, and BattlegroundWS.

524{}

◆ EventPlayerUsedGO()

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

Reimplemented in BattlegroundSA.

527{}

◆ FillInitialWorldStates()

◆ FindBgMap()

◆ GetAlivePlayersCountByTeam()

uint32 Battleground::GetAlivePlayersCountByTeam ( TeamId  teamId) const
1780{
1781 uint32 count = 0;
1782 for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
1783 if (itr->second->IsAlive() && !itr->second->HasByteFlag(UNIT_FIELD_BYTES_2, 3, FORM_SPIRITOFREDEMPTION) && itr->second->GetBgTeamId() == teamId)
1784 ++count;
1785
1786 return count;
1787}
@ 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
514{ return m_ArenaTeamMMR[teamId]; }

References m_ArenaTeamMMR.

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

◆ GetArenaTeamIdForTeam()

uint32 Battleground::GetArenaTeamIdForTeam ( TeamId  teamId) const
inline
512{ 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
492{ return m_BgRaids[teamId]; }

References m_BgRaids.

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

◆ GetBgTypeID()

BattlegroundTypeId Battleground::GetBgTypeID ( bool  GetRandom = false) const
inline
330{ 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(), GetTeamScore(), WorldSession::HandleBattleFieldPortOpcode(), WorldSession::HandleBattlemasterJoinArena(), WorldSession::HandleBattlemasterJoinOpcode(), misc_commandscript::HandleSkirmishCommand(), BattlegroundAB::Init(), BattlegroundEY::Init(), BattlegroundWS::Init(), 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(), 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

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

1817{
1818 return sGraveyard->GetClosestGraveyard(player, player->GetBgTeamId());
1819}
#define sGraveyard
Definition GameGraveyard.h:74

References Player::GetBgTeamId(), and sGraveyard.

Referenced by RelocateDeadPlayers().

◆ GetEndTime()

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

References m_EndTime.

Referenced by PlayerAddedToBGCheckIfBGIsRunning().

◆ GetFlagPickerGUID()

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

Reimplemented in BattlegroundWS, and BattlegroundEY.

574{ 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
1237{
1239 return 0;
1240
1241 // if CONFIG_BATTLEGROUND_INVITATION_TYPE == BG_QUEUE_INVITATION_TYPE_NO_BALANCE, invite everyone unless the BG is full
1243 return (GetInvitedCount(teamId) < GetMaxPlayersPerTeam()) ? GetMaxPlayersPerTeam() - GetInvitedCount(teamId) : 0;
1244
1245 // 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
1246 uint32 thisTeamInvitedCount = teamId == TEAM_ALLIANCE ? GetInvitedCount(TEAM_ALLIANCE) : GetInvitedCount(TEAM_HORDE);
1248 uint32 otherTeamInvitedCount = teamId == TEAM_ALLIANCE ? GetInvitedCount(TEAM_HORDE) : GetInvitedCount(TEAM_ALLIANCE);
1250
1251 // difference based on ppl invited (not necessarily entered battle)
1252 // default: allow 0
1253 uint32 diff = 0;
1254 uint32 maxPlayersPerTeam = GetMaxPlayersPerTeam();
1255 uint32 minPlayersPerTeam = GetMinPlayersPerTeam();
1256
1257 // allow join one person if the sides are equal (to fill up bg to minPlayerPerTeam)
1258 if (otherTeamInvitedCount == thisTeamInvitedCount)
1259 diff = 1;
1260 else if (otherTeamInvitedCount > thisTeamInvitedCount) // allow join more ppl if the other side has more players
1261 diff = otherTeamInvitedCount - thisTeamInvitedCount;
1262
1263 // difference based on max players per team (don't allow inviting more)
1264 uint32 diff2 = (thisTeamInvitedCount < maxPlayersPerTeam) ? maxPlayersPerTeam - thisTeamInvitedCount : 0;
1265
1266 // difference based on players who already entered
1267 // default: allow 0
1268 uint32 diff3 = 0;
1269
1270 // allow join one person if the sides are equal (to fill up bg minPlayerPerTeam)
1271 if (otherTeamPlayersCount == thisTeamPlayersCount)
1272 diff3 = 1;
1273 else if (otherTeamPlayersCount > thisTeamPlayersCount) // allow join more ppl if the other side has more players
1274 diff3 = otherTeamPlayersCount - thisTeamPlayersCount;
1275 else if (thisTeamInvitedCount <= minPlayersPerTeam) // or other side has less than minPlayersPerTeam
1276 diff3 = minPlayersPerTeam - thisTeamInvitedCount + 1;
1277
1278 // return the minimum of the 3 differences
1279 // min of diff, diff2 and diff3
1280 return std::min({ diff, diff2, diff3 });
1281}
@ BG_QUEUE_INVITATION_TYPE_NO_BALANCE
Definition Battleground.h:298
@ CONFIG_BATTLEGROUND_INVITATION_TYPE
Definition IWorld.h:314
uint32 GetMinPlayersPerTeam() const
Definition Battleground.h:351
uint32 GetMaxPlayersPerTeam() const
Definition Battleground.h:350
uint32 GetInvitedCount(TeamId teamId) const
Definition Battleground.h:398
uint32 GetPlayersCountByTeam(TeamId teamId) const
Definition Battleground.h:498

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
398{ return m_BgInvitedPlayers[teamId]; }

References m_BgInvitedPlayers.

Referenced by GetFreeSlotsForTeam(), and Update().

◆ GetLastResurrectTime()

uint32 Battleground::GetLastResurrectTime ( ) const
inline

◆ GetMapId()

◆ GetMaxFreeSlots()

uint32 Battleground::GetMaxFreeSlots ( ) const
1284{
1286}
uint32 GetFreeSlotsForTeam(TeamId teamId) const
Definition Battleground.cpp:1236

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
352 {
353 auto lowLevelsOverride = sWorld->getIntConfig(CONFIG_BATTLEGROUND_OVERRIDE_LOWLEVELS_MINPLAYERS);
354 return (lowLevelsOverride && !isTemplate() && !isMaxLevel() && !isArena()) ? lowLevelsOverride : m_MinPlayersPerTeam;
355 }
@ CONFIG_BATTLEGROUND_OVERRIDE_LOWLEVELS_MINPLAYERS
Definition IWorld.h:307
bool isMaxLevel() const
Definition Battleground.h:343
bool isTemplate() const
Definition Battleground.h:342

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)
1795{
1796 for (uint32 i = 0; i < BgObjects.size(); ++i)
1797 if (BgObjects[i] == guid)
1798 return i;
1799
1800 LOG_ERROR("bg.battleground", "Battleground::GetObjectType: player used gameobject ({}) which is not in internal data for BG (map: {}, instance id: {}), cheating?",
1801 guid.ToString(), m_MapId, m_InstanceID);
1802
1803 return -1;
1804}
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
428{ return &PlayerScores; }

References PlayerScores.

Referenced by BuildPvPLogDataPacket().

◆ GetPlayerScoresSize()

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

References PlayerScores.

◆ GetPlayersCountByTeam()

uint32 Battleground::GetPlayersCountByTeam ( TeamId  teamId) const
inline

◆ GetPlayersSize()

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

References m_Players.

Referenced by HandleTriggerBuff(), and Update().

◆ GetPrematureWinner()

◆ GetRealRepFactionForPlayer()

uint32 Battleground::GetRealRepFactionForPlayer ( uint32  factionId,
Player player 
)
756{
757 if (player)
758 {
759 // if the bg team is not the original team, reverse reputation
760 if (player->GetBgTeamId() != player->GetTeamId(true))
761 {
762 switch (factionId)
763 {
765 return BG_REP_AB_HORDE;
766 case BG_REP_AB_HORDE:
767 return BG_REP_AB_ALLIANCE;
769 return BG_REP_AV_HORDE;
770 case BG_REP_AV_HORDE:
771 return BG_REP_AV_ALLIANCE;
773 return BG_REP_WS_HORDE;
774 case BG_REP_WS_HORDE:
775 return BG_REP_WS_ALLIANCE;
776 }
777 }
778 }
779
780 return factionId;
781}
@ BG_REP_AV_HORDE
Definition Battleground.h:153
@ BG_REP_AB_HORDE
Definition Battleground.h:155
@ BG_REP_WS_HORDE
Definition Battleground.h:157
@ BG_REP_WS_ALLIANCE
Definition Battleground.h:158
@ BG_REP_AV_ALLIANCE
Definition Battleground.h:154
@ BG_REP_AB_ALLIANCE
Definition Battleground.h:156
TeamId GetTeamId(bool original=false) const
Definition Player.h:2116

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
431{ return m_ReviveQueue.size(); }

References m_ReviveQueue.

Referenced by _ProcessResurrect().

◆ GetScriptId()

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

References ScriptId.

◆ GetSpectators()

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

References m_Spectators.

◆ GetStartDelayTime()

int32 Battleground::GetStartDelayTime ( ) const
inline

◆ GetStartMaxDist()

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

References m_StartMaxDist.

Referenced by _CheckSafePositions().

◆ GetStartTime()

◆ GetStatus()

BattlegroundStatus Battleground::GetStatus ( ) const
inline
333{ 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
668{
669 ASSERT(teamId < TEAM_NEUTRAL);
670 return &_startPosition[teamId];
671}
std::array< Position, PVP_TEAMS_COUNT > _startPosition
Definition Battleground.h:743

References _startPosition, ASSERT, and TEAM_NEUTRAL.

Referenced by _CheckSafePositions().

◆ GetUniqueBracketId()

uint8 Battleground::GetUniqueBracketId ( ) const
1850{
1851 return GetMaxLevel() / 10;
1852}

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.

1717{
1718 // Keep in mind that for arena this will have to be changed a bit
1719
1720 // Add +1 deaths
1721 UpdatePlayerScore(victim, SCORE_DEATHS, 1);
1722 // Add +1 kills to group and +1 killing_blows to killer
1723 if (killer)
1724 {
1725 // Don't reward credit for killing ourselves, like fall damage of hellfire (warlock)
1726 if (killer == victim)
1727 return;
1728
1731
1732 for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
1733 {
1734 Player* creditedPlayer = itr->second;
1735 if (creditedPlayer == killer)
1736 continue;
1737
1738 if (creditedPlayer->GetBgTeamId() == killer->GetBgTeamId() && (creditedPlayer == killer || creditedPlayer->IsAtGroupRewardDistance(victim)))
1739 UpdatePlayerScore(creditedPlayer, SCORE_HONORABLE_KILLS, 1);
1740 }
1741 }
1742
1743 if (!isArena())
1744 {
1745 // To be able to remove insignia -- ONLY IN Battlegrounds
1746 victim->SetUnitFlag(UNIT_FLAG_SKINNABLE);
1747 RewardXPAtKill(killer, victim);
1748 }
1749}
@ 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:276
void RewardXPAtKill(Player *killer, Player *victim)
Definition Battleground.cpp:1843
bool IsAtGroupRewardDistance(WorldObject const *pRewardSource) const
Definition Player.cpp:12820

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.

521{ }

◆ HandlePlayerResurrect()

virtual void Battleground::HandlePlayerResurrect ( Player )
inlinevirtual

Reimplemented in BattlegroundIC.

532{}

◆ HandlePlayerUnderMap()

virtual bool Battleground::HandlePlayerUnderMap ( Player )
inlinevirtual

◆ HandleTriggerBuff()

void Battleground::HandleTriggerBuff ( GameObject gameObject)
1667{
1668 // Xinef: crash fix?
1669 if (GetStatus() != STATUS_IN_PROGRESS || !GetPlayersSize() || BgObjects.empty())
1670 return;
1671
1672 uint32 index = 0;
1673 for (; index < BgObjects.size() && BgObjects[index] != gameObject->GetGUID(); ++index);
1674 if (BgObjects[index] != gameObject->GetGUID())
1675 {
1676 return;
1677 }
1678
1679 if (m_BuffChange)
1680 {
1681 uint8 buff = urand(0, 2);
1682 if (gameObject->GetEntry() != Buff_Entries[buff])
1683 {
1685 for (uint8 currBuffTypeIndex = 0; currBuffTypeIndex < 3; ++currBuffTypeIndex)
1686 if (gameObject->GetEntry() == Buff_Entries[currBuffTypeIndex])
1687 {
1688 index -= currBuffTypeIndex;
1689 index += buff;
1690 }
1691 }
1692 }
1693
1694 uint32 respawnTime = SPEED_BUFF_RESPAWN_TIME;
1695 if (Map* map = FindBgMap())
1696 {
1697 if (GameObject* obj = map->GetGameObject(BgObjects[index]))
1698 {
1699 switch (obj->GetEntry())
1700 {
1702 respawnTime = RESTORATION_BUFF_RESPAWN_TIME;
1703 break;
1705 respawnTime = BERSERKING_BUFF_RESPAWN_TIME;
1706 break;
1707 default:
1708 break;
1709 }
1710 }
1711 }
1712
1713 SpawnBGObject(index, respawnTime);
1714}
@ RESPAWN_ONE_DAY
Definition Battleground.h:169
const uint32 Buff_Entries[3]
Definition Battleground.h:196
#define SPEED_BUFF_RESPAWN_TIME
Definition Battleground.h:176
@ BG_OBJECTID_REGENBUFF_ENTRY
Definition Battleground.h:192
@ BG_OBJECTID_BERSERKERBUFF_ENTRY
Definition Battleground.h:193
#define RESTORATION_BUFF_RESPAWN_TIME
Definition Battleground.h:174
#define BERSERKING_BUFF_RESPAWN_TIME
Definition Battleground.h:175
uint32 urand(uint32 min, uint32 max)
Definition Random.cpp:44
void SpawnBGObject(uint32 type, uint32 respawntime, uint32 forceRespawnDelay=0)
Definition Battleground.cpp:1513
uint32 GetPlayersSize() const
Definition Battleground.h:420
uint32 GetEntry() const
Definition Object.h:115

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
1289{
1291 return false;
1292 for (uint8 i = 0; i < PVP_TEAMS_COUNT; ++i)
1293 if (GetFreeSlotsForTeam((TeamId)i) > 0)
1294 return true;
1295 return false;
1296}

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

Referenced by BattlegroundQueue::BattlegroundQueueUpdate().

◆ HaveSpectators()

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

References m_Spectators.

Referenced by Player::NeedSendSpectatorData().

◆ IncreaseInvitedCount()

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

References m_BgInvitedPlayers.

Referenced by BattlegroundQueue::InviteGroupToBG().

◆ Init()

void Battleground::Init ( )
virtual

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

1071{
1074 SetStartTime(0);
1075 SetEndTime(0);
1077
1078 m_Events = 0;
1079
1081 {
1082 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);
1083 ABORT();
1084 }
1085
1088 _InBGFreeSlotQueue = false;
1089
1090 m_Players.clear();
1091
1092 for (auto const& itr : PlayerScores)
1093 delete itr.second;
1094
1095 PlayerScores.clear();
1096
1097 for (auto& itr : _arenaTeamScores)
1098 itr.Reset();
1099
1101}
@ STATUS_WAIT_QUEUE
Definition Battleground.h:201
#define ABORT
Definition Errors.h:76
virtual void ResetBGSubclass()
Definition Battleground.h:319
void SetStartTime(uint32 Time)
Definition Battleground.h:376
void SetLastResurrectTime(uint32 Time)
Definition Battleground.h:378

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
344 {
345 // NOTE: this only works when the BG is not a template but the real BG
346 auto maxPlayerLevel = sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL);
347 return GetMinLevel() <= maxPlayerLevel && maxPlayerLevel <= GetMaxLevel();
348 }
@ CONFIG_MAX_PLAYER_LEVEL
Definition IWorld.h:235

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

Referenced by GetMinPlayersPerTeam().

◆ IsPlayerInBattleground()

bool Battleground::IsPlayerInBattleground ( ObjectGuid  guid) const
1757{
1758 BattlegroundPlayerMap::const_iterator itr = m_Players.find(guid);
1759 if (itr != m_Players.end())
1760 return true;
1761 return false;
1762}

References m_Players.

Referenced by ArenaSpectator::HandleSpectatorWatchCommand().

◆ IsRandom()

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

References m_IsRandom.

Referenced by EndBattleground().

◆ isRated()

◆ isTemplate()

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

References m_IsTemplate.

Referenced by GetMinPlayersPerTeam(), and GetMinPlayersPerTeam().

◆ ModifyStartDelayTime()

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

References m_StartDelayTime.

Referenced by _ProcessJoin().

◆ PlayerAddedToBGCheckIfBGIsRunning()

void Battleground::PlayerAddedToBGCheckIfBGIsRunning ( Player player)
protected
1765{
1767 return;
1768
1769 WorldPacket data;
1770 BlockMovement(player);
1771
1773 player->GetSession()->SendPacket(&data);
1774
1775 sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, player->GetCurrentBattlegroundQueueSlot(), STATUS_IN_PROGRESS, GetEndTime(), GetStartTime(), GetArenaType(), player->GetBgTeamId());
1776 player->GetSession()->SendPacket(&data);
1777}
uint32 GetEndTime() const
Definition Battleground.h:336
uint32 GetCurrentBattlegroundQueueSlot() const
Definition Player.h:2264
void SendPacket(WorldPacket const *packet)
Send a packet to the client.
Definition WorldSession.cpp:226

References BlockMovement(), BuildPvPLogDataPacket(), GetArenaType(), Player::GetBgTeamId(), Player::GetCurrentBattlegroundQueueSlot(), GetEndTime(), Player::GetSession(), GetStartTime(), GetStatus(), sBattlegroundMgr, WorldSession::SendPacket(), 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.

709{ }

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().
696{ return true; }

Referenced by Update().

◆ ReadyMarkerClicked()

void Battleground::ReadyMarkerClicked ( Player p)
1305{
1307 return;
1308 readyMarkerClickedSet.insert(p->GetGUID());
1309 uint32 count = readyMarkerClickedSet.size();
1311 ChatHandler(p->GetSession()).SendNotification("You are marked as ready {}/{}", count, req);
1312 if (count == req)
1313 {
1317 }
1318}
@ BG_START_DELAY_15S
Definition Battleground.h:183
static uint8 GetReqPlayersForType(uint32 type)
Definition ArenaTeam.cpp:1022
GuidSet readyMarkerClickedSet
Definition Battleground.h:423
void SendNotification(std::string_view str)
Definition Chat.cpp:105
bool IsSpectator() const
Definition Player.h:2584

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.

1388{
1389 // Those who are waiting to resurrect at this node are taken to the closest own node's graveyard
1390 GuidVector& ghostList = m_ReviveQueue[queueIndex];
1391 if (!ghostList.empty())
1392 {
1393 GraveyardStruct const* closestGrave = nullptr;
1394 for (ObjectGuid const& guid : ghostList)
1395 {
1396 Player* player = ObjectAccessor::FindPlayer(guid);
1397 if (!player)
1398 continue;
1399
1400 if (!closestGrave)
1401 closestGrave = GetClosestGraveyard(player);
1402
1403 if (closestGrave)
1404 player->TeleportTo(GetMapId(), closestGrave->x, closestGrave->y, closestGrave->z, player->GetOrientation());
1405 }
1406
1407 ghostList.clear();
1408 }
1409}
std::vector< ObjectGuid > GuidVector
Definition ObjectGuid.h:256
virtual GraveyardStruct const * GetClosestGraveyard(Player *player)
Definition Battleground.cpp:1816
bool TeleportTo(uint32 mapid, float x, float y, float z, float orientation, uint32 options=0, Unit *target=nullptr, bool newInstance=false)
Definition Player.cpp:1338
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 
)
717{
718 for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
719 if (itr->second->GetBgTeamId() == teamId)
720 itr->second->RemoveAura(spellId);
721}

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.

976{
977 TeamId teamId = player->GetBgTeamId();
978
979 // check if the player was a participant of the match, or only entered through gm command
980 bool participant = false;
981 BattlegroundPlayerMap::iterator itr = m_Players.find(player->GetGUID());
982 if (itr != m_Players.end())
983 {
984 UpdatePlayersCountByTeam(teamId, true); // -1 player
985 m_Players.erase(itr);
986 participant = true;
987 }
988
989 // delete player score if exists
990 auto const& itr2 = PlayerScores.find(player->GetGUID().GetCounter());
991 if (itr2 != PlayerScores.end())
992 {
993 delete itr2->second;
994 PlayerScores.erase(itr2);
995 }
996
998
999 // resurrect on exit
1000 if (!player->IsAlive())
1001 {
1002 player->ResurrectPlayer(1.0f);
1003 player->SpawnCorpseBones();
1004 }
1005
1007
1008 // GetStatus might be changed in RemovePlayer - define it here
1009 BattlegroundStatus status = GetStatus();
1010
1011 // BG subclass specific code
1012 RemovePlayer(player);
1013
1014 // should remove spirit of redemption
1015 if (player->HasSpiritOfRedemptionAura())
1017
1018 // if the player was a match participant
1019 if (participant)
1020 {
1021 player->ClearAfkReports();
1022
1023 WorldPacket data;
1024 sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, player->GetCurrentBattlegroundQueueSlot(), STATUS_NONE, 0, 0, 0, TEAM_NEUTRAL);
1025 player->GetSession()->SendPacket(&data);
1026
1028
1029 // this call is important, because player, when joins to battleground, this method is not called, so it must be called when leaving bg
1030 player->RemoveBattlegroundQueueId(bgQueueTypeId);
1031
1032 // remove from raid group if player is member
1033 if (Group* group = GetBgRaid(teamId))
1034 if (group->IsMember(player->GetGUID()))
1035 if (!group->RemoveMember(player->GetGUID())) // group was disbanded
1036 SetBgRaid(teamId, nullptr);
1037
1038 // let others know
1039 sBattlegroundMgr->BuildPlayerLeftBattlegroundPacket(&data, player->GetGUID());
1040 SendPacketToTeam(teamId, &data, player, false);
1041
1042 // cast deserter
1043 if (isBattleground() && !player->IsGameMaster() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_CAST_DESERTER))
1044 if (status == STATUS_IN_PROGRESS || status == STATUS_WAIT_JOIN)
1046
1047 DecreaseInvitedCount(teamId);
1048
1049 //we should update battleground queue, but only if bg isn't ending
1051 {
1052 BattlegroundTypeId bgTypeId = GetBgTypeID();
1054
1055 // a player has left the battleground, so there are free slots -> add to queue
1057 sBattlegroundMgr->ScheduleQueueUpdate(0, 0, bgQueueTypeId, bgTypeId, GetBracketId());
1058 }
1059 }
1060
1062
1063 // Xinef: remove all criterias on bg leave
1065
1066 sScriptMgr->OnBattlegroundRemovePlayerAtLeave(this, player);
1067}
BattlegroundStatus
Definition Battleground.h:199
@ CONFIG_BATTLEGROUND_CAST_DESERTER
Definition IWorld.h:109
@ DELAYED_SPELL_CAST_DESERTER
Definition Player.h:910
BattlegroundTypeId
Definition SharedDefines.h:3479
BattlegroundQueueTypeId
Definition SharedDefines.h:3619
#define PLAYER_MAX_BATTLEGROUND_QUEUES
Definition SharedDefines.h:176
static BattlegroundQueueTypeId BGQueueTypeId(BattlegroundTypeId bgTypeId, uint8 arenaType)
Definition BattlegroundMgr.cpp:685
void DecreaseInvitedCount(TeamId teamId)
Definition Battleground.h:396
void RemovePlayerFromResurrectQueue(Player *player)
Definition Battleground.cpp:1375
void AddToBGFreeSlotQueue()
Definition Battleground.cpp:1217
virtual void RemovePlayer(Player *)
Definition Battleground.h:630
BattlegroundBracketId GetBracketId() const
Definition Battleground.h:331
LowType GetCounter() const
Definition ObjectGuid.h:145
void ScheduleDelayedOperation(uint32 operation)
Definition Player.h:2107
void ClearAfkReports()
Definition Player.h:2292
void SetBattlegroundId(uint32 id, BattlegroundTypeId bgTypeId, uint32 queueSlot, bool invited, bool isRandom, TeamId teamId)
Definition Player.cpp:12367
void RemoveBattlegroundQueueId(BattlegroundQueueTypeId val)
Definition Player.cpp:12329
bool IsGameMaster() const
Definition Player.h:1175
bool IsAlive() const
Definition Unit.h:1707
bool HasSpiritOfRedemptionAura() const
Definition Unit.h:1718

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(), Player::GetSession(), 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(), WorldSession::SendPacket(), 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)
1376{
1377 for (std::map<ObjectGuid, GuidVector>::iterator itr = m_ReviveQueue.begin(); itr != m_ReviveQueue.end(); ++itr)
1378 for (GuidVector::iterator itr2 = itr->second.begin(); itr2 != itr->second.end(); ++itr2)
1379 if (*itr2 == player->GetGUID())
1380 {
1381 itr->second.erase(itr2);
1383 return;
1384 }
1385}
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:4941

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

Referenced by RemovePlayerAtLeave().

◆ RemoveSpectator()

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

References m_Spectators.

◆ RemoveToBeTeleported()

void Battleground::RemoveToBeTeleported ( ObjectGuid  spectator)
inline
411{ 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.

319{ } // must be implemented in BG subclass

Referenced by Init().

◆ RewardHonorToTeam()

◆ RewardReputationToTeam()

void Battleground::RewardReputationToTeam ( uint32  factionId,
uint32  reputation,
TeamId  teamId 
)
741{
742 for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
743 if (itr->second->GetBgTeamId() == teamId)
744 {
745 uint32 realFactionId = GetRealRepFactionForPlayer(factionId, itr->second);
746
747 float repGain = static_cast<float>(reputation);
748 AddPct(repGain, itr->second->GetTotalAuraModifier(SPELL_AURA_MOD_REPUTATION_GAIN));
749 AddPct(repGain, itr->second->GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_FACTION_REPUTATION_GAIN, realFactionId));
750 if (FactionEntry const* factionEntry = sFactionStore.LookupEntry(realFactionId))
751 itr->second->GetReputationMgr().ModifyReputation(factionEntry, repGain);
752 }
753}
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:67
uint32 GetRealRepFactionForPlayer(uint32 factionId, Player *player)
Definition Battleground.cpp:755
Definition DBCStructure.h:906

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 
)
1844{
1845 if (sWorld->getBoolConfig(CONFIG_BG_XP_FOR_KILL) && killer && victim)
1846 killer->RewardPlayerAndGroupAtKill(victim, true);
1847}
@ CONFIG_BG_XP_FOR_KILL
Definition IWorld.h:115
void RewardPlayerAndGroupAtKill(Unit *victim, bool isBattleGround)
Definition Player.cpp:12787

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 
)
687{
688 sCreatureTextMgr->SendChat(source, textId, target);
689}
#define sCreatureTextMgr
Definition CreatureTextMgr.h:119

References sCreatureTextMgr.

◆ SendPacketToAll()

void Battleground::SendPacketToAll ( WorldPacket const *  packet)
674{
675 for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
676 itr->second->GetSession()->SendPacket(packet);
677}

References m_Players.

Referenced by PlaySoundToAll(), and UpdateWorldState().

◆ SendPacketToTeam()

void Battleground::SendPacketToTeam ( TeamId  teamId,
WorldPacket const *  packet,
Player sender = nullptr,
bool  self = true 
)
680{
681 for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
682 if (itr->second->GetBgTeamId() == teamId && (self || sender != itr->second))
683 itr->second->GetSession()->SendPacket(packet);
684}

References m_Players.

Referenced by AddPlayer(), and RemovePlayerAtLeave().

◆ SetArenaMatchmakerRating()

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

◆ SetArenaorBGType()

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

References m_IsArena.

Referenced by BattlegroundMgr::CreateBattleground().

◆ SetArenaTeamIdForTeam()

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

References m_ArenaTeamIds.

Referenced by BattlegroundQueue::InviteGroupToBG().

◆ SetArenaType()

void Battleground::SetArenaType ( uint8  type)
inline
381{ 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 
)
1807{
1808 Group*& old_raid = m_BgRaids[teamId];
1809 if (old_raid)
1810 old_raid->SetBattlegroundGroup(nullptr);
1811 if (bg_raid)
1812 bg_raid->SetBattlegroundGroup(this);
1813 old_raid = bg_raid;
1814}
void SetBattlegroundGroup(Battleground *bg)
Definition Group.cpp:2390

References m_BgRaids, and Group::SetBattlegroundGroup().

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

◆ SetBgTypeID()

void Battleground::SetBgTypeID ( BattlegroundTypeId  TypeID)
inline
370{ 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)
1822{
1823 m_IsTemplate = false;
1824 m_BracketId = bracketEntry->GetBracketId();
1825 SetLevelRange(bracketEntry->minLevel, bracketEntry->maxLevel);
1826}
void SetLevelRange(uint32 min, uint32 max)
Definition Battleground.h:379

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

Referenced by BattlegroundMgr::CreateNewBattleground().

◆ SetClientInstanceID()

void Battleground::SetClientInstanceID ( uint32  InstanceID)
inline
375{ 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.

575{}

◆ SetEndTime()

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

References m_EndTime.

Referenced by EndNow(), and Init().

◆ SetHoliday()

void Battleground::SetHoliday ( bool  is_holiday)
1790{
1791 m_HonorMode = is_holiday ? BG_HOLIDAY : BG_NORMAL;
1792}
@ BG_HOLIDAY
Definition Battleground.h:281

References BG_HOLIDAY, BG_NORMAL, and m_HonorMode.

◆ SetInstanceID()

void Battleground::SetInstanceID ( uint32  InstanceID)
inline

◆ SetLastResurrectTime()

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

References m_LastResurrectTime.

Referenced by Init(), and StartBattleground().

◆ SetLevelRange()

void Battleground::SetLevelRange ( uint32  min,
uint32  max 
)
inline
379{ 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
445{ m_MapId = MapID; }

References m_MapId.

Referenced by BattlegroundMgr::CreateBattleground().

◆ SetMaxPlayersPerTeam()

void Battleground::SetMaxPlayersPerTeam ( uint32  MaxPlayers)
inline

◆ SetMinPlayersPerTeam()

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

References m_MinPlayersPerTeam.

Referenced by BattlegroundMgr::CreateBattleground().

◆ SetName()

void Battleground::SetName ( std::string_view  name)
inline
369{ 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
384{ ScriptId = scriptId; }

References ScriptId.

Referenced by BattlegroundMgr::CreateBattleground().

◆ SetStartDelayTime()

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

References m_StartDelayTime.

Referenced by _ProcessJoin(), and ReadyMarkerClicked().

◆ SetStartMaxDist()

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

References m_StartMaxDist.

Referenced by BattlegroundMgr::CreateBattleground().

◆ SetStartTime()

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

References m_StartTime.

Referenced by Init(), and StartBattleground().

◆ SetStatus()

◆ SetTeamStartPosition()

void Battleground::SetTeamStartPosition ( TeamId  teamId,
Position const &  pos 
)
662{
663 ASSERT(teamId < TEAM_NEUTRAL);
664 _startPosition[teamId] = pos;
665}

References _startPosition, ASSERT, and TEAM_NEUTRAL.

Referenced by BattlegroundMgr::CreateBattleground().

◆ SetupBattleground()

virtual bool Battleground::SetupBattleground ( )
inlinevirtual

◆ SetWinner()

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

References m_WinnerId.

Referenced by EndBattleground(), and Init().

◆ SpawnBGObject()

void Battleground::SpawnBGObject ( uint32  type,
uint32  respawntime,
uint32  forceRespawnDelay = 0 
)
1514{
1515 if (Map* map = FindBgMap())
1516 if (GameObject* obj = map->GetGameObject(BgObjects[type]))
1517 {
1518 if (respawntime)
1519 obj->SetLootState(GO_JUST_DEACTIVATED);
1520 else if (obj->getLootState() == GO_JUST_DEACTIVATED)
1521 // Change state from GO_JUST_DEACTIVATED to GO_READY in case battleground is starting again
1522 obj->SetLootState(GO_READY);
1523 obj->SetRespawnTime(respawntime);
1524 map->AddToMap(obj);
1525
1526 if (forceRespawnDelay)
1527 {
1528 obj->SetRespawnDelay(forceRespawnDelay);
1529 }
1530 }
1531}
@ 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)
1299{
1300 for (SpectatorList::const_iterator itr = m_Spectators.begin(); itr != m_Spectators.end(); ++itr)
1301 (*itr)->GetSession()->SendPacket(&data);
1302}

References m_Spectators.

◆ SpiritOfCompetitionEvent()

void Battleground::SpiritOfCompetitionEvent ( PvPTeamId  winnerTeamId) const
939{
940 bool isDraw = winnerTeamId == PVP_TEAM_NEUTRAL;
941
942 std::vector<Player*> filteredPlayers;
943 GetBgMap()->DoForAllPlayers([&](Player* player)
944 {
945 // Reward all eligible players the participant reward
948
949 // Collect players of the winning team who has yet to recieve the winner reward
950 if (!isDraw && player->GetBgTeamId() == GetTeamId(winnerTeamId) &&
952 filteredPlayers.push_back(player);
953 });
954
955 // Randomly select one player from winners team to recieve the reward, if any eligible
956 if (!filteredPlayers.empty())
957 {
958 Player* wPlayer = filteredPlayers[rand() % filteredPlayers.size()];
959 wPlayer->CastSpell(wPlayer, SPELL_SPIRIT_OF_COMPETITION_WINNER, true);
960 }
961}
@ SPELL_SPIRIT_OF_COMPETITION_PARTICIPANT
Definition Battleground.h:251
@ QUEST_FLAG_WINNER
Definition Battleground.h:250
@ SPELL_SPIRIT_OF_COMPETITION_WINNER
Definition Battleground.h:252
@ QUEST_FLAG_PARTICIPANT
Definition Battleground.h:249
@ QUEST_STATUS_REWARDED
Definition QuestDef.h:106
QuestStatus GetQuestStatus(uint32 quest_id) const
Definition PlayerQuest.cpp:1430

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 ( )
1104{
1105 SetStartTime(0);
1107
1108 // add BG to free slot queue
1110
1111 // add bg to update list
1112 // this must be done here, because we need to have already invited some players when first Battleground::Update() method is executed
1113 sBattlegroundMgr->AddBattleground(this);
1114
1115 if (m_IsRated)
1116 LOG_DEBUG("bg.arena", "Arena match type: {} for Team1Id: {} - Team2Id: {} started.", m_ArenaType, m_ArenaTeamIds[TEAM_ALLIANCE], m_ArenaTeamIds[TEAM_HORDE]);
1117}

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 
)
1829{
1830 for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
1831 itr->second->StartTimedAchievement(type, entry);
1832}

References GetPlayers().

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

◆ ToBattlegroundAB() [1/2]

BattlegroundAB * Battleground::ToBattlegroundAB ( )
inline
589{ if (GetBgTypeID(true) == BATTLEGROUND_AB) return reinterpret_cast<BattlegroundAB*>(this); else return nullptr; }
@ BATTLEGROUND_AB
Definition SharedDefines.h:3483
Definition BattlegroundAB.h:251

References BATTLEGROUND_AB, and GetBgTypeID().

Referenced by achievement_resilient_victory::OnCheck().

◆ ToBattlegroundAB() [2/2]

BattlegroundAB const * Battleground::ToBattlegroundAB ( ) const
inline
590{ 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
583{ if (GetBgTypeID(true) == BATTLEGROUND_AV) return reinterpret_cast<BattlegroundAV*>(this); else return nullptr; }
@ BATTLEGROUND_AV
Definition SharedDefines.h:3481
Definition BattlegroundAV.h:1763

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
584{ 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
595{ 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
596{ 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
607{ 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
608{ 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
598{ if (GetBgTypeID(true) == BATTLEGROUND_EY) return reinterpret_cast<BattlegroundEY*>(this); else return nullptr; }
@ BATTLEGROUND_EY
Definition SharedDefines.h:3487
Definition BattlegroundEY.h:353

References BATTLEGROUND_EY, and GetBgTypeID().

◆ ToBattlegroundEY() [2/2]

BattlegroundEY const * Battleground::ToBattlegroundEY ( ) const
inline
599{ 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
613{ if (GetBgTypeID(true) == BATTLEGROUND_IC) return reinterpret_cast<BattlegroundIC*>(this); else return nullptr; }
@ BATTLEGROUND_IC
Definition SharedDefines.h:3492
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
614{ 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
592{ 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
593{ 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
601{ 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
602{ 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
610{ 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
611{ 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
604{ if (GetBgTypeID(true) == BATTLEGROUND_SA) return reinterpret_cast<BattlegroundSA*>(this); else return nullptr; }
@ BATTLEGROUND_SA
Definition SharedDefines.h:3489
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
605{ 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
586{ if (GetBgTypeID(true) == BATTLEGROUND_WS) return reinterpret_cast<BattlegroundWS*>(this); else return nullptr; }
@ BATTLEGROUND_WS
Definition SharedDefines.h:3482
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
587{ 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
569{ return m_SetDeleteThis; }

References m_SetDeleteThis.

Referenced by BattlegroundMgr::Update().

◆ Update()

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

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.

1351{
1352 auto const& itr = PlayerScores.find(player->GetGUID().GetCounter());
1353 if (itr == PlayerScores.end()) // player not found...
1354 return false;
1355
1356 if (type == SCORE_BONUS_HONOR && doAddHonor && isBattleground())
1357 player->RewardHonor(nullptr, 1, value); // RewardHonor calls UpdatePlayerScore with doAddHonor = false
1358 else
1359 itr->second->UpdateScore(type, value);
1360
1361 return true;
1362}
bool RewardHonor(Unit *victim, uint32 groupsize, int32 honor=-1, bool awardXP=true)
Definition Player.cpp:6105

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
501 {
502 if (remove)
503 --m_PlayersCount[teamId];
504 else
505 ++m_PlayersCount[teamId];
506 }

References m_PlayersCount.

Referenced by AddPlayer(), and RemovePlayerAtLeave().

◆ UpdateWorldState()

void Battleground::UpdateWorldState ( uint32  variable,
uint32  value 
)
784{
786 worldstate.VariableID = variable;
787 worldstate.Value = value;
788 SendPacketToAll(worldstate.Write());
789}
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 
)
724{
725 for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
726 {
727 WorldPacket data;
728 ChatHandler::BuildChatPacket(data, CHAT_MSG_MONSTER_YELL, Language(language), creature, itr->second, text);
729 itr->second->SendDirectMessage(&data);
730 }
731}
@ CHAT_MSG_MONSTER_YELL
Definition SharedDefines.h:3166
Language
Definition SharedDefines.h:734
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
670{ 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
679{};

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_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: