Battlefields: Move BF scripts out of game

This commit introduces the usual script interface
for battlefields.
This commit is contained in:
Carbenium authored and Ovahlord committed 2022-10-09 00:35:07 +02:00
1 parent d5f7d7b754
commit 0ef220fca0
17 files changed
+320 -206

No files matched your search

File diff suppressed because it is too large. Load diff
@@ -0,0 +1,427 @@
/*
* This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef BATTLEFIELD_TB_
#define BATTLEFIELD_TB_
#include "Battlefield.h"
class BattlefieldTB;
class TolBaradCapturePoint;
namespace WorldPackets
{
namespace WorldState
{
class InitWorldStates;
}
}
enum TolBaradInfo
{
BATTLEFIELD_TB_MAPID = 732, // Tol Barad
BATTLEFIELD_TB_ZONEID = 5095, // Tol Barad
};
enum TolBaradData
{
BATTLEFIELD_TB_DATA_BUILDINGS_CAPTURED,
BATTLEFIELD_TB_DATA_TOWERS_INTACT,
BATTLEFIELD_TB_DATA_TOWERS_DESTROYED,
BATTLEFIELD_TB_DATA_MAX,
};
enum TolBaradSpells
{
// Quest completion
SPELL_VICTORY_ALLIANCE = 94665,
SPELL_VICTORY_HORDE = 94763,
// Rewards
SPELL_REWARD_VICTORY_ALLIANCE = 89789,
SPELL_REWARD_VICTORY_HORDE = 89791,
SPELL_REWARD_DEFEAT = 89793,
SPELL_REWARD_TOWER_INTACT = 89794,
SPELL_REWARD_TOWER_DAMAGED = 89795,
SPELL_REWARD_TOWER_DESTROYED = 89796,
// Player buffs
SPELL_TB_SLOW_FALL = 88473,
SPELL_TB_VETERAN = 84655,
SPELL_TOWER_ATTACK_BONUS = 82629,
SPELL_TB_SPIRIT_HEAL_CHANNEL = 22011, // this spell replaces m_LastResurrectTimer in Battlefield.cpp?
SPELL_TB_SPIRITUAL_IMMUNITY = 95332,
// Vehicle
SPELL_THICK_LAYER_OF_RUST = 95330,
SPELL_RIDE_TOL_BARAD_VEHICLE = 84754,
SPELL_DEPLOY_SIEGE_MODE = 84974,
SPELL_SIEGE_CANNON_AURA = 85167, // aura, periodically triggers spell 85122
// SPELL_SIEGE_CANNON_EFFECT = 85122, // targets random
// SPELL_SIEGE_CANNON_DAMAGE = 85125,
SPELL_LEAVE_SIEGE_MODE = 85078,
SPELL_TOWER_RANGE_FINDER_PERIODIC = 85671,
SPELL_TOWER_RANGE_FINDER = 84979,
// Teleportation spells
SPELL_TB_THE_HOLE_TELEPORT = 89035,
SPELL_TB_D_BLOCK_TELEPORT = 89037,
SPELL_TB_CURSED_DEPTHS_TELEPORT = 89038,
};
enum TolBaradNpcs
{
// Cursed Depths area
NPC_TOLBARAD_CAPTIVE_SPIRIT = 47531,
NPC_TOLBARAD_CELLBLOCK_OOZE = 47534,
NPC_TOLBARAD_ARCHMAGE_GALUS = 47537,
NPC_TOLBARAD_GHASTLY_CONVICT = 47590,
// D-Block area
NPC_TOLBARAD_SHIVARRA_DESTROYER = 47540,
NPC_TOLBARAD_CELL_WATCHER = 47542,
NPC_TOLBARAD_SVARNOS = 47544,
NPC_TOLBARAD_JAILED_WRATHGUARD = 47548,
NPC_TOLBARAD_IMPRISONED_IMP = 47549,
// The Hole area
NPC_TOLBARAD_WARDEN_SILVA = 48036,
NPC_TOLBARAD_WARDEN_GUARD = 47561,
NPC_TOLBARAD_IMPRISONED_WORKER = 47550,
NPC_TOLBARAD_EXILED_MAGE = 47552,
// Other
NPC_CROCOLISK = 47591,
NPC_PROBLIM = 47593,
// Graveyard spirits
NPC_TB_GY_SPIRIT_BARADIN_HOLD_A = 45066,
NPC_TB_GY_SPIRIT_BARADIN_HOLD_H = 45067,
NPC_TB_GY_SPIRIT_IRONCLAD_GARRISON_A = 45068,
NPC_TB_GY_SPIRIT_WARDENS_VIGIL_A = 45069,
NPC_TB_GY_SPIRIT_EAST_SPIRE_A = 45070,
NPC_TB_GY_SPIRIT_SOUTH_SPIRE_A = 45071,
NPC_TB_GY_SPIRIT_WEST_SPIRE_A = 45072,
NPC_TB_GY_SPIRIT_SLAGWORKS_A = 45073,
NPC_TB_GY_SPIRIT_IRONCLAD_GARRISON_H = 45074,
NPC_TB_GY_SPIRIT_WARDENS_VIGIL_H = 45075,
NPC_TB_GY_SPIRIT_SLAGWORKS_H = 45076,
NPC_TB_GY_SPIRIT_WEST_SPIRE_H = 45077,
NPC_TB_GY_SPIRIT_EAST_SPIRE_H = 45078,
NPC_TB_GY_SPIRIT_SOUTH_SPIRE_H = 45079,
// Stalker, dummies
NPC_DEBUG_ANNOUNCER = 43679,
NPC_TOWER_RANGE_FINDER = 45492,
NPC_TOWER_CANNON_TARGET = 45561,
NPC_SIEGE_ENGINE_TURRET = 45564,
};
enum TolBaradGOs
{
// Towers
GO_WEST_SPIRE = 204588,
GO_EAST_SPIRE = 204589,
GO_SOUTH_SPIRE = 204590,
GO_CAPTURE_POINT_NORTH_A_DEFENDING = 205068,
GO_CAPTURE_POINT_NORTH_H_DEFENDING = 205096,
GO_CAPTURE_POINT_EAST_A_DEFENDING = 205138,
GO_CAPTURE_POINT_EAST_H_DEFENDING = 205139,
GO_CAPTURE_POINT_WEST_A_DEFENDING = 205101,
GO_CAPTURE_POINT_WEST_H_DEFENDING = 205103,
// Entrance gates and instance door
GO_TOLBARAD_GATES = 206598,
GO_TOLBARAD_DOOR = 206576,
// Other
GO_TB_MEETING_STONE = 206668,
GO_TB_INSTANCE_VISUAL_1 = 207746,
GO_TB_INSTANCE_VISUAL_2 = 207747,
GO_TB_INSTANCE_VISUAL_3 = 210114,
GO_TB_INSTANCE_VISUAL_4 = 210115,
};
enum TolBaradGOArtKit
{
TB_GO_ARTKIT_FLAG_NONE = 0,
TB_GO_ARTKIT_FLAG_HORDE = 1,
TB_GO_ARTKIT_FLAG_ALLIANCE = 2,
};
enum TolBaradText
{
// DEBUG Announcer
TB_TEXT_EAST_SPIRE_DAMAGED = 1,
TB_TEXT_EAST_SPIRE_DESTROYED = 2,
TB_TEXT_WEST_SPIRE_DAMAGED = 3,
TB_TEXT_WEST_SPIRE_DESTROYED = 4,
TB_TEXT_SOUTH_SPIRE_DAMAGED = 5,
TB_TEXT_SOUTH_SPIRE_DESTROYED = 6,
TB_TEXT_GARRISON_ALLIANCE_GAINED = 7,
TB_TEXT_GARRISON_ALLIANCE_LOST = 8,
TB_TEXT_GARRISON_HORDE_GAINED = 9,
TB_TEXT_GARRISON_HORDE_LOST = 10,
TB_TEXT_VIGIL_ALLIANCE_GAINED = 11,
TB_TEXT_VIGIL_ALLIANCE_LOST = 12,
TB_TEXT_VIGIL_HORDE_GAINED = 13,
TB_TEXT_VIGIL_HORDE_LOST = 14,
TB_TEXT_SLAGWORKS_ALLIANCE_GAINED = 15,
TB_TEXT_SLAGWORKS_ALLIANCE_LOST = 16,
TB_TEXT_SLAGWORKS_HORDE_GAINED = 17,
TB_TEXT_SLAGWORKS_HORDE_LOST = 18,
TB_TEXT_FORTRESS_DEFEND_ALLIANCE = 19,
TB_TEXT_FORTRESS_DEFEND_HORDE = 20,
TB_TEXT_FORTRESS_CAPTURE_ALLIANCE = 21,
TB_TEXT_FORTRESS_CAPTURE_HORDE = 22,
TB_TEXT_VEHICLE_OUTSIDE_WARNING = 23,
TB_TEXT_PREPARATIONS_IN_5_MIN = 24,
TB_TEXT_PREPARATIONS_IN_2_MIN = 25,
TB_TEXT_PREPARATIONS_IN_1_MIN = 26,
};
enum TolBaradEvent
{
EVENT_COUNT_CAPTURED_BASE = 1,
};
// Quest Infantry NPCs
enum TBQuestInfantryEntry
{
NPC_ALLIANCE_WARRIOR_INFANTRY = 47599,
NPC_ALLIANCE_PALADIN_INFANTRY = 47600,
NPC_ALLIANCE_HUNTER_INFANTRY = 47595,
NPC_ALLIANCE_MAGE_INFANTRY = 47598,
NPC_HORDE_DRUID_INFANTRY = 47607,
NPC_HORDE_MAGE_INFANTRY = 47608,
NPC_HORDE_ROGUE_INFANTRY = 47609,
NPC_HORDE_SHAMAN_INFANTRY = 47610,
};
// Guard NPCs
enum TBGuardEntry
{
NPC_BARADIN_GUARD = 51165,
NPC_HELLSCREAMS_SENTRY = 51166,
};
enum TBFactionNPCEntry
{
// Guards
NPC_BARADIN_GUARD_1 = 47324,
NPC_BARADIN_GUARD_2 = 47325,
NPC_BARADIN_GRUNT_1 = 47335,
NPC_BARADIN_GRUNT_2 = 47336,
// Questgivers
NPC_SERGEANT_PARKER = 48066, // Everytime
NPC_COMMANDER_STEVENS = 48039, // One of these three
NPC_2ND_LIEUTENANT_WANSWORTH = 48061,
NPC_MARSHAL_FALLOWS = 48074,
NPC_COMMANDER_ZANOTH = 48069, // Everytime!
NPC_STAFF_SERGEANT_LAZGAR = 48062, // One of these three
NPC_DRILLMASTER_RAZGOTH = 48070,
NPC_PRIVATE_GARNOTH = 48071,
// Portal summoners
NPC_MAVEN_ZARA = 50173,
NPC_RHAGHA = 50167,
};
// Questing
enum TBQuesting
{
CELLBLOCK_THE_HOLE = 0, // The Hole area
CELLBLOCK_D_BLOCK = 1, // D-Block area
CELLBLOCK_CURSED_DEPTHS = 2, // Cursed Depths area
CELLBLOCK_MAX = 3,
CELLBLOCK_NONE,
AREA_THE_HOLE = 5659,
AREA_D_BLOCK = 5657,
AREA_CURSED_DEPTHS = 5658,
GO_GATE_TO_THE_HOLE = 206845,
GO_GATE_D_BLOCK = 206844,
GO_CURSED_DEPTHS_GATE = 206843,
GO_CRATE_OF_CELLBLOCK_RATIONS = 206996,
GO_CURSED_SHACKLES = 206905,
GO_DUSTY_PRISON_JOURNAL = 206890,
};
// Capture Points
enum TBCapturePointId
{
TB_BASE_IRONCLAD_GARRISON = 0,
TB_BASE_WARDENS_VIGIL = 1,
TB_BASE_SLAGWORKS = 2,
TB_BASE_COUNT = 3,
};
// Towers
enum TBTowerId
{
TB_TOWER_EAST_SPIRE = 0,
TB_TOWER_SOUTH_SPIRE = 1,
TB_TOWER_WEST_SPIRE = 2,
TB_TOWERS_COUNT = 3,
};
// Vehicles
enum TBVehicles
{
NPC_ABANDONED_SIEGE_ENGINE = 45344,
};
// Banners
enum TBFactionBannerEntry
{
GO_BARADINS_WARDEN_BANNER = 207391, // Alliance banner
GO_HELLSCREAM_REACH_BANNER = 207400, // Horde banner
};
// Portals
enum TBPortalEntry
{
TB_PORTAL_ALLIANCE = 208227, // Portal to Stormwind
TB_PORTAL_HORDE = 208226, // Portal to Orgrimmar
};
/* ################### *
* Tol Barad graveyard *
* ################### */
enum TBGraveyardAreaId
{
// Tol Barad
TB_GY_BARADIN_HOLD = 1789,
TB_GY_IRONCLAD_GARRISON = 1783,
TB_GY_WARDENS_VIGIL = 1785,
TB_GY_SLAGWORKS = 1787,
TB_GY_WEST_SPIRE = 1784,
TB_GY_SOUTH_SPIRE = 1786,
TB_GY_EAST_SPIRE = 1788,
BATTLEFIELD_TB_GRAVEYARD_MAX = 7,
// Tol Barad Peninsula
TBP_GY_ALLIANCE_DAILY = 1808,
TBP_GY_HORDE_DAILY = 1807,
};
/* ####################### *
* Tol Barad capture point *
* ####################### */
class TolBaradCapturePoint : public BfCapturePoint
{
public:
TolBaradCapturePoint(BattlefieldTB* battlefield, TeamId teamInControl);
void ChangeTeam(TeamId /*oldteam*/) override;
};
/* ##################### *
* Tol Barad battlefield *
* ##################### */
class BattlefieldTB : public Battlefield
{
public:
~BattlefieldTB();
void OnStartGrouping() override;
void OnBattleStart() override;
void OnBattleEnd(bool endByTimer) override;
void OnPlayerEnterZone(Player* player) override;
void OnPlayerLeaveZone(Player* player) override;
void OnPlayerJoinWar(Player* player) override;
void OnPlayerLeaveWar(Player* player) override;
bool Update(uint32 diff) override;
void OnCreatureCreate(Creature* creature) override;
//void OnCreatureRemove(Creature* creature) override;
void OnGameObjectCreate(GameObject* go) override;
void UpdateCapturedBaseCount();
//void UpdatedDestroyedTowerCount(TeamId team);
//void DoCompleteOrIncrementAchievement(uint32 achievement, Player* player, uint8 incrementNumber = 1) override;
bool SetupBattlefield() override;
void SendInitWorldStatesTo(Player* player);
void SendInitWorldStatesToAll() override;
void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& /*data*/) override;
void HandleKill(Player* killer, Unit* victim) override;
//void OnUnitDeath(Unit* unit) override;
void PromotePlayer(Player* killer);
void RemoveAurasFromPlayer(Player* player);
void ProcessEvent(WorldObject* obj, uint32 eventId, WorldObject* invoker) override;
void TowerDamaged(TBTowerId tbTowerId);
void TowerDestroyed(TBTowerId tbTowerId);
// returns the graveyardId in the specified area.
//uint8 GetSpiritGraveyardId(uint32 areaId) const;
void UpdateNPCsAndGameObjects();
protected:
// Minutes till battle preparation warnings
bool warnedFiveMinutes;
bool warnedTwoMinutes;
bool warnedOneMinute;
uint32 m_saveTimer;
bool updatedNPCAndObjects;
uint32 m_updateObjectsTimer;
uint32 m_BonusTime;
GuidSet BattleInactiveNPCs;
GuidSet BattleInactiveGOs;
GuidSet TemporaryNPCs;
GuidSet TemporaryGOs;
GuidSet Towers;
uint8 m_iCellblockRandom;
ObjectGuid TBGatesGUID;
ObjectGuid TBDoorGUID;
ObjectGuid m_gateToTheHoleGUID;
ObjectGuid m_gateDBlockGUID;
ObjectGuid m_gateCursedDepthsGUID;
};
#endif
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,583 @@
/*
* This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef BATTLEFIELD_WG_
#define BATTLEFIELD_WG_
#include "Battlefield.h"
class Group;
class BattlefieldWG;
class WintergraspCapturePoint;
struct BfWGGameObjectBuilding;
struct WintergraspWorkshop;
struct StaticWintergraspTowerInfo;
struct StaticWintergraspWorkshopInfo;
struct WintergraspObjectPositionData;
namespace WorldPackets
{
namespace WorldState
{
class InitWorldStates;
}
}
typedef std::vector<BfWGGameObjectBuilding*> GameObjectBuildingVect;
typedef std::vector<WintergraspWorkshop*> WorkshopVect;
enum WintergraspSpells
{
// Wartime auras
SPELL_RECRUIT = 37795,
SPELL_CORPORAL = 33280,
SPELL_LIEUTENANT = 55629,
SPELL_TENACITY = 58549,
SPELL_TENACITY_VEHICLE = 59911,
SPELL_TOWER_CONTROL = 62064,
SPELL_SPIRITUAL_IMMUNITY = 58729,
SPELL_GREAT_HONOR = 58555,
SPELL_GREATER_HONOR = 58556,
SPELL_GREATEST_HONOR = 58557,
SPELL_ALLIANCE_FLAG = 14268,
SPELL_HORDE_FLAG = 14267,
SPELL_GRAB_PASSENGER = 61178,
// Reward spells
SPELL_VICTORY_REWARD = 56902,
SPELL_DEFEAT_REWARD = 58494,
SPELL_DAMAGED_TOWER = 59135,
SPELL_DESTROYED_TOWER = 59136,
SPELL_DAMAGED_BUILDING = 59201,
SPELL_INTACT_BUILDING = 59203,
SPELL_TELEPORT_BRIDGE = 59096,
SPELL_TELEPORT_FORTRESS = 60035,
SPELL_TELEPORT_DALARAN = 53360,
SPELL_VICTORY_AURA = 60044,
// Other spells
SPELL_WINTERGRASP_WATER = 36444,
SPELL_ESSENCE_OF_WINTERGRASP = 58045,
SPELL_WINTERGRASP_RESTRICTED_FLIGHT_AREA = 91604,
// Phasing spells
SPELL_HORDE_CONTROLS_FACTORY_PHASE_SHIFT = 56618, // ADDS PHASE 16
SPELL_ALLIANCE_CONTROLS_FACTORY_PHASE_SHIFT = 56617, // ADDS PHASE 32
SPELL_HORDE_CONTROL_PHASE_SHIFT = 55773, // ADDS PHASE 64
SPELL_ALLIANCE_CONTROL_PHASE_SHIFT = 55774 // ADDS PHASE 128
};
enum WintergraspData
{
BATTLEFIELD_WG_DATA_DAMAGED_TOWER_DEF,
BATTLEFIELD_WG_DATA_BROKEN_TOWER_DEF,
BATTLEFIELD_WG_DATA_DAMAGED_TOWER_ATT,
BATTLEFIELD_WG_DATA_BROKEN_TOWER_ATT,
BATTLEFIELD_WG_DATA_MAX_VEHICLE_A,
BATTLEFIELD_WG_DATA_MAX_VEHICLE_H,
BATTLEFIELD_WG_DATA_VEHICLE_A,
BATTLEFIELD_WG_DATA_VEHICLE_H,
BATTLEFIELD_WG_DATA_WON_A,
BATTLEFIELD_WG_DATA_DEF_A,
BATTLEFIELD_WG_DATA_WON_H,
BATTLEFIELD_WG_DATA_DEF_H,
BATTLEFIELD_WG_DATA_MAX,
BATTLEFIELD_WG_MAPID = 571 // Northrend
};
enum WintergraspAchievements
{
ACHIEVEMENTS_WIN_WG = 1717,
ACHIEVEMENTS_WIN_WG_100 = 1718, /// @todo: Has to be implemented
ACHIEVEMENTS_WG_GNOMESLAUGHTER = 1723, /// @todo: Has to be implemented
ACHIEVEMENTS_WG_TOWER_DESTROY = 1727,
ACHIEVEMENTS_DESTRUCTION_DERBY_A = 1737, /// @todo: Has to be implemented
ACHIEVEMENTS_WG_TOWER_CANNON_KILL = 1751, /// @todo: Has to be implemented
ACHIEVEMENTS_WG_MASTER_A = 1752, /// @todo: Has to be implemented
ACHIEVEMENTS_WIN_WG_TIMER_10 = 1755,
ACHIEVEMENTS_STONE_KEEPER_50 = 2085, /// @todo: Has to be implemented
ACHIEVEMENTS_STONE_KEEPER_100 = 2086, /// @todo: Has to be implemented
ACHIEVEMENTS_STONE_KEEPER_250 = 2087, /// @todo: Has to be implemented
ACHIEVEMENTS_STONE_KEEPER_500 = 2088, /// @todo: Has to be implemented
ACHIEVEMENTS_STONE_KEEPER_1000 = 2089, /// @todo: Has to be implemented
ACHIEVEMENTS_WG_RANGER = 2199, /// @todo: Has to be implemented
ACHIEVEMENTS_DESTRUCTION_DERBY_H = 2476, /// @todo: Has to be implemented
ACHIEVEMENTS_WG_MASTER_H = 2776 /// @todo: Has to be implemented
};
enum WintergraspQuests
{
QUEST_VICTORY_WINTERGRASP_A = 13181,
QUEST_VICTORY_WINTERGRASP_H = 13183,
QUEST_CREDIT_TOWERS_DESTROYED = 35074,
QUEST_CREDIT_DEFEND_SIEGE = 31284
};
/*#########################
*####### Graveyards ######
*#########################*/
class BfGraveyardWG : public BfGraveyard
{
public:
BfGraveyardWG(BattlefieldWG* Bf);
void SetTextId(uint32 textId) { m_GossipTextId = textId; }
uint32 GetTextId() const { return m_GossipTextId; }
protected:
uint32 m_GossipTextId;
};
enum WGGraveyardId
{
BATTLEFIELD_WG_GY_WORKSHOP_NE,
BATTLEFIELD_WG_GY_WORKSHOP_NW,
BATTLEFIELD_WG_GY_WORKSHOP_SE,
BATTLEFIELD_WG_GY_WORKSHOP_SW,
BATTLEFIELD_WG_GY_KEEP,
BATTLEFIELD_WG_GY_HORDE,
BATTLEFIELD_WG_GY_ALLIANCE,
BATTLEFIELD_WG_GRAVEYARD_MAX
};
enum WGGossipText
{
BATTLEFIELD_WG_GOSSIPTEXT_GY_NE = 20071,
BATTLEFIELD_WG_GOSSIPTEXT_GY_NW = 20072,
BATTLEFIELD_WG_GOSSIPTEXT_GY_SE = 20074,
BATTLEFIELD_WG_GOSSIPTEXT_GY_SW = 20073,
BATTLEFIELD_WG_GOSSIPTEXT_GY_KEEP = 20070,
BATTLEFIELD_WG_GOSSIPTEXT_GY_HORDE = 20075,
BATTLEFIELD_WG_GOSSIPTEXT_GY_ALLIANCE = 20076
};
enum WintergraspNpcs
{
BATTLEFIELD_WG_NPC_GUARD_H = 30739,
BATTLEFIELD_WG_NPC_GUARD_A = 30740,
BATTLEFIELD_WG_NPC_STALKER = 15214,
NPC_TAUNKA_SPIRIT_GUIDE = 31841, // Horde spirit guide for Wintergrasp
NPC_DWARVEN_SPIRIT_GUIDE = 31842, // Alliance spirit guide for Wintergrasp
NPC_WINTERGRASP_SIEGE_ENGINE_ALLIANCE = 28312,
NPC_WINTERGRASP_SIEGE_ENGINE_HORDE = 32627,
NPC_WINTERGRASP_CATAPULT = 27881,
NPC_WINTERGRASP_DEMOLISHER = 28094,
NPC_WINTERGRASP_TOWER_CANNON = 28366
};
/* ######################### *
* WintergraspCapturePoint *
* ######################### */
class WintergraspCapturePoint : public BfCapturePoint
{
public:
WintergraspCapturePoint(BattlefieldWG* battlefield, TeamId teamInControl);
void LinkToWorkshop(WintergraspWorkshop* workshop) { m_Workshop = workshop; }
void ChangeTeam(TeamId oldteam) override;
TeamId GetTeam() const { return m_team; }
protected:
WintergraspWorkshop* m_Workshop;
};
/* ######################### *
* WinterGrasp Battlefield *
* ######################### */
class BattlefieldWG : public Battlefield
{
public:
~BattlefieldWG();
/**
* \brief Called when the battle start
* - Spawn relic and turret
* - Rebuild tower and wall
* - Invite player to war
*/
void OnBattleStart() override;
/**
* \brief Called when battle end
* - Remove relic and turret
* - Change banner/npc in keep if it needed
* - Saving battlestate
* - Reward honor/mark to player
* - Remove vehicle
* \param endByTimer : true if battle ended when timer is at 00:00, false if battle ended by clicking on relic
*/
void OnBattleEnd(bool endByTimer) override;
/**
* \brief Called when grouping starts (15 minutes before battlestart)
* - Invite all player in zone to join queue
*/
void OnStartGrouping() override;
/**
* \brief Called when player accept invite to join battle
* - Update aura
* - Teleport if it needed
* - Update worldstate
* - Update tenacity
* \param player: Player who accepted invite
*/
void OnPlayerJoinWar(Player* player) override;
/**
* \brief Called when player left the battle
* - Update player aura
* \param player : Player who left the battle
*/
void OnPlayerLeaveWar(Player* player) override;
/**
* \brief Called when player left the WG zone
* \param player : Player who left the zone
*/
void OnPlayerLeaveZone(Player* player) override;
/**
* \brief Called when player enters in WG zone
* - Update aura
* - Update worldstate
* \param player : Player who enters the zone
*/
void OnPlayerEnterZone(Player* player) override;
/**
* \brief Called for update battlefield data
* - Save battle timer in database every minutes
* - Update imunity aura from graveyard
* \param diff : time elapsed since the last call (in ms)
*/
bool Update(uint32 diff) override;
/**
* \brief Called when a creature is created
* - Update vehicle count
*/
void OnCreatureCreate(Creature* creature) override;
/**
* \brief Called when a creature is removed
* - Update vehicle count
*/
void OnCreatureRemove(Creature* creature) override;
/**
* \brief Called when a gameobject is created
*/
void OnGameObjectCreate(GameObject* go) override;
/**
* \brief Called when a wall/tower is broken
* - Update quest
*/
void BrokenWallOrTower(TeamId team, BfWGGameObjectBuilding* building);
/**
* \brief Called when a tower is damaged
* - Update tower count (for reward calcul)
*/
void UpdateDamagedTowerCount(TeamId team);
/**
* \brief Called when tower is broken
* - Update tower buff
* - check if three south tower is down for remove 10 minutes to wg
*/
void UpdatedDestroyedTowerCount(TeamId team);
void DoCompleteOrIncrementAchievement(uint32 achievement, Player* player, uint8 incrementNumber = 1) override;
void RemoveAurasFromPlayer(Player* player);
/**
* \brief Called when battlefield is setup, at server start
*/
bool SetupBattlefield() override;
/// Return pointer to relic object
GameObject* GetRelic() { return GetGameObject(m_titansRelicGUID); }
/// Define relic object
void SetRelic(ObjectGuid relicGUID) { m_titansRelicGUID = relicGUID; }
/// Check if players can interact with the relic (Only if the last door has been broken)
bool CanInteractWithRelic() { return m_isRelicInteractible; }
/// Define if player can interact with the relic
void SetRelicInteractible(bool allow) { m_isRelicInteractible = allow; }
void UpdateVehicleCountWG();
void UpdateCounterVehicle(bool init);
void SendInitWorldStatesTo(Player* player);
void SendInitWorldStatesToAll() override;
void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& /*data*/) override;
void HandleKill(Player* killer, Unit* victim) override;
void OnUnitDeath(Unit* unit) override;
void HandlePromotion(Player* killer, Unit* killed);
void PromotePlayer(Player* killer);
void UpdateTenacity();
void ProcessEvent(WorldObject* obj, uint32 eventId, WorldObject* invoker) override;
bool FindAndRemoveVehicleFromList(Unit* vehicle);
// returns the graveyardId in the specified area.
uint8 GetSpiritGraveyardId(uint32 areaId) const;
uint32 GetData(uint32 data) const override;
protected:
bool m_isRelicInteractible;
WorkshopVect Workshops;
GuidVector DefenderPortalList[BG_TEAMS_COUNT];
GameObjectBuildingVect BuildingsInZone;
GuidUnorderedSet m_vehicles[BG_TEAMS_COUNT];
GuidVector CanonList;
TeamId m_tenacityTeam;
uint32 m_tenacityStack;
uint32 m_saveTimer;
ObjectGuid m_titansRelicGUID;
};
enum WintergraspGameObjectBuildingType
{
BATTLEFIELD_WG_OBJECTTYPE_DOOR,
BATTLEFIELD_WG_OBJECTTYPE_TITANRELIC,
BATTLEFIELD_WG_OBJECTTYPE_WALL,
BATTLEFIELD_WG_OBJECTTYPE_DOOR_LAST,
BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER,
BATTLEFIELD_WG_OBJECTTYPE_TOWER
};
enum WintergraspGameObjectState
{
BATTLEFIELD_WG_OBJECTSTATE_NONE,
BATTLEFIELD_WG_OBJECTSTATE_NEUTRAL_INTACT,
BATTLEFIELD_WG_OBJECTSTATE_NEUTRAL_DAMAGE,
BATTLEFIELD_WG_OBJECTSTATE_NEUTRAL_DESTROY,
BATTLEFIELD_WG_OBJECTSTATE_HORDE_INTACT,
BATTLEFIELD_WG_OBJECTSTATE_HORDE_DAMAGE,
BATTLEFIELD_WG_OBJECTSTATE_HORDE_DESTROY,
BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_INTACT,
BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_DAMAGE,
BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_DESTROY
};
enum WintergraspTowerIds
{
BATTLEFIELD_WG_TOWER_FORTRESS_NW,
BATTLEFIELD_WG_TOWER_FORTRESS_SW,
BATTLEFIELD_WG_TOWER_FORTRESS_SE,
BATTLEFIELD_WG_TOWER_FORTRESS_NE,
BATTLEFIELD_WG_TOWER_SHADOWSIGHT,
BATTLEFIELD_WG_TOWER_WINTER_S_EDGE,
BATTLEFIELD_WG_TOWER_FLAMEWATCH
};
enum WintergraspWorkshopIds
{
BATTLEFIELD_WG_WORKSHOP_SE,
BATTLEFIELD_WG_WORKSHOP_SW,
BATTLEFIELD_WG_WORKSHOP_NE,
BATTLEFIELD_WG_WORKSHOP_NW,
BATTLEFIELD_WG_WORKSHOP_KEEP_WEST,
BATTLEFIELD_WG_WORKSHOP_KEEP_EAST
};
enum WintergraspTeamControl
{
BATTLEFIELD_WG_TEAM_ALLIANCE,
BATTLEFIELD_WG_TEAM_HORDE,
BATTLEFIELD_WG_TEAM_NEUTRAL
};
enum WintergraspText
{
// Invisible Stalker
BATTLEFIELD_WG_TEXT_SOUTHERN_TOWER_DAMAGE = 1,
BATTLEFIELD_WG_TEXT_SOUTHERN_TOWER_DESTROY = 2,
BATTLEFIELD_WG_TEXT_EASTERN_TOWER_DAMAGE = 3,
BATTLEFIELD_WG_TEXT_EASTERN_TOWER_DESTROY = 4,
BATTLEFIELD_WG_TEXT_WESTERN_TOWER_DAMAGE = 5,
BATTLEFIELD_WG_TEXT_WESTERN_TOWER_DESTROY = 6,
BATTLEFIELD_WG_TEXT_NW_KEEPTOWER_DAMAGE = 7,
BATTLEFIELD_WG_TEXT_NW_KEEPTOWER_DESTROY = 8,
BATTLEFIELD_WG_TEXT_SE_KEEPTOWER_DAMAGE = 9,
BATTLEFIELD_WG_TEXT_SE_KEEPTOWER_DESTROY = 10,
BATTLEFIELD_WG_TEXT_BROKEN_TEMPLE_ATTACK_ALLIANCE = 11,
BATTLEFIELD_WG_TEXT_BROKEN_TEMPLE_CAPTURE_ALLIANCE = 12,
BATTLEFIELD_WG_TEXT_BROKEN_TEMPLE_ATTACK_HORDE = 13,
BATTLEFIELD_WG_TEXT_BROKEN_TEMPLE_CAPTURE_HORDE = 14,
BATTLEFIELD_WG_TEXT_EASTSPARK_ATTACK_ALLIANCE = 15,
BATTLEFIELD_WG_TEXT_EASTSPARK_CAPTURE_ALLIANCE = 16,
BATTLEFIELD_WG_TEXT_EASTSPARK_ATTACK_HORDE = 17,
BATTLEFIELD_WG_TEXT_EASTSPARK_CAPTURE_HORDE = 18,
BATTLEFIELD_WG_TEXT_SUNKEN_RING_ATTACK_ALLIANCE = 19,
BATTLEFIELD_WG_TEXT_SUNKEN_RING_CAPTURE_ALLIANCE = 20,
BATTLEFIELD_WG_TEXT_SUNKEN_RING_ATTACK_HORDE = 21,
BATTLEFIELD_WG_TEXT_SUNKEN_RING_CAPTURE_HORDE = 22,
BATTLEFIELD_WG_TEXT_WESTSPARK_ATTACK_ALLIANCE = 23,
BATTLEFIELD_WG_TEXT_WESTSPARK_CAPTURE_ALLIANCE = 24,
BATTLEFIELD_WG_TEXT_WESTSPARK_ATTACK_HORDE = 25,
BATTLEFIELD_WG_TEXT_WESTSPARK_CAPTURE_HORDE = 26,
BATTLEFIELD_WG_TEXT_START_GROUPING = 27,
BATTLEFIELD_WG_TEXT_START_BATTLE = 28,
BATTLEFIELD_WG_TEXT_FORTRESS_DEFEND_ALLIANCE = 29,
BATTLEFIELD_WG_TEXT_FORTRESS_CAPTURE_ALLIANCE = 30,
BATTLEFIELD_WG_TEXT_FORTRESS_DEFEND_HORDE = 31,
BATTLEFIELD_WG_TEXT_FORTRESS_CAPTURE_HORDE = 32,
BATTLEFIELD_WG_TEXT_NE_KEEPTOWER_DAMAGE = 33,
BATTLEFIELD_WG_TEXT_NE_KEEPTOWER_DESTROY = 34,
BATTLEFIELD_WG_TEXT_SW_KEEPTOWER_DAMAGE = 35,
BATTLEFIELD_WG_TEXT_SW_KEEPTOWER_DESTROY = 36,
BATTLEFIELD_WG_TEXT_RANK_CORPORAL = 37,
BATTLEFIELD_WG_TEXT_RANK_FIRST_LIEUTENANT = 38
};
enum WintergraspGameObject
{
GO_WINTERGRASP_FACTORY_BANNER_NE = 190475,
GO_WINTERGRASP_FACTORY_BANNER_NW = 190487,
GO_WINTERGRASP_FACTORY_BANNER_SE = 194959,
GO_WINTERGRASP_FACTORY_BANNER_SW = 194962,
GO_WINTERGRASP_TITAN_S_RELIC = 192829,
GO_WINTERGRASP_FORTRESS_TOWER_1 = 190221,
GO_WINTERGRASP_FORTRESS_TOWER_2 = 190373,
GO_WINTERGRASP_FORTRESS_TOWER_3 = 190377,
GO_WINTERGRASP_FORTRESS_TOWER_4 = 190378,
GO_WINTERGRASP_SHADOWSIGHT_TOWER = 190356,
GO_WINTERGRASP_WINTER_S_EDGE_TOWER = 190357,
GO_WINTERGRASP_FLAMEWATCH_TOWER = 190358,
GO_WINTERGRASP_FORTRESS_GATE = 190375,
GO_WINTERGRASP_VAULT_GATE = 191810,
GO_WINTERGRASP_KEEP_COLLISION_WALL = 194323
};
// ********************************************************************
// * Structs using for Building, Graveyard, Workshop *
// ********************************************************************
// Structure for different buildings that can be destroyed during battle
struct BfWGGameObjectBuilding
{
private:
// WG object
BattlefieldWG* _wg;
// Linked gameobject
ObjectGuid _buildGUID;
// the team that controls this point
TeamId _teamControl;
WintergraspGameObjectBuildingType _type;
uint32 _worldState;
WintergraspGameObjectState _state;
StaticWintergraspTowerInfo const* _staticTowerInfo;
// GameObject associations
GuidVector m_GameObjectList[BG_TEAMS_COUNT];
// Creature associations
GuidVector m_CreatureBottomList[BG_TEAMS_COUNT];
GuidVector m_CreatureTopList[BG_TEAMS_COUNT];
GuidVector m_TowerCannonBottomList;
GuidVector m_TurretTopList;
public:
BfWGGameObjectBuilding(BattlefieldWG* wg, WintergraspGameObjectBuildingType type, uint32 worldState);
void Init(GameObject* go);
ObjectGuid const& GetGUID() const { return _buildGUID; }
void Rebuild();
// Called when associated gameobject is damaged
void Damaged();
// Called when associated gameobject is destroyed
void Destroyed();
void UpdateCreatureAndGo();
void UpdateTurretAttack(bool disable);
void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& data);
void Save();
};
// Structure for the 6 workshop
struct WintergraspWorkshop
{
private:
BattlefieldWG* _wg; // Pointer to wintergrasp
ObjectGuid _buildGUID;
WintergraspGameObjectState _state; // For worldstate
TeamId _teamControl; // Team witch control the workshop
StaticWintergraspWorkshopInfo const* _staticInfo;
public:
WintergraspWorkshop(BattlefieldWG* wg, uint8 type);
uint8 GetId() const;
TeamId GetTeamControl() const { return _teamControl; }
// Called on change faction in CapturePoint class
void GiveControlTo(TeamId teamId, bool init = false);
void UpdateGraveyardAndWorkshop();
void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& /*data*/);
void Save();
};
#endif
@@ -0,0 +1,25 @@
/*
* This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
void AddSC_BF_wintergrasp();
void AddSC_BF_tol_barad();
void AddBattlefieldScripts()
{
AddSC_BF_wintergrasp();
AddSC_BF_tol_barad();
}
@@ -16,7 +16,7 @@
*/
#include "ScriptMgr.h"
#include "BattlefieldTB.h"
#include "Battlefield/BattlefieldTB.h"
#include "DBCStores.h"
#include "Player.h"
#include "ScriptedCreature.h"
@@ -17,7 +17,7 @@
#include "ScriptMgr.h"
#include "Battlefield.h"
#include "BattlefieldMgr.h"
#include "BattlefieldWG.h"
#include "Battlefield/BattlefieldWG.h"
#include "DBCStores.h"
#include "GameObject.h"
#include "GameObjectAI.h"
@@ -373,8 +373,8 @@ class go_wg_vehicle_teleporter : public GameObjectScript
bool IsFriendly(Unit* passenger) const
{
return ((me->GetFaction() == WintergraspFaction[TEAM_HORDE] && passenger->GetFaction() == HORDE) ||
(me->GetFaction() == WintergraspFaction[TEAM_ALLIANCE] && passenger->GetFaction() == ALLIANCE));
return ((me->GetFaction() == FACTION_HORDE_GENERIC_WG && passenger->GetFaction() == HORDE) ||
(me->GetFaction() == FACTION_ALLIANCE_GENERIC_WG && passenger->GetFaction() == ALLIANCE));
}
Creature* GetValidVehicle(Creature* cVeh) const