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 /src/game/Wintergrasp.cpp | |
parent | 287c2b87eaed68c011cecdef07085ee40ca285b3 (diff) |
*Wintergrasp: allow player to get promotion by group member's kill. Thanks to iadus3
--HG--
branch : trunk
Diffstat (limited to 'src/game/Wintergrasp.cpp')
-rw-r--r-- | src/game/Wintergrasp.cpp | 54 |
1 files changed, 33 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); } } |