diff options
author | megamage <none@none> | 2009-06-02 00:04:32 -0500 |
---|---|---|
committer | megamage <none@none> | 2009-06-02 00:04:32 -0500 |
commit | 564d2a94e5d2c42ba566122b2857c482b638d743 (patch) | |
tree | 632ce62cc00c8fd2c1a2be90d85e8ae93781bf08 /src | |
parent | 77889ffa8bb914abc46ebf93c6c150f3d11cc1e4 (diff) |
*Add timer for wintergrasp. 30 minutes per battle. Can only take over fortress during wartime.
--HG--
branch : trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/game/Wintergrasp.cpp | 55 | ||||
-rw-r--r-- | src/game/Wintergrasp.h | 7 |
2 files changed, 58 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; +} diff --git a/src/game/Wintergrasp.h b/src/game/Wintergrasp.h index 56d6657fee6..5a39652cecd 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 |