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

#include "BattlegroundAV.h"

Inheritance diagram for BattlegroundAV:
Battleground

Public Member Functions

 BattlegroundAV ()
 
 ~BattlegroundAV () override=default
 
void AddPlayer (Player *player) override
 
void StartingEventCloseDoors () override
 
void StartingEventOpenDoors () override
 
void RemovePlayer (Player *player) override
 
void HandleAreaTrigger (Player *player, uint32 trigger) override
 
bool SetupBattleground () override
 
void ResetBGSubclass () override
 
void UpdateScore (TeamId teamId, int16 points)
 
bool UpdatePlayerScore (Player *player, uint32 type, uint32 value, bool doAddHonor=true) override
 
void EventPlayerClickedOnFlag (Player *source, GameObject *gameObject) override
 
void HandleKillPlayer (Player *player, Player *killer) override
 
void HandleKillUnit (Creature *unit, Player *killer) override
 
void HandleQuestComplete (uint32 questid, Player *player)
 
bool PlayerCanDoMineQuest (int32 GOId, TeamId teamId)
 
void EndBattleground (TeamId winnerTeamId) override
 
GraveyardStruct const * GetClosestGraveyard (Player *player) override
 
bool IsBothMinesControlledByTeam (TeamId teamId) const
 
bool IsAllTowersControlledAndCaptainAlive (TeamId teamId) const
 
TeamId GetPrematureWinner () override
 
- Public Member Functions inherited from Battleground
 Battleground ()
 
virtual ~Battleground ()
 
void Update (uint32 diff)
 
virtual void Init ()
 
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
 
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)
 
void BlockMovement (Player *player)
 
GroupGetBgRaid (TeamId teamId) const
 
void SetBgRaid (TeamId teamId, Group *bg_raid)
 
void BuildPvPLogDataPacket (WorldPacket &data)
 
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 EventPlayerDroppedFlag (Player *)
 
virtual void EventPlayerDamagedGO (Player *, GameObject *, uint32)
 
virtual void EventPlayerUsedGO (Player *, GameObject *)
 
virtual void DoAction (uint32, ObjectGuid)
 
virtual void HandlePlayerResurrect (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
 
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
 

Private Member Functions

void PostUpdateImpl (uint32 diff) override
 Post-update hook.
 
void EventPlayerAssaultsPoint (Player *player, uint32 object)
 
void EventPlayerDefendsPoint (Player *player, uint32 object)
 
void EventPlayerDestroyedPoint (BG_AV_Nodes node)
 
void AssaultNode (BG_AV_Nodes node, TeamId teamId)
 
void DestroyNode (BG_AV_Nodes node)
 
void InitNode (BG_AV_Nodes node, TeamId teamId, bool tower)
 
void DefendNode (BG_AV_Nodes node, TeamId teamId)
 
void PopulateNode (BG_AV_Nodes node)
 
void DePopulateNode (BG_AV_Nodes node, bool ignoreSpiritGuid=false)
 
BG_AV_Nodes GetNodeThroughObject (uint32 object)
 
uint32 GetObjectThroughNode (BG_AV_Nodes node)
 
bool IsTower (BG_AV_Nodes node)
 
uint8 GetAttackString (BG_AV_Nodes node, TeamId teamId)
 
uint8 GetDefendString (BG_AV_Nodes node, TeamId teamId)
 
uint8 GetMineString (uint8 mine, TeamId teamId)
 
void ChangeMineOwner (uint8 mine, TeamId teamId, bool initial=false)
 
void FillInitialWorldStates (WorldPackets::WorldState::InitWorldStates &packet) override
 
uint8 GetWorldStateType (uint8 state, TeamId teamId)
 
void SendMineWorldStates (uint32 mine)
 
void UpdateNodeWorldState (BG_AV_Nodes node)
 
CreatureAddAVCreature (uint16 cinfoid, uint16 type)
 

Private Attributes

int32 m_Team_Scores [2] {}
 
uint32 m_Team_QuestStatus [2][9] {}
 
BG_AV_NodeInfo m_Nodes [BG_AV_NODES_MAX] {}
 
TeamId m_Mine_Owner [2] {}
 
int32 m_Mine_Timer
 
uint32 m_Mine_Reclaim_Timer [2] {}
 
uint32 m_CaptainBuffTimer [2] {}
 
bool m_CaptainAlive [2] {}
 
bool m_IsInformedNearVictory [2] {}
 

Additional Inherited Members

- Public Types inherited from Battleground
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
 
- Static Public Member Functions inherited from Battleground
static TeamId GetOtherTeamId (TeamId teamId)
 
- Public Attributes inherited from Battleground
GuidSet readyMarkerClickedSet
 
ArenaLogEntryDataMap ArenaLogEntries
 
BGObjects BgObjects
 
BGCreatures BgCreatures
 
- Protected Member Functions inherited from Battleground
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)
 
- Protected Attributes inherited from Battleground
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
 

Detailed Description

Constructor & Destructor Documentation

◆ BattlegroundAV()

BattlegroundAV::BattlegroundAV ( )
41{
44
45 for (uint8 i = 0; i < 2; i++)
46 {
47 for (uint8 j = 0; j < 9; j++)
48 m_Team_QuestStatus[i][j] = 0;
49 m_Team_Scores[i] = 0;
50 m_IsInformedNearVictory[i] = false;
51 m_CaptainAlive[i] = true;
52 m_CaptainBuffTimer[i] = 0;
55 }
56
57 m_Mine_Timer = 0;
58
60 InitNode(i, TEAM_NEUTRAL, false);
61
65}
BG_AV_Nodes
Definition BattlegroundAV.h:175
@ BG_AV_NODES_FIRSTAID_STATION
Definition BattlegroundAV.h:176
@ BG_AV_NODES_MAX
Definition BattlegroundAV.h:192
@ BG_AV_OBJECT_MAX
Definition BattlegroundAV.h:333
@ AV_STATICCPLACE_MAX
Definition BattlegroundAV.h:111
@ AV_CPLACE_MAX
Definition BattlegroundAV.h:847
@ BG_AV_TEXT_START_HALF_MINUTE
Definition BattlegroundAV.h:55
@ BG_AV_TEXT_START_ONE_MINUTE
Definition BattlegroundAV.h:54
@ BG_AV_TEXT_BATTLE_HAS_BEGUN
Definition BattlegroundAV.h:56
@ BG_STARTING_EVENT_THIRD
Definition Battleground.h:242
@ BG_STARTING_EVENT_SECOND
Definition Battleground.h:241
@ BG_STARTING_EVENT_FOURTH
Definition Battleground.h:243
std::uint8_t uint8
Definition Define.h:109
std::uint16_t uint16
Definition Define.h:108
@ TEAM_NEUTRAL
Definition SharedDefines.h:762
int32 m_Mine_Timer
Definition BattlegroundAV.h:1842
void InitNode(BG_AV_Nodes node, TeamId teamId, bool tower)
Definition BattlegroundAV.cpp:1742
int32 m_Team_Scores[2]
Definition BattlegroundAV.h:1836
bool m_IsInformedNearVictory[2]
Definition BattlegroundAV.h:1847
uint32 m_CaptainBuffTimer[2]
Definition BattlegroundAV.h:1844
uint32 m_Mine_Reclaim_Timer[2]
Definition BattlegroundAV.h:1843
uint32 m_Team_QuestStatus[2][9]
Definition BattlegroundAV.h:1837
TeamId m_Mine_Owner[2]
Definition BattlegroundAV.h:1841
bool m_CaptainAlive[2]
Definition BattlegroundAV.h:1845
BGObjects BgObjects
Definition Battleground.h:550
BGCreatures BgCreatures
Definition Battleground.h:551
uint32 StartMessageIds[BG_STARTING_EVENT_COUNT]
Definition Battleground.h:641

References AV_CPLACE_MAX, AV_STATICCPLACE_MAX, BG_AV_NODES_FIRSTAID_STATION, BG_AV_NODES_MAX, BG_AV_OBJECT_MAX, BG_AV_TEXT_BATTLE_HAS_BEGUN, BG_AV_TEXT_START_HALF_MINUTE, BG_AV_TEXT_START_ONE_MINUTE, BG_STARTING_EVENT_FOURTH, BG_STARTING_EVENT_SECOND, BG_STARTING_EVENT_THIRD, Battleground::BgCreatures, Battleground::BgObjects, InitNode(), m_CaptainAlive, m_CaptainBuffTimer, m_IsInformedNearVictory, m_Mine_Owner, m_Mine_Reclaim_Timer, m_Mine_Timer, m_Team_QuestStatus, m_Team_Scores, Battleground::StartMessageIds, and TEAM_NEUTRAL.

◆ ~BattlegroundAV()

BattlegroundAV::~BattlegroundAV ( )
overridedefault

Member Function Documentation

◆ AddAVCreature()

Creature * BattlegroundAV::AddAVCreature ( uint16  cinfoid,
uint16  type 
)
private
Todo:
: look if this can be done by database + also add this for the wingcommanders
301{
302 bool isStatic = false;
303 Creature* creature = nullptr;
304 ASSERT(type <= static_cast<uint16>(AV_CPLACE_MAX) + AV_STATICCPLACE_MAX);
305 if (type >= AV_CPLACE_MAX) //static
306 {
307 type -= AV_CPLACE_MAX;
308 cinfoid = uint16(BG_AV_StaticCreaturePos[type][4]);
309 creature = AddCreature(BG_AV_StaticCreatureInfo[cinfoid],
310 type + AV_CPLACE_MAX,
314 BG_AV_StaticCreaturePos[type][3]);
315 isStatic = true;
316 }
317 else
318 {
319 creature = AddCreature(BG_AV_CreatureInfo[cinfoid],
320 type,
321 BG_AV_CreaturePos[type][0],
322 BG_AV_CreaturePos[type][1],
323 BG_AV_CreaturePos[type][2],
324 BG_AV_CreaturePos[type][3]);
325 }
326 if (!creature)
327 return nullptr;
330
333
334 if ((isStatic && cinfoid >= 10 && cinfoid <= 14) || (!isStatic && ((cinfoid >= AV_NPC_A_GRAVEDEFENSE0 && cinfoid <= AV_NPC_A_GRAVEDEFENSE3) ||
335 (cinfoid >= AV_NPC_H_GRAVEDEFENSE0 && cinfoid <= AV_NPC_H_GRAVEDEFENSE3))))
336 {
337 if (!isStatic && ((cinfoid >= AV_NPC_A_GRAVEDEFENSE0 && cinfoid <= AV_NPC_A_GRAVEDEFENSE3)
338 || (cinfoid >= AV_NPC_H_GRAVEDEFENSE0 && cinfoid <= AV_NPC_H_GRAVEDEFENSE3)))
339 {
340 CreatureData& data = sObjectMgr->NewOrExistCreatureData(creature->GetSpawnId());
341 data.wander_distance = 5;
342 }
343 //else wander_distance will be 15, so creatures move maximum=10
344 //creature->SetDefaultMovementType(RANDOM_MOTION_TYPE);
345 creature->GetMotionMaster()->Initialize();
347 creature->Respawn();
348 //TODO: find a way to add a motionmaster without killing the creature (i
349 //just copied this code from a gm-command
350 }
351
352 uint32 triggerSpawnID = 0;
353 uint32 newFaction = 0;
354 if (creature->GetEntry() == BG_AV_CreatureInfo[AV_NPC_A_CAPTAIN])
355 {
356 triggerSpawnID = AV_CPLACE_TRIGGER16;
357 newFaction = 84;
358 }
359 else if (creature->GetEntry() == BG_AV_CreatureInfo[AV_NPC_A_BOSS])
360 {
361 triggerSpawnID = AV_CPLACE_TRIGGER17;
362 newFaction = 84;
363 }
364 else if (creature->GetEntry() == BG_AV_CreatureInfo[AV_NPC_H_CAPTAIN])
365 {
366 triggerSpawnID = AV_CPLACE_TRIGGER18;
367 newFaction = 83;
368 }
369 else if (creature->GetEntry() == BG_AV_CreatureInfo[AV_NPC_H_BOSS])
370 {
371 triggerSpawnID = AV_CPLACE_TRIGGER19;
372 newFaction = 83;
373 }
374 if (triggerSpawnID && newFaction)
375 {
376 if (Creature* trigger = AddCreature(WORLD_TRIGGER,
377 triggerSpawnID,
378 BG_AV_CreaturePos[triggerSpawnID][0],
379 BG_AV_CreaturePos[triggerSpawnID][1],
380 BG_AV_CreaturePos[triggerSpawnID][2],
381 BG_AV_CreaturePos[triggerSpawnID][3]))
382 {
383 trigger->SetFaction(newFaction);
384 trigger->CastSpell(trigger, SPELL_HONORABLE_DEFENDER_25Y, false);
385 }
386 }
387
388 return creature;
389}
const uint32 BG_AV_StaticCreatureInfo[51]
Definition BattlegroundAV.h:1455
const float BG_AV_CreaturePos[AV_CPLACE_MAX][4]
Definition BattlegroundAV.h:854
const float BG_AV_StaticCreaturePos[AV_STATICCPLACE_MAX][5]
Definition BattlegroundAV.h:1327
@ AV_NPC_H_TOWERDEFENSE
Definition BattlegroundAV.h:1226
@ AV_NPC_A_GRAVEDEFENSE3
Definition BattlegroundAV.h:1217
@ AV_NPC_H_GRAVEDEFENSE0
Definition BattlegroundAV.h:1222
@ AV_NPC_H_CAPTAIN
Definition BattlegroundAV.h:1227
@ AV_NPC_A_TOWERDEFENSE
Definition BattlegroundAV.h:1218
@ AV_NPC_A_GRAVEDEFENSE0
Definition BattlegroundAV.h:1214
@ AV_NPC_H_BOSS
Definition BattlegroundAV.h:1228
@ AV_NPC_A_BOSS
Definition BattlegroundAV.h:1220
@ AV_NPC_H_GRAVEDEFENSE3
Definition BattlegroundAV.h:1225
@ AV_NPC_A_CAPTAIN
Definition BattlegroundAV.h:1219
const uint32 BG_AV_CreatureInfo[AV_NPC_INFO_MAX]
Definition BattlegroundAV.h:1267
@ AV_CPLACE_TRIGGER18
Definition BattlegroundAV.h:844
@ AV_CPLACE_TRIGGER19
Definition BattlegroundAV.h:845
@ AV_CPLACE_TRIGGER17
Definition BattlegroundAV.h:843
@ AV_CPLACE_TRIGGER16
Definition BattlegroundAV.h:842
@ RESPAWN_ONE_DAY
Definition Battleground.h:169
@ SPELL_HONORABLE_DEFENDER_25Y
Definition Battleground.h:147
std::uint32_t uint32
Definition Define.h:107
#define ASSERT
Definition Errors.h:68
bool isStatic(MovementGenerator *movement)
Definition MotionMaster.cpp:68
#define sObjectMgr
Definition ObjectMgr.h:1636
@ UNIT_FLAG_DISABLE_MOVE
Definition UnitDefines.h:252
#define WORLD_TRIGGER
Definition Unit.h:37
Creature * AddCreature(uint32 entry, uint32 type, float x, float y, float z, float o, uint32 respawntime=0, MotionTransport *transport=nullptr)
Definition Battleground.cpp:1533
Definition Creature.h:43
void setDeathState(DeathState s, bool despawn=false) override
A creature can be in 4 different states: Alive, JustDied, Corpse, and JustRespawned....
Definition Creature.cpp:1971
void Respawn(bool force=false)
Definition Creature.cpp:2044
void SetRespawnDelay(uint32 delay)
Definition Creature.h:296
ObjectGuid::LowType GetSpawnId() const
Definition Creature.h:65
void Initialize()
Definition MotionMaster.cpp:73
uint32 GetEntry() const
Definition Object.h:115
MotionMaster * GetMotionMaster()
Definition Unit.h:1673
void SetUnitFlag(UnitFlags flags)
UnitFlags available in UnitDefines.h.
Definition Unit.h:719
Definition CreatureData.h:370
float wander_distance
Definition CreatureData.h:384

References Battleground::AddCreature(), ASSERT, AV_CPLACE_MAX, AV_CPLACE_TRIGGER16, AV_CPLACE_TRIGGER17, AV_CPLACE_TRIGGER18, AV_CPLACE_TRIGGER19, AV_NPC_A_BOSS, AV_NPC_A_CAPTAIN, AV_NPC_A_GRAVEDEFENSE0, AV_NPC_A_GRAVEDEFENSE3, AV_NPC_A_TOWERDEFENSE, AV_NPC_H_BOSS, AV_NPC_H_CAPTAIN, AV_NPC_H_GRAVEDEFENSE0, AV_NPC_H_GRAVEDEFENSE3, AV_NPC_H_TOWERDEFENSE, AV_STATICCPLACE_MAX, BG_AV_CreatureInfo, BG_AV_CreaturePos, BG_AV_StaticCreatureInfo, BG_AV_StaticCreaturePos, Object::GetEntry(), Unit::GetMotionMaster(), Creature::GetSpawnId(), MotionMaster::Initialize(), isStatic(), JustDied, Creature::Respawn(), RESPAWN_ONE_DAY, Creature::setDeathState(), Creature::SetRespawnDelay(), Unit::SetUnitFlag(), sObjectMgr, SPELL_HONORABLE_DEFENDER_25Y, UNIT_FLAG_DISABLE_MOVE, CreatureData::wander_distance, and WORLD_TRIGGER.

Referenced by ChangeMineOwner(), PopulateNode(), and SetupBattleground().

◆ AddPlayer()

void BattlegroundAV::AddPlayer ( Player player)
overridevirtual

Reimplemented from Battleground.

495{
497 PlayerScores.emplace(player->GetGUID().GetCounter(), new BattlegroundAVScore(player->GetGUID()));
498}
virtual void AddPlayer(Player *player)
Definition Battleground.cpp:1119
BattlegroundScoreMap PlayerScores
Definition Battleground.h:628
LowType GetCounter() const
Definition ObjectGuid.h:145
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:112
Definition BattlegroundAV.h:1714

References Battleground::AddPlayer(), ObjectGuid::GetCounter(), Object::GetGUID(), and Battleground::PlayerScores.

◆ AssaultNode()

void BattlegroundAV::AssaultNode ( BG_AV_Nodes  node,
TeamId  teamId 
)
private
1702{
1703 if (m_Nodes[node].TotalOwnerId == teamId)
1704 {
1705 LOG_FATAL("bg.battleground", "Assaulting team is TotalOwner of node");
1706 ABORT();
1707 }
1708 if (m_Nodes[node].OwnerId == teamId)
1709 {
1710 LOG_FATAL("bg.battleground", "Assaulting team is owner of node");
1711 ABORT();
1712 }
1713 if (m_Nodes[node].State == POINT_DESTROYED)
1714 {
1715 LOG_FATAL("bg.battleground", "Destroyed node is being assaulted");
1716 ABORT();
1717 }
1718 if (m_Nodes[node].State == POINT_ASSAULTED && m_Nodes[node].TotalOwnerId != TEAM_NEUTRAL) //only assault an assaulted node if no totalowner exists
1719 {
1720 LOG_FATAL("bg.battleground", "Assault on an not assaulted node with total owner");
1721 ABORT();
1722 }
1723 //the timer gets another time, if the previous owner was 0 == Neutral
1725 m_Nodes[node].PrevOwnerId = m_Nodes[node].OwnerId;
1726 m_Nodes[node].OwnerId = teamId;
1727 m_Nodes[node].PrevState = m_Nodes[node].State;
1729}
@ POINT_DESTROYED
Definition BattlegroundAV.h:1548
@ POINT_ASSAULTED
Definition BattlegroundAV.h:1547
#define BG_AV_SNOWFALL_FIRSTCAP
Definition BattlegroundAV.h:26
#define BG_AV_CAPTIME
Definition BattlegroundAV.h:25
#define ABORT
Definition Errors.h:76
#define LOG_FATAL(filterType__,...)
Definition Log.h:153
BG_AV_NodeInfo m_Nodes[BG_AV_NODES_MAX]
Definition BattlegroundAV.h:1839
BG_AV_States State
Definition BattlegroundAV.h:1702
TeamId PrevOwnerId
Definition BattlegroundAV.h:1707
uint32 Timer
Definition BattlegroundAV.h:1704
BG_AV_States PrevState
Definition BattlegroundAV.h:1703
TeamId OwnerId
Definition BattlegroundAV.h:1706

References ABORT, BG_AV_CAPTIME, BG_AV_SNOWFALL_FIRSTCAP, LOG_FATAL, m_Nodes, BG_AV_NodeInfo::OwnerId, POINT_ASSAULTED, POINT_DESTROYED, BG_AV_NodeInfo::PrevOwnerId, BG_AV_NodeInfo::PrevState, BG_AV_NodeInfo::State, TEAM_NEUTRAL, and BG_AV_NodeInfo::Timer.

Referenced by EventPlayerAssaultsPoint().

◆ ChangeMineOwner()

void BattlegroundAV::ChangeMineOwner ( uint8  mine,
TeamId  teamId,
bool  initial = false 
)
private
662{
663 // mine=0 northmine mine=1 southmin
664 // changing the owner results in setting respawntim to infinite for current creatures,
665 // spawning new mine owners creatures and changing the chest-objects so that the current owning team can use them
666
667 ASSERT(mine == AV_NORTH_MINE || mine == AV_SOUTH_MINE);
668 if (teamId == TEAM_ALLIANCE || teamId == TEAM_HORDE)
670
671 if (m_Mine_Owner[mine] == teamId && !initial)
672 return;
673 m_Mine_Owner[mine] = teamId;
674
675 if (!initial)
676 {
677 LOG_DEBUG("bg.battleground", "bg_av depopulating mine {} (0=north, 1=south)", mine);
678 if (mine == AV_SOUTH_MINE)
680 if (BgCreatures[i])
681 DelCreature(i); //TODO just set the respawntime to 999999
683 if (BgCreatures[i])
684 DelCreature(i); //TODO here also
685 }
687
688 LOG_DEBUG("bg.battleground", "bg_av populating mine {} (0=north, 1=south)", mine);
689 uint16 miner;
690 //also neutral team exists.. after a big time, the neutral team tries to conquer the mine
691 if (mine == AV_NORTH_MINE)
692 {
693 if (teamId == TEAM_ALLIANCE)
694 miner = AV_NPC_N_MINE_A_1;
695 else if (teamId == TEAM_HORDE)
696 miner = AV_NPC_N_MINE_H_1;
697 else
698 miner = AV_NPC_N_MINE_N_1;
699 }
700 else
701 {
702 uint16 cinfo;
703 if (teamId == TEAM_ALLIANCE)
704 miner = AV_NPC_S_MINE_A_1;
705 else if (teamId == TEAM_HORDE)
706 miner = AV_NPC_S_MINE_H_1;
707 else
708 miner = AV_NPC_S_MINE_N_1;
709 //vermin
710 LOG_DEBUG("bg.battleground", "spawning vermin");
711 if (teamId == TEAM_ALLIANCE)
712 cinfo = AV_NPC_S_MINE_A_3;
713 else if (teamId == TEAM_HORDE)
714 cinfo = AV_NPC_S_MINE_H_3;
715 else
716 cinfo = AV_NPC_S_MINE_N_S;
718 AddAVCreature(cinfo, i);
719 }
721 AddAVCreature(miner, i);
722 //the next chooses randomly between 2 cretures
724 AddAVCreature(miner + (urand(1, 2)), i);
726
727 if (teamId == TEAM_ALLIANCE || teamId == TEAM_HORDE)
728 {
730 if (Creature* creature = GetBGCreature(AV_CPLACE_HERALD))
731 creature->AI()->Talk(GetMineString(mine, teamId));
732 }
733 else
734 {
735 if (mine == AV_SOUTH_MINE) //i think this gets called all the time
736 {
738 {
739 std::string creatureText = sCreatureTextMgr->GetLocalizedChatString(creature->GetEntry(), creature->getGender(), 0, 0, DEFAULT_LOCALE);
740 YellToAll(creature, creatureText.c_str(), LANG_UNIVERSAL);
741 }
742 }
743 }
744}
@ AV_SOUND_HORDE_GOOD
Definition BattlegroundAV.h:102
@ AV_SOUND_ALLIANCE_GOOD
Definition BattlegroundAV.h:101
@ AV_MINE_RECLAIM_TIMER
Definition BattlegroundAV.h:115
@ AV_NORTH_MINE
Definition BattlegroundAV.h:112
@ AV_SOUTH_MINE
Definition BattlegroundAV.h:113
@ AV_NPC_N_MINE_H_1
Definition BattlegroundAV.h:1246
@ AV_NPC_S_MINE_N_S
Definition BattlegroundAV.h:1254
@ AV_NPC_S_MINE_N_1
Definition BattlegroundAV.h:1250
@ AV_NPC_N_MINE_N_1
Definition BattlegroundAV.h:1238
@ AV_NPC_S_MINE_H_1
Definition BattlegroundAV.h:1259
@ AV_NPC_N_MINE_A_1
Definition BattlegroundAV.h:1242
@ AV_NPC_S_MINE_H_3
Definition BattlegroundAV.h:1261
@ AV_NPC_S_MINE_A_3
Definition BattlegroundAV.h:1257
@ AV_NPC_S_MINE_A_1
Definition BattlegroundAV.h:1255
@ AV_CPLACE_MINE_S_2_MAX
Definition BattlegroundAV.h:814
@ AV_CPLACE_MINE_N_1_MIN
Definition BattlegroundAV.h:801
@ AV_CPLACE_MINE_S_S_MIN
Definition BattlegroundAV.h:816
@ AV_CPLACE_MINE_S_2_MIN
Definition BattlegroundAV.h:813
@ AV_CPLACE_MINE_S_1_MIN
Definition BattlegroundAV.h:810
@ AV_CPLACE_MINE_S_S_MAX
Definition BattlegroundAV.h:817
@ AV_CPLACE_MINE_N_2_MAX
Definition BattlegroundAV.h:805
@ AV_CPLACE_MINE_N_1_MAX
Definition BattlegroundAV.h:802
@ AV_CPLACE_MINE_S_3
Definition BattlegroundAV.h:819
@ AV_CPLACE_MINE_S_1_MAX
Definition BattlegroundAV.h:811
@ AV_CPLACE_MINE_N_3
Definition BattlegroundAV.h:807
@ AV_CPLACE_HERALD
Definition BattlegroundAV.h:822
@ AV_CPLACE_MINE_N_2_MIN
Definition BattlegroundAV.h:804
#define DEFAULT_LOCALE
Definition Common.h:79
#define sCreatureTextMgr
Definition CreatureTextMgr.h:119
#define LOG_DEBUG(filterType__,...)
Definition Log.h:169
uint32 urand(uint32 min, uint32 max)
Definition Random.cpp:44
@ LANG_UNIVERSAL
Definition SharedDefines.h:735
@ TEAM_ALLIANCE
Definition SharedDefines.h:760
@ TEAM_HORDE
Definition SharedDefines.h:761
uint8 GetMineString(uint8 mine, TeamId teamId)
Definition BattlegroundAV.cpp:1677
Creature * AddAVCreature(uint16 cinfoid, uint16 type)
Definition BattlegroundAV.cpp:300
void SendMineWorldStates(uint32 mine)
Definition BattlegroundAV.cpp:1166
bool DelCreature(uint32 type)
Definition Battleground.cpp:1596
void YellToAll(Creature *creature, const char *text, uint32 language)
Definition Battleground.cpp:723
Creature * GetBGCreature(uint32 type)
Definition Battleground.cpp:1504
void PlaySoundToAll(uint32 soundId)
Definition Battleground.cpp:704
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr, Milliseconds delay=0s)
Causes the creature to talk/say the text assigned to their entry in the creature_text database table.
Definition CreatureAI.cpp:50
CreatureAI * AI() const
Definition Creature.h:141

References AddAVCreature(), Creature::AI(), ASSERT, AV_CPLACE_HERALD, AV_CPLACE_MINE_N_1_MAX, AV_CPLACE_MINE_N_1_MIN, AV_CPLACE_MINE_N_2_MAX, AV_CPLACE_MINE_N_2_MIN, AV_CPLACE_MINE_N_3, AV_CPLACE_MINE_S_1_MAX, AV_CPLACE_MINE_S_1_MIN, AV_CPLACE_MINE_S_2_MAX, AV_CPLACE_MINE_S_2_MIN, AV_CPLACE_MINE_S_3, AV_CPLACE_MINE_S_S_MAX, AV_CPLACE_MINE_S_S_MIN, AV_MINE_RECLAIM_TIMER, AV_NORTH_MINE, AV_NPC_N_MINE_A_1, AV_NPC_N_MINE_H_1, AV_NPC_N_MINE_N_1, AV_NPC_S_MINE_A_1, AV_NPC_S_MINE_A_3, AV_NPC_S_MINE_H_1, AV_NPC_S_MINE_H_3, AV_NPC_S_MINE_N_1, AV_NPC_S_MINE_N_S, AV_SOUND_ALLIANCE_GOOD, AV_SOUND_HORDE_GOOD, AV_SOUTH_MINE, Battleground::BgCreatures, DEFAULT_LOCALE, Battleground::DelCreature(), Battleground::GetBGCreature(), GetMineString(), LANG_UNIVERSAL, LOG_DEBUG, m_Mine_Owner, m_Mine_Reclaim_Timer, Battleground::PlaySoundToAll(), sCreatureTextMgr, SendMineWorldStates(), CreatureAI::Talk(), TEAM_ALLIANCE, TEAM_HORDE, urand(), and Battleground::YellToAll().

Referenced by HandleKillUnit(), PostUpdateImpl(), and StartingEventOpenDoors().

◆ DefendNode()

void BattlegroundAV::DefendNode ( BG_AV_Nodes  node,
TeamId  teamId 
)
private
1754{
1755 ASSERT(m_Nodes[node].TotalOwnerId == teamId);
1756 ASSERT(m_Nodes[node].OwnerId != teamId);
1757 ASSERT(m_Nodes[node].State != POINT_CONTROLED && m_Nodes[node].State != POINT_DESTROYED);
1758 m_Nodes[node].PrevOwnerId = m_Nodes[node].OwnerId;
1759 m_Nodes[node].OwnerId = teamId;
1760 m_Nodes[node].PrevState = m_Nodes[node].State;
1762 m_Nodes[node].Timer = 0;
1763}
@ POINT_CONTROLED
Definition BattlegroundAV.h:1549

References ASSERT, m_Nodes, BG_AV_NodeInfo::OwnerId, POINT_CONTROLED, POINT_DESTROYED, BG_AV_NodeInfo::PrevOwnerId, BG_AV_NodeInfo::PrevState, BG_AV_NodeInfo::State, and BG_AV_NodeInfo::Timer.

Referenced by EventPlayerDefendsPoint().

◆ DePopulateNode()

void BattlegroundAV::DePopulateNode ( BG_AV_Nodes  node,
bool  ignoreSpiritGuid = false 
)
private
810{
811 uint32 c_place = AV_CPLACE_DEFENSE_STORM_AID + (4 * node);
812 for (uint8 i = 0; i < 4; i++)
813 {
814 if (BgCreatures[c_place + i])
815 {
816 DelCreature(c_place + i);
817 }
818 }
819
820 //spiritguide
821 if (!ignoreSpiritGuide && !IsTower(node))
822 {
823 DelCreature(node);
824 }
825
826 //remove bonus honor aura trigger creature when node is lost
827 if (node < BG_AV_NODES_MAX)//fail safe
828 DelCreature(node + 302);//nullptr checks are in DelCreature! 0-302 spirit guides
829}
@ AV_CPLACE_DEFENSE_STORM_AID
Definition BattlegroundAV.h:774
bool IsTower(BG_AV_Nodes node)
Definition BattlegroundAV.h:1817

References AV_CPLACE_DEFENSE_STORM_AID, BG_AV_NODES_MAX, Battleground::BgCreatures, Battleground::DelCreature(), and IsTower().

Referenced by EventPlayerAssaultsPoint(), and HandleQuestComplete().

◆ DestroyNode()

void BattlegroundAV::DestroyNode ( BG_AV_Nodes  node)
private

◆ EndBattleground()

void BattlegroundAV::EndBattleground ( TeamId  winnerTeamId)
overridevirtual
Deprecated:
need delete

Reimplemented from Battleground.

501{
502 //calculate bonuskills for both teams:
503 //first towers:
504 uint8 kills[2] = {0, 0}; // 0 = Alliance 1 = Horde
505 uint8 rep[2] = {0, 0}; // 0 = Alliance 1 = Horde
507 {
508 if (m_Nodes[i].State == POINT_CONTROLED)
509 {
510 if (m_Nodes[i].OwnerId == TEAM_ALLIANCE)
511 {
513 kills[0] += BG_AV_KILL_SURVIVING_TOWER;
514 }
515 else
516 {
518 kills[1] += BG_AV_KILL_SURVIVING_TOWER;
519 }
520 }
521 }
522
523 for (TeamId iTeamId = TEAM_ALLIANCE; iTeamId <= TEAM_HORDE; iTeamId = TeamId(iTeamId + 1))
524 {
525 if (m_CaptainAlive[iTeamId])
526 {
527 kills[iTeamId] += BG_AV_KILL_SURVIVING_CAPTAIN;
528 rep[iTeamId] += BG_AV_REP_SURVIVING_CAPTAIN;
529 }
530 if (rep[iTeamId] != 0)
531 RewardReputationToTeam(iTeamId == TEAM_ALLIANCE ? 730 : 729, rep[iTeamId], iTeamId);
532 if (kills[iTeamId] != 0)
533 RewardHonorToTeam(GetBonusHonorFromKill(kills[iTeamId]), iTeamId);
534 }
535
536 //TODO add enterevademode for all attacking creatures
537 Battleground::EndBattleground(winnerTeamId);
538}
@ BG_AV_NODES_FROSTWOLF_WTOWER
Definition BattlegroundAV.h:190
@ BG_AV_NODES_DUNBALDAR_SOUTH
Definition BattlegroundAV.h:183
#define BG_AV_KILL_SURVIVING_TOWER
Definition BattlegroundAV.h:44
#define BG_AV_REP_SURVIVING_CAPTAIN
Definition BattlegroundAV.h:48
#define BG_AV_REP_SURVIVING_TOWER
Definition BattlegroundAV.h:45
#define BG_AV_KILL_SURVIVING_CAPTAIN
Definition BattlegroundAV.h:47
TeamId
Definition SharedDefines.h:759
void RewardReputationToTeam(uint32 factionId, uint32 reputation, TeamId teamId)
Definition Battleground.cpp:740
void EndBattleground(PvPTeamId winnerTeamId)
Definition Battleground.cpp:791
uint32 GetBonusHonorFromKill(uint32 kills) const
Definition Battleground.cpp:963
void RewardHonorToTeam(uint32 honor, TeamId teamId)
Definition Battleground.cpp:733

References BG_AV_KILL_SURVIVING_CAPTAIN, BG_AV_KILL_SURVIVING_TOWER, BG_AV_NODES_DUNBALDAR_SOUTH, BG_AV_NODES_FROSTWOLF_WTOWER, BG_AV_REP_SURVIVING_CAPTAIN, BG_AV_REP_SURVIVING_TOWER, Battleground::EndBattleground(), Battleground::GetBonusHonorFromKill(), m_CaptainAlive, m_Nodes, POINT_CONTROLED, Battleground::RewardHonorToTeam(), Battleground::RewardReputationToTeam(), TEAM_ALLIANCE, and TEAM_HORDE.

Referenced by HandleKillUnit(), and UpdateScore().

◆ EventPlayerAssaultsPoint()

void BattlegroundAV::EventPlayerAssaultsPoint ( Player player,
uint32  object 
)
private
988{
990
991 BG_AV_Nodes node = GetNodeThroughObject(object);
992 TeamId prevOwnerId = m_Nodes[node].OwnerId;
993 TeamId teamId = player->GetTeamId();
994 LOG_DEBUG("bg.battleground", "bg_av: player assaults point object {} node {}", object, node);
995 if (prevOwnerId == teamId || teamId == m_Nodes[node].TotalOwnerId)
996 return; //surely a gm used this object
997
998 if (node == BG_AV_NODES_SNOWFALL_GRAVE) //snowfall is a bit special in capping + it gets eyecandy stuff
999 {
1000 if (object == BG_AV_OBJECT_FLAG_N_SNOWFALL_GRAVE) //initial capping
1001 {
1002 if (!(prevOwnerId == TEAM_NEUTRAL && m_Nodes[node].TotalOwnerId == TEAM_NEUTRAL))
1003 return;
1004
1005 if (teamId == TEAM_ALLIANCE)
1007 else
1010 }
1011 else if (m_Nodes[node].TotalOwnerId == TEAM_NEUTRAL) //recapping, when no team owns this node realy
1012 {
1013 if (!(m_Nodes[node].State != POINT_CONTROLED))
1014 return;
1015
1016 if (teamId == TEAM_ALLIANCE)
1017 SpawnBGObject(object - 11, RESPAWN_IMMEDIATELY);
1018 else
1019 SpawnBGObject(object + 11, RESPAWN_IMMEDIATELY);
1020 }
1021 //eyecandy
1022 uint32 spawn, despawn;
1023 if (teamId == TEAM_ALLIANCE)
1024 {
1027 }
1028 else
1029 {
1032 }
1033 for (uint8 i = 0; i < 4; i++)
1034 {
1035 SpawnBGObject(despawn + i, RESPAWN_ONE_DAY);
1037 }
1038 }
1039
1040 // xinef: moved here, assure that no call to m_Nodes is used in IF statement bellow as it is modified
1041 AssaultNode(node, teamId);
1042
1043 //if snowfall gots capped it can be handled like all other graveyards
1044 if (m_Nodes[node].TotalOwnerId != TEAM_NEUTRAL)
1045 {
1046 ASSERT(prevOwnerId != TEAM_NEUTRAL);
1047 if (teamId == TEAM_ALLIANCE)
1048 SpawnBGObject(object - 22, RESPAWN_IMMEDIATELY);
1049 else
1050 SpawnBGObject(object + 22, RESPAWN_IMMEDIATELY);
1051
1052 bool ignoreSpiritGuide = false;
1053 if (IsTower(node))
1054 {
1055 //spawning/despawning of bigflag+aura
1060 }
1061 else
1062 {
1063 //spawning/despawning of aura
1065 SpawnBGObject(static_cast<uint8>(BG_AV_OBJECT_AURA_A_FIRSTAID_STATION) + prevOwnerId + 3 * node, RESPAWN_ONE_DAY); //teeamaura despawn
1066
1067 ignoreSpiritGuide = true;
1068
1069 _reviveEvents.AddEventAtOffset([this, node]()
1070 {
1072
1073 if (!IsTower(node))
1074 DelCreature(node); // Delete spirit healer
1075 }, 500ms);
1076 }
1077
1078 DePopulateNode(node, ignoreSpiritGuide);
1079 }
1080
1081 SpawnBGObject(object, RESPAWN_ONE_DAY); //delete old banner
1082 // xinef: change here is too late, AssaultNode(node, team);
1084
1085 if (Creature* creature = GetBGCreature(AV_CPLACE_HERALD))
1086 creature->AI()->Talk(GetAttackString(node, teamId));
1087
1088 //update the statistic for the assaulting player
1090
1092}
@ BG_AV_NODES_SNOWFALL_GRAVE
Definition BattlegroundAV.h:179
@ BG_AV_OBJECT_AURA_N_FIRSTAID_STATION
Definition BattlegroundAV.h:250
@ BG_AV_OBJECT_FLAG_C_H_SNOWFALL_GRAVE
Definition BattlegroundAV.h:224
@ BG_AV_OBJECT_AURA_A_FIRSTAID_STATION
Definition BattlegroundAV.h:251
@ BG_AV_OBJECT_FLAG_C_A_SNOWFALL_GRAVE
Definition BattlegroundAV.h:212
@ BG_AV_OBJECT_SNOW_EYECANDY_A
Definition BattlegroundAV.h:316
@ BG_AV_OBJECT_TAURA_H_DUNBALDAR_SOUTH
Definition BattlegroundAV.h:290
@ BG_AV_OBJECT_FLAG_N_SNOWFALL_GRAVE
Definition BattlegroundAV.h:245
@ BG_AV_OBJECT_SNOW_EYECANDY_PH
Definition BattlegroundAV.h:319
@ BG_AV_OBJECT_SNOW_EYECANDY_H
Definition BattlegroundAV.h:318
@ BG_AV_OBJECT_TFLAG_A_DUNBALDAR_SOUTH
Definition BattlegroundAV.h:273
@ BG_AV_OBJECT_TAURA_A_DUNBALDAR_SOUTH
Definition BattlegroundAV.h:289
@ BG_AV_OBJECT_TFLAG_H_DUNBALDAR_SOUTH
Definition BattlegroundAV.h:274
@ BG_AV_OBJECT_SNOW_EYECANDY_PA
Definition BattlegroundAV.h:317
@ BG_AV_QUEST_CREDIT_TOWER
Definition BattlegroundAV.h:117
@ BG_AV_QUEST_CREDIT_GRAVEYARD
Definition BattlegroundAV.h:118
@ SCORE_GRAVEYARDS_ASSAULTED
Definition BattlegroundScore.h:44
@ SCORE_TOWERS_ASSAULTED
Definition BattlegroundScore.h:46
@ RESPAWN_IMMEDIATELY
Definition Battleground.h:170
@ STATUS_IN_PROGRESS
Definition Battleground.h:203
BG_AV_Nodes GetNodeThroughObject(uint32 object)
Definition BattlegroundAV.cpp:831
bool UpdatePlayerScore(Player *player, uint32 type, uint32 value, bool doAddHonor=true) override
Definition BattlegroundAV.cpp:582
uint8 GetAttackString(BG_AV_Nodes node, TeamId teamId)
Definition BattlegroundAV.cpp:1479
void DePopulateNode(BG_AV_Nodes node, bool ignoreSpiritGuid=false)
Definition BattlegroundAV.cpp:809
void UpdateNodeWorldState(BG_AV_Nodes node)
Definition BattlegroundAV.cpp:1157
void AssaultNode(BG_AV_Nodes node, TeamId teamId)
Definition BattlegroundAV.cpp:1701
void SpawnBGObject(uint32 type, uint32 respawntime, uint32 forceRespawnDelay=0)
Definition Battleground.cpp:1513
void RelocateDeadPlayers(ObjectGuid queueIndex)
Relocate all players in ReviveQueue to the closest graveyard.
Definition Battleground.cpp:1387
EventProcessor _reviveEvents
Definition Battleground.h:654
BattlegroundStatus GetStatus() const
Definition Battleground.h:333
void AddEventAtOffset(BasicEvent *event, Milliseconds offset)
Definition EventProcessor.h:107
void KilledMonsterCredit(uint32 entry, ObjectGuid guid=ObjectGuid::Empty)
Definition PlayerQuest.cpp:1927
TeamId GetTeamId(bool original=false) const
Definition Player.h:2116

References Battleground::_reviveEvents, EventProcessor::AddEventAtOffset(), AssaultNode(), ASSERT, AV_CPLACE_HERALD, BG_AV_NODES_DUNBALDAR_SOUTH, BG_AV_NODES_SNOWFALL_GRAVE, BG_AV_OBJECT_AURA_A_FIRSTAID_STATION, BG_AV_OBJECT_AURA_N_FIRSTAID_STATION, BG_AV_OBJECT_FLAG_C_A_SNOWFALL_GRAVE, BG_AV_OBJECT_FLAG_C_H_SNOWFALL_GRAVE, BG_AV_OBJECT_FLAG_N_SNOWFALL_GRAVE, BG_AV_OBJECT_SNOW_EYECANDY_A, BG_AV_OBJECT_SNOW_EYECANDY_H, BG_AV_OBJECT_SNOW_EYECANDY_PA, BG_AV_OBJECT_SNOW_EYECANDY_PH, BG_AV_OBJECT_TAURA_A_DUNBALDAR_SOUTH, BG_AV_OBJECT_TAURA_H_DUNBALDAR_SOUTH, BG_AV_OBJECT_TFLAG_A_DUNBALDAR_SOUTH, BG_AV_OBJECT_TFLAG_H_DUNBALDAR_SOUTH, BG_AV_QUEST_CREDIT_GRAVEYARD, BG_AV_QUEST_CREDIT_TOWER, Battleground::BgCreatures, Battleground::DelCreature(), DePopulateNode(), GetAttackString(), Battleground::GetBGCreature(), GetNodeThroughObject(), Battleground::GetStatus(), Player::GetTeamId(), IsTower(), Player::KilledMonsterCredit(), LOG_DEBUG, m_Nodes, BG_AV_NodeInfo::OwnerId, POINT_ASSAULTED, POINT_CONTROLED, Battleground::RelocateDeadPlayers(), RESPAWN_IMMEDIATELY, RESPAWN_ONE_DAY, SCORE_GRAVEYARDS_ASSAULTED, SCORE_TOWERS_ASSAULTED, Battleground::SpawnBGObject(), BG_AV_NodeInfo::State, STATUS_IN_PROGRESS, TEAM_ALLIANCE, TEAM_HORDE, TEAM_NEUTRAL, UpdateNodeWorldState(), and UpdatePlayerScore().

Referenced by EventPlayerClickedOnFlag(), and EventPlayerDefendsPoint().

◆ EventPlayerClickedOnFlag()

void BattlegroundAV::EventPlayerClickedOnFlag ( Player source,
GameObject gameObject 
)
overridevirtual

Reimplemented from Battleground.

895{
897 return;
898 int32 object = GetObjectType(gameObject->GetGUID());
899 if (object < 0)
900 return;
901 switch (gameObject->GetEntry())
902 {
908 EventPlayerAssaultsPoint(source, object);
909 break;
914 EventPlayerDefendsPoint(source, object);
915 break;
916 default:
917 break;
918 }
919}
@ BG_AV_OBJECTID_BANNER_H
Definition BattlegroundAV.h:127
@ BG_AV_OBJECTID_BANNER_CONT_A
Definition BattlegroundAV.h:128
@ BG_AV_OBJECTID_BANNER_H_B
Definition BattlegroundAV.h:132
@ BG_AV_OBJECTID_BANNER_A_B
Definition BattlegroundAV.h:131
@ BG_AV_OBJECTID_BANNER_SNOWFALL_N
Definition BattlegroundAV.h:135
@ BG_AV_OBJECTID_BANNER_A
Definition BattlegroundAV.h:126
@ BG_AV_OBJECTID_BANNER_CONT_H
Definition BattlegroundAV.h:129
@ BG_AV_OBJECTID_BANNER_CONT_H_B
Definition BattlegroundAV.h:134
@ BG_AV_OBJECTID_BANNER_CONT_A_B
Definition BattlegroundAV.h:133
std::int32_t int32
Definition Define.h:103
void EventPlayerAssaultsPoint(Player *player, uint32 object)
Definition BattlegroundAV.cpp:987
void EventPlayerDefendsPoint(Player *player, uint32 object)
Definition BattlegroundAV.cpp:921
int32 GetObjectType(ObjectGuid guid)
Definition Battleground.cpp:1794

References BG_AV_OBJECTID_BANNER_A, BG_AV_OBJECTID_BANNER_A_B, BG_AV_OBJECTID_BANNER_CONT_A, BG_AV_OBJECTID_BANNER_CONT_A_B, BG_AV_OBJECTID_BANNER_CONT_H, BG_AV_OBJECTID_BANNER_CONT_H_B, BG_AV_OBJECTID_BANNER_H, BG_AV_OBJECTID_BANNER_H_B, BG_AV_OBJECTID_BANNER_SNOWFALL_N, EventPlayerAssaultsPoint(), EventPlayerDefendsPoint(), Object::GetEntry(), Object::GetGUID(), Battleground::GetObjectType(), Battleground::GetStatus(), and STATUS_IN_PROGRESS.

◆ EventPlayerDefendsPoint()

void BattlegroundAV::EventPlayerDefendsPoint ( Player player,
uint32  object 
)
private
922{
924 BG_AV_Nodes node = GetNodeThroughObject(object);
925
926 TeamId ownerId = m_Nodes[node].OwnerId; //maybe should name it prevowner
927 TeamId teamId = player->GetTeamId();
928
929 if (ownerId == player->GetTeamId() || m_Nodes[node].State != POINT_ASSAULTED)
930 return;
931 if (m_Nodes[node].TotalOwnerId == TEAM_NEUTRAL)
932 {
933 //until snowfall doesn't belong to anyone it is better handled in assault-code
934 ASSERT(node == BG_AV_NODES_SNOWFALL_GRAVE); //currently the only neutral grave
935 EventPlayerAssaultsPoint(player, object);
936 return;
937 }
938 LOG_DEBUG("bg.battleground", "player defends point object: {} node: {}", object, node);
939 if (m_Nodes[node].PrevOwnerId != teamId)
940 {
941 LOG_ERROR("bg.battleground", "BG_AV: player defends point which doesn't belong to his team {}", node);
942 return;
943 }
944
945 //spawn new go :)
946 if (m_Nodes[node].OwnerId == TEAM_ALLIANCE)
947 SpawnBGObject(object + 22, RESPAWN_IMMEDIATELY); //spawn horde banner
948 else
949 SpawnBGObject(object - 22, RESPAWN_IMMEDIATELY); //spawn alliance banner
950
951 if (!IsTower(node))
952 {
955 }
956 // despawn old go
958
959 DefendNode(node, teamId);
960 PopulateNode(node);
962
963 if (IsTower(node))
964 {
965 //spawn big flag+aura on top of tower
970 }
971 else if (node == BG_AV_NODES_SNOWFALL_GRAVE) //snowfall eyecandy
972 {
973 for (uint8 i = 0; i < 4; i++)
974 {
977 }
978 }
979
980 if (Creature* creature = GetBGCreature(AV_CPLACE_HERALD))
981 creature->AI()->Talk(GetDefendString(node, teamId));
982
983 //update the statistic for the defending player
985}
@ SCORE_TOWERS_DEFENDED
Definition BattlegroundScore.h:47
@ SCORE_GRAVEYARDS_DEFENDED
Definition BattlegroundScore.h:45
#define LOG_ERROR(filterType__,...)
Definition Log.h:157
void PopulateNode(BG_AV_Nodes node)
Definition BattlegroundAV.cpp:755
void DefendNode(BG_AV_Nodes node, TeamId teamId)
Definition BattlegroundAV.cpp:1753
uint8 GetDefendString(BG_AV_Nodes node, TeamId teamId)
Definition BattlegroundAV.cpp:1578

References ASSERT, AV_CPLACE_HERALD, BG_AV_NODES_DUNBALDAR_SOUTH, BG_AV_NODES_SNOWFALL_GRAVE, BG_AV_OBJECT_AURA_A_FIRSTAID_STATION, BG_AV_OBJECT_AURA_N_FIRSTAID_STATION, BG_AV_OBJECT_SNOW_EYECANDY_A, BG_AV_OBJECT_SNOW_EYECANDY_H, BG_AV_OBJECT_SNOW_EYECANDY_PA, BG_AV_OBJECT_SNOW_EYECANDY_PH, BG_AV_OBJECT_TAURA_A_DUNBALDAR_SOUTH, BG_AV_OBJECT_TAURA_H_DUNBALDAR_SOUTH, BG_AV_OBJECT_TFLAG_A_DUNBALDAR_SOUTH, BG_AV_OBJECT_TFLAG_H_DUNBALDAR_SOUTH, DefendNode(), EventPlayerAssaultsPoint(), Battleground::GetBGCreature(), GetDefendString(), GetNodeThroughObject(), Battleground::GetStatus(), Player::GetTeamId(), IsTower(), LOG_DEBUG, LOG_ERROR, m_Nodes, BG_AV_NodeInfo::OwnerId, POINT_ASSAULTED, PopulateNode(), RESPAWN_IMMEDIATELY, RESPAWN_ONE_DAY, SCORE_GRAVEYARDS_DEFENDED, SCORE_TOWERS_DEFENDED, Battleground::SpawnBGObject(), BG_AV_NodeInfo::State, STATUS_IN_PROGRESS, TEAM_ALLIANCE, TEAM_HORDE, TEAM_NEUTRAL, UpdateNodeWorldState(), and UpdatePlayerScore().

Referenced by EventPlayerClickedOnFlag().

◆ EventPlayerDestroyedPoint()

void BattlegroundAV::EventPlayerDestroyedPoint ( BG_AV_Nodes  node)
private
609{
610 uint32 object = GetObjectThroughNode(node);
611 LOG_DEBUG("bg.battleground", "bg_av: player destroyed point node {} object {}", node, object);
612
613 //despawn banner
615 DestroyNode(node);
617
618 TeamId ownerId = m_Nodes[node].OwnerId;
619 if (IsTower(node))
620 {
622 //despawn marshal
625 else
626 LOG_ERROR("bg.battleground", "BG_AV: playerdestroyedpoint: marshal {} doesn't exist", AV_CPLACE_A_MARSHAL_SOUTH + tmp);
627 //spawn destroyed aura
628 for (uint8 i = 0; i <= 9; i++)
630
632 RewardReputationToTeam(ownerId == TEAM_ALLIANCE ? 730 : 729, BG_AV_REP_TOWER, ownerId);
634
635 SpawnBGObject(static_cast<uint8>(BG_AV_OBJECT_TAURA_A_DUNBALDAR_SOUTH) + ownerId + (2 * tmp), RESPAWN_ONE_DAY);
636 SpawnBGObject(static_cast<uint8>(BG_AV_OBJECT_TFLAG_A_DUNBALDAR_SOUTH) + ownerId + (2 * tmp), RESPAWN_ONE_DAY);
637 }
638 else
639 {
640 if (ownerId == TEAM_ALLIANCE)
642 else
646 PopulateNode(node);
647 if (node == BG_AV_NODES_SNOWFALL_GRAVE) //snowfall eyecandy
648 {
649 for (uint8 i = 0; i < 4; i++)
650 {
653 }
654 }
655 }
656
657 if (Creature* creature = GetBGCreature(AV_CPLACE_HERALD))
658 creature->AI()->Talk(GetDefendString(node, ownerId));
659}
#define BG_AV_RES_TOWER
Definition BattlegroundAV.h:40
#define BG_AV_REP_TOWER
Definition BattlegroundAV.h:39
@ BG_AV_OBJECT_BURN_DUNBALDAR_SOUTH
Definition BattlegroundAV.h:306
@ AV_CPLACE_A_MARSHAL_SOUTH
Definition BattlegroundAV.h:791
#define BG_AV_KILL_TOWER
Definition BattlegroundAV.h:38
uint32 GetObjectThroughNode(BG_AV_Nodes node)
Definition BattlegroundAV.cpp:853
void UpdateScore(TeamId teamId, int16 points)
Definition BattlegroundAV.cpp:267
void DestroyNode(BG_AV_Nodes node)
Definition BattlegroundAV.cpp:1731

References AV_CPLACE_A_MARSHAL_SOUTH, AV_CPLACE_HERALD, BG_AV_KILL_TOWER, BG_AV_NODES_DUNBALDAR_SOUTH, BG_AV_NODES_SNOWFALL_GRAVE, BG_AV_OBJECT_AURA_A_FIRSTAID_STATION, BG_AV_OBJECT_AURA_N_FIRSTAID_STATION, BG_AV_OBJECT_BURN_DUNBALDAR_SOUTH, BG_AV_OBJECT_SNOW_EYECANDY_A, BG_AV_OBJECT_SNOW_EYECANDY_H, BG_AV_OBJECT_SNOW_EYECANDY_PA, BG_AV_OBJECT_SNOW_EYECANDY_PH, BG_AV_OBJECT_TAURA_A_DUNBALDAR_SOUTH, BG_AV_OBJECT_TFLAG_A_DUNBALDAR_SOUTH, BG_AV_REP_TOWER, BG_AV_RES_TOWER, Battleground::BgCreatures, Battleground::DelCreature(), DestroyNode(), Battleground::GetBGCreature(), Battleground::GetBonusHonorFromKill(), GetDefendString(), GetObjectThroughNode(), IsTower(), LOG_DEBUG, LOG_ERROR, m_Nodes, BG_AV_NodeInfo::OwnerId, PopulateNode(), RESPAWN_IMMEDIATELY, RESPAWN_ONE_DAY, Battleground::RewardHonorToTeam(), Battleground::RewardReputationToTeam(), Battleground::SpawnBGObject(), TEAM_ALLIANCE, TEAM_HORDE, UpdateNodeWorldState(), and UpdateScore().

Referenced by PostUpdateImpl().

◆ FillInitialWorldStates()

void BattlegroundAV::FillInitialWorldStates ( WorldPackets::WorldState::InitWorldStates packet)
overrideprivatevirtual

Reimplemented from Battleground.

1095{
1096 bool stateok;
1097 packet.Worldstates.reserve(7*2*2 + 8*2*2 + 5);
1098 //graveyards
1100 {
1101 for (uint8 j = 1; j <= 3; j += 2)
1102 {
1103 //j=1=assaulted j=3=controled
1104 stateok = (m_Nodes[i].State == j);
1105 packet.Worldstates.emplace_back(BG_AV_NodeWorldStates[i][GetWorldStateType(j, TEAM_ALLIANCE)], (m_Nodes[i].OwnerId == TEAM_ALLIANCE && stateok) ? 1 : 0);
1106 packet.Worldstates.emplace_back(BG_AV_NodeWorldStates[i][GetWorldStateType(j, TEAM_HORDE)], (m_Nodes[i].OwnerId == TEAM_HORDE && stateok) ? 1 : 0);
1107 }
1108 }
1109
1110 //towers
1112 for (uint8 j = 1; j <= 3; j += 2)
1113 {
1114 //j=1=assaulted j=3=controled //i dont have j=2=destroyed cause destroyed is the same like enemy-team controll
1115 stateok = (m_Nodes[i].State == j || (m_Nodes[i].State == POINT_DESTROYED && j == 3));
1116 packet.Worldstates.emplace_back(BG_AV_NodeWorldStates[i][GetWorldStateType(j, TEAM_ALLIANCE)], (m_Nodes[i].OwnerId == TEAM_ALLIANCE && stateok) ? 1 : 0);
1117 packet.Worldstates.emplace_back(BG_AV_NodeWorldStates[i][GetWorldStateType(j, TEAM_HORDE)], (m_Nodes[i].OwnerId == TEAM_HORDE && stateok) ? 1 : 0);
1118 }
1119 if (m_Nodes[BG_AV_NODES_SNOWFALL_GRAVE].OwnerId == TEAM_NEUTRAL) //cause neutral teams aren't handled generic
1120 {
1122 }
1123
1126
1129
1132}
@ BG_AV_NODES_FROSTWOLF_HUT
Definition BattlegroundAV.h:182
const uint32 BG_AV_NodeWorldStates[16][4]
Definition BattlegroundAV.h:1560
#define BG_AV_SCORE_INITIAL_POINTS
Definition BattlegroundAV.h:28
@ WORLD_STATE_BATTLEGROUND_AV_SHOW_HORDE_SCORE
Definition WorldStateDefines.h:165
@ WORLD_STATE_BATTLEGROUND_AV_ALLIANCE_SCORE
Definition WorldStateDefines.h:163
@ WORLD_STATE_BATTLEGROUND_AV_HORDE_SCORE
Definition WorldStateDefines.h:164
@ WORLD_STATE_BATTLEGROUND_AV_SNOWFALL_N
Definition WorldStateDefines.h:162
@ WORLD_STATE_BATTLEGROUND_AV_SHOW_ALLIANCE_SCORE
Definition WorldStateDefines.h:166
uint8 GetWorldStateType(uint8 state, TeamId teamId)
Definition BattlegroundAV.cpp:1134
std::vector< WorldStateInfo > Worldstates
Definition WorldStatePackets.h:46

References AV_NORTH_MINE, AV_SOUTH_MINE, BG_AV_NODES_DUNBALDAR_SOUTH, BG_AV_NODES_FIRSTAID_STATION, BG_AV_NODES_FROSTWOLF_HUT, BG_AV_NODES_MAX, BG_AV_NODES_SNOWFALL_GRAVE, BG_AV_NodeWorldStates, BG_AV_SCORE_INITIAL_POINTS, Battleground::GetStatus(), GetWorldStateType(), m_Nodes, m_Team_Scores, BG_AV_NodeInfo::OwnerId, POINT_DESTROYED, SendMineWorldStates(), BG_AV_NodeInfo::State, STATUS_IN_PROGRESS, TEAM_ALLIANCE, TEAM_HORDE, TEAM_NEUTRAL, WORLD_STATE_BATTLEGROUND_AV_ALLIANCE_SCORE, WORLD_STATE_BATTLEGROUND_AV_HORDE_SCORE, WORLD_STATE_BATTLEGROUND_AV_SHOW_ALLIANCE_SCORE, WORLD_STATE_BATTLEGROUND_AV_SHOW_HORDE_SCORE, WORLD_STATE_BATTLEGROUND_AV_SNOWFALL_N, and WorldPackets::WorldState::InitWorldStates::Worldstates.

◆ GetAttackString()

uint8 BattlegroundAV::GetAttackString ( BG_AV_Nodes  node,
TeamId  teamId 
)
private
1480{
1481 uint8 strId = 0;
1482 switch (node)
1483 {
1485 if (teamId == TEAM_ALLIANCE)
1487 else
1489 break;
1491 if (teamId == TEAM_ALLIANCE)
1493 else
1495 break;
1497 if (teamId == TEAM_ALLIANCE)
1499 else
1501 break;
1503 if (teamId == TEAM_ALLIANCE)
1505 else
1507 break;
1509 if (teamId == TEAM_ALLIANCE)
1511 else
1513 break;
1515 if (teamId == TEAM_ALLIANCE)
1517 else
1519 break;
1521 if (teamId == TEAM_ALLIANCE)
1523 else
1525 break;
1527 if (teamId == TEAM_ALLIANCE)
1529 else
1531 break;
1534 break;
1536 if (teamId == TEAM_ALLIANCE)
1538 else
1540 break;
1542 if (teamId == TEAM_ALLIANCE)
1544 else
1546 break;
1548 if (teamId == TEAM_ALLIANCE)
1550 else
1552 break;
1554 if (teamId == TEAM_ALLIANCE)
1556 else
1558 break;
1560 if (teamId == TEAM_ALLIANCE)
1562 else
1564 break;
1566 if (teamId == TEAM_ALLIANCE)
1568 else
1570 break;
1571 default:
1572 break;
1573 }
1574
1575 return strId;
1576}
@ BG_AV_NODES_ICEWING_BUNKER
Definition BattlegroundAV.h:185
@ BG_AV_NODES_TOWER_POINT
Definition BattlegroundAV.h:188
@ BG_AV_NODES_FROSTWOLF_GRAVE
Definition BattlegroundAV.h:181
@ BG_AV_NODES_STORMPIKE_GRAVE
Definition BattlegroundAV.h:177
@ BG_AV_NODES_STONEHEART_GRAVE
Definition BattlegroundAV.h:178
@ BG_AV_NODES_ICEBLOOD_TOWER
Definition BattlegroundAV.h:187
@ BG_AV_NODES_DUNBALDAR_NORTH
Definition BattlegroundAV.h:184
@ BG_AV_NODES_STONEHEART_BUNKER
Definition BattlegroundAV.h:186
@ BG_AV_NODES_FROSTWOLF_ETOWER
Definition BattlegroundAV.h:189
@ BG_AV_NODES_ICEBLOOD_GRAVE
Definition BattlegroundAV.h:180
@ AV_TEXT_H_HERALD_EAST_FROSTWOLF_TOWER_ATTACK
Definition BattlegroundAV.h:1662
@ AV_TEXT_A_HERALD_ICEBLOOD_GRAVEYARD_ATTACK
Definition BattlegroundAV.h:1689
@ AV_TEXT_A_HERALD_TOWER_POINT_ATTACK
Definition BattlegroundAV.h:1668
@ AV_TEXT_H_HERALD_ICEBLOOD_GRAVEYARD_ATTACK
Definition BattlegroundAV.h:1687
@ AV_TEXT_A_HERALD_FROSTWOLF_GRAVEYARD_ATTACK
Definition BattlegroundAV.h:1639
@ AV_TEXT_H_HERALD_DUN_BALDAR_SOUTH_ATTACK
Definition BattlegroundAV.h:1642
@ AV_TEXT_H_HERALD_TOWER_POINT_ATTACK
Definition BattlegroundAV.h:1666
@ AV_TEXT_H_HERALD_WEST_FROSTWOLF_TOWER_ATTACK
Definition BattlegroundAV.h:1658
@ AV_TEXT_A_HERALD_WEST_FROSTWOLF_TOWER_ATTACK
Definition BattlegroundAV.h:1660
@ AV_TEXT_A_HERALD_ICEWING_BUNKER_ATTACK
Definition BattlegroundAV.h:1652
@ AV_TEXT_H_HERALD_STONEHEARTH_GRAVEYARD_ATTACK
Definition BattlegroundAV.h:1683
@ AV_TEXT_A_HERALD_FROSTWOLF_RELIEF_HUT_ATTACK
Definition BattlegroundAV.h:1681
@ AV_TEXT_A_HERALD_EAST_FROSTWOLF_TOWER_ATTACK
Definition BattlegroundAV.h:1664
@ AV_TEXT_H_HERALD_FROSTWOLF_RELIEF_HUT_ATTACK
Definition BattlegroundAV.h:1679
@ AV_TEXT_A_HERALD_DUN_BALDAR_SOUTH_ATTACK
Definition BattlegroundAV.h:1644
@ AV_TEXT_A_HERALD_STONEHEARTH_GRAVEYARD_ATTACK
Definition BattlegroundAV.h:1685
@ AV_TEXT_A_HERALD_DUN_BALDAR_NORTH_ATTACK
Definition BattlegroundAV.h:1648
@ AV_TEXT_A_HERALD_ICEBLOOD_TOWER_ATTACK
Definition BattlegroundAV.h:1672
@ AV_TEXT_H_HERALD_STORMPIKE_AID_STATION_ATTACK
Definition BattlegroundAV.h:1675
@ AV_TEXT_H_HERALD_DUN_BALDAR_NORTH_ATTACK
Definition BattlegroundAV.h:1646
@ AV_TEXT_A_HERALD_STORMPIKE_GRAVEYARD_ATTACK
Definition BattlegroundAV.h:1631
@ AV_TEXT_A_HERALD_STORMPIKE_AID_STATION_ATTACK
Definition BattlegroundAV.h:1677
@ AV_TEXT_A_HERALD_SNOWFALL_GRAVEYARD_ATTACK
Definition BattlegroundAV.h:1635
@ AV_TEXT_H_HERALD_FROSTWOLF_GRAVEYARD_ATTACK
Definition BattlegroundAV.h:1641
@ AV_TEXT_A_HERALD_STONEHEARTH_BUNKER_ATTACK
Definition BattlegroundAV.h:1656
@ AV_TEXT_H_HERALD_SNOWFALL_GRAVEYARD_ATTACK
Definition BattlegroundAV.h:1637
@ AV_TEXT_H_HERALD_STORMPIKE_GRAVEYARD_ATTACK
Definition BattlegroundAV.h:1633
@ AV_TEXT_H_HERALD_STONEHEARTH_BUNKER_ATTACK
Definition BattlegroundAV.h:1654
@ AV_TEXT_H_HERALD_ICEWING_BUNKER_ATTACK
Definition BattlegroundAV.h:1650

References AV_TEXT_A_HERALD_DUN_BALDAR_NORTH_ATTACK, AV_TEXT_A_HERALD_DUN_BALDAR_SOUTH_ATTACK, AV_TEXT_A_HERALD_EAST_FROSTWOLF_TOWER_ATTACK, AV_TEXT_A_HERALD_FROSTWOLF_GRAVEYARD_ATTACK, AV_TEXT_A_HERALD_FROSTWOLF_RELIEF_HUT_ATTACK, AV_TEXT_A_HERALD_ICEBLOOD_GRAVEYARD_ATTACK, AV_TEXT_A_HERALD_ICEBLOOD_TOWER_ATTACK, AV_TEXT_A_HERALD_ICEWING_BUNKER_ATTACK, AV_TEXT_A_HERALD_SNOWFALL_GRAVEYARD_ATTACK, AV_TEXT_A_HERALD_STONEHEARTH_BUNKER_ATTACK, AV_TEXT_A_HERALD_STONEHEARTH_GRAVEYARD_ATTACK, AV_TEXT_A_HERALD_STORMPIKE_AID_STATION_ATTACK, AV_TEXT_A_HERALD_STORMPIKE_GRAVEYARD_ATTACK, AV_TEXT_A_HERALD_TOWER_POINT_ATTACK, AV_TEXT_A_HERALD_WEST_FROSTWOLF_TOWER_ATTACK, AV_TEXT_H_HERALD_DUN_BALDAR_NORTH_ATTACK, AV_TEXT_H_HERALD_DUN_BALDAR_SOUTH_ATTACK, AV_TEXT_H_HERALD_EAST_FROSTWOLF_TOWER_ATTACK, AV_TEXT_H_HERALD_FROSTWOLF_GRAVEYARD_ATTACK, AV_TEXT_H_HERALD_FROSTWOLF_RELIEF_HUT_ATTACK, AV_TEXT_H_HERALD_ICEBLOOD_GRAVEYARD_ATTACK, AV_TEXT_H_HERALD_ICEWING_BUNKER_ATTACK, AV_TEXT_H_HERALD_SNOWFALL_GRAVEYARD_ATTACK, AV_TEXT_H_HERALD_STONEHEARTH_BUNKER_ATTACK, AV_TEXT_H_HERALD_STONEHEARTH_GRAVEYARD_ATTACK, AV_TEXT_H_HERALD_STORMPIKE_AID_STATION_ATTACK, AV_TEXT_H_HERALD_STORMPIKE_GRAVEYARD_ATTACK, AV_TEXT_H_HERALD_TOWER_POINT_ATTACK, AV_TEXT_H_HERALD_WEST_FROSTWOLF_TOWER_ATTACK, BG_AV_NODES_DUNBALDAR_NORTH, BG_AV_NODES_DUNBALDAR_SOUTH, BG_AV_NODES_FIRSTAID_STATION, BG_AV_NODES_FROSTWOLF_ETOWER, BG_AV_NODES_FROSTWOLF_GRAVE, BG_AV_NODES_FROSTWOLF_HUT, BG_AV_NODES_FROSTWOLF_WTOWER, BG_AV_NODES_ICEBLOOD_GRAVE, BG_AV_NODES_ICEBLOOD_TOWER, BG_AV_NODES_ICEWING_BUNKER, BG_AV_NODES_SNOWFALL_GRAVE, BG_AV_NODES_STONEHEART_BUNKER, BG_AV_NODES_STONEHEART_GRAVE, BG_AV_NODES_STORMPIKE_GRAVE, BG_AV_NODES_TOWER_POINT, and TEAM_ALLIANCE.

Referenced by EventPlayerAssaultsPoint().

◆ GetClosestGraveyard()

GraveyardStruct const * BattlegroundAV::GetClosestGraveyard ( Player player)
overridevirtual

Reimplemented from Battleground.

1184{
1185 GraveyardStruct const* entry = nullptr;
1186 float dist = 0;
1187 float minDist = 0;
1188 float x, y;
1189
1190 player->GetPosition(x, y);
1191
1192 GraveyardStruct const* pGraveyard = sGraveyard->GetGraveyard(BG_AV_GraveyardIds[player->GetTeamId() + 7]);
1193 minDist = (pGraveyard->x - x) * (pGraveyard->x - x) + (pGraveyard->y - y) * (pGraveyard->y - y);
1194
1196 if (m_Nodes[i].OwnerId == player->GetTeamId() && m_Nodes[i].State == POINT_CONTROLED)
1197 {
1198 entry = sGraveyard->GetGraveyard(BG_AV_GraveyardIds[i]);
1199 if (entry)
1200 {
1201 dist = (entry->x - x) * (entry->x - x) + (entry->y - y) * (entry->y - y);
1202 if (dist < minDist)
1203 {
1204 minDist = dist;
1205 pGraveyard = entry;
1206 }
1207 }
1208 }
1209 return pGraveyard;
1210}
const uint32 BG_AV_GraveyardIds[9]
Definition BattlegroundAV.h:1523
#define sGraveyard
Definition GameGraveyard.h:74
Definition GameGraveyard.h:27
float x
Definition GameGraveyard.h:30
float y
Definition GameGraveyard.h:31
void GetPosition(float &x, float &y) const
Definition Position.h:126

References BG_AV_GraveyardIds, BG_AV_NODES_FIRSTAID_STATION, BG_AV_NODES_FROSTWOLF_HUT, Position::GetPosition(), Player::GetTeamId(), m_Nodes, POINT_CONTROLED, sGraveyard, BG_AV_NodeInfo::State, GraveyardStruct::x, and GraveyardStruct::y.

◆ GetDefendString()

uint8 BattlegroundAV::GetDefendString ( BG_AV_Nodes  node,
TeamId  teamId 
)
private
1579{
1580 uint8 strId = 0;
1581 switch (node)
1582 {
1584 if (teamId == TEAM_ALLIANCE)
1586 else
1588 break;
1590 if (teamId == TEAM_ALLIANCE)
1592 else
1594 break;
1596 if (teamId == TEAM_ALLIANCE)
1598 else
1600 break;
1602 if (teamId == TEAM_ALLIANCE)
1604 else
1606 break;
1608 if (teamId == TEAM_ALLIANCE)
1610 else
1612 break;
1614 if (teamId == TEAM_ALLIANCE)
1616 else
1618 break;
1620 if (teamId == TEAM_ALLIANCE)
1622 else
1624 break;
1626 if (teamId == TEAM_ALLIANCE)
1628 else
1630 break;
1633 break;
1635 if (teamId == TEAM_ALLIANCE)
1637 else
1639 break;
1641 if (teamId == TEAM_ALLIANCE)
1643 else
1645 break;
1647 if (teamId == TEAM_ALLIANCE)
1649 else
1651 break;
1653 if (teamId == TEAM_ALLIANCE)
1655 else
1657 break;
1659 if (teamId == TEAM_ALLIANCE)
1661 else
1663 break;
1665 if (teamId == TEAM_ALLIANCE)
1667 else
1669 break;
1670 default:
1671 break;
1672 }
1673
1674 return strId;
1675}
@ AV_TEXT_H_HERALD_TOWER_POINT_TAKEN
Definition BattlegroundAV.h:1667
@ AV_TEXT_A_HERALD_WEST_FROSTWOLF_TOWER_TAKEN
Definition BattlegroundAV.h:1661
@ AV_TEXT_A_HERALD_ICEBLOOD_GRAVEYARD_TAKEN
Definition BattlegroundAV.h:1688
@ AV_TEXT_H_HERALD_STORMPIKE_GRAVEYARD_TAKEN
Definition BattlegroundAV.h:1632
@ AV_TEXT_H_HERALD_SNOWFALL_GRAVEYARD_TAKEN
Definition BattlegroundAV.h:1636
@ AV_TEXT_H_HERALD_ICEWING_BUNKER_TAKEN
Definition BattlegroundAV.h:1651
@ AV_TEXT_H_HERALD_STONEHEARTH_GRAVEYARD_TAKEN
Definition BattlegroundAV.h:1682
@ AV_TEXT_H_HERALD_DUN_BALDAR_NORTH_TAKEN
Definition BattlegroundAV.h:1647
@ AV_TEXT_A_HERALD_ICEBLOOD_TOWER_TAKEN
Definition BattlegroundAV.h:1673
@ AV_TEXT_H_HERALD_STONEHEARTH_BUNKER_TAKEN
Definition BattlegroundAV.h:1655
@ AV_TEXT_A_HERALD_TOWER_POINT_TAKEN
Definition BattlegroundAV.h:1669
@ AV_TEXT_H_HERALD_EAST_FROSTWOLF_TOWER_TAKEN
Definition BattlegroundAV.h:1663
@ AV_TEXT_H_HERALD_STORMPIKE_AID_STATION_TAKEN
Definition BattlegroundAV.h:1674
@ AV_TEXT_H_HERALD_FROSTWOLF_GRAVEYARD_TAKEN
Definition BattlegroundAV.h:1640
@ AV_TEXT_A_HERALD_STONEHEARTH_GRAVEYARD_TAKEN
Definition BattlegroundAV.h:1684
@ AV_TEXT_A_HERALD_SNOWFALL_GRAVEYARD_TAKEN
Definition BattlegroundAV.h:1634
@ AV_TEXT_A_HERALD_ICEWING_BUNKER_TAKEN
Definition BattlegroundAV.h:1653
@ AV_TEXT_A_HERALD_DUN_BALDAR_SOUTH_TAKEN
Definition BattlegroundAV.h:1645
@ AV_TEXT_H_HERALD_ICEBLOOD_GRAVEYARD_TAKEN
Definition BattlegroundAV.h:1686
@ AV_TEXT_A_HERALD_FROSTWOLF_GRAVEYARD_TAKEN
Definition BattlegroundAV.h:1638
@ AV_TEXT_H_HERALD_FROSTWOLF_RELIEF_HUT_TAKEN
Definition BattlegroundAV.h:1678
@ AV_TEXT_A_HERALD_DUN_BALDAR_NORTH_TAKEN
Definition BattlegroundAV.h:1649
@ AV_TEXT_A_HERALD_STORMPIKE_GRAVEYARD_TAKEN
Definition BattlegroundAV.h:1630
@ AV_TEXT_A_HERALD_EAST_FROSTWOLF_TOWER_TAKEN
Definition BattlegroundAV.h:1665
@ AV_TEXT_H_HERALD_WEST_FROSTWOLF_TOWER_TAKEN
Definition BattlegroundAV.h:1659
@ AV_TEXT_A_HERALD_FROSTWOLF_RELIEF_HUT_TAKEN
Definition BattlegroundAV.h:1680
@ AV_TEXT_A_HERALD_STONEHEARTH_BUNKER_TAKEN
Definition BattlegroundAV.h:1657
@ AV_TEXT_H_HERALD_DUN_BALDAR_SOUTH_TAKEN
Definition BattlegroundAV.h:1643
@ AV_TEXT_A_HERALD_STORMPIKE_AID_STATION_TAKEN
Definition BattlegroundAV.h:1676

References AV_TEXT_A_HERALD_DUN_BALDAR_NORTH_TAKEN, AV_TEXT_A_HERALD_DUN_BALDAR_SOUTH_TAKEN, AV_TEXT_A_HERALD_EAST_FROSTWOLF_TOWER_TAKEN, AV_TEXT_A_HERALD_FROSTWOLF_GRAVEYARD_TAKEN, AV_TEXT_A_HERALD_FROSTWOLF_RELIEF_HUT_TAKEN, AV_TEXT_A_HERALD_ICEBLOOD_GRAVEYARD_TAKEN, AV_TEXT_A_HERALD_ICEBLOOD_TOWER_TAKEN, AV_TEXT_A_HERALD_ICEWING_BUNKER_TAKEN, AV_TEXT_A_HERALD_SNOWFALL_GRAVEYARD_TAKEN, AV_TEXT_A_HERALD_STONEHEARTH_BUNKER_TAKEN, AV_TEXT_A_HERALD_STONEHEARTH_GRAVEYARD_TAKEN, AV_TEXT_A_HERALD_STORMPIKE_AID_STATION_TAKEN, AV_TEXT_A_HERALD_STORMPIKE_GRAVEYARD_TAKEN, AV_TEXT_A_HERALD_TOWER_POINT_TAKEN, AV_TEXT_A_HERALD_WEST_FROSTWOLF_TOWER_TAKEN, AV_TEXT_H_HERALD_DUN_BALDAR_NORTH_TAKEN, AV_TEXT_H_HERALD_DUN_BALDAR_SOUTH_TAKEN, AV_TEXT_H_HERALD_EAST_FROSTWOLF_TOWER_TAKEN, AV_TEXT_H_HERALD_FROSTWOLF_GRAVEYARD_TAKEN, AV_TEXT_H_HERALD_FROSTWOLF_RELIEF_HUT_TAKEN, AV_TEXT_H_HERALD_ICEBLOOD_GRAVEYARD_TAKEN, AV_TEXT_H_HERALD_ICEWING_BUNKER_TAKEN, AV_TEXT_H_HERALD_SNOWFALL_GRAVEYARD_TAKEN, AV_TEXT_H_HERALD_STONEHEARTH_BUNKER_TAKEN, AV_TEXT_H_HERALD_STONEHEARTH_GRAVEYARD_TAKEN, AV_TEXT_H_HERALD_STORMPIKE_AID_STATION_TAKEN, AV_TEXT_H_HERALD_STORMPIKE_GRAVEYARD_TAKEN, AV_TEXT_H_HERALD_TOWER_POINT_TAKEN, AV_TEXT_H_HERALD_WEST_FROSTWOLF_TOWER_TAKEN, BG_AV_NODES_DUNBALDAR_NORTH, BG_AV_NODES_DUNBALDAR_SOUTH, BG_AV_NODES_FIRSTAID_STATION, BG_AV_NODES_FROSTWOLF_ETOWER, BG_AV_NODES_FROSTWOLF_GRAVE, BG_AV_NODES_FROSTWOLF_HUT, BG_AV_NODES_FROSTWOLF_WTOWER, BG_AV_NODES_ICEBLOOD_GRAVE, BG_AV_NODES_ICEBLOOD_TOWER, BG_AV_NODES_ICEWING_BUNKER, BG_AV_NODES_SNOWFALL_GRAVE, BG_AV_NODES_STONEHEART_BUNKER, BG_AV_NODES_STONEHEART_GRAVE, BG_AV_NODES_STORMPIKE_GRAVE, BG_AV_NODES_TOWER_POINT, and TEAM_ALLIANCE.

Referenced by EventPlayerDefendsPoint(), and EventPlayerDestroyedPoint().

◆ GetMineString()

uint8 BattlegroundAV::GetMineString ( uint8  mine,
TeamId  teamId 
)
private
1678{
1679 uint8 strId = 0;
1680 switch (mineId)
1681 {
1682 case AV_NORTH_MINE:
1683 if (teamId == TEAM_ALLIANCE)
1685 else
1687 break;
1688 case AV_SOUTH_MINE:
1689 if (teamId == TEAM_ALLIANCE)
1691 else
1693 break;
1694 default:
1695 break;
1696 }
1697
1698 return strId;
1699}
@ AV_TEXT_H_HERALD_COLDTOOTH_MINE_TAKEN
Definition BattlegroundAV.h:1692
@ AV_TEXT_H_HERALD_IRONDEEP_MINE_TAKEN
Definition BattlegroundAV.h:1693
@ AV_TEXT_A_HERALD_COLDTOOTH_MINE_TAKEN
Definition BattlegroundAV.h:1690
@ AV_TEXT_A_HERALD_IRONDEEP_MINE_TAKEN
Definition BattlegroundAV.h:1691

References AV_NORTH_MINE, AV_SOUTH_MINE, AV_TEXT_A_HERALD_COLDTOOTH_MINE_TAKEN, AV_TEXT_A_HERALD_IRONDEEP_MINE_TAKEN, AV_TEXT_H_HERALD_COLDTOOTH_MINE_TAKEN, AV_TEXT_H_HERALD_IRONDEEP_MINE_TAKEN, and TEAM_ALLIANCE.

Referenced by ChangeMineOwner().

◆ GetNodeThroughObject()

BG_AV_Nodes BattlegroundAV::GetNodeThroughObject ( uint32  object)
private
832{
833 LOG_DEBUG("bg.battleground", "bg_AV getnodethroughobject {}", object);
835 return BG_AV_Nodes(object);
837 return BG_AV_Nodes(object - 11);
839 return BG_AV_Nodes(object - 7);
841 return BG_AV_Nodes(object - 22);
843 return BG_AV_Nodes(object - 33);
845 return BG_AV_Nodes(object - 29);
848 LOG_ERROR("bg.battleground", "BattlegroundAV: ERROR! GetPlace got a wrong object :(");
849 ABORT();
850 return BG_AV_Nodes(0);
851}
@ BG_AV_OBJECT_FLAG_H_FROSTWOLF_HUT
Definition BattlegroundAV.h:239
@ BG_AV_OBJECT_FLAG_H_FROSTWOLF_WTOWER
Definition BattlegroundAV.h:243
@ BG_AV_OBJECT_FLAG_C_A_FROSTWOLF_HUT
Definition BattlegroundAV.h:215
@ BG_AV_OBJECT_FLAG_C_H_STONEHEART_BUNKER
Definition BattlegroundAV.h:231
@ BG_AV_OBJECT_FLAG_A_STONEHEART_BUNKER
Definition BattlegroundAV.h:207
@ BG_AV_OBJECT_FLAG_C_A_FROSTWOLF_WTOWER
Definition BattlegroundAV.h:219

References ABORT, BG_AV_NODES_SNOWFALL_GRAVE, BG_AV_OBJECT_FLAG_A_STONEHEART_BUNKER, BG_AV_OBJECT_FLAG_C_A_FROSTWOLF_HUT, BG_AV_OBJECT_FLAG_C_A_FROSTWOLF_WTOWER, BG_AV_OBJECT_FLAG_C_H_STONEHEART_BUNKER, BG_AV_OBJECT_FLAG_H_FROSTWOLF_HUT, BG_AV_OBJECT_FLAG_H_FROSTWOLF_WTOWER, BG_AV_OBJECT_FLAG_N_SNOWFALL_GRAVE, LOG_DEBUG, and LOG_ERROR.

Referenced by EventPlayerAssaultsPoint(), EventPlayerDefendsPoint(), and SetupBattleground().

◆ GetObjectThroughNode()

uint32 BattlegroundAV::GetObjectThroughNode ( BG_AV_Nodes  node)
private
854{
855 //this function is the counterpart to GetNodeThroughObject()
856 LOG_DEBUG("bg.battleground", "bg_AV GetObjectThroughNode {}", node);
857 if (m_Nodes[node].OwnerId == TEAM_ALLIANCE)
858 {
859 if (m_Nodes[node].State == POINT_ASSAULTED)
860 {
861 if (node <= BG_AV_NODES_FROSTWOLF_HUT)
862 return node + 11;
864 return node + 7;
865 }
866 else if (m_Nodes[node].State == POINT_CONTROLED)
868 return node;
869 }
870 else if (m_Nodes[node].OwnerId == TEAM_HORDE)
871 {
872 if (m_Nodes[node].State == POINT_ASSAULTED)
873 {
875 return node + 22;
876 }
877 else if (m_Nodes[node].State == POINT_CONTROLED)
878 {
879 if (node <= BG_AV_NODES_FROSTWOLF_HUT)
880 return node + 33;
882 return node + 29;
883 }
884 }
885 else if (m_Nodes[node].OwnerId == TEAM_NEUTRAL)
887 LOG_ERROR("bg.battleground", "BattlegroundAV: Error! GetPlaceNode couldn't resolve node {}", node);
888 ABORT();
889 return 0;
890}

References ABORT, BG_AV_NODES_FROSTWOLF_HUT, BG_AV_NODES_FROSTWOLF_WTOWER, BG_AV_NODES_ICEBLOOD_TOWER, BG_AV_NODES_STONEHEART_BUNKER, BG_AV_OBJECT_FLAG_N_SNOWFALL_GRAVE, LOG_DEBUG, LOG_ERROR, m_Nodes, POINT_ASSAULTED, POINT_CONTROLED, TEAM_ALLIANCE, TEAM_HORDE, and TEAM_NEUTRAL.

Referenced by EventPlayerDestroyedPoint().

◆ GetPrematureWinner()

TeamId BattlegroundAV::GetPrematureWinner ( )
overridevirtual

Reimplemented from Battleground.

1847{
1849 return TEAM_ALLIANCE;
1850
1852}
uint32 GetTeamScore(TeamId teamId) const
Definition Battleground.cpp:1834
virtual TeamId GetPrematureWinner()
Definition Battleground.cpp:412

References Battleground::GetPrematureWinner(), Battleground::GetTeamScore(), TEAM_ALLIANCE, and TEAM_HORDE.

◆ GetWorldStateType()

uint8 BattlegroundAV::GetWorldStateType ( uint8  state,
TeamId  teamId 
)
private
1135{
1136 //neutral stuff cant get handled (currently its only snowfall)
1137 ASSERT(teamId != TEAM_NEUTRAL);
1138 //a_c a_a h_c h_a the positions in worldstate-array
1139 if (teamId == TEAM_ALLIANCE)
1140 {
1141 if (state == POINT_CONTROLED || state == POINT_DESTROYED)
1142 return 0;
1143 if (state == POINT_ASSAULTED)
1144 return 1;
1145 }
1146 if (teamId == TEAM_HORDE)
1147 {
1148 if (state == POINT_DESTROYED || state == POINT_CONTROLED)
1149 return 2;
1150 if (state == POINT_ASSAULTED)
1151 return 3;
1152 }
1153 LOG_ERROR("bg.battleground", "BG_AV: should update a strange worldstate state:{} team:{}", state, teamId);
1154 return 5; //this will crash the game, but i want to know if something is wrong here
1155}

References ASSERT, LOG_ERROR, POINT_ASSAULTED, POINT_CONTROLED, POINT_DESTROYED, TEAM_ALLIANCE, TEAM_HORDE, and TEAM_NEUTRAL.

Referenced by FillInitialWorldStates(), and UpdateNodeWorldState().

◆ HandleAreaTrigger()

void BattlegroundAV::HandleAreaTrigger ( Player player,
uint32  trigger 
)
overridevirtual

Reimplemented from Battleground.

549{
550 // this is wrong way to implement these things. On official it done by gameobject spell cast.
552 return;
553
554 switch (trigger)
555 {
556 case 95:
557 case 2608:
558 if (player->GetTeamId() != TEAM_ALLIANCE)
559 player->GetSession()->SendAreaTriggerMessage("Only The Alliance can use that portal");
560 else
561 player->LeaveBattleground();
562 break;
563 case 2606:
564 if (player->GetTeamId() != TEAM_HORDE)
565 player->GetSession()->SendAreaTriggerMessage("Only The Horde can use that portal");
566 else
567 player->LeaveBattleground();
568 break;
569 case 3326:
570 case 3327:
571 case 3328:
572 case 3329:
573 case 3330:
574 case 3331:
575 //player->Unmount();
576 break;
577 default:
578 break;
579 }
580}
WorldSession * GetSession() const
Definition Player.h:2005
void LeaveBattleground(Battleground *bg=nullptr)
Definition Player.cpp:11382
void SendAreaTriggerMessage(std::string_view str)
Definition WorldSession.cpp:206

References Player::GetSession(), Battleground::GetStatus(), Player::GetTeamId(), Player::LeaveBattleground(), WorldSession::SendAreaTriggerMessage(), STATUS_IN_PROGRESS, TEAM_ALLIANCE, and TEAM_HORDE.

◆ HandleKillPlayer()

void BattlegroundAV::HandleKillPlayer ( Player player,
Player killer 
)
overridevirtual

Reimplemented from Battleground.

68{
70 return;
71
72 Battleground::HandleKillPlayer(player, killer);
73 UpdateScore(player->GetTeamId(), -1);
74}
virtual void HandleKillPlayer(Player *player, Player *killer)
Definition Battleground.cpp:1716

References Battleground::GetStatus(), Player::GetTeamId(), Battleground::HandleKillPlayer(), STATUS_IN_PROGRESS, and UpdateScore().

◆ HandleKillUnit()

void BattlegroundAV::HandleKillUnit ( Creature unit,
Player killer 
)
overridevirtual

Reimplemented from Battleground.

77{
78 LOG_DEBUG("bg.battleground", "bg_av HandleKillUnit {}", unit->GetEntry());
80 return;
81 uint32 entry = unit->GetEntry();
82 /*
83 uint32 triggerSpawnID = 0;
84 if (creature->GetEntry() == BG_AV_CreatureInfo[AV_NPC_A_CAPTAIN])
85 triggerSpawnID = AV_CPLACE_TRIGGER16;
86 else if (creature->GetEntry() == BG_AV_CreatureInfo[AV_NPC_A_BOSS])
87 triggerSpawnID = AV_CPLACE_TRIGGER17;
88 else if (creature->GetEntry() == BG_AV_CreatureInfo[AV_NPC_H_CAPTAIN])
89 triggerSpawnID = AV_CPLACE_TRIGGER18;
90 else if (creature->GetEntry() == BG_AV_CreatureInfo[AV_NPC_H_BOSS])
91 triggerSpawnID = AV_CPLACE_TRIGGER19;
92 */
94 {
95 CastSpellOnTeam(23658, TEAM_HORDE); //this is a spell which finishes a quest where a player has to kill the boss
100 }
101 else if (entry == BG_AV_CreatureInfo[AV_NPC_H_BOSS])
102 {
103 CastSpellOnTeam(23658, TEAM_ALLIANCE); //this is a spell which finishes a quest where a player has to kill the boss
108 }
109 else if (entry == BG_AV_CreatureInfo[AV_NPC_A_CAPTAIN])
110 {
111 if (!m_CaptainAlive[0])
112 {
113 LOG_ERROR("bg.battleground", "Killed a Captain twice, please report this bug, if you haven't done \".respawn\"");
114 return;
115 }
116 m_CaptainAlive[0] = false;
120 //spawn destroyed aura
121 for (uint8 i = 0; i <= 9; i++)
123 if (Creature* creature = GetBGCreature(AV_CPLACE_HERALD))
124 creature->AI()->Talk(AV_TEXT_HERALD_STORMPIKE_GENERAL_DEAD);
126 }
127 else if (entry == BG_AV_CreatureInfo[AV_NPC_H_CAPTAIN])
128 {
129 if (!m_CaptainAlive[1])
130 {
131 LOG_ERROR("bg.battleground", "Killed a Captain twice, please report this bug, if you haven't done \".respawn\"");
132 return;
133 }
134 m_CaptainAlive[1] = false;
138 //spawn destroyed aura
139 for (uint8 i = 0; i <= 9; i++)
141 if (Creature* creature = GetBGCreature(AV_CPLACE_HERALD))
142 creature->AI()->Talk(AV_TEXT_HERALD_FROSTWOLF_GENERAL_DEAD);
144 }
146 {
150 }
152 {
156 }
157}
#define BG_AV_RES_CAPTAIN
Definition BattlegroundAV.h:36
#define BG_AV_KILL_BOSS
Definition BattlegroundAV.h:31
@ BG_AV_OBJECT_BURN_BUILDING_HORDE
Definition BattlegroundAV.h:315
@ BG_AV_OBJECT_BURN_BUILDING_ALLIANCE
Definition BattlegroundAV.h:314
@ BG_AV_QUEST_CREDIT_MINE
Definition BattlegroundAV.h:116
#define BG_AV_REP_BOSS
Definition BattlegroundAV.h:32
@ AV_TEXT_HERALD_STORMPIKE_GENERAL_DEAD
Definition BattlegroundAV.h:1695
@ AV_TEXT_HERALD_FROSTWOLF_GENERAL_DEAD
Definition BattlegroundAV.h:1694
@ AV_NPC_S_MINE_H_4
Definition BattlegroundAV.h:1262
@ AV_NPC_N_MINE_A_4
Definition BattlegroundAV.h:1245
@ AV_NPC_N_MINE_N_4
Definition BattlegroundAV.h:1241
@ AV_NPC_S_MINE_N_4
Definition BattlegroundAV.h:1253
@ AV_NPC_S_MINE_A_4
Definition BattlegroundAV.h:1258
@ AV_NPC_N_MINE_H_4
Definition BattlegroundAV.h:1249
#define BG_AV_KILL_CAPTAIN
Definition BattlegroundAV.h:34
#define BG_AV_REP_CAPTAIN
Definition BattlegroundAV.h:35
@ SCORE_MINES_CAPTURED
Definition BattlegroundScore.h:48
void EndBattleground(TeamId winnerTeamId) override
Definition BattlegroundAV.cpp:500
void ChangeMineOwner(uint8 mine, TeamId teamId, bool initial=false)
Definition BattlegroundAV.cpp:661
void CastSpellOnTeam(uint32 spellId, TeamId teamId)
Definition Battleground.cpp:709

References AV_CPLACE_HERALD, AV_CPLACE_TRIGGER16, AV_CPLACE_TRIGGER17, AV_CPLACE_TRIGGER18, AV_CPLACE_TRIGGER19, AV_NORTH_MINE, AV_NPC_A_BOSS, AV_NPC_A_CAPTAIN, AV_NPC_H_BOSS, AV_NPC_H_CAPTAIN, AV_NPC_N_MINE_A_4, AV_NPC_N_MINE_H_4, AV_NPC_N_MINE_N_4, AV_NPC_S_MINE_A_4, AV_NPC_S_MINE_H_4, AV_NPC_S_MINE_N_4, AV_SOUTH_MINE, AV_TEXT_HERALD_FROSTWOLF_GENERAL_DEAD, AV_TEXT_HERALD_STORMPIKE_GENERAL_DEAD, BG_AV_CreatureInfo, BG_AV_KILL_BOSS, BG_AV_KILL_CAPTAIN, BG_AV_OBJECT_BURN_BUILDING_ALLIANCE, BG_AV_OBJECT_BURN_BUILDING_HORDE, BG_AV_QUEST_CREDIT_MINE, BG_AV_REP_BOSS, BG_AV_REP_CAPTAIN, BG_AV_RES_CAPTAIN, Battleground::CastSpellOnTeam(), ChangeMineOwner(), Battleground::DelCreature(), EndBattleground(), Battleground::GetBGCreature(), Battleground::GetBonusHonorFromKill(), Object::GetEntry(), Battleground::GetStatus(), Player::GetTeamId(), Player::KilledMonsterCredit(), LOG_DEBUG, LOG_ERROR, m_CaptainAlive, RESPAWN_IMMEDIATELY, Battleground::RewardHonorToTeam(), Battleground::RewardReputationToTeam(), SCORE_MINES_CAPTURED, Battleground::SpawnBGObject(), STATUS_IN_PROGRESS, TEAM_ALLIANCE, TEAM_HORDE, UpdatePlayerScore(), and UpdateScore().

◆ HandleQuestComplete()

void BattlegroundAV::HandleQuestComplete ( uint32  questid,
Player player 
)
160{
162 return;//maybe we should log this, cause this must be a cheater or a big bug
163 TeamId teamId = player->GetTeamId();
164 //TODO add reputation, events (including quest not available anymore, next quest availabe, go/npc de/spawning)and maybe honor
165 LOG_DEBUG("bg.battleground", "BG_AV Quest {} completed", questid);
166 switch (questid)
167 {
172 m_Team_QuestStatus[teamId][0] += 20;
173 if (m_Team_QuestStatus[teamId][0] == 500 || m_Team_QuestStatus[teamId][0] == 1000 || m_Team_QuestStatus[teamId][0] == 1500) //25, 50, 75 turn ins
174 {
175 LOG_DEBUG("bg.battleground", "BG_AV Quest {} completed starting with unit upgrading..", questid);
177 if (m_Nodes[i].OwnerId == player->GetTeamId() && m_Nodes[i].State == POINT_CONTROLED)
178 {
180 PopulateNode(i);
181 //maybe this is bad, because it will instantly respawn all creatures on every grave..
182 }
183 }
184 break;
187 m_Team_QuestStatus[teamId][1]++;
188 RewardReputationToTeam(teamId, 1, teamId);
189 if (m_Team_QuestStatus[teamId][1] == 30)
190 LOG_DEBUG("bg.battleground", "BG_AV Quest {} completed (need to implement some events here", questid);
191 break;
194 m_Team_QuestStatus[teamId][2]++;
195 RewardReputationToTeam(teamId, 1, teamId);
196 if (m_Team_QuestStatus[teamId][2] == 60)
197 LOG_DEBUG("bg.battleground", "BG_AV Quest {} completed (need to implement some events here", questid);
198 break;
201 m_Team_QuestStatus[teamId][3]++;
202 RewardReputationToTeam(teamId, 1, teamId);
203 if (m_Team_QuestStatus[teamId][3] == 120)
204 LOG_DEBUG("bg.battleground", "BG_AV Quest {} completed (need to implement some events here", questid);
205 break;
206 case AV_QUEST_A_BOSS1:
207 case AV_QUEST_H_BOSS1:
208 m_Team_QuestStatus[teamId][4] += 9; //you can turn in 10 or 1 item..
209 [[fallthrough]];
210 case AV_QUEST_A_BOSS2:
211 case AV_QUEST_H_BOSS2:
212 m_Team_QuestStatus[teamId][4]++;
213 if (m_Team_QuestStatus[teamId][4] >= 200)
214 LOG_DEBUG("bg.battleground", "BG_AV Quest {} completed (need to implement some events here", questid);
215 break;
218 m_Team_QuestStatus[teamId][5]++;
219 if (m_Team_QuestStatus[teamId][5] == 28)
220 {
221 LOG_DEBUG("bg.battleground", "BG_AV Quest {} completed (need to implement some events here", questid);
222
223 if (m_Team_QuestStatus[teamId][6] == 7)
224 LOG_DEBUG("bg.battleground", "BG_AV Quest {} completed (need to implement some events here - ground assault ready", questid);
225 }
226 break;
229 m_Team_QuestStatus[teamId][6]++;
230 if (m_Team_QuestStatus[teamId][6] == 7)
231 {
232 LOG_DEBUG("bg.battleground", "BG_AV Quest {} completed (need to implement some events here", questid);
233
234 if (m_Team_QuestStatus[teamId][5] == 20)
235 LOG_DEBUG("bg.battleground", "BG_AV Quest {} completed (need to implement some events here - ground assault ready", questid);
236 }
237 break;
240 m_Team_QuestStatus[teamId][7]++;
241 if (m_Team_QuestStatus[teamId][7] == 25)
242 {
243 LOG_DEBUG("bg.battleground", "BG_AV Quest {} completed (need to implement some events here", questid);
244
245 if (m_Team_QuestStatus[teamId][8] == 25)
246 LOG_DEBUG("bg.battleground", "BG_AV Quest {} completed (need to implement some events here - rider assault ready", questid);
247 }
248 break;
251 m_Team_QuestStatus[teamId][8]++;
252 if (m_Team_QuestStatus[teamId][8] == 25)
253 {
254 LOG_DEBUG("bg.battleground", "BG_AV Quest {} completed (need to implement some events here", questid);
255
256 if (m_Team_QuestStatus[teamId][7] == 25)
257 LOG_DEBUG("bg.battleground", "BG_AV Quest {} completed (need to implement some events here - rider assault ready", questid);
258 }
259 break;
260 default:
261 LOG_DEBUG("bg.battleground", "BG_AV Quest {} completed but is not interesting at all", questid);
262 return; //was no interesting quest at all
263 break;
264 }
265}
@ AV_QUEST_A_COMMANDER3
Definition BattlegroundAV.h:1604
@ AV_QUEST_H_SCRAPS1
Definition BattlegroundAV.h:1598
@ AV_QUEST_H_BOSS1
Definition BattlegroundAV.h:1607
@ AV_QUEST_H_RIDER_TAME
Definition BattlegroundAV.h:1617
@ AV_QUEST_A_COMMANDER1
Definition BattlegroundAV.h:1600
@ AV_QUEST_A_RIDER_HIDE
Definition BattlegroundAV.h:1614
@ AV_QUEST_A_SCRAPS1
Definition BattlegroundAV.h:1596
@ AV_QUEST_H_COMMANDER1
Definition BattlegroundAV.h:1601
@ AV_QUEST_A_RIDER_TAME
Definition BattlegroundAV.h:1616
@ AV_QUEST_H_COMMANDER3
Definition BattlegroundAV.h:1605
@ AV_QUEST_H_NEAR_MINE
Definition BattlegroundAV.h:1611
@ AV_QUEST_A_COMMANDER2
Definition BattlegroundAV.h:1602
@ AV_QUEST_A_OTHER_MINE
Definition BattlegroundAV.h:1612
@ AV_QUEST_A_NEAR_MINE
Definition BattlegroundAV.h:1610
@ AV_QUEST_H_OTHER_MINE
Definition BattlegroundAV.h:1613
@ AV_QUEST_A_SCRAPS2
Definition BattlegroundAV.h:1597
@ AV_QUEST_H_BOSS2
Definition BattlegroundAV.h:1609
@ AV_QUEST_A_BOSS1
Definition BattlegroundAV.h:1606
@ AV_QUEST_H_COMMANDER2
Definition BattlegroundAV.h:1603
@ AV_QUEST_H_RIDER_HIDE
Definition BattlegroundAV.h:1615
@ AV_QUEST_A_BOSS2
Definition BattlegroundAV.h:1608
@ AV_QUEST_H_SCRAPS2
Definition BattlegroundAV.h:1599

References AV_QUEST_A_BOSS1, AV_QUEST_A_BOSS2, AV_QUEST_A_COMMANDER1, AV_QUEST_A_COMMANDER2, AV_QUEST_A_COMMANDER3, AV_QUEST_A_NEAR_MINE, AV_QUEST_A_OTHER_MINE, AV_QUEST_A_RIDER_HIDE, AV_QUEST_A_RIDER_TAME, AV_QUEST_A_SCRAPS1, AV_QUEST_A_SCRAPS2, AV_QUEST_H_BOSS1, AV_QUEST_H_BOSS2, AV_QUEST_H_COMMANDER1, AV_QUEST_H_COMMANDER2, AV_QUEST_H_COMMANDER3, AV_QUEST_H_NEAR_MINE, AV_QUEST_H_OTHER_MINE, AV_QUEST_H_RIDER_HIDE, AV_QUEST_H_RIDER_TAME, AV_QUEST_H_SCRAPS1, AV_QUEST_H_SCRAPS2, BG_AV_NODES_FIRSTAID_STATION, BG_AV_NODES_FROSTWOLF_HUT, DePopulateNode(), Battleground::GetStatus(), Player::GetTeamId(), LOG_DEBUG, m_Nodes, m_Team_QuestStatus, POINT_CONTROLED, PopulateNode(), Battleground::RewardReputationToTeam(), BG_AV_NodeInfo::State, and STATUS_IN_PROGRESS.

◆ InitNode()

void BattlegroundAV::InitNode ( BG_AV_Nodes  node,
TeamId  teamId,
bool  tower 
)
private

◆ IsAllTowersControlledAndCaptainAlive()

bool BattlegroundAV::IsAllTowersControlledAndCaptainAlive ( TeamId  teamId) const
1803{
1804 if (teamId == TEAM_ALLIANCE)
1805 {
1806 for (BG_AV_Nodes i = BG_AV_NODES_DUNBALDAR_SOUTH; i <= BG_AV_NODES_STONEHEART_BUNKER; ++i) // alliance towers controlled
1807 {
1808 if (m_Nodes[i].State == POINT_CONTROLED)
1809 {
1810 if (m_Nodes[i].OwnerId != TEAM_ALLIANCE)
1811 return false;
1812 }
1813 else
1814 return false;
1815 }
1816
1817 for (BG_AV_Nodes i = BG_AV_NODES_ICEBLOOD_TOWER; i <= BG_AV_NODES_FROSTWOLF_WTOWER; ++i) // horde towers destroyed
1818 if (m_Nodes[i].State != POINT_DESTROYED)
1819 return false;
1820
1821 return m_CaptainAlive[0];
1822 }
1823 else if (teamId == TEAM_HORDE)
1824 {
1825 for (BG_AV_Nodes i = BG_AV_NODES_ICEBLOOD_TOWER; i <= BG_AV_NODES_FROSTWOLF_WTOWER; ++i) // horde towers controlled
1826 {
1827 if (m_Nodes[i].State == POINT_CONTROLED)
1828 {
1829 if (m_Nodes[i].OwnerId != TEAM_HORDE)
1830 return false;
1831 }
1832 else
1833 return false;
1834 }
1835
1836 for (BG_AV_Nodes i = BG_AV_NODES_DUNBALDAR_SOUTH; i <= BG_AV_NODES_STONEHEART_BUNKER; ++i) // alliance towers destroyed
1837 if (m_Nodes[i].State != POINT_DESTROYED)
1838 return false;
1839
1840 return m_CaptainAlive[1];
1841 }
1842
1843 return false;
1844}

References BG_AV_NODES_DUNBALDAR_SOUTH, BG_AV_NODES_FROSTWOLF_WTOWER, BG_AV_NODES_ICEBLOOD_TOWER, BG_AV_NODES_STONEHEART_BUNKER, m_CaptainAlive, m_Nodes, POINT_CONTROLED, POINT_DESTROYED, TEAM_ALLIANCE, and TEAM_HORDE.

Referenced by achievement_bg_av_perfection::OnCheck().

◆ IsBothMinesControlledByTeam()

bool BattlegroundAV::IsBothMinesControlledByTeam ( TeamId  teamId) const
1794{
1795 for (auto& mine : m_Mine_Owner)
1796 if (mine != teamId)
1797 return false;
1798
1799 return true;
1800}

References m_Mine_Owner.

Referenced by achievement_everything_counts::OnCheck().

◆ IsTower()

bool BattlegroundAV::IsTower ( BG_AV_Nodes  node)
inlineprivate

◆ PlayerCanDoMineQuest()

bool BattlegroundAV::PlayerCanDoMineQuest ( int32  GOId,
TeamId  teamId 
)
747{
748 if (GOId == BG_AV_OBJECTID_MINE_N)
749 return (m_Mine_Owner[AV_NORTH_MINE] == teamId);
750 if (GOId == BG_AV_OBJECTID_MINE_S)
751 return (m_Mine_Owner[AV_SOUTH_MINE] == teamId);
752 return true; //cause it's no mine'object it is ok if this is true
753}
@ BG_AV_OBJECTID_MINE_N
Definition BattlegroundAV.h:161
@ BG_AV_OBJECTID_MINE_S
Definition BattlegroundAV.h:162

References AV_NORTH_MINE, AV_SOUTH_MINE, BG_AV_OBJECTID_MINE_N, BG_AV_OBJECTID_MINE_S, and m_Mine_Owner.

◆ PopulateNode()

void BattlegroundAV::PopulateNode ( BG_AV_Nodes  node)
private
756{
757 TeamId ownerId = m_Nodes[node].OwnerId;
758
759 uint32 c_place = AV_CPLACE_DEFENSE_STORM_AID + (4 * node);
760 uint32 creatureid;
761 if (IsTower(node))
762 creatureid = (ownerId == TEAM_ALLIANCE) ? AV_NPC_A_TOWERDEFENSE : AV_NPC_H_TOWERDEFENSE;
763 else
764 {
765 if (m_Team_QuestStatus[ownerId][0] < 500)
766 creatureid = (ownerId == TEAM_ALLIANCE) ? AV_NPC_A_GRAVEDEFENSE0 : AV_NPC_H_GRAVEDEFENSE0;
767 else if (m_Team_QuestStatus[ownerId][0] < 1000)
768 creatureid = (ownerId == TEAM_ALLIANCE) ? AV_NPC_A_GRAVEDEFENSE1 : AV_NPC_H_GRAVEDEFENSE1;
769 else if (m_Team_QuestStatus[ownerId][0] < 1500)
770 creatureid = (ownerId == TEAM_ALLIANCE) ? AV_NPC_A_GRAVEDEFENSE2 : AV_NPC_H_GRAVEDEFENSE2;
771 else
772 creatureid = (ownerId == TEAM_ALLIANCE) ? AV_NPC_A_GRAVEDEFENSE3 : AV_NPC_H_GRAVEDEFENSE3;
773 //spiritguide
774 if (BgCreatures[node])
775 DelCreature(node);
776 if (!AddSpiritGuide(node, BG_AV_CreaturePos[node][0], BG_AV_CreaturePos[node][1], BG_AV_CreaturePos[node][2], BG_AV_CreaturePos[node][3], ownerId))
777 LOG_ERROR("bg.battleground", "AV: couldn't spawn spiritguide at node {}", node);
778 }
779 for (uint8 i = 0; i < 4; i++)
780 AddAVCreature(creatureid, c_place + i);
781
782 if (node >= BG_AV_NODES_MAX)//fail safe
783 return;
784 Creature* trigger = GetBgMap()->GetCreature(BgCreatures[node + 302]);//0-302 other creatures
785 if (!trigger)
786 {
787 trigger = AddCreature(WORLD_TRIGGER,
788 node + 302,
789 BG_AV_CreaturePos[node + 302][0],
790 BG_AV_CreaturePos[node + 302][1],
791 BG_AV_CreaturePos[node + 302][2],
792 BG_AV_CreaturePos[node + 302][3]);
793 }
794
795 //add bonus honor aura trigger creature when node is accupied
796 //cast bonus aura (+50% honor in 25yards)
797 //aura should only apply to players who have accupied the node, set correct faction for trigger
798 if (trigger)
799 {
800 if (ownerId != TEAM_ALLIANCE && ownerId != TEAM_HORDE)//node can be neutral, remove trigger
801 {
802 DelCreature(node + 302);
803 return;
804 }
806 trigger->CastSpell(trigger, SPELL_HONORABLE_DEFENDER_25Y, false);
807 }
808}
@ AV_NPC_A_GRAVEDEFENSE1
Definition BattlegroundAV.h:1215
@ AV_NPC_H_GRAVEDEFENSE2
Definition BattlegroundAV.h:1224
@ AV_NPC_H_GRAVEDEFENSE1
Definition BattlegroundAV.h:1223
@ AV_NPC_A_GRAVEDEFENSE2
Definition BattlegroundAV.h:1216
@ FACTION_ALLIANCE_GENERIC
Definition SharedDefines.h:206
@ FACTION_HORDE_GENERIC
Definition SharedDefines.h:205
bool AddSpiritGuide(uint32 type, float x, float y, float z, float o, TeamId teamId)
Definition Battleground.cpp:1635
BattlegroundMap * GetBgMap() const
Definition Battleground.h:450
Creature * GetCreature(ObjectGuid const guid)
Definition Map.cpp:2498
void SetFaction(uint32 faction)
Definition Unit.cpp:10097
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

References AddAVCreature(), Battleground::AddCreature(), Battleground::AddSpiritGuide(), AV_CPLACE_DEFENSE_STORM_AID, AV_NPC_A_GRAVEDEFENSE0, AV_NPC_A_GRAVEDEFENSE1, AV_NPC_A_GRAVEDEFENSE2, AV_NPC_A_GRAVEDEFENSE3, AV_NPC_A_TOWERDEFENSE, AV_NPC_H_GRAVEDEFENSE0, AV_NPC_H_GRAVEDEFENSE1, AV_NPC_H_GRAVEDEFENSE2, AV_NPC_H_GRAVEDEFENSE3, AV_NPC_H_TOWERDEFENSE, BG_AV_CreaturePos, BG_AV_NODES_MAX, Battleground::BgCreatures, Unit::CastSpell(), Battleground::DelCreature(), FACTION_ALLIANCE_GENERIC, FACTION_HORDE_GENERIC, Battleground::GetBgMap(), Map::GetCreature(), IsTower(), LOG_ERROR, m_Nodes, m_Team_QuestStatus, BG_AV_NodeInfo::OwnerId, Unit::SetFaction(), SPELL_HONORABLE_DEFENDER_25Y, TEAM_ALLIANCE, TEAM_HORDE, and WORLD_TRIGGER.

Referenced by EventPlayerDefendsPoint(), EventPlayerDestroyedPoint(), HandleQuestComplete(), and SetupBattleground().

◆ PostUpdateImpl()

void BattlegroundAV::PostUpdateImpl ( uint32  )
overrideprivatevirtual

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 from Battleground.

392{
394 {
395 for (uint8 i = 0; i <= 1; i++) //0=alliance, 1=horde
396 {
397 if (!m_CaptainAlive[i])
398 {
399 continue;
400 }
401 if (m_CaptainBuffTimer[i] > diff)
402 {
403 m_CaptainBuffTimer[i] -= diff;
404 }
405 else
406 {
407 if (i == 0)
408 {
410 Creature* creature = GetBGCreature(AV_CPLACE_MAX + 61);
411 if (creature)
412 {
413 std::string creatureText = sCreatureTextMgr->GetLocalizedChatString(creature->GetEntry(), creature->getGender(), 0, 0, DEFAULT_LOCALE);
414 YellToAll(creature, creatureText.c_str(), LANG_COMMON);
415 }
416 }
417 else
418 {
420 Creature* creature = GetBGCreature(AV_CPLACE_MAX + 59); //TODO: make the captains a dynamic creature
421 if (creature)
422 {
423 std::string creatureText = sCreatureTextMgr->GetLocalizedChatString(creature->GetEntry(), creature->getGender(), 2, 0, DEFAULT_LOCALE);
424 YellToAll(creature, creatureText.c_str(), LANG_ORCISH);
425 }
426 }
427 m_CaptainBuffTimer[i] = 120000 + urand(0, 4) * 60000; //as far as i could see, the buff is randomly so i make 2minutes (thats the duration of the buff itself) + 0-4minutes TODO get the right times
428 }
429 }
430 //add points from mine owning, and look if he neutral team wanrts to reclaim the mine
431 m_Mine_Timer -= diff;
432 for (uint8 mine = 0; mine < 2; mine++)
433 {
434 if (m_Mine_Owner[mine] == TEAM_ALLIANCE || m_Mine_Owner[mine] == TEAM_HORDE)
435 {
436 if (m_Mine_Timer <= 0)
437 UpdateScore(m_Mine_Owner[mine], 1);
438
439 if (m_Mine_Reclaim_Timer[mine] > diff)
440 m_Mine_Reclaim_Timer[mine] -= diff;
441 else //we don't need to set this timer to 0 cause this codepart wont get called when this thing is 0
442 {
444 }
445 }
446 }
447 if (m_Mine_Timer <= 0)
448 m_Mine_Timer = AV_MINE_TICK_TIMER; //this is at the end, cause we need to update both mines
449
450 //looks for all timers of the nodes and destroy the building (for graveyards the building wont get destroyed, it goes just to the other team
452 if (m_Nodes[i].State == POINT_ASSAULTED) //maybe remove this
453 {
454 if (m_Nodes[i].Timer > diff)
455 m_Nodes[i].Timer -= diff;
456 else
458 }
459 }
460}
@ AV_BUFF_H_CAPTAIN
Definition BattlegroundAV.h:1541
@ AV_BUFF_A_CAPTAIN
Definition BattlegroundAV.h:1540
@ AV_MINE_TICK_TIMER
Definition BattlegroundAV.h:114
@ LANG_COMMON
Definition SharedDefines.h:740
@ LANG_ORCISH
Definition SharedDefines.h:736
Timer
Definition boss_grizzle.cpp:30
void EventPlayerDestroyedPoint(BG_AV_Nodes node)
Definition BattlegroundAV.cpp:608
uint8 getGender() const
Definition Unit.h:814

References AV_BUFF_A_CAPTAIN, AV_BUFF_H_CAPTAIN, AV_CPLACE_MAX, AV_MINE_TICK_TIMER, BG_AV_NODES_FIRSTAID_STATION, BG_AV_NODES_MAX, Battleground::CastSpellOnTeam(), ChangeMineOwner(), DEFAULT_LOCALE, EventPlayerDestroyedPoint(), Battleground::GetBGCreature(), Object::GetEntry(), Unit::getGender(), Battleground::GetStatus(), LANG_COMMON, LANG_ORCISH, m_CaptainAlive, m_CaptainBuffTimer, m_Mine_Owner, m_Mine_Reclaim_Timer, m_Mine_Timer, m_Nodes, POINT_ASSAULTED, sCreatureTextMgr, STATUS_IN_PROGRESS, TEAM_ALLIANCE, TEAM_HORDE, TEAM_NEUTRAL, BG_AV_NodeInfo::Timer, UpdateScore(), urand(), and Battleground::YellToAll().

◆ RemovePlayer()

void BattlegroundAV::RemovePlayer ( Player player)
overridevirtual

Reimplemented from Battleground.

541{
542 //TODO search more buffs
546}
@ AV_BUFF_ARMOR
Definition BattlegroundAV.h:1539
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:4941

References AV_BUFF_A_CAPTAIN, AV_BUFF_ARMOR, AV_BUFF_H_CAPTAIN, and Unit::RemoveAurasDueToSpell().

◆ ResetBGSubclass()

void BattlegroundAV::ResetBGSubclass ( )
overridevirtual

Reimplemented from Battleground.

1766{
1767 for (uint8 i = 0; i < 2; i++) //forloop for both teams (it just make 0 == alliance and 1 == horde also for both mines 0=north 1=south
1768 {
1769 for (uint8 j = 0; j < 9; j++)
1770 m_Team_QuestStatus[i][j] = 0;
1772 m_IsInformedNearVictory[i] = false;
1773 m_CaptainAlive[i] = true;
1774 m_CaptainBuffTimer[i] = 120000 + urand(0, 4) * 60; //as far as i could see, the buff is randomly so i make 2minutes (thats the duration of the buff itself) + 0-4minutes TODO get the right times
1776 }
1777 for (BG_AV_Nodes i = BG_AV_NODES_FIRSTAID_STATION; i <= BG_AV_NODES_STONEHEART_GRAVE; ++i) //alliance graves
1778 InitNode(i, TEAM_ALLIANCE, false);
1779 for (BG_AV_Nodes i = BG_AV_NODES_DUNBALDAR_SOUTH; i <= BG_AV_NODES_STONEHEART_BUNKER; ++i) //alliance towers
1780 InitNode(i, TEAM_ALLIANCE, true);
1781 for (BG_AV_Nodes i = BG_AV_NODES_ICEBLOOD_GRAVE; i <= BG_AV_NODES_FROSTWOLF_HUT; ++i) //horde graves
1782 InitNode(i, TEAM_HORDE, false);
1783 for (BG_AV_Nodes i = BG_AV_NODES_ICEBLOOD_TOWER; i <= BG_AV_NODES_FROSTWOLF_WTOWER; ++i) //horde towers
1784 InitNode(i, TEAM_HORDE, true);
1785 InitNode(BG_AV_NODES_SNOWFALL_GRAVE, TEAM_NEUTRAL, false); //give snowfall neutral owner
1786
1788 for (uint16 i = 0; i < static_cast<uint16>(AV_CPLACE_MAX) + AV_STATICCPLACE_MAX; i++)
1789 if (BgCreatures[i])
1790 DelCreature(i);
1791}

References AV_CPLACE_MAX, AV_MINE_TICK_TIMER, AV_STATICCPLACE_MAX, BG_AV_NODES_DUNBALDAR_SOUTH, BG_AV_NODES_FIRSTAID_STATION, BG_AV_NODES_FROSTWOLF_HUT, BG_AV_NODES_FROSTWOLF_WTOWER, BG_AV_NODES_ICEBLOOD_GRAVE, BG_AV_NODES_ICEBLOOD_TOWER, BG_AV_NODES_SNOWFALL_GRAVE, BG_AV_NODES_STONEHEART_BUNKER, BG_AV_NODES_STONEHEART_GRAVE, BG_AV_SCORE_INITIAL_POINTS, Battleground::BgCreatures, Battleground::DelCreature(), InitNode(), m_CaptainAlive, m_CaptainBuffTimer, m_IsInformedNearVictory, m_Mine_Owner, m_Mine_Timer, m_Team_QuestStatus, m_Team_Scores, TEAM_ALLIANCE, TEAM_HORDE, TEAM_NEUTRAL, and urand().

◆ SendMineWorldStates()

void BattlegroundAV::SendMineWorldStates ( uint32  mine)
private
1167{
1168 ASSERT(mine == AV_NORTH_MINE || mine == AV_SOUTH_MINE);
1169
1170 uint8 owner = 1;
1171
1172 if (m_Mine_Owner[mine] == TEAM_ALLIANCE)
1173 owner = 0;
1174 else if (m_Mine_Owner[mine] == TEAM_HORDE)
1175 owner = 2;
1176
1177 for (uint8 i = 0; i < 3; ++i)
1178 UpdateWorldState(BG_AV_MineWorldStates[mine][i], 0); // Xinef: Clear data for consistency and buglessness
1179
1180 UpdateWorldState(BG_AV_MineWorldStates[mine][owner], 1);
1181}
const uint32 BG_AV_MineWorldStates[2][3]
Definition BattlegroundAV.h:1553
void UpdateWorldState(uint32 variable, uint32 value)
Definition Battleground.cpp:783

References ASSERT, AV_NORTH_MINE, AV_SOUTH_MINE, BG_AV_MineWorldStates, m_Mine_Owner, TEAM_ALLIANCE, TEAM_HORDE, and Battleground::UpdateWorldState().

Referenced by ChangeMineOwner(), and FillInitialWorldStates().

◆ SetupBattleground()

bool BattlegroundAV::SetupBattleground ( )
overridevirtual

Reimplemented from Battleground.

1213{
1214 // Create starting objects
1215
1216 //spawn node-objects
1218 {
1220 {
1221 if (!AddObject(i, BG_AV_OBJECTID_BANNER_A_B, BG_AV_ObjectPos[i][0], BG_AV_ObjectPos[i][1], BG_AV_ObjectPos[i][2], BG_AV_ObjectPos[i][3], 0, 0, std::sin(BG_AV_ObjectPos[i][3] / 2), cos(BG_AV_ObjectPos[i][3] / 2), RESPAWN_ONE_DAY)
1222 || !AddObject(i + 11, BG_AV_OBJECTID_BANNER_CONT_A_B, BG_AV_ObjectPos[i][0], BG_AV_ObjectPos[i][1], BG_AV_ObjectPos[i][2], BG_AV_ObjectPos[i][3], 0, 0, std::sin(BG_AV_ObjectPos[i][3] / 2), cos(BG_AV_ObjectPos[i][3] / 2), RESPAWN_ONE_DAY)
1223 || !AddObject(i + 33, BG_AV_OBJECTID_BANNER_H_B, BG_AV_ObjectPos[i][0], BG_AV_ObjectPos[i][1], BG_AV_ObjectPos[i][2], BG_AV_ObjectPos[i][3], 0, 0, std::sin(BG_AV_ObjectPos[i][3] / 2), cos(BG_AV_ObjectPos[i][3] / 2), RESPAWN_ONE_DAY)
1224 || !AddObject(i + 22, BG_AV_OBJECTID_BANNER_CONT_H_B, BG_AV_ObjectPos[i][0], BG_AV_ObjectPos[i][1], BG_AV_ObjectPos[i][2], BG_AV_ObjectPos[i][3], 0, 0, std::sin(BG_AV_ObjectPos[i][3] / 2), cos(BG_AV_ObjectPos[i][3] / 2), RESPAWN_ONE_DAY)
1225 //aura
1229 {
1230 LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some object Battleground not created!2");
1231 return false;
1232 }
1233 }
1234 else //towers
1235 {
1236 if (i <= BG_AV_NODES_STONEHEART_BUNKER) //alliance towers
1237 {
1238 if (!AddObject(i, BG_AV_OBJECTID_BANNER_A, BG_AV_ObjectPos[i][0], BG_AV_ObjectPos[i][1], BG_AV_ObjectPos[i][2], BG_AV_ObjectPos[i][3], 0, 0, std::sin(BG_AV_ObjectPos[i][3] / 2), cos(BG_AV_ObjectPos[i][3] / 2), RESPAWN_ONE_DAY)
1239 || !AddObject(i + 22, BG_AV_OBJECTID_BANNER_CONT_H, BG_AV_ObjectPos[i][0], BG_AV_ObjectPos[i][1], BG_AV_ObjectPos[i][2], BG_AV_ObjectPos[i][3], 0, 0, std::sin(BG_AV_ObjectPos[i][3] / 2), cos(BG_AV_ObjectPos[i][3] / 2), RESPAWN_ONE_DAY)
1240 || !AddObject(BG_AV_OBJECT_TAURA_A_DUNBALDAR_SOUTH + (2 * (i - BG_AV_NODES_DUNBALDAR_SOUTH)), BG_AV_OBJECTID_AURA_A, BG_AV_ObjectPos[i + 8][0], BG_AV_ObjectPos[i + 8][1], BG_AV_ObjectPos[i + 8][2], BG_AV_ObjectPos[i + 8][3], 0, 0, std::sin(BG_AV_ObjectPos[i + 8][3] / 2), cos(BG_AV_ObjectPos[i + 8][3] / 2), RESPAWN_ONE_DAY)
1241 || !AddObject(BG_AV_OBJECT_TAURA_H_DUNBALDAR_SOUTH + (2 * (i - BG_AV_NODES_DUNBALDAR_SOUTH)), BG_AV_OBJECTID_AURA_N, BG_AV_ObjectPos[i + 8][0], BG_AV_ObjectPos[i + 8][1], BG_AV_ObjectPos[i + 8][2], BG_AV_ObjectPos[i + 8][3], 0, 0, std::sin(BG_AV_ObjectPos[i + 8][3] / 2), cos(BG_AV_ObjectPos[i + 8][3] / 2), RESPAWN_ONE_DAY)
1244 {
1245 LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some object Battleground not created!3");
1246 return false;
1247 }
1248 }
1249 else //horde towers
1250 {
1251 if (!AddObject(i + 7, BG_AV_OBJECTID_BANNER_CONT_A, BG_AV_ObjectPos[i][0], BG_AV_ObjectPos[i][1], BG_AV_ObjectPos[i][2], BG_AV_ObjectPos[i][3], 0, 0, std::sin(BG_AV_ObjectPos[i][3] / 2), cos(BG_AV_ObjectPos[i][3] / 2), RESPAWN_ONE_DAY)
1252 || !AddObject(i + 29, BG_AV_OBJECTID_BANNER_H, BG_AV_ObjectPos[i][0], BG_AV_ObjectPos[i][1], BG_AV_ObjectPos[i][2], BG_AV_ObjectPos[i][3], 0, 0, std::sin(BG_AV_ObjectPos[i][3] / 2), cos(BG_AV_ObjectPos[i][3] / 2), RESPAWN_ONE_DAY)
1253 || !AddObject(BG_AV_OBJECT_TAURA_A_DUNBALDAR_SOUTH + (2 * (i - BG_AV_NODES_DUNBALDAR_SOUTH)), BG_AV_OBJECTID_AURA_N, BG_AV_ObjectPos[i + 8][0], BG_AV_ObjectPos[i + 8][1], BG_AV_ObjectPos[i + 8][2], BG_AV_ObjectPos[i + 8][3], 0, 0, std::sin(BG_AV_ObjectPos[i + 8][3] / 2), cos(BG_AV_ObjectPos[i + 8][3] / 2), RESPAWN_ONE_DAY)
1254 || !AddObject(BG_AV_OBJECT_TAURA_H_DUNBALDAR_SOUTH + (2 * (i - BG_AV_NODES_DUNBALDAR_SOUTH)), BG_AV_OBJECTID_AURA_H, BG_AV_ObjectPos[i + 8][0], BG_AV_ObjectPos[i + 8][1], BG_AV_ObjectPos[i + 8][2], BG_AV_ObjectPos[i + 8][3], 0, 0, std::sin(BG_AV_ObjectPos[i + 8][3] / 2), cos(BG_AV_ObjectPos[i + 8][3] / 2), RESPAWN_ONE_DAY)
1257 {
1258 LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some object Battleground not created!4");
1259 return false;
1260 }
1261 }
1262 for (uint8 j = 0; j <= 9; j++) //burning aura
1263 {
1265 {
1266 LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some object Battleground not created!5.{}", i);
1267 return false;
1268 }
1269 }
1270 }
1271 }
1272 for (uint8 i = 0; i < 2; i++) //burning aura for buildings
1273 {
1274 for (uint8 j = 0; j <= 9; j++)
1275 {
1276 if (j < 5)
1277 {
1279 {
1280 LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some object Battleground not created!6.{}", i);
1281 return false;
1282 }
1283 }
1284 else
1285 {
1287 {
1288 LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some object Battleground not created!7.{}", i);
1289 return false;
1290 }
1291 }
1292 }
1293 }
1295 {
1297 {
1298 LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some mine supplies Battleground not created!7.5.{}", i);
1299 return false;
1300 }
1301 }
1303 {
1305 {
1306 LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some mine supplies Battleground not created!7.6.{}", i);
1307 return false;
1308 }
1309 }
1310
1312 {
1313 LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some object Battleground not created!8");
1314 return false;
1315 }
1316 for (uint8 i = 0; i < 4; i++)
1317 {
1322 {
1323 LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some object Battleground not created!9.{}", i);
1324 return false;
1325 }
1326 }
1327
1328 // Handpacked snowdrift, only during holiday
1331 {
1333 return false;
1334 }
1335
1336 // Hallow's End decorations
1339 {
1341 std::get<0>(BG_AV_HallowsEndObjectPos[i]),
1342 std::get<1>(BG_AV_HallowsEndObjectPos[i]).GetPositionX(),
1343 std::get<1>(BG_AV_HallowsEndObjectPos[i]).GetPositionY(),
1344 std::get<1>(BG_AV_HallowsEndObjectPos[i]).GetPositionZ(),
1345 std::get<1>(BG_AV_HallowsEndObjectPos[i]).GetOrientation(),
1346 std::get<2>(BG_AV_HallowsEndObjectPos[i])[0],
1347 std::get<2>(BG_AV_HallowsEndObjectPos[i])[1],
1348 std::get<2>(BG_AV_HallowsEndObjectPos[i])[2],
1349 std::get<2>(BG_AV_HallowsEndObjectPos[i])[3],
1351 {
1352 LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some object Battleground not created!11.{}", i);
1353 return false;
1354 }
1355 }
1356
1357 // Generic gameobjects
1359 {
1361 std::get<0>(BG_AV_GenericObjectPos[i]),
1362 std::get<1>(BG_AV_GenericObjectPos[i]).GetPositionX(),
1363 std::get<1>(BG_AV_GenericObjectPos[i]).GetPositionY(),
1364 std::get<1>(BG_AV_GenericObjectPos[i]).GetPositionZ(),
1365 std::get<1>(BG_AV_GenericObjectPos[i]).GetOrientation(),
1366 std::get<2>(BG_AV_GenericObjectPos[i])[0],
1367 std::get<2>(BG_AV_GenericObjectPos[i])[1],
1368 std::get<2>(BG_AV_GenericObjectPos[i])[2],
1369 std::get<2>(BG_AV_GenericObjectPos[i])[3],
1371 {
1372 LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some object Battleground not created!10.{}", i);
1373 return false;
1374 }
1375 }
1376
1377 // Quest banners
1379 {
1380 LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some object Battleground not created!8");
1381 return false;
1382 }
1384 {
1385 LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some object Battleground not created!8");
1386 return false;
1387 }
1388
1389 uint16 i;
1390 LOG_DEBUG("bg.battleground", "Alterac Valley: entering state STATUS_WAIT_JOIN ...");
1391 // Initial Nodes
1392 for (i = 0; i < BG_AV_OBJECT_MAX; i++)
1394
1396 {
1399 }
1400
1403
1405 {
1409 }
1410
1412 {
1414 SpawnBGObject(i + 16, RESPAWN_IMMEDIATELY); //aura
1415 }
1416
1418 {
1420 SpawnBGObject(i + 16, RESPAWN_IMMEDIATELY); //aura
1421 }
1422
1423 //snowfall and the doors
1426
1427 // Handpacked snowdrift, only during holiday
1431
1432 // Hallow's End decorations
1436
1437 // Generic gameobjects
1440
1441 // Quest banners
1444
1445 //creatures
1446 LOG_DEBUG("bg.battleground", "BG_AV start poputlating nodes");
1448 {
1449 if (m_Nodes[i].OwnerId != TEAM_NEUTRAL)
1451 }
1452 //all creatures which don't get despawned through the script are static
1453 LOG_DEBUG("bg.battleground", "BG_AV: start spawning static creatures");
1454 for (i = 0; i < AV_STATICCPLACE_MAX; i++)
1456 //mainspiritguides:
1457 LOG_DEBUG("bg.battleground", "BG_AV: start spawning spiritguides creatures");
1460 //spawn the marshals (those who get deleted, if a tower gets destroyed)
1461 LOG_DEBUG("bg.battleground", "BG_AV: start spawning marshal creatures");
1465
1466 if (
1467 // alliance gates
1469 // horde gates
1471 {
1472 LOG_ERROR("sql.sql", "BatteGroundAV: Failed to spawn some object Battleground not created!1");
1473 return false;
1474 }
1475
1476 return true;
1477}
const float BG_AV_DoorPositons[2][4]
Definition BattlegroundAV.h:754
@ BG_AV_OBJECTID_FROSTWOLF_BANNER
Definition BattlegroundAV.h:170
@ BG_AV_OBJECTID_SMOKE
Definition BattlegroundAV.h:165
@ BG_AV_OBJECTID_SNOWFALL_CANDY_A
Definition BattlegroundAV.h:138
@ BG_AV_OBJECTID_SNOWFALL_CANDY_PH
Definition BattlegroundAV.h:141
@ BG_AV_OBJECTID_FIRE
Definition BattlegroundAV.h:164
@ BG_AV_OBJECTID_TOWER_BANNER_PA
Definition BattlegroundAV.h:146
@ BG_AV_OBJECTID_TOWER_BANNER_H
Definition BattlegroundAV.h:145
@ BG_AV_OBJECTID_SNOWFALL_CANDY_H
Definition BattlegroundAV.h:140
@ BG_AV_OBJECTID_SNOWFALL_CANDY_PA
Definition BattlegroundAV.h:139
@ BG_AV_OBJECTID_GATE_H
Definition BattlegroundAV.h:158
@ BG_AV_OBJECTID_TOWER_BANNER_PH
Definition BattlegroundAV.h:147
@ BG_AV_OBJECTID_STORMPIKE_BANNER
Definition BattlegroundAV.h:171
@ BG_AV_OBJECTID_HARDPACKED_SNOWDRIFT
Definition BattlegroundAV.h:168
@ BG_AV_OBJECTID_AURA_N
Definition BattlegroundAV.h:152
@ BG_AV_OBJECTID_AURA_A
Definition BattlegroundAV.h:150
@ BG_AV_OBJECTID_AURA_H
Definition BattlegroundAV.h:151
@ BG_AV_OBJECTID_TOWER_BANNER_A
Definition BattlegroundAV.h:144
@ BG_AV_OBJECTID_GATE_A
Definition BattlegroundAV.h:157
std::tuple< uint32, Position, std::array< float, 4 > > const BG_AV_GenericObjectPos[BG_AV_OBJECT_GENERIC_MAX - BG_AV_OBJECT_GENERIC_MIN+1]
Definition BattlegroundAV.h:574
const float BG_AV_ObjectPos[AV_OPLACE_MAX][4]
Definition BattlegroundAV.h:388
@ AV_OPLACE_BURN_DUNBALDAR_SOUTH
Definition BattlegroundAV.h:362
@ AV_OPLACE_MINE_SUPPLY_N_MIN
Definition BattlegroundAV.h:376
@ AV_OPLACE_SNOW_1
Definition BattlegroundAV.h:372
@ AV_OPLACE_HANDPACKED_SNOWDRIFT_MIN
Definition BattlegroundAV.h:380
@ AV_OPLACE_STORMPIKE_BANNER
Definition BattlegroundAV.h:383
@ AV_OPLACE_MINE_SUPPLY_S_MIN
Definition BattlegroundAV.h:378
@ AV_OPLACE_BURN_BUILDING_A
Definition BattlegroundAV.h:370
@ AV_OPLACE_FROSTWOLF_BANNER
Definition BattlegroundAV.h:382
@ BG_AV_OBJECT_MINE_SUPPLY_N_MIN
Definition BattlegroundAV.h:320
@ BG_AV_OBJECT_MINE_SUPPLY_N_MAX
Definition BattlegroundAV.h:321
@ BG_AV_OBJECT_MINE_SUPPLY_S_MIN
Definition BattlegroundAV.h:322
@ BG_AV_OBJECT_MINE_SUPPLY_S_MAX
Definition BattlegroundAV.h:323
@ BG_AV_OBJECT_HALLOWS_END_MIN
Definition BattlegroundAV.h:330
@ BG_AV_OBJECT_DOOR_H
Definition BattlegroundAV.h:247
@ BG_AV_OBJECT_FLAG_A_FIRSTAID_STATION
Definition BattlegroundAV.h:197
@ BG_AV_OBJECT_FLAG_H_ICEBLOOD_GRAVE
Definition BattlegroundAV.h:237
@ BG_AV_OBJECT_HANDPACKED_SNOWDRIFT_MIN
Definition BattlegroundAV.h:324
@ BG_AV_OBJECT_TFLAG_H_ICEBLOOD_TOWER
Definition BattlegroundAV.h:282
@ BG_AV_OBJECT_TFLAG_A_STONEHEART_BUNKER
Definition BattlegroundAV.h:279
@ BG_AV_OBJECT_AURA_H_FIRSTAID_STATION
Definition BattlegroundAV.h:252
@ BG_AV_OBJECT_HALLOWS_END_MAX
Definition BattlegroundAV.h:331
@ BG_AV_OBJECT_HANDPACKED_SNOWDRIFT_MAX
Definition BattlegroundAV.h:325
@ BG_AV_OBJECT_TFLAG_H_FROSTWOLF_WTOWER
Definition BattlegroundAV.h:288
@ BG_AV_OBJECT_FLAG_A_DUNBALDAR_SOUTH
Definition BattlegroundAV.h:204
@ BG_AV_OBJECT_GENERIC_MAX
Definition BattlegroundAV.h:329
@ BG_AV_OBJECT_AURA_N_SNOWFALL_GRAVE
Definition BattlegroundAV.h:259
@ BG_AV_OBJECT_DOOR_A
Definition BattlegroundAV.h:248
@ BG_AV_OBJECT_GENERIC_MIN
Definition BattlegroundAV.h:328
@ BG_AV_OBJECT_STORMPIKE_BANNER
Definition BattlegroundAV.h:327
@ BG_AV_OBJECT_FLAG_A_STONEHEART_GRAVE
Definition BattlegroundAV.h:199
@ BG_AV_OBJECT_FROSTWOLF_BANNER
Definition BattlegroundAV.h:326
@ AV_NPC_H_MARSHAL_WTOWER
Definition BattlegroundAV.h:1237
@ AV_NPC_HERALD
Definition BattlegroundAV.h:1263
@ AV_NPC_A_MARSHAL_SOUTH
Definition BattlegroundAV.h:1230
std::tuple< uint32, Position, std::array< float, 4 > > const BG_AV_HallowsEndObjectPos[BG_AV_OBJECT_HALLOWS_END_MAX - BG_AV_OBJECT_HALLOWS_END_MIN+1]
Definition BattlegroundAV.h:665
bool IsHolidayActive(HolidayIds id)
Definition GameEventMgr.cpp:1949
@ HOLIDAY_HALLOWS_END
Definition SharedDefines.h:2753
@ HOLIDAY_FEAST_OF_WINTER_VEIL
Definition SharedDefines.h:2745
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)
Definition Battleground.cpp:1411

References AddAVCreature(), Battleground::AddObject(), Battleground::AddSpiritGuide(), AV_CPLACE_A_MARSHAL_SOUTH, AV_CPLACE_HERALD, AV_CPLACE_MAX, AV_NPC_A_MARSHAL_SOUTH, AV_NPC_H_MARSHAL_WTOWER, AV_NPC_HERALD, AV_OPLACE_BURN_BUILDING_A, AV_OPLACE_BURN_DUNBALDAR_SOUTH, AV_OPLACE_FROSTWOLF_BANNER, AV_OPLACE_HANDPACKED_SNOWDRIFT_MIN, AV_OPLACE_MINE_SUPPLY_N_MIN, AV_OPLACE_MINE_SUPPLY_S_MIN, AV_OPLACE_SNOW_1, AV_OPLACE_STORMPIKE_BANNER, AV_STATICCPLACE_MAX, BG_AV_CreaturePos, BG_AV_DoorPositons, BG_AV_GenericObjectPos, BG_AV_HallowsEndObjectPos, BG_AV_NODES_DUNBALDAR_SOUTH, BG_AV_NODES_FIRSTAID_STATION, BG_AV_NODES_FROSTWOLF_HUT, BG_AV_NODES_MAX, BG_AV_NODES_SNOWFALL_GRAVE, BG_AV_NODES_STONEHEART_BUNKER, BG_AV_OBJECT_AURA_A_FIRSTAID_STATION, BG_AV_OBJECT_AURA_H_FIRSTAID_STATION, BG_AV_OBJECT_AURA_N_FIRSTAID_STATION, BG_AV_OBJECT_AURA_N_SNOWFALL_GRAVE, BG_AV_OBJECT_BURN_BUILDING_ALLIANCE, BG_AV_OBJECT_BURN_DUNBALDAR_SOUTH, BG_AV_OBJECT_DOOR_A, BG_AV_OBJECT_DOOR_H, BG_AV_OBJECT_FLAG_A_DUNBALDAR_SOUTH, BG_AV_OBJECT_FLAG_A_FIRSTAID_STATION, BG_AV_OBJECT_FLAG_A_STONEHEART_BUNKER, BG_AV_OBJECT_FLAG_A_STONEHEART_GRAVE, BG_AV_OBJECT_FLAG_H_FROSTWOLF_HUT, BG_AV_OBJECT_FLAG_H_FROSTWOLF_WTOWER, BG_AV_OBJECT_FLAG_H_ICEBLOOD_GRAVE, BG_AV_OBJECT_FLAG_N_SNOWFALL_GRAVE, BG_AV_OBJECT_FROSTWOLF_BANNER, BG_AV_OBJECT_GENERIC_MAX, BG_AV_OBJECT_GENERIC_MIN, BG_AV_OBJECT_HALLOWS_END_MAX, BG_AV_OBJECT_HALLOWS_END_MIN, BG_AV_OBJECT_HANDPACKED_SNOWDRIFT_MAX, BG_AV_OBJECT_HANDPACKED_SNOWDRIFT_MIN, BG_AV_OBJECT_MAX, BG_AV_OBJECT_MINE_SUPPLY_N_MAX, BG_AV_OBJECT_MINE_SUPPLY_N_MIN, BG_AV_OBJECT_MINE_SUPPLY_S_MAX, BG_AV_OBJECT_MINE_SUPPLY_S_MIN, BG_AV_OBJECT_SNOW_EYECANDY_A, BG_AV_OBJECT_SNOW_EYECANDY_H, BG_AV_OBJECT_SNOW_EYECANDY_PA, BG_AV_OBJECT_SNOW_EYECANDY_PH, BG_AV_OBJECT_STORMPIKE_BANNER, BG_AV_OBJECT_TAURA_A_DUNBALDAR_SOUTH, BG_AV_OBJECT_TAURA_H_DUNBALDAR_SOUTH, BG_AV_OBJECT_TFLAG_A_DUNBALDAR_SOUTH, BG_AV_OBJECT_TFLAG_A_STONEHEART_BUNKER, BG_AV_OBJECT_TFLAG_H_DUNBALDAR_SOUTH, BG_AV_OBJECT_TFLAG_H_FROSTWOLF_WTOWER, BG_AV_OBJECT_TFLAG_H_ICEBLOOD_TOWER, BG_AV_OBJECTID_AURA_A, BG_AV_OBJECTID_AURA_H, BG_AV_OBJECTID_AURA_N, BG_AV_OBJECTID_BANNER_A, BG_AV_OBJECTID_BANNER_A_B, BG_AV_OBJECTID_BANNER_CONT_A, BG_AV_OBJECTID_BANNER_CONT_A_B, BG_AV_OBJECTID_BANNER_CONT_H, BG_AV_OBJECTID_BANNER_CONT_H_B, BG_AV_OBJECTID_BANNER_H, BG_AV_OBJECTID_BANNER_H_B, BG_AV_OBJECTID_BANNER_SNOWFALL_N, BG_AV_OBJECTID_FIRE, BG_AV_OBJECTID_FROSTWOLF_BANNER, BG_AV_OBJECTID_GATE_A, BG_AV_OBJECTID_GATE_H, BG_AV_OBJECTID_HARDPACKED_SNOWDRIFT, BG_AV_OBJECTID_MINE_N, BG_AV_OBJECTID_MINE_S, BG_AV_OBJECTID_SMOKE, BG_AV_OBJECTID_SNOWFALL_CANDY_A, BG_AV_OBJECTID_SNOWFALL_CANDY_H, BG_AV_OBJECTID_SNOWFALL_CANDY_PA, BG_AV_OBJECTID_SNOWFALL_CANDY_PH, BG_AV_OBJECTID_STORMPIKE_BANNER, BG_AV_OBJECTID_TOWER_BANNER_A, BG_AV_OBJECTID_TOWER_BANNER_H, BG_AV_OBJECTID_TOWER_BANNER_PA, BG_AV_OBJECTID_TOWER_BANNER_PH, BG_AV_ObjectPos, GetNodeThroughObject(), HOLIDAY_FEAST_OF_WINTER_VEIL, HOLIDAY_HALLOWS_END, IsHolidayActive(), LOG_DEBUG, LOG_ERROR, m_Nodes, PopulateNode(), RESPAWN_IMMEDIATELY, RESPAWN_ONE_DAY, Battleground::SpawnBGObject(), TEAM_ALLIANCE, TEAM_HORDE, and TEAM_NEUTRAL.

◆ StartingEventCloseDoors()

void BattlegroundAV::StartingEventCloseDoors ( )
overridevirtual

◆ StartingEventOpenDoors()

void BattlegroundAV::StartingEventOpenDoors ( )
overridevirtual

Reimplemented from Battleground.

472{
473 LOG_DEBUG("bg.battleground", "BG_AV: start spawning mine stuff");
478 for (uint8 mine = AV_NORTH_MINE; mine <= AV_SOUTH_MINE; mine++) //mine population
479 ChangeMineOwner(mine, TEAM_NEUTRAL, true);
480
481 if (BG_AV_SCORE_INITIAL_POINTS > 0) // display teamscores on top only if reinforcements are enabled
482 {
485 }
486
489
490 // Achievement: The Alterac Blitz
492}
#define AV_EVENT_START_BATTLE
Definition BattlegroundAV.h:50
constexpr auto MINUTE
Definition Common.h:47
@ ACHIEVEMENT_TIMED_TYPE_EVENT
Definition DBCEnums.h:110
void DoorOpen(uint32 type)
Definition Battleground.cpp:1483
void StartTimedAchievement(AchievementCriteriaTimedTypes type, uint32 entry)
Definition Battleground.cpp:1828

References ACHIEVEMENT_TIMED_TYPE_EVENT, AV_EVENT_START_BATTLE, AV_NORTH_MINE, AV_SOUTH_MINE, BG_AV_OBJECT_DOOR_A, BG_AV_OBJECT_DOOR_H, BG_AV_OBJECT_MINE_SUPPLY_N_MAX, BG_AV_OBJECT_MINE_SUPPLY_N_MIN, BG_AV_OBJECT_MINE_SUPPLY_S_MAX, BG_AV_OBJECT_MINE_SUPPLY_S_MIN, BG_AV_SCORE_INITIAL_POINTS, ChangeMineOwner(), Battleground::DoorOpen(), LOG_DEBUG, MINUTE, RESPAWN_IMMEDIATELY, Battleground::SpawnBGObject(), Battleground::StartTimedAchievement(), TEAM_NEUTRAL, Battleground::UpdateWorldState(), WORLD_STATE_BATTLEGROUND_AV_SHOW_ALLIANCE_SCORE, and WORLD_STATE_BATTLEGROUND_AV_SHOW_HORDE_SCORE.

◆ UpdateNodeWorldState()

void BattlegroundAV::UpdateNodeWorldState ( BG_AV_Nodes  node)
private
1158{
1159 UpdateWorldState(BG_AV_NodeWorldStates[node][GetWorldStateType(m_Nodes[node].State, m_Nodes[node].OwnerId)], 1);
1160 if (m_Nodes[node].PrevOwnerId == TEAM_NEUTRAL) //currently only snowfall is supported as neutral node (i don't want to make an extra row (neutral states) in worldstatesarray just for one node
1162 else
1163 UpdateWorldState(BG_AV_NodeWorldStates[node][GetWorldStateType(m_Nodes[node].PrevState, m_Nodes[node].PrevOwnerId)], 0);
1164}

References BG_AV_NodeWorldStates, GetWorldStateType(), m_Nodes, TEAM_NEUTRAL, Battleground::UpdateWorldState(), and WORLD_STATE_BATTLEGROUND_AV_SNOWFALL_N.

Referenced by EventPlayerAssaultsPoint(), EventPlayerDefendsPoint(), and EventPlayerDestroyedPoint().

◆ UpdatePlayerScore()

bool BattlegroundAV::UpdatePlayerScore ( Player player,
uint32  type,
uint32  value,
bool  doAddHonor = true 
)
overridevirtual

Reimplemented from Battleground.

583{
584 if (!Battleground::UpdatePlayerScore(player, type, value, doAddHonor))
585 return false;
586
587 switch (type)
588 {
591 break;
594 break;
597 break;
600 break;
601 default:
602 break;
603 }
604
605 return true;
606}
@ AV_OBJECTIVE_DEFEND_GRAVEYARD
Definition BattlegroundAV.h:1625
@ AV_OBJECTIVE_ASSAULT_GRAVEYARD
Definition BattlegroundAV.h:1623
@ AV_OBJECTIVE_ASSAULT_TOWER
Definition BattlegroundAV.h:1622
@ AV_OBJECTIVE_DEFEND_TOWER
Definition BattlegroundAV.h:1624
@ ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE
Definition DBCEnums.h:144
virtual bool UpdatePlayerScore(Player *player, uint32 type, uint32 value, bool doAddHonor=true)
Definition Battleground.cpp:1350
void UpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 miscValue1=0, uint32 miscValue2=0, Unit *unit=nullptr)
Definition PlayerUpdates.cpp:2177

References ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AV_OBJECTIVE_ASSAULT_GRAVEYARD, AV_OBJECTIVE_ASSAULT_TOWER, AV_OBJECTIVE_DEFEND_GRAVEYARD, AV_OBJECTIVE_DEFEND_TOWER, SCORE_GRAVEYARDS_ASSAULTED, SCORE_GRAVEYARDS_DEFENDED, SCORE_TOWERS_ASSAULTED, SCORE_TOWERS_DEFENDED, Player::UpdateAchievementCriteria(), and Battleground::UpdatePlayerScore().

Referenced by EventPlayerAssaultsPoint(), EventPlayerDefendsPoint(), and HandleKillUnit().

◆ UpdateScore()

void BattlegroundAV::UpdateScore ( TeamId  teamId,
int16  points 
)
268{
270 return; // don't update teamscores if reinforcements are disabled
271
272 //note: to remove reinforcementpoints points must be negative, for adding reinforcements points must be positive
273 m_Team_Scores[teamId] += points;
274
276 if (points < 0)
277 {
278 if (m_Team_Scores[teamId] < 1)
279 {
280 m_Team_Scores[teamId] = 0;
282 }
283 else if (!m_IsInformedNearVictory[teamId] && m_Team_Scores[teamId] < SEND_MSG_NEAR_LOSE)
284 {
285 if (teamId == TEAM_ALLIANCE)
286 {
288 }
289 else
290 {
292 }
293
295 m_IsInformedNearVictory[teamId] = true;
296 }
297 }
298}
@ AV_SOUND_NEAR_VICTORY
Definition BattlegroundAV.h:97
#define SEND_MSG_NEAR_LOSE
Definition BattlegroundAV.h:29
@ BG_AV_TEXT_ALLIANCE_NEAR_LOSE
Definition BattlegroundAV.h:58
@ BG_AV_TEXT_HORDE_NEAR_LOSE
Definition BattlegroundAV.h:59
@ CHAT_MSG_BG_SYSTEM_ALLIANCE
Definition SharedDefines.h:3189
@ CHAT_MSG_BG_SYSTEM_HORDE
Definition SharedDefines.h:3190
static TeamId GetOtherTeamId(TeamId teamId)
Definition Battleground.cpp:1751
void SendBroadcastText(uint32 id, ChatMsg msgType, WorldObject const *target=nullptr)
Definition Battleground.cpp:691

References AV_SOUND_NEAR_VICTORY, BG_AV_SCORE_INITIAL_POINTS, BG_AV_TEXT_ALLIANCE_NEAR_LOSE, BG_AV_TEXT_HORDE_NEAR_LOSE, CHAT_MSG_BG_SYSTEM_ALLIANCE, CHAT_MSG_BG_SYSTEM_HORDE, EndBattleground(), Battleground::GetOtherTeamId(), m_IsInformedNearVictory, m_Team_Scores, Battleground::PlaySoundToAll(), SEND_MSG_NEAR_LOSE, Battleground::SendBroadcastText(), TEAM_ALLIANCE, TEAM_HORDE, Battleground::UpdateWorldState(), WORLD_STATE_BATTLEGROUND_AV_ALLIANCE_SCORE, and WORLD_STATE_BATTLEGROUND_AV_HORDE_SCORE.

Referenced by EventPlayerDestroyedPoint(), HandleKillPlayer(), HandleKillUnit(), and PostUpdateImpl().

Member Data Documentation

◆ m_CaptainAlive

bool BattlegroundAV::m_CaptainAlive[2] {}
private

◆ m_CaptainBuffTimer

uint32 BattlegroundAV::m_CaptainBuffTimer[2] {}
private
1844{};

Referenced by BattlegroundAV(), PostUpdateImpl(), and ResetBGSubclass().

◆ m_IsInformedNearVictory

bool BattlegroundAV::m_IsInformedNearVictory[2] {}
private
1847{};

Referenced by BattlegroundAV(), ResetBGSubclass(), and UpdateScore().

◆ m_Mine_Owner

◆ m_Mine_Reclaim_Timer

uint32 BattlegroundAV::m_Mine_Reclaim_Timer[2] {}
private
1843{};

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

◆ m_Mine_Timer

int32 BattlegroundAV::m_Mine_Timer
private

◆ m_Nodes

◆ m_Team_QuestStatus

uint32 BattlegroundAV::m_Team_QuestStatus[2][9] {}
private
1837{}; //[x][y] x=team y=questcounter

Referenced by BattlegroundAV(), HandleQuestComplete(), PopulateNode(), and ResetBGSubclass().

◆ m_Team_Scores

int32 BattlegroundAV::m_Team_Scores[2] {}
private

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