aboutsummaryrefslogtreecommitdiff
path: root/src/game/Wintergrasp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/Wintergrasp.cpp')
-rw-r--r--src/game/Wintergrasp.cpp45
1 files changed, 43 insertions, 2 deletions
diff --git a/src/game/Wintergrasp.cpp b/src/game/Wintergrasp.cpp
index 5fe5a7bdbe6..0103b32b35d 100644
--- a/src/game/Wintergrasp.cpp
+++ b/src/game/Wintergrasp.cpp
@@ -32,7 +32,6 @@ bool OPvPWintergrasp::SetupOutdoorPvP()
}
m_defender = TeamId(rand()%2);
- m_attacker = (m_defender == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE);
return true;
}
@@ -45,18 +44,21 @@ void OPvPWintergrasp::HandlePlayerEnterZone(Player * plr, uint32 zone)
for(AreaPOIList::iterator itr = areaPOIs.begin(); itr != areaPOIs.end(); ++itr)
{
- TeamId team = ((*itr)->x > POS_X_CENTER ? m_defender : m_attacker);
+ TeamId team = ((*itr)->x > POS_X_CENTER ? m_defender : OTHER_TEAM(m_defender));
plr->SendUpdateWorldState((*itr)->worldState, AreaPOIIconId[team][DAMAGE_INTACT]);
}
OutdoorPvP::HandlePlayerEnterZone(plr, zone);
+ UpdateTenacityStack();
}
void OPvPWintergrasp::HandlePlayerLeaveZone(Player * plr, uint32 zone)
{
if(!plr->GetSession()->PlayerLogout() && plr->m_Vehicle) // dismiss in change zone case
plr->m_Vehicle->Dismiss();
+ plr->RemoveAura(SPELL_TENACITY);
OutdoorPvP::HandlePlayerLeaveZone(plr, zone);
+ UpdateTenacityStack();
}
void OPvPWintergrasp::HandleKill(Player *killer, Unit *victim)
@@ -91,3 +93,42 @@ void OPvPWintergrasp::HandleKill(Player *killer, Unit *victim)
}
}
}
+
+void OPvPWintergrasp::UpdateTenacityStack()
+{
+ uint32 allianceNum = m_players[TEAM_ALLIANCE].size();
+ uint32 hordeNum = m_players[TEAM_HORDE].size();
+
+ int32 newStack = 0;
+ if(allianceNum && hordeNum)
+ {
+ if(allianceNum > hordeNum)
+ newStack = allianceNum / hordeNum - 1;
+ else if(allianceNum < hordeNum)
+ newStack = 1 - int32(hordeNum / allianceNum);
+ }
+
+ if(newStack == m_tenacityStack)
+ return;
+
+ // Remove old buff
+ if(m_tenacityStack > 0)
+ {
+ if(newStack <= 0)
+ TeamCastSpell(TEAM_ALLIANCE, -SPELL_TENACITY);
+ }
+ else if(m_tenacityStack < 0)
+ {
+ if(newStack >= 0)
+ TeamCastSpell(TEAM_HORDE, -SPELL_TENACITY);
+ }
+ m_tenacityStack = newStack;
+
+ // Apply new buff
+ if(newStack)
+ {
+ TeamId team = newStack > 0 ? TEAM_ALLIANCE : TEAM_HORDE;
+ for(PlayerSet::iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr)
+ (*itr)->SetAuraStack(SPELL_TENACITY, *itr, newStack);
+ }
+}