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

Class for manage Strand of Ancient battleground. More...

#include "BattlegroundSA.h"

Inheritance diagram for BattlegroundSA:
Battleground

Public Member Functions

 BattlegroundSA ()
 
 ~BattlegroundSA () override
 
void PostUpdateImpl (uint32 diff) override
 Called every time for update battle data -Update timer -Round switch.
 
void AddPlayer (Player *player) override
 Called when a player join battle.
 
void StartingEventCloseDoors () override
 Called when battle start.
 
void StartingEventOpenDoors () override
 
bool SetupBattleground () override
 Called for ini battleground, after that the first player be entered.
 
void Init () override
 
void FillInitialWorldStates (WorldPackets::WorldState::InitWorldStates &packet) override
 Called for generate packet contain worldstate data.
 
void EventPlayerDamagedGO (Player *player, GameObject *go, uint32 eventType) override
 Called when a player deal damage to building (door)
 
void HandleKillUnit (Creature *creature, Player *killer) override
 Called when a player kill a unit in bg.
 
GraveyardStruct const * GetClosestGraveyard (Player *player) override
 Return the nearest graveyard where player can respawn.
 
void EventPlayerClickedOnFlag (Player *Source, GameObject *gameObject) override
 Called when a player click on flag (graveyard flag)
 
void EventPlayerUsedGO (Player *Source, GameObject *object) override
 Called when a player use a gamobject (relic)
 
uint32 GetWorldStateFromGateID (uint32 id)
 Return worldstate id, according to door id.
 
void EndBattleground (TeamId winnerTeamId) override
 Called on battleground ending.
 
void RemovePlayer (Player *player) override
 CAlled when a player leave battleground.
 
void HandleAreaTrigger (Player *player, uint32 trigger) override
 
void DefendersPortalTeleport (GameObject *portal, Player *plr)
 
bool AllowDefenseOfTheAncients (Player *source)
 
bool notEvenAScratch (TeamId teamId) const
 
- Public Member Functions inherited from Battleground
 Battleground ()
 
virtual ~Battleground ()
 
void Update (uint32 diff)
 
virtual void ResetBGSubclass ()
 
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)
 
virtual bool UpdatePlayerScore (Player *player, uint32 type, uint32 value, bool doAddHonor=true)
 
uint32 GetPlayersCountByTeam (TeamId teamId) const
 
uint32 GetAlivePlayersCountByTeam (TeamId teamId) const
 
void UpdatePlayersCountByTeam (TeamId teamId, bool remove)
 
virtual void CheckWinConditions ()
 
void SetArenaTeamIdForTeam (TeamId teamId, uint32 ArenaTeamId)
 
uint32 GetArenaTeamIdForTeam (TeamId teamId) const
 
void SetArenaMatchmakerRating (TeamId teamId, uint32 MMR)
 
uint32 GetArenaMatchmakerRating (TeamId teamId) const
 
virtual void HandleKillPlayer (Player *player, Player *killer)
 
virtual void EventPlayerDroppedFlag (Player *)
 
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
 
virtual TeamId GetPrematureWinner ()
 
uint8 GetUniqueBracketId () const
 
BattlegroundAVToBattlegroundAV ()
 
BattlegroundAV const * ToBattlegroundAV () const
 
BattlegroundWSToBattlegroundWS ()
 
BattlegroundWS const * ToBattlegroundWS () const
 
BattlegroundABToBattlegroundAB ()
 
BattlegroundAB const * ToBattlegroundAB () const
 
BattlegroundNAToBattlegroundNA ()
 
BattlegroundNA const * ToBattlegroundNA () const
 
BattlegroundBEToBattlegroundBE ()
 
BattlegroundBE const * ToBattlegroundBE () const
 
BattlegroundEYToBattlegroundEY ()
 
BattlegroundEY const * ToBattlegroundEY () const
 
BattlegroundRLToBattlegroundRL ()
 
BattlegroundRL const * ToBattlegroundRL () const
 
BattlegroundSAToBattlegroundSA ()
 
BattlegroundSA const * ToBattlegroundSA () const
 
BattlegroundDSToBattlegroundDS ()
 
BattlegroundDS const * ToBattlegroundDS () const
 
BattlegroundRVToBattlegroundRV ()
 
BattlegroundRV const * ToBattlegroundRV () const
 
BattlegroundICToBattlegroundIC ()
 
BattlegroundIC const * ToBattlegroundIC () const
 

Private Member Functions

uint32 GetGateIDFromEntry (uint32 id)
 Return gate id, relative to bg data, according to gameobject id.
 
bool ResetObjs ()
 Called on setup and between the two round -Delete all gameobject / creature -Respawn all gameobject / creature to have good faction.
 
void StartShips ()
 Called for start ship movement.
 
void TeleportPlayers ()
 Called between the two round -Teleport all players to good location.
 
void TeleportToEntrancePosition (Player *player)
 
void OverrideGunFaction ()
 Called on start and between the two round -Update faction of all vehicle.
 
void DemolisherStartState (bool start)
 Set selectable or not demolisher, called on battle start, when boats arrive to dock.
 
bool CanInteractWithObject (uint32 objectId)
 Checks if a player can interact with the given object.
 
void UpdateObjectInteractionFlags (uint32 objectId)
 Updates interaction flags of specific objects.
 
void UpdateObjectInteractionFlags ()
 
void DestroyGate (Player *player, GameObject *go) override
 Called when a gate is destroy -Give honor to player witch destroy it -Update worldstate -Delete gameobject in front of door (lighting object, with different colours for each door)
 
void SendTime ()
 Update timer worldstate.
 
void CaptureGraveyard (BG_SA_Graveyards i, Player *Source)
 Called when a graveyard is capture -Update spiritguide -Update gameobject (flag) -Update Worldstate -Send warning for announce this.
 
void ToggleTimer ()
 Switch on/off timer worldstate.
 
void UpdateDemolisherSpawns ()
 Respawn dead demolisher.
 
void SendTransportInit (Player *player)
 Send packet to player for create boats (client part)
 
void SendTransportsRemove (Player *player)
 Send packet to player for destroy boats (client part)
 

Private Attributes

TeamId Attackers
 Id of attacker team.
 
Milliseconds TotalTime
 Totale elapsed time of current round.
 
Milliseconds EndRoundTimer
 Max time of round.
 
bool ShipsStarted
 For know if boats has start moving or not yet.
 
BG_SA_GateState GateStatus [6]
 Status of each gate (Destroy/Damage/Intact)
 
BG_SA_Status Status
 Statu of battle (Start or not, and what round)
 
TeamId GraveyardStatus [BG_SA_MAX_GY]
 Team witch conntrol each graveyard.
 
BG_SA_RoundScore RoundScores [2]
 Score of each round.
 
bool TimerEnabled
 used for know we are in timer phase or not (used for worldstate update)
 
uint32 UpdateWaitTimer
 5secs before starting the 1min countdown for second round
 
bool SignaledRoundTwo
 for know if warning about second round start has been sent
 
bool SignaledRoundTwoHalfMin
 for know if warning about second round start has been sent
 
bool InitSecondRound
 for know if second round has been init
 
std::map< uint32, uint32DemoliserRespawnList
 
bool _relicClicked
 
bool _notEvenAScratch [PVP_TEAMS_COUNT]
 
bool _nextShipIsEast
 Toggle for alternating player spawns between East and West ships (true = first/East ship, false = second/West ship)
 

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

Detailed Description

Class for manage Strand of Ancient battleground.

Constructor & Destructor Documentation

◆ BattlegroundSA()

BattlegroundSA::BattlegroundSA ( )

This is here to prevent an uninitialised variable warning The warning only occurs when SetUpBattleGround fails though. In the future this function should be called BEFORE sending initial worldstates.

41{
43 BgObjects.resize(BG_SA_MAXOBJ);
44 BgCreatures.resize(static_cast<uint16>(BG_SA_MAXNPC) + BG_SA_MAX_GY);
45 TimerEnabled = false;
47 SignaledRoundTwo = false;
49 InitSecondRound = false;
51 TotalTime = 0s;
52 EndRoundTimer = 0s;
53 ShipsStarted = false;
55 _nextShipIsEast = true;
56
57 for (uint8 i = 0; i < 6; i++)
59
60 for (uint8 i = 0; i < 2; i++)
61 {
63 RoundScores[i].time = 0s;
64 }
65
69 memset(&GraveyardStatus, 0, sizeof(GraveyardStatus));
70}
@ BG_SA_MAX_GY
Definition BattlegroundSA.h:349
@ BG_SA_GATE_OK
Definition BattlegroundSA.h:41
@ BG_SA_NOTSTARTED
Definition BattlegroundSA.h:31
@ BG_SA_MAXOBJ
Definition BattlegroundSA.h:187
@ BG_SA_MAXNPC
Definition BattlegroundSA.h:81
@ BG_STARTING_EVENT_FOURTH
Definition Battleground.h:233
std::uint8_t uint8
Definition Define.h:109
std::uint16_t uint16
Definition Define.h:108
@ TEAM_ALLIANCE
Definition SharedDefines.h:748
bool TimerEnabled
used for know we are in timer phase or not (used for worldstate update)
Definition BattlegroundSA.h:607
BG_SA_Status Status
Statu of battle (Start or not, and what round)
Definition BattlegroundSA.h:601
TeamId Attackers
Id of attacker team.
Definition BattlegroundSA.h:591
bool SignaledRoundTwo
for know if warning about second round start has been sent
Definition BattlegroundSA.h:611
bool SignaledRoundTwoHalfMin
for know if warning about second round start has been sent
Definition BattlegroundSA.h:613
bool _nextShipIsEast
Toggle for alternating player spawns between East and West ships (true = first/East ship,...
Definition BattlegroundSA.h:624
BG_SA_RoundScore RoundScores[2]
Score of each round.
Definition BattlegroundSA.h:605
uint32 UpdateWaitTimer
5secs before starting the 1min countdown for second round
Definition BattlegroundSA.h:609
BG_SA_GateState GateStatus[6]
Status of each gate (Destroy/Damage/Intact)
Definition BattlegroundSA.h:599
bool ShipsStarted
For know if boats has start moving or not yet.
Definition BattlegroundSA.h:597
bool InitSecondRound
for know if second round has been init
Definition BattlegroundSA.h:615
Milliseconds EndRoundTimer
Max time of round.
Definition BattlegroundSA.h:595
Milliseconds TotalTime
Totale elapsed time of current round.
Definition BattlegroundSA.h:593
TeamId GraveyardStatus[BG_SA_MAX_GY]
Team witch conntrol each graveyard.
Definition BattlegroundSA.h:603
BGObjects BgObjects
Definition Battleground.h:540
BGCreatures BgCreatures
Definition Battleground.h:541
uint32 StartMessageIds[BG_STARTING_EVENT_COUNT]
Definition Battleground.h:634
Milliseconds time
Definition BattlegroundSA.h:382
TeamId winner
Definition BattlegroundSA.h:381

References _nextShipIsEast, Attackers, BG_SA_GATE_OK, BG_SA_MAX_GY, BG_SA_MAXNPC, BG_SA_MAXOBJ, BG_SA_NOTSTARTED, BG_STARTING_EVENT_FOURTH, Battleground::BgCreatures, Battleground::BgObjects, EndRoundTimer, GateStatus, GraveyardStatus, InitSecondRound, RoundScores, ShipsStarted, SignaledRoundTwo, SignaledRoundTwoHalfMin, Battleground::StartMessageIds, Status, TEAM_ALLIANCE, BG_SA_RoundScore::time, TimerEnabled, TotalTime, UpdateWaitTimer, and BG_SA_RoundScore::winner.

◆ ~BattlegroundSA()

BattlegroundSA::~BattlegroundSA ( )
override
73{
74}

Member Function Documentation

◆ AddPlayer()

void BattlegroundSA::AddPlayer ( Player player)
overridevirtual

Called when a player join battle.

Reimplemented from Battleground.

516{
518 PlayerScores.emplace(player->GetGUID().GetCounter(), new BattlegroundSAScore(player->GetGUID()));
519
520 SendTransportInit(player);
522}
void SendTransportInit(Player *player)
Send packet to player for create boats (client part)
Definition BattlegroundSA.cpp:1131
void TeleportToEntrancePosition(Player *player)
Definition BattlegroundSA.cpp:569
virtual void AddPlayer(Player *player)
Definition Battleground.cpp:1189
BattlegroundScoreMap PlayerScores
Definition Battleground.h:621
LowType GetCounter() const
Definition ObjectGuid.h:145
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:114
Definition BattlegroundSA.h:395

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

◆ AllowDefenseOfTheAncients()

bool BattlegroundSA::AllowDefenseOfTheAncients ( Player source)
1162{
1163 if (source->GetTeamId() == Attackers)
1164 return false;
1165
1166 for (uint8 i = 0; i <= 5; i++)
1167 {
1169 return false;
1170 }
1171
1172 return true;
1173}
@ BG_SA_GATE_DESTROYED
Definition BattlegroundSA.h:43
TeamId GetTeamId(bool original=false) const
Definition Player.h:2127

References Attackers, BG_SA_GATE_DESTROYED, GateStatus, and Player::GetTeamId().

Referenced by achievement_sa_defense_of_the_ancients::OnCheck().

◆ CanInteractWithObject()

bool BattlegroundSA::CanInteractWithObject ( uint32  objectId)
private

Checks if a player can interact with the given object.

837{
838 switch (objectId)
839 {
842 {
843 return false;
844 }
845 [[fallthrough]];
848 {
849 return false;
850 }
851 [[fallthrough]];
852 case BG_SA_LEFT_FLAG:
853 case BG_SA_RIGHT_FLAG:
855 {
856 return false;
857 }
858 break;
859 default:
860 ABORT();
861 break;
862 }
863
864 return true;
865}
@ BG_SA_YELLOW_GATE
Definition BattlegroundSA.h:162
@ BG_SA_GREEN_GATE
Definition BattlegroundSA.h:161
@ BG_SA_CENTRAL_FLAG
Definition BattlegroundSA.h:178
@ BG_SA_RED_GATE
Definition BattlegroundSA.h:164
@ BG_SA_PURPLE_GATE
Definition BattlegroundSA.h:165
@ BG_SA_RIGHT_FLAG
Definition BattlegroundSA.h:179
@ BG_SA_BLUE_GATE
Definition BattlegroundSA.h:163
@ BG_SA_ANCIENT_GATE
Definition BattlegroundSA.h:166
@ BG_SA_LEFT_FLAG
Definition BattlegroundSA.h:180
@ BG_SA_TITAN_RELIC
Definition BattlegroundSA.h:167
#define ABORT
Definition Errors.h:76

References ABORT, BG_SA_ANCIENT_GATE, BG_SA_BLUE_GATE, BG_SA_CENTRAL_FLAG, BG_SA_GATE_DESTROYED, BG_SA_GREEN_GATE, BG_SA_LEFT_FLAG, BG_SA_PURPLE_GATE, BG_SA_RED_GATE, BG_SA_RIGHT_FLAG, BG_SA_TITAN_RELIC, BG_SA_YELLOW_GATE, and GateStatus.

Referenced by EventPlayerClickedOnFlag(), EventPlayerUsedGO(), and UpdateObjectInteractionFlags().

◆ CaptureGraveyard()

void BattlegroundSA::CaptureGraveyard ( BG_SA_Graveyards  i,
Player Source 
)
private

Called when a graveyard is capture -Update spiritguide -Update gameobject (flag) -Update Worldstate -Send warning for announce this.

Parameters
i: id of graveyard
Source: Player who capture gy
910{
911 if (GraveyardStatus[i] == Attackers || Source->GetTeamId() != Attackers)
912 return;
913
914 GraveyardStatus[i] = Source->GetTeamId();
915 // Those who are waiting to resurrect at this node are taken to the closest own node's graveyard
916 GuidVector& ghost_list = m_ReviveQueue[BgCreatures[static_cast<uint16>(BG_SA_MAXNPC) + i]];
917 if (!ghost_list.empty())
918 {
919 GraveyardStruct const* ClosestGrave = nullptr;
920 for (ObjectGuid const& guid : ghost_list)
921 {
922 Player* player = ObjectAccessor::FindPlayer(guid);
923 if (!player)
924 continue;
925
926 if (!ClosestGrave) // cache
927 ClosestGrave = GetClosestGraveyard(player);
928
929 if (ClosestGrave)
930 player->TeleportTo(GetMapId(), ClosestGrave->x, ClosestGrave->y, ClosestGrave->z, player->GetOrientation());
931 }
932
933 // xinef: clear resurrect queue for this creature
934 ghost_list.clear();
935 }
936
937 DelCreature(static_cast<uint16>(BG_SA_MAXNPC) + i);
938
939 GraveyardStruct const* sg = sGraveyard->GetGraveyard(BG_SA_GYEntries[i]);
940 if (!sg)
941 {
942 LOG_ERROR("bg.battleground", "BattlegroundSA::CaptureGraveyard: non-existant GY entry: {}", BG_SA_GYEntries[i]);
943 return;
944 }
945
946 AddSpiritGuide(i + static_cast<uint16>(BG_SA_MAXNPC), sg->x, sg->y, sg->z, BG_SA_GYOrientation[i], GraveyardStatus[i]);
947 uint32 npc = 0;
948 uint32 flag = 0;
949
950 switch (i)
951 {
953 flag = BG_SA_LEFT_FLAG;
954 DelObject(flag);
955 AddObject(flag, (BG_SA_ObjEntries[flag] - (Source->GetTeamId() == TEAM_ALLIANCE ? 0 : 1)),
956 BG_SA_ObjSpawnlocs[flag][0], BG_SA_ObjSpawnlocs[flag][1],
957 BG_SA_ObjSpawnlocs[flag][2], BG_SA_ObjSpawnlocs[flag][3], 0, 0, 0, 0, RESPAWN_ONE_DAY);
958
963
964 for (uint8 j = BG_SA_DEMOLISHER_7; j <= BG_SA_DEMOLISHER_8; j++)
965 {
968 BG_SA_NpcSpawnlocs[j][2], BG_SA_NpcSpawnlocs[j][3], 600);
969
970 if (Creature* dem = GetBGCreature(j))
971 dem->SetFaction(BG_SA_Factions[Attackers]);
972 }
973
976 GetBgMap()->DoForAllPlayers([&](Player* player)
977 {
978 if (player->GetTeamId() == TEAM_ALLIANCE)
980 else
982 });
983 break;
985 flag = BG_SA_RIGHT_FLAG;
986 DelObject(flag);
987 AddObject(flag, (BG_SA_ObjEntries[flag] - (Source->GetTeamId() == TEAM_ALLIANCE ? 0 : 1)),
988 BG_SA_ObjSpawnlocs[flag][0], BG_SA_ObjSpawnlocs[flag][1],
989 BG_SA_ObjSpawnlocs[flag][2], BG_SA_ObjSpawnlocs[flag][3], 0, 0, 0, 0, RESPAWN_ONE_DAY);
990
995
996 for (uint8 j = BG_SA_DEMOLISHER_5; j <= BG_SA_DEMOLISHER_6; j++)
997 {
999 BG_SA_NpcSpawnlocs[j][2], BG_SA_NpcSpawnlocs[j][3], 600);
1000
1001 if (Creature* dem = GetBGCreature(j))
1002 dem->SetFaction(BG_SA_Factions[Attackers]);
1003 }
1004
1007 GetBgMap()->DoForAllPlayers([&](Player* player)
1008 {
1009 if (player->GetTeamId() == TEAM_ALLIANCE)
1011 else
1013 });
1014 break;
1016 flag = BG_SA_CENTRAL_FLAG;
1017 DelObject(flag);
1018 AddObject(flag, (BG_SA_ObjEntries[flag] - (Source->GetTeamId() == TEAM_ALLIANCE ? 0 : 1)),
1019 BG_SA_ObjSpawnlocs[flag][0], BG_SA_ObjSpawnlocs[flag][1],
1020 BG_SA_ObjSpawnlocs[flag][2], BG_SA_ObjSpawnlocs[flag][3], 0, 0, 0, 0, RESPAWN_ONE_DAY);
1021
1024 GetBgMap()->DoForAllPlayers([&](Player* player)
1025 {
1026 if (player->GetTeamId() == TEAM_ALLIANCE)
1028 else
1030 });
1031 break;
1032 default:
1033 ABORT();
1034 break;
1035 }
1036}
@ BG_SA_CENTRAL_CAPTURABLE_GY
Definition BattlegroundSA.h:348
@ BG_SA_LEFT_CAPTURABLE_GY
Definition BattlegroundSA.h:347
@ BG_SA_RIGHT_CAPTURABLE_GY
Definition BattlegroundSA.h:346
const uint32 BG_SA_GYEntries[BG_SA_MAX_GY]
Definition BattlegroundSA.h:352
uint32 const BG_SA_ObjEntries[BG_SA_MAXOBJ+BG_SA_FLAG_AMOUNT]
Definition BattlegroundSA.h:306
float const BG_SA_GYOrientation[BG_SA_MAX_GY]
Definition BattlegroundSA.h:361
uint32 const BG_SA_Factions[2]
Definition BattlegroundSA.h:336
npc
Definition BattlegroundSA.h:47
float const BG_SA_NpcSpawnlocs[BG_SA_MAXNPC][4]
Definition BattlegroundSA.h:125
float const BG_SA_ObjSpawnlocs[BG_SA_MAXOBJ][4]
Definition BattlegroundSA.h:190
@ BG_SA_DEMOLISHER_6
Definition BattlegroundSA.h:76
@ BG_SA_DEMOLISHER_7
Definition BattlegroundSA.h:77
@ BG_SA_DEMOLISHER_5
Definition BattlegroundSA.h:75
@ BG_SA_NPC_RIGSPARK
Definition BattlegroundSA.h:80
@ BG_SA_NPC_SPARKLIGHT
Definition BattlegroundSA.h:79
@ BG_SA_DEMOLISHER_8
Definition BattlegroundSA.h:78
uint32 const BG_SA_NpcEntries[BG_SA_MAXNPC]
Definition BattlegroundSA.h:92
@ RESPAWN_ONE_DAY
Definition Battleground.h:159
std::uint32_t uint32
Definition Define.h:107
#define sGraveyard
Definition GameGraveyard.h:74
@ LANG_BG_SA_A_GY_SOUTH
Definition Language.h:1355
@ LANG_BG_SA_H_GY_EAST
Definition Language.h:1360
@ LANG_BG_SA_A_GY_WEST
Definition Language.h:1356
@ LANG_BG_SA_A_GY_EAST
Definition Language.h:1357
@ LANG_BG_SA_H_GY_WEST
Definition Language.h:1359
#define LOG_ERROR(filterType__,...)
Definition Log.h:158
std::vector< ObjectGuid > GuidVector
Definition ObjectGuid.h:256
@ WORLD_STATE_BATTLEGROUND_SA_CENTER_GY_ALLIANCE
Definition WorldStateDefines.h:325
@ WORLD_STATE_BATTLEGROUND_SA_RIGHT_GY_ALLIANCE
Definition WorldStateDefines.h:324
@ WORLD_STATE_BATTLEGROUND_SA_LEFT_GY_ALLIANCE
Definition WorldStateDefines.h:323
@ WORLD_STATE_BATTLEGROUND_SA_RIGHT_GY_HORDE
Definition WorldStateDefines.h:320
@ WORLD_STATE_BATTLEGROUND_SA_LEFT_GY_HORDE
Definition WorldStateDefines.h:321
@ WORLD_STATE_BATTLEGROUND_SA_CENTER_GY_HORDE
Definition WorldStateDefines.h:322
GraveyardStruct const * GetClosestGraveyard(Player *player) override
Return the nearest graveyard where player can respawn.
Definition BattlegroundSA.cpp:792
uint32 GetMapId() const
Definition Battleground.h:436
bool AddSpiritGuide(uint32 type, float x, float y, float z, float o, TeamId teamId)
Definition Battleground.cpp:1708
bool DelCreature(uint32 type)
Definition Battleground.cpp:1669
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:1484
BattlegroundMap * GetBgMap() const
Definition Battleground.h:440
std::map< ObjectGuid, GuidVector > m_ReviveQueue
Definition Battleground.h:628
bool DelObject(uint32 type)
Definition Battleground.cpp:1688
void UpdateWorldState(uint32 variable, uint32 value)
Definition Battleground.cpp:826
Creature * AddCreature(uint32 entry, uint32 type, float x, float y, float z, float o, uint32 respawntime=0, MotionTransport *transport=nullptr)
Definition Battleground.cpp:1606
Creature * GetBGCreature(uint32 type)
Definition Battleground.cpp:1577
Definition Chat.h:37
void PSendSysMessage(std::string_view str, bool escapeCharacters=false)
Definition Chat.cpp:211
Definition Creature.h:47
void DoForAllPlayers(std::function< void(Player *)> exec)
Definition Map.cpp:2890
Definition ObjectGuid.h:118
Definition Player.h:1084
WorldSession * GetSession() const
Definition Player.h:2019
bool TeleportTo(uint32 mapid, float x, float y, float z, float orientation, uint32 options=0, Unit *target=nullptr, bool newInstance=false)
Definition Player.cpp:1352
Player * FindPlayer(ObjectGuid const guid)
Definition ObjectAccessor.cpp:245
Definition GameGraveyard.h:27
float z
Definition GameGraveyard.h:32
float x
Definition GameGraveyard.h:30
float y
Definition GameGraveyard.h:31
float GetOrientation() const
Definition Position.h:124

References ABORT, Battleground::AddCreature(), Battleground::AddObject(), Battleground::AddSpiritGuide(), Attackers, BG_SA_CENTRAL_CAPTURABLE_GY, BG_SA_CENTRAL_FLAG, BG_SA_DEMOLISHER_5, BG_SA_DEMOLISHER_6, BG_SA_DEMOLISHER_7, BG_SA_DEMOLISHER_8, BG_SA_Factions, BG_SA_GYEntries, BG_SA_GYOrientation, BG_SA_LEFT_CAPTURABLE_GY, BG_SA_LEFT_FLAG, BG_SA_MAXNPC, BG_SA_NPC_RIGSPARK, BG_SA_NPC_SPARKLIGHT, BG_SA_NpcEntries, BG_SA_NpcSpawnlocs, BG_SA_ObjEntries, BG_SA_ObjSpawnlocs, BG_SA_RIGHT_CAPTURABLE_GY, BG_SA_RIGHT_FLAG, Battleground::BgCreatures, Battleground::DelCreature(), Battleground::DelObject(), Map::DoForAllPlayers(), ObjectAccessor::FindPlayer(), Battleground::GetBGCreature(), Battleground::GetBgMap(), GetClosestGraveyard(), Battleground::GetMapId(), Position::GetOrientation(), Player::GetSession(), Player::GetTeamId(), GraveyardStatus, LANG_BG_SA_A_GY_EAST, LANG_BG_SA_A_GY_SOUTH, LANG_BG_SA_A_GY_WEST, LANG_BG_SA_H_GY_EAST, LANG_BG_SA_H_GY_WEST, LOG_ERROR, Battleground::m_ReviveQueue, ChatHandler::PSendSysMessage(), RESPAWN_ONE_DAY, sGraveyard, TEAM_ALLIANCE, Player::TeleportTo(), Battleground::UpdateWorldState(), WORLD_STATE_BATTLEGROUND_SA_CENTER_GY_ALLIANCE, WORLD_STATE_BATTLEGROUND_SA_CENTER_GY_HORDE, WORLD_STATE_BATTLEGROUND_SA_LEFT_GY_ALLIANCE, WORLD_STATE_BATTLEGROUND_SA_LEFT_GY_HORDE, WORLD_STATE_BATTLEGROUND_SA_RIGHT_GY_ALLIANCE, WORLD_STATE_BATTLEGROUND_SA_RIGHT_GY_HORDE, GraveyardStruct::x, GraveyardStruct::y, and GraveyardStruct::z.

Referenced by EventPlayerClickedOnFlag().

◆ DefendersPortalTeleport()

void BattlegroundSA::DefendersPortalTeleport ( GameObject portal,
Player plr 
)
593{
594 if (plr->GetTeamId() == Attackers)
595 return;
596
597 uint32 portal_num = 0;
598 //get it via X
599 switch ((uint32)portal->GetPositionX())
600 {
601 case 1394:
602 portal_num = 0;
603 break;
604 case 1065:
605 portal_num = 1;
606 break;
607 case 1468:
608 portal_num = 2;
609 break;
610 case 1255:
611 portal_num = 3;
612 break;
613 case 1216:
614 portal_num = 4;
615 break;
616 }
617
618 plr->TeleportTo( plr->GetMapId(), SOTADefPortalDest[portal_num][0], SOTADefPortalDest[portal_num][1], SOTADefPortalDest[portal_num][2], SOTADefPortalDest[portal_num][3], TELE_TO_SPELL );
619}
const float SOTADefPortalDest[5][4]
Definition BattlegroundSA.h:385
@ TELE_TO_SPELL
Definition Player.h:818
uint32 GetMapId() const
Definition Position.h:281
float GetPositionX() const
Definition Position.h:121

References Attackers, WorldLocation::GetMapId(), Position::GetPositionX(), Player::GetTeamId(), SOTADefPortalDest, TELE_TO_SPELL, and Player::TeleportTo().

Referenced by Spell::EffectScriptEffect().

◆ DemolisherStartState()

void BattlegroundSA::DemolisherStartState ( bool  start)
private

Set selectable or not demolisher, called on battle start, when boats arrive to dock.

717{
718 if (!BgCreatures[0])
719 return;
720
721 // Only lock demolishers during warmup - they are attacker vehicles.
722 // Cannons/turrets are defender weapons and must remain usable from the start.
723 for (uint8 i = BG_SA_DEMOLISHER_1; i <= BG_SA_DEMOLISHER_4; i++)
724 if (Creature* dem = GetBGCreature(i))
725 {
726 if (start)
728 else
730 }
731
732 // xinef: enable first gates damaging at start
733 if (!start)
734 {
736 go->SetDestructibleBuildingModifyState(true);
738 go->SetDestructibleBuildingModifyState(true);
739 }
740}
@ BG_SA_DEMOLISHER_1
Definition BattlegroundSA.h:71
@ BG_SA_DEMOLISHER_4
Definition BattlegroundSA.h:74
@ UNIT_FLAG_NON_ATTACKABLE
Definition UnitDefines.h:258
@ UNIT_FLAG_NOT_SELECTABLE
Definition UnitDefines.h:282
GameObject * GetBGObject(uint32 type)
Definition Battleground.cpp:1568
Definition GameObject.h:120

References BG_SA_BLUE_GATE, BG_SA_DEMOLISHER_1, BG_SA_DEMOLISHER_4, BG_SA_GREEN_GATE, Battleground::BgCreatures, Battleground::GetBGCreature(), Battleground::GetBGObject(), UNIT_FLAG_NON_ATTACKABLE, and UNIT_FLAG_NOT_SELECTABLE.

Referenced by PostUpdateImpl(), and ResetObjs().

◆ DestroyGate()

void BattlegroundSA::DestroyGate ( Player player,
GameObject go 
)
overrideprivatevirtual

Called when a gate is destroy -Give honor to player witch destroy it -Update worldstate -Delete gameobject in front of door (lighting object, with different colours for each door)

Reimplemented from Battleground.

743{
745 if (!GateStatus[i])
746 return;
747
748 if (GameObject* g = GetBGObject(i))
749 {
750 if (g->GetGOValue()->Building.Health == 0)
751 {
753 if (uint32 uws = GetWorldStateFromGateID(i))
755
756 bool rewardHonor = true;
757 switch (i)
758 {
759 case BG_SA_GREEN_GATE:
761 rewardHonor = false;
762 break;
763 case BG_SA_BLUE_GATE:
765 rewardHonor = false;
766 break;
767 case BG_SA_RED_GATE:
769 rewardHonor = false;
770 break;
773 rewardHonor = false;
774 break;
775 }
776
778
779 if (i < 5)
780 DelObject(i + 9);
781
782 if (player)
783 {
785 if (rewardHonor)
787 }
788 }
789 }
790}
@ SCORE_BONUS_HONOR
Definition BattlegroundScore.h:31
@ SCORE_DESTROYED_WALL
Definition BattlegroundScore.h:54
uint32 GetWorldStateFromGateID(uint32 id)
Return worldstate id, according to door id.
Definition BattlegroundSA.h:463
uint32 GetGateIDFromEntry(uint32 id)
Return gate id, relative to bg data, according to gameobject id.
Definition BattlegroundSA.h:508
void UpdateObjectInteractionFlags()
Definition BattlegroundSA.cpp:878
virtual bool UpdatePlayerScore(Player *player, uint32 type, uint32 value, bool doAddHonor=true)
Definition Battleground.cpp:1423
uint32 GetBonusHonorFromKill(uint32 kills) const
Definition Battleground.cpp:1033
uint32 GetEntry() const
Definition Object.h:117

References BG_SA_BLUE_GATE, BG_SA_GATE_DESTROYED, BG_SA_GREEN_GATE, BG_SA_PURPLE_GATE, BG_SA_RED_GATE, Battleground::DelObject(), GateStatus, Battleground::GetBGObject(), Battleground::GetBonusHonorFromKill(), Object::GetEntry(), GetGateIDFromEntry(), GetWorldStateFromGateID(), SCORE_BONUS_HONOR, SCORE_DESTROYED_WALL, UpdateObjectInteractionFlags(), Battleground::UpdatePlayerScore(), and Battleground::UpdateWorldState().

◆ EndBattleground()

void BattlegroundSA::EndBattleground ( TeamId  winnerTeamId)
overridevirtual

Called on battleground ending.

Reimplemented from Battleground.

1087{
1088 //honor reward for winning
1089 RewardHonorToTeam(GetBonusHonorFromKill(1), winnerTeamId);
1090
1091 //complete map_end rewards (even if no team wins)
1094
1095 Battleground::EndBattleground(winnerTeamId);
1096}
@ TEAM_HORDE
Definition SharedDefines.h:749
void EndBattleground(PvPTeamId winnerTeamId)
Definition Battleground.cpp:834
void RewardHonorToTeam(uint32 honor, TeamId teamId)
Definition Battleground.cpp:776

References Battleground::EndBattleground(), Battleground::GetBonusHonorFromKill(), Battleground::RewardHonorToTeam(), TEAM_ALLIANCE, and TEAM_HORDE.

Referenced by EventPlayerUsedGO(), and PostUpdateImpl().

◆ EventPlayerClickedOnFlag()

void BattlegroundSA::EventPlayerClickedOnFlag ( Player Source,
GameObject gameObject 
)
overridevirtual

Called when a player click on flag (graveyard flag)

Reimplemented from Battleground.

886{
887 switch (gameObject->GetEntry())
888 {
889 case 191307:
890 case 191308:
893 break;
894 case 191305:
895 case 191306:
898 break;
899 case 191310:
900 case 191309:
903 break;
904 default:
905 return;
906 }
907}
void CaptureGraveyard(BG_SA_Graveyards i, Player *Source)
Called when a graveyard is capture -Update spiritguide -Update gameobject (flag) -Update Worldstate -...
Definition BattlegroundSA.cpp:909
bool CanInteractWithObject(uint32 objectId)
Checks if a player can interact with the given object.
Definition BattlegroundSA.cpp:836

References BG_SA_CENTRAL_CAPTURABLE_GY, BG_SA_CENTRAL_FLAG, BG_SA_LEFT_CAPTURABLE_GY, BG_SA_LEFT_FLAG, BG_SA_RIGHT_CAPTURABLE_GY, BG_SA_RIGHT_FLAG, CanInteractWithObject(), CaptureGraveyard(), and Object::GetEntry().

◆ EventPlayerDamagedGO()

void BattlegroundSA::EventPlayerDamagedGO ( Player player,
GameObject go,
uint32  eventType 
)
overridevirtual

Called when a player deal damage to building (door)

Reimplemented from Battleground.

622{
623 if (!go || !go->GetGOInfo())
624 return;
625
626 if (eventType == go->GetGOInfo()->building.damagedEvent)
627 {
631 if (uws)
633 }
634
635 if (eventType == go->GetGOInfo()->building.destroyedEvent)
636 {
637 GetBgMap()->DoForAllPlayers([&](Player* player)
638 {
639 if (go->GetGOInfo()->building.destroyedEvent == 19837)
641 else
643 });
644
646 switch (i)
647 {
648 case BG_SA_BLUE_GATE:
649 case BG_SA_GREEN_GATE:
650 {
651 if (auto redGate = GetBGObject(BG_SA_RED_GATE))
652 {
653 redGate->SetDestructibleBuildingModifyState(true);
654 }
655 if (auto purpleGate = GetBGObject(BG_SA_PURPLE_GATE))
656 {
657 purpleGate->SetDestructibleBuildingModifyState(true);
658 }
659 break;
660 }
661 case BG_SA_RED_GATE:
663 if (auto yellowGate = GetBGObject(BG_SA_YELLOW_GATE))
664 {
665 yellowGate->SetDestructibleBuildingModifyState(true);
666 }
667 break;
669 if (auto ancientGate = GetBGObject(BG_SA_ANCIENT_GATE))
670 {
671 ancientGate->SetDestructibleBuildingModifyState(true);
672 }
673 break;
674 }
675 }
676
677 if (eventType == go->GetGOInfo()->building.damageEvent)
678 GetBgMap()->DoForAllPlayers([&](Player* player)
679 {
681 });
682}
@ BG_SA_GATE_DAMAGED
Definition BattlegroundSA.h:42
@ LANG_BG_SA_WAS_DESTROYED
Definition Language.h:1348
@ LANG_BG_SA_CHAMBER_BREACHED
Definition Language.h:1354
@ LANG_BG_SA_IS_UNDER_ATTACK
Definition Language.h:1347
GameObjectTemplate const * GetGOInfo() const
Definition GameObject.h:136
uint32 damageEvent
Definition GameObjectData.h:374
struct GameObjectTemplate::@234::@262 building
std::string name
Definition GameObjectData.h:36
uint32 destroyedEvent
Definition GameObjectData.h:366
uint32 damagedEvent
Definition GameObjectData.h:361

References BG_SA_ANCIENT_GATE, BG_SA_BLUE_GATE, BG_SA_GATE_DAMAGED, BG_SA_GREEN_GATE, BG_SA_PURPLE_GATE, BG_SA_RED_GATE, BG_SA_YELLOW_GATE, GameObjectTemplate::building, GameObjectTemplate::damagedEvent, GameObjectTemplate::damageEvent, GameObjectTemplate::destroyedEvent, Map::DoForAllPlayers(), GateStatus, Battleground::GetBgMap(), Battleground::GetBGObject(), Object::GetEntry(), GetGateIDFromEntry(), GameObject::GetGOInfo(), Player::GetSession(), GetWorldStateFromGateID(), LANG_BG_SA_CHAMBER_BREACHED, LANG_BG_SA_IS_UNDER_ATTACK, LANG_BG_SA_WAS_DESTROYED, GameObjectTemplate::name, ChatHandler::PSendSysMessage(), and Battleground::UpdateWorldState().

◆ EventPlayerUsedGO()

void BattlegroundSA::EventPlayerUsedGO ( Player Source,
GameObject object 
)
overridevirtual

Called when a player use a gamobject (relic)

Reimplemented from Battleground.

1039{
1041 {
1042 if (Source->GetTeamId() == Attackers)
1043 {
1044 GetBgMap()->DoForAllPlayers([&](Player* player)
1045 {
1046 if (player->GetTeamId() == Attackers)
1047 {
1048 if (player->GetTeamId() == TEAM_ALLIANCE)
1049 ChatHandler(player->GetSession()).PSendSysMessage(LANG_BG_SA_ALLIANCE_CAPTURED_RELIC);
1050 else
1051 ChatHandler(player->GetSession()).PSendSysMessage(LANG_BG_SA_HORDE_CAPTURED_RELIC);
1052 }
1053 });
1054
1055 if (Status == BG_SA_ROUND_ONE)
1056 {
1057 _relicClicked = true;
1058 }
1059 else if (Status == BG_SA_ROUND_TWO)
1060 {
1063 ToggleTimer();
1064 //Achievement Storm the Beach (1310)
1065 for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
1066 if (itr->second->GetTeamId() == Attackers && RoundScores[1].winner == Attackers)
1067 itr->second->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, 65246);
1068
1069 if (RoundScores[0].time == RoundScores[1].time)
1071 else if (RoundScores[0].time < RoundScores[1].time)
1072 EndBattleground(RoundScores[0].winner);
1073 else
1074 EndBattleground(RoundScores[1].winner);
1075 }
1076 }
1077 }
1078}
@ BG_SA_ROUND_ONE
Definition BattlegroundSA.h:33
@ BG_SA_ROUND_TWO
Definition BattlegroundSA.h:35
@ ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET
Definition DBCEnums.h:142
@ TEAM_NEUTRAL
Definition SharedDefines.h:750
bool _relicClicked
Definition BattlegroundSA.h:619
void ToggleTimer()
Switch on/off timer worldstate.
Definition BattlegroundSA.cpp:1080
void EndBattleground(TeamId winnerTeamId) override
Called on battleground ending.
Definition BattlegroundSA.cpp:1086
BattlegroundPlayerMap const & GetPlayers() const
Definition Battleground.h:409

References _relicClicked, ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, Attackers, BG_SA_ObjEntries, BG_SA_ROUND_ONE, BG_SA_ROUND_TWO, BG_SA_TITAN_RELIC, CanInteractWithObject(), Map::DoForAllPlayers(), EndBattleground(), Battleground::GetBgMap(), Object::GetEntry(), Battleground::GetPlayers(), Player::GetTeamId(), RoundScores, Status, TEAM_NEUTRAL, BG_SA_RoundScore::time, ToggleTimer(), TotalTime, and BG_SA_RoundScore::winner.

◆ FillInitialWorldStates()

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

Called for generate packet contain worldstate data.

Reimplemented from Battleground.

474{
475 bool const ally_attacks = Attackers == TEAM_ALLIANCE;
476 bool const horde_attacks = Attackers == TEAM_HORDE;
477
478 packet.Worldstates.reserve(25);
485
487
488 packet.Worldstates.emplace_back(WORLD_STATE_BATTLEGROUND_SA_HORDE_ATTACKS, horde_attacks);
489 packet.Worldstates.emplace_back(WORLD_STATE_BATTLEGROUND_SA_ALLIANCE_ATTACKS, ally_attacks);
490
491 //Time will be sent on first update...
493
497
501
505
506 packet.Worldstates.emplace_back(WORLD_STATE_BATTLEGROUND_SA_HORDE_DEFENSE_TOKEN, ally_attacks);
507 packet.Worldstates.emplace_back(WORLD_STATE_BATTLEGROUND_SA_ALLIANCE_DEFENSE_TOKEN, horde_attacks);
508
509 packet.Worldstates.emplace_back(WORLD_STATE_BATTLEGROUND_SA_LEFT_ATTACK_TOKEN_HORDE, horde_attacks);
510 packet.Worldstates.emplace_back(WORLD_STATE_BATTLEGROUND_SA_RIGHT_ATTACK_TOKEN_HORDE, horde_attacks);
513}
@ WORLD_STATE_BATTLEGROUND_SA_TIMER_MINUTES
Definition WorldStateDefines.h:304
@ WORLD_STATE_BATTLEGROUND_SA_LEFT_ATTACK_TOKEN_ALLIANCE
Definition WorldStateDefines.h:314
@ WORLD_STATE_BATTLEGROUND_SA_RED_GATE
Definition WorldStateDefines.h:311
@ WORLD_STATE_BATTLEGROUND_SA_TIMER_SECONDS_SECOND_DIGIT
Definition WorldStateDefines.h:306
@ WORLD_STATE_BATTLEGROUND_SA_PURPLE_GATE
Definition WorldStateDefines.h:310
@ WORLD_STATE_BATTLEGROUND_SA_YELLOW_GATE
Definition WorldStateDefines.h:326
@ WORLD_STATE_BATTLEGROUND_SA_ENABLE_TIMER
Definition WorldStateDefines.h:307
@ WORLD_STATE_BATTLEGROUND_SA_RIGHT_ATTACK_TOKEN_HORDE
Definition WorldStateDefines.h:316
@ WORLD_STATE_BATTLEGROUND_SA_ALLIANCE_ATTACKS
Definition WorldStateDefines.h:328
@ WORLD_STATE_BATTLEGROUND_SA_HORDE_ATTACKS
Definition WorldStateDefines.h:329
@ WORLD_STATE_BATTLEGROUND_SA_LEFT_ATTACK_TOKEN_HORDE
Definition WorldStateDefines.h:317
@ WORLD_STATE_BATTLEGROUND_SA_BLUE_GATE
Definition WorldStateDefines.h:312
@ WORLD_STATE_BATTLEGROUND_SA_GREEN_GATE
Definition WorldStateDefines.h:313
@ WORLD_STATE_BATTLEGROUND_SA_RIGHT_ATTACK_TOKEN_ALLIANCE
Definition WorldStateDefines.h:315
@ WORLD_STATE_BATTLEGROUND_SA_TIMER_SECONDS_FIRST_DIGIT
Definition WorldStateDefines.h:305
@ WORLD_STATE_BATTLEGROUND_SA_BONUS_TIMER
Definition WorldStateDefines.h:309
@ WORLD_STATE_BATTLEGROUND_SA_ALLIANCE_DEFENSE_TOKEN
Definition WorldStateDefines.h:318
@ WORLD_STATE_BATTLEGROUND_SA_HORDE_DEFENSE_TOKEN
Definition WorldStateDefines.h:319
@ WORLD_STATE_BATTLEGROUND_SA_ANCIENT_GATE
Definition WorldStateDefines.h:327
std::vector< WorldStateInfo > Worldstates
Definition WorldStatePackets.h:46

References Attackers, BG_SA_ANCIENT_GATE, BG_SA_BLUE_GATE, BG_SA_CENTRAL_CAPTURABLE_GY, BG_SA_GREEN_GATE, BG_SA_LEFT_CAPTURABLE_GY, BG_SA_PURPLE_GATE, BG_SA_RED_GATE, BG_SA_RIGHT_CAPTURABLE_GY, BG_SA_YELLOW_GATE, GateStatus, GraveyardStatus, TEAM_ALLIANCE, TEAM_HORDE, TimerEnabled, WORLD_STATE_BATTLEGROUND_SA_ALLIANCE_ATTACKS, WORLD_STATE_BATTLEGROUND_SA_ALLIANCE_DEFENSE_TOKEN, WORLD_STATE_BATTLEGROUND_SA_ANCIENT_GATE, WORLD_STATE_BATTLEGROUND_SA_BLUE_GATE, WORLD_STATE_BATTLEGROUND_SA_BONUS_TIMER, WORLD_STATE_BATTLEGROUND_SA_CENTER_GY_ALLIANCE, WORLD_STATE_BATTLEGROUND_SA_CENTER_GY_HORDE, WORLD_STATE_BATTLEGROUND_SA_ENABLE_TIMER, WORLD_STATE_BATTLEGROUND_SA_GREEN_GATE, WORLD_STATE_BATTLEGROUND_SA_HORDE_ATTACKS, WORLD_STATE_BATTLEGROUND_SA_HORDE_DEFENSE_TOKEN, WORLD_STATE_BATTLEGROUND_SA_LEFT_ATTACK_TOKEN_ALLIANCE, WORLD_STATE_BATTLEGROUND_SA_LEFT_ATTACK_TOKEN_HORDE, WORLD_STATE_BATTLEGROUND_SA_LEFT_GY_ALLIANCE, WORLD_STATE_BATTLEGROUND_SA_LEFT_GY_HORDE, WORLD_STATE_BATTLEGROUND_SA_PURPLE_GATE, WORLD_STATE_BATTLEGROUND_SA_RED_GATE, WORLD_STATE_BATTLEGROUND_SA_RIGHT_ATTACK_TOKEN_ALLIANCE, WORLD_STATE_BATTLEGROUND_SA_RIGHT_ATTACK_TOKEN_HORDE, WORLD_STATE_BATTLEGROUND_SA_RIGHT_GY_ALLIANCE, WORLD_STATE_BATTLEGROUND_SA_RIGHT_GY_HORDE, WORLD_STATE_BATTLEGROUND_SA_TIMER_MINUTES, WORLD_STATE_BATTLEGROUND_SA_TIMER_SECONDS_FIRST_DIGIT, WORLD_STATE_BATTLEGROUND_SA_TIMER_SECONDS_SECOND_DIGIT, WORLD_STATE_BATTLEGROUND_SA_YELLOW_GATE, and WorldPackets::WorldState::InitWorldStates::Worldstates.

◆ GetClosestGraveyard()

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

Return the nearest graveyard where player can respawn.

Reimplemented from Battleground.

793{
794 GraveyardStruct const* closest = nullptr;
795 float mindist = 999999.0f;
796 float x, y;
797
798 player->GetPosition(x, y);
799
800 for (uint8 i = BG_SA_BEACH_GY; i < BG_SA_MAX_GY; i++)
801 {
802 if (GraveyardStatus[i] != player->GetTeamId())
803 continue;
804
805 GraveyardStruct const* ret = sGraveyard->GetGraveyard(BG_SA_GYEntries[i]);
806
807 // if on beach
808 if (i == BG_SA_BEACH_GY)
809 {
810 if (x > 1400)
811 return ret;
812 continue;
813 }
814
815 float dist = std::sqrt(pow(ret->x - x, 2) * pow(ret->y - y, 2));
816 if (dist < mindist)
817 {
818 mindist = dist;
819 closest = ret;
820 }
821 }
822 if (!closest && GraveyardStatus[BG_SA_BEACH_GY] == player->GetTeamId())
823 return sGraveyard->GetGraveyard(BG_SA_GYEntries[BG_SA_BEACH_GY]);
824
825 return closest;
826}
@ BG_SA_BEACH_GY
Definition BattlegroundSA.h:344
void GetPosition(float &x, float &y) const
Definition Position.h:126

References BG_SA_BEACH_GY, BG_SA_GYEntries, BG_SA_MAX_GY, Position::GetPosition(), Player::GetTeamId(), GraveyardStatus, sGraveyard, GraveyardStruct::x, and GraveyardStruct::y.

Referenced by CaptureGraveyard().

◆ GetGateIDFromEntry()

uint32 BattlegroundSA::GetGateIDFromEntry ( uint32  id)
inlineprivate

Return gate id, relative to bg data, according to gameobject id.

509 {
510 uint32 i = 0;
511 switch (id)
512 {
513 case 190722:
515 break; //Green gate destroyed
516 case 190724:
517 i = BG_SA_BLUE_GATE;
518 break; //blue gate
519 case 190726:
520 i = BG_SA_RED_GATE;
521 break; //red gate
522 case 190723:
524 break; //purple gate
525 case 190727:
527 break; //yellow gate
528 case 192549:
530 break; //ancient gate
531 }
532 return i;
533 }

References BG_SA_ANCIENT_GATE, BG_SA_BLUE_GATE, BG_SA_GREEN_GATE, BG_SA_PURPLE_GATE, BG_SA_RED_GATE, and BG_SA_YELLOW_GATE.

Referenced by DestroyGate(), and EventPlayerDamagedGO().

◆ GetWorldStateFromGateID()

◆ HandleAreaTrigger()

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

Reimplemented from Battleground.

529{
530 // this is wrong way to implement these things. On official it done by gameobject spell cast.
532 return;
533}
@ STATUS_IN_PROGRESS
Definition Battleground.h:193
BattlegroundStatus GetStatus() const
Definition Battleground.h:323

References Battleground::GetStatus(), and STATUS_IN_PROGRESS.

◆ HandleKillUnit()

void BattlegroundSA::HandleKillUnit ( Creature creature,
Player killer 
)
overridevirtual

Called when a player kill a unit in bg.

Reimplemented from Battleground.

685{
686 if (creature->GetEntry() == NPC_DEMOLISHER_SA)
687 {
690 creature->SetVisible(false);
691 }
692}
@ NPC_DEMOLISHER_SA
Definition BattlegroundSA.h:49
@ SCORE_DESTROYED_DEMOLISHER
Definition BattlegroundScore.h:53
bool _notEvenAScratch[PVP_TEAMS_COUNT]
Definition BattlegroundSA.h:622
void SetVisible(bool x)
Definition Unit.cpp:11072

References _notEvenAScratch, Attackers, Object::GetEntry(), NPC_DEMOLISHER_SA, SCORE_DESTROYED_DEMOLISHER, Unit::SetVisible(), and Battleground::UpdatePlayerScore().

◆ Init()

void BattlegroundSA::Init ( )
overridevirtual

Reimplemented from Battleground.

77{
79
80 TotalTime = 0s;
82 for (uint8 i = 0; i <= 5; i++)
84 ShipsStarted = false;
88 _relicClicked = false;
89 _nextShipIsEast = true;
90}
@ BG_SA_WARMUP
Definition BattlegroundSA.h:32
uint32 urand(uint32 min, uint32 max)
Definition Random.cpp:44
virtual void Init()
Definition Battleground.cpp:1140

References _nextShipIsEast, _notEvenAScratch, _relicClicked, Attackers, BG_SA_GATE_OK, BG_SA_WARMUP, GateStatus, Battleground::Init(), ShipsStarted, Status, TEAM_ALLIANCE, TEAM_HORDE, TotalTime, and urand().

◆ notEvenAScratch()

bool BattlegroundSA::notEvenAScratch ( TeamId  teamId) const
inline
504{ return _notEvenAScratch[teamId]; }

Referenced by achievement_not_even_a_scratch::OnCheck().

◆ OverrideGunFaction()

void BattlegroundSA::OverrideGunFaction ( )
private

Called on start and between the two round -Update faction of all vehicle.

699{
700 if (!BgCreatures[0])
701 return;
702
703 for (uint8 i = BG_SA_GUN_1; i <= BG_SA_GUN_10; i++)
704 {
705 if (Creature* gun = GetBGCreature(i))
706 gun->SetFaction(BG_SA_Factions[Attackers ? TEAM_ALLIANCE : TEAM_HORDE]);
707 }
708
709 for (uint8 i = BG_SA_DEMOLISHER_1; i <= BG_SA_DEMOLISHER_4; i++)
710 {
711 if (Creature* dem = GetBGCreature(i))
712 dem->SetFaction(BG_SA_Factions[Attackers]);
713 }
714}
@ BG_SA_GUN_10
Definition BattlegroundSA.h:65
@ BG_SA_GUN_1
Definition BattlegroundSA.h:56

References Attackers, BG_SA_DEMOLISHER_1, BG_SA_DEMOLISHER_4, BG_SA_Factions, BG_SA_GUN_1, BG_SA_GUN_10, Battleground::BgCreatures, Battleground::GetBGCreature(), TEAM_ALLIANCE, and TEAM_HORDE.

Referenced by ResetObjs().

◆ PostUpdateImpl()

void BattlegroundSA::PostUpdateImpl ( uint32  diff)
overridevirtual

Called every time for update battle data -Update timer -Round switch.

Reimplemented from Battleground.

320{
321 if (InitSecondRound)
322 {
323 if (UpdateWaitTimer < diff)
324 {
325 if (!SignaledRoundTwo)
326 {
327 SignaledRoundTwo = true;
328 InitSecondRound = false;
330 }
331 }
332 else
333 {
334 UpdateWaitTimer -= diff;
335 return;
336 }
337 }
338 TotalTime += Milliseconds(diff);
339
340 if (Status == BG_SA_WARMUP)
341 {
344 {
345 TotalTime = 0s;
346 ToggleTimer();
350 }
352 StartShips();
353 return;
354 }
355 else if (Status == BG_SA_SECOND_WARMUP)
356 {
357 if (RoundScores[0].time < BG_SA_ROUNDLENGTH)
359 else
361
362 if (TotalTime >= 1min)
363 {
364 GetBgMap()->DoForAllPlayers([&](Player* player)
365 {
367 });
368
369 TotalTime = 0s;
370 ToggleTimer();
374
375 // status was set to STATUS_WAIT_JOIN manually for Preparation, set it back now
377 for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
378 itr->second->RemoveAurasDueToSpell(SPELL_PREPARATION);
379 }
380 if (TotalTime >= 30s)
381 {
383 {
386 }
387 }
388 StartShips();
389 return;
390 }
391 else if (GetStatus() == STATUS_IN_PROGRESS)
392 {
393 if (Status == BG_SA_ROUND_ONE)
394 {
396 {
397 if (_relicClicked)
398 {
401 //Achievement Storm the Beach (1310)
402 for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
403 if (itr->second->GetTeamId() == Attackers)
404 itr->second->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, 65246);
405 }
406 else
407 {
408 // cast this before Attackers variable is switched
409 // cast this spell only upon timer end, no other ability for defenders to win :)
410 for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
411 itr->second->CastSpell(itr->second, SPELL_SA_END_OF_ROUND, true);
412
415 }
416
417 _relicClicked = false;
420 TotalTime = 0s;
421 ToggleTimer();
422
423 GetBgMap()->DoForAllPlayers([&](Player* player)
424 {
426 });
427
428 UpdateWaitTimer = 5000;
429 SignaledRoundTwo = false;
431 InitSecondRound = true;
432 ResetObjs();
433
434 return;
435 }
436 }
437 else if (Status == BG_SA_ROUND_TWO)
438 {
440 {
441 // cast this spell only upon timer end, no other ability for defenders to win :)
442 for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
443 itr->second->CastSpell(itr->second, SPELL_SA_END_OF_ROUND, true);
444
447
448 if (RoundScores[0].time == RoundScores[1].time)
450 else if (RoundScores[0].time < RoundScores[1].time)
451 EndBattleground(RoundScores[0].winner);
452 else
453 EndBattleground(RoundScores[1].winner);
454 return;
455 }
456 }
458 {
459 SendTime();
461 }
462 }
463}
constexpr Milliseconds BG_SA_ROUNDLENGTH
Definition BattlegroundSA.cpp:31
constexpr Milliseconds BG_SA_BOAT_START
Definition BattlegroundSA.cpp:29
constexpr Milliseconds BG_SA_WARMUPLENGTH
Definition BattlegroundSA.cpp:30
#define SPELL_SA_END_OF_ROUND
Definition BattlegroundSA.h:27
@ BG_SA_SECOND_WARMUP
Definition BattlegroundSA.h:34
@ BG_SA_TEXT_ROUND_TWO_START_ONE_MINUTE
Definition BattlegroundSA.h:375
@ BG_SA_TEXT_ROUND_TWO_START_HALF_MINUTE
Definition BattlegroundSA.h:376
@ SPELL_PREPARATION
Definition Battleground.h:133
@ ACHIEVEMENT_TIMED_TYPE_EVENT
Definition DBCEnums.h:110
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
Definition Duration.h:27
@ LANG_BG_SA_HAS_BEGUN
Definition Language.h:1346
@ LANG_BG_SA_ROUND_ONE_END
Definition Language.h:1349
@ CHAT_MSG_BG_SYSTEM_NEUTRAL
Definition SharedDefines.h:3423
void DemolisherStartState(bool start)
Set selectable or not demolisher, called on battle start, when boats arrive to dock.
Definition BattlegroundSA.cpp:716
void SendTime()
Update timer worldstate.
Definition BattlegroundSA.cpp:828
void UpdateDemolisherSpawns()
Respawn dead demolisher.
Definition BattlegroundSA.cpp:1098
bool ResetObjs()
Called on setup and between the two round -Delete all gameobject / creature -Respawn all gameobject /...
Definition BattlegroundSA.cpp:97
void StartShips()
Called for start ship movement.
Definition BattlegroundSA.cpp:297
static TeamId GetOtherTeamId(TeamId teamId)
Definition Battleground.cpp:1824
void SetStatus(BattlegroundStatus Status)
Definition Battleground.h:364
void SendBroadcastText(uint32 id, ChatMsg msgType, WorldObject const *target=nullptr)
Definition Battleground.cpp:734
void StartTimedAchievement(AchievementCriteriaTimedTypes type, uint32 entry)
Definition Battleground.cpp:1901

References _relicClicked, ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, ACHIEVEMENT_TIMED_TYPE_EVENT, Attackers, BG_SA_BOAT_START, BG_SA_ROUND_ONE, BG_SA_ROUND_TWO, BG_SA_ROUNDLENGTH, BG_SA_SECOND_WARMUP, BG_SA_TEXT_ROUND_TWO_START_HALF_MINUTE, BG_SA_TEXT_ROUND_TWO_START_ONE_MINUTE, BG_SA_WARMUP, BG_SA_WARMUPLENGTH, CHAT_MSG_BG_SYSTEM_NEUTRAL, DemolisherStartState(), Map::DoForAllPlayers(), EndBattleground(), EndRoundTimer, Battleground::GetBgMap(), Battleground::GetOtherTeamId(), Battleground::GetPlayers(), Player::GetSession(), Battleground::GetStatus(), InitSecondRound, LANG_BG_SA_HAS_BEGUN, LANG_BG_SA_ROUND_ONE_END, ChatHandler::PSendSysMessage(), ResetObjs(), RoundScores, Battleground::SendBroadcastText(), SendTime(), Battleground::SetStatus(), SignaledRoundTwo, SignaledRoundTwoHalfMin, SPELL_PREPARATION, SPELL_SA_END_OF_ROUND, StartShips(), Battleground::StartTimedAchievement(), Status, STATUS_IN_PROGRESS, TEAM_ALLIANCE, TEAM_HORDE, TEAM_NEUTRAL, BG_SA_RoundScore::time, ToggleTimer(), TotalTime, UpdateDemolisherSpawns(), UpdateWaitTimer, and BG_SA_RoundScore::winner.

◆ RemovePlayer()

void BattlegroundSA::RemovePlayer ( Player player)
overridevirtual

CAlled when a player leave battleground.

Reimplemented from Battleground.

525{
526}

◆ ResetObjs()

bool BattlegroundSA::ResetObjs ( )
private

Called on setup and between the two round -Delete all gameobject / creature -Respawn all gameobject / creature to have good faction.

98{
99 for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
100 SendTransportsRemove(itr->second);
101
104
105 for (uint8 i = 0; i < BG_SA_MAXOBJ; i++)
106 DelObject(i);
107
108 for (uint8 i = 0; i < BG_SA_MAXNPC; i++)
109 DelCreature(i);
110
111 for (uint8 i = BG_SA_MAXNPC; i < static_cast<uint16>(BG_SA_MAXNPC) + BG_SA_MAX_GY; i++)
112 DelCreature(i);
113
114 for (uint8 i = 0; i < 6; ++i)
116
117 for (uint8 i = 0; i < BG_SA_BOAT_ONE; i++)
118 {
120 return false;
121 }
122
123 for (uint8 i = BG_SA_BOAT_ONE; i < BG_SA_SIGIL_1; i++)
124 {
125 uint32 boatid = 0;
126 switch (i)
127 {
128 case BG_SA_BOAT_ONE:
130 break;
131 case BG_SA_BOAT_TWO:
133 break;
134 }
135 if (!AddObject(i, boatid, BG_SA_ObjSpawnlocs[i][0],
136 BG_SA_ObjSpawnlocs[i][1],
137 BG_SA_ObjSpawnlocs[i][2] + (Attackers ? -3.750f : 0),
138 BG_SA_ObjSpawnlocs[i][3], 0, 0, 0, 0, RESPAWN_ONE_DAY))
139 return false;
140 }
141
142 for (uint8 i = BG_SA_SIGIL_1; i < BG_SA_CENTRAL_FLAG; i++)
143 {
144 if (!AddObject(i, BG_SA_ObjEntries[i],
147 0, 0, 0, 0, RESPAWN_ONE_DAY))
148 return false;
149 }
150
151 // MAD props for Kiper for discovering those values - 4 hours of his work.
152 GetBGObject(BG_SA_BOAT_ONE)->SetTransportPathRotation(0.0f, 0.0f, 1.0f, 0.0002f);
153 GetBGObject(BG_SA_BOAT_TWO)->SetTransportPathRotation(0.0f, 0.0f, 1.0f, 0.00001f);
156
157 //Cannons and demolishers - NPCs are spawned
158 //By capturing GYs.
159 for (uint8 i = 0; i < BG_SA_DEMOLISHER_5; i++)
160 {
161 if (!AddCreature(BG_SA_NpcEntries[i], i,
163 BG_SA_NpcSpawnlocs[i][2], BG_SA_NpcSpawnlocs[i][3], 600))
164 return false;
165 }
166
169
170 for (uint8 i = BG_SA_GREEN_GATE; i <= BG_SA_TITAN_RELIC; i++)
171 {
173 if (GameObject* go = GetBGObject(i))
174 {
175 go->setActive(true);
176 go->SetUInt32Value(GAMEOBJECT_FACTION, defF);
177 go->SetDestructibleBuildingModifyState(false);
178 }
179 }
180
183
184 TotalTime = 0s;
185 ShipsStarted = false;
186 _nextShipIsEast = true;
187
188 //Graveyards!
189 for (uint8 i = 0; i < BG_SA_MAX_GY; i++)
190 {
191 GraveyardStruct const* sg = nullptr;
192 sg = sGraveyard->GetGraveyard(BG_SA_GYEntries[i]);
193
194 if (!sg)
195 {
196 LOG_ERROR("bg.battleground", "SOTA: Can't find GY entry {}", BG_SA_GYEntries[i]);
197 return false;
198 }
199
200 if (i == BG_SA_BEACH_GY)
201 {
204 }
205 else
206 {
209 LOG_ERROR("bg.battleground", "SOTA: couldn't spawn GY: {}", i);
210 }
211 }
212
213 //GY capture points
215 {
216 AddObject(i, (BG_SA_ObjEntries[i] - (Attackers == TEAM_ALLIANCE ? 1 : 0)),
219 0, 0, 0, 0, RESPAWN_ONE_DAY);
221 }
222
224 {
228 0, 0, 0, 0, RESPAWN_ONE_DAY);
230 }
231
233
234 for (uint8 i = BG_SA_BOMB; i < BG_SA_MAXOBJ; i++)
235 {
239 0, 0, 0, 0, RESPAWN_ONE_DAY);
241 }
242
243 //Player may enter BEFORE we set up bG - lets update his worldstates anyway...
247
251
253 {
256
261
264 }
265 else
266 {
269
274
277 }
278
285
286 for (int i = BG_SA_BOAT_ONE; i <= BG_SA_BOAT_TWO; i++)
287 for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
288 SendTransportInit(itr->second);
289
290 // set status manually so preparation is cast correctly in 2nd round too
292
294 return true;
295}
@ BG_SA_BOAT_ONE_H
Definition BattlegroundSA.h:88
@ BG_SA_BOAT_TWO_H
Definition BattlegroundSA.h:87
@ BG_SA_BOAT_ONE_A
Definition BattlegroundSA.h:86
@ BG_SA_BOAT_TWO_A
Definition BattlegroundSA.h:89
@ BG_SA_BOAT_ONE
Definition BattlegroundSA.h:168
@ BG_SA_SIGIL_1
Definition BattlegroundSA.h:170
@ BG_SA_PORTAL_DEFFENDER_BLUE
Definition BattlegroundSA.h:181
@ BG_SA_BOAT_TWO
Definition BattlegroundSA.h:169
@ BG_SA_BOMB
Definition BattlegroundSA.h:186
@ RESPAWN_IMMEDIATELY
Definition Battleground.h:160
@ STATUS_WAIT_JOIN
Definition Battleground.h:192
@ GAMEOBJECT_FACTION
Definition UpdateFields.h:402
void OverrideGunFaction()
Called on start and between the two round -Update faction of all vehicle.
Definition BattlegroundSA.cpp:698
void TeleportPlayers()
Called between the two round -Teleport all players to good location.
Definition BattlegroundSA.cpp:535
void SendTransportsRemove(Player *player)
Send packet to player for destroy boats (client part)
Definition BattlegroundSA.cpp:1146
void SpawnBGObject(uint32 type, uint32 respawntime, uint32 forceRespawnDelay=0)
Definition Battleground.cpp:1586
void SetTransportPathRotation(float qx, float qy, float qz, float qw)
Definition GameObject.cpp:2262
void Refresh()
Definition GameObject.cpp:911
void SetUInt32Value(uint16 index, uint32 value)
Definition Object.cpp:639

References _nextShipIsEast, Battleground::AddCreature(), Battleground::AddObject(), Battleground::AddSpiritGuide(), Attackers, BG_SA_BEACH_GY, BG_SA_BOAT_ONE, BG_SA_BOAT_ONE_A, BG_SA_BOAT_ONE_H, BG_SA_BOAT_TWO, BG_SA_BOAT_TWO_A, BG_SA_BOAT_TWO_H, BG_SA_BOMB, BG_SA_CENTRAL_CAPTURABLE_GY, BG_SA_CENTRAL_FLAG, BG_SA_DEMOLISHER_5, BG_SA_Factions, BG_SA_GATE_OK, BG_SA_GREEN_GATE, BG_SA_GYEntries, BG_SA_GYOrientation, BG_SA_LEFT_CAPTURABLE_GY, BG_SA_MAX_GY, BG_SA_MAXNPC, BG_SA_MAXOBJ, BG_SA_NpcEntries, BG_SA_NpcSpawnlocs, BG_SA_ObjEntries, BG_SA_ObjSpawnlocs, BG_SA_PORTAL_DEFFENDER_BLUE, BG_SA_RIGHT_CAPTURABLE_GY, BG_SA_SIGIL_1, BG_SA_TITAN_RELIC, Battleground::DelCreature(), Battleground::DelObject(), DemolisherStartState(), GAMEOBJECT_FACTION, GateStatus, Battleground::GetBGObject(), Battleground::GetOtherTeamId(), Battleground::GetPlayers(), GraveyardStatus, LOG_ERROR, OverrideGunFaction(), GameObject::Refresh(), RESPAWN_IMMEDIATELY, RESPAWN_ONE_DAY, SendTransportInit(), SendTransportsRemove(), Battleground::SetStatus(), GameObject::SetTransportPathRotation(), Object::SetUInt32Value(), sGraveyard, ShipsStarted, Battleground::SpawnBGObject(), STATUS_WAIT_JOIN, TEAM_ALLIANCE, TEAM_HORDE, TeleportPlayers(), TotalTime, UpdateObjectInteractionFlags(), Battleground::UpdateWorldState(), WORLD_STATE_BATTLEGROUND_SA_ALLIANCE_ATTACKS, WORLD_STATE_BATTLEGROUND_SA_ALLIANCE_DEFENSE_TOKEN, WORLD_STATE_BATTLEGROUND_SA_ANCIENT_GATE, WORLD_STATE_BATTLEGROUND_SA_BLUE_GATE, WORLD_STATE_BATTLEGROUND_SA_CENTER_GY_ALLIANCE, WORLD_STATE_BATTLEGROUND_SA_CENTER_GY_HORDE, WORLD_STATE_BATTLEGROUND_SA_GREEN_GATE, WORLD_STATE_BATTLEGROUND_SA_HORDE_ATTACKS, WORLD_STATE_BATTLEGROUND_SA_HORDE_DEFENSE_TOKEN, WORLD_STATE_BATTLEGROUND_SA_LEFT_ATTACK_TOKEN_ALLIANCE, WORLD_STATE_BATTLEGROUND_SA_LEFT_ATTACK_TOKEN_HORDE, WORLD_STATE_BATTLEGROUND_SA_LEFT_GY_ALLIANCE, WORLD_STATE_BATTLEGROUND_SA_LEFT_GY_HORDE, WORLD_STATE_BATTLEGROUND_SA_PURPLE_GATE, WORLD_STATE_BATTLEGROUND_SA_RED_GATE, WORLD_STATE_BATTLEGROUND_SA_RIGHT_ATTACK_TOKEN_ALLIANCE, WORLD_STATE_BATTLEGROUND_SA_RIGHT_ATTACK_TOKEN_HORDE, WORLD_STATE_BATTLEGROUND_SA_RIGHT_GY_ALLIANCE, WORLD_STATE_BATTLEGROUND_SA_RIGHT_GY_HORDE, WORLD_STATE_BATTLEGROUND_SA_YELLOW_GATE, GraveyardStruct::x, GraveyardStruct::y, and GraveyardStruct::z.

Referenced by PostUpdateImpl(), and SetupBattleground().

◆ SendTime()

◆ SendTransportInit()

void BattlegroundSA::SendTransportInit ( Player player)
private

Send packet to player for create boats (client part)

1132{
1134 {
1135 UpdateData transData;
1140 WorldPacket packet;
1141 transData.BuildPacket(packet);
1142 player->SendDirectMessage(&packet);
1143 }
1144}
virtual void BuildCreateUpdateBlockForPlayer(UpdateData *data, Player *target)
Definition Object.cpp:178
void SendDirectMessage(WorldPacket const *data) const
Definition Player.cpp:5680
Definition UpdateData.h:52
bool BuildPacket(WorldPacket &packet)
Definition UpdateData.cpp:48
Definition WorldPacket.h:26

References BG_SA_BOAT_ONE, BG_SA_BOAT_TWO, Battleground::BgObjects, Object::BuildCreateUpdateBlockForPlayer(), UpdateData::BuildPacket(), Battleground::GetBGObject(), and Player::SendDirectMessage().

Referenced by AddPlayer(), and ResetObjs().

◆ SendTransportsRemove()

void BattlegroundSA::SendTransportsRemove ( Player player)
private

Send packet to player for destroy boats (client part)

1147{
1149 {
1150 UpdateData transData;
1155 WorldPacket packet;
1156 transData.BuildPacket(packet);
1157 player->SendDirectMessage(&packet);
1158 }
1159}
void BuildOutOfRangeUpdateBlock(UpdateData *data) const
Definition Object.cpp:258

References BG_SA_BOAT_ONE, BG_SA_BOAT_TWO, Battleground::BgObjects, Object::BuildOutOfRangeUpdateBlock(), UpdateData::BuildPacket(), Battleground::GetBGObject(), and Player::SendDirectMessage().

Referenced by ResetObjs().

◆ SetupBattleground()

bool BattlegroundSA::SetupBattleground ( )
overridevirtual

Called for ini battleground, after that the first player be entered.

Reimplemented from Battleground.

93{
94 return ResetObjs();
95}

References ResetObjs().

◆ StartingEventCloseDoors()

void BattlegroundSA::StartingEventCloseDoors ( )
overridevirtual

Called when battle start.

Reimplemented from Battleground.

466{
467}

◆ StartingEventOpenDoors()

void BattlegroundSA::StartingEventOpenDoors ( )
overridevirtual

Reimplemented from Battleground.

470{
471}

◆ StartShips()

void BattlegroundSA::StartShips ( )
private

Called for start ship movement.

298{
299 if (ShipsStarted)
300 return;
301
304
305 for (int i = BG_SA_BOAT_ONE; i <= BG_SA_BOAT_TWO; i++)
306 {
307 for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
308 {
309 UpdateData data;
310 WorldPacket pkt;
311 GetBGObject(i)->BuildValuesUpdateBlockForPlayer(&data, itr->second);
312 data.BuildPacket(pkt);
313 itr->second->SendDirectMessage(&pkt);
314 }
315 }
316 ShipsStarted = true;
317}
void DoorOpen(uint32 type)
Definition Battleground.cpp:1556
void BuildValuesUpdateBlockForPlayer(UpdateData *data, Player *target)
Definition Object.cpp:246

References BG_SA_BOAT_ONE, BG_SA_BOAT_TWO, UpdateData::BuildPacket(), Object::BuildValuesUpdateBlockForPlayer(), Battleground::DoorOpen(), Battleground::GetBGObject(), Battleground::GetPlayers(), and ShipsStarted.

Referenced by PostUpdateImpl().

◆ TeleportPlayers()

void BattlegroundSA::TeleportPlayers ( )
private

Called between the two round -Teleport all players to good location.

536{
537 for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
538 {
539 if (Player* player = itr->second)
540 {
541 // should remove spirit of redemption
542 if (player->HasSpiritOfRedemptionAura())
543 player->RemoveAurasByType(SPELL_AURA_MOD_SHAPESHIFT);
544
545 if (!player->IsAlive())
546 {
547 player->ResurrectPlayer(1.0f);
548 player->SpawnCorpseBones();
549 }
550
552 {
553 player->CastSpell(player, SPELL_PREPARATION, true);
554 player->GetMotionMaster()->MovementExpired();
555 }
556
557 player->ResetAllPowers();
558 player->CombatStopWithPets(true);
559
561
562 // xinef: one more time, just to be sure
564 player->GetMotionMaster()->Clear(false);
565 }
566 }
567}
@ SPELL_AURA_MOD_SHAPESHIFT
Definition SpellAuraDefines.h:99

References BG_SA_SECOND_WARMUP, Battleground::GetPlayers(), SPELL_AURA_MOD_SHAPESHIFT, SPELL_PREPARATION, Status, and TeleportToEntrancePosition().

Referenced by ResetObjs().

◆ TeleportToEntrancePosition()

void BattlegroundSA::TeleportToEntrancePosition ( Player player)
private
570{
571 if (player->GetTeamId() != Attackers)
572 {
573 player->TeleportTo(MAP_STRAND_OF_THE_ANCIENTS, 1209.7f, -65.16f, 70.1f, 0.0f, 0);
574 }
575 else
576 {
577 if (!ShipsStarted)
578 {
579 player->CastSpell(player, 12438, true);//Without this player falls before boat loads...
580 if (_nextShipIsEast)
581 player->TeleportTo(MAP_STRAND_OF_THE_ANCIENTS, 2682.936f, -830.368f, 15.0f, 2.895f, 0);
582 else
583 player->TeleportTo(MAP_STRAND_OF_THE_ANCIENTS, 2577.003f, 980.261f, 15.0f, 0.807f, 0);
584
586 }
587 else
588 player->TeleportTo(MAP_STRAND_OF_THE_ANCIENTS, 1600.381f, -106.263f, 8.8745f, 3.78f, 0);
589 }
590}
@ MAP_STRAND_OF_THE_ANCIENTS
Definition AreaDefines.h:257
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:1350

References _nextShipIsEast, Attackers, Unit::CastSpell(), Player::GetTeamId(), MAP_STRAND_OF_THE_ANCIENTS, ShipsStarted, and Player::TeleportTo().

Referenced by AddPlayer(), and TeleportPlayers().

◆ ToggleTimer()

void BattlegroundSA::ToggleTimer ( )
private

◆ UpdateDemolisherSpawns()

void BattlegroundSA::UpdateDemolisherSpawns ( )
private

Respawn dead demolisher.

1099{
1100 for (uint8 i = BG_SA_DEMOLISHER_1; i <= BG_SA_DEMOLISHER_8; i++)
1101 {
1102 if (BgCreatures[i])
1103 {
1104 if (Creature* Demolisher = GetBGCreature(i))
1105 {
1106 if (Demolisher->isDead())
1107 {
1108 // Demolisher is not in list
1109 if (DemoliserRespawnList.find(i) == DemoliserRespawnList.end())
1110 {
1111 DemoliserRespawnList[i] = GameTime::GetGameTimeMS().count() + 30000;
1112 }
1113 else
1114 {
1116 {
1117 Demolisher->Relocate(BG_SA_NpcSpawnlocs[i][0], BG_SA_NpcSpawnlocs[i][1],
1119
1120 Demolisher->SetVisible(true);
1121 Demolisher->Respawn();
1122 DemoliserRespawnList.erase(i);
1123 }
1124 }
1125 }
1126 }
1127 }
1128 }
1129}
std::map< uint32, uint32 > DemoliserRespawnList
Definition BattlegroundSA.h:616
Milliseconds GetGameTimeMS()
Definition GameTime.cpp:43

References BG_SA_DEMOLISHER_1, BG_SA_DEMOLISHER_8, BG_SA_NpcSpawnlocs, Battleground::BgCreatures, DemoliserRespawnList, Battleground::GetBGCreature(), and GameTime::GetGameTimeMS().

Referenced by PostUpdateImpl().

◆ UpdateObjectInteractionFlags() [1/2]

void BattlegroundSA::UpdateObjectInteractionFlags ( )
private

◆ UpdateObjectInteractionFlags() [2/2]

void BattlegroundSA::UpdateObjectInteractionFlags ( uint32  objectId)
private

Updates interaction flags of specific objects.

868{
869 if (GameObject* go = GetBGObject(objectId))
870 {
871 if (CanInteractWithObject(objectId))
872 go->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE | GO_FLAG_INTERACT_COND | GO_FLAG_IN_USE);
873 else
874 go->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
875 }
876}
@ GO_FLAG_INTERACT_COND
Definition SharedDefines.h:1611
@ GO_FLAG_NOT_SELECTABLE
Definition SharedDefines.h:1613
@ GO_FLAG_IN_USE
Definition SharedDefines.h:1609

References CanInteractWithObject(), Battleground::GetBGObject(), GO_FLAG_IN_USE, GO_FLAG_INTERACT_COND, and GO_FLAG_NOT_SELECTABLE.

Member Data Documentation

◆ _nextShipIsEast

bool BattlegroundSA::_nextShipIsEast
private

Toggle for alternating player spawns between East and West ships (true = first/East ship, false = second/West ship)

Referenced by BattlegroundSA(), Init(), ResetObjs(), and TeleportToEntrancePosition().

◆ _notEvenAScratch

bool BattlegroundSA::_notEvenAScratch[PVP_TEAMS_COUNT]
private

Referenced by HandleKillUnit(), and Init().

◆ _relicClicked

bool BattlegroundSA::_relicClicked
private

◆ Attackers

◆ DemoliserRespawnList

std::map<uint32, uint32> BattlegroundSA::DemoliserRespawnList
private

Referenced by UpdateDemolisherSpawns().

◆ EndRoundTimer

Milliseconds BattlegroundSA::EndRoundTimer
private

Max time of round.

Referenced by BattlegroundSA(), PostUpdateImpl(), and SendTime().

◆ GateStatus

BG_SA_GateState BattlegroundSA::GateStatus[6]
private

◆ GraveyardStatus

TeamId BattlegroundSA::GraveyardStatus[BG_SA_MAX_GY]
private

Team witch conntrol each graveyard.

Referenced by BattlegroundSA(), CaptureGraveyard(), FillInitialWorldStates(), GetClosestGraveyard(), and ResetObjs().

◆ InitSecondRound

bool BattlegroundSA::InitSecondRound
private

for know if second round has been init

Referenced by BattlegroundSA(), and PostUpdateImpl().

◆ RoundScores

BG_SA_RoundScore BattlegroundSA::RoundScores[2]
private

Score of each round.

Referenced by BattlegroundSA(), EventPlayerUsedGO(), and PostUpdateImpl().

◆ ShipsStarted

bool BattlegroundSA::ShipsStarted
private

For know if boats has start moving or not yet.

Referenced by BattlegroundSA(), Init(), ResetObjs(), StartShips(), and TeleportToEntrancePosition().

◆ SignaledRoundTwo

bool BattlegroundSA::SignaledRoundTwo
private

for know if warning about second round start has been sent

Referenced by BattlegroundSA(), and PostUpdateImpl().

◆ SignaledRoundTwoHalfMin

bool BattlegroundSA::SignaledRoundTwoHalfMin
private

for know if warning about second round start has been sent

Referenced by BattlegroundSA(), and PostUpdateImpl().

◆ Status

BG_SA_Status BattlegroundSA::Status
private

Statu of battle (Start or not, and what round)

Referenced by BattlegroundSA(), EventPlayerUsedGO(), Init(), PostUpdateImpl(), and TeleportPlayers().

◆ TimerEnabled

bool BattlegroundSA::TimerEnabled
private

used for know we are in timer phase or not (used for worldstate update)

Referenced by BattlegroundSA(), FillInitialWorldStates(), and ToggleTimer().

◆ TotalTime

Milliseconds BattlegroundSA::TotalTime
private

Totale elapsed time of current round.

Referenced by BattlegroundSA(), EventPlayerUsedGO(), Init(), PostUpdateImpl(), ResetObjs(), and SendTime().

◆ UpdateWaitTimer

uint32 BattlegroundSA::UpdateWaitTimer
private

5secs before starting the 1min countdown for second round

Referenced by BattlegroundSA(), and PostUpdateImpl().


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