86 for (
uint8 i = 0; i < 2; i++)
88 for (
uint8 j = 0; j < 9; j++)
212 TC_LOG_DEBUG(
"bg.battleground",
"BG_AV Quest {} completed", questid);
226 TC_LOG_DEBUG(
"bg.battleground",
"BG_AV Quest {} completed (need to implement some events here", questid);
233 TC_LOG_DEBUG(
"bg.battleground",
"BG_AV Quest {} completed (need to implement some events here", questid);
240 TC_LOG_DEBUG(
"bg.battleground",
"BG_AV Quest {} completed (need to implement some events here", questid);
250 TC_LOG_DEBUG(
"bg.battleground",
"BG_AV Quest {} completed (need to implement some events here", questid);
258 TC_LOG_DEBUG(
"bg.battleground",
"BG_AV Quest {} completed (need to implement some events here", questid);
260 TC_LOG_DEBUG(
"bg.battleground",
"BG_AV Quest {} completed (need to implement some events here - ground assault ready", questid);
268 TC_LOG_DEBUG(
"bg.battleground",
"BG_AV Quest {} completed (need to implement some events here", questid);
270 TC_LOG_DEBUG(
"bg.battleground",
"BG_AV Quest {} completed (need to implement some events here - ground assault ready", questid);
278 TC_LOG_DEBUG(
"bg.battleground",
"BG_AV Quest {} completed (need to implement some events here", questid);
280 TC_LOG_DEBUG(
"bg.battleground",
"BG_AV Quest {} completed (need to implement some events here - rider assault ready", questid);
288 TC_LOG_DEBUG(
"bg.battleground",
"BG_AV Quest {} completed (need to implement some events here", questid);
290 TC_LOG_DEBUG(
"bg.battleground",
"BG_AV Quest {} completed (need to implement some events here - rider assault ready", questid);
294 TC_LOG_DEBUG(
"bg.battleground",
"BG_AV Quest {} completed but is not interesting at all", questid);
382 TC_LOG_DEBUG(
"bg.battleground",
"BG_AV: start spawning mine stuff");
394 gameObject->UseDoorOrButton();
396 gameObject->DespawnOrUnsummon(delay);
405 std::array<uint8, PVP_TEAMS_COUNT> kills = { 0, 0 };
406 std::array<uint8, PVP_TEAMS_COUNT> rep = { 0, 0 };
446 TC_LOG_ERROR(
"bg.battleground",
"bg_AV no player at remove");
472 herald->AI()->Talk(owner ==
ALLIANCE ? nodeInfo->TextIds.AllianceCapture : nodeInfo->TextIds.HordeCapture);
485 if (target && source && source->
IsPlayer())
489 TC_LOG_ERROR(
"bg.battleground",
"BattlegroundAV::DoAction: {}. Unhandled action.", actionId);
501 if (mineInfo.
Owner == team && !initial)
504 mineInfo.
Owner = team;
510 std::string stringId = team ==
ALLIANCE ?
"bg_av_herald_mine_alliance" :
"bg_av_herald_mine_horde";
513 herald->AI()->Talk(textId);
597 TC_LOG_ERROR(
"bg.battleground",
"BattlegroundAV: ERROR! GetPlace got a wrong object :(");
605 if (!player || !target)
688 TC_LOG_DEBUG(
"bg.battleground",
"player defends point object: {} node: {}",
object, node);
689 if (
_nodes[node].PrevOwner != team)
691 TC_LOG_ERROR(
"bg.battleground",
"BG_AV: player defends point which doesn't belong to his team {}", node);
700 std::string stringId;
703 stringId = nodeInfo->StringIds.AllianceOrDefend;
705 stringId = team ==
ALLIANCE ? nodeInfo->StringIds.AllianceOrDefend : nodeInfo->StringIds.HordeOrDestroy;
708 herald->AI()->Talk(team ==
ALLIANCE ? nodeInfo->TextIds.AllianceCapture : nodeInfo->TextIds.HordeCapture);
722 TC_LOG_DEBUG(
"bg.battleground",
"bg_av: player assaults point object {} node {}",
object, node);
723 if (owner == team || team ==
_nodes[node].TotalOwner)
731 std::string stringId;
733 stringId = nodeInfo->StringIds.HordeOrDestroy;
735 stringId = team ==
ALLIANCE ? nodeInfo->StringIds.AllianceOrDefend : nodeInfo->StringIds.HordeOrDestroy;
738 herald->AI()->Talk(team ==
ALLIANCE ? nodeInfo->TextIds.AllianceAttack : nodeInfo->TextIds.HordeAttack);
757 if (nodeInfo->WorldStateIds.Owner)
787 _nodes[node].Owner = team;
802 _nodes[node].TotalOwner = team;
803 _nodes[node].Owner = team;
804 _nodes[node].PrevOwner = 0;
808 _nodes[node].Tower = tower;
814 _nodes[node].Owner = team;
824 if (allianceScore > hordeScore)
826 else if (hordeScore > allianceScore)
894 if (creature->HasStringId(stringId))
AlteracValleyResourceLoss
AlteracValleyReputationGains
@ REP_GAIN_SURVIVING_TOWER
@ REP_GAIN_SURVIVING_CAPTAIN
@ PVP_STAT_GRAVEYARDS_DEFENDED
@ PVP_STAT_GRAVEYARDS_ASSAULTED
@ PVP_STAT_TOWERS_ASSAULTED
@ PVP_STAT_SECONDARY_OBJECTIVES
@ PVP_STAT_TOWERS_DEFENDED
AlteracValleyHonorKillBonus
@ HONOR_KILL_BONUS_SURVIVING_TOWER
@ HONOR_KILL_BONUS_SURVIVING_CAPTAIN
@ HONOR_KILL_BONUS_CAPTAIN
@ HONOR_KILL_BONUS_DESTROY_TOWER
@ SPELL_COMPLETE_ALTERAC_VALLEY_QUEST
@ FACTION_STORMPIKE_GUARD
@ BG_AV_OBJECTID_FROSTWOLF_HUT_HORDE_CONTESTED
@ BG_AV_OBJECTID_TOWER_POINT_CONTROLLED_TOWER_BANNER
@ BG_AV_OBJECTID_ICEBLOOD_TOWER_CONTESTED_TOWER_BANNER
@ BG_AV_OBJECTID_ICEWING_BUNKER_CONTROLLED_BANNER
@ BG_AV_OBJECTID_STORMPIKE_HORDE_CONTESTED
@ BG_AV_OBJECTID_SNOWFALL_HORDE_CONTROLLED
@ BG_AV_OBJECTID_STONEHEARTH_BUNKER_CONTESTED_TOWER_BANNER
@ BG_AV_OBJECTID_ICEBLOOD_TOWER_CONTROLLED_BANNER
@ BG_AV_OBJECTID_STONEHEARTH_ALLIANCE_CONTROLLED
@ BG_AV_OBJECTID_SNOWFALL_HORDE_CONTESTED
@ BG_AV_OBJECTID_TOWER_POINT_CONTESTED_TOWER_BANNER
@ BG_AV_OBJECTID_WEST_TOWER_CONTROLLED_TOWER_BANNER
@ BG_AV_OBJECTID_TOWER_POINT_CONTROLLED_BANNER
@ BG_AV_OBJECTID_ICEWING_BUNKER_CONTROLLED_TOWER_BANNER
@ BG_AV_OBJECTID_ICEWING_BUNKER_CONTESTED_TOWER_BANNER
@ BG_AV_OBJECTID_SNOWFALL_ALLIANCE_CONTESTED
@ BG_AV_OBJECTID_ICEWING_BUNKER_CONTESTED_BANNER
@ BG_AV_OBJECTID_SOUTH_BUNKER_CONTROLLED_BANNER
@ BG_AV_OBJECTID_FROSTWOLF_HORDE_CONTESTED
@ BG_AV_OBJECTID_SOUTH_BUNKER_CONTROLLED_TOWER_BANNER
@ BG_AV_OBJECTID_FROSTWOLF_ALLIANCE_CONTROLLED
@ BG_AV_OBJECTID_ICEBLOOD_HORDE_CONTESTED
@ BG_AV_OBJECTID_ICEBLOOD_TOWER_CONTESTED_BANNER
@ BG_AV_OBJECTID_NORTH_BUNKER_CONTROLLED_BANNER
@ BG_AV_OBJECTID_ICEBLOOD_TOWER_CONTROLLED_TOWER_BANNER
@ BG_AV_OBJECTID_SNOWFALL_NEUTRAL
@ BG_AV_OBJECTID_NORTH_BUNKER_CONTESTED_TOWER_BANNER
@ BG_AV_OBJECTID_STORMPIKE_HORDE_CONTROLLED
@ BG_AV_OBJECTID_AID_STATION_HORDE_CONTESTED
@ BG_AV_OBJECTID_ICEBLOOD_HORDE_CONTROLLED
@ BG_AV_OBJECTID_NORTH_BUNKER_CONTESTED_BANNER
@ BG_AV_OBJECTID_STONEHEARTH_BUNKER_CONTROLLED_BANNER
@ BG_AV_OBJECTID_AID_STATION_ALLIANCE_CONTROLLED
@ BG_AV_OBJECTID_STONEHEARTH_HORDE_CONTESTED
@ BG_AV_OBJECTID_STORMPIKE_ALLIANCE_CONTROLLED
@ BG_AV_OBJECTID_FROSTWOLF_HUT_HORDE_CONTROLLED
@ BG_AV_OBJECTID_STONEHEARTH_BUNKER_CONTESTED_BANNER
@ BG_AV_OBJECTID_AID_STATION_HORDE_CONTROLLED
@ BG_AV_OBJECTID_EAST_TOWER_CONTROLLED_BANNER
@ BG_AV_OBJECTID_EAST_TOWER_CONTROLLED_TOWER_BANNER
@ BG_AV_OBJECTID_WEST_TOWER_CONTESTED_TOWER_BANNER
@ BG_AV_OBJECTID_SNOWFALL_ALLIANCE_CONTROLLED
@ BG_AV_OBJECTID_NORTH_BUNKER_CONTROLLED_TOWER_BANNER
@ BG_AV_OBJECTID_STONEHEARTH_BUNKER_CONTROLLED_TOWER_BANNER
@ BG_AV_OBJECTID_FROSTWOLF_HUT_ALLIANCE_CONTROLLED
@ BG_AV_OBJECTID_SOUTH_BUNKER_CONTESTED_BANNER
@ BG_AV_OBJECTID_EAST_TOWER_CONTESTED_TOWER_BANNER
@ BG_AV_OBJECTID_WEST_TOWER_CONTROLLED_BANNER
@ BG_AV_OBJECTID_WEST_TOWER_CONTESTED_BANNER
@ BG_AV_OBJECTID_STONEHEARTH_HORDE_CONTROLLED
@ BG_AV_OBJECTID_SOUTH_BUNKER_CONTESTED_TOWER_BANNER
@ BG_AV_OBJECTID_ICEBLOOD_ALLIANCE_CONTESTED
@ BG_AV_OBJECTID_STONEHEARTH_ALLIANCE_CONTESTED
@ BG_AV_OBJECTID_FROSTWOLF_HUT_ALLIANCE_CONTESTED
@ BG_AV_OBJECTID_EAST_TOWER_CONTESTED_BANNER
@ BG_AV_OBJECTID_STORMPIKE_ALLIANCE_CONTESTED
@ BG_AV_OBJECTID_AID_STATION_ALLIANCE_CONTESTED
@ BG_AV_OBJECTID_FROSTWOLF_HORDE_CONTROLLED
@ BG_AV_OBJECTID_TOWER_POINT_CONTESTED_BANNER
@ BG_AV_OBJECTID_FROSTWOLF_ALLIANCE_CONTESTED
@ BG_AV_OBJECTID_ICEBLOOD_ALLIANCE_CONTROLLED
@ BG_AV_NODES_ICEWING_BUNKER
@ BG_AV_NODES_TOWER_POINT
@ BG_AV_NODES_SNOWFALL_GRAVE
@ BG_AV_NODES_FIRSTAID_STATION
@ BG_AV_NODES_FROSTWOLF_GRAVE
@ BG_AV_NODES_STORMPIKE_GRAVE
@ BG_AV_NODES_STONEHEART_GRAVE
@ BG_AV_NODES_ICEBLOOD_TOWER
@ BG_AV_NODES_DUNBALDAR_NORTH
@ BG_AV_NODES_STONEHEART_BUNKER
@ BG_AV_NODES_FROSTWOLF_WTOWER
@ BG_AV_NODES_FROSTWOLF_ETOWER
@ BG_AV_NODES_DUNBALDAR_SOUTH
@ BG_AV_NODES_FROSTWOLF_HUT
@ BG_AV_NODES_ICEBLOOD_GRAVE
constexpr Seconds BG_AV_MINE_RESOURCE_TIMER
@ DATA_DEFENDER_TIER_HORDE
@ DATA_DEFENDER_TIER_ALLIANCE
@ ACTION_AV_INTERACT_CAPTURABLE_OBJECT
@ ACTION_AV_CAPTURE_CAPTURABLE_OBJECT
@ AV_EXPLOIT_TELEPORT_LOCATION_ALLIANCE
@ AV_EXPLOIT_TELEPORT_LOCATION_HORDE
@ TEXT_FROSTWOLF_GENERAL_DEAD
@ TEXT_STORMPIKE_GENERAL_DEAD
@ TEXT_COLDTOOTH_MINE_HORDE_TAKEN
@ TEXT_IRONDEEP_MINE_ALLIANCE_TAKEN
@ TEXT_IRONDEEP_MINE_HORDE_TAKEN
@ TEXT_COLDTOOTH_MINE_ALLIANCE_TAKEN
@ BG_AV_CREATURE_MASHA_SWIFTCUT
@ BG_AV_CREATURE_AGI_RUMBLESTOMP
@ BG_AV_CREATURE_UMI_THORSON
@ BG_AV_CREATURE_GALVANGAR
@ BG_AV_CREATURE_TASKMASTER_SNIVVLE
@ BG_AV_CREATURE_DREKTHAR
@ AV_WS_COLDTOOTH_MINE_KOBOLD_CONTROLLED
@ AV_WS_HORDE_REINFORCEMENTS
@ AV_WS_IRONDEEP_MINE_OWNER
@ AV_WS_IRONDEEP_MINE_HORDE_CONTROLLED
@ AV_WS_IRONDEEP_MINE_TROGG_CONTROLLED
@ AV_WS_COLDTOOTH_MINE_HORDE_CONTROLLED
@ AV_WS_IRONDEEP_MINE_ALLIANCE_CONTROLLED
@ AV_WS_ALLIANCE_REINFORCEMENTS
@ AV_WS_COLDTOOTH_MINE_ALLIANCE_CONTROLLED
@ AV_WS_LOKHOLAR_STORMPIKE_SOLDIERS_BLOOD_COUNT
@ AV_WS_SNOWFALL_GRAVEYARD_UNCONTROLLED
@ AV_WS_SHOW_HORDE_REINFORCEMENTS
@ AV_WS_SHOW_ALLIANCE_REINFORCEMENTS
@ AV_WS_COLDTOOTH_MINE_OWNER
@ AV_WS_IVUS_STORM_CRYSTAL_COUNT
@ BG_AV_DEFENDER_TIER_DEFENDER
@ BG_AV_DEFENDER_TIER_VETERAN
@ BG_AV_DEFENDER_TIER_SEASONED
@ BG_AV_DEFENDER_TIER_CHAMPION
constexpr uint32 BG_AV_EVENT_START_BATTLE
constexpr uint32 BG_AV_SCORE_INITIAL_POINTS
@ BG_AV_TEXT_ALLIANCE_NEAR_LOSE
@ BG_AV_TEXT_START_HALF_MINUTE
@ BG_AV_TEXT_START_ONE_MINUTE
@ BG_AV_TEXT_HORDE_NEAR_LOSE
@ BG_AV_TEXT_BATTLE_HAS_BEGUN
@ BG_STARTING_EVENT_THIRD
@ BG_STARTING_EVENT_SECOND
@ BG_STARTING_EVENT_FOURTH
std::chrono::seconds Seconds
Seconds shorthand typedef.
#define TC_LOG_DEBUG(filterType__,...)
#define TC_LOG_ERROR(filterType__,...)
uint32 urand(uint32 min, uint32 max)
@ CHAT_MSG_BG_SYSTEM_ALLIANCE
@ CHAT_MSG_BG_SYSTEM_HORDE
StaticNodeInfo const * GetStaticNodeInfo(BG_AV_Nodes node) const
void AssaultNode(BG_AV_Nodes node, Team team)
void InitNode(BG_AV_Nodes node, Team team, bool tower)
std::array< BG_AV_NodeInfo, BG_AV_NODES_MAX > _nodes
void DoAction(uint32 actionId, WorldObject *source=nullptr, WorldObject *target=nullptr) override
void StartingEventOpenDoors() override
void DefendNode(BG_AV_Nodes node, Team team)
void EventPlayerAssaultsPoint(Player *player, uint32 object)
bool IsCaptainAlive(TeamId teamId) const
bool SetupBattleground() override
std::array< AlteracValleyMineInfo, 2 > _mineInfo
void EndBattleground(Team winner) override
std::array< bool, PVP_TEAMS_COUNT > _isInformedNearVictory
uint32 m_Team_QuestStatus[PVP_TEAMS_COUNT][9]
Creature * FindHerald(std::string_view stringId) const
Team GetPrematureWinner() override
BG_AV_Nodes GetNodeThroughObject(uint32 object)
void PostUpdateImpl(uint32 diff) override
Post-update hook.
uint32 GetData(uint32 dataId) const override
void UpdateScore(Team team, int16 points)
void SendMineWorldStates(AlteracValleyMine mine)
void HandleQuestComplete(uint32 questid, Player *player) override
GuidUnorderedSet _doorGUIDs
void EventPlayerDestroyedPoint(GameObject *gameobject)
GuidUnorderedSet _heraldGUIDs
void HandleKillUnit(Creature *unit, Unit *killer) override
void HandleKillPlayer(Player *player, Player *killer) override
std::array< int32, PVP_TEAMS_COUNT > _teamResources
void OnCreatureCreate(Creature *creature) override
void RemovePlayer(Player *player, ObjectGuid guid, uint32 team) override
void OnGameObjectCreate(GameObject *gameObject) override
TimeTracker _mineResourceTimer
void ChangeMineOwner(AlteracValleyMine mine, Team team, bool initial=false)
void UpdateNodeWorldState(BG_AV_Nodes node)
std::array< TimeTracker, PVP_TEAMS_COUNT > _captainBuffTimer
WorldSafeLocsEntry const * GetExploitTeleportLocation(Team team) override
void HandleInteractCapturableObject(Player *player, GameObject *target)
bool IsTower(BG_AV_Nodes node) const
ObjectGuid _galvangarGUID
void DestroyNode(BG_AV_Nodes node)
void EventPlayerDefendsPoint(Player *player, uint32 object)
BattlegroundAV(BattlegroundTemplate const *battlegroundTemplate)
virtual Team GetPrematureWinner()
virtual void HandleKillPlayer(Player *player, Player *killer)
void PlaySoundToAll(uint32 SoundID)
void RewardHonorToTeam(uint32 Honor, Team team)
BattlegroundMap * GetBgMap() const
void TriggerGameEvent(uint32 gameEventId, WorldObject *source=nullptr, WorldObject *target=nullptr) override
static TeamId GetTeamIndexByTeamId(Team team)
void UpdateWorldState(int32 worldStateId, int32 value, bool hidden=false)
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
Team GetPlayerTeam(ObjectGuid guid) const
uint32 GetBonusHonorFromKill(uint32 kills) const
void UpdatePvpStat(Player *player, uint32 pvpStatId, uint32 value)
void CastSpellOnTeam(uint32 SpellID, Team team)
uint32 StartMessageIds[BG_STARTING_EVENT_COUNT]
void UpdateSpawnGroupConditions()
int32 GetWorldStateValue(int32 worldStateId) const
static GameObject * ToGameObject(Object *o)
static ObjectGuid GetGUID(Object const *o)
static Player * ToPlayer(Object *o)
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Player * GetCharmerOrOwnerPlayerOrPlayerItself() const
virtual uint32 GetData(uint32) const
TC_GAME_API GameObject * GetGameObject(WorldObject const &u, ObjectGuid const &guid)
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
StaticMineInfo StaticInfo
int32 WorldStateHordeControlled
int32 WorldStateNeutralControlled
int32 WorldStateAllianceControlled