From 564d2a94e5d2c42ba566122b2857c482b638d743 Mon Sep 17 00:00:00 2001 From: megamage Date: Tue, 2 Jun 2009 00:04:32 -0500 Subject: [PATCH] *Add timer for wintergrasp. 30 minutes per battle. Can only take over fortress during wartime. --HG-- branch : trunk --- src/game/Wintergrasp.cpp | 63 +++++++++++++++++++++++++++++++++++----- src/game/Wintergrasp.h | 7 +++++ 2 files changed, 62 insertions(+), 8 deletions(-) diff --git a/src/game/Wintergrasp.cpp b/src/game/Wintergrasp.cpp index c295529aef..51c5759bf1 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,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; +} diff --git a/src/game/Wintergrasp.h b/src/game/Wintergrasp.h index 56d6657fee..5a39652cec 100644 --- a/src/game/Wintergrasp.h +++ b/src/game/Wintergrasp.h @@ -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