summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Battlefield/Zones/BattlefieldWG.cpp67
1 files changed, 26 insertions, 41 deletions
diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp
index 101ab5c95c..ceb125a74a 100644
--- a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp
+++ b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp
@@ -201,15 +201,13 @@ bool BattlefieldWG::Update(uint32 diff)
else
m_saveTimer -= diff;
- // Update Tenacity
+ // Update Tenacity every 2,5 sec.
if (IsWarTime())
{
if (m_tenacityUpdateTimer <= diff)
{
- m_tenacityUpdateTimer = 10000;
- if (!m_updateTenacityList.empty())
- UpdateTenacity();
- m_updateTenacityList.clear();
+ m_tenacityUpdateTimer = 2500;
+ UpdateTenacity();
}
else
m_tenacityUpdateTimer -= diff;
@@ -1087,42 +1085,7 @@ void BattlefieldWG::UpdateTenacity()
newStack = int32((1.0f - ((float)alliancePlayers / hordePlayers)) * 4.0f); // negative, should cast on horde
}
- // Return if no change in stack and apply tenacity to new player
- if (newStack == m_tenacityStack)
- {
- for (GuidSet::const_iterator itr = m_updateTenacityList.begin(); itr != m_updateTenacityList.end(); ++itr)
- if (Player* newPlayer = ObjectAccessor::FindPlayer(*itr))
- if ((newPlayer->GetTeamId() == TEAM_ALLIANCE && m_tenacityStack > 0) || (newPlayer->GetTeamId() == TEAM_HORDE && m_tenacityStack < 0))
- {
- newStack = std::min(abs(newStack), 20);
- uint32 buff_honor = GetHonorBuff(newStack);
- newPlayer->SetAuraStack(SPELL_TENACITY, newPlayer, newStack);
- if (buff_honor)
- newPlayer->CastSpell(newPlayer, buff_honor, true);
- }
- return;
- }
-
- if (m_tenacityStack != 0)
- {
- if (m_tenacityStack > 0 && newStack <= 0) // old buff was on alliance
- team = TEAM_ALLIANCE;
- else if (m_tenacityStack < 0 && newStack >= 0) // old buff was on horde
- team = TEAM_HORDE;
- }
-
- m_tenacityStack = newStack;
- // Remove old buff
- if (team != TEAM_NEUTRAL)
- {
- for (GuidSet::const_iterator itr = m_PlayersInWar[team].begin(); itr != m_PlayersInWar[team].end(); ++itr)
- if (Player* player = ObjectAccessor::FindPlayer(*itr))
- player->RemoveAurasDueToSpell(SPELL_TENACITY);
-
- for (GuidSet::const_iterator itr = m_vehicles[team].begin(); itr != m_vehicles[team].end(); ++itr)
- if (Unit* unit = ObjectAccessor::FindUnit(*itr))
- unit->RemoveAurasDueToSpell(SPELL_TENACITY_VEHICLE);
- }
+ // new way to check: always add stacks if they exist, to every one in the game
// Apply new buff
if (newStack)
@@ -1147,6 +1110,28 @@ void BattlefieldWG::UpdateTenacity()
unit->CastSpell(unit, buff_honor, true);
}
}
+
+ if (m_tenacityStack != 0)
+ {
+ if (m_tenacityStack > 0 && newStack <= 0) // old buff was on alliance
+ team = TEAM_ALLIANCE;
+ else if (m_tenacityStack < 0 && newStack >= 0) // old buff was on horde
+ team = TEAM_HORDE;
+ }
+
+ // Remove old buff
+ if (team != TEAM_NEUTRAL)
+ {
+ for (GuidSet::const_iterator itr = m_PlayersInWar[team].begin(); itr != m_PlayersInWar[team].end(); ++itr)
+ if (Player* player = ObjectAccessor::FindPlayer(*itr))
+ player->RemoveAurasDueToSpell(SPELL_TENACITY);
+
+ for (GuidSet::const_iterator itr = m_vehicles[team].begin(); itr != m_vehicles[team].end(); ++itr)
+ if (Unit* unit = ObjectAccessor::FindUnit(*itr))
+ unit->RemoveAurasDueToSpell(SPELL_TENACITY_VEHICLE);
+ }
+
+ m_tenacityStack = newStack; // Assign new tenacity value
}
WintergraspCapturePoint::WintergraspCapturePoint(BattlefieldWG* battlefield, TeamId teamInControl) : BfCapturePoint(battlefield)