aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/Wintergrasp.cpp54
-rw-r--r--src/game/Wintergrasp.h1
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;