282 { 0.0f, 5.0f, 9.6f, 3.14f },
283 { -6.0f, -3.0f, 8.6f, 0.0f }
477 door->ResetDoorOrButton();
502 boat->SendUpdateToPlayer(player);
527 if (!player->IsAlive())
529 player->ResurrectPlayer(1.0f);
530 player->SpawnCorpseBones();
533 player->ResetAllPowers();
534 player->CombatStopWithPets(
true);
597 switch (go->GetGoType())
608 uint32 gateId = gate->GameObjectId;
611 if (eventId == go->GetGOInfo()->destructibleBuilding.DamagedEvent)
623 else if (eventId == go->GetGOInfo()->destructibleBuilding.DestroyedEvent)
632 bool rewardHonor =
true;
782 else if (winner ==
HORDE)
794 boat->SendUpdateToPlayer(player);
808 if (!graveyardBanner || !player)
816 switch (graveyardBanner->
GetEntry())
837 auto makeInteractable = [&](
ObjectGuid const& guid) ->
void
857 door->UseDoorOrButton();
1007 if (gate.GameObjectId == entry)
std::unordered_set< ObjectGuid > GuidUnorderedSet
uint32 urand(uint32 min, uint32 max)
#define RegisterBattlegroundMapScript(script_name, mapId)
@ GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING
uint8 constexpr PVP_TEAMS_COUNT
@ CHAT_MSG_BG_SYSTEM_ALLIANCE
@ CHAT_MSG_BG_SYSTEM_HORDE
@ CHAT_MSG_BG_SYSTEM_NEUTRAL
@ GO_STATE_TRANSPORT_STOPPED
@ SPELL_AURA_MOD_SHAPESHIFT
@ SPELL_AURA_SPIRIT_OF_REDEMPTION
StrandOfTheAncientsPvpStats
@ PVP_STAT_GATES_DESTROYED
@ PVP_STAT_DEMOLISHERS_DESTROYED
void AddSC_battleground_strand_of_the_ancients()
StrandOfTheAncientsGraveyard
@ BG_SA_HORDE_GATE_DAMAGED
@ BG_SA_HORDE_GATE_DESTROYED
@ BG_SA_ALLIANCE_GATE_DESTROYED
@ BG_SA_ALLIANCE_GATE_DAMAGED
static constexpr Position spawnPositionOnTransport[]
StrandOfTheAncientsCreatures
@ NPC_ANTIPERSONNEL_CANNON
StrandOfTheAncientsSpawnPositions
StrandOfTheAncientsGameObjects
@ GO_CHAMBER_OF_ANCIENT_RELICS
@ GO_GATE_OF_THE_YELLOW_MOON
@ GO_GATE_OF_THE_BLUE_SAPPHIRE
@ GO_GATE_OF_THE_PURPLE_AMETHYST
@ GO_GATE_OF_THE_GREEN_EMERALD
static constexpr uint32 BG_SA_Factions[2]
@ TEXT_YELLOW_GATE_DESTROYED
@ TEXT_EAST_GRAVEYARD_CAPTURED_A
@ TEXT_PURPLE_GATE_DESTROYED
@ TEXT_PURPLE_GATE_UNDER_ATTACK
@ TEXT_RED_GATE_DESTROYED
@ TEXT_GREEN_GATE_UNDER_ATTACK
@ TEXT_ANCIENT_GATE_UNDER_ATTACK
@ TEXT_SPARKLIGHT_RIGSPARK_SPAWN
@ TEXT_SOUTH_GRAVEYARD_CAPTURED_A
@ TEXT_RED_GATE_UNDER_ATTACK
@ TEXT_ANCIENT_GATE_DESTROYED
@ TEXT_WEST_GRAVEYARD_CAPTURED_A
@ TEXT_GREEN_GATE_DESTROYED
@ TEXT_WEST_GRAVEYARD_CAPTURED_H
@ TEXT_EAST_GRAVEYARD_CAPTURED_H
@ TEXT_YELLOW_GATE_UNDER_ATTACK
@ TEXT_SOUTH_GRAVEYARD_CAPTURED_H
@ TEXT_BLUE_GATE_DESTROYED
@ TEXT_BLUE_GATE_UNDER_ATTACK
@ SOUND_WALL_DESTROYED_HORDE
@ SOUND_WALL_ATTACKED_HORDE
@ SOUND_GRAVEYARD_TAKEN_ALLIANCE
@ SOUND_WALL_DESTROYED_ALLIANCE
@ SOUND_GRAVEYARD_TAKEN_HORDE
@ SOUND_WALL_ATTACKED_ALLIANCE
@ BG_SA_DESTROYED_HORDE_VEHICLES
@ BG_SA_LEFT_ATT_TOKEN_ALL
@ BG_SA_CENTER_GY_ALLIANCE
@ BG_SA_RIGHT_ATT_TOKEN_HRD
@ BG_SA_RIGHT_ATT_TOKEN_ALL
@ BG_SA_ALLIANCE_DEFENCE_TOKEN
@ BG_SA_DESTROYED_ALLIANCE_VEHICLES
@ BG_SA_RIGHT_GY_ALLIANCE
@ BG_SA_HORDE_DEFENCE_TOKEN
@ BG_SA_LEFT_ATT_TOKEN_HRD
StrandOfTheAncientsEvents
@ EVENT_TITAN_RELIC_ACTIVATED
@ EVENT_HORDE_ASSAULT_STARTED
@ EVENT_ALLIANCE_ASSAULT_STARTED
@ BG_SA_TEXT_ROUND_TWO_START_ONE_MINUTE
@ BG_SA_TEXT_ALLIANCE_CAPTURED_TITAN_PORTAL
@ BG_SA_TEXT_ROUND_TWO_START_HALF_MINUTE
@ BG_SA_TEXT_HORDE_CAPTURED_TITAN_PORTAL
@ SPELL_TELEPORT_DEFENDER
@ SPELL_TELEPORT_ATTACKERS
@ SPELL_HORDE_CONTROL_PHASE_SHIFT
@ SPELL_ALLIANCE_CONTROL_PHASE_SHIFT
@ SPELL_CARRYING_SEAFORIUM_CHARGE
ObjectGuid const & GetGUID() const
Battleground * battleground
void TriggerGameEvent(uint32 gameEventId, WorldObject *source=nullptr, WorldObject *target=nullptr) override
BattlegroundMap * battlegroundMap
virtual void OnEnd(Team winner)
virtual void OnUpdate(uint32 diff)
virtual void OnPlayerJoined(Player *player, bool inBattleground)
void UpdateWorldState(int32 worldStateId, int32 value, bool hidden=false) const
void PlaySoundToAll(uint32 SoundID)
void RewardHonorToTeam(uint32 Honor, Team team)
void RemoveAuraOnTeam(uint32 SpellID, Team team)
void SendChatMessage(Creature *source, uint8 textId, WorldObject *target=nullptr)
static TeamId GetTeamIndexByTeamId(Team team)
void SetStatus(BattlegroundStatus Status)
virtual void EndBattleground(Team winner)
void SendBroadcastText(uint32 id, ChatMsg msgType, WorldObject const *target=nullptr)
BattlegroundPlayerMap const & GetPlayers() const
bool UpdatePlayerScore(Player *player, uint32 type, uint32 value, bool doAddHonor=true, Optional< HonorGainSource > source={})
BattlegroundStatus GetStatus() const
Team GetPlayerTeam(ObjectGuid guid) const
uint32 GetBonusHonorFromKill(uint32 kills) const
void UpdatePvpStat(Player *player, uint32 pvpStatId, uint32 value)
void CastSpellOnTeam(uint32 SpellID, Team team)
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
void RemoveFlag(GameObjectFlags flags)
GameobjectTypes GetGoType() const
void UpdateSpawnGroupConditions()
int32 GetWorldStateValue(int32 worldStateId) const
GameObject * GetGameObject(ObjectGuid const &guid)
void UpdateAreaDependentAuras()
Creature * GetCreature(ObjectGuid const &guid)
GameObject * ToGameObject()
bool TeleportTo(uint32 mapid, float x, float y, float z, float orientation, TeleportToOptions options=TELE_TO_NONE, Optional< uint32 > instanceId={}, uint32 teleportSpellId=0)
void SetFaction(uint32 faction) override
void NearTeleportTo(TeleportLocation const &target, bool casting=false)
constexpr void WorldRelocate(WorldLocation const &loc)
Creature * FindNearestCreature(uint32 entry, float range, bool alive=true) const
Player * GetCharmerOrOwnerPlayerOrPlayerItself() const
MovementInfo m_movementInfo
virtual void DoAction(uint32 actionId, WorldObject *source=nullptr, WorldObject *target=nullptr)
virtual uint32 GetData(uint32) const
virtual void OnCreatureCreate(Creature *)
virtual void ProcessEvent(WorldObject *obj, uint32 eventId, WorldObject *invoker)
virtual void OnGameObjectCreate(GameObject *)
TC_GAME_API Player * FindPlayer(ObjectGuid const &)
TC_GAME_API int32 GetValue(int32 worldStateId, Map const *map)
@ ACTION_SOTA_CAPTURE_GRAVEYARD
DefenseLine LineOfDefense
struct MovementInfo::TransportInfo transport
Position GetPositionWithOffset(Position const &offset) const
constexpr void Relocate(float x, float y)
uint32 GetData(uint32 dataId) const override
bool IsGateDestroyed(GateInfo const *gateInfo) const
void OnUpdate(uint32 diff) override
std::array< GuidUnorderedSet, PVP_TEAMS_COUNT > _staticBombGUIDs
void SendTransportInit(Player *player) const
void TeleportToEntrancePosition(Player *player) const
void TitanRelicActivated(Player const *clicker)
void OnUnitKilled(Creature *victim, Unit *killer) override
TeamId _attackers
Id of attacker team.
void OnCreatureCreate(Creature *creature) override
bool _shipsStarted
For know if boats has start moving or not yet.
GuidUnorderedSet _gateGUIDs
BG_SA_Status _status
Statu of battle (Start or not, and what round)
void ProcessEvent(WorldObject *obj, uint32 eventId, WorldObject *invoker) override
void MakeObjectsInteractable(DefenseLine defenseLine) const
void OnPlayerJoined(Player *player, bool inBattleground) override
bool _timerEnabled
used for know we are in timer phase or not (used for worldstate update)
std::array< std::array< ObjectGuid, 2 >, PVP_TEAMS_COUNT > _boatGUIDs
bool _initSecondRound
for know if second round has been init
void CaptureGraveyard(StrandOfTheAncientsGraveyard graveyard, TeamId teamId)
void TeleportPlayers() const
void DoAction(uint32 actionId, WorldObject *source, WorldObject *target) override
static GateInfo const * GetGate(uint32 entry)
uint32 _totalTime
Totale elapsed time of current round.
void HandleCaptureGraveyardAction(GameObject const *graveyardBanner, Player const *player)
void OnGameObjectCreate(GameObject *gameobject) override
Creature * FindKanrethad() const
uint32 _endRoundTimer
Max time of round.
bool _signaledRoundTwo
for know if warning about second round start has been sent
ObjectGuid _titanRelicGUID
ObjectGuid _collisionDoorGUID
GuidUnorderedSet _dynamicBombGUIDs
bool _signaledRoundTwoHalfMin
for know if warning about second round start has been sent
ObjectGuid _graveyardWest
ObjectGuid _graveyardCentral
void OnEnd(Team winner) override
ObjectGuid _graveyardEast
std::array< BG_SA_RoundScore, 2 > _roundScores
Score of each round.
uint32 _updateWaitTimer
5secs before starting the 1min countdown for second round
battleground_strand_of_the_ancients(BattlegroundMap *map)
ObjectGuid _kanrethadGUID