diff options
Diffstat (limited to 'src/game/Wintergrasp.h')
-rw-r--r-- | src/game/Wintergrasp.h | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/src/game/Wintergrasp.h b/src/game/Wintergrasp.h new file mode 100644 index 00000000000..11f9865f72b --- /dev/null +++ b/src/game/Wintergrasp.h @@ -0,0 +1,161 @@ +/* + * Copyright (C) 2008-2009 Trinity <http://www.trinitycore.org/> + * + * 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, 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 + +const uint16 GameEventWintergraspDefender[2] = {50, 51}; +const uint32 WintergraspFaction[2] = {1732, 1735}; + +#define POS_X_CENTER 4700 + +#define SPELL_RECRUIT 37795 +#define SPELL_CORPORAL 33280 +#define SPELL_LIEUTENANT 55629 + +#define SPELL_TENACITY 58549 +#define SPELL_TENACITY_VEHICLE 59911 + +#define SPELL_VICTORY_REWARD 56902 +#define SPELL_DEFEAT_REWARD 58494 + +#define SPELL_SHUTDOWN_VEHICLE 21247 + +const uint32 WG_KEEP_CM = 0; //Need data +const uint32 WG_RULERS_BUFF = 52108; +//some cosmetics :D +const uint32 WG_VICTORY_AURA = 60044; + +enum OutdoorPvP_WG_Sounds +{ +/*TODO OutdoorPvP_WG_SOUND_KEEP_CLAIMED = 8192, + OutdoorPvP_WG_SOUND_KEEP_CAPTURED_ALLIANCE = 8173, + OutdoorPvP_WG_SOUND_KEEP_CAPTURED_HORDE = 8213, + OutdoorPvP_WG_SOUND_KEEP_ASSAULTED_ALLIANCE = 8212, + OutdoorPvP_WG_SOUND_KEEP_ASSAULTED_HORDE = 8174, + OutdoorPvP_WG_SOUND_NEAR_VICTORY = 8456 +*/ +}; + +enum OutdoorPvP_WG_KeepStatus +{ + OutdoorPvP_WG_KEEP_TYPE_NEUTRAL = 0, + OutdoorPvP_WG_KEEP_TYPE_CONTESTED = 1, + OutdoorPvP_WG_KEEP_STATUS_ALLY_CONTESTED = 1, + OutdoorPvP_WG_KEEP_STATUS_HORDE_CONTESTED = 2, + OutdoorPvP_WG_KEEP_TYPE_OCCUPIED = 3, + OutdoorPvP_WG_KEEP_STATUS_ALLY_OCCUPIED = 3, + OutdoorPvP_WG_KEEP_STATUS_HORDE_OCCUPIED = 4 +}; + +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) + : worldState(_worldState), health(0) + , defaultTeam(asDefault ? _team : OTHER_TEAM(_team)), team(_team), damageState(DAMAGE_INTACT) + , building(NULL) + {} + uint32 worldState; + uint32 health; + TeamId team, defaultTeam; + DamageState damageState; + GameObject *building; + + void SendUpdate(Player *player) + { + player->SendUpdateWorldState(worldState, AreaPOIIconId[team][damageState]); + } + + void FillData(WorldPacket &data) + { + data << worldState << AreaPOIIconId[team][damageState]; + } +}; + +typedef std::map<uint32, uint32> TeamPairMap; + +class OPvPWintergrasp : public OutdoorPvP +{ + protected: + typedef std::map<uint32, BuildingState *> BuildingStateMap; + typedef std::set<Creature*> CreatureSet; + typedef std::set<Vehicle*> VehicleSet; + typedef std::set<GameObject*> GameObjectSet; + public: + explicit OPvPWintergrasp() : m_tenacityStack(0) {} + 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); + + void SendInitWorldStatesTo(Player *player = NULL); + + bool Update(uint32 diff); + protected: + TeamId m_defender; + int32 m_tenacityStack; + + BuildingStateMap m_buildingStates; + + CreatureSet m_creatures; + VehicleSet m_vehicles[2]; + GameObjectSet m_gobjects; + + TeamPairMap m_creEntryPair, m_goDisplayPair; + + bool m_wartime; + uint32 m_timer; + + void ChangeDefender(); + + void UpdateTenacityStack(); + bool UpdateCreatureInfo(Creature *creature); + void UpdateAllWorldObject(); + bool UpdateGameObjectInfo(GameObject *go); + + void RebuildAllBuildings(); + void StartBattle(); + void EndBattle(); + void GiveReward(); + + void VehicleCastSpell(TeamId team, int32 spellId); +}; + +#endif |