*Add timer for wintergrasp. 30 minutes per battle. Can only take over fortress during wartime.

--HG--
branch : trunk
This commit is contained in:
megamage
2009-06-02 00:04:32 -05:00
parent 77889ffa8b
commit 564d2a94e5
2 changed files with 62 additions and 8 deletions
+55 -8
View File
@@ -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;
}
+7
View File
@@ -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