*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_creEntryPair, CreatureEntryPair);
|
||||
|
||||
m_wartime = false;
|
||||
m_timer = 600000;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void OPvPWintergrasp::ProcessEvent(GameObject *obj, uint32 eventId)
|
||||
{
|
||||
if(eventId == 19982)
|
||||
ChangeDefender();
|
||||
{
|
||||
if(m_wartime)
|
||||
ChangeDefender();
|
||||
}
|
||||
else if(obj->GetGoType() == GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING)
|
||||
{
|
||||
BuildingStateMap::const_iterator itr = m_buildingStates.find(obj->GetDBTableGUIDLow());
|
||||
@@ -157,6 +163,9 @@ void OPvPWintergrasp::ChangeDefender()
|
||||
else
|
||||
sWorld.SendZoneText(ZONE_WINTERGRASP, "Horde has taken over the fortress!");
|
||||
UpdateAllWorldObject();
|
||||
|
||||
m_wartime = false;
|
||||
m_timer = 600000; // for test, should be 2 hour 30 min
|
||||
}
|
||||
|
||||
uint32 OPvPWintergrasp::GetCreatureEntry(uint32 guidlow, uint32 entry)
|
||||
@@ -215,18 +224,30 @@ void OPvPWintergrasp::UpdateAllWorldObject()
|
||||
UpdateGameObjectInfo(*itr);
|
||||
for(CreatureSet::iterator itr = m_creatures.begin(); itr != m_creatures.end(); ++itr)
|
||||
UpdateCreatureInfo(*itr);
|
||||
for(BuildingStateMap::iterator itr = m_buildingStates.begin(); itr != m_buildingStates.end(); ++itr)
|
||||
{
|
||||
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;
|
||||
}
|
||||
RebuildAllBuildings();
|
||||
|
||||
//if(GameObject *obj = ObjectAccessor::GetObjectInWorld(
|
||||
|
||||
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)
|
||||
{
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
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 SendInitWorldStatesTo(Player *player = NULL);
|
||||
|
||||
bool Update(uint32 diff);
|
||||
protected:
|
||||
TeamId m_defender;
|
||||
int32 m_tenacityStack;
|
||||
@@ -104,12 +106,17 @@ class OPvPWintergrasp : public OutdoorPvP
|
||||
|
||||
TeamPairMap m_creEntryPair, m_goDisplayPair;
|
||||
|
||||
bool m_wartime;
|
||||
uint32 m_timer;
|
||||
|
||||
void ChangeDefender();
|
||||
|
||||
void UpdateTenacityStack();
|
||||
bool UpdateCreatureInfo(Creature *creature);
|
||||
void UpdateAllWorldObject();
|
||||
bool UpdateGameObjectInfo(GameObject *go);
|
||||
|
||||
void RebuildAllBuildings();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user