TrinityCore
BattlegroundIC.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 "BattlegroundIC.h"
19#include "Creature.h"
20#include "GameObject.h"
21#include "Log.h"
22#include "Map.h"
23#include "ObjectMgr.h"
24#include "Player.h"
25#include "TemporarySummon.h"
26#include "Transport.h"
27#include "UnitAI.h"
28#include "Vehicle.h"
29
31{
34};
35
37{
38 GO_TELEPORTER_1 = 195314, // 195314 H-OUT 66549
39 GO_TELEPORTER_2 = 195313, // 195313 H-IN 66548
40
41 GO_TELEPORTER_3 = 195315, // 195315 A-OUT 66549
42 GO_TELEPORTER_4 = 195316, // 195316 A-IN 66548
43
46
51
55
59
61
62 // banners
68
74
80
86
92
97
102
106
108 GO_ALLIANCE_GUNSHIP = 195121
110
111static constexpr Seconds IOC_RESOURCE_TIMER = 45s;
112
114{
115 { 11.69964981079101562f, 0.034145999699831008f, 20.62075996398925781f, 3.211405754089355468f },
116 { 7.30560922622680664f, -0.09524600207805633f, 34.51021575927734375f, 3.159045934677124023f }
117};
118
119BattlegroundIC::BattlegroundIC(BattlegroundTemplate const* battlegroundTemplate) : Battleground(battlegroundTemplate)
120{
122
124
125 _gunshipGUIDs = { };
126 _cannonGUIDs = { };
127 _nodePoints = { };
128 _keepGateGUIDs = { };
129 _keepBannerGUIDs = { };
130
138
140}
141
143
145{
147 return;
148
149 _scheduler.Update(diff);
152 {
153 for (uint8 i = 0; i < NODE_TYPE_DOCKS; ++i)
154 {
155 if (_nodePoints[i]->GetLastControlledTeam() != TEAM_NEUTRAL && !_nodePoints[i]->IsContested())
156 {
157 _factionReinforcements[_nodePoints[i]->GetLastControlledTeam()] += 1;
160 }
161 }
162
164 }
165}
166
168{
169 auto gameobjectAction = [&](GuidVector const& guids, std::function<void(GameObject*)> const& action) -> void
170 {
171 for (ObjectGuid const& guid : guids)
172 if (GameObject* gameObject = GetBgMap()->GetGameObject(guid))
173 action(gameObject);
174 };
175
176 gameobjectAction(_mainGateDoorGUIDs, [&](GameObject* gameobject) -> void
177 {
178 gameobject->UseDoorOrButton();
179 gameobject->DespawnOrUnsummon(20s);
180 });
181
182 gameobjectAction(_portcullisGUIDs, [&](GameObject* gameobject) -> void
183 {
184 gameobject->UseDoorOrButton();
185 });
186
187 gameobjectAction(_teleporterGUIDs, [&](GameObject* gameobject) -> void
188 {
190 });
191
192 gameobjectAction(_teleporterEffectGUIDs, [&](GameObject* gameobject) -> void
193 {
194 gameobject->SetGoState(GO_STATE_ACTIVE);
195 });
196
198 {
199 for (ObjectGuid const& guid : _wallGUIDs)
200 if (GameObject* gameobject = GetBgMap()->GetGameObject(guid))
202 });
203}
204
206{
208 return;
209
210 uint32 entry = unit->GetEntry();
212 {
215 }
216 else if (entry == NPC_OVERLORD_AGMAR)
217 {
220 }
221
222 //Achievement Mowed Down
223 // TO-DO: This should be done on the script of each vehicle of the BG.
224 if (unit->IsVehicle())
225 {
226 if (Player* killerPlayer = killer->GetCharmerOrOwnerPlayerOrPlayerItself())
227 killerPlayer->CastSpell(killerPlayer, SPELL_DESTROYED_VEHICLE_ACHIEVEMENT, true);
228 }
229}
230
232{
234 return;
235
236 Battleground::HandleKillPlayer(player, killer);
237
238 TeamId const victimTeamId = GetTeamIndexByTeamId(GetPlayerTeam(player->GetGUID()));
239 _factionReinforcements[victimTeamId] -= 1;
240
242
243 // we must end the battleground
244 if (_factionReinforcements[victimTeamId] < 1)
246}
247
249{
250 switch (id)
251 {
252 case GO_HORDE_GATE_1:
253 return BG_IC_H_FRONT;
254 case GO_HORDE_GATE_2:
255 return BG_IC_H_WEST;
256 case GO_HORDE_GATE_3:
257 return BG_IC_H_EAST;
259 return BG_IC_A_FRONT;
261 return BG_IC_A_WEST;
263 return BG_IC_A_EAST;
264 default:
265 return 0;
266 }
267}
268
270{
271 int32 uws = 0;
272
273 switch (id)
274 {
275 case GO_HORDE_GATE_1:
277 break;
278 case GO_HORDE_GATE_2:
280 break;
281 case GO_HORDE_GATE_3:
283 break;
286 break;
289 break;
292 break;
293 default:
294 break;
295 }
296 return uws;
297}
298
300{
306}
307
309{
310 switch (bannerId)
311 {
327 return NODE_TYPE_DOCKS;
333 return NODE_TYPE_HANGAR;
339 return NODE_TYPE_WORKSHOP;
345 return NODE_TYPE_QUARRY;
351 return NODE_TYPE_REFINERY;
352 default:
353 break;
354 }
355
356 return MAX_NODE_TYPES;
357}
358
360{
362 return;
363
364 switch (node.GetNodeInfo().NodeType)
365 {
366 case NODE_TYPE_QUARRY:
369 break;
370 case NODE_TYPE_HANGAR:
372 {
373 // Can't have this in spawngroup, creature is on a transport
375 _gunshipTeleportTarget = trigger->GetGUID();
376
377 transport->EnableMovement(true);
378 }
379
380 for (ObjectGuid const& guid : _cannonGUIDs[node.GetLastControlledTeam()])
381 if (Creature* cannon = GetBgMap()->GetCreature(guid))
382 cannon->SetUninteractible(false);
383 break;
384 default:
385 break;
386 }
387}
388
390{
392}
393
395{
397 if (creature->HasStringId("bg_ioc_faction_1735"))
399 else if (creature->HasStringId("bg_ioc_faction_1732"))
401
402 switch (creature->GetEntry())
403 {
405 _cannonGUIDs[TEAM_ALLIANCE].emplace_back(creature->GetGUID());
406 creature->SetUninteractible(true);
407 creature->SetControlled(true, UNIT_STATE_ROOT);
408 break;
410 _cannonGUIDs[TEAM_HORDE].emplace_back(creature->GetGUID());
411 creature->SetUninteractible(true);
412 creature->SetControlled(true, UNIT_STATE_ROOT);
413 break;
414 default:
415 break;
416 }
417}
418
420{
422
423 if (gameobject->IsDestructibleBuilding())
424 _wallGUIDs.emplace_back(gameobject->GetGUID());
425
426 if (gameobject->HasStringId("bg_ioc_faction_1735"))
428 else if (gameobject->HasStringId("bg_ioc_faction_1732"))
430
431 switch (gameobject->GetEntry())
432 {
433 case GO_TELEPORTER_1:
434 case GO_TELEPORTER_2:
435 case GO_TELEPORTER_3:
436 case GO_TELEPORTER_4:
437 _teleporterGUIDs.emplace_back(gameobject->GetGUID());
438 break;
441 _teleporterEffectGUIDs.emplace_back(gameobject->GetGUID());
442 break;
445 _mainGateDoorGUIDs.emplace_back(gameobject->GetGUID());
446 break;
449 _portcullisGUIDs.emplace_back(gameobject->GetGUID());
450 break;
451 case GO_KEEP_GATE_H:
452 _keepGateGUIDs[TEAM_HORDE].emplace_back(gameobject->GetGUID());
453 break;
454 case GO_KEEP_GATE_A:
455 case GO_KEEP_GATE_2_A:
456 _keepGateGUIDs[TEAM_ALLIANCE].emplace_back(gameobject->GetGUID());
457 break;
459 _keepBannerGUIDs[TEAM_ALLIANCE] = gameobject->GetGUID();
460 break;
462 _keepBannerGUIDs[TEAM_HORDE] = gameobject->GetGUID();
463 break;
464 default:
465 break;
466 }
467}
468
470{
472
473 if (Transport* transport = sTransportMgr->CreateTransport(GO_HORDE_GUNSHIP, map))
474 {
475 _gunshipGUIDs[TEAM_HORDE] = transport->GetGUID();
476 transport->EnableMovement(false);
477 }
478
479 if (Transport* transport = sTransportMgr->CreateTransport(GO_ALLIANCE_GUNSHIP, map))
480 {
481 _gunshipGUIDs[TEAM_ALLIANCE] = transport->GetGUID();
482 transport->EnableMovement(false);
483 }
484}
485
487{
488
489 switch (actionId)
490 {
493 break;
496 break;
497 default:
498 break;
499 }
500}
501
503{
504 if (!player || !banner)
505 return;
506
507 Team const playerTeam = GetPlayerTeam(player->GetGUID());
508 TeamId const playerTeamId = GetTeamIndexByTeamId(playerTeam);
509 ICNodePointType const nodeType = BannerToNodeType(banner->GetEntry());
510 if (nodeType == MAX_NODE_TYPES)
511 return;
512
513 ICNodePoint& node = *_nodePoints[nodeType];
514
515 bool assault = false;
516 bool defend = false;
517
518 switch (node.GetState())
519 {
521 assault = true;
522 break;
524 assault = playerTeamId != TEAM_HORDE;
525 break;
527 assault = playerTeamId != TEAM_ALLIANCE;
528 break;
530 defend = playerTeamId == node.GetLastControlledTeam();
531 assault = !defend && playerTeamId == TEAM_HORDE;
532 break;
534 defend = playerTeamId == node.GetLastControlledTeam();
535 assault = !defend && playerTeamId == TEAM_ALLIANCE;
536 break;
537 }
538
539 if (assault)
540 OnPlayerAssaultNode(player, node);
541 else if (defend)
542 OnPlayerDefendNode(player, node);
543
545}
546
548{
549 if (!player)
550 return;
551
552 Team const playerTeam = GetPlayerTeam(player->GetGUID());
553 TeamId const playerTeamId = GetTeamIndexByTeamId(playerTeam);
554
556 node.UpdateState(newState);
557
559
560 ChatMsg const messageType = playerTeamId == TEAM_ALLIANCE ? CHAT_MSG_BG_SYSTEM_ALLIANCE : CHAT_MSG_BG_SYSTEM_HORDE;
561 SendBroadcastText(node.GetNodeInfo().TextIds.Assaulted, messageType, player);
563
564 // apply side effects of each node, only if it wasn't neutral before
566 return;
567
568 switch (node.GetNodeInfo().NodeType)
569 {
570 case NODE_TYPE_HANGAR:
572 transport->EnableMovement(false);
573
574 for (ObjectGuid const& guid : _cannonGUIDs[node.GetLastControlledTeam()])
575 {
576 if (Creature* cannon = GetBgMap()->GetCreature(guid))
577 {
578 cannon->GetVehicleKit()->RemoveAllPassengers();
579 cannon->SetUninteractible(true);
580 }
581 }
582
583 // Despawn teleport trigger target
585 creature->DespawnOrUnsummon();
586 break;
587 default:
588 break;
589 }
590}
591
593{
594 if (!player)
595 return;
596
597 Team const playerTeam = GetPlayerTeam(player->GetGUID());
598 TeamId const playerTeamId = GetTeamIndexByTeamId(playerTeam);
599
603
604 ChatMsg const messageType = playerTeamId == TEAM_ALLIANCE ? CHAT_MSG_BG_SYSTEM_ALLIANCE : CHAT_MSG_BG_SYSTEM_HORDE;
605 SendBroadcastText(node.GetNodeInfo().TextIds.Defended, messageType, player);
607}
608
610{
611 Battleground::ProcessEvent(target, eventId, invoker);
612
613 if (GameObject* obj = Object::ToGameObject(target))
614 if (obj->GetGoType() == GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING)
615 if (obj->GetGOInfo()->destructibleBuilding.DestroyedEvent == eventId)
616 OnGateDestroyed(obj, invoker);
617}
618
620{
621 if (!banner)
622 return;
623
624 ICNodePointType const nodeType = BannerToNodeType(banner->GetEntry());
625 if (nodeType == MAX_NODE_TYPES)
626 return;
627
628 ICNodePoint& node = *_nodePoints[nodeType];
633
635
638 SendBroadcastText(textId, messageType);
640}
641
643{
645 int32 const wsGateOpen = GetWorldStateFromGateEntry(gate->GetEntry(), true);
646 int32 const wsGateClosed = GetWorldStateFromGateEntry(gate->GetEntry(), false);
647 if (wsGateOpen)
648 {
649 UpdateWorldState(wsGateClosed, 0);
650 UpdateWorldState(wsGateOpen, 1);
651 }
652
653 TeamId teamId = TEAM_NEUTRAL;
654 uint32 textId;
655 ChatMsg msgType;
656 switch (gate->GetEntry())
657 {
658 case GO_HORDE_GATE_1:
661 teamId = TEAM_HORDE;
662 break;
663 case GO_HORDE_GATE_2:
666 teamId = TEAM_HORDE;
667 break;
668 case GO_HORDE_GATE_3:
671 teamId = TEAM_HORDE;
672 break;
675 msgType = CHAT_MSG_BG_SYSTEM_HORDE;
676 teamId = TEAM_ALLIANCE;
677 break;
680 msgType = CHAT_MSG_BG_SYSTEM_HORDE;
681 teamId = TEAM_ALLIANCE;
682 break;
685 msgType = CHAT_MSG_BG_SYSTEM_HORDE;
686 teamId = TEAM_ALLIANCE;
687 break;
688 default:
689 return;
690 }
691
692 if (teamId != TEAM_NEUTRAL)
693 {
694 GuidVector const keepGates = _keepGateGUIDs[teamId];
695 ObjectGuid const bannerGuid = _keepBannerGUIDs[teamId];
696
697 for (ObjectGuid const& guid : keepGates)
698 if (GameObject* keepGate = GetBgMap()->GetGameObject(guid))
699 keepGate->UseDoorOrButton();
700
701 if (GameObject* banner = GetBgMap()->GetGameObject(bannerGuid))
702 banner->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
703 }
704
705 SendBroadcastText(textId, msgType, destroyer);
706}
IsleOfConquestPvpStats
@ PVP_STAT_BASES_DEFENDED
@ PVP_STAT_BASES_ASSAULTED
Position const GunshipTeleportTriggerPosition[2]
static constexpr Seconds IOC_RESOURCE_TIMER
IsleOfConquestGameObjects
@ GO_BANNER_DOCKS_CONTROLLED_A
@ GO_BANNER_DOCKS_CONTROLLED_H
@ GO_BANNER_HORDE_KEEP_CONTROLLED_A
@ GO_BANNER_REFINERY_CONTESTED_A
@ GO_TELEPORTER_1
@ GO_BANNER_QUARRY_CONTROLLED_A
@ GO_BANNER_HANGAR_CONTROLLED_A
@ GO_BANNER_ALLIANCE_KEEP_CONTROLLED_H
@ GO_TELEPORTER_3
@ GO_TELEPORTER_EFFECTS_A
@ GO_BANNER_WORKSHOP_CONTROLLED_N
@ GO_ALLIANCE_GATE_3
@ GO_TELEPORTER_4
@ GO_BANNER_ALLIANCE_KEEP_CONTROLLED_A
@ GO_DOODAD_PORTCULLISACTIVE02
@ GO_HORDE_GATE_2
@ GO_BANNER_REFINERY_CONTROLLED_H
@ GO_BANNER_WORKSHOP_CONTESTED_H
@ GO_HORDE_GUNSHIP
@ GO_KEEP_GATE_2_A
@ GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR01
@ GO_BANNER_WORKSHOP_CONTROLLED_H
@ GO_BANNER_HANGAR_CONTROLLED_H
@ GO_TELEPORTER_EFFECTS_H
@ GO_BANNER_WORKSHOP_CONTESTED_A
@ GO_BANNER_QUARRY_CONTESTED_A
@ GO_BANNER_QUARRY_CONTESTED_H
@ GO_BANNER_QUARRY_CONTROLLED_N
@ GO_HORDE_GATE_1
@ GO_BANNER_ALLIANCE_KEEP_CONTESTED_A
@ GO_BANNER_HORDE_KEEP_CONTROLLED_H
@ GO_BANNER_QUARRY_CONTROLLED_H
@ GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR01
@ GO_BANNER_DOCKS_CONTESTED_A
@ GO_DOODAD_HU_PORTCULLIS01
@ GO_BANNER_ALLIANCE_KEEP_CONTESTED_H
@ GO_BANNER_REFINERY_CONTROLLED_A
@ GO_BANNER_REFINERY_CONTESTED_H
@ GO_TELEPORTER_2
@ GO_ALLIANCE_GUNSHIP
@ GO_DOODAD_VR_PORTCULLIS01
@ GO_BANNER_HORDE_KEEP_CONTESTED_A
@ GO_BANNER_DOCKS_CONTROLLED_N
@ GO_HORDE_GATE_3
@ GO_ALLIANCE_GATE_2
@ GO_BANNER_WORKSHOP_CONTROLLED_A
@ GO_ALLIANCE_GATE_1
@ GO_BANNER_HANGAR_CONTROLLED_N
@ GO_BANNER_REFINERY_CONTROLLED_N
@ GO_BANNER_DOCKS_CONTESTED_H
@ GO_KEEP_GATE_H
@ GO_BANNER_HORDE_KEEP_CONTESTED_H
@ GO_KEEP_GATE_A
@ GO_BANNER_HANGAR_CONTESTED_H
@ GO_BANNER_HANGAR_CONTESTED_A
@ IC_EXPLOIT_TELEPORT_LOCATION_ALLIANCE
@ IC_EXPLOIT_TELEPORT_LOCATION_HORDE
@ RESOURCE_HONOR_AMOUNT
@ WINNER_HONOR_AMOUNT
@ 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
@ ACTION_IOC_INTERACT_CAPTURABLE_OBJECT
@ ACTION_IOC_CAPTURE_CAPTURABLE_OBJECT
ICNodePointType
@ NODE_TYPE_GRAVEYARD_A
@ NODE_TYPE_REFINERY
@ NODE_TYPE_DOCKS
@ NODE_TYPE_HANGAR
@ NODE_TYPE_QUARRY
@ MAX_NODE_TYPES
@ NODE_TYPE_WORKSHOP
@ NODE_TYPE_GRAVEYARD_H
@ NPC_HIGH_COMMANDER_HALFORD_WYRMBANE
@ NPC_WORLD_TRIGGER_NOT_FLOATING
@ NPC_OVERLORD_AGMAR
@ NPC_ALLIANCE_GUNSHIP_CANNON
@ NPC_HORDE_GUNSHIP_CANNON
@ BG_IC_H_FRONT
@ BG_IC_A_WEST
@ BG_IC_H_WEST
@ BG_IC_A_FRONT
@ BG_IC_A_EAST
@ BG_IC_H_EAST
@ SPELL_DESTROYED_VEHICLE_ACHIEVEMENT
@ BG_IC_GATE_WEST_A_WS_OPEN
@ BG_IC_GATE_FRONT_A_WS_OPEN
@ BG_IC_GATE_FRONT_H_WS_OPEN
@ BG_IC_GATE_FRONT_A_WS_CLOSED
@ BG_IC_GATE_EAST_H_WS_OPEN
@ BG_IC_GATE_WEST_H_WS_OPEN
@ BG_IC_GATE_FRONT_H_WS_CLOSED
@ BG_IC_ALLIANCE_REINFORCEMENTS
@ BG_IC_GATE_EAST_H_WS_CLOSED
@ BG_IC_GATE_WEST_H_WS_CLOSED
@ BG_IC_GATE_WEST_A_WS_CLOSED
@ BG_IC_GATE_EAST_A_WS_OPEN
@ BG_IC_HORDE_REINFORCEMENTS
@ BG_IC_GATE_EAST_A_WS_CLOSED
#define MAX_REINFORCEMENTS
@ BG_IC_GATE_DESTROYED
@ BG_IC_GATE_OK
const IoCStaticNodeInfo nodePointInitial[MAX_NODE_TYPES]
IsleOfConquestNodeState
@ STATUS_IN_PROGRESS
Definition: Battleground.h:167
uint8_t uint8
Definition: Define.h:144
int32_t int32
Definition: Define.h:138
uint32_t uint32
Definition: Define.h:142
std::chrono::seconds Seconds
Seconds shorthand typedef.
Definition: Duration.h:32
@ TEMPSUMMON_MANUAL_DESPAWN
Definition: ObjectDefines.h:70
std::vector< ObjectGuid > GuidVector
Definition: ObjectGuid.h:395
#define sObjectMgr
Definition: ObjectMgr.h:1946
@ GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING
TeamId
@ TEAM_NEUTRAL
@ TEAM_ALLIANCE
@ TEAM_HORDE
@ GO_DESTRUCTIBLE_DAMAGED
Team
@ 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
Definition: TransportMgr.h:183
@ UNIT_STATE_ROOT
Definition: Unit.h:265
GuidVector _teleporterEffectGUIDs
void HandleCaptureNodeAction(GameObject *banner)
static ICNodePointType BannerToNodeType(uint32 bannerId)
void OnPlayerDefendNode(Player *player, ICNodePoint &node)
std::array< uint16, PVP_TEAMS_COUNT > _factionReinforcements
std::array< ObjectGuid, PVP_TEAMS_COUNT > _keepBannerGUIDs
void OnGateDestroyed(GameObject *gate, WorldObject *destroyer)
WorldSafeLocsEntry const * GetExploitTeleportLocation(Team team) override
static int32 GetWorldStateFromGateEntry(uint32 id, bool open)
void HandleCapturedNodes(ICNodePoint &node)
std::array< GuidVector, PVP_TEAMS_COUNT > _cannonGUIDs
void HandleKillUnit(Creature *unit, Unit *killer) override
void OnGameObjectCreate(GameObject *gameobject) override
void UpdateNodeWorldState(ICNodePoint const &node)
GuidVector _portcullisGUIDs
void HandleKillPlayer(Player *player, Player *killer) override
BattlegroundIC(BattlegroundTemplate const *battlegroundTemplate)
void OnPlayerAssaultNode(Player *player, ICNodePoint &node)
TimeTracker _resourceTimer
static uint32 GetGateIDFromEntry(uint32 id)
~BattlegroundIC() override
ObjectGuid _gunshipTeleportTarget
GuidVector _wallGUIDs
std::array< BG_IC_GateState, 6 > _gateStatus
GuidVector _mainGateDoorGUIDs
void OnPlayerInteractWithBanner(Player *player, GameObject *banner)
TaskScheduler _scheduler
void DoAction(uint32 actionId, WorldObject *source, WorldObject *target) override
std::array< std::unique_ptr< ICNodePoint >, 7 > _nodePoints
void ProcessEvent(WorldObject *target, uint32 eventId, WorldObject *invoker) override
void StartingEventOpenDoors() override
void PostUpdateImpl(uint32 diff) override
Post-update hook.
std::array< ObjectGuid, PVP_TEAMS_COUNT > _gunshipGUIDs
void OnMapSet(BattlegroundMap *map) override
void OnCreatureCreate(Creature *creature) override
std::array< GuidVector, PVP_TEAMS_COUNT > _keepGateGUIDs
GuidVector _teleporterGUIDs
virtual void HandleKillPlayer(Player *player, Player *killer)
virtual void OnMapSet(BattlegroundMap *map)
Definition: Battleground.h:499
void RewardHonorToTeam(uint32 Honor, Team team)
BattlegroundMap * GetBgMap() const
BattlegroundMap * FindBgMap() const
Definition: Battleground.h:351
void ProcessEvent(WorldObject *, uint32, WorldObject *) override
Definition: Battleground.h:424
static TeamId GetTeamIndexByTeamId(Team team)
Definition: Battleground.h:392
void UpdateWorldState(int32 worldStateId, int32 value, bool hidden=false)
virtual void EndBattleground(Team winner)
void SendBroadcastText(uint32 id, ChatMsg msgType, WorldObject const *target=nullptr)
BattlegroundStatus GetStatus() const
Definition: Battleground.h:284
Team GetPlayerTeam(ObjectGuid guid) const
void UpdatePvpStat(Player *player, uint32 pvpStatId, uint32 value)
bool HasStringId(std::string_view id) const
Definition: Creature.cpp:3165
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:275
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:389
void UpdateState(IsleOfConquestNodeState state)
IsleOfConquestNodeState GetState() const
IoCStaticNodeInfo const & GetNodeInfo() const
TeamId GetLastControlledTeam() const
void UpdateSpawnGroupConditions()
Definition: Map.cpp:2504
GameObject * GetGameObject(ObjectGuid const &guid)
Definition: Map.cpp:3489
void UpdateAreaDependentAuras()
Definition: Map.cpp:4015
Player * ToPlayer()
Definition: Object.h:215
GameObject * ToGameObject()
Definition: Object.h:233
uint32 GetEntry() const
Definition: Object.h:161
static ObjectGuid GetGUID(Object const *o)
Definition: Object.h:159
TaskScheduler & Schedule(std::chrono::duration< Rep, Period > time, task_handler_t task)
TaskScheduler & Update(success_t const &callback=nullptr)
Definition: Unit.h:627
bool IsVehicle() const
Definition: Unit.h:743
void SetControlled(bool apply, UnitState state)
Definition: Unit.cpp:10911
void SetFaction(uint32 faction) override
Definition: Unit.h:859
void SetUninteractible(bool apply)
Definition: Unit.cpp:8147
Player * GetCharmerOrOwnerPlayerOrPlayerItself() const
Definition: Object.cpp:2252
virtual void OnCreatureCreate(Creature *)
Definition: ZoneScript.h:71
virtual void OnGameObjectCreate(GameObject *)
Definition: ZoneScript.h:74
TC_GAME_API GameObject * GetGameObject(WorldObject const &u, ObjectGuid const &guid)
TC_GAME_API Transport * GetTransport(WorldObject const &u, ObjectGuid const &guid)
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
struct IoCStaticNodeInfo::@196 WorldStateIds
ICNodePointType NodeType
struct IoCStaticNodeInfo::@195 TextIds
void Update(int32 diff)
Definition: Timer.h:121
bool Passed() const
Definition: Timer.h:131
void Reset(int32 expiry)
Definition: Timer.h:136