Performance improvements in outdoorpvp handling.

--HG--
branch : trunk
This commit is contained in:
w12x
2008-12-22 18:36:25 +01:00
parent 65ef38963d
commit 657ee403e3
9 changed files with 45 additions and 46 deletions
+1 -7
View File
@@ -28,7 +28,7 @@
OutdoorPvPObjective::OutdoorPvPObjective(OutdoorPvP * pvp) OutdoorPvPObjective::OutdoorPvPObjective(OutdoorPvP * pvp)
: m_PvP(pvp), m_AllianceActivePlayerCount(0), m_HordeActivePlayerCount(0), : m_PvP(pvp), m_AllianceActivePlayerCount(0), m_HordeActivePlayerCount(0),
m_ShiftTimer(0), m_ShiftPhase(0), m_ShiftMaxPhase(0), m_OldPhase(0), m_ShiftPhase(0), m_ShiftMaxPhase(0), m_OldPhase(0),
m_State(0), m_OldState(0), m_CapturePoint(0), m_NeutralValue(0), m_ShiftMaxCaptureSpeed(0), m_CapturePointCreature(0) m_State(0), m_OldState(0), m_CapturePoint(0), m_NeutralValue(0), m_ShiftMaxCaptureSpeed(0), m_CapturePointCreature(0)
{ {
} }
@@ -456,9 +456,6 @@ bool OutdoorPvP::Update(uint32 diff)
bool OutdoorPvPObjective::Update(uint32 diff) bool OutdoorPvPObjective::Update(uint32 diff)
{ {
uint32 Challenger = 0; uint32 Challenger = 0;
if(m_ShiftTimer<diff)
{
m_ShiftTimer = OUTDOORPVP_OBJECTIVE_UPDATE_INTERVAL;
// get the difference of numbers // get the difference of numbers
float fact_diff = (m_AllianceActivePlayerCount - m_HordeActivePlayerCount); float fact_diff = (m_AllianceActivePlayerCount - m_HordeActivePlayerCount);
@@ -526,9 +523,6 @@ bool OutdoorPvPObjective::Update(uint32 diff)
} }
return true; return true;
} else m_ShiftTimer-=diff;
return false;
} }
bool OutdoorPvPObjective::HandleCaptureCreaturePlayerMoveInLos(Player * p, Creature * c) bool OutdoorPvPObjective::HandleCaptureCreaturePlayerMoveInLos(Player * p, Creature * c)
+1 -5
View File
@@ -24,8 +24,6 @@
#include <map> #include <map>
#include <set> #include <set>
#define OUTDOORPVP_OBJECTIVE_UPDATE_INTERVAL 1000
#define OPVP_TRIGGER_CREATURE_ENTRY 12999 #define OPVP_TRIGGER_CREATURE_ENTRY 12999
enum ObjectiveStates{ enum ObjectiveStates{
@@ -133,8 +131,6 @@ protected:
std::set<uint64> m_ActivePlayerGuids; std::set<uint64> m_ActivePlayerGuids;
int32 m_AllianceActivePlayerCount; int32 m_AllianceActivePlayerCount;
int32 m_HordeActivePlayerCount; int32 m_HordeActivePlayerCount;
// time left to capture the objective
uint32 m_ShiftTimer;
// total shift needed to capture the objective // total shift needed to capture the objective
float m_ShiftMaxPhase; float m_ShiftMaxPhase;
// maximum speed of capture // maximum speed of capture
@@ -173,7 +169,7 @@ public:
// deletes all gos/creatures spawned by the pvp // deletes all gos/creatures spawned by the pvp
void DeleteSpawns(); void DeleteSpawns();
typedef std::set<OutdoorPvPObjective *> OutdoorPvPObjectiveSet; typedef std::vector<OutdoorPvPObjective *> OutdoorPvPObjectiveSet;
// called from Player::UpdateZone to add / remove buffs given by outdoor pvp events // called from Player::UpdateZone to add / remove buffs given by outdoor pvp events
virtual void HandlePlayerEnterZone(Player * plr, uint32 zone); virtual void HandlePlayerEnterZone(Player * plr, uint32 zone);
+8 -8
View File
@@ -121,7 +121,7 @@ bool OutdoorPvPObjectiveEP_EWT::Update(uint32 diff)
// send this too, sometimes it resets :S // send this too, sometimes it resets :S
SendUpdateWorldState(EP_UI_TOWER_SLIDER_N, m_NeutralValue); SendUpdateWorldState(EP_UI_TOWER_SLIDER_N, m_NeutralValue);
} }
return true; return m_OldState != m_State;
} }
return false; return false;
} }
@@ -296,7 +296,7 @@ bool OutdoorPvPObjectiveEP_NPT::Update(uint32 diff)
// send this too, sometimes it resets :S // send this too, sometimes it resets :S
SendUpdateWorldState(EP_UI_TOWER_SLIDER_N, m_NeutralValue); SendUpdateWorldState(EP_UI_TOWER_SLIDER_N, m_NeutralValue);
} }
return true; return m_OldState != m_State;
} }
return false; return false;
} }
@@ -463,7 +463,7 @@ bool OutdoorPvPObjectiveEP_CGT::Update(uint32 diff)
// send this too, sometimes it resets :S // send this too, sometimes it resets :S
SendUpdateWorldState(EP_UI_TOWER_SLIDER_N, m_NeutralValue); SendUpdateWorldState(EP_UI_TOWER_SLIDER_N, m_NeutralValue);
} }
return true; return m_OldState != m_State;
} }
return false; return false;
} }
@@ -629,7 +629,7 @@ bool OutdoorPvPObjectiveEP_PWT::Update(uint32 diff)
// send this too, sometimes it resets :S // send this too, sometimes it resets :S
SendUpdateWorldState(EP_UI_TOWER_SLIDER_N, m_NeutralValue); SendUpdateWorldState(EP_UI_TOWER_SLIDER_N, m_NeutralValue);
} }
return true; return m_OldState != m_State;
} }
return false; return false;
} }
@@ -791,10 +791,10 @@ bool OutdoorPvPEP::SetupOutdoorPvP()
for(int i = 0; i < EPBuffZonesNum; ++i) for(int i = 0; i < EPBuffZonesNum; ++i)
sOutdoorPvPMgr.AddZone(EPBuffZones[i],this); sOutdoorPvPMgr.AddZone(EPBuffZones[i],this);
m_OutdoorPvPObjectives.insert(new OutdoorPvPObjectiveEP_EWT(this)); m_OutdoorPvPObjectives.push_back(new OutdoorPvPObjectiveEP_EWT(this));
m_OutdoorPvPObjectives.insert(new OutdoorPvPObjectiveEP_PWT(this)); m_OutdoorPvPObjectives.push_back(new OutdoorPvPObjectiveEP_PWT(this));
m_OutdoorPvPObjectives.insert(new OutdoorPvPObjectiveEP_CGT(this)); m_OutdoorPvPObjectives.push_back(new OutdoorPvPObjectiveEP_CGT(this));
m_OutdoorPvPObjectives.insert(new OutdoorPvPObjectiveEP_NPT(this)); m_OutdoorPvPObjectives.push_back(new OutdoorPvPObjectiveEP_NPT(this));
return true; return true;
} }
+4 -4
View File
@@ -72,11 +72,11 @@ bool OutdoorPvPHP::SetupOutdoorPvP()
for(int i = 0; i < OutdoorPvPHPBuffZonesNum; ++i) for(int i = 0; i < OutdoorPvPHPBuffZonesNum; ++i)
sOutdoorPvPMgr.AddZone(OutdoorPvPHPBuffZones[i],this); sOutdoorPvPMgr.AddZone(OutdoorPvPHPBuffZones[i],this);
m_OutdoorPvPObjectives.insert(new OutdoorPvPObjectiveHP(this,HP_TOWER_BROKEN_HILL)); m_OutdoorPvPObjectives.push_back(new OutdoorPvPObjectiveHP(this,HP_TOWER_BROKEN_HILL));
m_OutdoorPvPObjectives.insert(new OutdoorPvPObjectiveHP(this,HP_TOWER_OVERLOOK)); m_OutdoorPvPObjectives.push_back(new OutdoorPvPObjectiveHP(this,HP_TOWER_OVERLOOK));
m_OutdoorPvPObjectives.insert(new OutdoorPvPObjectiveHP(this,HP_TOWER_STADIUM)); m_OutdoorPvPObjectives.push_back(new OutdoorPvPObjectiveHP(this,HP_TOWER_STADIUM));
return true; return true;
} }
@@ -277,7 +277,7 @@ bool OutdoorPvPObjectiveHP::Update(uint32 diff)
// send this too, sometimes the slider disappears, dunno why :( // send this too, sometimes the slider disappears, dunno why :(
SendUpdateWorldState(HP_UI_TOWER_SLIDER_DISPLAY, 1); SendUpdateWorldState(HP_UI_TOWER_SLIDER_DISPLAY, 1);
} }
return true; return m_OldState != m_State;
} }
return false; return false;
} }
+14 -9
View File
@@ -30,6 +30,7 @@ INSTANTIATE_SINGLETON_1( OutdoorPvPMgr );
OutdoorPvPMgr::OutdoorPvPMgr() OutdoorPvPMgr::OutdoorPvPMgr()
{ {
m_UpdateTimer = OUTDOORPVP_OBJECTIVE_UPDATE_INTERVAL;
//sLog.outDebug("Instantiating OutdoorPvPMgr"); //sLog.outDebug("Instantiating OutdoorPvPMgr");
} }
@@ -54,7 +55,7 @@ void OutdoorPvPMgr::InitOutdoorPvP()
} }
else else
{ {
m_OutdoorPvPSet.insert(pOP); m_OutdoorPvPSet.push_back(pOP);
sLog.outDebug("OutdoorPvP : HP successfully initiated."); sLog.outDebug("OutdoorPvP : HP successfully initiated.");
} }
@@ -68,7 +69,7 @@ void OutdoorPvPMgr::InitOutdoorPvP()
} }
else else
{ {
m_OutdoorPvPSet.insert(pOP); m_OutdoorPvPSet.push_back(pOP);
sLog.outDebug("OutdoorPvP : NA successfully initiated."); sLog.outDebug("OutdoorPvP : NA successfully initiated.");
} }
@@ -82,7 +83,7 @@ void OutdoorPvPMgr::InitOutdoorPvP()
} }
else else
{ {
m_OutdoorPvPSet.insert(pOP); m_OutdoorPvPSet.push_back(pOP);
sLog.outDebug("OutdoorPvP : TF successfully initiated."); sLog.outDebug("OutdoorPvP : TF successfully initiated.");
} }
@@ -95,7 +96,7 @@ void OutdoorPvPMgr::InitOutdoorPvP()
} }
else else
{ {
m_OutdoorPvPSet.insert(pOP); m_OutdoorPvPSet.push_back(pOP);
sLog.outDebug("OutdoorPvP : ZM successfully initiated."); sLog.outDebug("OutdoorPvP : ZM successfully initiated.");
} }
@@ -108,7 +109,7 @@ void OutdoorPvPMgr::InitOutdoorPvP()
} }
else else
{ {
m_OutdoorPvPSet.insert(pOP); m_OutdoorPvPSet.push_back(pOP);
sLog.outDebug("OutdoorPvP : SI successfully initiated."); sLog.outDebug("OutdoorPvP : SI successfully initiated.");
} }
@@ -121,7 +122,7 @@ void OutdoorPvPMgr::InitOutdoorPvP()
} }
else else
{ {
m_OutdoorPvPSet.insert(pOP); m_OutdoorPvPSet.push_back(pOP);
sLog.outDebug("OutdoorPvP : EP successfully initiated."); sLog.outDebug("OutdoorPvP : EP successfully initiated.");
} }
} }
@@ -172,10 +173,14 @@ OutdoorPvP * OutdoorPvPMgr::GetOutdoorPvPToZoneId(uint32 zoneid)
void OutdoorPvPMgr::Update(uint32 diff) void OutdoorPvPMgr::Update(uint32 diff)
{ {
for(OutdoorPvPSet::iterator itr = m_OutdoorPvPSet.begin(); itr != m_OutdoorPvPSet.end(); ++itr) if(m_UpdateTimer < diff)
{ {
(*itr)->Update(diff); for(OutdoorPvPSet::iterator itr = m_OutdoorPvPSet.begin(); itr != m_OutdoorPvPSet.end(); ++itr)
} {
(*itr)->Update(diff);
}
m_UpdateTimer = OUTDOORPVP_OBJECTIVE_UPDATE_INTERVAL;
} else m_UpdateTimer -= diff;
} }
bool OutdoorPvPMgr::HandleCustomSpell(Player *plr, uint32 spellId, GameObject * go) bool OutdoorPvPMgr::HandleCustomSpell(Player *plr, uint32 spellId, GameObject * go)
+5 -1
View File
@@ -19,6 +19,8 @@
#ifndef OUTDOOR_PVP_MGR_H_ #ifndef OUTDOOR_PVP_MGR_H_
#define OUTDOOR_PVP_MGR_H_ #define OUTDOOR_PVP_MGR_H_
#define OUTDOORPVP_OBJECTIVE_UPDATE_INTERVAL 1000
#include "OutdoorPvP.h" #include "OutdoorPvP.h"
#include "Policies/Singleton.h" #include "Policies/Singleton.h"
@@ -61,7 +63,7 @@ public:
void HandleDropFlag(Player * plr, uint32 spellId); void HandleDropFlag(Player * plr, uint32 spellId);
typedef std::set<OutdoorPvP*> OutdoorPvPSet; typedef std::vector<OutdoorPvP*> OutdoorPvPSet;
typedef std::map<uint32 /* zoneid */, OutdoorPvP*> OutdoorPvPMap; typedef std::map<uint32 /* zoneid */, OutdoorPvP*> OutdoorPvPMap;
private: private:
// contains all initiated outdoor pvp events // contains all initiated outdoor pvp events
@@ -70,6 +72,8 @@ private:
// maps the zone ids to an outdoor pvp event // maps the zone ids to an outdoor pvp event
// used in player event handling // used in player event handling
OutdoorPvPMap m_OutdoorPvPMap; OutdoorPvPMap m_OutdoorPvPMap;
// update interval
float m_UpdateTimer;
}; };
#define sOutdoorPvPMgr Trinity::Singleton<OutdoorPvPMgr>::Instance() #define sOutdoorPvPMgr Trinity::Singleton<OutdoorPvPMgr>::Instance()
+2 -2
View File
@@ -262,7 +262,7 @@ bool OutdoorPvPNA::SetupOutdoorPvP()
m_obj = new OutdoorPvPObjectiveNA(this); m_obj = new OutdoorPvPObjectiveNA(this);
if(!m_obj) if(!m_obj)
return false; return false;
m_OutdoorPvPObjectives.insert(m_obj); m_OutdoorPvPObjectives.push_back(m_obj);
return true; return true;
} }
@@ -660,7 +660,7 @@ bool OutdoorPvPObjectiveNA::Update(uint32 diff)
SendUpdateWorldState(NA_UI_TOWER_SLIDER_POS, phase); SendUpdateWorldState(NA_UI_TOWER_SLIDER_POS, phase);
SendUpdateWorldState(NA_UI_TOWER_SLIDER_N, m_NeutralValue); SendUpdateWorldState(NA_UI_TOWER_SLIDER_N, m_NeutralValue);
} }
return true; return m_OldState != m_State;
} }
return false; return false;
} }
+6 -6
View File
@@ -278,11 +278,11 @@ bool OutdoorPvPTF::SetupOutdoorPvP()
for(int i = 0; i < OutdoorPvPTFBuffZonesNum; ++i) for(int i = 0; i < OutdoorPvPTFBuffZonesNum; ++i)
sOutdoorPvPMgr.AddZone(OutdoorPvPTFBuffZones[i],this); sOutdoorPvPMgr.AddZone(OutdoorPvPTFBuffZones[i],this);
m_OutdoorPvPObjectives.insert(new OutdoorPvPObjectiveTF(this,TF_TOWER_NW)); m_OutdoorPvPObjectives.push_back(new OutdoorPvPObjectiveTF(this,TF_TOWER_NW));
m_OutdoorPvPObjectives.insert(new OutdoorPvPObjectiveTF(this,TF_TOWER_N)); m_OutdoorPvPObjectives.push_back(new OutdoorPvPObjectiveTF(this,TF_TOWER_N));
m_OutdoorPvPObjectives.insert(new OutdoorPvPObjectiveTF(this,TF_TOWER_NE)); m_OutdoorPvPObjectives.push_back(new OutdoorPvPObjectiveTF(this,TF_TOWER_NE));
m_OutdoorPvPObjectives.insert(new OutdoorPvPObjectiveTF(this,TF_TOWER_SE)); m_OutdoorPvPObjectives.push_back(new OutdoorPvPObjectiveTF(this,TF_TOWER_SE));
m_OutdoorPvPObjectives.insert(new OutdoorPvPObjectiveTF(this,TF_TOWER_S)); m_OutdoorPvPObjectives.push_back(new OutdoorPvPObjectiveTF(this,TF_TOWER_S));
return true; return true;
} }
@@ -360,7 +360,7 @@ bool OutdoorPvPObjectiveTF::Update(uint32 diff)
// send this too, sometimes it resets :S // send this too, sometimes it resets :S
SendUpdateWorldState(TF_UI_TOWER_SLIDER_N, m_NeutralValue); SendUpdateWorldState(TF_UI_TOWER_SLIDER_N, m_NeutralValue);
} }
return true; return m_OldState != m_State;
} }
return false; return false;
} }
+4 -4
View File
@@ -142,7 +142,7 @@ bool OutdoorPvPObjectiveZM_Beacon::Update(uint32 diff)
SendUpdateWorldState(ZMBeaconInfo[m_TowerType].slider_pos, phase); SendUpdateWorldState(ZMBeaconInfo[m_TowerType].slider_pos, phase);
SendUpdateWorldState(ZMBeaconInfo[m_TowerType].slider_n, m_NeutralValue); SendUpdateWorldState(ZMBeaconInfo[m_TowerType].slider_n, m_NeutralValue);
} }
return true; return m_OldState != m_State;
} }
return false; return false;
} }
@@ -205,10 +205,10 @@ bool OutdoorPvPZM::SetupOutdoorPvP()
for(int i = 0; i < OutdoorPvPZMBuffZonesNum; ++i) for(int i = 0; i < OutdoorPvPZMBuffZonesNum; ++i)
sOutdoorPvPMgr.AddZone(OutdoorPvPZMBuffZones[i],this); sOutdoorPvPMgr.AddZone(OutdoorPvPZMBuffZones[i],this);
m_OutdoorPvPObjectives.insert(new OutdoorPvPObjectiveZM_Beacon(this,ZM_BEACON_WEST)); m_OutdoorPvPObjectives.push_back(new OutdoorPvPObjectiveZM_Beacon(this,ZM_BEACON_WEST));
m_OutdoorPvPObjectives.insert(new OutdoorPvPObjectiveZM_Beacon(this,ZM_BEACON_EAST)); m_OutdoorPvPObjectives.push_back(new OutdoorPvPObjectiveZM_Beacon(this,ZM_BEACON_EAST));
m_GraveYard = new OutdoorPvPObjectiveZM_GraveYard(this); m_GraveYard = new OutdoorPvPObjectiveZM_GraveYard(this);
m_OutdoorPvPObjectives.insert(m_GraveYard); // though the update function isn't used, the handleusego is! m_OutdoorPvPObjectives.push_back(m_GraveYard); // though the update function isn't used, the handleusego is!
return true; return true;
} }