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]
 

Additional Inherited Members

- Public Types inherited from Battleground
typedef std::set< Player * > SpectatorList
 
typedef std::map< ObjectGuid, ObjectGuidToBeTeleportedMap
 
typedef std::map< ObjectGuid, Player * > BattlegroundPlayerMap
 
typedef std::unordered_map< ObjectGuid::LowType, BattlegroundScore * > BattlegroundScoreMap
 
typedef std::unordered_map< ObjectGuid, ArenaLogEntryDataArenaLogEntryDataMap
 
typedef GuidVector BGObjects
 
typedef GuidVector BGCreatures
 
- Static Public Member Functions inherited from Battleground
static TeamId GetOtherTeamId (TeamId teamId)
 
- Public Attributes inherited from Battleground
GuidSet readyMarkerClickedSet
 
ArenaLogEntryDataMap ArenaLogEntries
 
BGObjects BgObjects
 
BGCreatures BgCreatures
 
- Protected Member Functions inherited from Battleground
void EndNow ()
 
void PlayerAddedToBGCheckIfBGIsRunning (Player *player)
 
void _ProcessResurrect (uint32 diff)
 
void _ProcessProgress (uint32 diff)
 
void _ProcessLeave (uint32 diff)
 
void _ProcessJoin (uint32 diff)
 
void _CheckSafePositions (uint32 diff)
 
- Protected Attributes inherited from Battleground
BattlegroundScoreMap PlayerScores
 
BattlegroundPlayerMap m_Players
 
std::map< ObjectGuid, GuidVectorm_ReviveQueue
 
uint8 m_Events
 
BattlegroundStartTimeIntervals StartDelayTimes [BG_STARTING_EVENT_COUNT]
 
uint32 StartMessageIds [BG_STARTING_EVENT_COUNT]
 
bool m_BuffChange
 
bool m_IsRandom
 
BGHonorMode m_HonorMode
 
int32 m_TeamScores [PVP_TEAMS_COUNT]
 
ArenaTeamScore _arenaTeamScores [PVP_TEAMS_COUNT]
 
uint32 m_UpdateTimer
 
EventProcessor _reviveEvents
 

Detailed Description

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
56 for (uint8 i = 0; i < 6; i++)
58
59 for (uint8 i = 0; i < 2; i++)
60 {
62 RoundScores[i].time = 0s;
63 }
64
68 memset(&GraveyardStatus, 0, sizeof(GraveyardStatus));
69}
@ 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:243
std::uint8_t uint8
Definition Define.h:109
std::uint16_t uint16
Definition Define.h:108
@ TEAM_ALLIANCE
Definition SharedDefines.h:760
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
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:550
BGCreatures BgCreatures
Definition Battleground.h:551
uint32 StartMessageIds[BG_STARTING_EVENT_COUNT]
Definition Battleground.h:641
Milliseconds time
Definition BattlegroundSA.h:382
TeamId winner
Definition BattlegroundSA.h:381

References 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
72{
73}

Member Function Documentation

◆ AddPlayer()

void BattlegroundSA::AddPlayer ( Player player)
overridevirtual

Called when a player join battle.

Reimplemented from Battleground.

513{
515 PlayerScores.emplace(player->GetGUID().GetCounter(), new BattlegroundSAScore(player->GetGUID()));
516
517 SendTransportInit(player);
519}
void SendTransportInit(Player *player)
Send packet to player for create boats (client part)
Definition BattlegroundSA.cpp:1133
void TeleportToEntrancePosition(Player *player)
Definition BattlegroundSA.cpp:566
virtual void AddPlayer(Player *player)
Definition Battleground.cpp:1119
BattlegroundScoreMap PlayerScores
Definition Battleground.h:628
LowType GetCounter() const
Definition ObjectGuid.h:145
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:112
Definition BattlegroundSA.h:395

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

◆ AllowDefenseOfTheAncients()

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

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.

839{
840 switch (objectId)
841 {
844 {
845 return false;
846 }
847 [[fallthrough]];
850 {
851 return false;
852 }
853 [[fallthrough]];
854 case BG_SA_LEFT_FLAG:
855 case BG_SA_RIGHT_FLAG:
857 {
858 return false;
859 }
860 break;
861 default:
862 ABORT();
863 break;
864 }
865
866 return true;
867}
@ 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
912{
913 if (GraveyardStatus[i] == Attackers || Source->GetTeamId() != Attackers)
914 return;
915
916 GraveyardStatus[i] = Source->GetTeamId();
917 // Those who are waiting to resurrect at this node are taken to the closest own node's graveyard
918 GuidVector& ghost_list = m_ReviveQueue[BgCreatures[static_cast<uint16>(BG_SA_MAXNPC) + i]];
919 if (!ghost_list.empty())
920 {
921 GraveyardStruct const* ClosestGrave = nullptr;
922 for (ObjectGuid const& guid : ghost_list)
923 {
924 Player* player = ObjectAccessor::FindPlayer(guid);
925 if (!player)
926 continue;
927
928 if (!ClosestGrave) // cache
929 ClosestGrave = GetClosestGraveyard(player);
930
931 if (ClosestGrave)
932 player->TeleportTo(GetMapId(), ClosestGrave->x, ClosestGrave->y, ClosestGrave->z, player->GetOrientation());
933 }
934
935 // xinef: clear resurrect queue for this creature
936 ghost_list.clear();
937 }
938
939 DelCreature(static_cast<uint16>(BG_SA_MAXNPC) + i);
940
941 GraveyardStruct const* sg = sGraveyard->GetGraveyard(BG_SA_GYEntries[i]);
942 if (!sg)
943 {
944 LOG_ERROR("bg.battleground", "BattlegroundSA::CaptureGraveyard: non-existant GY entry: {}", BG_SA_GYEntries[i]);
945 return;
946 }
947
948 AddSpiritGuide(i + static_cast<uint16>(BG_SA_MAXNPC), sg->x, sg->y, sg->z, BG_SA_GYOrientation[i], GraveyardStatus[i]);
949 uint32 npc = 0;
950 uint32 flag = 0;
951
952 switch (i)
953 {
955 flag = BG_SA_LEFT_FLAG;
956 DelObject(flag);
957 AddObject(flag, (BG_SA_ObjEntries[flag] - (Source->GetTeamId() == TEAM_ALLIANCE ? 0 : 1)),
958 BG_SA_ObjSpawnlocs[flag][0], BG_SA_ObjSpawnlocs[flag][1],
959 BG_SA_ObjSpawnlocs[flag][2], BG_SA_ObjSpawnlocs[flag][3], 0, 0, 0, 0, RESPAWN_ONE_DAY);
960
965
966 for (uint8 j = BG_SA_DEMOLISHER_7; j <= BG_SA_DEMOLISHER_8; j++)
967 {
970 BG_SA_NpcSpawnlocs[j][2], BG_SA_NpcSpawnlocs[j][3], 600);
971
972 if (Creature* dem = GetBGCreature(j))
973 dem->SetFaction(BG_SA_Factions[Attackers]);
974 }
975
978 GetBgMap()->DoForAllPlayers([&](Player* player)
979 {
980 if (player->GetTeamId() == TEAM_ALLIANCE)
982 else
984 });
985 break;
987 flag = BG_SA_RIGHT_FLAG;
988 DelObject(flag);
989 AddObject(flag, (BG_SA_ObjEntries[flag] - (Source->GetTeamId() == TEAM_ALLIANCE ? 0 : 1)),
990 BG_SA_ObjSpawnlocs[flag][0], BG_SA_ObjSpawnlocs[flag][1],
991 BG_SA_ObjSpawnlocs[flag][2], BG_SA_ObjSpawnlocs[flag][3], 0, 0, 0, 0, RESPAWN_ONE_DAY);
992
997
998 for (uint8 j = BG_SA_DEMOLISHER_5; j <= BG_SA_DEMOLISHER_6; j++)
999 {
1001 BG_SA_NpcSpawnlocs[j][2], BG_SA_NpcSpawnlocs[j][3], 600);
1002
1003 if (Creature* dem = GetBGCreature(j))
1004 dem->SetFaction(BG_SA_Factions[Attackers]);
1005 }
1006
1009 GetBgMap()->DoForAllPlayers([&](Player* player)
1010 {
1011 if (player->GetTeamId() == TEAM_ALLIANCE)
1013 else
1015 });
1016 break;
1018 flag = BG_SA_CENTRAL_FLAG;
1019 DelObject(flag);
1020 AddObject(flag, (BG_SA_ObjEntries[flag] - (Source->GetTeamId() == TEAM_ALLIANCE ? 0 : 1)),
1021 BG_SA_ObjSpawnlocs[flag][0], BG_SA_ObjSpawnlocs[flag][1],
1022 BG_SA_ObjSpawnlocs[flag][2], BG_SA_ObjSpawnlocs[flag][3], 0, 0, 0, 0, RESPAWN_ONE_DAY);
1023
1026 GetBgMap()->DoForAllPlayers([&](Player* player)
1027 {
1028 if (player->GetTeamId() == TEAM_ALLIANCE)
1030 else
1032 });
1033 break;
1034 default:
1035 ABORT();
1036 break;
1037 }
1038}
@ 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:169
std::uint32_t uint32
Definition Define.h:107
#define sGraveyard
Definition GameGraveyard.h:74
@ LANG_BG_SA_A_GY_SOUTH
Definition Language.h:1276
@ LANG_BG_SA_H_GY_EAST
Definition Language.h:1281
@ LANG_BG_SA_A_GY_WEST
Definition Language.h:1277
@ LANG_BG_SA_A_GY_EAST
Definition Language.h:1278
@ LANG_BG_SA_H_GY_WEST
Definition Language.h:1280
#define LOG_ERROR(filterType__,...)
Definition Log.h:157
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:794
uint32 GetMapId() const
Definition Battleground.h:446
bool AddSpiritGuide(uint32 type, float x, float y, float z, float o, TeamId teamId)
Definition Battleground.cpp:1635
bool DelCreature(uint32 type)
Definition Battleground.cpp:1596
bool AddObject(uint32 type, uint32 entry, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime=0, GOState goState=GO_STATE_READY)
Definition Battleground.cpp:1411
BattlegroundMap * GetBgMap() const
Definition Battleground.h:450
std::map< ObjectGuid, GuidVector > m_ReviveQueue
Definition Battleground.h:635
bool DelObject(uint32 type)
Definition Battleground.cpp:1615
void UpdateWorldState(uint32 variable, uint32 value)
Definition Battleground.cpp:783
Creature * AddCreature(uint32 entry, uint32 type, float x, float y, float z, float o, uint32 respawntime=0, MotionTransport *transport=nullptr)
Definition Battleground.cpp:1533
Creature * GetBGCreature(uint32 type)
Definition Battleground.cpp:1504
Definition Chat.h:37
void PSendSysMessage(std::string_view str, bool escapeCharacters=false)
Definition Chat.cpp:211
Definition Creature.h:43
void DoForAllPlayers(std::function< void(Player *)> exec)
Definition Map.cpp:3008
Definition ObjectGuid.h:118
Definition Player.h:1081
WorldSession * GetSession() const
Definition Player.h:2005
bool TeleportTo(uint32 mapid, float x, float y, float z, float orientation, uint32 options=0, Unit *target=nullptr, bool newInstance=false)
Definition Player.cpp:1338
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 
)
588{
589 if (plr->GetTeamId() == Attackers)
590 return;
591
592 uint32 portal_num = 0;
593 //get it via X
594 switch ((uint32)portal->GetPositionX())
595 {
596 case 1394:
597 portal_num = 0;
598 break;
599 case 1065:
600 portal_num = 1;
601 break;
602 case 1468:
603 portal_num = 2;
604 break;
605 case 1255:
606 portal_num = 3;
607 break;
608 case 1216:
609 portal_num = 4;
610 break;
611 }
612
613 plr->TeleportTo( plr->GetMapId(), SOTADefPortalDest[portal_num][0], SOTADefPortalDest[portal_num][1], SOTADefPortalDest[portal_num][2], SOTADefPortalDest[portal_num][3], TELE_TO_SPELL );
614}
const float SOTADefPortalDest[5][4]
Definition BattlegroundSA.h:385
@ TELE_TO_SPELL
Definition Player.h:830
uint32 GetMapId() const
Definition Position.h:280
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.

712{
713 if (!BgCreatures[0])
714 return;
715
716 for (uint8 i = BG_SA_DEMOLISHER_1; i <= BG_SA_DEMOLISHER_4; i++)
717 if (Creature* dem = GetBGCreature(i))
718 {
719 if (start)
721 else
723 }
724
725 for (uint8 i = BG_SA_GUN_1; i <= BG_SA_GUN_10; i++)
726 if (Creature* gun = GetBGCreature(i))
727 {
728 if (start)
730 else
732 }
733
734 // xinef: enable first gates damaging at start
735 if (!start)
736 {
738 go->SetDestructibleBuildingModifyState(true);
740 go->SetDestructibleBuildingModifyState(true);
741 }
742}
@ 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:251
@ UNIT_FLAG_NOT_SELECTABLE
Definition UnitDefines.h:275
GameObject * GetBGObject(uint32 type)
Definition Battleground.cpp:1495
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.

745{
747 if (!GateStatus[i])
748 return;
749
750 if (GameObject* g = GetBGObject(i))
751 {
752 if (g->GetGOValue()->Building.Health == 0)
753 {
755 if (uint32 uws = GetWorldStateFromGateID(i))
757
758 bool rewardHonor = true;
759 switch (i)
760 {
761 case BG_SA_GREEN_GATE:
763 rewardHonor = false;
764 break;
765 case BG_SA_BLUE_GATE:
767 rewardHonor = false;
768 break;
769 case BG_SA_RED_GATE:
771 rewardHonor = false;
772 break;
775 rewardHonor = false;
776 break;
777 }
778
780
781 if (i < 5)
782 DelObject(i + 9);
783
784 if (player)
785 {
787 if (rewardHonor)
789 }
790 }
791 }
792}
@ 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:880
virtual bool UpdatePlayerScore(Player *player, uint32 type, uint32 value, bool doAddHonor=true)
Definition Battleground.cpp:1350
uint32 GetBonusHonorFromKill(uint32 kills) const
Definition Battleground.cpp:963
uint32 GetEntry() const
Definition Object.h:115

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.

1089{
1090 //honor reward for winning
1091 RewardHonorToTeam(GetBonusHonorFromKill(1), winnerTeamId);
1092
1093 //complete map_end rewards (even if no team wins)
1096
1097 Battleground::EndBattleground(winnerTeamId);
1098}
@ TEAM_HORDE
Definition SharedDefines.h:761
void EndBattleground(PvPTeamId winnerTeamId)
Definition Battleground.cpp:791
void RewardHonorToTeam(uint32 honor, TeamId teamId)
Definition Battleground.cpp:733

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.

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

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.

617{
618 if (!go || !go->GetGOInfo())
619 return;
620
621 if (eventType == go->GetGOInfo()->building.damagedEvent)
622 {
626 if (uws)
628 }
629
630 if (eventType == go->GetGOInfo()->building.destroyedEvent)
631 {
632 GetBgMap()->DoForAllPlayers([&](Player* player)
633 {
634 if (go->GetGOInfo()->building.destroyedEvent == 19837)
636 else
638 });
639
641 switch (i)
642 {
643 case BG_SA_BLUE_GATE:
644 case BG_SA_GREEN_GATE:
645 {
646 if (auto redGate = GetBGObject(BG_SA_RED_GATE))
647 {
648 redGate->SetDestructibleBuildingModifyState(true);
649 }
650 if (auto purpleGate = GetBGObject(BG_SA_PURPLE_GATE))
651 {
652 purpleGate->SetDestructibleBuildingModifyState(true);
653 }
654 break;
655 }
656 case BG_SA_RED_GATE:
658 if (auto yellowGate = GetBGObject(BG_SA_YELLOW_GATE))
659 {
660 yellowGate->SetDestructibleBuildingModifyState(true);
661 }
662 break;
664 if (auto ancientGate = GetBGObject(BG_SA_ANCIENT_GATE))
665 {
666 ancientGate->SetDestructibleBuildingModifyState(true);
667 }
668 break;
669 }
670 }
671
672 if (eventType == go->GetGOInfo()->building.damageEvent)
673 GetBgMap()->DoForAllPlayers([&](Player* player)
674 {
676 });
677}
@ BG_SA_GATE_DAMAGED
Definition BattlegroundSA.h:42
@ LANG_BG_SA_WAS_DESTROYED
Definition Language.h:1269
@ LANG_BG_SA_CHAMBER_BREACHED
Definition Language.h:1275
@ LANG_BG_SA_IS_UNDER_ATTACK
Definition Language.h:1268
GameObjectTemplate const * GetGOInfo() const
Definition GameObject.h:136
uint32 damageEvent
Definition GameObjectData.h:373
struct GameObjectTemplate::@231::@259 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.

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

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.

471{
472 bool const ally_attacks = Attackers == TEAM_ALLIANCE;
473 bool const horde_attacks = Attackers == TEAM_HORDE;
474
475 packet.Worldstates.reserve(25);
482
484
485 packet.Worldstates.emplace_back(WORLD_STATE_BATTLEGROUND_SA_HORDE_ATTACKS, horde_attacks);
486 packet.Worldstates.emplace_back(WORLD_STATE_BATTLEGROUND_SA_ALLIANCE_ATTACKS, ally_attacks);
487
488 //Time will be sent on first update...
490
494
498
502
503 packet.Worldstates.emplace_back(WORLD_STATE_BATTLEGROUND_SA_HORDE_DEFENSE_TOKEN, ally_attacks);
504 packet.Worldstates.emplace_back(WORLD_STATE_BATTLEGROUND_SA_ALLIANCE_DEFENSE_TOKEN, horde_attacks);
505
506 packet.Worldstates.emplace_back(WORLD_STATE_BATTLEGROUND_SA_LEFT_ATTACK_TOKEN_HORDE, horde_attacks);
507 packet.Worldstates.emplace_back(WORLD_STATE_BATTLEGROUND_SA_RIGHT_ATTACK_TOKEN_HORDE, horde_attacks);
510}
@ 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.

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

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

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.

680{
681 if (creature->GetEntry() == NPC_DEMOLISHER_SA)
682 {
685 creature->SetVisible(false);
686 }
687}
@ 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:14284

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

◆ Init()

void BattlegroundSA::Init ( )
overridevirtual

Reimplemented from Battleground.

76{
78
79 TotalTime = 0s;
81 for (uint8 i = 0; i <= 5; i++)
83 ShipsStarted = false;
87 _relicClicked = false;
88}
@ BG_SA_WARMUP
Definition BattlegroundSA.h:32
uint32 urand(uint32 min, uint32 max)
Definition Random.cpp:44
virtual void Init()
Definition Battleground.cpp:1070

References _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.

694{
695 if (!BgCreatures[0])
696 return;
697
698 for (uint8 i = BG_SA_GUN_1; i <= BG_SA_GUN_10; i++)
699 {
700 if (Creature* gun = GetBGCreature(i))
701 gun->SetFaction(BG_SA_Factions[Attackers ? TEAM_ALLIANCE : TEAM_HORDE]);
702 }
703
704 for (uint8 i = BG_SA_DEMOLISHER_1; i <= BG_SA_DEMOLISHER_4; i++)
705 {
706 if (Creature* dem = GetBGCreature(i))
707 dem->SetFaction(BG_SA_Factions[Attackers]);
708 }
709}

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.

317{
318 if (InitSecondRound)
319 {
320 if (UpdateWaitTimer < diff)
321 {
322 if (!SignaledRoundTwo)
323 {
324 SignaledRoundTwo = true;
325 InitSecondRound = false;
327 }
328 }
329 else
330 {
331 UpdateWaitTimer -= diff;
332 return;
333 }
334 }
335 TotalTime += Milliseconds(diff);
336
337 if (Status == BG_SA_WARMUP)
338 {
341 {
342 TotalTime = 0s;
343 ToggleTimer();
347 }
349 StartShips();
350 return;
351 }
352 else if (Status == BG_SA_SECOND_WARMUP)
353 {
354 if (RoundScores[0].time < BG_SA_ROUNDLENGTH)
356 else
358
359 if (TotalTime >= 1min)
360 {
361 GetBgMap()->DoForAllPlayers([&](Player* player)
362 {
364 });
365
366 TotalTime = 0s;
367 ToggleTimer();
371
372 // status was set to STATUS_WAIT_JOIN manually for Preparation, set it back now
374 for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
375 itr->second->RemoveAurasDueToSpell(SPELL_PREPARATION);
376 }
377 if (TotalTime >= 30s)
378 {
380 {
383 }
384 }
385 StartShips();
386 return;
387 }
388 else if (GetStatus() == STATUS_IN_PROGRESS)
389 {
390 if (Status == BG_SA_ROUND_ONE)
391 {
393 {
394 if (_relicClicked)
395 {
398 //Achievement Storm the Beach (1310)
399 for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
400 if (itr->second->GetTeamId() == Attackers)
401 itr->second->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, 65246);
402 }
403 else
404 {
405 // cast this before Attackers variable is switched
406 // cast this spell only upon timer end, no other ability for defenders to win :)
407 for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
408 itr->second->CastSpell(itr->second, SPELL_SA_END_OF_ROUND, true);
409
412 }
413
414 _relicClicked = false;
417 TotalTime = 0s;
418 ToggleTimer();
419
420 GetBgMap()->DoForAllPlayers([&](Player* player)
421 {
423 });
424
425 UpdateWaitTimer = 5000;
426 SignaledRoundTwo = false;
428 InitSecondRound = true;
429 ResetObjs();
430
431 return;
432 }
433 }
434 else if (Status == BG_SA_ROUND_TWO)
435 {
437 {
438 // cast this spell only upon timer end, no other ability for defenders to win :)
439 for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
440 itr->second->CastSpell(itr->second, SPELL_SA_END_OF_ROUND, true);
441
444
445 if (RoundScores[0].time == RoundScores[1].time)
447 else if (RoundScores[0].time < RoundScores[1].time)
448 EndBattleground(RoundScores[0].winner);
449 else
450 EndBattleground(RoundScores[1].winner);
451 return;
452 }
453 }
455 {
456 SendTime();
458 }
459 }
460}
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:143
@ 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:1267
@ LANG_BG_SA_ROUND_ONE_END
Definition Language.h:1270
@ CHAT_MSG_BG_SYSTEM_NEUTRAL
Definition SharedDefines.h:3188
void DemolisherStartState(bool start)
Set selectable or not demolisher, called on battle start, when boats arrive to dock.
Definition BattlegroundSA.cpp:711
void SendTime()
Update timer worldstate.
Definition BattlegroundSA.cpp:830
void UpdateDemolisherSpawns()
Respawn dead demolisher.
Definition BattlegroundSA.cpp:1100
bool ResetObjs()
Called on setup and between the two round -Delete all gameobject / creature -Respawn all gameobject /...
Definition BattlegroundSA.cpp:95
void StartShips()
Called for start ship movement.
Definition BattlegroundSA.cpp:294
static TeamId GetOtherTeamId(TeamId teamId)
Definition Battleground.cpp:1751
void SetStatus(BattlegroundStatus Status)
Definition Battleground.h:374
void SendBroadcastText(uint32 id, ChatMsg msgType, WorldObject const *target=nullptr)
Definition Battleground.cpp:691
void StartTimedAchievement(AchievementCriteriaTimedTypes type, uint32 entry)
Definition Battleground.cpp:1828

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.

522{
523}

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

96{
97 for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
98 SendTransportsRemove(itr->second);
99
102
103 for (uint8 i = 0; i < BG_SA_MAXOBJ; i++)
104 DelObject(i);
105
106 for (uint8 i = 0; i < BG_SA_MAXNPC; i++)
107 DelCreature(i);
108
109 for (uint8 i = BG_SA_MAXNPC; i < static_cast<uint16>(BG_SA_MAXNPC) + BG_SA_MAX_GY; i++)
110 DelCreature(i);
111
112 for (uint8 i = 0; i < 6; ++i)
114
115 for (uint8 i = 0; i < BG_SA_BOAT_ONE; i++)
116 {
118 return false;
119 }
120
121 for (uint8 i = BG_SA_BOAT_ONE; i < BG_SA_SIGIL_1; i++)
122 {
123 uint32 boatid = 0;
124 switch (i)
125 {
126 case BG_SA_BOAT_ONE:
128 break;
129 case BG_SA_BOAT_TWO:
131 break;
132 }
133 if (!AddObject(i, boatid, BG_SA_ObjSpawnlocs[i][0],
134 BG_SA_ObjSpawnlocs[i][1],
135 BG_SA_ObjSpawnlocs[i][2] + (Attackers ? -3.750f : 0),
136 BG_SA_ObjSpawnlocs[i][3], 0, 0, 0, 0, RESPAWN_ONE_DAY))
137 return false;
138 }
139
140 for (uint8 i = BG_SA_SIGIL_1; i < BG_SA_CENTRAL_FLAG; i++)
141 {
142 if (!AddObject(i, BG_SA_ObjEntries[i],
145 0, 0, 0, 0, RESPAWN_ONE_DAY))
146 return false;
147 }
148
149 // MAD props for Kiper for discovering those values - 4 hours of his work.
150 GetBGObject(BG_SA_BOAT_ONE)->SetTransportPathRotation(0.0f, 0.0f, 1.0f, 0.0002f);
151 GetBGObject(BG_SA_BOAT_TWO)->SetTransportPathRotation(0.0f, 0.0f, 1.0f, 0.00001f);
154
155 //Cannons and demolishers - NPCs are spawned
156 //By capturing GYs.
157 for (uint8 i = 0; i < BG_SA_DEMOLISHER_5; i++)
158 {
159 if (!AddCreature(BG_SA_NpcEntries[i], i,
161 BG_SA_NpcSpawnlocs[i][2], BG_SA_NpcSpawnlocs[i][3], 600))
162 return false;
163 }
164
167
168 for (uint8 i = BG_SA_GREEN_GATE; i <= BG_SA_TITAN_RELIC; i++)
169 {
171 if (GameObject* go = GetBGObject(i))
172 {
173 go->setActive(true);
174 go->SetUInt32Value(GAMEOBJECT_FACTION, defF);
175 go->SetDestructibleBuildingModifyState(false);
176 }
177 }
178
181
182 TotalTime = 0s;
183 ShipsStarted = false;
184
185 //Graveyards!
186 for (uint8 i = 0; i < BG_SA_MAX_GY; i++)
187 {
188 GraveyardStruct const* sg = nullptr;
189 sg = sGraveyard->GetGraveyard(BG_SA_GYEntries[i]);
190
191 if (!sg)
192 {
193 LOG_ERROR("bg.battleground", "SOTA: Can't find GY entry {}", BG_SA_GYEntries[i]);
194 return false;
195 }
196
197 if (i == BG_SA_BEACH_GY)
198 {
201 }
202 else
203 {
206 LOG_ERROR("bg.battleground", "SOTA: couldn't spawn GY: {}", i);
207 }
208 }
209
210 //GY capture points
212 {
213 AddObject(i, (BG_SA_ObjEntries[i] - (Attackers == TEAM_ALLIANCE ? 1 : 0)),
216 0, 0, 0, 0, RESPAWN_ONE_DAY);
218 }
219
221 {
225 0, 0, 0, 0, RESPAWN_ONE_DAY);
227 }
228
230
231 for (uint8 i = BG_SA_BOMB; i < BG_SA_MAXOBJ; i++)
232 {
236 0, 0, 0, 0, RESPAWN_ONE_DAY);
238 }
239
240 //Player may enter BEFORE we set up bG - lets update his worldstates anyway...
244
248
250 {
253
258
261 }
262 else
263 {
266
271
274 }
275
282
283 for (int i = BG_SA_BOAT_ONE; i <= BG_SA_BOAT_TWO; i++)
284 for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
285 SendTransportInit(itr->second);
286
287 // set status manually so preparation is cast correctly in 2nd round too
289
291 return true;
292}
@ 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:170
@ STATUS_WAIT_JOIN
Definition Battleground.h:202
@ GAMEOBJECT_FACTION
Definition UpdateFields.h:402
void OverrideGunFaction()
Called on start and between the two round -Update faction of all vehicle.
Definition BattlegroundSA.cpp:693
void TeleportPlayers()
Called between the two round -Teleport all players to good location.
Definition BattlegroundSA.cpp:532
void SendTransportsRemove(Player *player)
Send packet to player for destroy boats (client part)
Definition BattlegroundSA.cpp:1148
void SpawnBGObject(uint32 type, uint32 respawntime, uint32 forceRespawnDelay=0)
Definition Battleground.cpp:1513
void SetTransportPathRotation(float qx, float qy, float qz, float qw)
Definition GameObject.cpp:2232
void Refresh()
Definition GameObject.cpp:920
void SetUInt32Value(uint16 index, uint32 value)
Definition Object.cpp:650

References 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)

1134{
1136 {
1137 UpdateData transData;
1142 WorldPacket packet;
1143 transData.BuildPacket(packet);
1144 player->GetSession()->SendPacket(&packet);
1145 }
1146}
virtual void BuildCreateUpdateBlockForPlayer(UpdateData *data, Player *target)
Definition Object.cpp:189
Definition UpdateData.h:52
bool BuildPacket(WorldPacket &packet)
Definition UpdateData.cpp:48
Definition WorldPacket.h:26
void SendPacket(WorldPacket const *packet)
Send a packet to the client.
Definition WorldSession.cpp:226

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

Referenced by AddPlayer(), and ResetObjs().

◆ SendTransportsRemove()

void BattlegroundSA::SendTransportsRemove ( Player player)
private

Send packet to player for destroy boats (client part)

1149{
1151 {
1152 UpdateData transData;
1157 WorldPacket packet;
1158 transData.BuildPacket(packet);
1159 player->GetSession()->SendPacket(&packet);
1160 }
1161}
void BuildOutOfRangeUpdateBlock(UpdateData *data) const
Definition Object.cpp:269

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

Referenced by ResetObjs().

◆ SetupBattleground()

bool BattlegroundSA::SetupBattleground ( )
overridevirtual

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

Reimplemented from Battleground.

91{
92 return ResetObjs();
93}

References ResetObjs().

◆ StartingEventCloseDoors()

void BattlegroundSA::StartingEventCloseDoors ( )
overridevirtual

Called when battle start.

Reimplemented from Battleground.

463{
464}

◆ StartingEventOpenDoors()

void BattlegroundSA::StartingEventOpenDoors ( )
overridevirtual

Reimplemented from Battleground.

467{
468}

◆ StartShips()

void BattlegroundSA::StartShips ( )
private

Called for start ship movement.

295{
296 if (ShipsStarted)
297 return;
298
301
302 for (int i = BG_SA_BOAT_ONE; i <= BG_SA_BOAT_TWO; i++)
303 {
304 for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
305 {
306 UpdateData data;
307 WorldPacket pkt;
308 GetBGObject(i)->BuildValuesUpdateBlockForPlayer(&data, itr->second);
309 data.BuildPacket(pkt);
310 itr->second->GetSession()->SendPacket(&pkt);
311 }
312 }
313 ShipsStarted = true;
314}
void DoorOpen(uint32 type)
Definition Battleground.cpp:1483
void BuildValuesUpdateBlockForPlayer(UpdateData *data, Player *target)
Definition Object.cpp:257

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.

533{
534 for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
535 {
536 if (Player* player = itr->second)
537 {
538 // should remove spirit of redemption
539 if (player->HasSpiritOfRedemptionAura())
540 player->RemoveAurasByType(SPELL_AURA_MOD_SHAPESHIFT);
541
542 if (!player->IsAlive())
543 {
544 player->ResurrectPlayer(1.0f);
545 player->SpawnCorpseBones();
546 }
547
549 {
550 player->CastSpell(player, SPELL_PREPARATION, true);
551 player->GetMotionMaster()->MovementExpired();
552 }
553
554 player->ResetAllPowers();
555 player->CombatStopWithPets(true);
556
558
559 // xinef: one more time, just to be sure
561 player->GetMotionMaster()->Clear(false);
562 }
563 }
564}
@ 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
567{
568 if (player->GetTeamId() != Attackers)
569 {
570 player->TeleportTo(607, 1209.7f, -65.16f, 70.1f, 0.0f, 0);
571 }
572 else
573 {
574 if (!ShipsStarted)
575 {
576 player->CastSpell(player, 12438, true);//Without this player falls before boat loads...
577 if (urand(0, 1))
578 player->TeleportTo(607, 2682.936f, -830.368f, 15.0f, 2.895f, 0);
579 else
580 player->TeleportTo(607, 2577.003f, 980.261f, 15.0f, 0.807f, 0);
581 }
582 else
583 player->TeleportTo(607, 1600.381f, -106.263f, 8.8745f, 3.78f, 0);
584 }
585}
SpellCastResult CastSpell(SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
Definition Unit.cpp:1178

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

Referenced by AddPlayer(), and TeleportPlayers().

◆ ToggleTimer()

void BattlegroundSA::ToggleTimer ( )
private

◆ UpdateDemolisherSpawns()

void BattlegroundSA::UpdateDemolisherSpawns ( )
private

Respawn dead demolisher.

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

870{
871 if (GameObject* go = GetBGObject(objectId))
872 {
873 if (CanInteractWithObject(objectId))
874 go->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE | GO_FLAG_INTERACT_COND | GO_FLAG_IN_USE);
875 else
876 go->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
877 }
878}
@ GO_FLAG_INTERACT_COND
Definition SharedDefines.h:1605
@ GO_FLAG_NOT_SELECTABLE
Definition SharedDefines.h:1607
@ GO_FLAG_IN_USE
Definition SharedDefines.h:1603

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

Member Data Documentation

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