aboutsummaryrefslogtreecommitdiff
path: root/src/game/Wintergrasp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/Wintergrasp.cpp')
-rw-r--r--src/game/Wintergrasp.cpp55
1 files changed, 51 insertions, 4 deletions
diff --git a/src/game/Wintergrasp.cpp b/src/game/Wintergrasp.cpp
index c295529aef0..51c5759bf13 100644
--- a/src/game/Wintergrasp.cpp
+++ b/src/game/Wintergrasp.cpp
@@ -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,16 +224,28 @@ void OPvPWintergrasp::UpdateAllWorldObject()
UpdateGameObjectInfo(*itr);
for(CreatureSet::iterator itr = m_creatures.begin(); itr != m_creatures.end(); ++itr)
UpdateCreatureInfo(*itr);
+ 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;
}
- //if(GameObject *obj = ObjectAccessor::GetObjectInWorld(
-
- SendInitWorldStatesTo();
}
void OPvPWintergrasp::SendInitWorldStatesTo(Player *player)
@@ -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;
+}