diff options
Diffstat (limited to 'src/game/Wintergrasp.h')
| -rw-r--r-- | src/game/Wintergrasp.h | 50 |
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 |
