aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormegamage <none@none>2009-08-10 23:38:51 -0500
committermegamage <none@none>2009-08-10 23:38:51 -0500
commitc8ed3cf1e963250cd7a64ceff493b8a370632867 (patch)
tree2653cd15347be0f53d6dc0de7f7009e36668ad84 /src
parent31374835f6d4ef983d75af1209125d9db08442af (diff)
*Some update of opvp (no real change)
--HG-- branch : trunk
Diffstat (limited to 'src')
-rw-r--r--src/game/ObjectMgr.cpp4
-rw-r--r--src/game/ObjectMgr.h4
-rw-r--r--src/game/OutdoorPvP.cpp65
-rw-r--r--src/game/OutdoorPvP.h17
-rw-r--r--src/game/OutdoorPvPEP.cpp614
-rw-r--r--src/game/OutdoorPvPEP.h12
-rw-r--r--src/game/OutdoorPvPHP.cpp217
-rw-r--r--src/game/OutdoorPvPHP.h3
-rw-r--r--src/game/OutdoorPvPNA.cpp109
-rw-r--r--src/game/OutdoorPvPNA.h2
-rw-r--r--src/game/OutdoorPvPTF.cpp125
-rw-r--r--src/game/OutdoorPvPTF.h2
-rw-r--r--src/game/OutdoorPvPZM.cpp100
-rw-r--r--src/game/OutdoorPvPZM.h4
-rw-r--r--src/game/Wintergrasp.cpp152
-rw-r--r--src/game/Wintergrasp.h19
16 files changed, 798 insertions, 651 deletions
diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp
index ec300715f86..98594519a92 100644
--- a/src/game/ObjectMgr.cpp
+++ b/src/game/ObjectMgr.cpp
@@ -1386,7 +1386,7 @@ void ObjectMgr::RemoveCreatureFromGrid(uint32 guid, CreatureData const* data)
}
}
-uint32 ObjectMgr::AddGameObject(uint32 entry, uint32 mapId, float x, float y, float z, float o, uint32 spawntimedelay, float rotation0, float rotation1, float rotation2, float rotation3)
+uint32 ObjectMgr::AddGOData(uint32 entry, uint32 mapId, float x, float y, float z, float o, uint32 spawntimedelay, float rotation0, float rotation1, float rotation2, float rotation3)
{
GameObjectInfo const* goinfo = GetGameObjectInfo(entry);
if (!goinfo)
@@ -1433,7 +1433,7 @@ uint32 ObjectMgr::AddGameObject(uint32 entry, uint32 mapId, float x, float y, fl
return guid;
}
-uint32 ObjectMgr::AddCreature(uint32 entry, uint32 team, uint32 mapId, float x, float y, float z, float o, uint32 spawntimedelay)
+uint32 ObjectMgr::AddCreData(uint32 entry, uint32 team, uint32 mapId, float x, float y, float z, float o, uint32 spawntimedelay)
{
CreatureInfo const *cInfo = GetCreatureTemplate(entry);
if(!cInfo)
diff --git a/src/game/ObjectMgr.h b/src/game/ObjectMgr.h
index b770c3044a4..a3c39f18fc9 100644
--- a/src/game/ObjectMgr.h
+++ b/src/game/ObjectMgr.h
@@ -754,8 +754,8 @@ class ObjectMgr
void RemoveCreatureFromGrid(uint32 guid, CreatureData const* data);
void AddGameobjectToGrid(uint32 guid, GameObjectData const* data);
void RemoveGameobjectFromGrid(uint32 guid, GameObjectData const* data);
- uint32 AddGameObject(uint32 entry, uint32 map, float x, float y, float z, float o, uint32 spawntimedelay = 0, float rotation0 = 0, float rotation1 = 0, float rotation2 = 0, float rotation3 = 0);
- uint32 AddCreature(uint32 entry, uint32 team, uint32 map, float x, float y, float z, float o, uint32 spawntimedelay = 0);
+ uint32 AddGOData(uint32 entry, uint32 map, float x, float y, float z, float o, uint32 spawntimedelay = 0, float rotation0 = 0, float rotation1 = 0, float rotation2 = 0, float rotation3 = 0);
+ uint32 AddCreData(uint32 entry, uint32 team, uint32 map, float x, float y, float z, float o, uint32 spawntimedelay = 0);
// reserved names
void LoadReservedPlayersNames();
diff --git a/src/game/OutdoorPvP.cpp b/src/game/OutdoorPvP.cpp
index d3c96f53fcb..dc17f340038 100644
--- a/src/game/OutdoorPvP.cpp
+++ b/src/game/OutdoorPvP.cpp
@@ -48,28 +48,52 @@ void OPvPCapturePoint::HandlePlayerLeave(Player * plr)
m_activePlayers[plr->GetTeamId()].erase(plr);
}
-bool OPvPCapturePoint::AddObject(uint32 type, uint32 entry, uint32 map, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3)
+void OPvPCapturePoint::AddGO(uint32 type, uint32 guid, uint32 entry)
{
- uint32 guid = objmgr.AddGameObject(entry, map, x, y, z, o, 0, rotation0, rotation1, rotation2, rotation3);
- if(!guid)
- return false;
-
- // 2 way registering
+ if(!entry)
+ {
+ const GameObjectData *data = objmgr.GetGOData(guid);
+ if(!data)
+ return;
+ entry = data->id;
+ }
m_Objects[type] = MAKE_NEW_GUID(guid, entry, HIGHGUID_GAMEOBJECT);
m_ObjectTypes[m_Objects[type]]=type;
+}
- return true;
+void OPvPCapturePoint::AddCre(uint32 type, uint32 guid, uint32 entry)
+{
+ if(!entry)
+ {
+ const CreatureData *data = objmgr.GetCreatureData(guid);
+ if(!data)
+ return;
+ entry = data->id;
+ }
+ m_Creatures[type] = MAKE_NEW_GUID(guid, entry, HIGHGUID_UNIT);
+ m_CreatureTypes[m_Creatures[type]] = type;
+}
+
+bool OPvPCapturePoint::AddObject(uint32 type, uint32 entry, uint32 map, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3)
+{
+ if(uint32 guid = objmgr.AddGOData(entry, map, x, y, z, o, 0, rotation0, rotation1, rotation2, rotation3))
+ {
+ AddGO(type, guid, entry);
+ return true;
+ }
+
+ return false;
}
bool OPvPCapturePoint::AddCreature(uint32 type, uint32 entry, uint32 team, uint32 map, float x, float y, float z, float o, uint32 spawntimedelay)
{
- uint32 guid = objmgr.AddCreature(entry, team, map, x, y, z, o, spawntimedelay);
- if(!guid)
- return false;
+ if(uint32 guid = objmgr.AddCreData(entry, team, map, x, y, z, o, spawntimedelay))
+ {
+ AddCre(type, guid, entry);
+ return true;
+ }
- m_Creatures[type] = MAKE_NEW_GUID(guid, entry, HIGHGUID_UNIT);
- m_CreatureTypes[m_Creatures[type]] = type;
- return true;
+ return false;
}
bool OPvPCapturePoint::AddCapturePoint(uint32 entry, uint32 map, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3)
@@ -84,7 +108,7 @@ bool OPvPCapturePoint::AddCapturePoint(uint32 entry, uint32 map, float x, float
return false;
}
- m_CapturePointGUID = objmgr.AddGameObject(entry, map, x, y, z, o, 0, rotation0, rotation1, rotation2, rotation3);
+ m_CapturePointGUID = objmgr.AddGOData(entry, map, x, y, z, o, 0, rotation0, rotation1, rotation2, rotation3);
if(!m_CapturePointGUID)
return false;
@@ -209,7 +233,13 @@ bool OutdoorPvP::Update(uint32 diff)
{
bool objective_changed = false;
for(OPvPCapturePointMap::iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr)
- objective_changed |= (*itr)->Update(diff);
+ {
+ if((*itr)->Update(diff))
+ {
+ (*itr)->ChangeState();
+ objective_changed = true;
+ }
+ }
return objective_changed;
}
@@ -316,7 +346,10 @@ bool OPvPCapturePoint::Update(uint32 diff)
m_State = OBJECTIVESTATE_ALLIANCE_HORDE_CHALLENGE;
}
- return true;
+ if(m_ShiftPhase != m_OldPhase)
+ SendChangePhase();
+
+ return m_OldState != m_State;
}
void OutdoorPvP::SendUpdateWorldState(uint32 field, uint32 value)
diff --git a/src/game/OutdoorPvP.h b/src/game/OutdoorPvP.h
index 129dd414cd6..e9b6c8ec407 100644
--- a/src/game/OutdoorPvP.h
+++ b/src/game/OutdoorPvP.h
@@ -97,6 +97,8 @@ public:
// 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 SendChangePhase() {}
virtual bool HandleGossipOption(Player *plr, uint64 guid, uint32 gossipid);
@@ -109,15 +111,18 @@ public:
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 AddCapturePoint(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:
- virtual bool AddCapturePoint(uint32 entry, uint32 map, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3);
- virtual bool AddObject(uint32 type, uint32 entry, uint32 map, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3);
- virtual bool AddCreature(uint32 type, uint32 entry, uint32 teamval, uint32 map, float x, float y, float z, float o, uint32 spawntimedelay = 0);
+ 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);
- virtual bool DelCreature(uint32 type);
- virtual bool DelObject(uint32 type);
- virtual bool DelCapturePoint();
+ bool DelCreature(uint32 type);
+ bool DelObject(uint32 type);
+ bool DelCapturePoint();
protected:
// active players in the area of the objective, 0 - alliance, 1 - horde
diff --git a/src/game/OutdoorPvPEP.cpp b/src/game/OutdoorPvPEP.cpp
index 70054761582..db4cfd94917 100644
--- a/src/game/OutdoorPvPEP.cpp
+++ b/src/game/OutdoorPvPEP.cpp
@@ -35,95 +35,90 @@ OPvPCapturePointEP_EWT::OPvPCapturePointEP_EWT(OutdoorPvP *pvp)
AddObject(EP_EWT_FLAGS,EPTowerFlags[EP_EWT].entry,EPTowerFlags[EP_EWT].map,EPTowerFlags[EP_EWT].x,EPTowerFlags[EP_EWT].y,EPTowerFlags[EP_EWT].z,EPTowerFlags[EP_EWT].o,EPTowerFlags[EP_EWT].rot0,EPTowerFlags[EP_EWT].rot1,EPTowerFlags[EP_EWT].rot2,EPTowerFlags[EP_EWT].rot3);
}
-bool OPvPCapturePointEP_EWT::Update(uint32 diff)
+void OPvPCapturePointEP_EWT::ChangeState()
{
- if(OPvPCapturePoint::Update(diff))
+ if(fabs(m_ShiftPhase) == m_ShiftMaxPhase) // state won't change, only phase when maxed out!
{
- if(m_OldState != m_State || fabs(m_ShiftPhase) == m_ShiftMaxPhase) // state won't change, only phase when maxed out!
+ // if changing from controlling alliance to horde or vice versa
+ if( m_OldState == OBJECTIVESTATE_ALLIANCE && m_OldState != m_State )
{
- // if changing from controlling alliance to horde or vice versa
- if( m_OldState == OBJECTIVESTATE_ALLIANCE && m_OldState != m_State )
- {
- sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_EP_LOOSE_EWT_A));
- ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_EWT] = 0;
- }
- else if ( m_OldState == OBJECTIVESTATE_HORDE && m_OldState != m_State )
- {
- sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_EP_LOOSE_EWT_H));
- ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_EWT] = 0;
- }
-
- uint32 artkit = 21;
-
- switch(m_State)
- {
- case OBJECTIVESTATE_ALLIANCE:
- if(m_ShiftPhase == m_ShiftMaxPhase)
- m_TowerState = EP_TS_A;
- else
- m_TowerState = EP_TS_A_P;
- artkit = 2;
- SummonSupportUnitAtNorthpassTower(ALLIANCE);
- ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_EWT] = ALLIANCE;
- if(m_OldState != m_State) sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_EP_CAPTURE_EWT_A));
- break;
- case OBJECTIVESTATE_HORDE:
- if(m_ShiftPhase == -m_ShiftMaxPhase)
- m_TowerState = EP_TS_H;
- else
- m_TowerState = EP_TS_H_P;
- artkit = 1;
- SummonSupportUnitAtNorthpassTower(HORDE);
- ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_EWT] = HORDE;
- if(m_OldState != m_State) sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_EP_CAPTURE_EWT_H));
- break;
- case OBJECTIVESTATE_NEUTRAL:
- m_TowerState = EP_TS_N;
- break;
- case OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE:
- case OBJECTIVESTATE_HORDE_ALLIANCE_CHALLENGE:
- m_TowerState = EP_TS_N_A;
- break;
- case OBJECTIVESTATE_NEUTRAL_HORDE_CHALLENGE:
- case OBJECTIVESTATE_ALLIANCE_HORDE_CHALLENGE:
- m_TowerState = EP_TS_N_H;
- break;
- }
-
- GameObject* flag = HashMapHolder<GameObject>::Find(m_CapturePointGUID);
- GameObject* flag2 = HashMapHolder<GameObject>::Find(m_Objects[EP_EWT_FLAGS]);
- if(flag)
- {
- flag->SetGoArtKit(artkit);
- flag->SendUpdateObjectToAllExcept(NULL);
- }
- if(flag2)
- {
- flag2->SetGoArtKit(artkit);
- flag2->SendUpdateObjectToAllExcept(NULL);
- }
-
+ sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_EP_LOOSE_EWT_A));
+ ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_EWT] = 0;
+ }
+ else if ( m_OldState == OBJECTIVESTATE_HORDE && m_OldState != m_State )
+ {
+ sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_EP_LOOSE_EWT_H));
+ ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_EWT] = 0;
+ }
- UpdateTowerState();
+ uint32 artkit = 21;
- // complete quest objective
- if(m_TowerState == EP_TS_A || m_TowerState == EP_TS_H)
- SendObjectiveComplete(EP_EWT_CM, 0);
+ switch(m_State)
+ {
+ case OBJECTIVESTATE_ALLIANCE:
+ if(m_ShiftPhase == m_ShiftMaxPhase)
+ m_TowerState = EP_TS_A;
+ else
+ m_TowerState = EP_TS_A_P;
+ artkit = 2;
+ SummonSupportUnitAtNorthpassTower(ALLIANCE);
+ ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_EWT] = ALLIANCE;
+ if(m_OldState != m_State) sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_EP_CAPTURE_EWT_A));
+ break;
+ case OBJECTIVESTATE_HORDE:
+ if(m_ShiftPhase == -m_ShiftMaxPhase)
+ m_TowerState = EP_TS_H;
+ else
+ m_TowerState = EP_TS_H_P;
+ artkit = 1;
+ SummonSupportUnitAtNorthpassTower(HORDE);
+ ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_EWT] = HORDE;
+ if(m_OldState != m_State) sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_EP_CAPTURE_EWT_H));
+ break;
+ case OBJECTIVESTATE_NEUTRAL:
+ m_TowerState = EP_TS_N;
+ break;
+ case OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE:
+ case OBJECTIVESTATE_HORDE_ALLIANCE_CHALLENGE:
+ m_TowerState = EP_TS_N_A;
+ break;
+ case OBJECTIVESTATE_NEUTRAL_HORDE_CHALLENGE:
+ case OBJECTIVESTATE_ALLIANCE_HORDE_CHALLENGE:
+ m_TowerState = EP_TS_N_H;
+ break;
}
- if(m_ShiftPhase != m_OldPhase)
+ GameObject* flag = HashMapHolder<GameObject>::Find(m_CapturePointGUID);
+ GameObject* flag2 = HashMapHolder<GameObject>::Find(m_Objects[EP_EWT_FLAGS]);
+ if(flag)
{
- // send this too, sometimes the slider disappears, dunno why :(
- SendUpdateWorldState(EP_UI_TOWER_SLIDER_DISPLAY, 1);
- // send these updates to only the ones in this objective
- uint32 phase = (uint32)ceil(( m_ShiftPhase + m_ShiftMaxPhase) / ( 2 * m_ShiftMaxPhase ) * 100.0f);
- SendUpdateWorldState(EP_UI_TOWER_SLIDER_POS, phase);
- // send this too, sometimes it resets :S
- SendUpdateWorldState(EP_UI_TOWER_SLIDER_N, m_NeutralValue);
+ flag->SetGoArtKit(artkit);
+ flag->SendUpdateObjectToAllExcept(NULL);
}
- return m_OldState != m_State;
+ if(flag2)
+ {
+ flag2->SetGoArtKit(artkit);
+ flag2->SendUpdateObjectToAllExcept(NULL);
+ }
+
+
+ UpdateTowerState();
+
+ // complete quest objective
+ if(m_TowerState == EP_TS_A || m_TowerState == EP_TS_H)
+ SendObjectiveComplete(EP_EWT_CM, 0);
}
- return false;
+}
+
+void OPvPCapturePointEP_EWT::SendChangePhase()
+{
+ // send this too, sometimes the slider disappears, dunno why :(
+ SendUpdateWorldState(EP_UI_TOWER_SLIDER_DISPLAY, 1);
+ // send these updates to only the ones in this objective
+ uint32 phase = (uint32)ceil(( m_ShiftPhase + m_ShiftMaxPhase) / ( 2 * m_ShiftMaxPhase ) * 100.0f);
+ SendUpdateWorldState(EP_UI_TOWER_SLIDER_POS, phase);
+ // send this too, sometimes it resets :S
+ SendUpdateWorldState(EP_UI_TOWER_SLIDER_N, m_NeutralValue);
}
void OPvPCapturePointEP_EWT::FillInitialWorldStates(WorldPacket &data)
@@ -194,96 +189,91 @@ OPvPCapturePointEP_NPT::OPvPCapturePointEP_NPT(OutdoorPvP *pvp)
AddObject(EP_NPT_FLAGS,EPTowerFlags[EP_NPT].entry,EPTowerFlags[EP_NPT].map,EPTowerFlags[EP_NPT].x,EPTowerFlags[EP_NPT].y,EPTowerFlags[EP_NPT].z,EPTowerFlags[EP_NPT].o,EPTowerFlags[EP_NPT].rot0,EPTowerFlags[EP_NPT].rot1,EPTowerFlags[EP_NPT].rot2,EPTowerFlags[EP_NPT].rot3);
}
-bool OPvPCapturePointEP_NPT::Update(uint32 diff)
+void OPvPCapturePointEP_NPT::ChangeState()
{
- if(OPvPCapturePoint::Update(diff))
+ if(fabs(m_ShiftPhase) == m_ShiftMaxPhase) // state won't change, only phase when maxed out!
{
- if(m_OldState != m_State || fabs(m_ShiftPhase) == m_ShiftMaxPhase) // state won't change, only phase when maxed out!
+ // if changing from controlling alliance to horde or vice versa
+ if( m_OldState == OBJECTIVESTATE_ALLIANCE && m_OldState != m_State )
{
- // if changing from controlling alliance to horde or vice versa
- if( m_OldState == OBJECTIVESTATE_ALLIANCE && m_OldState != m_State )
- {
- sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_EP_LOOSE_NPT_A));
- ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_NPT] = 0;
- }
- else if ( m_OldState == OBJECTIVESTATE_HORDE && m_OldState != m_State )
- {
- sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_EP_LOOSE_NPT_H));
- ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_NPT] = 0;
- }
-
- uint32 artkit = 21;
-
- switch(m_State)
- {
- case OBJECTIVESTATE_ALLIANCE:
- if(m_ShiftPhase == m_ShiftMaxPhase)
- m_TowerState = EP_TS_A;
- else
- m_TowerState = EP_TS_A_P;
- artkit = 2;
- SummonGO(ALLIANCE);
- ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_NPT] = ALLIANCE;
- if(m_OldState != m_State) sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_EP_CAPTURE_NPT_A));
- break;
- case OBJECTIVESTATE_HORDE:
- if(m_ShiftPhase == -m_ShiftMaxPhase)
- m_TowerState = EP_TS_H;
- else
- m_TowerState = EP_TS_H_P;
- artkit = 1;
- SummonGO(HORDE);
- ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_NPT] = HORDE;
- if(m_OldState != m_State) sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_EP_CAPTURE_NPT_H));
- break;
- case OBJECTIVESTATE_NEUTRAL:
- m_TowerState = EP_TS_N;
- m_SummonedGOSide = 0;
- DelObject(EP_NPT_BUFF);
- break;
- case OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE:
- case OBJECTIVESTATE_HORDE_ALLIANCE_CHALLENGE:
- m_TowerState = EP_TS_N_A;
- break;
- case OBJECTIVESTATE_NEUTRAL_HORDE_CHALLENGE:
- case OBJECTIVESTATE_ALLIANCE_HORDE_CHALLENGE:
- m_TowerState = EP_TS_N_H;
- break;
- }
-
- GameObject* flag = HashMapHolder<GameObject>::Find(m_CapturePointGUID);
- GameObject* flag2 = HashMapHolder<GameObject>::Find(m_Objects[EP_NPT_FLAGS]);
- if(flag)
- {
- flag->SetGoArtKit(artkit);
- flag->SendUpdateObjectToAllExcept(NULL);
- }
- if(flag2)
- {
- flag2->SetGoArtKit(artkit);
- flag2->SendUpdateObjectToAllExcept(NULL);
- }
+ sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_EP_LOOSE_NPT_A));
+ ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_NPT] = 0;
+ }
+ else if ( m_OldState == OBJECTIVESTATE_HORDE && m_OldState != m_State )
+ {
+ sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_EP_LOOSE_NPT_H));
+ ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_NPT] = 0;
+ }
- UpdateTowerState();
+ uint32 artkit = 21;
- // complete quest objective
- if(m_TowerState == EP_TS_A || m_TowerState == EP_TS_H)
- SendObjectiveComplete(EP_NPT_CM, 0);
+ switch(m_State)
+ {
+ case OBJECTIVESTATE_ALLIANCE:
+ if(m_ShiftPhase == m_ShiftMaxPhase)
+ m_TowerState = EP_TS_A;
+ else
+ m_TowerState = EP_TS_A_P;
+ artkit = 2;
+ SummonGO(ALLIANCE);
+ ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_NPT] = ALLIANCE;
+ if(m_OldState != m_State) sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_EP_CAPTURE_NPT_A));
+ break;
+ case OBJECTIVESTATE_HORDE:
+ if(m_ShiftPhase == -m_ShiftMaxPhase)
+ m_TowerState = EP_TS_H;
+ else
+ m_TowerState = EP_TS_H_P;
+ artkit = 1;
+ SummonGO(HORDE);
+ ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_NPT] = HORDE;
+ if(m_OldState != m_State) sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_EP_CAPTURE_NPT_H));
+ break;
+ case OBJECTIVESTATE_NEUTRAL:
+ m_TowerState = EP_TS_N;
+ m_SummonedGOSide = 0;
+ DelObject(EP_NPT_BUFF);
+ break;
+ case OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE:
+ case OBJECTIVESTATE_HORDE_ALLIANCE_CHALLENGE:
+ m_TowerState = EP_TS_N_A;
+ break;
+ case OBJECTIVESTATE_NEUTRAL_HORDE_CHALLENGE:
+ case OBJECTIVESTATE_ALLIANCE_HORDE_CHALLENGE:
+ m_TowerState = EP_TS_N_H;
+ break;
}
- if(m_ShiftPhase != m_OldPhase)
+ GameObject* flag = HashMapHolder<GameObject>::Find(m_CapturePointGUID);
+ GameObject* flag2 = HashMapHolder<GameObject>::Find(m_Objects[EP_NPT_FLAGS]);
+ if(flag)
{
- // send this too, sometimes the slider disappears, dunno why :(
- SendUpdateWorldState(EP_UI_TOWER_SLIDER_DISPLAY, 1);
- // send these updates to only the ones in this objective
- uint32 phase = (uint32)ceil(( m_ShiftPhase + m_ShiftMaxPhase) / ( 2 * m_ShiftMaxPhase ) * 100.0f);
- SendUpdateWorldState(EP_UI_TOWER_SLIDER_POS, phase);
- // send this too, sometimes it resets :S
- SendUpdateWorldState(EP_UI_TOWER_SLIDER_N, m_NeutralValue);
+ flag->SetGoArtKit(artkit);
+ flag->SendUpdateObjectToAllExcept(NULL);
}
- return m_OldState != m_State;
+ if(flag2)
+ {
+ flag2->SetGoArtKit(artkit);
+ flag2->SendUpdateObjectToAllExcept(NULL);
+ }
+
+ UpdateTowerState();
+
+ // complete quest objective
+ if(m_TowerState == EP_TS_A || m_TowerState == EP_TS_H)
+ SendObjectiveComplete(EP_NPT_CM, 0);
}
- return false;
+}
+
+void OPvPCapturePointEP_NPT::SendChangePhase()
+{
+ // send this too, sometimes the slider disappears, dunno why :(
+ SendUpdateWorldState(EP_UI_TOWER_SLIDER_DISPLAY, 1);
+ // send these updates to only the ones in this objective
+ uint32 phase = (uint32)ceil(( m_ShiftPhase + m_ShiftMaxPhase) / ( 2 * m_ShiftMaxPhase ) * 100.0f);
+ SendUpdateWorldState(EP_UI_TOWER_SLIDER_POS, phase);
+ // send this too, sometimes it resets :S
+ SendUpdateWorldState(EP_UI_TOWER_SLIDER_N, m_NeutralValue);
}
void OPvPCapturePointEP_NPT::FillInitialWorldStates(WorldPacket &data)
@@ -348,94 +338,89 @@ OPvPCapturePointEP_CGT::OPvPCapturePointEP_CGT(OutdoorPvP *pvp)
AddObject(EP_CGT_FLAGS,EPTowerFlags[EP_CGT].entry,EPTowerFlags[EP_CGT].map,EPTowerFlags[EP_CGT].x,EPTowerFlags[EP_CGT].y,EPTowerFlags[EP_CGT].z,EPTowerFlags[EP_CGT].o,EPTowerFlags[EP_CGT].rot0,EPTowerFlags[EP_CGT].rot1,EPTowerFlags[EP_CGT].rot2,EPTowerFlags[EP_CGT].rot3);
}
-bool OPvPCapturePointEP_CGT::Update(uint32 diff)
+void OPvPCapturePointEP_CGT::ChangeState()
{
- if(OPvPCapturePoint::Update(diff))
+ if(fabs(m_ShiftPhase) == m_ShiftMaxPhase) // state won't change, only phase when maxed out!
{
- if(m_OldState != m_State || fabs(m_ShiftPhase) == m_ShiftMaxPhase) // state won't change, only phase when maxed out!
+ // if changing from controlling alliance to horde or vice versa
+ if( m_OldState == OBJECTIVESTATE_ALLIANCE && m_OldState != m_State )
{
- // if changing from controlling alliance to horde or vice versa
- if( m_OldState == OBJECTIVESTATE_ALLIANCE && m_OldState != m_State )
- {
- sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_EP_LOOSE_CGT_A));
- ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_CGT] = 0;
- }
- else if ( m_OldState == OBJECTIVESTATE_HORDE && m_OldState != m_State )
- {
- sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_EP_LOOSE_CGT_H));
- ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_CGT] = 0;
- }
-
- uint32 artkit = 21;
-
- switch(m_State)
- {
- case OBJECTIVESTATE_ALLIANCE:
- if(m_ShiftPhase == m_ShiftMaxPhase)
- m_TowerState = EP_TS_A;
- else
- m_TowerState = EP_TS_A_P;
- artkit = 2;
- LinkGraveYard(ALLIANCE);
- ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_CGT] = ALLIANCE;
- if(m_OldState != m_State) sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_EP_CAPTURE_CGT_A));
- break;
- case OBJECTIVESTATE_HORDE:
- if(m_ShiftPhase == -m_ShiftMaxPhase)
- m_TowerState = EP_TS_H;
- else
- m_TowerState = EP_TS_H_P;
- artkit = 1;
- LinkGraveYard(HORDE);
- ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_CGT] = HORDE;
- if(m_OldState != m_State) sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_EP_CAPTURE_CGT_H));
- break;
- case OBJECTIVESTATE_NEUTRAL:
- m_TowerState = EP_TS_N;
- break;
- case OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE:
- case OBJECTIVESTATE_HORDE_ALLIANCE_CHALLENGE:
- m_TowerState = EP_TS_N_A;
- break;
- case OBJECTIVESTATE_NEUTRAL_HORDE_CHALLENGE:
- case OBJECTIVESTATE_ALLIANCE_HORDE_CHALLENGE:
- m_TowerState = EP_TS_N_H;
- break;
- }
-
- GameObject* flag = HashMapHolder<GameObject>::Find(m_CapturePointGUID);
- GameObject* flag2 = HashMapHolder<GameObject>::Find(m_Objects[EP_CGT_FLAGS]);
- if(flag)
- {
- flag->SetGoArtKit(artkit);
- flag->SendUpdateObjectToAllExcept(NULL);
- }
- if(flag2)
- {
- flag2->SetGoArtKit(artkit);
- flag2->SendUpdateObjectToAllExcept(NULL);
- }
+ sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_EP_LOOSE_CGT_A));
+ ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_CGT] = 0;
+ }
+ else if ( m_OldState == OBJECTIVESTATE_HORDE && m_OldState != m_State )
+ {
+ sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_EP_LOOSE_CGT_H));
+ ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_CGT] = 0;
+ }
- UpdateTowerState();
+ uint32 artkit = 21;
- // complete quest objective
- if(m_TowerState == EP_TS_A || m_TowerState == EP_TS_H)
- SendObjectiveComplete(EP_CGT_CM, 0);
+ switch(m_State)
+ {
+ case OBJECTIVESTATE_ALLIANCE:
+ if(m_ShiftPhase == m_ShiftMaxPhase)
+ m_TowerState = EP_TS_A;
+ else
+ m_TowerState = EP_TS_A_P;
+ artkit = 2;
+ LinkGraveYard(ALLIANCE);
+ ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_CGT] = ALLIANCE;
+ if(m_OldState != m_State) sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_EP_CAPTURE_CGT_A));
+ break;
+ case OBJECTIVESTATE_HORDE:
+ if(m_ShiftPhase == -m_ShiftMaxPhase)
+ m_TowerState = EP_TS_H;
+ else
+ m_TowerState = EP_TS_H_P;
+ artkit = 1;
+ LinkGraveYard(HORDE);
+ ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_CGT] = HORDE;
+ if(m_OldState != m_State) sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_EP_CAPTURE_CGT_H));
+ break;
+ case OBJECTIVESTATE_NEUTRAL:
+ m_TowerState = EP_TS_N;
+ break;
+ case OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE:
+ case OBJECTIVESTATE_HORDE_ALLIANCE_CHALLENGE:
+ m_TowerState = EP_TS_N_A;
+ break;
+ case OBJECTIVESTATE_NEUTRAL_HORDE_CHALLENGE:
+ case OBJECTIVESTATE_ALLIANCE_HORDE_CHALLENGE:
+ m_TowerState = EP_TS_N_H;
+ break;
}
- if(m_ShiftPhase != m_OldPhase)
+ GameObject* flag = HashMapHolder<GameObject>::Find(m_CapturePointGUID);
+ GameObject* flag2 = HashMapHolder<GameObject>::Find(m_Objects[EP_CGT_FLAGS]);
+ if(flag)
{
- // send this too, sometimes the slider disappears, dunno why :(
- SendUpdateWorldState(EP_UI_TOWER_SLIDER_DISPLAY, 1);
- // send these updates to only the ones in this objective
- uint32 phase = (uint32)ceil(( m_ShiftPhase + m_ShiftMaxPhase) / ( 2 * m_ShiftMaxPhase ) * 100.0f);
- SendUpdateWorldState(EP_UI_TOWER_SLIDER_POS, phase);
- // send this too, sometimes it resets :S
- SendUpdateWorldState(EP_UI_TOWER_SLIDER_N, m_NeutralValue);
+ flag->SetGoArtKit(artkit);
+ flag->SendUpdateObjectToAllExcept(NULL);
}
- return m_OldState != m_State;
+ if(flag2)
+ {
+ flag2->SetGoArtKit(artkit);
+ flag2->SendUpdateObjectToAllExcept(NULL);
+ }
+
+ UpdateTowerState();
+
+ // complete quest objective
+ if(m_TowerState == EP_TS_A || m_TowerState == EP_TS_H)
+ SendObjectiveComplete(EP_CGT_CM, 0);
}
- return false;
+}
+
+void OPvPCapturePointEP_CGT::SendChangePhase()
+{
+ // send this too, sometimes the slider disappears, dunno why :(
+ SendUpdateWorldState(EP_UI_TOWER_SLIDER_DISPLAY, 1);
+ // send these updates to only the ones in this objective
+ uint32 phase = (uint32)ceil(( m_ShiftPhase + m_ShiftMaxPhase) / ( 2 * m_ShiftMaxPhase ) * 100.0f);
+ SendUpdateWorldState(EP_UI_TOWER_SLIDER_POS, phase);
+ // send this too, sometimes it resets :S
+ SendUpdateWorldState(EP_UI_TOWER_SLIDER_N, m_NeutralValue);
}
void OPvPCapturePointEP_CGT::FillInitialWorldStates(WorldPacket &data)
@@ -497,96 +482,91 @@ OPvPCapturePointEP_PWT::OPvPCapturePointEP_PWT(OutdoorPvP *pvp)
AddObject(EP_PWT_FLAGS,EPTowerFlags[EP_PWT].entry,EPTowerFlags[EP_PWT].map,EPTowerFlags[EP_PWT].x,EPTowerFlags[EP_PWT].y,EPTowerFlags[EP_PWT].z,EPTowerFlags[EP_PWT].o,EPTowerFlags[EP_PWT].rot0,EPTowerFlags[EP_PWT].rot1,EPTowerFlags[EP_PWT].rot2,EPTowerFlags[EP_PWT].rot3);
}
-bool OPvPCapturePointEP_PWT::Update(uint32 diff)
+void OPvPCapturePointEP_PWT::ChangeState()
{
- if(OPvPCapturePoint::Update(diff))
+ if(fabs(m_ShiftPhase) == m_ShiftMaxPhase) // state won't change, only phase when maxed out!
{
- if(m_OldState != m_State || fabs(m_ShiftPhase) == m_ShiftMaxPhase) // state won't change, only phase when maxed out!
+ // if changing from controlling alliance to horde or vice versa
+ if( m_OldState == OBJECTIVESTATE_ALLIANCE && m_OldState != m_State )
{
- // if changing from controlling alliance to horde or vice versa
- if( m_OldState == OBJECTIVESTATE_ALLIANCE && m_OldState != m_State )
- {
- sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_EP_LOOSE_PWT_A));
- ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_PWT] = 0;
- }
- else if ( m_OldState == OBJECTIVESTATE_HORDE && m_OldState != m_State )
- {
- sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_EP_LOOSE_PWT_H));
- ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_PWT] = 0;
- }
-
- uint32 artkit = 21;
-
- switch(m_State)
- {
- case OBJECTIVESTATE_ALLIANCE:
- if(m_ShiftPhase == m_ShiftMaxPhase)
- m_TowerState = EP_TS_A;
- else
- m_TowerState = EP_TS_A_P;
- SummonFlightMaster(ALLIANCE);
- artkit = 2;
- ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_PWT] = ALLIANCE;
- if(m_OldState != m_State) sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_EP_CAPTURE_PWT_A));
- break;
- case OBJECTIVESTATE_HORDE:
- if(m_ShiftPhase == -m_ShiftMaxPhase)
- m_TowerState = EP_TS_H;
- else
- m_TowerState = EP_TS_H_P;
- SummonFlightMaster(HORDE);
- artkit = 1;
- ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_PWT] = HORDE;
- if(m_OldState != m_State) sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_EP_CAPTURE_PWT_H));
- break;
- case OBJECTIVESTATE_NEUTRAL:
- m_TowerState = EP_TS_N;
- DelCreature(EP_PWT_FLIGHTMASTER);
- m_FlightMasterSpawned = 0;
- break;
- case OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE:
- case OBJECTIVESTATE_HORDE_ALLIANCE_CHALLENGE:
- m_TowerState = EP_TS_N_A;
- break;
- case OBJECTIVESTATE_NEUTRAL_HORDE_CHALLENGE:
- case OBJECTIVESTATE_ALLIANCE_HORDE_CHALLENGE:
- m_TowerState = EP_TS_N_H;
- break;
- }
-
- GameObject* flag = HashMapHolder<GameObject>::Find(m_CapturePointGUID);
- GameObject* flag2 = HashMapHolder<GameObject>::Find(m_Objects[EP_PWT_FLAGS]);
- if(flag)
- {
- flag->SetGoArtKit(artkit);
- flag->SendUpdateObjectToAllExcept(NULL);
- }
- if(flag2)
- {
- flag2->SetGoArtKit(artkit);
- flag2->SendUpdateObjectToAllExcept(NULL);
- }
+ sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_EP_LOOSE_PWT_A));
+ ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_PWT] = 0;
+ }
+ else if ( m_OldState == OBJECTIVESTATE_HORDE && m_OldState != m_State )
+ {
+ sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_EP_LOOSE_PWT_H));
+ ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_PWT] = 0;
+ }
- UpdateTowerState();
+ uint32 artkit = 21;
- // complete quest objective
- if(m_TowerState == EP_TS_A || m_TowerState == EP_TS_H)
- SendObjectiveComplete(EP_PWT_CM, 0);
+ switch(m_State)
+ {
+ case OBJECTIVESTATE_ALLIANCE:
+ if(m_ShiftPhase == m_ShiftMaxPhase)
+ m_TowerState = EP_TS_A;
+ else
+ m_TowerState = EP_TS_A_P;
+ SummonFlightMaster(ALLIANCE);
+ artkit = 2;
+ ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_PWT] = ALLIANCE;
+ if(m_OldState != m_State) sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_EP_CAPTURE_PWT_A));
+ break;
+ case OBJECTIVESTATE_HORDE:
+ if(m_ShiftPhase == -m_ShiftMaxPhase)
+ m_TowerState = EP_TS_H;
+ else
+ m_TowerState = EP_TS_H_P;
+ SummonFlightMaster(HORDE);
+ artkit = 1;
+ ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_PWT] = HORDE;
+ if(m_OldState != m_State) sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_EP_CAPTURE_PWT_H));
+ break;
+ case OBJECTIVESTATE_NEUTRAL:
+ m_TowerState = EP_TS_N;
+ DelCreature(EP_PWT_FLIGHTMASTER);
+ m_FlightMasterSpawned = 0;
+ break;
+ case OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE:
+ case OBJECTIVESTATE_HORDE_ALLIANCE_CHALLENGE:
+ m_TowerState = EP_TS_N_A;
+ break;
+ case OBJECTIVESTATE_NEUTRAL_HORDE_CHALLENGE:
+ case OBJECTIVESTATE_ALLIANCE_HORDE_CHALLENGE:
+ m_TowerState = EP_TS_N_H;
+ break;
}
- if(m_ShiftPhase != m_OldPhase)
+ GameObject* flag = HashMapHolder<GameObject>::Find(m_CapturePointGUID);
+ GameObject* flag2 = HashMapHolder<GameObject>::Find(m_Objects[EP_PWT_FLAGS]);
+ if(flag)
{
- // send this too, sometimes the slider disappears, dunno why :(
- SendUpdateWorldState(EP_UI_TOWER_SLIDER_DISPLAY, 1);
- // send these updates to only the ones in this objective
- uint32 phase = (uint32)ceil(( m_ShiftPhase + m_ShiftMaxPhase) / ( 2 * m_ShiftMaxPhase ) * 100.0f);
- SendUpdateWorldState(EP_UI_TOWER_SLIDER_POS, phase);
- // send this too, sometimes it resets :S
- SendUpdateWorldState(EP_UI_TOWER_SLIDER_N, m_NeutralValue);
+ flag->SetGoArtKit(artkit);
+ flag->SendUpdateObjectToAllExcept(NULL);
}
- return m_OldState != m_State;
+ if(flag2)
+ {
+ flag2->SetGoArtKit(artkit);
+ flag2->SendUpdateObjectToAllExcept(NULL);
+ }
+
+ UpdateTowerState();
+
+ // complete quest objective
+ if(m_TowerState == EP_TS_A || m_TowerState == EP_TS_H)
+ SendObjectiveComplete(EP_PWT_CM, 0);
}
- return false;
+}
+
+void OPvPCapturePointEP_PWT::SendChangePhase()
+{
+ // send this too, sometimes the slider disappears, dunno why :(
+ SendUpdateWorldState(EP_UI_TOWER_SLIDER_DISPLAY, 1);
+ // send these updates to only the ones in this objective
+ uint32 phase = (uint32)ceil(( m_ShiftPhase + m_ShiftMaxPhase) / ( 2 * m_ShiftMaxPhase ) * 100.0f);
+ SendUpdateWorldState(EP_UI_TOWER_SLIDER_POS, phase);
+ // send this too, sometimes it resets :S
+ SendUpdateWorldState(EP_UI_TOWER_SLIDER_N, m_NeutralValue);
}
void OPvPCapturePointEP_PWT::FillInitialWorldStates(WorldPacket &data)
diff --git a/src/game/OutdoorPvPEP.h b/src/game/OutdoorPvPEP.h
index abf3da9e945..c5cff5c0411 100644
--- a/src/game/OutdoorPvPEP.h
+++ b/src/game/OutdoorPvPEP.h
@@ -183,7 +183,8 @@ class OPvPCapturePointEP_EWT : public OPvPCapturePoint
friend class OutdoorPvPEP;
public:
OPvPCapturePointEP_EWT(OutdoorPvP * pvp);
- bool Update(uint32 diff);
+ void ChangeState();
+ void SendChangePhase();
void FillInitialWorldStates(WorldPacket & data);
// used when player is activated/inactivated in the area
bool HandlePlayerEnter(Player * plr);
@@ -201,7 +202,8 @@ class OPvPCapturePointEP_NPT : public OPvPCapturePoint
friend class OutdoorPvPEP;
public:
OPvPCapturePointEP_NPT(OutdoorPvP * pvp);
- bool Update(uint32 diff);
+ void ChangeState();
+ void SendChangePhase();
void FillInitialWorldStates(WorldPacket & data);
// used when player is activated/inactivated in the area
bool HandlePlayerEnter(Player * plr);
@@ -219,7 +221,8 @@ class OPvPCapturePointEP_CGT : public OPvPCapturePoint
friend class OutdoorPvPEP;
public:
OPvPCapturePointEP_CGT(OutdoorPvP * pvp);
- bool Update(uint32 diff);
+ void ChangeState();
+ void SendChangePhase();
void FillInitialWorldStates(WorldPacket & data);
// used when player is activated/inactivated in the area
bool HandlePlayerEnter(Player * plr);
@@ -237,7 +240,8 @@ class OPvPCapturePointEP_PWT : public OPvPCapturePoint
friend class OutdoorPvPEP;
public:
OPvPCapturePointEP_PWT(OutdoorPvP * pvp);
- bool Update(uint32 diff);
+ void ChangeState();
+ void SendChangePhase();
void FillInitialWorldStates(WorldPacket & data);
// used when player is activated/inactivated in the area
bool HandlePlayerEnter(Player * plr);
diff --git a/src/game/OutdoorPvPHP.cpp b/src/game/OutdoorPvPHP.cpp
index 23236c31aa7..97a912e3b45 100644
--- a/src/game/OutdoorPvPHP.cpp
+++ b/src/game/OutdoorPvPHP.cpp
@@ -163,126 +163,117 @@ void OutdoorPvPHP::FillInitialWorldStates(WorldPacket &data)
}
}
-bool OPvPCapturePointHP::Update(uint32 diff)
+void OPvPCapturePointHP::ChangeState()
{
- // if status changed:
- if(OPvPCapturePoint::Update(diff))
+ uint32 field = 0;
+ switch(m_OldState)
{
- if(m_OldState != m_State)
- {
- uint32 field = 0;
- switch(m_OldState)
- {
- case OBJECTIVESTATE_NEUTRAL:
- field = HP_MAP_N[m_TowerType];
- break;
- case OBJECTIVESTATE_ALLIANCE:
- field = HP_MAP_A[m_TowerType];
- if(((OutdoorPvPHP*)m_PvP)->m_AllianceTowersControlled)
- ((OutdoorPvPHP*)m_PvP)->m_AllianceTowersControlled--;
- sWorld.SendZoneText(OutdoorPvPHPBuffZones[0],objmgr.GetTrinityStringForDBCLocale(HP_LANG_LOOSE_A[m_TowerType]));
- break;
- case OBJECTIVESTATE_HORDE:
- field = HP_MAP_H[m_TowerType];
- if(((OutdoorPvPHP*)m_PvP)->m_HordeTowersControlled)
- ((OutdoorPvPHP*)m_PvP)->m_HordeTowersControlled--;
- sWorld.SendZoneText(OutdoorPvPHPBuffZones[0],objmgr.GetTrinityStringForDBCLocale(HP_LANG_LOOSE_H[m_TowerType]));
- break;
- case OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE:
- field = HP_MAP_N[m_TowerType];
- break;
- case OBJECTIVESTATE_NEUTRAL_HORDE_CHALLENGE:
- field = HP_MAP_N[m_TowerType];
- break;
- case OBJECTIVESTATE_ALLIANCE_HORDE_CHALLENGE:
- field = HP_MAP_A[m_TowerType];
- break;
- case OBJECTIVESTATE_HORDE_ALLIANCE_CHALLENGE:
- field = HP_MAP_H[m_TowerType];
- break;
- }
+ case OBJECTIVESTATE_NEUTRAL:
+ field = HP_MAP_N[m_TowerType];
+ break;
+ case OBJECTIVESTATE_ALLIANCE:
+ field = HP_MAP_A[m_TowerType];
+ if(((OutdoorPvPHP*)m_PvP)->m_AllianceTowersControlled)
+ ((OutdoorPvPHP*)m_PvP)->m_AllianceTowersControlled--;
+ sWorld.SendZoneText(OutdoorPvPHPBuffZones[0],objmgr.GetTrinityStringForDBCLocale(HP_LANG_LOOSE_A[m_TowerType]));
+ break;
+ case OBJECTIVESTATE_HORDE:
+ field = HP_MAP_H[m_TowerType];
+ if(((OutdoorPvPHP*)m_PvP)->m_HordeTowersControlled)
+ ((OutdoorPvPHP*)m_PvP)->m_HordeTowersControlled--;
+ sWorld.SendZoneText(OutdoorPvPHPBuffZones[0],objmgr.GetTrinityStringForDBCLocale(HP_LANG_LOOSE_H[m_TowerType]));
+ break;
+ case OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE:
+ field = HP_MAP_N[m_TowerType];
+ break;
+ case OBJECTIVESTATE_NEUTRAL_HORDE_CHALLENGE:
+ field = HP_MAP_N[m_TowerType];
+ break;
+ case OBJECTIVESTATE_ALLIANCE_HORDE_CHALLENGE:
+ field = HP_MAP_A[m_TowerType];
+ break;
+ case OBJECTIVESTATE_HORDE_ALLIANCE_CHALLENGE:
+ field = HP_MAP_H[m_TowerType];
+ break;
+ }
- // send world state update
- if(field)
- {
- m_PvP->SendUpdateWorldState(field, 0);
- field = 0;
- }
- uint32 artkit = 21;
- uint32 artkit2 = HP_TowerArtKit_N[m_TowerType];
- switch(m_State)
- {
- case OBJECTIVESTATE_NEUTRAL:
- field = HP_MAP_N[m_TowerType];
- break;
- case OBJECTIVESTATE_ALLIANCE:
- field = HP_MAP_A[m_TowerType];
- artkit = 2;
- artkit2 = HP_TowerArtKit_A[m_TowerType];
- if(((OutdoorPvPHP*)m_PvP)->m_AllianceTowersControlled<3)
- ((OutdoorPvPHP*)m_PvP)->m_AllianceTowersControlled++;
- sWorld.SendZoneText(OutdoorPvPHPBuffZones[0],objmgr.GetTrinityStringForDBCLocale(HP_LANG_CAPTURE_A[m_TowerType]));
- break;
- case OBJECTIVESTATE_HORDE:
- field = HP_MAP_H[m_TowerType];
- artkit = 1;
- artkit2 = HP_TowerArtKit_H[m_TowerType];
- if(((OutdoorPvPHP*)m_PvP)->m_HordeTowersControlled<3)
- ((OutdoorPvPHP*)m_PvP)->m_HordeTowersControlled++;
- sWorld.SendZoneText(OutdoorPvPHPBuffZones[0],objmgr.GetTrinityStringForDBCLocale(HP_LANG_CAPTURE_H[m_TowerType]));
- break;
- case OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE:
- field = HP_MAP_N[m_TowerType];
- break;
- case OBJECTIVESTATE_NEUTRAL_HORDE_CHALLENGE:
- field = HP_MAP_N[m_TowerType];
- break;
- case OBJECTIVESTATE_ALLIANCE_HORDE_CHALLENGE:
- field = HP_MAP_A[m_TowerType];
- artkit = 2;
- artkit2 = HP_TowerArtKit_A[m_TowerType];
- break;
- case OBJECTIVESTATE_HORDE_ALLIANCE_CHALLENGE:
- field = HP_MAP_H[m_TowerType];
- artkit = 1;
- artkit2 = HP_TowerArtKit_H[m_TowerType];
- break;
- }
+ // send world state update
+ if(field)
+ {
+ m_PvP->SendUpdateWorldState(field, 0);
+ field = 0;
+ }
+ uint32 artkit = 21;
+ uint32 artkit2 = HP_TowerArtKit_N[m_TowerType];
+ switch(m_State)
+ {
+ case OBJECTIVESTATE_NEUTRAL:
+ field = HP_MAP_N[m_TowerType];
+ break;
+ case OBJECTIVESTATE_ALLIANCE:
+ field = HP_MAP_A[m_TowerType];
+ artkit = 2;
+ artkit2 = HP_TowerArtKit_A[m_TowerType];
+ if(((OutdoorPvPHP*)m_PvP)->m_AllianceTowersControlled<3)
+ ((OutdoorPvPHP*)m_PvP)->m_AllianceTowersControlled++;
+ sWorld.SendZoneText(OutdoorPvPHPBuffZones[0],objmgr.GetTrinityStringForDBCLocale(HP_LANG_CAPTURE_A[m_TowerType]));
+ break;
+ case OBJECTIVESTATE_HORDE:
+ field = HP_MAP_H[m_TowerType];
+ artkit = 1;
+ artkit2 = HP_TowerArtKit_H[m_TowerType];
+ if(((OutdoorPvPHP*)m_PvP)->m_HordeTowersControlled<3)
+ ((OutdoorPvPHP*)m_PvP)->m_HordeTowersControlled++;
+ sWorld.SendZoneText(OutdoorPvPHPBuffZones[0],objmgr.GetTrinityStringForDBCLocale(HP_LANG_CAPTURE_H[m_TowerType]));
+ break;
+ case OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE:
+ field = HP_MAP_N[m_TowerType];
+ break;
+ case OBJECTIVESTATE_NEUTRAL_HORDE_CHALLENGE:
+ field = HP_MAP_N[m_TowerType];
+ break;
+ case OBJECTIVESTATE_ALLIANCE_HORDE_CHALLENGE:
+ field = HP_MAP_A[m_TowerType];
+ artkit = 2;
+ artkit2 = HP_TowerArtKit_A[m_TowerType];
+ break;
+ case OBJECTIVESTATE_HORDE_ALLIANCE_CHALLENGE:
+ field = HP_MAP_H[m_TowerType];
+ artkit = 1;
+ artkit2 = HP_TowerArtKit_H[m_TowerType];
+ break;
+ }
- GameObject* flag = HashMapHolder<GameObject>::Find(m_CapturePointGUID);
- GameObject* flag2 = HashMapHolder<GameObject>::Find(m_Objects[m_TowerType]);
- if(flag)
- {
- flag->SetGoArtKit(artkit);
- flag->SendUpdateObjectToAllExcept(NULL);
- }
- if(flag2)
- {
- flag2->SetGoArtKit(artkit2);
- flag2->SendUpdateObjectToAllExcept(NULL);
- }
+ GameObject* flag = HashMapHolder<GameObject>::Find(m_CapturePointGUID);
+ GameObject* flag2 = HashMapHolder<GameObject>::Find(m_Objects[m_TowerType]);
+ if(flag)
+ {
+ flag->SetGoArtKit(artkit);
+ flag->SendUpdateObjectToAllExcept(NULL);
+ }
+ if(flag2)
+ {
+ flag2->SetGoArtKit(artkit2);
+ flag2->SendUpdateObjectToAllExcept(NULL);
+ }
- // send world state update
- if(field)
- m_PvP->SendUpdateWorldState(field, 1);
+ // send world state update
+ if(field)
+ m_PvP->SendUpdateWorldState(field, 1);
- // complete quest objective
- if(m_State == OBJECTIVESTATE_ALLIANCE || m_State == OBJECTIVESTATE_HORDE)
- SendObjectiveComplete(HP_CREDITMARKER[m_TowerType], 0);
- }
+ // complete quest objective
+ if(m_State == OBJECTIVESTATE_ALLIANCE || m_State == OBJECTIVESTATE_HORDE)
+ SendObjectiveComplete(HP_CREDITMARKER[m_TowerType], 0);
+}
- if(m_ShiftPhase != m_OldPhase)
- {
- SendUpdateWorldState(HP_UI_TOWER_SLIDER_N, m_NeutralValue);
- // send these updates to only the ones in this objective
- uint32 phase = (uint32)ceil(( m_ShiftPhase + m_ShiftMaxPhase) / ( 2 * m_ShiftMaxPhase ) * 100.0f);
- SendUpdateWorldState(HP_UI_TOWER_SLIDER_POS, phase);
- // send this too, sometimes the slider disappears, dunno why :(
- SendUpdateWorldState(HP_UI_TOWER_SLIDER_DISPLAY, 1);
- }
- return m_OldState != m_State;
- }
- return false;
+void OPvPCapturePointHP::SendChangePhase()
+{
+ SendUpdateWorldState(HP_UI_TOWER_SLIDER_N, m_NeutralValue);
+ // send these updates to only the ones in this objective
+ uint32 phase = (uint32)ceil(( m_ShiftPhase + m_ShiftMaxPhase) / ( 2 * m_ShiftMaxPhase ) * 100.0f);
+ SendUpdateWorldState(HP_UI_TOWER_SLIDER_POS, phase);
+ // send this too, sometimes the slider disappears, dunno why :(
+ SendUpdateWorldState(HP_UI_TOWER_SLIDER_DISPLAY, 1);
}
void OPvPCapturePointHP::FillInitialWorldStates(WorldPacket &data)
diff --git a/src/game/OutdoorPvPHP.h b/src/game/OutdoorPvPHP.h
index 99b4c97ebf8..de543b6c656 100644
--- a/src/game/OutdoorPvPHP.h
+++ b/src/game/OutdoorPvPHP.h
@@ -86,7 +86,8 @@ class OPvPCapturePointHP : public OPvPCapturePoint
{
public:
OPvPCapturePointHP(OutdoorPvP * pvp, OutdoorPvPHPTowerType type);
- bool Update(uint32 diff);
+ void ChangeState();
+ void SendChangePhase();
void FillInitialWorldStates(WorldPacket & data);
// used when player is activated/inactivated in the area
bool HandlePlayerEnter(Player * plr);
diff --git a/src/game/OutdoorPvPNA.cpp b/src/game/OutdoorPvPNA.cpp
index 7a421b848ba..d93cea4b3f8 100644
--- a/src/game/OutdoorPvPNA.cpp
+++ b/src/game/OutdoorPvPNA.cpp
@@ -554,7 +554,7 @@ bool OPvPCapturePointNA::Update(uint32 diff)
}
} else m_GuardCheckTimer -= diff;
- if((m_capturable || capturable) && OPvPCapturePoint::Update(diff))
+ if(m_capturable || capturable)
{
if(m_RespawnTimer < diff)
{
@@ -565,62 +565,63 @@ bool OPvPCapturePointNA::Update(uint32 diff)
m_RespawnTimer = NA_RESPAWN_TIME;
} else m_RespawnTimer -= diff;
- if(m_OldState != m_State)
- {
- uint32 artkit = 21;
- switch(m_State)
- {
- case OBJECTIVESTATE_NEUTRAL:
- m_HalaaState = HALAA_N;
- break;
- case OBJECTIVESTATE_ALLIANCE:
- m_HalaaState = HALAA_A;
- FactionTakeOver(ALLIANCE);
- artkit = 2;
- break;
- case OBJECTIVESTATE_HORDE:
- m_HalaaState = HALAA_H;
- FactionTakeOver(HORDE);
- artkit = 1;
- break;
- case OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE:
- m_HalaaState = HALAA_N_A;
- break;
- case OBJECTIVESTATE_NEUTRAL_HORDE_CHALLENGE:
- m_HalaaState = HALAA_N_H;
- break;
- case OBJECTIVESTATE_ALLIANCE_HORDE_CHALLENGE:
- m_HalaaState = HALAA_N_A;
- artkit = 2;
- break;
- case OBJECTIVESTATE_HORDE_ALLIANCE_CHALLENGE:
- m_HalaaState = HALAA_N_H;
- artkit = 1;
- break;
- }
-
- GameObject* flag = HashMapHolder<GameObject>::Find(m_CapturePointGUID);
- if(flag)
- {
- flag->SetGoArtKit(artkit);
- flag->SendUpdateObjectToAllExcept(NULL);
- }
+ return OPvPCapturePoint::Update(diff);
+ }
+ return false;
+}
- UpdateHalaaWorldState();
- }
+void OPvPCapturePointNA::ChangeState()
+{
+ uint32 artkit = 21;
+ switch(m_State)
+ {
+ case OBJECTIVESTATE_NEUTRAL:
+ m_HalaaState = HALAA_N;
+ break;
+ case OBJECTIVESTATE_ALLIANCE:
+ m_HalaaState = HALAA_A;
+ FactionTakeOver(ALLIANCE);
+ artkit = 2;
+ break;
+ case OBJECTIVESTATE_HORDE:
+ m_HalaaState = HALAA_H;
+ FactionTakeOver(HORDE);
+ artkit = 1;
+ break;
+ case OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE:
+ m_HalaaState = HALAA_N_A;
+ break;
+ case OBJECTIVESTATE_NEUTRAL_HORDE_CHALLENGE:
+ m_HalaaState = HALAA_N_H;
+ break;
+ case OBJECTIVESTATE_ALLIANCE_HORDE_CHALLENGE:
+ m_HalaaState = HALAA_N_A;
+ artkit = 2;
+ break;
+ case OBJECTIVESTATE_HORDE_ALLIANCE_CHALLENGE:
+ m_HalaaState = HALAA_N_H;
+ artkit = 1;
+ break;
+ }
- if(m_ShiftPhase != m_OldPhase)
- {
- // send this too, sometimes the slider disappears, dunno why :(
- SendUpdateWorldState(NA_UI_TOWER_SLIDER_DISPLAY, 1);
- // send these updates to only the ones in this objective
- uint32 phase = (uint32)ceil(( m_ShiftPhase + m_ShiftMaxPhase) / ( 2 * m_ShiftMaxPhase ) * 100.0f);
- SendUpdateWorldState(NA_UI_TOWER_SLIDER_POS, phase);
- SendUpdateWorldState(NA_UI_TOWER_SLIDER_N, m_NeutralValue);
- }
- return m_OldState != m_State;
+ GameObject* flag = HashMapHolder<GameObject>::Find(m_CapturePointGUID);
+ if(flag)
+ {
+ flag->SetGoArtKit(artkit);
+ flag->SendUpdateObjectToAllExcept(NULL);
}
- return false;
+
+ UpdateHalaaWorldState();
+}
+
+void OPvPCapturePointNA::SendChangePhase()
+{
+ // send this too, sometimes the slider disappears, dunno why :(
+ SendUpdateWorldState(NA_UI_TOWER_SLIDER_DISPLAY, 1);
+ // send these updates to only the ones in this objective
+ uint32 phase = (uint32)ceil(( m_ShiftPhase + m_ShiftMaxPhase) / ( 2 * m_ShiftMaxPhase ) * 100.0f);
+ SendUpdateWorldState(NA_UI_TOWER_SLIDER_POS, phase);
+ SendUpdateWorldState(NA_UI_TOWER_SLIDER_N, m_NeutralValue);
}
void OPvPCapturePointNA::UpdateHalaaWorldState()
diff --git a/src/game/OutdoorPvPNA.h b/src/game/OutdoorPvPNA.h
index a3d2ab874a1..f10972b5ebf 100644
--- a/src/game/OutdoorPvPNA.h
+++ b/src/game/OutdoorPvPNA.h
@@ -244,6 +244,8 @@ friend class OutdoorPvPNA;
public:
OPvPCapturePointNA(OutdoorPvP * pvp);
bool Update(uint32 diff);
+ void ChangeState();
+ void SendChangePhase();
void FillInitialWorldStates(WorldPacket & data);
// used when player is activated/inactivated in the area
bool HandlePlayerEnter(Player * plr);
diff --git a/src/game/OutdoorPvPTF.cpp b/src/game/OutdoorPvPTF.cpp
index 1b2a16f0c1d..01fc9a10386 100644
--- a/src/game/OutdoorPvPTF.cpp
+++ b/src/game/OutdoorPvPTF.cpp
@@ -239,74 +239,71 @@ bool OPvPCapturePointTF::Update(uint32 diff)
((((OutdoorPvPTF*)m_PvP)->m_HordeTowersControlled > 0) && m_activePlayers[0].size() < m_activePlayers[1].size());
// if gathers the other faction, then only update if the pvp is unlocked
canupdate = canupdate || !((OutdoorPvPTF*)m_PvP)->m_IsLocked;
- if(canupdate && OPvPCapturePoint::Update(diff))
- {
- if(m_OldState != m_State)
- {
- // if changing from controlling alliance to horde
- if( m_OldState == OBJECTIVESTATE_ALLIANCE )
- {
- if(((OutdoorPvPTF*)m_PvP)->m_AllianceTowersControlled)
- ((OutdoorPvPTF*)m_PvP)->m_AllianceTowersControlled--;
- sWorld.SendZoneText(OutdoorPvPTFBuffZones[0],objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_TF_LOOSE_A));
- }
- // if changing from controlling horde to alliance
- else if ( m_OldState == OBJECTIVESTATE_HORDE )
- {
- if(((OutdoorPvPTF*)m_PvP)->m_HordeTowersControlled)
- ((OutdoorPvPTF*)m_PvP)->m_HordeTowersControlled--;
- sWorld.SendZoneText(OutdoorPvPTFBuffZones[0],objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_TF_LOOSE_H));
- }
+ return canupdate && OPvPCapturePoint::Update(diff);
+}
- uint32 artkit = 21;
+void OPvPCapturePointTF::ChangeState()
+{
+ // if changing from controlling alliance to horde
+ if( m_OldState == OBJECTIVESTATE_ALLIANCE )
+ {
+ if(((OutdoorPvPTF*)m_PvP)->m_AllianceTowersControlled)
+ ((OutdoorPvPTF*)m_PvP)->m_AllianceTowersControlled--;
+ sWorld.SendZoneText(OutdoorPvPTFBuffZones[0],objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_TF_LOOSE_A));
+ }
+ // if changing from controlling horde to alliance
+ else if ( m_OldState == OBJECTIVESTATE_HORDE )
+ {
+ if(((OutdoorPvPTF*)m_PvP)->m_HordeTowersControlled)
+ ((OutdoorPvPTF*)m_PvP)->m_HordeTowersControlled--;
+ sWorld.SendZoneText(OutdoorPvPTFBuffZones[0],objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_TF_LOOSE_H));
+ }
- switch(m_State)
- {
- case OBJECTIVESTATE_ALLIANCE:
- m_TowerState = TF_TOWERSTATE_A;
- artkit = 2;
- if(((OutdoorPvPTF*)m_PvP)->m_AllianceTowersControlled<TF_TOWER_NUM)
- ((OutdoorPvPTF*)m_PvP)->m_AllianceTowersControlled++;
- sWorld.SendZoneText(OutdoorPvPTFBuffZones[0],objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_TF_CAPTURE_A));
- break;
- case OBJECTIVESTATE_HORDE:
- m_TowerState = TF_TOWERSTATE_H;
- artkit = 1;
- if(((OutdoorPvPTF*)m_PvP)->m_HordeTowersControlled<TF_TOWER_NUM)
- ((OutdoorPvPTF*)m_PvP)->m_HordeTowersControlled++;
- sWorld.SendZoneText(OutdoorPvPTFBuffZones[0],objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_TF_CAPTURE_H));
- break;
- case OBJECTIVESTATE_NEUTRAL:
- case OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE:
- case OBJECTIVESTATE_NEUTRAL_HORDE_CHALLENGE:
- case OBJECTIVESTATE_ALLIANCE_HORDE_CHALLENGE:
- case OBJECTIVESTATE_HORDE_ALLIANCE_CHALLENGE:
- m_TowerState = TF_TOWERSTATE_N;
- break;
- }
-
- GameObject* flag = HashMapHolder<GameObject>::Find(m_CapturePointGUID);
- if(flag)
- {
- flag->SetGoArtKit(artkit);
- flag->SendUpdateObjectToAllExcept(NULL);
- }
+ uint32 artkit = 21;
- UpdateTowerState();
- }
+ switch(m_State)
+ {
+ case OBJECTIVESTATE_ALLIANCE:
+ m_TowerState = TF_TOWERSTATE_A;
+ artkit = 2;
+ if(((OutdoorPvPTF*)m_PvP)->m_AllianceTowersControlled<TF_TOWER_NUM)
+ ((OutdoorPvPTF*)m_PvP)->m_AllianceTowersControlled++;
+ sWorld.SendZoneText(OutdoorPvPTFBuffZones[0],objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_TF_CAPTURE_A));
+ break;
+ case OBJECTIVESTATE_HORDE:
+ m_TowerState = TF_TOWERSTATE_H;
+ artkit = 1;
+ if(((OutdoorPvPTF*)m_PvP)->m_HordeTowersControlled<TF_TOWER_NUM)
+ ((OutdoorPvPTF*)m_PvP)->m_HordeTowersControlled++;
+ sWorld.SendZoneText(OutdoorPvPTFBuffZones[0],objmgr.GetTrinityStringForDBCLocale(LANG_OPVP_TF_CAPTURE_H));
+ break;
+ case OBJECTIVESTATE_NEUTRAL:
+ case OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE:
+ case OBJECTIVESTATE_NEUTRAL_HORDE_CHALLENGE:
+ case OBJECTIVESTATE_ALLIANCE_HORDE_CHALLENGE:
+ case OBJECTIVESTATE_HORDE_ALLIANCE_CHALLENGE:
+ m_TowerState = TF_TOWERSTATE_N;
+ break;
+ }
- if(m_ShiftPhase != m_OldPhase)
- {
- // send this too, sometimes the slider disappears, dunno why :(
- SendUpdateWorldState(TF_UI_TOWER_SLIDER_DISPLAY, 1);
- // send these updates to only the ones in this objective
- uint32 phase = (uint32)ceil(( m_ShiftPhase + m_ShiftMaxPhase) / ( 2 * m_ShiftMaxPhase ) * 100.0f);
- SendUpdateWorldState(TF_UI_TOWER_SLIDER_POS, phase);
- // send this too, sometimes it resets :S
- SendUpdateWorldState(TF_UI_TOWER_SLIDER_N, m_NeutralValue);
- }
- return m_OldState != m_State;
+ GameObject* flag = HashMapHolder<GameObject>::Find(m_CapturePointGUID);
+ if(flag)
+ {
+ flag->SetGoArtKit(artkit);
+ flag->SendUpdateObjectToAllExcept(NULL);
}
- return false;
+
+ UpdateTowerState();
+}
+
+void OPvPCapturePointTF::SendChangePhase()
+{
+ // send this too, sometimes the slider disappears, dunno why :(
+ SendUpdateWorldState(TF_UI_TOWER_SLIDER_DISPLAY, 1);
+ // send these updates to only the ones in this objective
+ uint32 phase = (uint32)ceil(( m_ShiftPhase + m_ShiftMaxPhase) / ( 2 * m_ShiftMaxPhase ) * 100.0f);
+ SendUpdateWorldState(TF_UI_TOWER_SLIDER_POS, phase);
+ // send this too, sometimes it resets :S
+ SendUpdateWorldState(TF_UI_TOWER_SLIDER_N, m_NeutralValue);
}
diff --git a/src/game/OutdoorPvPTF.h b/src/game/OutdoorPvPTF.h
index ca719f88fba..3a88b7fd309 100644
--- a/src/game/OutdoorPvPTF.h
+++ b/src/game/OutdoorPvPTF.h
@@ -81,6 +81,8 @@ class OPvPCapturePointTF : public OPvPCapturePoint
public:
OPvPCapturePointTF(OutdoorPvP * pvp, OutdoorPvPTF_TowerType type);
bool Update(uint32 diff);
+ void ChangeState();
+ void SendChangePhase();
void FillInitialWorldStates(WorldPacket & data);
// used when player is activated/inactivated in the area
bool HandlePlayerEnter(Player * plr);
diff --git a/src/game/OutdoorPvPZM.cpp b/src/game/OutdoorPvPZM.cpp
index 1fdbfc93abf..c3861e7a7ec 100644
--- a/src/game/OutdoorPvPZM.cpp
+++ b/src/game/OutdoorPvPZM.cpp
@@ -71,65 +71,57 @@ void OPvPCapturePointZM_Beacon::HandlePlayerLeave(Player *plr)
OPvPCapturePoint::HandlePlayerLeave(plr);
}
-bool OPvPCapturePointZM_Beacon::Update(uint32 diff)
+void OPvPCapturePointZM_Beacon::ChangeState()
{
- if(OPvPCapturePoint::Update(diff))
+ // if changing from controlling alliance to horde
+ if( m_OldState == OBJECTIVESTATE_ALLIANCE )
{
- if(m_OldState != m_State)
- {
- // if changing from controlling alliance to horde
- if( m_OldState == OBJECTIVESTATE_ALLIANCE )
- {
- if(((OutdoorPvPZM*)m_PvP)->m_AllianceTowersControlled)
- ((OutdoorPvPZM*)m_PvP)->m_AllianceTowersControlled--;
- sWorld.SendZoneText(ZM_GRAVEYARD_ZONE,objmgr.GetTrinityStringForDBCLocale(ZMBeaconLooseA[m_TowerType]));
- }
- // if changing from controlling horde to alliance
- else if ( m_OldState == OBJECTIVESTATE_HORDE )
- {
- if(((OutdoorPvPZM*)m_PvP)->m_HordeTowersControlled)
- ((OutdoorPvPZM*)m_PvP)->m_HordeTowersControlled--;
- sWorld.SendZoneText(ZM_GRAVEYARD_ZONE,objmgr.GetTrinityStringForDBCLocale(ZMBeaconLooseH[m_TowerType]));
- }
+ if(((OutdoorPvPZM*)m_PvP)->m_AllianceTowersControlled)
+ ((OutdoorPvPZM*)m_PvP)->m_AllianceTowersControlled--;
+ sWorld.SendZoneText(ZM_GRAVEYARD_ZONE,objmgr.GetTrinityStringForDBCLocale(ZMBeaconLooseA[m_TowerType]));
+ }
+ // if changing from controlling horde to alliance
+ else if ( m_OldState == OBJECTIVESTATE_HORDE )
+ {
+ if(((OutdoorPvPZM*)m_PvP)->m_HordeTowersControlled)
+ ((OutdoorPvPZM*)m_PvP)->m_HordeTowersControlled--;
+ sWorld.SendZoneText(ZM_GRAVEYARD_ZONE,objmgr.GetTrinityStringForDBCLocale(ZMBeaconLooseH[m_TowerType]));
+ }
- switch(m_State)
- {
- case OBJECTIVESTATE_ALLIANCE:
- m_TowerState = ZM_TOWERSTATE_A;
- if(((OutdoorPvPZM*)m_PvP)->m_AllianceTowersControlled<ZM_NUM_BEACONS)
- ((OutdoorPvPZM*)m_PvP)->m_AllianceTowersControlled++;
- sWorld.SendZoneText(ZM_GRAVEYARD_ZONE,objmgr.GetTrinityStringForDBCLocale(ZMBeaconCaptureA[m_TowerType]));
- break;
- case OBJECTIVESTATE_HORDE:
- m_TowerState = ZM_TOWERSTATE_H;
- if(((OutdoorPvPZM*)m_PvP)->m_HordeTowersControlled<ZM_NUM_BEACONS)
- ((OutdoorPvPZM*)m_PvP)->m_HordeTowersControlled++;
- sWorld.SendZoneText(ZM_GRAVEYARD_ZONE,objmgr.GetTrinityStringForDBCLocale(ZMBeaconCaptureH[m_TowerType]));
- break;
- case OBJECTIVESTATE_NEUTRAL:
- case OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE:
- case OBJECTIVESTATE_NEUTRAL_HORDE_CHALLENGE:
- case OBJECTIVESTATE_ALLIANCE_HORDE_CHALLENGE:
- case OBJECTIVESTATE_HORDE_ALLIANCE_CHALLENGE:
- m_TowerState = ZM_TOWERSTATE_N;
- break;
- }
+ switch(m_State)
+ {
+ case OBJECTIVESTATE_ALLIANCE:
+ m_TowerState = ZM_TOWERSTATE_A;
+ if(((OutdoorPvPZM*)m_PvP)->m_AllianceTowersControlled<ZM_NUM_BEACONS)
+ ((OutdoorPvPZM*)m_PvP)->m_AllianceTowersControlled++;
+ sWorld.SendZoneText(ZM_GRAVEYARD_ZONE,objmgr.GetTrinityStringForDBCLocale(ZMBeaconCaptureA[m_TowerType]));
+ break;
+ case OBJECTIVESTATE_HORDE:
+ m_TowerState = ZM_TOWERSTATE_H;
+ if(((OutdoorPvPZM*)m_PvP)->m_HordeTowersControlled<ZM_NUM_BEACONS)
+ ((OutdoorPvPZM*)m_PvP)->m_HordeTowersControlled++;
+ sWorld.SendZoneText(ZM_GRAVEYARD_ZONE,objmgr.GetTrinityStringForDBCLocale(ZMBeaconCaptureH[m_TowerType]));
+ break;
+ case OBJECTIVESTATE_NEUTRAL:
+ case OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE:
+ case OBJECTIVESTATE_NEUTRAL_HORDE_CHALLENGE:
+ case OBJECTIVESTATE_ALLIANCE_HORDE_CHALLENGE:
+ case OBJECTIVESTATE_HORDE_ALLIANCE_CHALLENGE:
+ m_TowerState = ZM_TOWERSTATE_N;
+ break;
+ }
- UpdateTowerState();
- }
+ UpdateTowerState();
+}
- if(m_ShiftPhase != m_OldPhase)
- {
- // send this too, sometimes the slider disappears, dunno why :(
- SendUpdateWorldState(ZMBeaconInfo[m_TowerType].slider_disp, 1);
- // send these updates to only the ones in this objective
- uint32 phase = (uint32)ceil(( m_ShiftPhase + m_ShiftMaxPhase) / ( 2 * m_ShiftMaxPhase ) * 100.0f);
- SendUpdateWorldState(ZMBeaconInfo[m_TowerType].slider_pos, phase);
- SendUpdateWorldState(ZMBeaconInfo[m_TowerType].slider_n, m_NeutralValue);
- }
- return m_OldState != m_State;
- }
- return false;
+void OPvPCapturePointZM_Beacon::SendChangePhase()
+{
+ // send this too, sometimes the slider disappears, dunno why :(
+ SendUpdateWorldState(ZMBeaconInfo[m_TowerType].slider_disp, 1);
+ // send these updates to only the ones in this objective
+ uint32 phase = (uint32)ceil(( m_ShiftPhase + m_ShiftMaxPhase) / ( 2 * m_ShiftMaxPhase ) * 100.0f);
+ SendUpdateWorldState(ZMBeaconInfo[m_TowerType].slider_pos, phase);
+ SendUpdateWorldState(ZMBeaconInfo[m_TowerType].slider_n, m_NeutralValue);
}
bool OutdoorPvPZM::Update(uint32 diff)
diff --git a/src/game/OutdoorPvPZM.h b/src/game/OutdoorPvPZM.h
index e0199329ef2..229dfe268de 100644
--- a/src/game/OutdoorPvPZM.h
+++ b/src/game/OutdoorPvPZM.h
@@ -153,7 +153,8 @@ class OPvPCapturePointZM_Beacon : public OPvPCapturePoint
friend class OutdoorPvPZM;
public:
OPvPCapturePointZM_Beacon(OutdoorPvP * pvp, ZM_BeaconType type);
- bool Update(uint32 diff);
+ void ChangeState();
+ void SendChangePhase();
void FillInitialWorldStates(WorldPacket & data);
// used when player is activated/inactivated in the area
bool HandlePlayerEnter(Player * plr);
@@ -176,6 +177,7 @@ friend class OutdoorPvPZM;
public:
OPvPCapturePointZM_GraveYard(OutdoorPvP * pvp);
bool Update(uint32 diff);
+ void ChangeState() {}
void FillInitialWorldStates(WorldPacket & data);
void UpdateTowerState();
int32 HandleOpenGo(Player *plr, uint64 guid);
diff --git a/src/game/Wintergrasp.cpp b/src/game/Wintergrasp.cpp
index dbe086bb761..96be1ad8121 100644
--- a/src/game/Wintergrasp.cpp
+++ b/src/game/Wintergrasp.cpp
@@ -54,10 +54,46 @@ void LoadTeamPair(TeamPairMap &pairMap, const TeamPair *pair)
typedef std::list<const AreaPOIEntry *> AreaPOIList;
+SiegeWorkshop::SiegeWorkshop(OPvPWintergrasp *opvp, BuildingState *state)
+: OPvPCapturePoint(opvp), m_buildingState(state), m_wintergrasp(opvp)
+, m_vehNum(0)
+{
+}
+
+void SiegeWorkshop::ChangeState()
+{
+ Creature *creature = ObjectAccessor::GetObjectInWorld(m_Creatures[0], (Creature*)NULL);
+ if(!creature)
+ return;
+
+ uint32 entry = 0;
+ if(m_State == OBJECTIVESTATE_ALLIANCE)
+ {
+ m_buildingState->team = TEAM_ALLIANCE;
+ entry = 30499;
+ }
+ else if(m_State == OBJECTIVESTATE_HORDE)
+ {
+ m_buildingState->team = TEAM_HORDE;
+ entry = 30400;
+ }
+ else
+ return;
+
+ m_wintergrasp->BroadcastStateChange(m_buildingState);
+
+ if(entry != creature->GetEntry())
+ {
+ creature->SetOriginalEntry(entry);
+ creature->Respawn(true);
+ }
+ else if(!creature->isAlive())
+ creature->Respawn(true);
+}
+
bool OPvPWintergrasp::SetupOutdoorPvP()
{
m_defender = TeamId(rand()%2);
- //m_defender = TEAM_ALLIANCE;
// Load buildings
AreaPOIList areaPOIs;
@@ -76,10 +112,13 @@ bool OPvPWintergrasp::SetupOutdoorPvP()
}
minX -= 20; minY -= 20; maxX += 20; maxY += 20;
- QueryResult *result = WorldDatabase.PQuery("SELECT `guid`,`position_x`,`position_y` FROM `gameobject`,`gameobject_template` WHERE `gameobject`.`map`=571"
+ QueryResult *result = WorldDatabase.PQuery("SELECT `guid` FROM `gameobject`,`gameobject_template`"
+ " WHERE `gameobject`.`map`=571"
" AND `gameobject`.`position_x`>%f AND `gameobject`.`position_y`>%f"
" AND `gameobject`.`position_x`<%f AND `gameobject`.`position_y`<%f"
- " AND `gameobject_template`.`type`=33 AND `gameobject`.`id`=`gameobject_template`.`entry`", minX, minY, maxX, maxY);
+ " AND `gameobject_template`.`type`=33"
+ " AND `gameobject`.`id`=`gameobject_template`.`entry`",
+ minX, minY, maxX, maxY);
if(!result)
return false;
@@ -88,9 +127,11 @@ bool OPvPWintergrasp::SetupOutdoorPvP()
Field *fields = result->Fetch();
uint32 guid = fields[0].GetUInt32();
- float x = fields[1].GetFloat();
- float y = fields[2].GetFloat();
-
+ GameObjectData const * goData = objmgr.GetGOData(guid);
+ if(!goData) // this should not happen
+ continue;
+
+ float x = goData->posX, y = goData->posY;
float minDist = 100;
AreaPOIList::iterator poi = areaPOIs.end();
for(AreaPOIList::iterator itr = areaPOIs.begin(); itr != areaPOIs.end(); ++itr)
@@ -106,12 +147,86 @@ bool OPvPWintergrasp::SetupOutdoorPvP()
}
}
- if(poi != areaPOIs.end())
+ if(poi == areaPOIs.end())
+ continue;
+
+ // add building to the list
+ TeamId teamId = x > POS_X_CENTER ? m_defender : OTHER_TEAM(m_defender);
+ m_buildingStates[guid] = new BuildingState((*poi)->worldState, teamId, m_defender != TEAM_ALLIANCE);
+ areaPOIs.erase(poi);
+
+ //disable for now
+ continue;
+
+ // add capture point
+ uint32 capturePointEntry = 0;
+
+ //192028 192029
+ //192030 192031
+ //192032 192033
+
+ //190475 190487 not sure
+ //192626 192627
+ //194959 194960
+
+ switch(goData->id)
{
- m_buildingStates[guid] = new BuildingState((*poi)->worldState
- , x > POS_X_CENTER ? m_defender : OTHER_TEAM(m_defender)
- , m_defender != TEAM_ALLIANCE);
- areaPOIs.erase(poi);
+ case 192028: capturePointEntry = 190475; break;
+ case 192029: capturePointEntry = 190487; break;
+ case 192030: capturePointEntry = 190475; break;
+ case 192031: capturePointEntry = 190487; break;
+ case 192032: capturePointEntry = 190475; break;
+ case 192033: capturePointEntry = 190487; break;
+ }
+ if(capturePointEntry)
+ {
+ uint32 engGuid = 0;
+
+ QueryResult *result = WorldDatabase.PQuery("SELECT `guid` FROM `creature`"
+ " WHERE `creature`.`map`=571"
+ " AND `creature`.`id` IN (30400, 30499);");
+
+ if(!result)
+ {
+ sLog.outError("Cannot find siege workshop master in creature!");
+ continue;
+ }
+
+ float minDist = 100;
+ do
+ {
+ Field *fields = result->Fetch();
+ uint32 guid = fields[0].GetUInt32();
+ const CreatureData *creData = objmgr.GetCreatureData(guid);
+ if(!creData)
+ continue;
+
+ float dist = (abs(creData->posX - x) + abs(creData->posY - y));
+ if(minDist > dist)
+ {
+ minDist = dist;
+ engGuid = guid;
+ }
+ }while(result->NextRow());
+ delete result;
+
+ if(!engGuid)
+ {
+ sLog.outError("Cannot find nearby siege workshop master!");
+ continue;
+ }
+
+ SiegeWorkshop *workshop = new SiegeWorkshop(this, m_buildingStates[guid]);
+ if(!workshop->AddCapturePoint(capturePointEntry, goData->id, goData->posX, goData->posY, goData->posZ))
+ {
+ delete workshop;
+ sLog.outError("Cannot add capture point!");
+ continue;
+ }
+ workshop->AddGO(0, guid, goData->id);
+ workshop->AddCre(0, engGuid);
+ m_capturePoints.push_back(workshop);
+ workshop->ChangeState();
}
}while(result->NextRow());
delete result;
@@ -122,7 +237,7 @@ bool OPvPWintergrasp::SetupOutdoorPvP()
//gameeventmgr.StartInternalEvent(GameEventWintergraspDefender[m_defender]);
//Titan Relic eventid = 19982
- objmgr.AddGameObject(192829, 571, 5440, 2840.8, 420.43, 0);
+ objmgr.AddGOData(192829, 571, 5440, 2840.8, 420.43, 0);
LoadTeamPair(m_goDisplayPair, GODisplayPair);
LoadTeamPair(m_creEntryPair, CreatureEntryPair);
@@ -150,9 +265,7 @@ void OPvPWintergrasp::ProcessEvent(GameObject *obj, uint32 eventId)
itr->second->damageState = DAMAGE_DAMAGED;
else
itr->second->damageState = DAMAGE_DESTROYED;
- for(uint32 team = 0; team < 2; ++team)
- for(PlayerSet::iterator p_itr = m_players[team].begin(); p_itr != m_players[team].end(); ++p_itr)
- itr->second->SendUpdate(*p_itr);
+ BroadcastStateChange(itr->second);
}
}
}
@@ -291,6 +404,13 @@ void OPvPWintergrasp::SendInitWorldStatesTo(Player *player)
BroadcastPacket(data);
}
+void OPvPWintergrasp::BroadcastStateChange(BuildingState *state)
+{
+ for(uint32 team = 0; team < 2; ++team)
+ for(PlayerSet::iterator p_itr = m_players[team].begin(); p_itr != m_players[team].end(); ++p_itr)
+ state->SendUpdate(*p_itr);
+}
+
bool OPvPWintergrasp::UpdateCreatureInfo(Creature *creature)
{
TeamPairMap::const_iterator itr = m_creEntryPair.find(creature->GetCreatureData()->id);
@@ -302,6 +422,8 @@ bool OPvPWintergrasp::UpdateCreatureInfo(Creature *creature)
creature->SetOriginalEntry(entry);
creature->Respawn(true);
}
+ else if(!creature->isAlive())
+ creature->Respawn(true);
}
return false;
diff --git a/src/game/Wintergrasp.h b/src/game/Wintergrasp.h
index 11f9865f72b..b9d67a5431a 100644
--- a/src/game/Wintergrasp.h
+++ b/src/game/Wintergrasp.h
@@ -40,6 +40,8 @@ const uint32 WintergraspFaction[2] = {1732, 1735};
#define SPELL_SHUTDOWN_VEHICLE 21247
+#define MAX_VEHICLE_PER_WORKSHOP 4
+
const uint32 WG_KEEP_CM = 0; //Need data
const uint32 WG_RULERS_BUFF = 52108;
//some cosmetics :D
@@ -125,9 +127,9 @@ class OPvPWintergrasp : public OutdoorPvP
void HandlePlayerLeaveZone(Player *plr, uint32 zone);
void HandleKill(Player *killer, Unit *victim);
- void SendInitWorldStatesTo(Player *player = NULL);
-
bool Update(uint32 diff);
+
+ void BroadcastStateChange(BuildingState *state);
protected:
TeamId m_defender;
int32 m_tenacityStack;
@@ -156,6 +158,19 @@ class OPvPWintergrasp : public OutdoorPvP
void GiveReward();
void VehicleCastSpell(TeamId team, int32 spellId);
+
+ void SendInitWorldStatesTo(Player *player = NULL);
+};
+
+class SiegeWorkshop : public OPvPCapturePoint
+{
+ public:
+ explicit SiegeWorkshop(OPvPWintergrasp *opvp, BuildingState *state);
+ void ChangeState();
+ protected:
+ BuildingState *m_buildingState;
+ OPvPWintergrasp *m_wintergrasp;
+ uint32 m_vehNum;
};
#endif