mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 13:37:05 +00:00
[12098] Add OutdoorPvPMgr class
This commit is contained in:
parent
c972606a0f
commit
dafd0adac1
3 changed files with 252 additions and 1 deletions
|
|
@ -15,3 +15,153 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include "OutdoorPvPMgr.h"
|
||||
#include "Policies/SingletonImp.h"
|
||||
#include "OutdoorPvP.h"
|
||||
#include "../GameObject.h"
|
||||
#include "../World.h"
|
||||
#include "Log.h"
|
||||
#include "OutdoorPvPEP.h"
|
||||
#include "OutdoorPvPGH.h"
|
||||
#include "OutdoorPvPHP.h"
|
||||
#include "OutdoorPvPNA.h"
|
||||
#include "OutdoorPvPSI.h"
|
||||
#include "OutdoorPvPTF.h"
|
||||
#include "OutdoorPvPZM.h"
|
||||
|
||||
INSTANTIATE_SINGLETON_1(OutdoorPvPMgr);
|
||||
|
||||
OutdoorPvPMgr::OutdoorPvPMgr()
|
||||
{
|
||||
m_updateTimer.SetInterval(TIMER_OPVP_MGR_UPDATE);
|
||||
memset(&m_scripts, 0, sizeof(m_scripts));
|
||||
}
|
||||
|
||||
OutdoorPvPMgr::~OutdoorPvPMgr()
|
||||
{
|
||||
for (uint8 i = 0; i < MAX_OPVP_ID; ++i)
|
||||
delete m_scripts[i];
|
||||
}
|
||||
|
||||
/**
|
||||
Function which loads all outdoor pvp scripts
|
||||
*/
|
||||
void OutdoorPvPMgr::InitOutdoorPvP()
|
||||
{
|
||||
|
||||
sLog.outString();
|
||||
sLog.outString(">> Loaded %u Outdoor PvP zones", MAX_OPVP_ID);
|
||||
}
|
||||
|
||||
OutdoorPvP* OutdoorPvPMgr::GetScript(uint32 zoneId)
|
||||
{
|
||||
switch (zoneId)
|
||||
{
|
||||
case ZONE_ID_SILITHUS:
|
||||
return m_scripts[OPVP_ID_SI];
|
||||
case ZONE_ID_EASTERN_PLAGUELANDS:
|
||||
return m_scripts[OPVP_ID_EP];
|
||||
case ZONE_ID_HELLFIRE_PENINSULA:
|
||||
return m_scripts[OPVP_ID_HP];
|
||||
case ZONE_ID_ZANGARMARSH:
|
||||
return m_scripts[OPVP_ID_ZM];
|
||||
case ZONE_ID_TEROKKAR_FOREST:
|
||||
return m_scripts[OPVP_ID_TF];
|
||||
case ZONE_ID_NAGRAND:
|
||||
return m_scripts[OPVP_ID_NA];
|
||||
case ZONE_ID_GRIZZLY_HILLS:
|
||||
return m_scripts[OPVP_ID_GH];
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
OutdoorPvP* OutdoorPvPMgr::GetScriptOfAffectedZone(uint32 zoneId)
|
||||
{
|
||||
switch (zoneId)
|
||||
{
|
||||
case ZONE_ID_TEMPLE_OF_AQ:
|
||||
case ZONE_ID_RUINS_OF_AQ:
|
||||
case ZONE_ID_GATES_OF_AQ:
|
||||
return m_scripts[OPVP_ID_SI];
|
||||
case ZONE_ID_STRATHOLME:
|
||||
case ZONE_ID_SCHOLOMANCE:
|
||||
return m_scripts[OPVP_ID_EP];
|
||||
case ZONE_ID_HELLFIRE_RAMPARTS:
|
||||
case ZONE_ID_HELLFIRE_CITADEL:
|
||||
case ZONE_ID_BLOOD_FURNACE:
|
||||
case ZONE_ID_SHATTERED_HALLS:
|
||||
case ZONE_ID_MAGTHERIDON_LAIR:
|
||||
return m_scripts[OPVP_ID_HP];
|
||||
case ZONE_ID_SERPENTSHRINE_CAVERN:
|
||||
case ZONE_ID_STREAMVAULT:
|
||||
case ZONE_ID_UNDERBOG:
|
||||
case ZONE_ID_SLAVE_PENS:
|
||||
return m_scripts[OPVP_ID_ZM];
|
||||
case ZONE_ID_SHADOW_LABYRINTH:
|
||||
case ZONE_ID_AUCHENAI_CRYPTS:
|
||||
case ZONE_ID_SETHEKK_HALLS:
|
||||
case ZONE_ID_MANA_TOMBS:
|
||||
return m_scripts[OPVP_ID_TF];
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Function that handles the players which enters a specific zone
|
||||
|
||||
@param player to be handled in the event
|
||||
@param zone id used for the current outdoor pvp script
|
||||
*/
|
||||
void OutdoorPvPMgr::HandlePlayerEnterZone(Player* player, uint32 zoneId)
|
||||
{
|
||||
if (OutdoorPvP* script = GetScript(zoneId))
|
||||
script->HandlePlayerEnterZone(player, true);
|
||||
else if (OutdoorPvP* script = GetScriptOfAffectedZone(zoneId))
|
||||
script->HandlePlayerEnterZone(player, false);
|
||||
}
|
||||
|
||||
/**
|
||||
Function that handles the player who leaves a specific zone
|
||||
|
||||
@param player to be handled in the event
|
||||
@param zone id used for the current outdoor pvp script
|
||||
*/
|
||||
void OutdoorPvPMgr::HandlePlayerLeaveZone(Player* player, uint32 zoneId)
|
||||
{
|
||||
// teleport: called once from Player::CleanupsBeforeDelete, once from Player::UpdateZone
|
||||
if (OutdoorPvP* script = GetScript(zoneId))
|
||||
script->HandlePlayerLeaveZone(player, true);
|
||||
else if (OutdoorPvP* script = GetScriptOfAffectedZone(zoneId))
|
||||
script->HandlePlayerLeaveZone(player, false);
|
||||
}
|
||||
|
||||
void OutdoorPvPMgr::Update(uint32 diff)
|
||||
{
|
||||
m_updateTimer.Update(diff);
|
||||
if (!m_updateTimer.Passed())
|
||||
return;
|
||||
|
||||
for (uint8 i = 0; i < MAX_OPVP_ID; ++i)
|
||||
(*m_scripts[i]).Update(m_updateTimer.GetCurrent());
|
||||
|
||||
m_updateTimer.Reset();
|
||||
}
|
||||
|
||||
/**
|
||||
Function that gets the capture point slider value
|
||||
|
||||
@param capture point entry
|
||||
*/
|
||||
int8 OutdoorPvPMgr::GetCapturePointSliderValue(uint32 entry)
|
||||
{
|
||||
std::map<uint32, int8>::iterator itr = m_capturePointSlider.find(entry);
|
||||
|
||||
if (itr != m_capturePointSlider.end())
|
||||
return itr->second;
|
||||
|
||||
// return default value if we can't find any
|
||||
return CAPTURE_SLIDER_NEUTRAL;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,4 +19,105 @@
|
|||
#ifndef WORLD_PVP_MGR_H
|
||||
#define WORLD_PVP_MGR_H
|
||||
|
||||
#include "Common.h"
|
||||
#include "Policies/Singleton.h"
|
||||
#include "Timer.h"
|
||||
|
||||
enum
|
||||
{
|
||||
TIMER_OPVP_MGR_UPDATE = MINUTE * IN_MILLISECONDS // 1 minute is enough for us but this might change with wintergrasp support
|
||||
};
|
||||
|
||||
enum OutdoorPvPTypes
|
||||
{
|
||||
OPVP_ID_SI = 0,
|
||||
OPVP_ID_EP,
|
||||
OPVP_ID_HP,
|
||||
OPVP_ID_ZM,
|
||||
OPVP_ID_TF,
|
||||
OPVP_ID_NA,
|
||||
OPVP_ID_GH,
|
||||
|
||||
MAX_OPVP_ID
|
||||
};
|
||||
|
||||
enum OutdoorPvPZones
|
||||
{
|
||||
ZONE_ID_SILITHUS = 1377,
|
||||
ZONE_ID_TEMPLE_OF_AQ = 3428,
|
||||
ZONE_ID_RUINS_OF_AQ = 3429,
|
||||
ZONE_ID_GATES_OF_AQ = 3478,
|
||||
|
||||
ZONE_ID_EASTERN_PLAGUELANDS = 139,
|
||||
ZONE_ID_STRATHOLME = 2017,
|
||||
ZONE_ID_SCHOLOMANCE = 2057,
|
||||
|
||||
ZONE_ID_HELLFIRE_PENINSULA = 3483,
|
||||
ZONE_ID_HELLFIRE_RAMPARTS = 3562,
|
||||
ZONE_ID_HELLFIRE_CITADEL = 3563,
|
||||
ZONE_ID_BLOOD_FURNACE = 3713,
|
||||
ZONE_ID_SHATTERED_HALLS = 3714,
|
||||
ZONE_ID_MAGTHERIDON_LAIR = 3836,
|
||||
|
||||
ZONE_ID_ZANGARMARSH = 3521,
|
||||
ZONE_ID_SERPENTSHRINE_CAVERN = 3607,
|
||||
ZONE_ID_STREAMVAULT = 3715,
|
||||
ZONE_ID_UNDERBOG = 3716,
|
||||
ZONE_ID_SLAVE_PENS = 3717,
|
||||
|
||||
ZONE_ID_TEROKKAR_FOREST = 3519,
|
||||
ZONE_ID_SHADOW_LABYRINTH = 3789,
|
||||
ZONE_ID_AUCHENAI_CRYPTS = 3790,
|
||||
ZONE_ID_SETHEKK_HALLS = 3791,
|
||||
ZONE_ID_MANA_TOMBS = 3792,
|
||||
|
||||
ZONE_ID_NAGRAND = 3518,
|
||||
|
||||
ZONE_ID_GRIZZLY_HILLS = 394
|
||||
};
|
||||
|
||||
class Player;
|
||||
class GameObject;
|
||||
class Creature;
|
||||
class OutdoorPvP;
|
||||
|
||||
class OutdoorPvPMgr
|
||||
{
|
||||
public:
|
||||
OutdoorPvPMgr();
|
||||
~OutdoorPvPMgr();
|
||||
|
||||
// load all outdoor pvp scripts
|
||||
void InitOutdoorPvP();
|
||||
|
||||
// called when a player enters an outdoor pvp area
|
||||
void HandlePlayerEnterZone(Player* player, uint32 zoneId);
|
||||
|
||||
// called when player leaves an outdoor pvp area
|
||||
void HandlePlayerLeaveZone(Player* player, uint32 zoneId);
|
||||
|
||||
// return assigned outdoor pvp script
|
||||
OutdoorPvP* GetScript(uint32 zoneId);
|
||||
|
||||
void Update(uint32 diff);
|
||||
|
||||
// Handle capture point stuff
|
||||
int8 GetCapturePointSliderValue(uint32 entry);
|
||||
void SetCapturePointSlider(uint32 entry, int8 value) { m_capturePointSlider[entry] = value; }
|
||||
|
||||
private:
|
||||
// return assigned outdoor pvp script
|
||||
OutdoorPvP* GetScriptOfAffectedZone(uint32 zoneId);
|
||||
|
||||
// contains all outdoor pvp scripts
|
||||
OutdoorPvP* m_scripts[MAX_OPVP_ID];
|
||||
|
||||
std::map<uint32 /*capture point entry*/, int8 /*slider value*/> m_capturePointSlider;
|
||||
|
||||
// update interval
|
||||
ShortIntervalTimer m_updateTimer;
|
||||
};
|
||||
|
||||
#define sOutdoorPvPMgr MaNGOS::Singleton<OutdoorPvPMgr>::Instance()
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#ifndef __REVISION_NR_H__
|
||||
#define __REVISION_NR_H__
|
||||
#define REVISION_NR "0127"
|
||||
#define REVISION_NR "12098"
|
||||
#endif // __REVISION_NR_H__
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue