diff options
Diffstat (limited to 'src/game/OutdoorPvP.h')
-rw-r--r-- | src/game/OutdoorPvP.h | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/game/OutdoorPvP.h b/src/game/OutdoorPvP.h index 487b923a4d6..e48356633c3 100644 --- a/src/game/OutdoorPvP.h +++ b/src/game/OutdoorPvP.h @@ -15,12 +15,16 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + #ifndef OUTDOOR_PVP_H_ #define OUTDOOR_PVP_H_ + #include "Util.h" #include "SharedDefines.h" #include "ZoneScript.h" + class GameObject; + enum OutdoorPvPTypes { OUTDOOR_PVP_HP = 1, @@ -31,7 +35,9 @@ enum OutdoorPvPTypes OUTDOOR_PVP_EP, OPVP_WINTERGRASP, }; + const uint8 CapturePointArtKit[3] = {2, 1, 21}; + enum ObjectiveStates { OBJECTIVESTATE_NEUTRAL = 0, @@ -42,6 +48,7 @@ enum ObjectiveStates OBJECTIVESTATE_ALLIANCE_HORDE_CHALLENGE, OBJECTIVESTATE_HORDE_ALLIANCE_CHALLENGE, }; + // struct for go spawning struct go_type{ uint32 entry; @@ -55,6 +62,7 @@ struct go_type{ float rot2; float rot3; }; + // struct for creature spawning struct creature_type{ uint32 entry; @@ -65,6 +73,7 @@ struct creature_type{ float z; float o; }; + // some class predefs class Player; class GameObject; @@ -72,45 +81,63 @@ class WorldPacket; class Creature; class Unit; struct GossipOption; + typedef std::set<Player*> PlayerSet; + class OutdoorPvP; class OPvPCapturePoint { public: OPvPCapturePoint(OutdoorPvP * pvp); + virtual void FillInitialWorldStates(WorldPacket & data) {} + // send world state update to all players present void SendUpdateWorldState(uint32 field, uint32 value); // send kill notify to players in the controlling faction void SendObjectiveComplete(uint32 id, uint64 guid); + // used when player is activated/inactivated in the area virtual bool HandlePlayerEnter(Player * plr); virtual void HandlePlayerLeave(Player * plr); //virtual void HandlePlayerActivityChanged(Player * plr); + // checks if player is in range of a capture credit marker bool IsInsideObjective(Player * plr) const; + virtual bool HandleCustomSpell(Player *plr, uint32 spellId, GameObject * go); virtual int32 HandleOpenGo(Player *plr, uint64 guid); + // returns true if the state of the objective has changed, in this case, the OutdoorPvP must send a world state ui update. virtual bool Update(uint32 diff); virtual void ChangeState() = 0; virtual void ChangeTeam(TeamId oldTeam) {} virtual void SendChangePhase(); + virtual bool HandleGossipOption(Player *plr, uint64 guid, uint32 gossipid); + virtual bool CanTalkTo(Player * plr, Creature * c, GossipOption &gso); + virtual bool HandleDropFlag(Player * plr, uint32 spellId); + virtual void DeleteSpawns(); + uint32 m_capturePointGUID; GameObject *m_capturePoint; + void AddGO(uint32 type, uint32 guid, uint32 entry = 0); void AddCre(uint32 type, uint32 guid, uint32 entry = 0); bool SetCapturePointData(uint32 entry, uint32 map, float x, float y, float z, float o = 0, float rotation0 = 0, float rotation1 = 0, float rotation2 = 0, float rotation3 = 0); + protected: + bool AddObject(uint32 type, uint32 entry, uint32 map, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3); bool AddCreature(uint32 type, uint32 entry, uint32 teamval, uint32 map, float x, float y, float z, float o, uint32 spawntimedelay = 0); + bool DelCreature(uint32 type); bool DelObject(uint32 type); bool DelCapturePoint(); + protected: // active players in the area of the objective, 0 - alliance, 1 - horde PlayerSet m_activePlayers[2]; @@ -127,8 +154,10 @@ protected: ObjectiveStates m_State; // neutral value on capture bar uint32 m_neutralValuePct; + // pointer to the OutdoorPvP this objective belongs to OutdoorPvP* m_PvP; + // map to store the various gameobjects and creatures spawned by the objective // type , guid std::map<uint32,uint64> m_Objects; @@ -136,6 +165,7 @@ protected: std::map<uint64,uint32> m_ObjectTypes; std::map<uint64,uint32> m_CreatureTypes; }; + // base class for specific outdoor pvp handlers class OutdoorPvP : public ZoneScript { @@ -147,7 +177,9 @@ public: ~OutdoorPvP(); // deletes all gos/creatures spawned by the pvp void DeleteSpawns(); + typedef std::map<uint32/*lowguid*/, OPvPCapturePoint*> OPvPCapturePointMap; + virtual void FillInitialWorldStates(WorldPacket & data) {} // called when a player triggers an areatrigger virtual bool HandleAreaTrigger(Player * plr, uint32 trigger); @@ -155,41 +187,60 @@ public: virtual bool HandleCustomSpell(Player *plr, uint32 spellId, GameObject * go); // called on go use virtual bool HandleOpenGo(Player *plr, uint64 guid); + // setup stuff virtual bool SetupOutdoorPvP() {return true;} + void OnGameObjectCreate(GameObject *go, bool add); void OnCreatureCreate(Creature *, bool add) {} + // send world state update to all players present void SendUpdateWorldState(uint32 field, uint32 value); + // called by OutdoorPvPMgr, updates the objectives and if needed, sends new worldstateui information virtual bool Update(uint32 diff); + // handle npc/player kill virtual void HandleKill(Player * killer, Unit * killed); virtual void HandleKillImpl(Player * killer, Unit * killed) {} + // checks if player is in range of a capture credit marker bool IsInsideObjective(Player * plr) const; + // awards rewards for player kill virtual void AwardKillBonus(Player * plr) {} + uint32 GetTypeId() {return m_TypeId;} + virtual bool HandleDropFlag(Player * plr, uint32 spellId); + virtual bool HandleGossipOption(Player *plr, uint64 guid, uint32 gossipid); + virtual bool CanTalkTo(Player * plr, Creature * c, GossipOption &gso); + void TeamApplyBuff(TeamId team, uint32 spellId, uint32 spellId2 = 0); protected: // the map of the objectives belonging to this outdoorpvp OPvPCapturePointMap m_capturePoints; + PlayerSet m_players[2]; uint32 m_TypeId; + bool m_sendUpdate; + // world state stuff virtual void SendRemoveWorldStates(Player * plr) {} + void BroadcastPacket(WorldPacket & data) const; + virtual void HandlePlayerEnterZone(Player * plr, uint32 zone); virtual void HandlePlayerLeaveZone(Player * plr, uint32 zone); + void AddCapturePoint(OPvPCapturePoint* cp) { m_capturePoints[cp->m_capturePointGUID] = cp; } + OPvPCapturePoint * GetCapturePoint(uint32 lowguid) const { OutdoorPvP::OPvPCapturePointMap::const_iterator itr = m_capturePoints.find(lowguid); @@ -197,9 +248,11 @@ protected: return itr->second; return NULL; } + void RegisterZone(uint32 zoneid); bool HasPlayer(Player *plr) const; void TeamCastSpell(TeamId team, int32 spellId); }; + #endif /*OUTDOOR_PVP_H_*/ |