diff options
Diffstat (limited to 'src/game/Wintergrasp.cpp')
| -rw-r--r-- | src/game/Wintergrasp.cpp | 45 |
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); + } +} |
