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:771
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:1138
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:113
Definition BattlegroundSA.h:395

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

◆ AllowDefenseOfTheAncients()

bool BattlegroundSA::AllowDefenseOfTheAncients ( Player source)
1169{
1170 if (source->GetTeamId() == Attackers)
1171 return false;
1172
1173 for (uint8 i = 0; i <= 5; i++)
1174 {
1176 return false;
1177 }
1178
1179 return true;
1180}
@ BG_SA_GATE_DESTROYED
Definition BattlegroundSA.h:43
TeamId GetTeamId(bool original=false) const
Definition Player.h:2101

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.

844{
845 switch (objectId)
846 {
849 {
850 return false;
851 }
852 [[fallthrough]];
855 {
856 return false;
857 }
858 [[fallthrough]];
859 case BG_SA_LEFT_FLAG:
860 case BG_SA_RIGHT_FLAG:
862 {
863 return false;
864 }
865 break;
866 default:
867 ABORT();
868 break;
869 }
870
871 return true;
872}
@ 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
917{
918 if (GraveyardStatus[i] == Attackers || Source->GetTeamId() != Attackers)
919 return;
920
921 GraveyardStatus[i] = Source->GetTeamId();
922 // Those who are waiting to resurrect at this node are taken to the closest own node's graveyard
923 GuidVector& ghost_list = m_ReviveQueue[BgCreatures[static_cast<uint16>(BG_SA_MAXNPC) + i]];
924 if (!ghost_list.empty())
925 {
926 GraveyardStruct const* ClosestGrave = nullptr;
927 for (ObjectGuid const& guid : ghost_list)
928 {
929 Player* player = ObjectAccessor::FindPlayer(guid);
930 if (!player)
931 continue;
932
933 if (!ClosestGrave) // cache
934 ClosestGrave = GetClosestGraveyard(player);
935
936 if (ClosestGrave)
937 player->TeleportTo(GetMapId(), ClosestGrave->x, ClosestGrave->y, ClosestGrave->z, player->GetOrientation());
938 }
939
940 // xinef: clear resurrect queue for this creature
941 ghost_list.clear();
942 }
943
944 DelCreature(static_cast<uint16>(BG_SA_MAXNPC) + i);
945
946 GraveyardStruct const* sg = sGraveyard->GetGraveyard(BG_SA_GYEntries[i]);
947 if (!sg)
948 {
949 LOG_ERROR("bg.battleground", "BattlegroundSA::CaptureGraveyard: non-existant GY entry: {}", BG_SA_GYEntries[i]);
950 return;
951 }
952
953 AddSpiritGuide(i + static_cast<uint16>(BG_SA_MAXNPC), sg->x, sg->y, sg->z, BG_SA_GYOrientation[i], GraveyardStatus[i]);
954 uint32 npc = 0;
955 uint32 flag = 0;
956
957 switch (i)
958 {
960 flag = BG_SA_LEFT_FLAG;
961 DelObject(flag);
962 AddObject(flag, (BG_SA_ObjEntries[flag] - (Source->GetTeamId() == TEAM_ALLIANCE ? 0 : 1)),
963 BG_SA_ObjSpawnlocs[flag][0], BG_SA_ObjSpawnlocs[flag][1],
964 BG_SA_ObjSpawnlocs[flag][2], BG_SA_ObjSpawnlocs[flag][3], 0, 0, 0, 0, RESPAWN_ONE_DAY);
965
970
971 for (uint8 j = BG_SA_DEMOLISHER_7; j <= BG_SA_DEMOLISHER_8; j++)
972 {
975 BG_SA_NpcSpawnlocs[j][2], BG_SA_NpcSpawnlocs[j][3], 600);
976
977 if (Creature* dem = GetBGCreature(j))
978 dem->SetFaction(BG_SA_Factions[Attackers]);
979 }
980
983 GetBgMap()->DoForAllPlayers([&](Player* player)
984 {
985 if (player->GetTeamId() == TEAM_ALLIANCE)
987 else
989 });
990 break;
992 flag = BG_SA_RIGHT_FLAG;
993 DelObject(flag);
994 AddObject(flag, (BG_SA_ObjEntries[flag] - (Source->GetTeamId() == TEAM_ALLIANCE ? 0 : 1)),
995 BG_SA_ObjSpawnlocs[flag][0], BG_SA_ObjSpawnlocs[flag][1],
996 BG_SA_ObjSpawnlocs[flag][2], BG_SA_ObjSpawnlocs[flag][3], 0, 0, 0, 0, RESPAWN_ONE_DAY);
997
1002
1003 for (uint8 j = BG_SA_DEMOLISHER_5; j <= BG_SA_DEMOLISHER_6; j++)
1004 {
1006 BG_SA_NpcSpawnlocs[j][2], BG_SA_NpcSpawnlocs[j][3], 600);
1007
1008 if (Creature* dem = GetBGCreature(j))
1009 dem->SetFaction(BG_SA_Factions[Attackers]);
1010 }
1011
1014 GetBgMap()->DoForAllPlayers([&](Player* player)
1015 {
1016 if (player->GetTeamId() == TEAM_ALLIANCE)
1018 else
1020 });
1021 break;
1023 flag = BG_SA_CENTRAL_FLAG;
1024 DelObject(flag);
1025 AddObject(flag, (BG_SA_ObjEntries[flag] - (Source->GetTeamId() == TEAM_ALLIANCE ? 0 : 1)),
1026 BG_SA_ObjSpawnlocs[flag][0], BG_SA_ObjSpawnlocs[flag][1],
1027 BG_SA_ObjSpawnlocs[flag][2], BG_SA_ObjSpawnlocs[flag][3], 0, 0, 0, 0, RESPAWN_ONE_DAY);
1028
1031 GetBgMap()->DoForAllPlayers([&](Player* player)
1032 {
1033 if (player->GetTeamId() == TEAM_ALLIANCE)
1035 else
1037 });
1038 break;
1039 default:
1040 ABORT();
1041 break;
1042 }
1043}
@ 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:1291
@ LANG_BG_SA_H_GY_EAST
Definition Language.h:1296
@ LANG_BG_SA_A_GY_WEST
Definition Language.h:1292
@ LANG_BG_SA_A_GY_EAST
Definition Language.h:1293
@ LANG_BG_SA_H_GY_WEST
Definition Language.h:1295
#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:799
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:2911
Definition ObjectGuid.h:118
Definition Player.h:1066
WorldSession * GetSession() const
Definition Player.h:1993
bool TeleportTo(uint32 mapid, float x, float y, float z, float orientation, uint32 options=0, Unit *target=nullptr, bool newInstance=false)
Definition Player.cpp:1353
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:812
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 for (uint8 i = BG_SA_DEMOLISHER_1; i <= BG_SA_DEMOLISHER_4; i++)
722 if (Creature* dem = GetBGCreature(i))
723 {
724 if (start)
726 else
728 }
729
730 for (uint8 i = BG_SA_GUN_1; i <= BG_SA_GUN_10; i++)
731 if (Creature* gun = GetBGCreature(i))
732 {
733 if (start)
735 else
737 }
738
739 // xinef: enable first gates damaging at start
740 if (!start)
741 {
743 go->SetDestructibleBuildingModifyState(true);
745 go->SetDestructibleBuildingModifyState(true);
746 }
747}
@ BG_SA_GUN_10
Definition BattlegroundSA.h:65
@ BG_SA_DEMOLISHER_1
Definition BattlegroundSA.h:71
@ BG_SA_DEMOLISHER_4
Definition BattlegroundSA.h:74
@ BG_SA_GUN_1
Definition BattlegroundSA.h:56
@ UNIT_FLAG_NON_ATTACKABLE
Definition UnitDefines.h:255
@ UNIT_FLAG_NOT_SELECTABLE
Definition UnitDefines.h:279
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, BG_SA_GUN_1, BG_SA_GUN_10, 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.

750{
752 if (!GateStatus[i])
753 return;
754
755 if (GameObject* g = GetBGObject(i))
756 {
757 if (g->GetGOValue()->Building.Health == 0)
758 {
760 if (uint32 uws = GetWorldStateFromGateID(i))
762
763 bool rewardHonor = true;
764 switch (i)
765 {
766 case BG_SA_GREEN_GATE:
768 rewardHonor = false;
769 break;
770 case BG_SA_BLUE_GATE:
772 rewardHonor = false;
773 break;
774 case BG_SA_RED_GATE:
776 rewardHonor = false;
777 break;
780 rewardHonor = false;
781 break;
782 }
783
785
786 if (i < 5)
787 DelObject(i + 9);
788
789 if (player)
790 {
792 if (rewardHonor)
794 }
795 }
796 }
797}
@ 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:885
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:116

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.

1094{
1095 //honor reward for winning
1096 RewardHonorToTeam(GetBonusHonorFromKill(1), winnerTeamId);
1097
1098 //complete map_end rewards (even if no team wins)
1101
1102 Battleground::EndBattleground(winnerTeamId);
1103}
@ TEAM_HORDE
Definition SharedDefines.h:772
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.

893{
894 switch (gameObject->GetEntry())
895 {
896 case 191307:
897 case 191308:
900 break;
901 case 191305:
902 case 191306:
905 break;
906 case 191310:
907 case 191309:
910 break;
911 default:
912 return;
913 }
914}
void CaptureGraveyard(BG_SA_Graveyards i, Player *Source)
Called when a graveyard is capture -Update spiritguide -Update gameobject (flag) -Update Worldstate -...
Definition BattlegroundSA.cpp:916
bool CanInteractWithObject(uint32 objectId)
Checks if a player can interact with the given object.
Definition BattlegroundSA.cpp:843

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:1284
@ LANG_BG_SA_CHAMBER_BREACHED
Definition Language.h:1290
@ LANG_BG_SA_IS_UNDER_ATTACK
Definition Language.h:1283
GameObjectTemplate const * GetGOInfo() const
Definition GameObject.h:136
uint32 damageEvent
Definition GameObjectData.h:373
struct GameObjectTemplate::@234::@262 building
std::string name
Definition GameObjectData.h:35
uint32 destroyedEvent
Definition GameObjectData.h:365
uint32 damagedEvent
Definition GameObjectData.h:360

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.

1046{
1048 {
1049 if (Source->GetTeamId() == Attackers)
1050 {
1051 GetBgMap()->DoForAllPlayers([&](Player* player)
1052 {
1053 if (player->GetTeamId() == Attackers)
1054 {
1055 if (player->GetTeamId() == TEAM_ALLIANCE)
1056 ChatHandler(player->GetSession()).PSendSysMessage(LANG_BG_SA_ALLIANCE_CAPTURED_RELIC);
1057 else
1058 ChatHandler(player->GetSession()).PSendSysMessage(LANG_BG_SA_HORDE_CAPTURED_RELIC);
1059 }
1060 });
1061
1062 if (Status == BG_SA_ROUND_ONE)
1063 {
1064 _relicClicked = true;
1065 }
1066 else if (Status == BG_SA_ROUND_TWO)
1067 {
1070 ToggleTimer();
1071 //Achievement Storm the Beach (1310)
1072 for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
1073 if (itr->second->GetTeamId() == Attackers && RoundScores[1].winner == Attackers)
1074 itr->second->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, 65246);
1075
1076 if (RoundScores[0].time == RoundScores[1].time)
1078 else if (RoundScores[0].time < RoundScores[1].time)
1079 EndBattleground(RoundScores[0].winner);
1080 else
1081 EndBattleground(RoundScores[1].winner);
1082 }
1083 }
1084 }
1085}
@ 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:773
bool _relicClicked
Definition BattlegroundSA.h:619
void ToggleTimer()
Switch on/off timer worldstate.
Definition BattlegroundSA.cpp:1087
void EndBattleground(TeamId winnerTeamId) override
Called on battleground ending.
Definition BattlegroundSA.cpp:1093
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.

800{
801 GraveyardStruct const* closest = nullptr;
802 float mindist = 999999.0f;
803 float x, y;
804
805 player->GetPosition(x, y);
806
807 for (uint8 i = BG_SA_BEACH_GY; i < BG_SA_MAX_GY; i++)
808 {
809 if (GraveyardStatus[i] != player->GetTeamId())
810 continue;
811
812 GraveyardStruct const* ret = sGraveyard->GetGraveyard(BG_SA_GYEntries[i]);
813
814 // if on beach
815 if (i == BG_SA_BEACH_GY)
816 {
817 if (x > 1400)
818 return ret;
819 continue;
820 }
821
822 float dist = std::sqrt(pow(ret->x - x, 2) * pow(ret->y - y, 2));
823 if (dist < mindist)
824 {
825 mindist = dist;
826 closest = ret;
827 }
828 }
829 if (!closest && GraveyardStatus[BG_SA_BEACH_GY] == player->GetTeamId())
830 return sGraveyard->GetGraveyard(BG_SA_GYEntries[BG_SA_BEACH_GY]);
831
832 return closest;
833}
@ 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:14409

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}

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:1282
@ LANG_BG_SA_ROUND_ONE_END
Definition Language.h:1285
@ CHAT_MSG_BG_SYSTEM_NEUTRAL
Definition SharedDefines.h:3428
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:835
void UpdateDemolisherSpawns()
Respawn dead demolisher.
Definition BattlegroundSA.cpp:1105
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:1153
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:2221
void Refresh()
Definition GameObject.cpp:900
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)

1139{
1141 {
1142 UpdateData transData;
1147 WorldPacket packet;
1148 transData.BuildPacket(packet);
1149 player->SendDirectMessage(&packet);
1150 }
1151}
virtual void BuildCreateUpdateBlockForPlayer(UpdateData *data, Player *target)
Definition Object.cpp:178
void SendDirectMessage(WorldPacket const *data) const
Definition Player.cpp:5685
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)

1154{
1156 {
1157 UpdateData transData;
1162 WorldPacket packet;
1163 transData.BuildPacket(packet);
1164 player->SendDirectMessage(&packet);
1165 }
1166}
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:1194

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.

1106{
1107 for (uint8 i = BG_SA_DEMOLISHER_1; i <= BG_SA_DEMOLISHER_8; i++)
1108 {
1109 if (BgCreatures[i])
1110 {
1111 if (Creature* Demolisher = GetBGCreature(i))
1112 {
1113 if (Demolisher->isDead())
1114 {
1115 // Demolisher is not in list
1116 if (DemoliserRespawnList.find(i) == DemoliserRespawnList.end())
1117 {
1118 DemoliserRespawnList[i] = GameTime::GetGameTimeMS().count() + 30000;
1119 }
1120 else
1121 {
1123 {
1124 Demolisher->Relocate(BG_SA_NpcSpawnlocs[i][0], BG_SA_NpcSpawnlocs[i][1],
1126
1127 Demolisher->SetVisible(true);
1128 Demolisher->Respawn();
1129 DemoliserRespawnList.erase(i);
1130 }
1131 }
1132 }
1133 }
1134 }
1135 }
1136}
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.

875{
876 if (GameObject* go = GetBGObject(objectId))
877 {
878 if (CanInteractWithObject(objectId))
879 go->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE | GO_FLAG_INTERACT_COND | GO_FLAG_IN_USE);
880 else
881 go->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
882 }
883}
@ GO_FLAG_INTERACT_COND
Definition SharedDefines.h:1616
@ GO_FLAG_NOT_SELECTABLE
Definition SharedDefines.h:1618
@ GO_FLAG_IN_USE
Definition SharedDefines.h:1614

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: