aboutsummaryrefslogtreecommitdiff
path: root/src/game/Wintergrasp.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/Wintergrasp.h')
-rw-r--r--src/game/Wintergrasp.h50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/game/Wintergrasp.h b/src/game/Wintergrasp.h
index 291a80a5e1d..92a7b2acd9b 100644
--- a/src/game/Wintergrasp.h
+++ b/src/game/Wintergrasp.h
@@ -15,25 +15,33 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+
#ifndef TRINITY_WINTERGRASP_H
#define TRINITY_WINTERGRASP_H
+
#include "OutdoorPvPImpl.h"
+
#define ZONE_WINTERGRASP 4197
#define POS_X_CENTER 4700
#define MAX_VEHICLE_PER_WORKSHOP 4
+
const uint32 WintergraspFaction[3] = {1732, 1735, 35};
const uint32 WG_MARK_OF_HONOR = 43589;
const uint32 VehNumWorldState[2] = {3680,3490};
const uint32 MaxVehNumWorldState[2] = {3681,3491};
const uint32 ClockWorldState[5] = {3785,3784,3782,3976,3975};
+
enum WintergraspSpell
{
SPELL_RECRUIT = 37795,
SPELL_CORPORAL = 33280,
SPELL_LIEUTENANT = 55629,
+
SPELL_TENACITY = 58549,
SPELL_TENACITY_VEHICLE = 59911,
+
SPELL_TELEPORT_DALARAN = 53360,
+
SPELL_TOWER_CONTROL = 62064,
SPELL_VICTORY_REWARD = 56902,
SPELL_DEFEAT_REWARD = 58494,
@@ -46,6 +54,7 @@ enum WintergraspSpell
// SPELL_RULERS_OF_WG = 52108,
// SPELL_ESSENCE_OF_WG = 58045,
};
+
enum WintergraspRewardEvent
{
WIN_BATTLE,
@@ -57,8 +66,11 @@ enum WintergraspRewardEvent
WG_REWARD_EVENT_MAX,
};
+
/* Not used / Not implemented
+
const uint16 GameEventWintergraspDefender[2] = {50, 51};
+
enum OutdoorPvP_WG_Sounds
{
OutdoorPvP_WG_SOUND_KEEP_CLAIMED = 8192,
@@ -68,10 +80,12 @@ enum OutdoorPvP_WG_Sounds
OutdoorPvP_WG_SOUND_KEEP_ASSAULTED_HORDE = 8174,
OutdoorPvP_WG_SOUND_NEAR_VICTORY = 8456
};
+
enum DataId
{
DATA_ENGINEER_DIE,
};
+
enum OutdoorPvP_WG_KeepStatus
{
OutdoorPvP_WG_KEEP_TYPE_NEUTRAL = 0,
@@ -83,6 +97,7 @@ enum OutdoorPvP_WG_KeepStatus
OutdoorPvP_WG_KEEP_STATUS_HORDE_OCCUPIED = 4
};
*/
+
enum WintergraspCreType
{
CREATURE_OTHER,
@@ -92,19 +107,23 @@ enum WintergraspCreType
CREATURE_GUARD,
CREATURE_SPECIAL,
};
+
enum BuildingType
{
BUILDING_WALL,
BUILDING_WORKSHOP,
BUILDING_TOWER,
};
+
enum DamageState
{
DAMAGE_INTACT,
DAMAGE_DAMAGED,
DAMAGE_DESTROYED,
};
+
const uint32 AreaPOIIconId[3][3] = {{7,8,9},{4,5,6},{1,2,3}};
+
struct BuildingState
{
explicit BuildingState(uint32 _worldState, TeamId _team, bool asDefault)
@@ -119,14 +138,17 @@ struct BuildingState
GameObject *building;
uint32 *graveTeam;
BuildingType type;
+
void SendUpdate(Player *player) const
{
player->SendUpdateWorldState(worldState, AreaPOIIconId[team][damageState]);
}
+
void FillData(WorldPacket &data) const
{
data << worldState << AreaPOIIconId[team][damageState];
}
+
TeamId GetTeam() const { return team; }
void SetTeam(TeamId t)
{
@@ -134,11 +156,15 @@ struct BuildingState
if(graveTeam)
*graveTeam = TeamId2Team[t];
}
+
private:
TeamId team;
};
+
typedef std::map<uint32, uint32> TeamPairMap;
+
class SiegeWorkshop;
+
class OPvPWintergrasp : public OutdoorPvP
{
protected:
@@ -148,18 +174,26 @@ class OPvPWintergrasp : public OutdoorPvP
public:
explicit OPvPWintergrasp() : m_tenacityStack(0), m_gate(NULL) {}
bool SetupOutdoorPvP();
+
uint32 GetCreatureEntry(uint32 guidlow, const CreatureData *data);
//uint32 GetGameObjectEntry(uint32 guidlow, uint32 entry);
+
void OnCreatureCreate(Creature *creature, bool add);
void OnGameObjectCreate(GameObject *go, bool add);
+
void ProcessEvent(GameObject *obj, uint32 eventId);
+
void HandlePlayerEnterZone(Player *plr, uint32 zone);
void HandlePlayerLeaveZone(Player *plr, uint32 zone);
void HandleKill(Player *killer, Unit *victim);
+
bool Update(uint32 diff);
+
void BroadcastStateChange(BuildingState *state) const;
+
uint32 GetData(uint32 id);
void SetData(uint32 id, uint32 value);
+
void ModifyWorkshopCount(TeamId team, bool add);
uint32 GetTimer() const { return m_timer / 1000; };
TeamId GetTeam() const { return m_defender; };
@@ -167,24 +201,32 @@ class OPvPWintergrasp : public OutdoorPvP
protected:
TeamId m_defender;
int32 m_tenacityStack;
+
BuildingStateMap m_buildingStates;
BuildingState *m_gate;
+
CreatureSet m_creatures;
CreatureSet m_vehicles[2];
GameObjectSet m_gobjects;
+
TeamPairMap m_creEntryPair, m_goDisplayPair;
+
bool m_wartime;
bool m_changeDefender;
uint32 m_timer;
uint32 m_clock[5];
uint32 m_workshopCount[2];
uint32 m_towerCount[2][2];
+
uint32 m_customHonorReward[WG_REWARD_EVENT_MAX];
+
SiegeWorkshop *GetWorkshop(uint32 lowguid) const;
SiegeWorkshop *GetWorkshopByEngGuid(uint32 lowguid) const;
SiegeWorkshop *GetWorkshopByGOGuid(uint32 lowguid) const;
+
void StartBattle();
void EndBattle();
+
void UpdateClock();
void UpdateClockDigit(uint32 &timer, uint32 digit, uint32 mod);
void PromotePlayer(Player *player) const;
@@ -193,15 +235,20 @@ class OPvPWintergrasp : public OutdoorPvP
void UpdateAllWorldObject();
bool UpdateCreatureInfo(Creature *creature) const;
bool UpdateGameObjectInfo(GameObject *go) const;
+
bool CanBuildVehicle(SiegeWorkshop *workshop) const;
WintergraspCreType GetCreatureType(uint32 entry) const;
+
void RebuildAllBuildings();
+
void LieutenantCastSpell(TeamId team, int32 spellId) const;
void VehicleCastSpell(TeamId team, int32 spellId) const;
+
void SendInitWorldStatesTo(Player *player = NULL) const;
void RemoveOfflinePlayerWGAuras();
void RewardMarkOfHonor(Player *player, uint32 count);
};
+
class SiegeWorkshop : public OPvPCapturePoint
{
public:
@@ -210,7 +257,9 @@ class SiegeWorkshop : public OPvPCapturePoint
void ChangeState() {}
void ChangeTeam(TeamId oldteam);
//void DespawnAllVehicles();
+
//bool CanBuildVehicle() const { return m_vehicles.size() < MAX_VEHICLE_PER_WORKSHOP && m_buildingState->damageState != DAMAGE_DESTROYED; }
+
uint32 *m_engEntry;
uint32 m_engGuid;
Creature *m_engineer;
@@ -220,4 +269,5 @@ class SiegeWorkshop : public OPvPCapturePoint
protected:
OPvPWintergrasp *m_wintergrasp;
};
+
#endif