diff options
author | megamage <none@none> | 2009-09-01 19:58:43 -0500 |
---|---|---|
committer | megamage <none@none> | 2009-09-01 19:58:43 -0500 |
commit | c926cb242ce5589d5551a8aea62966ba4ba0598e (patch) | |
tree | 6d20d63d6f67f77ddf7a13414b0ae17cea714c31 | |
parent | 287c2b87eaed68c011cecdef07085ee40ca285b3 (diff) |
*Wintergrasp: allow player to get promotion by group member's kill. Thanks to iadus3
--HG--
branch : trunk
-rw-r--r-- | src/game/Wintergrasp.cpp | 54 | ||||
-rw-r--r-- | src/game/Wintergrasp.h | 1 |
2 files changed, 34 insertions, 21 deletions
diff --git a/src/game/Wintergrasp.cpp b/src/game/Wintergrasp.cpp index 3a2b73fd090..683078b5e64 100644 --- a/src/game/Wintergrasp.cpp +++ b/src/game/Wintergrasp.cpp @@ -647,6 +647,33 @@ void OPvPWintergrasp::HandlePlayerLeaveZone(Player * plr, uint32 zone) UpdateTenacityStack(); } +void OPvPWintergrasp::PromotePlayer(Player *killer) const +{ + Aura *aur; + if(aur = killer->GetAura(SPELL_RECRUIT)) + { + if(aur->GetStackAmount() >= 5) + { + killer->RemoveAura(SPELL_RECRUIT); + killer->CastSpell(killer, SPELL_CORPORAL, true); + } + else + killer->CastSpell(killer, SPELL_RECRUIT, true); + } + else if(aur = killer->GetAura(SPELL_CORPORAL)) + { + if(aur->GetStackAmount() >= 5) + { + killer->RemoveAura(SPELL_CORPORAL); + killer->CastSpell(killer, SPELL_LIEUTENANT, true); + } + else + killer->CastSpell(killer, SPELL_CORPORAL, true); + } + else if(killer->HasAura(SPELL_LIEUTENANT)) + killer->CastSpell(killer, SPELL_LIEUTENANT, true); +} + void OPvPWintergrasp::HandleKill(Player *killer, Unit *victim) { bool ok = false; @@ -669,29 +696,14 @@ void OPvPWintergrasp::HandleKill(Player *killer, Unit *victim) if(ok) { - Aura *aur; - if(aur = killer->GetAura(SPELL_RECRUIT)) - { - if(aur->GetStackAmount() >= 5) - { - killer->RemoveAura(SPELL_RECRUIT); - killer->CastSpell(killer, SPELL_CORPORAL, true); - } - else - killer->CastSpell(killer, SPELL_RECRUIT, true); - } - else if(aur = killer->GetAura(SPELL_CORPORAL)) + if(Group *pGroup = killer->GetGroup()) { - if(aur->GetStackAmount() >= 5) - { - killer->RemoveAura(SPELL_CORPORAL); - killer->CastSpell(killer, SPELL_LIEUTENANT, true); - } - else - killer->CastSpell(killer, SPELL_CORPORAL, true); + for(GroupReference *itr = pGroup->GetFirstMember(); itr != NULL; itr = itr->next()) + if(itr->getSource()->IsAtGroupRewardDistance(victim)) + PromotePlayer(itr->getSource()); } - else if(killer->HasAura(SPELL_LIEUTENANT)) - killer->CastSpell(killer, SPELL_LIEUTENANT, true); + else + PromotePlayer(killer); } } diff --git a/src/game/Wintergrasp.h b/src/game/Wintergrasp.h index c6a14441c3a..e52bfa7b766 100644 --- a/src/game/Wintergrasp.h +++ b/src/game/Wintergrasp.h @@ -210,6 +210,7 @@ class OPvPWintergrasp : public OutdoorPvP void UpdateClock(); void UpdateClockDigit(uint32 &timer, uint32 digit, uint32 mod); + void PromotePlayer(Player *player) const; void UpdateTenacityStack(); void UpdateAllWorldObject(); bool UpdateCreatureInfo(Creature *creature) const; |