TrinityCore
Loading...
Searching...
No Matches
battleground_isle_of_conquest.cpp
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#include "BattlegroundScript.h"
19#include "Battleground.h"
20#include "BattlegroundMgr.h"
21#include "GameTime.h"
22#include "isle_of_conquest.h"
23#include "Map.h"
24#include "Player.h"
25#include "ScriptMgr.h"
26#include "TaskScheduler.h"
27#include "TemporarySummon.h"
28#include "Timer.h"
29#include "Transport.h"
30#include "TransportMgr.h"
31#include "Vehicle.h"
32
33inline constexpr uint16 MAX_REINFORCEMENTS = 400;
34
42
48
55
66
81
90
100
101// I.E: Hangar, Quarry, Graveyards .. etc
123
125{
126public:
127 explicit ICNodePoint(IsleOfConquestNodeState state, IoCStaticNodeInfo const& nodeInfo) : _state(state), _nodeInfo(nodeInfo)
128 {
129 switch (state)
130 {
133 break;
136 break;
141 break;
142 }
143 }
144
146
151
153
154 IoCStaticNodeInfo const& GetNodeInfo() const { return _nodeInfo; }
155
157 {
158 switch (state)
159 {
162 break;
165 break;
168 break;
171 break;
172 }
173
174 _state = state;
175 }
176private:
180};
181
183{
191};
192
198
204
206{
207 GO_TELEPORTER_1 = 195314, // 195314 H-OUT 66549
208 GO_TELEPORTER_2 = 195313, // 195313 H-IN 66548
209
210 GO_TELEPORTER_3 = 195315, // 195315 A-OUT 66549
211 GO_TELEPORTER_4 = 195316, // 195316 A-IN 66548
212
215
220
224
228
230
231 // banners
237
243
249
255
261
266
271
275
277 GO_ALLIANCE_GUNSHIP = 195121
279
280static constexpr Seconds IOC_RESOURCE_TIMER = 45s;
281
283{
284 { 11.69964981079101562f, 0.034145999699831008f, 20.62075996398925781f, 3.211405754089355468f },
285 { 7.30560922622680664f, -0.09524600207805633f, 34.51021575927734375f, 3.159045934677124023f }
286};
287
289{
312
313 void OnUpdate(uint32 diff) override
314 {
316
318 return;
319
320 _scheduler.Update(diff);
323 {
324 for (uint8 i = 0; i < NODE_TYPE_DOCKS; ++i)
325 {
326 if (_nodePoints[i]->GetLastControlledTeam() != TEAM_NEUTRAL && !_nodePoints[i]->IsContested())
327 {
328 _factionReinforcements[_nodePoints[i]->GetLastControlledTeam()] += 1;
331 }
332 }
333
335 }
336 }
337
338 void OnStart() override
339 {
341
342 auto gameobjectAction = [&]<std::invocable<GameObject*> Action>(GuidVector const& guids, Action const& action) -> void
343 {
344 for (ObjectGuid const& guid : guids)
345 if (GameObject* gameObject = battlegroundMap->GetGameObject(guid))
346 action(gameObject);
347 };
348
349 gameobjectAction(_mainGateDoorGUIDs, [&](GameObject* gameobject) -> void
350 {
351 gameobject->UseDoorOrButton();
352 gameobject->DespawnOrUnsummon(20s);
353 });
354
355 gameobjectAction(_portcullisGUIDs, [&](GameObject* gameobject) -> void
356 {
357 gameobject->UseDoorOrButton();
358 });
359
360 gameobjectAction(_teleporterGUIDs, [&](GameObject* gameobject) -> void
361 {
363 });
364
365 gameobjectAction(_teleporterEffectGUIDs, [&](GameObject* gameobject) -> void
366 {
367 gameobject->SetGoState(GO_STATE_ACTIVE);
368 });
369
370 _scheduler.Schedule(20s, [&](TaskContext const&)
371 {
372 for (ObjectGuid const& guid : _wallGUIDs)
373 if (GameObject* gameobject = battlegroundMap->GetGameObject(guid))
375 });
376 }
377
378 void OnUnitKilled(Creature* unit, Unit* killer) override
379 {
381
383 return;
384
385 uint32 entry = unit->GetEntry();
387 {
390 }
391 else if (entry == NPC_OVERLORD_AGMAR)
392 {
395 }
396
397 //Achievement Mowed Down
398 // TO-DO: This should be done on the script of each vehicle of the BG.
399 if (unit->IsVehicle())
400 {
401 if (Player* killerPlayer = killer->GetCharmerOrOwnerPlayerOrPlayerItself())
402 killerPlayer->CastSpell(killerPlayer, SPELL_DESTROYED_VEHICLE_ACHIEVEMENT, true);
403 }
404 }
405
406 void OnPlayerKilled(Player* player, Player* killer) override
407 {
409
411 return;
412
414 _factionReinforcements[victimTeamId] -= 1;
415
417
418 // we must end the battleground
419 if (_factionReinforcements[victimTeamId] < 1)
421 }
422
424 {
425 switch (id)
426 {
427 case GO_HORDE_GATE_1:
428 return BG_IC_H_FRONT;
429 case GO_HORDE_GATE_2:
430 return BG_IC_H_WEST;
431 case GO_HORDE_GATE_3:
432 return BG_IC_H_EAST;
434 return BG_IC_A_FRONT;
436 return BG_IC_A_WEST;
438 return BG_IC_A_EAST;
439 default:
440 return 0;
441 }
442 }
443
445 {
446 int32 uws = 0;
447
448 switch (id)
449 {
450 case GO_HORDE_GATE_1:
452 break;
453 case GO_HORDE_GATE_2:
455 break;
456 case GO_HORDE_GATE_3:
458 break;
461 break;
464 break;
467 break;
468 default:
469 break;
470 }
471 return uws;
472 }
473
482
484 {
485 switch (bannerId)
486 {
502 return NODE_TYPE_DOCKS;
508 return NODE_TYPE_HANGAR;
514 return NODE_TYPE_WORKSHOP;
520 return NODE_TYPE_QUARRY;
526 return NODE_TYPE_REFINERY;
527 default:
528 break;
529 }
530
531 return MAX_NODE_TYPES;
532 }
533
535 {
537 return;
538
539 switch (node.GetNodeInfo().NodeType)
540 {
541 case NODE_TYPE_QUARRY:
544 break;
545 case NODE_TYPE_HANGAR:
547 {
548 // Can't have this in spawngroup, creature is on a transport
550 _gunshipTeleportTarget = trigger->GetGUID();
551
552 transport->EnableMovement(true);
553 }
554
555 for (ObjectGuid const& guid : _cannonGUIDs[node.GetLastControlledTeam()])
556 if (Creature* cannon = battlegroundMap->GetCreature(guid))
557 cannon->SetUninteractible(false);
558 break;
559 default:
560 break;
561 }
562 }
563
564 void OnCreatureCreate(Creature* creature) override
565 {
567
568 if (creature->HasStringId("bg_ioc_faction_1735"))
570 else if (creature->HasStringId("bg_ioc_faction_1732"))
572
573 switch (creature->GetEntry())
574 {
576 _cannonGUIDs[TEAM_ALLIANCE].emplace_back(creature->GetGUID());
577 creature->SetUninteractible(true);
578 creature->SetControlled(true, UNIT_STATE_ROOT);
579 break;
581 _cannonGUIDs[TEAM_HORDE].emplace_back(creature->GetGUID());
582 creature->SetUninteractible(true);
583 creature->SetControlled(true, UNIT_STATE_ROOT);
584 break;
585 default:
586 break;
587 }
588 }
589
590 void OnGameObjectCreate(GameObject* gameobject) override
591 {
593
594 if (gameobject->IsDestructibleBuilding())
595 _wallGUIDs.emplace_back(gameobject->GetGUID());
596
597 if (gameobject->HasStringId("bg_ioc_faction_1735"))
599 else if (gameobject->HasStringId("bg_ioc_faction_1732"))
601
602 switch (gameobject->GetEntry())
603 {
604 case GO_TELEPORTER_1:
605 case GO_TELEPORTER_2:
606 case GO_TELEPORTER_3:
607 case GO_TELEPORTER_4:
608 _teleporterGUIDs.emplace_back(gameobject->GetGUID());
609 break;
612 _teleporterEffectGUIDs.emplace_back(gameobject->GetGUID());
613 break;
616 _mainGateDoorGUIDs.emplace_back(gameobject->GetGUID());
617 break;
620 _portcullisGUIDs.emplace_back(gameobject->GetGUID());
621 break;
622 case GO_KEEP_GATE_H:
623 _keepGateGUIDs[TEAM_HORDE].emplace_back(gameobject->GetGUID());
624 break;
625 case GO_KEEP_GATE_A:
626 case GO_KEEP_GATE_2_A:
627 _keepGateGUIDs[TEAM_ALLIANCE].emplace_back(gameobject->GetGUID());
628 break;
630 _keepBannerGUIDs[TEAM_ALLIANCE] = gameobject->GetGUID();
631 break;
633 _keepBannerGUIDs[TEAM_HORDE] = gameobject->GetGUID();
634 break;
635 default:
636 break;
637 }
638 }
639
640 void OnInit() override
641 {
643
644 if (Transport* transport = sTransportMgr->CreateTransport(GO_HORDE_GUNSHIP, battlegroundMap))
645 {
646 _gunshipGUIDs[TEAM_HORDE] = transport->GetGUID();
647 transport->EnableMovement(false);
648 }
649
650 if (Transport* transport = sTransportMgr->CreateTransport(GO_ALLIANCE_GUNSHIP, battlegroundMap))
651 {
652 _gunshipGUIDs[TEAM_ALLIANCE] = transport->GetGUID();
653 transport->EnableMovement(false);
654 }
655 }
656
657 void DoAction(uint32 actionId, WorldObject* source, WorldObject* target) override
658 {
659 BattlegroundScript::DoAction(actionId, source, target);
660
661 switch (actionId)
662 {
665 break;
668 break;
669 default:
670 break;
671 }
672 }
673
675 {
676 if (!player || !banner)
677 return;
678
679 Team const playerTeam = battleground->GetPlayerTeam(player->GetGUID());
680 TeamId const playerTeamId = Battleground::GetTeamIndexByTeamId(playerTeam);
681 ICNodePointType const nodeType = BannerToNodeType(banner->GetEntry());
682 if (nodeType == MAX_NODE_TYPES)
683 return;
684
685 ICNodePoint& node = *_nodePoints[nodeType];
686
687 bool assault = false;
688 bool defend = false;
689
690 switch (node.GetState())
691 {
693 assault = true;
694 break;
696 assault = playerTeamId != TEAM_HORDE;
697 break;
699 assault = playerTeamId != TEAM_ALLIANCE;
700 break;
702 defend = playerTeamId == node.GetLastControlledTeam();
703 assault = !defend && playerTeamId == TEAM_HORDE;
704 break;
706 defend = playerTeamId == node.GetLastControlledTeam();
707 assault = !defend && playerTeamId == TEAM_ALLIANCE;
708 break;
709 }
710
711 if (assault)
712 OnPlayerAssaultNode(player, node);
713 else if (defend)
714 OnPlayerDefendNode(player, node);
715
717 }
718
720 {
721 if (!player)
722 return;
723
724 Team const playerTeam = battleground->GetPlayerTeam(player->GetGUID());
725 TeamId const playerTeamId = Battleground::GetTeamIndexByTeamId(playerTeam);
726
728 node.UpdateState(newState);
729
731
732 ChatMsg const messageType = playerTeamId == TEAM_ALLIANCE ? CHAT_MSG_BG_SYSTEM_ALLIANCE : CHAT_MSG_BG_SYSTEM_HORDE;
733 battleground->SendBroadcastText(node.GetNodeInfo().TextIds.Assaulted, messageType, player);
735
736 // apply side effects of each node, only if it wasn't neutral before
738 return;
739
740 switch (node.GetNodeInfo().NodeType)
741 {
742 case NODE_TYPE_HANGAR:
744 transport->EnableMovement(false);
745
746 for (ObjectGuid const& guid : _cannonGUIDs[node.GetLastControlledTeam()])
747 {
748 if (Creature* cannon = battlegroundMap->GetCreature(guid))
749 {
750 cannon->GetVehicleKit()->RemoveAllPassengers();
751 cannon->SetUninteractible(true);
752 }
753 }
754
755 // Despawn teleport trigger target
757 creature->DespawnOrUnsummon();
758 break;
759 default:
760 break;
761 }
762 }
763
765 {
766 if (!player)
767 return;
768
769 Team const playerTeam = battleground->GetPlayerTeam(player->GetGUID());
770 TeamId const playerTeamId = Battleground::GetTeamIndexByTeamId(playerTeam);
771
775
776 ChatMsg const messageType = playerTeamId == TEAM_ALLIANCE ? CHAT_MSG_BG_SYSTEM_ALLIANCE : CHAT_MSG_BG_SYSTEM_HORDE;
777 battleground->SendBroadcastText(node.GetNodeInfo().TextIds.Defended, messageType, player);
779 }
780
781 void ProcessEvent(WorldObject* target, uint32 eventId, WorldObject* invoker) override
782 {
783 BattlegroundScript::ProcessEvent(target, eventId, invoker);
784
785 if (GameObject* obj = Object::ToGameObject(target))
786 if (obj->GetGoType() == GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING)
787 if (obj->GetGOInfo()->destructibleBuilding.DestroyedEvent == eventId)
788 OnGateDestroyed(obj, invoker);
789 }
790
792 {
793 if (!banner)
794 return;
795
796 ICNodePointType const nodeType = BannerToNodeType(banner->GetEntry());
797 if (nodeType == MAX_NODE_TYPES)
798 return;
799
800 ICNodePoint& node = *_nodePoints[nodeType];
805
807
810 battleground->SendBroadcastText(textId, messageType);
812 }
813
814 void OnGateDestroyed(GameObject* gate, WorldObject* destroyer)
815 {
817 int32 const wsGateOpen = GetWorldStateFromGateEntry(gate->GetEntry(), true);
818 int32 const wsGateClosed = GetWorldStateFromGateEntry(gate->GetEntry(), false);
819 if (wsGateOpen)
820 {
821 UpdateWorldState(wsGateClosed, 0);
822 UpdateWorldState(wsGateOpen, 1);
823 }
824
825 TeamId teamId = TEAM_NEUTRAL;
826 uint32 textId;
827 ChatMsg msgType;
828 switch (gate->GetEntry())
829 {
830 case GO_HORDE_GATE_1:
833 teamId = TEAM_HORDE;
834 break;
835 case GO_HORDE_GATE_2:
838 teamId = TEAM_HORDE;
839 break;
840 case GO_HORDE_GATE_3:
843 teamId = TEAM_HORDE;
844 break;
847 msgType = CHAT_MSG_BG_SYSTEM_HORDE;
848 teamId = TEAM_ALLIANCE;
849 break;
852 msgType = CHAT_MSG_BG_SYSTEM_HORDE;
853 teamId = TEAM_ALLIANCE;
854 break;
857 msgType = CHAT_MSG_BG_SYSTEM_HORDE;
858 teamId = TEAM_ALLIANCE;
859 break;
860 default:
861 return;
862 }
863
864 if (teamId != TEAM_NEUTRAL)
865 {
866 GuidVector const keepGates = _keepGateGUIDs[teamId];
867 ObjectGuid const bannerGuid = _keepBannerGUIDs[teamId];
868
869 for (ObjectGuid const& guid : keepGates)
870 if (GameObject* keepGate = battlegroundMap->GetGameObject(guid))
871 keepGate->UseDoorOrButton();
872
873 if (GameObject* banner = battlegroundMap->GetGameObject(bannerGuid))
874 banner->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
875 }
876
877 battleground->SendBroadcastText(textId, msgType, destroyer);
878 }
879
880private:
881 std::array<uint16, PVP_TEAMS_COUNT> _factionReinforcements;
882 std::array<BG_IC_GateState, 6> _gateStatus;
883 std::array<std::unique_ptr<ICNodePoint>, 7> _nodePoints;
884 std::array<ObjectGuid, PVP_TEAMS_COUNT> _gunshipGUIDs;
890 std::array<GuidVector, PVP_TEAMS_COUNT> _cannonGUIDs;
891 std::array<GuidVector, PVP_TEAMS_COUNT> _keepGateGUIDs;
892 std::array<ObjectGuid, PVP_TEAMS_COUNT> _keepBannerGUIDs;
894
897};
898
@ STATUS_IN_PROGRESS
uint8_t uint8
Definition Define.h:156
int32_t int32
Definition Define.h:150
uint16_t uint16
Definition Define.h:155
uint32_t uint32
Definition Define.h:154
std::chrono::seconds Seconds
Seconds shorthand typedef.
Definition Duration.h:28
@ TEMPSUMMON_MANUAL_DESPAWN
std::vector< ObjectGuid > GuidVector
Definition ObjectGuid.h:434
#define RegisterBattlegroundMapScript(script_name, mapId)
Definition ScriptMgr.h:1447
@ GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING
@ TEAM_NEUTRAL
@ TEAM_ALLIANCE
@ TEAM_HORDE
@ GO_DESTRUCTIBLE_DAMAGED
@ ALLIANCE
@ HORDE
@ GO_FLAG_NOT_SELECTABLE
@ FACTION_ALLIANCE_GENERIC_WG
@ FACTION_HORDE_GENERIC_WG
ChatMsg
@ CHAT_MSG_BG_SYSTEM_ALLIANCE
@ CHAT_MSG_BG_SYSTEM_HORDE
@ GO_STATE_ACTIVE
#define sTransportMgr
@ UNIT_STATE_ROOT
Definition Unit.h:271
@ IC_EXPLOIT_TELEPORT_LOCATION_ALLIANCE
@ IC_EXPLOIT_TELEPORT_LOCATION_HORDE
@ BG_IC_TEXT_WEST_GATE_HORDE_DESTROYED
@ BG_IC_TEXT_FRONT_GATE_ALLIANCE_DESTROYED
@ BG_IC_TEXT_WEST_GATE_ALLIANCE_DESTROYED
@ BG_IC_TEXT_FRONT_GATE_HORDE_DESTROYED
@ BG_IC_TEXT_EAST_GATE_HORDE_DESTROYED
@ BG_IC_TEXT_EAST_GATE_ALLIANCE_DESTROYED
static constexpr Seconds IOC_RESOURCE_TIMER
const IoCStaticNodeInfo nodePointInitial[MAX_NODE_TYPES]
@ GO_BANNER_ALLIANCE_KEEP_CONTROLLED_H
@ GO_BANNER_ALLIANCE_KEEP_CONTROLLED_A
@ GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR01
@ GO_BANNER_ALLIANCE_KEEP_CONTESTED_A
@ GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR01
@ GO_BANNER_ALLIANCE_KEEP_CONTESTED_H
static constexpr Position GunshipTeleportTriggerPosition[2]
void AddSC_battleground_isle_of_conquest()
constexpr uint16 MAX_REINFORCEMENTS
Action
ObjectGuid const & GetGUID() const
Definition BaseEntity.h:163
Battleground * battleground
BattlegroundMap * battlegroundMap
virtual void OnPlayerKilled(Player *victim, Player *killer)
virtual void OnUpdate(uint32 diff)
virtual void OnUnitKilled(Creature *victim, Unit *killer)
void UpdateWorldState(int32 worldStateId, int32 value, bool hidden=false) const
void RewardHonorToTeam(uint32 Honor, Team team)
static TeamId GetTeamIndexByTeamId(Team team)
virtual void EndBattleground(Team winner)
void SendBroadcastText(uint32 id, ChatMsg msgType, WorldObject const *target=nullptr)
BattlegroundStatus GetStatus() const
Team GetPlayerTeam(ObjectGuid guid) const
void UpdatePvpStat(Player *player, uint32 pvpStatId, uint32 value)
bool HasStringId(std::string_view id) const
bool HasStringId(std::string_view id) const
void SetGoState(GOState state)
void UseDoorOrButton(uint32 time_to_restore=0, bool alternative=false, Unit *user=nullptr)
void RemoveFlag(GameObjectFlags flags)
Definition GameObject.h:278
void DespawnOrUnsummon(Milliseconds delay=0ms, Seconds forceRespawnTime=0s)
void SetDestructibleState(GameObjectDestructibleState state, WorldObject *attackerOrHealer=nullptr, bool setHealth=false)
bool IsDestructibleBuilding() const
void SetFaction(uint32 faction) override
Definition GameObject.h:398
void UpdateState(IsleOfConquestNodeState state)
IsleOfConquestNodeState _state
IsleOfConquestNodeState GetState() const
IoCStaticNodeInfo const & GetNodeInfo() const
ICNodePoint(IsleOfConquestNodeState state, IoCStaticNodeInfo const &nodeInfo)
void UpdateSpawnGroupConditions()
Definition Map.cpp:2506
GameObject * GetGameObject(ObjectGuid const &guid)
Definition Map.cpp:3552
void UpdateAreaDependentAuras()
Definition Map.cpp:4078
Creature * GetCreature(ObjectGuid const &guid)
Definition Map.cpp:3542
Transport * GetTransport(ObjectGuid const &guid)
Definition Map.cpp:3562
Player * ToPlayer()
Definition Object.h:126
GameObject * ToGameObject()
Definition Object.h:131
uint32 GetEntry() const
Definition Object.h:89
TaskScheduler & Schedule(duration_t time, task_handler_t task)
TaskScheduler & Update()
Update the scheduler to the current time.
Definition Unit.h:635
bool IsVehicle() const
Definition Unit.h:754
void SetControlled(bool apply, UnitState state)
Definition Unit.cpp:11545
void SetFaction(uint32 faction) override
Definition Unit.h:872
void SetUninteractible(bool apply)
Definition Unit.cpp:8564
Player * GetCharmerOrOwnerPlayerOrPlayerItself() const
Definition Object.cpp:1621
virtual void DoAction(uint32 actionId, WorldObject *source=nullptr, WorldObject *target=nullptr)
Definition ZoneScript.h:104
virtual void OnCreatureCreate(Creature *)
Definition ZoneScript.h:76
virtual void ProcessEvent(WorldObject *obj, uint32 eventId, WorldObject *invoker)
Definition ZoneScript.h:103
virtual void OnGameObjectCreate(GameObject *)
Definition ZoneScript.h:79
@ ACTION_IOC_INTERACT_CAPTURABLE_OBJECT
@ ACTION_IOC_CAPTURE_CAPTURABLE_OBJECT
@ SPELL_DESTROYED_VEHICLE_ACHIEVEMENT
@ BG_IC_HANGAR_CONTROLLED_H
@ BG_IC_GATE_WEST_A_WS_OPEN
@ BG_IC_QUARRY_CONTROLLED_H
@ BG_IC_HANGAR_CONTROLLED_A
@ BG_IC_QUARRY_CONTROLLED_A
@ BG_IC_WORKSHOP_CONFLICT_A
@ BG_IC_WORKSHOP_CONTROLLED_H
@ BG_IC_GATE_FRONT_A_WS_OPEN
@ BG_IC_GATE_FRONT_H_WS_OPEN
@ BG_IC_QUARRY_CONFLICT_A
@ BG_IC_HORDE_KEEP_CONTROLLED_A
@ BG_IC_HORDE_KEEP_UNCONTROLLED
@ BG_IC_HORDE_KEEP_CONFLICT_H
@ BG_IC_GATE_FRONT_A_WS_CLOSED
@ BG_IC_WORKSHOP_UNCONTROLLED
@ BG_IC_HORDE_KEEP_CONFLICT_A
@ BG_IC_GATE_EAST_H_WS_OPEN
@ BG_IC_GATE_WEST_H_WS_OPEN
@ BG_IC_WORKSHOP_CONTROLLED_A
@ BG_IC_GATE_FRONT_H_WS_CLOSED
@ BG_IC_DOCKS_UNCONTROLLED
@ BG_IC_ALLIANCE_REINFORCEMENTS
@ BG_IC_REFINERY_CONTROLLED_A
@ BG_IC_GATE_EAST_H_WS_CLOSED
@ BG_IC_QUARRY_CONFLICT_H
@ BG_IC_WORKSHOP_CONFLICT_H
@ BG_IC_GATE_WEST_H_WS_CLOSED
@ BG_IC_HANGAR_CONFLICT_A
@ BG_IC_ALLIANCE_KEEP_UNCONTROLLED
@ BG_IC_REFINERY_CONTROLLED_H
@ BG_IC_HANGAR_CONFLICT_H
@ BG_IC_ALLIANCE_KEEP_CONTROLLED_H
@ BG_IC_HORDE_KEEP_CONTROLLED_H
@ BG_IC_GATE_WEST_A_WS_CLOSED
@ BG_IC_HANGAR_UNCONTROLLED
@ BG_IC_ALLIANCE_KEEP_CONFLICT_A
@ BG_IC_DOCKS_CONTROLLED_H
@ BG_IC_ALLIANCE_KEEP_CONTROLLED_A
@ BG_IC_GATE_EAST_A_WS_OPEN
@ BG_IC_HORDE_REINFORCEMENTS
@ BG_IC_QUARRY_UNCONTROLLED
@ BG_IC_REFINERY_CONFLICT_H
@ BG_IC_ALLIANCE_KEEP_CONFLICT_H
@ BG_IC_GATE_EAST_A_WS_CLOSED
@ BG_IC_DOCKS_CONTROLLED_A
@ BG_IC_DOCKS_CONFLICT_A
@ BG_IC_DOCKS_CONFLICT_H
@ BG_IC_REFINERY_UNCONTROLLED
@ BG_IC_REFINERY_CONFLICT_A
@ NPC_HIGH_COMMANDER_HALFORD_WYRMBANE
@ NPC_WORLD_TRIGGER_NOT_FLOATING
@ NPC_OVERLORD_AGMAR
@ NPC_ALLIANCE_GUNSHIP_CANNON
@ NPC_HORDE_GUNSHIP_CANNON
struct IoCStaticNodeInfo::@333 WorldStateIds
struct IoCStaticNodeInfo::@332 TextIds
void Update(int32 diff)
Definition Timer.h:121
bool Passed() const
Definition Timer.h:131
void Reset(int32 expiry)
Definition Timer.h:136
static int32 GetWorldStateFromGateEntry(uint32 id, bool open)
static ICNodePointType BannerToNodeType(uint32 bannerId)
void OnPlayerDefendNode(Player *player, ICNodePoint &node)
void OnPlayerKilled(Player *player, Player *killer) override
void OnGameObjectCreate(GameObject *gameobject) override
std::array< GuidVector, PVP_TEAMS_COUNT > _cannonGUIDs
void OnPlayerInteractWithBanner(Player *player, GameObject *banner)
std::array< GuidVector, PVP_TEAMS_COUNT > _keepGateGUIDs
void OnPlayerAssaultNode(Player *player, ICNodePoint &node)
void ProcessEvent(WorldObject *target, uint32 eventId, WorldObject *invoker) override
void DoAction(uint32 actionId, WorldObject *source, WorldObject *target) override
void OnCreatureCreate(Creature *creature) override
std::array< ObjectGuid, PVP_TEAMS_COUNT > _gunshipGUIDs
std::array< ObjectGuid, PVP_TEAMS_COUNT > _keepBannerGUIDs
void UpdateNodeWorldState(ICNodePoint const &node) const
std::array< BG_IC_GateState, 6 > _gateStatus
std::array< std::unique_ptr< ICNodePoint >, 7 > _nodePoints
void OnUnitKilled(Creature *unit, Unit *killer) override
void OnGateDestroyed(GameObject *gate, WorldObject *destroyer)
std::array< uint16, PVP_TEAMS_COUNT > _factionReinforcements