*Add timer for wintergrasp. 30 minutes per battle. Can only take over fortress during wartime.
--HG-- branch : trunk
This commit is contained in:
@@ -126,13 +126,19 @@ bool OPvPWintergrasp::SetupOutdoorPvP()
|
|||||||
LoadTeamPair(m_goDisplayPair, GODisplayPair);
|
LoadTeamPair(m_goDisplayPair, GODisplayPair);
|
||||||
LoadTeamPair(m_creEntryPair, CreatureEntryPair);
|
LoadTeamPair(m_creEntryPair, CreatureEntryPair);
|
||||||
|
|
||||||
|
m_wartime = false;
|
||||||
|
m_timer = 600000;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OPvPWintergrasp::ProcessEvent(GameObject *obj, uint32 eventId)
|
void OPvPWintergrasp::ProcessEvent(GameObject *obj, uint32 eventId)
|
||||||
{
|
{
|
||||||
if(eventId == 19982)
|
if(eventId == 19982)
|
||||||
ChangeDefender();
|
{
|
||||||
|
if(m_wartime)
|
||||||
|
ChangeDefender();
|
||||||
|
}
|
||||||
else if(obj->GetGoType() == GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING)
|
else if(obj->GetGoType() == GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING)
|
||||||
{
|
{
|
||||||
BuildingStateMap::const_iterator itr = m_buildingStates.find(obj->GetDBTableGUIDLow());
|
BuildingStateMap::const_iterator itr = m_buildingStates.find(obj->GetDBTableGUIDLow());
|
||||||
@@ -157,6 +163,9 @@ void OPvPWintergrasp::ChangeDefender()
|
|||||||
else
|
else
|
||||||
sWorld.SendZoneText(ZONE_WINTERGRASP, "Horde has taken over the fortress!");
|
sWorld.SendZoneText(ZONE_WINTERGRASP, "Horde has taken over the fortress!");
|
||||||
UpdateAllWorldObject();
|
UpdateAllWorldObject();
|
||||||
|
|
||||||
|
m_wartime = false;
|
||||||
|
m_timer = 600000; // for test, should be 2 hour 30 min
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 OPvPWintergrasp::GetCreatureEntry(uint32 guidlow, uint32 entry)
|
uint32 OPvPWintergrasp::GetCreatureEntry(uint32 guidlow, uint32 entry)
|
||||||
@@ -215,18 +224,30 @@ void OPvPWintergrasp::UpdateAllWorldObject()
|
|||||||
UpdateGameObjectInfo(*itr);
|
UpdateGameObjectInfo(*itr);
|
||||||
for(CreatureSet::iterator itr = m_creatures.begin(); itr != m_creatures.end(); ++itr)
|
for(CreatureSet::iterator itr = m_creatures.begin(); itr != m_creatures.end(); ++itr)
|
||||||
UpdateCreatureInfo(*itr);
|
UpdateCreatureInfo(*itr);
|
||||||
for(BuildingStateMap::iterator itr = m_buildingStates.begin(); itr != m_buildingStates.end(); ++itr)
|
RebuildAllBuildings();
|
||||||
{
|
|
||||||
if(itr->second->building)
|
|
||||||
itr->second->building->Rebuild();
|
|
||||||
itr->second->damageState = DAMAGE_INTACT;
|
|
||||||
itr->second->team = m_defender == TEAM_ALLIANCE ? OTHER_TEAM(itr->second->defaultTeam) : itr->second->defaultTeam;
|
|
||||||
}
|
|
||||||
//if(GameObject *obj = ObjectAccessor::GetObjectInWorld(
|
//if(GameObject *obj = ObjectAccessor::GetObjectInWorld(
|
||||||
|
|
||||||
SendInitWorldStatesTo();
|
SendInitWorldStatesTo();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OPvPWintergrasp::RebuildAllBuildings()
|
||||||
|
{
|
||||||
|
for(BuildingStateMap::iterator itr = m_buildingStates.begin(); itr != m_buildingStates.end(); ++itr)
|
||||||
|
{
|
||||||
|
if(itr->second->building)
|
||||||
|
{
|
||||||
|
itr->second->building->Rebuild();
|
||||||
|
itr->second->health = itr->second->building->GetGOValue()->building.health;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
itr->second->health = 0;
|
||||||
|
|
||||||
|
itr->second->damageState = DAMAGE_INTACT;
|
||||||
|
itr->second->team = m_defender == TEAM_ALLIANCE ? OTHER_TEAM(itr->second->defaultTeam) : itr->second->defaultTeam;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void OPvPWintergrasp::SendInitWorldStatesTo(Player *player)
|
void OPvPWintergrasp::SendInitWorldStatesTo(Player *player)
|
||||||
{
|
{
|
||||||
WorldPacket data(SMSG_INIT_WORLD_STATES, (4+4+4+2+(m_buildingStates.size()*8)));
|
WorldPacket data(SMSG_INIT_WORLD_STATES, (4+4+4+2+(m_buildingStates.size()*8)));
|
||||||
@@ -373,3 +394,29 @@ void OPvPWintergrasp::UpdateTenacityStack()
|
|||||||
(*itr)->SetAuraStack(SPELL_TENACITY, *itr, newStack);
|
(*itr)->SetAuraStack(SPELL_TENACITY, *itr, newStack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool OPvPWintergrasp::Update(uint32 diff)
|
||||||
|
{
|
||||||
|
if(m_timer > diff)
|
||||||
|
m_timer -= diff;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(m_wartime)
|
||||||
|
{
|
||||||
|
m_wartime = false;
|
||||||
|
m_timer = 600000; // for test, should be 2 hour 30 min
|
||||||
|
if(m_defender == TEAM_ALLIANCE)
|
||||||
|
sWorld.SendZoneText(ZONE_WINTERGRASP, "Alliance has successfully defended the fortress!");
|
||||||
|
else
|
||||||
|
sWorld.SendZoneText(ZONE_WINTERGRASP, "Horde has successfully defended the fortress!");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_wartime = true;
|
||||||
|
m_timer = 30*60*1000;
|
||||||
|
sWorld.SendZoneText(ZONE_WINTERGRASP, "Battle begins!");
|
||||||
|
UpdateAllWorldObject();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|||||||
@@ -93,6 +93,8 @@ class OPvPWintergrasp : public OutdoorPvP
|
|||||||
void HandleKill(Player *killer, Unit *victim);
|
void HandleKill(Player *killer, Unit *victim);
|
||||||
|
|
||||||
void SendInitWorldStatesTo(Player *player = NULL);
|
void SendInitWorldStatesTo(Player *player = NULL);
|
||||||
|
|
||||||
|
bool Update(uint32 diff);
|
||||||
protected:
|
protected:
|
||||||
TeamId m_defender;
|
TeamId m_defender;
|
||||||
int32 m_tenacityStack;
|
int32 m_tenacityStack;
|
||||||
@@ -104,12 +106,17 @@ class OPvPWintergrasp : public OutdoorPvP
|
|||||||
|
|
||||||
TeamPairMap m_creEntryPair, m_goDisplayPair;
|
TeamPairMap m_creEntryPair, m_goDisplayPair;
|
||||||
|
|
||||||
|
bool m_wartime;
|
||||||
|
uint32 m_timer;
|
||||||
|
|
||||||
void ChangeDefender();
|
void ChangeDefender();
|
||||||
|
|
||||||
void UpdateTenacityStack();
|
void UpdateTenacityStack();
|
||||||
bool UpdateCreatureInfo(Creature *creature);
|
bool UpdateCreatureInfo(Creature *creature);
|
||||||
void UpdateAllWorldObject();
|
void UpdateAllWorldObject();
|
||||||
bool UpdateGameObjectInfo(GameObject *go);
|
bool UpdateGameObjectInfo(GameObject *go);
|
||||||
|
|
||||||
|
void RebuildAllBuildings();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user