TrinityCore
BattlegroundIC.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 __BATTLEGROUNDIC_H
19#define __BATTLEGROUNDIC_H
20
21#include "Battleground.h"
22#include "Object.h"
23#include "TaskScheduler.h"
24#include "Timer.h"
25
27{
28 1732, // Alliance
29 1735 // Horde
30};
31
33{
34 NPC_HIGH_COMMANDER_HALFORD_WYRMBANE = 34924, // Alliance Boss
35 NPC_OVERLORD_AGMAR = 34922, // Horde Boss
36 NPC_KOR_KRON_GUARD = 34918, // horde guard
37 NPC_SEVEN_TH_LEGION_INFANTRY = 34919, // alliance guard
44 NPC_CATAPULT = 34793,
52};
53
54#define MAX_REINFORCEMENTS 400
55
57{
61};
62
64{
69};
70
72{
75};
76
78{
80 SPELL_QUARRY = 68720,
93};
94
96{
102
115
121
127
133
139
145
151
158
160{
165
167{
176
178{
184
185 // Graveyards
188
191
193{
194 Neutral,
195 ConflictA,
196 ConflictH,
199};
200
202{
203 {0.0f, 0.0f, 0.0f, 0.0f}, // no grave
204 {0.0f, 0.0f, 0.0f, 0.0f}, // no grave
205 {629.57f, -279.83f, 11.33f, 0.0f}, // dock
206 {780.729f, -1103.08f, 135.51f, 2.27f}, // hangar
207 {775.74f, -652.77f, 9.31f, 4.27f}, // workshop
208 {278.42f, -883.20f, 49.89f, 1.53f}, // alliance starting base
209 {1300.91f, -834.04f, 48.91f, 1.69f}, // horde starting base
210 {438.86f, -310.04f, 51.81f, 5.87f}, // last resort alliance
211 {1148.65f, -1250.98f, 16.60f, 1.74f}, // last resort horde
212};
213
215{
223
224// I.E: Hangar, Quarry, Graveyards .. etc
226{
228
229 struct
230 {
236
237 struct
238 {
245};
246
248{
249public:
250 explicit ICNodePoint(IsleOfConquestNodeState state, IoCStaticNodeInfo const& nodeInfo) : _state(state), _nodeInfo(nodeInfo)
251 {
252 switch (state)
253 {
256 break;
259 break;
264 break;
265 }
266 }
267
269
270 bool IsContested() const
271 {
273 }
274
276
277 IoCStaticNodeInfo const& GetNodeInfo() const { return _nodeInfo; }
278
280 {
281 switch (state)
282 {
285 break;
288 break;
291 break;
294 break;
295 }
296
297 _state = state;
298 }
299private:
303};
304
306{
314};
315
317{
321
323{
324 public:
325 BattlegroundIC(BattlegroundTemplate const* battlegroundTemplate);
326 ~BattlegroundIC() override;
327
328 /* inherited from BattlegroundClass */
329 void StartingEventOpenDoors() override;
330 void PostUpdateImpl(uint32 diff) override;
331
332 void HandleKillUnit(Creature* unit, Unit* killer) override;
333 void HandleKillPlayer(Player* player, Player* killer) override;
334
336
337 void OnCreatureCreate(Creature* creature) override;
338 void OnGameObjectCreate(GameObject* gameobject) override;
339 void OnMapSet(BattlegroundMap* map) override;
340
341 void DoAction(uint32 actionId, WorldObject* source, WorldObject* target) override;
342 void OnPlayerInteractWithBanner(Player* player, GameObject* banner);
343 void OnPlayerAssaultNode(Player* player, ICNodePoint& node);
344 void OnPlayerDefendNode(Player* player, ICNodePoint& node);
345 void ProcessEvent(WorldObject* target, uint32 eventId, WorldObject* invoker) override;
346
347 private:
348 std::array<uint16, PVP_TEAMS_COUNT> _factionReinforcements;
349 std::array<BG_IC_GateState, 6> _gateStatus;
350 std::array<std::unique_ptr<ICNodePoint>, 7> _nodePoints;
351 std::array<ObjectGuid, PVP_TEAMS_COUNT> _gunshipGUIDs;
357 std::array<GuidVector, PVP_TEAMS_COUNT> _cannonGUIDs;
358 std::array<GuidVector, PVP_TEAMS_COUNT> _keepGateGUIDs;
359 std::array<ObjectGuid, PVP_TEAMS_COUNT> _keepBannerGUIDs;
361
364
366 static int32 GetWorldStateFromGateEntry(uint32 id, bool open);
367
368 void UpdateNodeWorldState(ICNodePoint const& node);
371 void OnGateDestroyed(GameObject* gate, WorldObject* destroyer);
372
373 static ICNodePointType BannerToNodeType(uint32 bannerId);
374};
375
376#endif
BG_IC_ExploitTeleportLocations
@ IC_EXPLOIT_TELEPORT_LOCATION_ALLIANCE
@ IC_EXPLOIT_TELEPORT_LOCATION_HORDE
HonorRewards
@ RESOURCE_HONOR_AMOUNT
@ WINNER_HONOR_AMOUNT
ICBroadcastTexts
@ 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
Actions
@ ACTION_IOC_INTERACT_CAPTURABLE_OBJECT
@ ACTION_IOC_CAPTURE_CAPTURABLE_OBJECT
@ ACTION_GUNSHIP_READY
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
creaturesIC
@ NPC_WORLD_TRIGGER_ALLIANCE_FRIENDLY
@ NPC_SIEGE_ENGINE_H
@ NPC_WORLD_TRIGGER_HORDE_FRIENDLY
@ NPC_HORDE_GUNSHIP_CAPTAIN
@ NPC_KEEP_CANNON
@ NPC_KOR_KRON_GUARD
@ NPC_SIEGE_ENGINE_A
@ NPC_HIGH_COMMANDER_HALFORD_WYRMBANE
@ NPC_GLAIVE_THROWER_A
@ NPC_WORLD_TRIGGER_NOT_FLOATING
@ NPC_GLAIVE_THROWER_H
@ NPC_OVERLORD_AGMAR
@ NPC_DEMOLISHER
@ NPC_CATAPULT
@ NPC_ALLIANCE_GUNSHIP_CANNON
@ NPC_HORDE_GUNSHIP_CANNON
@ NPC_ALLIANCE_GUNSHIP_CAPTAIN
@ NPC_SEVEN_TH_LEGION_INFANTRY
ICDoorList
@ BG_IC_H_FRONT
@ BG_IC_A_WEST
@ BG_IC_H_WEST
@ BG_IC_A_FRONT
@ BG_IC_MAXDOOR
@ BG_IC_A_EAST
@ BG_IC_H_EAST
Position const BG_IC_SpiritGuidePos[MAX_NODE_TYPES+2]
@ SPELL_PARACHUTE
@ SPELL_LAUNCH_NO_FALLING_DAMAGE
@ SPELL_DRIVING_CREDIT_GLAIVE
@ SPELL_DRIVING_CREDIT_SIEGE
@ SPELL_PARACHUTE_IC
@ SPELL_SIMPLE_TELEPORT
@ SPELL_QUARRY
@ SPELL_SLOW_FALL
@ SPELL_DRIVING_CREDIT_DEMOLISHER
@ SPELL_BACK_DOOR_JOB_ACHIEVEMENT
@ SPELL_DESTROYED_VEHICLE_ACHIEVEMENT
@ SPELL_DRIVING_CREDIT_CATAPULT
@ SPELL_OIL_REFINERY
@ SPELL_TELEPORT_VISUAL_ONLY
const uint32 BG_IC_Factions[2]
ICWorldStates
@ BG_IC_HANGAR_CONTROLLED_H
@ BG_IC_ALLIANCE_REINFORCEMENTS_SET
@ 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_MAX_REINFORCEMENTS
@ 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_HORDE_REINFORCEMENTS_SET
@ 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
BG_IC_GateState
@ BG_IC_GATE_DESTROYED
@ BG_IC_GATE_OK
@ BG_IC_GATE_DAMAGED
const IoCStaticNodeInfo nodePointInitial[MAX_NODE_TYPES]
BannersTypes
@ BANNER_A_CONTROLLED
@ BANNER_H_CONTESTED
@ BANNER_H_CONTROLLED
@ BANNER_A_CONTESTED
IsleOfConquestNodeState
int32_t int32
Definition: Define.h:138
uint32_t uint32
Definition: Define.h:142
std::vector< ObjectGuid > GuidVector
Definition: ObjectGuid.h:395
Spells
Definition: PlayerAI.cpp:32
TeamId
@ TEAM_NEUTRAL
@ TEAM_ALLIANCE
@ TEAM_HORDE
Team
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
void UpdateState(IsleOfConquestNodeState state)
IsleOfConquestNodeState _state
IsleOfConquestNodeState GetState() const
IoCStaticNodeInfo const & GetNodeInfo() const
ICNodePoint(IsleOfConquestNodeState state, IoCStaticNodeInfo const &nodeInfo)
TeamId GetLastControlledTeam() const
TeamId _lastControlled
bool IsContested() const
IoCStaticNodeInfo _nodeInfo
Definition: Unit.h:627
struct IoCStaticNodeInfo::@196 WorldStateIds
ICNodePointType NodeType
struct IoCStaticNodeInfo::@195 TextIds