204 gameObject->UseDoorOrButton();
205 gameObject->DespawnOrUnsummon(3s);
230 template <std::invocable<Player*> Action>
265 player->
CastSpell(player, spellId,
true);
266 aura = player->
GetAura(spellId);
282 return flag->GetFlagState();
290 return flag->GetFlagCarrierGUID();
301 if (trigger->GetInsideUnits().contains(player->
GetGUID()))
309 auto transformValueToOtherTeamControlWorldState = [](
FlagState state)
445 player->
CastSpell(player, recentlyDroppedSpellId,
true);
595 std::array<ObjectGuid, PVP_TEAMS_COUNT>
_flags;
@ SPELL_RECENTLY_DROPPED_ALLIANCE_FLAG
@ SPELL_RECENTLY_DROPPED_HORDE_FLAG
std::chrono::seconds Seconds
Seconds shorthand typedef.
std::set< ObjectGuid > GuidSet
#define RegisterBattlegroundMapScript(script_name, mapId)
constexpr TeamId GetOtherTeam(TeamId team)
@ CHAT_MSG_BG_SYSTEM_ALLIANCE
@ CHAT_MSG_BG_SYSTEM_HORDE
@ CHAT_MSG_BG_SYSTEM_NEUTRAL
constexpr std::underlying_type< E >::type AsUnderlyingType(E enumValue)
void AddSC_battleground_warsong_gulch()
bool IsStaticSpawn() const
void SetStackAmount(uint8 num)
ObjectGuid const & GetGUID() const
static bool IsBGWeekend(BattlegroundTypeId bgTypeId)
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 Team GetPrematureWinner()
void UpdateWorldState(int32 worldStateId, int32 value, bool hidden=false) const
void PlaySoundToAll(uint32 SoundID)
uint32 GetTeamScore(TeamId teamId) const
void RewardHonorToTeam(uint32 Honor, Team team)
BattlegroundTypeId GetTypeID() const
static TeamId GetTeamIndexByTeamId(Team team)
virtual void EndBattleground(Team winner)
void SendBroadcastText(uint32 id, ChatMsg msgType, WorldObject const *target=nullptr)
void RewardReputationToTeam(uint32 faction_id, uint32 Reputation, Team team)
BattlegroundStatus GetStatus() const
void AddPoint(Team team, uint32 points=1)
Team GetPlayerTeam(ObjectGuid guid) const
uint32 GetBonusHonorFromKill(uint32 kills) const
void UpdatePvpStat(Player *player, uint32 pvpStatId, uint32 value)
uint32 GetElapsedTime() const
time_t GetFlagTakenFromBaseTime() const
GameObject * GetGameObject(ObjectGuid const &guid)
AreaTrigger * GetAreaTrigger(ObjectGuid const &guid)
static ObjectGuid const Empty
void StartCriteria(CriteriaStartEvent startEvent, uint32 entry, Milliseconds timeLost=Milliseconds::zero())
Aura * GetAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
void RemoveAurasWithInterruptFlags(InterruptFlags flag, SpellInfo const *source=nullptr)
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
virtual void OnCaptureFlag(AreaTrigger *areaTrigger, Player *player)
virtual void OnFlagStateChange(GameObject *flagInBase, FlagState oldValue, FlagState newValue, Player *player)
virtual void OnAreaTriggerCreate(AreaTrigger *areaTrigger)
virtual void OnGameObjectCreate(GameObject *)
SystemTimePoint GetSystemTime()
Current chrono system_clock time point.
TC_GAME_API Player * FindPlayer(ObjectGuid const &)
void OnEnd(Team winner) override
uint32 _reputationCapture
@ FLAG_BRUTAL_ASSAULT_STACK_COUNT
static constexpr std::array< std::array< uint32, 3 >, 2 > HONOR_REWARDS
@ AT_CAPTURE_POINT_ALLIANCE
@ OBJECT_ALLIANCE_FLAG_IN_BASE
@ OBJECT_HORDE_FLAG_IN_BASE
@ OBJECT_COLLISION_PC_SIZE
void OnUpdate(uint32 diff) override
Team GetPrematureWinner() override
@ SPELL_SILVERWING_FLAG_DROPPED
@ SPELL_CAPTURED_ALLIANCE_COSMETIC_FX
@ SPELL_WARSONG_FLAG_DROPPED
@ SPELL_CAPTURED_HORDE_COSMETIC_FX
TimeTracker _flagAssaultTimer
void DoForFlagKeepers(Action const &action) const
void HandleFlagRoomCapturePoint()
Team _lastFlagCaptureTeam
void SetLastFlagCapture(Team team)
ObjectGuid const & GetFlagCarrierGUID(TeamId team) const
void OnGameObjectCreate(GameObject *gameObject) override
void ResetAssaultDebuff()
void ApplyAssaultDebuffToPlayer(Player *player) const
void OnFlagStateChange(GameObject *flagInBase, FlagState oldValue, FlagState newValue, Player *player) override
std::array< ObjectGuid, PVP_TEAMS_COUNT > _capturePointAreaTriggers
@ TEXT_HORDE_FLAG_DROPPED
@ TEXT_HORDE_FLAG_PICKED_UP
@ TEXT_CAPTURED_HORDE_FLAG
@ TEXT_ALLIANCE_FLAG_DROPPED
@ TEXT_CAPTURED_ALLIANCE_FLAG
@ TEXT_ALLIANCE_FLAG_PICKED_UP
@ TEXT_ALLIANCE_FLAG_RETURNED
@ TEXT_HORDE_FLAG_RETURNED
FlagState GetFlagState(TeamId team) const
void UpdateFlagState(uint32 team, FlagState value) const
void OnAreaTriggerCreate(AreaTrigger *areaTrigger) override
@ SOUND_HORDE_FLAG_PICKED_UP
@ SOUND_FLAG_CAPTURED_HORDE
@ SOUND_ALLIANCE_FLAG_PICKED_UP
@ SOUND_FLAG_CAPTURED_ALLIANCE
void OnCaptureFlag(AreaTrigger *areaTrigger, Player *player) override
void RemoveAssaultDebuffFromPlayer(Player *player) const
void UpdateTeamScore(TeamId team) const
static constexpr Seconds FLAG_ASSAULT_TIMER
battleground_warsong_gulch(BattlegroundMap *map)
bool CanCaptureFlag(AreaTrigger *areaTrigger, Player *player) override
@ WORLD_STATE_FLAG_STATE_NEUTRAL
@ WORLD_STATE_FLAG_STATE_ALLIANCE
@ WORLD_STATE_STATE_TIMER
@ WORLD_STATE_FLAG_CONTROL_ALLIANCE
@ WORLD_STATE_FLAG_STATE_HORDE
@ WORLD_STATE_FLAG_CAPTURES_MAX
@ WORLD_STATE_STATE_TIMER_ACTIVE
@ WORLD_STATE_HORDE_FLAG_COUNT_PICKED_UP
@ WORLD_STATE_ALLIANCE_FLAG_COUNT_PICKED_UP
@ WORLD_STATE_FLAG_CAPTURES_MAX_NEW
@ WORLD_STATE_FLAG_CONTROL_HORDE
@ WORLD_STATE_FLAG_CAPTURES_HORDE
@ WORLD_STATE_FLAG_CAPTURES_ALLIANCE
std::array< ObjectGuid, PVP_TEAMS_COUNT > _flags