diff options
author | megamage <none@none> | 2009-06-05 13:43:36 -0500 |
---|---|---|
committer | megamage <none@none> | 2009-06-05 13:43:36 -0500 |
commit | afd79d7ebfc9db0045e74b56a4ecd4ae520552a7 (patch) | |
tree | 021d818546fc88c5dd34f6c45a2f91c52666ce3c /src | |
parent | 574e64bbbf3ace7ee6312ddbaaf196df406a641b (diff) |
*Give rewards (only to players with rank LIEUTENANT) when battle in wintergrasp ends.
--HG--
branch : trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/game/Wintergrasp.cpp | 69 | ||||
-rw-r--r-- | src/game/Wintergrasp.h | 35 |
2 files changed, 90 insertions, 14 deletions
diff --git a/src/game/Wintergrasp.cpp b/src/game/Wintergrasp.cpp index 5172b7f09d6..f3ab2f98975 100644 --- a/src/game/Wintergrasp.cpp +++ b/src/game/Wintergrasp.cpp @@ -155,19 +155,6 @@ void OPvPWintergrasp::ProcessEvent(GameObject *obj, uint32 eventId) } } -void OPvPWintergrasp::ChangeDefender() -{ - m_defender = OTHER_TEAM(m_defender); - if(m_defender == TEAM_ALLIANCE) - sWorld.SendZoneText(ZONE_WINTERGRASP, "Alliance has taken over the fortress!"); - 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, const CreatureData *data) { if(m_defender == TEAM_ALLIANCE) @@ -307,7 +294,7 @@ bool OPvPWintergrasp::UpdateGameObjectInfo(GameObject *go) void OPvPWintergrasp::HandlePlayerEnterZone(Player * plr, uint32 zone) { - if(!plr->HasAura(SPELL_RECRUIT) && !plr->HasAura(SPELL_CORPORAL) + if(m_wartime && !plr->HasAura(SPELL_RECRUIT) && !plr->HasAura(SPELL_CORPORAL) && !plr->HasAura(SPELL_LIEUTENANT)) plr->CastSpell(plr, SPELL_RECRUIT, true); @@ -412,6 +399,8 @@ bool OPvPWintergrasp::Update(uint32 diff) sWorld.SendZoneText(ZONE_WINTERGRASP, "Alliance has successfully defended the fortress!"); else sWorld.SendZoneText(ZONE_WINTERGRASP, "Horde has successfully defended the fortress!"); + GiveReward(); + EndBattle(); } else { @@ -419,7 +408,59 @@ bool OPvPWintergrasp::Update(uint32 diff) m_timer = sWorld.getConfig(CONFIG_OUTDOORPVP_WINTERGRASP_BATTLE_TIME) * MINUTE * IN_MILISECONDS; sWorld.SendZoneText(ZONE_WINTERGRASP, "Battle begins!"); UpdateAllWorldObject(); + StartBattle(); } } return false; } + +void OPvPWintergrasp::ChangeDefender() +{ + m_wartime = false; + m_timer = sWorld.getConfig(CONFIG_OUTDOORPVP_WINTERGRASP_INTERVAL) * MINUTE * IN_MILISECONDS; + + m_defender = OTHER_TEAM(m_defender); + if(m_defender == TEAM_ALLIANCE) + sWorld.SendZoneText(ZONE_WINTERGRASP, "Alliance has taken over the fortress!"); + else + sWorld.SendZoneText(ZONE_WINTERGRASP, "Horde has taken over the fortress!"); + UpdateAllWorldObject(); + + GiveReward(); + EndBattle(); +} + +void OPvPWintergrasp::GiveReward() +{ + for(uint32 team = 0; team < 2; ++team) + for(PlayerSet::iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr) + if((*itr)->HasAura(SPELL_LIEUTENANT)) + (*itr)->CastSpell(*itr, team == m_defender ? SPELL_VICTORY_REWARD : SPELL_DEFEAT_REWARD, true); +} + +void OPvPWintergrasp::StartBattle() +{ + for(uint32 team = 0; team < 2; ++team) + { + for(PlayerSet::iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr) + { + (*itr)->RemoveAura(SPELL_RECRUIT); + (*itr)->RemoveAura(SPELL_CORPORAL); + (*itr)->RemoveAura(SPELL_LIEUTENANT); + (*itr)->CastSpell(*itr, SPELL_RECRUIT, true); + } + } +} + +void OPvPWintergrasp::EndBattle() +{ + for(uint32 team = 0; team < 2; ++team) + { + for(PlayerSet::iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr) + { + (*itr)->RemoveAura(SPELL_RECRUIT); + (*itr)->RemoveAura(SPELL_CORPORAL); + (*itr)->RemoveAura(SPELL_LIEUTENANT); + } + } +} diff --git a/src/game/Wintergrasp.h b/src/game/Wintergrasp.h index f43d461ea9f..e98201ea04c 100644 --- a/src/game/Wintergrasp.h +++ b/src/game/Wintergrasp.h @@ -35,6 +35,38 @@ const uint32 WintergraspFaction[2] = {1732, 1735}; #define SPELL_TENACITY 58549 #define SPELL_TENACITY_VEHICLE 59911 +#define SPELL_VICTORY_REWARD 56902 +#define SPELL_DEFEAT_REWARD 58494 + +const uint32 WG_KEEP_CM = 0; //Need data +const uint32 WG_RULERS_BUFF = 52108; +//some cosmetics :D +const uint32 WG_VICTORY_AURA = 60044; + +const uint32 WG_SHUTDOWN_CAST = 21247; + +enum OutdoorPvP_WG_Sounds +{ +/*TODO OutdoorPvP_WG_SOUND_KEEP_CLAIMED = 8192, + OutdoorPvP_WG_SOUND_KEEP_CAPTURED_ALLIANCE = 8173, + OutdoorPvP_WG_SOUND_KEEP_CAPTURED_HORDE = 8213, + OutdoorPvP_WG_SOUND_KEEP_ASSAULTED_ALLIANCE = 8212, + OutdoorPvP_WG_SOUND_KEEP_ASSAULTED_HORDE = 8174, + OutdoorPvP_WG_SOUND_NEAR_VICTORY = 8456 +*/ +}; + +enum OutdoorPvP_WG_KeepStatus +{ + OutdoorPvP_WG_KEEP_TYPE_NEUTRAL = 0, + OutdoorPvP_WG_KEEP_TYPE_CONTESTED = 1, + OutdoorPvP_WG_KEEP_STATUS_ALLY_CONTESTED = 1, + OutdoorPvP_WG_KEEP_STATUS_HORDE_CONTESTED = 2, + OutdoorPvP_WG_KEEP_TYPE_OCCUPIED = 3, + OutdoorPvP_WG_KEEP_STATUS_ALLY_OCCUPIED = 3, + OutdoorPvP_WG_KEEP_STATUS_HORDE_OCCUPIED = 4 +}; + enum DamageState { DAMAGE_INTACT, @@ -117,6 +149,9 @@ class OPvPWintergrasp : public OutdoorPvP bool UpdateGameObjectInfo(GameObject *go); void RebuildAllBuildings(); + void StartBattle(); + void EndBattle(); + void GiveReward(); }; #endif |