TrinityCore
BattlegroundAV.h
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef __BATTLEGROUNDAV_H
19#define __BATTLEGROUNDAV_H
20
21#include "Battleground.h"
22#include "BattlegroundScore.h"
23#include "Object.h"
24#include "QuaternionData.h"
25#include "Timer.h"
26
28constexpr uint32 BG_AV_EVENT_START_BATTLE = 9166; // Achievement: The Alterac Blitz
29
31{
35};
36
38{
42
45};
46
48{
49
50/*
518212:
52 alliance grave assault
53 alliance tower assault
54 drek "mlanzenabschaum! In meiner Burg?! Toetet sie all" - nicht immer der sound
558333:
56 galv "sterbt fuer euch ist kein platz hier"
57
588332:
59 bal "Verschwinde, dreckiger Abschaum! Die Allianz wird im Alteractal "
608174:
61 horde tower assault
62 horde grave assault
63 van "es Sturmlanzenklans, euer General wird angegriffen! Ich fordere Unterst"
648173:
65 ally grave capture/defend
66 tower destroy
67 mine capture
68 ally wins
698192:
70 ally tower destroy(only iceblood - found a bug^^)
71 ally tower defend
72 horde tower defend
738213
74horde:
75 grave defend/capture
76 tower destroy
77 mine capture
78 horde wins
79 */
80
82
83 AV_SOUND_ALLIANCE_ASSAULTS = 8212, //tower, grave + enemy boss if someone tries to attack him
85 AV_SOUND_ALLIANCE_GOOD = 8173, //if something good happens for the team: wins(maybe only through killing the boss), captures mine or grave, destroys tower and defends grave
88
89 AV_SOUND_ALLIANCE_CAPTAIN = 8232, //gets called when someone attacks them and at the beginning after 5min+rand(x)*10sec (maybe buff)
91};
92
94
96{
97 North = 0,
98 South
99};
100
102{
114
124
126{
127 //cause the mangos-system is a bit different, we don't use the right go-ids for every node.. if we want to be 100% like another big server, we must take one object for every node
128 //snowfall 4flags as eyecandy 179424 (alliance neutral)
129 //Banners - stolen from battleground_AB.h ;-)
130 BG_AV_OBJECTID_BANNER_A = 178925, // can only be used by horde
131 BG_AV_OBJECTID_BANNER_H = 178943, // can only be used by alliance
132 BG_AV_OBJECTID_BANNER_CONT_A = 178940, // can only be used by horde
133 BG_AV_OBJECTID_BANNER_CONT_H = 179435, // can only be used by alliance
134
140
141 //snowfall eyecandy banner:
146
147 //banners on top of towers:
148 BG_AV_OBJECTID_TOWER_BANNER_A = 178927, //[PH] Alliance A1 Tower Banner BIG
149 BG_AV_OBJECTID_TOWER_BANNER_H = 178955, //[PH] Horde H1 Tower Banner BIG
150 BG_AV_OBJECTID_TOWER_BANNER_PA = 179446, //[PH] Alliance H1 Tower Pre-Banner BIG
151 BG_AV_OBJECTID_TOWER_BANNER_PH = 179436, //[PH] Horde A1 Tower Pre-Banner BIG
152
153 //Auras
160
163
164 //mine supplies
167
170
171 // Towers
176
181
186
191
196
201
206
211
212 // Graveyards
217
222
227
233
238
243
249
251{
267
268 BG_AV_NODES_MAX = 15
270
272{
274 AV_BUFF_A_CAPTAIN = 23693, //the buff which the alliance captain does
275 AV_BUFF_H_CAPTAIN = 22751 //the buff which the horde captain does
278{
284
286{
292
293// Graves
294 // Alliance
295 //Stormpike first aid station
300 //Stormpike Graveyard
305 //Stoneheart Grave
310 //Neutral
311 //Snowfall Grave
317 //Horde
318 //Iceblood grave
323 //Frostwolf Grave
328 //Frostwolf Hut
333
334//Towers
335 //Alliance
336 //Dunbaldar South Bunker
342 //Dunbaldar North Bunker
348 //Icewing Bunker
354 //Stoneheart Bunker
360 //Horde
361 //Iceblood Tower
367 //Tower Point
373 //Frostwolf West
379 //Frostwolf East
385
386//Mines
391
396
397//Turnins
402
403//Bosses
406
407//Captains
410};
411
413{
418 AV_QUEST_A_COMMANDER1 = 6942, //soldier
420 AV_QUEST_A_COMMANDER2 = 6941, //leutnant
422 AV_QUEST_A_COMMANDER3 = 6943, //commander
424 AV_QUEST_A_BOSS1 = 7386, // 5 cristal/blood
426 AV_QUEST_A_BOSS2 = 6881, // 1
428 AV_QUEST_A_NEAR_MINE = 5892, //the mine near start location of team
430 AV_QUEST_A_OTHER_MINE = 6982, //the other mine ;)
437
439{
446};
447
449{
451
453};
454
456{
458
459 struct
460 {
466
467 struct
468 {
475
476 struct
477 {
478 std::string AllianceOrDefend;
479 std::string HordeOrDestroy;
481};
482
484{
485 { BG_AV_NODES_FIRSTAID_STATION, { 47, 48, 45, 46 }, { 1325, 1326, 1327, 1328, 0 }, { "bg_av_herald_stormpike_aid_station_alliance", "bg_av_herald_stormpike_aid_station_horde" } }, // Stormpike First Aid Station
486 { BG_AV_NODES_STORMPIKE_GRAVE, { 1, 2, 3, 4 }, { 1333, 1335, 1334, 1336, 0 }, { "bg_av_herald_stormpike_alliance", "bg_av_herald_stormpike_horde" } }, // Stormpike Graveyard
487 { BG_AV_NODES_STONEHEART_GRAVE, { 55, 56, 53, 54 }, { 1302, 1304, 1301, 1303, 0 }, { "bg_av_herald_stonehearth_alliance", "bg_av_herald_stonehearth_horde" } }, // Stoneheart Graveyard
488 { BG_AV_NODES_SNOWFALL_GRAVE, { 5, 6, 7, 8 }, { 1341, 1343, 1342, 1344, 0 }, { "bg_av_herald_snowfall_alliance", "bg_av_herald_snowfall_horde" } }, // Snowfall Graveyard
489 { BG_AV_NODES_ICEBLOOD_GRAVE, { 59, 60, 57, 58 }, { 1346, 1348, 1347, 1349, 0 }, { "bg_av_herald_iceblood_alliance", "bg_av_herald_iceblood_horde" } }, // Iceblood Graveyard
490 { BG_AV_NODES_FROSTWOLF_GRAVE, { 9, 10, 11, 12 }, { 1337, 1339, 1338, 1340, 0 }, { "bg_av_herald_frostwolf_alliance", "bg_av_herald_frostwolf_horde" } }, // Frostwolf Graveyard
491 { BG_AV_NODES_FROSTWOLF_HUT, { 51, 52, 49, 50 }, { 1329, 1331, 1330, 1332, 0 }, { "bg_av_herald_frostwolf_hut_alliance", "bg_av_herald_frostwolf_hut_horde" } }, // Frostwolf Hut
492 { BG_AV_NODES_DUNBALDAR_SOUTH, { 16, 15, 14, 13 }, { 1361, 1375, 1370, 1378, 1181 }, { "bg_av_herald_south_bunker_defend", "bg_av_herald_south_bunker_attack" } }, // Dunbaldar South Bunker
493 { BG_AV_NODES_DUNBALDAR_NORTH, { 20, 19, 18, 17 }, { 1362, 1374, 1371, 1379, 1182 }, { "bg_av_herald_north_bunker_defend", "bg_av_herald_south_bunker_attack" } }, // Dunbaldar North Bunker
494 { BG_AV_NODES_ICEWING_BUNKER, { 24, 23, 22, 21 }, { 1363, 1376, 1372, 1380, 1183 }, { "bg_av_herald_icewing_bunker_defend", "bg_av_herald_icewing_bunker_attack" } }, // Icewing Bunker
495 { BG_AV_NODES_STONEHEART_BUNKER, { 28, 27, 26, 25 }, { 1364, 1377, 1373, 1381, 1184 }, { "bg_av_herald_stonehearth_bunker_defend", "bg_av_herald_stonehearth_bunker_attack" } }, // Stoneheart Bunker
496 { BG_AV_NODES_ICEBLOOD_TOWER, { 44, 43, 42, 41 }, { 1368, 1390, 1385, 1395, 1188 }, { "bg_av_herald_iceblood_tower_defend", "bg_av_herald_iceblood_tower_attack" } }, // Iceblood Tower
497 { BG_AV_NODES_TOWER_POINT, { 40, 39, 38, 37 }, { 1367, 1389, 1384, 1394, 1187 }, { "bg_av_herald_tower_point_defend", "bg_av_herald_tower_point_attack" } }, // Tower Point
498 { BG_AV_NODES_FROSTWOLF_ETOWER, { 36, 35, 34, 33 }, { 1366, 1388, 1383, 1393, 1186 }, { "bg_av_herald_east_tower_defend", "bg_av_herald_east_tower_attack" } }, // Frostwolf East Tower
499 { BG_AV_NODES_FROSTWOLF_WTOWER, { 32, 31, 30, 29 }, { 1365, 1387, 1382, 1392, 1185 }, { "bg_av_herald_west_tower_defend", "bg_av_herald_west_tower_attack" } }, // Frostwolf West Tower
500};
501
503{
504 // Herold
505 // Towers/Graveyards = 1 - 60
512 TEXT_ALLIANCE_WINS = 67, // NYI /// @todo: sound is missing
513 TEXT_HORDE_WINS = 68, // NYI /// @todo: sound is missing
514
515 // Taskmaster Snivvle
518
520{
524
526{
532 bool Tower;
533};
534
535inline BG_AV_Nodes &operator++(BG_AV_Nodes& i) { return i = BG_AV_Nodes(i + 1); }
536
538{
541};
542
544{
550
552{
553 public:
554 BattlegroundAV(BattlegroundTemplate const* battlegroundTemplate);
555 ~BattlegroundAV() = default;
556
557 /* inherited from BattlegroundClass */
558 void StartingEventOpenDoors() override;
559
560 void RemovePlayer(Player* player, ObjectGuid guid, uint32 team) override;
561 bool SetupBattleground() override;
562
563 /*general stuff*/
564 void UpdateScore(Team team, int16 points);
565
566 // Handle Stuff
567 void HandleInteractCapturableObject(Player* player, GameObject* target);
568 //these are functions which get called from extern
569 void HandleKillPlayer(Player* player, Player* killer) override;
570 void HandleKillUnit(Creature* unit, Unit* killer) override;
571 void HandleQuestComplete(uint32 questid, Player* player) override;
572
573 void EndBattleground(Team winner) override;
574
576
577 Team GetPrematureWinner() override;
578 void OnGameObjectCreate(GameObject* gameObject) override;
579 void OnCreatureCreate(Creature* creature) override;
580
581 uint32 GetData(uint32 dataId) const override;
582
583 private:
584 void PostUpdateImpl(uint32 diff) override;
585 bool IsCaptainAlive(TeamId teamId) const;
586
587 /* Nodes occupying */
588 void EventPlayerAssaultsPoint(Player* player, uint32 object);
589 void EventPlayerDefendsPoint(Player* player, uint32 object);
590 void EventPlayerDestroyedPoint(GameObject* gameobject);
591 void DoAction([[maybe_unused]] uint32 actionId, [[maybe_unused]] WorldObject* source = nullptr, [[maybe_unused]] WorldObject* target = nullptr) override;
592
593 void AssaultNode(BG_AV_Nodes node, Team team);
594 void DestroyNode(BG_AV_Nodes node);
595 void InitNode(BG_AV_Nodes node, Team team, bool tower);
596 void DefendNode(BG_AV_Nodes node, Team team);
597
599 {
600 for (uint8 i = 0; i < BG_AV_NODES_MAX; ++i)
601 if (BGAVNodeInfo[i].NodeId == node)
602 return &BGAVNodeInfo[i];
603 return nullptr;
604 }
605
607 bool IsTower(BG_AV_Nodes node) const { return _nodes[node].Tower; }
608
609 /*mine*/
610 void ChangeMineOwner(AlteracValleyMine mine, Team team, bool initial = false);
611
612 /*worldstates*/
615
616 Creature* FindHerald(std::string_view stringId) const;
617
618 /*variables */
619 std::array<int32, PVP_TEAMS_COUNT> _teamResources;
620 uint32 m_Team_QuestStatus[PVP_TEAMS_COUNT][9]; //[x][y] x=team y=questcounter
621
622 std::array<BG_AV_NodeInfo, BG_AV_NODES_MAX> _nodes;
623
624 TimeTracker _mineResourceTimer; //ticks for both teams
625
626 std::array<AlteracValleyMineInfo, 2> _mineInfo;
627
628 std::array<TimeTracker, PVP_TEAMS_COUNT> _captainBuffTimer;
629
630 std::array<bool, PVP_TEAMS_COUNT> _isInformedNearVictory;
635};
636
637#endif
BG_AV_BUFF
@ AV_BUFF_H_CAPTAIN
@ AV_BUFF_ARMOR
@ AV_BUFF_A_CAPTAIN
BG_AV_Sounds
@ AV_SOUND_HORDE_CAPTAIN
@ AV_SOUND_ALLIANCE_CAPTAIN
@ AV_SOUND_HORDE_GOOD
@ AV_SOUND_ALLIANCE_ASSAULTS
@ AV_SOUND_ALLIANCE_GOOD
@ AV_SOUND_BOTH_TOWER_DEFEND
@ AV_SOUND_NEAR_VICTORY
@ AV_SOUND_HORDE_ASSAULTS
BG_AV_ObjectIds
@ BG_AV_OBJECTID_AURA_A_S
@ 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_BANNER_H
@ BG_AV_OBJECTID_BANNER_CONT_A
@ BG_AV_OBJECTID_SNOWFALL_HORDE_CONTESTED
@ BG_AV_OBJECTID_SMOKE
@ BG_AV_GHOST_GATE
@ 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_BANNER_H_B
@ 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_BANNER_A_B
@ 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_SNOWFALL_CANDY_A
@ BG_AV_OBJECTID_BANNER_SNOWFALL_N
@ BG_AV_OBJECTID_STORMPIKE_HORDE_CONTROLLED
@ BG_AV_OBJECTID_AID_STATION_HORDE_CONTESTED
@ BG_AV_OBJECTID_SNOWFALL_CANDY_PH
@ BG_AV_OBJECTID_ICEBLOOD_HORDE_CONTROLLED
@ BG_AV_OBJECTID_NORTH_BUNKER_CONTESTED_BANNER
@ BG_AV_OBJECTID_GATE
@ BG_AV_OBJECTID_FIRE
@ BG_AV_OBJECTID_STONEHEARTH_BUNKER_CONTROLLED_BANNER
@ BG_AV_OBJECTID_BANNER_A
@ BG_AV_OBJECTID_AID_STATION_ALLIANCE_CONTROLLED
@ BG_AV_OBJECTID_TOWER_BANNER_PA
@ 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_TOWER_BANNER_H
@ BG_AV_OBJECTID_EAST_TOWER_CONTROLLED_BANNER
@ BG_AV_OBJECTID_EAST_TOWER_CONTROLLED_TOWER_BANNER
@ BG_AV_OBJECTID_SNOWFALL_CANDY_H
@ BG_AV_OBJECTID_SNOWFALL_CANDY_PA
@ BG_AV_OBJECTID_WEST_TOWER_CONTESTED_TOWER_BANNER
@ BG_AV_OBJECTID_MINE_N
@ BG_AV_OBJECTID_MINE_S
@ 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_TOWER_BANNER_PH
@ BG_AV_OBJECTID_EAST_TOWER_CONTESTED_TOWER_BANNER
@ BG_AV_OBJECTID_AURA_N
@ BG_AV_OBJECTID_WEST_TOWER_CONTROLLED_BANNER
@ BG_AV_OBJECTID_WEST_TOWER_CONTESTED_BANNER
@ BG_AV_OBJECTID_STONEHEARTH_HORDE_CONTROLLED
@ BG_AV_OBJECTID_AURA_A
@ 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_BANNER_CONT_H
@ BG_AV_OBJECTID_AURA_H_S
@ BG_AV_OBJECTID_BANNER_CONT_H_B
@ BG_AV_OBJECTID_EAST_TOWER_CONTESTED_BANNER
@ BG_AV_OBJECTID_STORMPIKE_ALLIANCE_CONTESTED
@ BG_AV_OBJECTID_AID_STATION_ALLIANCE_CONTESTED
@ BG_AV_OBJECTID_BANNER_CONT_A_B
@ BG_AV_OBJECTID_FROSTWOLF_HORDE_CONTROLLED
@ BG_AV_OBJECTID_AURA_H
@ BG_AV_OBJECTID_TOWER_POINT_CONTESTED_BANNER
@ BG_AV_OBJECTID_AURA_N_S
@ BG_AV_OBJECTID_FROSTWOLF_ALLIANCE_CONTESTED
@ BG_AV_OBJECTID_TOWER_BANNER_A
@ BG_AV_OBJECTID_ICEBLOOD_ALLIANCE_CONTROLLED
BG_AV_Nodes
@ 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_MAX
@ 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
BG_AV_States
@ POINT_DESTROYED
@ POINT_NEUTRAL
@ POINT_CONTROLED
@ POINT_ASSAULTED
constexpr Seconds BG_AV_MINE_RESOURCE_TIMER
BG_AV_Data
@ DATA_DEFENDER_TIER_HORDE
@ DATA_DEFENDER_TIER_ALLIANCE
AlteracValleySharedActions
@ ACTION_BUFF_YELL
@ ACTION_AV_INTERACT_CAPTURABLE_OBJECT
@ ACTION_AV_CAPTURE_CAPTURABLE_OBJECT
BG_AV_ExploitTeleportLocations
@ AV_EXPLOIT_TELEPORT_LOCATION_ALLIANCE
@ AV_EXPLOIT_TELEPORT_LOCATION_HORDE
BG_AV_QuestIds
@ AV_QUEST_A_COMMANDER3
@ AV_QUEST_H_SCRAPS1
@ AV_QUEST_H_BOSS1
@ AV_QUEST_H_RIDER_TAME
@ AV_QUEST_A_COMMANDER1
@ AV_QUEST_A_RIDER_HIDE
@ AV_QUEST_A_SCRAPS1
@ AV_QUEST_H_COMMANDER1
@ AV_QUEST_A_RIDER_TAME
@ AV_QUEST_H_COMMANDER3
@ AV_QUEST_H_NEAR_MINE
@ AV_QUEST_A_COMMANDER2
@ AV_QUEST_A_OTHER_MINE
@ AV_QUEST_A_NEAR_MINE
@ AV_QUEST_H_OTHER_MINE
@ AV_QUEST_A_SCRAPS2
@ AV_QUEST_H_BOSS2
@ AV_QUEST_A_BOSS1
@ AV_QUEST_H_COMMANDER2
@ AV_QUEST_H_RIDER_HIDE
@ AV_QUEST_A_BOSS2
@ AV_QUEST_H_SCRAPS2
Texts
@ 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
@ TEXT_ALLIANCE_WINS
@ TEXT_SNIVVLE_RANDOM
@ TEXT_HORDE_WINS
AlteracValleyMine
BG_AV_Nodes & operator++(BG_AV_Nodes &i)
BG_AV_CreatureIds
@ BG_AV_CREATURE_CHAMPION_GUARDIAN
@ BG_AV_CREATURE_SEASONED_DEFENDER
@ BG_AV_CREATURE_MASHA_SWIFTCUT
@ BG_AV_CREATURE_AGI_RUMBLESTOMP
@ BG_AV_CREATURE_VETERAN_DEFENDER
@ BG_AV_CREATURE_BALINDA
@ BG_AV_CREATURE_UMI_THORSON
@ BG_AV_CREATURE_GALVANGAR
@ BG_AV_CREATURE_VANNDAR
@ BG_AV_CREATURE_TASKMASTER_SNIVVLE
@ BG_AV_CREATURE_VETERAN_GUARDIAN
@ BG_AV_CREATURE_FROSTWOLF_GUARDIAN
@ BG_AV_CREATURE_STORMPIKE_DEFENDER
@ BG_AV_CREATURE_HERALD
@ BG_AV_CREATURE_DREKTHAR
@ BG_AV_CREATURE_KEETAR
@ BG_AV_CREATURE_CHAMPION_DEFENDER
@ BG_AV_CREATURE_SEASONED_GUARDIAN
@ BG_AV_CREATURE_MORLOCH
BG_AV_WorldStates
@ AV_WS_EAST_FROSTWOLF_TOWER_HORDE_CONTROLLED
@ AV_WS_COLDTOOTH_MINE_KOBOLD_CONTROLLED
@ AV_WS_STONEHEARTH_BUNKER_IN_CONFLICT_HORDE_ATTACKING
@ AV_WS_HORDE_REINFORCEMENTS
@ AV_WS_SNOWFALL_GRAVEYARD_IN_CONFLICT_HORDE_ATTACKING
@ AV_WS_ICEBLOOD_TOWER_IN_CONFLICT_HORDE_ATTACKING
@ AV_WS_FROSTWOLF_RELIEF_HUT_IN_CONFLICT_HORDE_ATTACKING
@ AV_WS_STONEHEARTH_GRAVEYARD_IN_CONFLICT_ALLIANCE_ATTACKING
@ AV_WS_STORMPIKE_GRAVEYARD_HORDE_CONTROLLED
@ AV_WS_WEST_FROSTWOLF_TOWER_DESTROYED
@ AV_WS_STONEHEARTH_GRAVEYARD_ALLIANCE_CONTROLLED
@ AV_WS_ICEWING_BUNKER_ALLIANCE_CONTROLLED
@ AV_WS_WEST_FROSTWOLF_TOWER_OWNER
@ AV_WS_FROSTWOLF_GRAVEYARD_IN_CONFLICT_ALLIANCE_ATTACKING
@ AV_WS_EAST_FROSTWOLF_TOWER_DESTROYED
@ AV_WS_WEST_FROSTWOLF_TOWER_IN_CONFLICT_HORDE_ATTACKING
@ AV_WS_IRONDEEP_MINE_OWNER
@ AV_WS_EAST_FROSTWOLF_TOWER_OWNER
@ AV_WS_STORMPIKE_AID_STATION_HORDE_CONTROLLED
@ AV_WS_FROSTWOLF_GRAVEYARD_HORDE_CONTROLLED
@ AV_WS_ICEBLOOD_TOWER_DESTROYED
@ AV_WS_IRONDEEP_MINE_HORDE_CONTROLLED
@ AV_WS_ICEBLOOD_GRAVEYARD_IN_CONFLICT_HORDE_ATTACKING
@ AV_WS_IVUS_STORM_CRYSTAL_MAX
@ AV_WS_STONEHEARTH_BUNKER_IN_CONFLICT_ALLIANCE_ATTACKING
@ AV_WS_STORMPIKE_GRAVEYARD_IN_CONFLICT_HORDE_ATTACKING
@ AV_WS_DUN_BALDAR_NORTH_BUNKER_DESTROYED
@ AV_WS_IRONDEEP_MINE_TROGG_CONTROLLED
@ AV_WS_DUN_BALDAR_NORTH_BUNKER_OWNER
@ AV_WS_DREKTHAR_ALIVE
@ AV_WS_STONEHEARTH_BUNKER_OWNER
@ AV_WS_GALVAGAR_ALIVE
@ AV_WS_ICEWING_BUNKER_IN_CONFLICT_ALLIANCE_ATTACKING
@ AV_WS_STONEHEARTH_GRAVEYARD_IN_CONFLICT_HORDE_ATTACKING
@ AV_WS_ICEBLOOD_TOWER_OWNER
@ AV_WS_COLDTOOTH_MINE_HORDE_CONTROLLED
@ AV_WS_ICEWING_BUNKER_IN_CONFLICT_HORDE_ATTACKING
@ AV_WS_IRONDEEP_MINE_ALLIANCE_CONTROLLED
@ AV_WS_DUN_BALDAR_SOUTH_BUNKER_ALLIANCE_CONTROLLED
@ AV_WS_ALLIANCE_REINFORCEMENTS
@ AV_WS_DUN_BALDAR_NORTH_BUNKER_IN_CONFLICT_ALLIANCE_ATTACKING
@ AV_WS_BALINDA_ALIVE
@ AV_WS_STONEHEARTH_BUNKER_DESTROYED
@ AV_WS_FROSTWOLF_RELIEF_HUT_IN_CONFLICT_ALLIANCE_ATTACKING
@ AV_WS_COLDTOOTH_MINE_ALLIANCE_CONTROLLED
@ AV_WS_LOKHOLAR_STORMPIKE_SOLDIERS_BLOOD_COUNT
@ AV_WS_TOWER_POINT_IN_CONFLICT_HORDE_ATTACKING
@ AV_WS_DUN_BALDAR_SOUTH_BUNKER_IN_CONFLICT_ALLIANCE_ATTACKING
@ AV_WS_STONEHEARTH_BUNKER_ALLIANCE_CONTROLLED
@ AV_WS_ICEBLOOD_GRAVEYARD_ALLIANCE_CONTROLLED
@ AV_WS_FROSTWOLF_GRAVEYARD_ALLIANCE_CONTROLLED
@ AV_WS_SNOWFALL_GRAVEYARD_UNCONTROLLED
@ AV_WS_DUN_BALDAR_NORTH_BUNKER_IN_CONFLICT_HORDE_ATTACKING
@ AV_WS_SHOW_HORDE_REINFORCEMENTS
@ AV_WS_WEST_FROSTWOLF_TOWER_IN_CONFLICT_ALLIANCE_ATTACKING
@ AV_WS_STORMPIKE_GRAVEYARD_IN_CONFLICT_ALLIANCE_ATTACKING
@ AV_WS_SHOW_ALLIANCE_REINFORCEMENTS
@ AV_WS_STORMPIKE_AID_STATION_IN_CONFLICT_HORDE_ATTACKING
@ AV_WS_ICEBLOOD_TOWER_HORDE_CONTROLLED
@ AV_WS_TOWER_POINT_HORDE_CONTROLLED
@ AV_WS_STONEHEARTH_GRAVEYARD_HORDE_CONTROLLED
@ AV_WS_LOKHOLAR_STORMPIKE_SOLDIERS_BLOOD_MAX
@ AV_WS_MAX_REINFORCEMENTS
@ AV_WS_ICEWING_BUNKER_OWNER
@ AV_WS_DUN_BALDAR_NORTH_BUNKER_ALLIANCE_CONTROLLED
@ AV_WS_DUN_BALDAR_SOUTH_BUNKER_OWNER
@ AV_WS_DUN_BALDAR_SOUTH_BUNKER_IN_CONFLICT_HORDE_ATTACKING
@ AV_WS_COLDTOOTH_MINE_OWNER
@ AV_WS_VANDAAR_ALIVE
@ AV_WS_ICEBLOOD_TOWER_IN_CONFLICT_ALLIANCE_ATTACKING
@ AV_WS_STORMPIKE_GRAVEYARD_ALLIANCE_CONTROLLED
@ AV_WS_SNOWFALL_GRAVEYARD_ALLIANCE_CONTROLLED
@ AV_WS_STORMPIKE_AID_STATION_IN_CONFLICT_ALLIANCE_ATTACKING
@ AV_WS_ICEWING_BUNKER_DESTROYED
@ AV_WS_SNOWFALL_GRAVEYARD_IN_CONFLICT_ALLIANCE_ATTACKING
@ AV_WS_STORMPIKE_AID_STATION_ALLIANCE_CONTROLLED
@ AV_WS_TOWER_POINT_IN_CONFLICT_ALLIANCE_ATTACKING
@ AV_WS_FROSTWOLF_GRAVEYARD_IN_CONFLICT_HORDE_ATTACKING
@ AV_WS_ICEBLOOD_GRAVEYARD_IN_CONFLICT_ALLIANCE_ATTACKING
@ AV_WS_WEST_FROSTWOLF_TOWER_HORDE_CONTROLLED
@ AV_WS_TOWER_POINT_DESTROYED
@ AV_WS_SNOWFALL_GRAVEYARD_HORDE_CONTROLLED
@ AV_WS_EAST_FROSTWOLF_TOWER_IN_CONFLICT_HORDE_ATTACKING
@ AV_WS_DUN_BALDAR_SOUTH_BUNKER_DESTROYED
@ AV_WS_FROSTWOLF_RELIEF_HUT_HORDE_CONTROLLED
@ AV_WS_IVUS_STORM_CRYSTAL_COUNT
@ AV_WS_ICEBLOOD_GRAVEYARD_HORDE_CONTROLLED
@ AV_WS_EAST_FROSTWOLF_TOWER_IN_CONFLICT_ALLIANCE_ATTACKING
@ AV_WS_TOWER_POINT_OWNER
@ AV_WS_FROSTWOLF_RELIEF_HUT_ALLIANCE_CONTROLLED
static StaticNodeInfo const BGAVNodeInfo[]
BG_AV_DefenderTier
@ 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_BroadcastTexts
@ 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
uint8_t uint8
Definition: Define.h:144
int16_t int16
Definition: Define.h:139
int32_t int32
Definition: Define.h:138
uint16_t uint16
Definition: Define.h:143
uint32_t uint32
Definition: Define.h:142
std::chrono::seconds Seconds
Seconds shorthand typedef.
Definition: Duration.h:32
std::unordered_set< ObjectGuid > GuidUnorderedSet
Definition: ObjectGuid.h:396
TeamId
uint8 constexpr PVP_TEAMS_COUNT
Team
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
ObjectGuid _balindaGUID
Team GetPrematureWinner() override
~BattlegroundAV()=default
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)
Definition: Unit.h:627
StaticMineInfo StaticInfo
BG_AV_States State
BG_AV_States PrevState
int32 WorldStateHordeControlled
int32 WorldStateNeutralControlled
int32 WorldStateAllianceControlled
std::string HordeOrDestroy
struct StaticNodeInfo::@193 WorldStateIds
struct StaticNodeInfo::@194 StringIds
BG_AV_Nodes NodeId
std::string AllianceOrDefend
struct StaticNodeInfo::@192 TextIds