TrinityCore
Loading...
Searching...
No Matches
BattlefieldWG.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 BATTLEFIELD_WG_
19#define BATTLEFIELD_WG_
20
21#include "Battlefield.h"
22
23namespace WorldPackets
24{
25 namespace WorldState
26 {
27 class InitWorldStates;
28 }
29}
30
31class Group;
32class BattlefieldWG;
34
40
41typedef std::vector<BfWGGameObjectBuilding*> GameObjectBuildingVect;
42typedef std::vector<WintergraspWorkshop*> WorkshopVect;
43
87
106
126
134
135/*#########################
136 *####### Graveyards ######
137 *#########################*/
138
140{
141 public:
143
144 void SetTextId(uint32 textId) { m_GossipTextId = textId; }
145 uint32 GetTextId() const { return m_GossipTextId; }
146
147 protected:
149};
150
162
173
189
190/* ######################### *
191 * WintergraspCapturePoint *
192 * ######################### */
193
195{
196 public:
197 WintergraspCapturePoint(BattlefieldWG* battlefield, TeamId teamInControl);
198
199 void LinkToWorkshop(WintergraspWorkshop* workshop) { m_Workshop = workshop; }
200
201 void ChangeTeam(TeamId oldteam) override;
202 TeamId GetTeam() const { return m_team; }
203
204 protected:
206};
207
208/* ######################### *
209 * WinterGrasp Battlefield *
210 * ######################### */
211
213{
214 public:
222 void OnBattleStart() override;
223
233 void OnBattleEnd(bool endByTimer) override;
234
239 void OnStartGrouping() override;
240
249 void OnPlayerJoinWar(Player* player) override;
250
256 void OnPlayerLeaveWar(Player* player) override;
257
262 void OnPlayerLeaveZone(Player* player) override;
263
270 void OnPlayerEnterZone(Player* player) override;
271
278 bool Update(uint32 diff) override;
279
284 void OnCreatureCreate(Creature* creature) override;
285
290 void OnCreatureRemove(Creature* creature) override;
291
295 void OnGameObjectCreate(GameObject* go) override;
296
301 void BrokenWallOrTower(TeamId team, BfWGGameObjectBuilding* building);
302
308
315
316 void DoCompleteOrIncrementAchievement(uint32 achievement, Player* player, uint8 incrementNumber = 1) override;
317
318 void RemoveAurasFromPlayer(Player* player);
319
323 bool SetupBattlefield() override;
324
327
329 void SetRelic(ObjectGuid relicGUID) { m_titansRelicGUID = relicGUID; }
330
333
335 void SetRelicInteractible(bool allow) { m_isRelicInteractible = allow; }
336
338 void UpdateCounterVehicle(bool init);
339
340 void SendInitWorldStatesToAll() override;
342
343 void HandleKill(Player* killer, Unit* victim) override;
344 void OnUnitDeath(Unit* unit) override;
345 void HandlePromotion(Player* killer, Unit* killed);
346 void PromotePlayer(Player* killer);
347
348 void UpdateTenacity();
349 void ProcessEvent(WorldObject* obj, uint32 eventId) override;
350
351 bool FindAndRemoveVehicleFromList(Unit* vehicle);
352
353 // returns the graveyardId in the specified area.
354 uint8 GetSpiritGraveyardId(uint32 areaId) const;
355
356 uint32 GetData(uint32 data) const override;
357
358 protected:
360
362
365
368
372
374};
375
385
399
410
420
427
429{
430 // Invisible Stalker
457
464
469
473
497
498// ********************************************************************
499// * Structs using for Building, Graveyard, Workshop *
500// ********************************************************************
501
502// Structure for different buildings that can be destroyed during battle
504{
505private:
506 // WG object
508
509 // Linked gameobject
511
512 // the team that controls this point
514
517
519
521
522 // GameObject associations
524
525 // Creature associations
530
531public:
533 void Init(GameObject* go);
534
535 ObjectGuid const& GetGUID() const { return _buildGUID; }
536
537 void Rebuild();
538 void RebuildGate();
539
540 // Called when associated gameobject is damaged
541 void Damaged();
542
543 // Called when associated gameobject is destroyed
544 void Destroyed();
545
546 void UpdateCreatureAndGo();
547
548 void UpdateTurretAttack(bool disable);
549
551
552 void Save();
553};
554
555// Structure for the 6 workshop
557{
558private:
559 BattlefieldWG* _wg; // Pointer to wintergrasp
562 TeamId _teamControl; // Team witch control the workshop
563
565
566public:
568
569 uint8 GetId() const;
571
572 // Called on change faction in CapturePoint class
573 void GiveControlTo(TeamId teamId, bool init = false);
574
576
578
579 void Save();
580};
581
582#endif
WGGossipText
@ BATTLEFIELD_WG_GOSSIPTEXT_GY_HORDE
@ BATTLEFIELD_WG_GOSSIPTEXT_GY_SW
@ BATTLEFIELD_WG_GOSSIPTEXT_GY_SE
@ BATTLEFIELD_WG_GOSSIPTEXT_GY_NE
@ BATTLEFIELD_WG_GOSSIPTEXT_GY_NW
@ BATTLEFIELD_WG_GOSSIPTEXT_GY_ALLIANCE
@ BATTLEFIELD_WG_GOSSIPTEXT_GY_KEEP
WintergraspGameObjectBuildingType
@ BATTLEFIELD_WG_OBJECTTYPE_DOOR
@ BATTLEFIELD_WG_OBJECTTYPE_TOWER
@ BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER
@ BATTLEFIELD_WG_OBJECTTYPE_WALL
@ BATTLEFIELD_WG_OBJECTTYPE_DOOR_LAST
@ BATTLEFIELD_WG_OBJECTTYPE_TITANRELIC
WintergraspNpcs
@ NPC_WINTERGRASP_SIEGE_ENGINE_HORDE
@ NPC_WINTERGRASP_CATAPULT
@ NPC_WINTERGRASP_DEMOLISHER
@ NPC_WINTERGRASP_TOWER_CANNON
@ BATTLEFIELD_WG_NPC_GUARD_H
@ NPC_DWARVEN_SPIRIT_GUIDE
@ NPC_TAUNKA_SPIRIT_GUIDE
@ BATTLEFIELD_WG_NPC_STALKER
@ BATTLEFIELD_WG_NPC_GUARD_A
@ NPC_WINTERGRASP_SIEGE_ENGINE_ALLIANCE
WintergraspTowerIds
@ BATTLEFIELD_WG_TOWER_WINTER_S_EDGE
@ BATTLEFIELD_WG_TOWER_SHADOWSIGHT
@ BATTLEFIELD_WG_TOWER_FORTRESS_SE
@ BATTLEFIELD_WG_TOWER_FORTRESS_NW
@ BATTLEFIELD_WG_TOWER_FLAMEWATCH
@ BATTLEFIELD_WG_TOWER_FORTRESS_NE
@ BATTLEFIELD_WG_TOWER_FORTRESS_SW
WintergraspSpells
@ SPELL_HORDE_FLAG
@ SPELL_GREATEST_HONOR
@ SPELL_ESSENCE_OF_WINTERGRASP
@ SPELL_VICTORY_AURA
@ SPELL_WINTERGRASP_RESTRICTED_FLIGHT_AREA
@ SPELL_RECRUIT
@ SPELL_TELEPORT_FORTRESS
@ SPELL_TENACITY
@ SPELL_ALLIANCE_CONTROLS_FACTORY_PHASE_SHIFT
@ SPELL_HORDE_CONTROLS_FACTORY_PHASE_SHIFT
@ SPELL_GRAB_PASSENGER
@ SPELL_TELEPORT_BRIDGE
@ SPELL_HORDE_CONTROL_PHASE_SHIFT
@ SPELL_VICTORY_REWARD
@ SPELL_CORPORAL
@ SPELL_GREATER_HONOR
@ SPELL_TELEPORT_DALARAN
@ SPELL_DAMAGED_BUILDING
@ SPELL_GREAT_HONOR
@ SPELL_ALLIANCE_CONTROL_PHASE_SHIFT
@ SPELL_WINTERGRASP_WATER
@ SPELL_INTACT_BUILDING
@ SPELL_DESTROYED_TOWER
@ SPELL_SPIRITUAL_IMMUNITY
@ SPELL_ALLIANCE_FLAG
@ SPELL_DEFEAT_REWARD
@ SPELL_TENACITY_VEHICLE
@ SPELL_LIEUTENANT
@ SPELL_DAMAGED_TOWER
@ SPELL_TOWER_CONTROL
WintergraspTeamControl
@ BATTLEFIELD_WG_TEAM_HORDE
@ BATTLEFIELD_WG_TEAM_NEUTRAL
@ BATTLEFIELD_WG_TEAM_ALLIANCE
std::vector< BfWGGameObjectBuilding * > GameObjectBuildingVect
WintergraspQuests
@ QUEST_CREDIT_TOWERS_DESTROYED
@ QUEST_VICTORY_WINTERGRASP_A
@ QUEST_CREDIT_DEFEND_SIEGE
@ QUEST_VICTORY_WINTERGRASP_H
WintergraspGameObject
@ GO_WINTERGRASP_FACTORY_BANNER_SW
@ GO_WINTERGRASP_FORTRESS_TOWER_3
@ GO_WINTERGRASP_FORTRESS_TOWER_2
@ GO_WINTERGRASP_FLAMEWATCH_TOWER
@ GO_WINTERGRASP_FORTRESS_TOWER_4
@ GO_WINTERGRASP_SHADOWSIGHT_TOWER
@ GO_WINTERGRASP_FACTORY_BANNER_NW
@ GO_WINTERGRASP_FACTORY_BANNER_NE
@ GO_WINTERGRASP_TITAN_S_RELIC
@ GO_WINTERGRASP_FORTRESS_TOWER_1
@ GO_WINTERGRASP_FACTORY_BANNER_SE
@ GO_WINTERGRASP_FORTRESS_GATE
@ GO_WINTERGRASP_WINTER_S_EDGE_TOWER
@ GO_WINTERGRASP_VAULT_GATE
@ GO_WINTERGRASP_KEEP_COLLISION_WALL
WGGraveyardId
@ BATTLEFIELD_WG_GY_WORKSHOP_NE
@ BATTLEFIELD_WG_GY_KEEP
@ BATTLEFIELD_WG_GRAVEYARD_MAX
@ BATTLEFIELD_WG_GY_WORKSHOP_SW
@ BATTLEFIELD_WG_GY_WORKSHOP_SE
@ BATTLEFIELD_WG_GY_HORDE
@ BATTLEFIELD_WG_GY_WORKSHOP_NW
@ BATTLEFIELD_WG_GY_ALLIANCE
WintergraspAchievements
@ ACHIEVEMENTS_WG_TOWER_CANNON_KILL
@ ACHIEVEMENTS_STONE_KEEPER_1000
@ ACHIEVEMENTS_DESTRUCTION_DERBY_A
@ ACHIEVEMENTS_WIN_WG
@ ACHIEVEMENTS_WG_GNOMESLAUGHTER
@ ACHIEVEMENTS_STONE_KEEPER_50
@ ACHIEVEMENTS_DESTRUCTION_DERBY_H
@ ACHIEVEMENTS_STONE_KEEPER_100
@ ACHIEVEMENTS_WIN_WG_TIMER_10
@ ACHIEVEMENTS_WIN_WG_100
@ ACHIEVEMENTS_STONE_KEEPER_250
@ ACHIEVEMENTS_WG_MASTER_H
@ ACHIEVEMENTS_WG_RANGER
@ ACHIEVEMENTS_WG_MASTER_A
@ ACHIEVEMENTS_STONE_KEEPER_500
@ ACHIEVEMENTS_WG_TOWER_DESTROY
WintergraspText
@ BATTLEFIELD_WG_TEXT_WESTSPARK_ATTACK_HORDE
@ BATTLEFIELD_WG_TEXT_WESTSPARK_CAPTURE_HORDE
@ BATTLEFIELD_WG_TEXT_FORTRESS_DEFEND_HORDE
@ BATTLEFIELD_WG_TEXT_RANK_CORPORAL
@ BATTLEFIELD_WG_TEXT_SUNKEN_RING_CAPTURE_ALLIANCE
@ BATTLEFIELD_WG_TEXT_SUNKEN_RING_ATTACK_HORDE
@ BATTLEFIELD_WG_TEXT_EASTSPARK_CAPTURE_HORDE
@ BATTLEFIELD_WG_TEXT_WESTSPARK_ATTACK_ALLIANCE
@ BATTLEFIELD_WG_TEXT_EASTERN_TOWER_DESTROY
@ BATTLEFIELD_WG_TEXT_BROKEN_TEMPLE_ATTACK_ALLIANCE
@ BATTLEFIELD_WG_TEXT_BROKEN_TEMPLE_CAPTURE_ALLIANCE
@ BATTLEFIELD_WG_TEXT_WESTERN_TOWER_DAMAGE
@ BATTLEFIELD_WG_TEXT_START_BATTLE
@ BATTLEFIELD_WG_TEXT_EASTSPARK_ATTACK_HORDE
@ BATTLEFIELD_WG_TEXT_EASTSPARK_CAPTURE_ALLIANCE
@ BATTLEFIELD_WG_TEXT_RANK_FIRST_LIEUTENANT
@ BATTLEFIELD_WG_TEXT_NE_KEEPTOWER_DAMAGE
@ BATTLEFIELD_WG_TEXT_BROKEN_TEMPLE_CAPTURE_HORDE
@ BATTLEFIELD_WG_TEXT_FORTRESS_CAPTURE_ALLIANCE
@ BATTLEFIELD_WG_TEXT_SE_KEEPTOWER_DAMAGE
@ BATTLEFIELD_WG_TEXT_EASTERN_TOWER_DAMAGE
@ BATTLEFIELD_WG_TEXT_SE_KEEPTOWER_DESTROY
@ BATTLEFIELD_WG_TEXT_NW_KEEPTOWER_DESTROY
@ BATTLEFIELD_WG_TEXT_START_GROUPING
@ BATTLEFIELD_WG_TEXT_SUNKEN_RING_ATTACK_ALLIANCE
@ BATTLEFIELD_WG_TEXT_SW_KEEPTOWER_DESTROY
@ BATTLEFIELD_WG_TEXT_SUNKEN_RING_CAPTURE_HORDE
@ BATTLEFIELD_WG_TEXT_WESTSPARK_CAPTURE_ALLIANCE
@ BATTLEFIELD_WG_TEXT_EASTSPARK_ATTACK_ALLIANCE
@ BATTLEFIELD_WG_TEXT_NE_KEEPTOWER_DESTROY
@ BATTLEFIELD_WG_TEXT_FORTRESS_DEFEND_ALLIANCE
@ BATTLEFIELD_WG_TEXT_SOUTHERN_TOWER_DESTROY
@ BATTLEFIELD_WG_TEXT_NW_KEEPTOWER_DAMAGE
@ BATTLEFIELD_WG_TEXT_FORTRESS_CAPTURE_HORDE
@ BATTLEFIELD_WG_TEXT_SW_KEEPTOWER_DAMAGE
@ BATTLEFIELD_WG_TEXT_BROKEN_TEMPLE_ATTACK_HORDE
@ BATTLEFIELD_WG_TEXT_SOUTHERN_TOWER_DAMAGE
@ BATTLEFIELD_WG_TEXT_WESTERN_TOWER_DESTROY
WintergraspData
@ BATTLEFIELD_WG_DATA_WON_H
@ BATTLEFIELD_WG_MAPID
@ BATTLEFIELD_WG_DATA_VEHICLE_A
@ BATTLEFIELD_WG_DATA_MAX_VEHICLE_A
@ BATTLEFIELD_WG_DATA_MAX
@ BATTLEFIELD_WG_DATA_DAMAGED_TOWER_DEF
@ BATTLEFIELD_WG_DATA_DEF_A
@ BATTLEFIELD_WG_DATA_VEHICLE_H
@ BATTLEFIELD_WG_DATA_DEF_H
@ BATTLEFIELD_WG_DATA_BROKEN_TOWER_ATT
@ BATTLEFIELD_WG_DATA_MAX_VEHICLE_H
@ BATTLEFIELD_WG_DATA_DAMAGED_TOWER_ATT
@ BATTLEFIELD_WG_DATA_BROKEN_TOWER_DEF
@ BATTLEFIELD_WG_DATA_WON_A
WintergraspGameObjectState
@ BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_DAMAGE
@ BATTLEFIELD_WG_OBJECTSTATE_NONE
@ BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_DESTROY
@ BATTLEFIELD_WG_OBJECTSTATE_HORDE_DESTROY
@ BATTLEFIELD_WG_OBJECTSTATE_NEUTRAL_DESTROY
@ BATTLEFIELD_WG_OBJECTSTATE_NEUTRAL_INTACT
@ BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_INTACT
@ BATTLEFIELD_WG_OBJECTSTATE_HORDE_INTACT
@ BATTLEFIELD_WG_OBJECTSTATE_NEUTRAL_DAMAGE
@ BATTLEFIELD_WG_OBJECTSTATE_HORDE_DAMAGE
WintergraspWorkshopIds
@ BATTLEFIELD_WG_WORKSHOP_SE
@ BATTLEFIELD_WG_WORKSHOP_KEEP_WEST
@ BATTLEFIELD_WG_WORKSHOP_KEEP_EAST
@ BATTLEFIELD_WG_WORKSHOP_NW
@ BATTLEFIELD_WG_WORKSHOP_SW
@ BATTLEFIELD_WG_WORKSHOP_NE
std::vector< WintergraspWorkshop * > WorkshopVect
uint8_t uint8
Definition Define.h:135
uint32_t uint32
Definition Define.h:133
std::unordered_set< ObjectGuid > GuidUnorderedSet
Definition ObjectGuid.h:263
std::vector< ObjectGuid > GuidVector
Definition ObjectGuid.h:262
TeamId
uint8 constexpr PVP_TEAMS_COUNT
WorldState
ObjectGuid m_titansRelicGUID
uint32 m_tenacityStack
void OnPlayerLeaveZone(Player *player) override
Called when player left the WG zone.
void OnUnitDeath(Unit *unit) override
GuidVector DefenderPortalList[PVP_TEAMS_COUNT]
void RemoveAurasFromPlayer(Player *player)
void UpdateCounterVehicle(bool init)
void OnBattleEnd(bool endByTimer) override
Called when battle end.
void OnStartGrouping() override
Called when grouping starts (15 minutes before battlestart)
GameObject * GetRelic()
Return pointer to relic object.
WorkshopVect Workshops
void PromotePlayer(Player *killer)
void OnPlayerLeaveWar(Player *player) override
Called when player left the battle.
void UpdateVehicleCountWG()
void SetRelicInteractible(bool allow)
Define if player can interact with the relic.
bool SetupBattlefield() override
Called when battlefield is setup, at server start.
void UpdatedDestroyedTowerCount(TeamId team)
Called when tower is broken.
void BrokenWallOrTower(TeamId team, BfWGGameObjectBuilding *building)
Called when a wall/tower is broken.
void OnBattleStart() override
Called when the battle start.
GuidUnorderedSet m_vehicles[PVP_TEAMS_COUNT]
void OnPlayerEnterZone(Player *player) override
Called when player enters in WG zone.
bool m_isRelicInteractible
void SendInitWorldStatesToAll() override
Send all worldstate data to all player in zone.
bool CanInteractWithRelic()
Check if players can interact with the relic (Only if the last door has been broken)
void UpdateDamagedTowerCount(TeamId team)
Called when a tower is damaged.
GameObjectBuildingVect BuildingsInZone
void SetRelic(ObjectGuid relicGUID)
Define relic object.
bool Update(uint32 diff) override
Called for update battlefield data.
void OnCreatureRemove(Creature *creature) override
Called when a creature is removed.
void OnPlayerJoinWar(Player *player) override
Called when player accept invite to join battle.
void OnCreatureCreate(Creature *creature) override
Called when a creature is created.
bool FindAndRemoveVehicleFromList(Unit *vehicle)
uint8 GetSpiritGraveyardId(uint32 areaId) const
void HandleKill(Player *killer, Unit *victim) override
Called when a Unit is kill in battlefield zone.
void OnGameObjectCreate(GameObject *go) override
Called when a gameobject is created.
uint32 GetData(uint32 data) const override
void DoCompleteOrIncrementAchievement(uint32 achievement, Player *player, uint8 incrementNumber=1) override
void ProcessEvent(WorldObject *obj, uint32 eventId) override
void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates &packet) override
GuidVector CanonList
void HandlePromotion(Player *killer, Unit *killed)
TeamId m_tenacityTeam
GameObject * GetGameObject(ObjectGuid guid)
void SetTextId(uint32 textId)
uint32 GetTextId() const
uint32 m_GossipTextId
Definition Group.h:165
Definition Unit.h:769
void ChangeTeam(TeamId oldteam) override
WintergraspWorkshop * m_Workshop
void LinkToWorkshop(WintergraspWorkshop *workshop)
GuidVector m_CreatureBottomList[PVP_TEAMS_COUNT]
StaticWintergraspTowerInfo const * _staticTowerInfo
void UpdateTurretAttack(bool disable)
void Init(GameObject *go)
WintergraspGameObjectState _state
ObjectGuid const & GetGUID() const
WintergraspGameObjectBuildingType _type
GuidVector m_TowerCannonBottomList
GuidVector m_CreatureTopList[PVP_TEAMS_COUNT]
void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates &packet)
GuidVector m_GameObjectList[PVP_TEAMS_COUNT]
BattlefieldWG * _wg
WintergraspGameObjectState _state
void GiveControlTo(TeamId teamId, bool init=false)
StaticWintergraspWorkshopInfo const * _staticInfo
void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates &packet)
TeamId GetTeamControl() const