aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorariel- <ariel-@users.noreply.github.com>2016-10-07 12:50:08 -0300
committerariel- <ariel-@users.noreply.github.com>2016-10-07 12:50:08 -0300
commitd07802912428dde1a001820a267f823389cd85a7 (patch)
tree287c315153a708816ae5d441191686cc6f8db757 /src
parent2a5548a13eaa285a34beada053ee6d55b411fe8c (diff)
Revert "Core/Unit: prevent m_extraAttacks underflow. Fixes a freeze with SPELL_EFFECT_ADD_EXTRA_ATTACKS"
This reverts commit f09e7cbbfe1808956c50efefa6446515b62927e3.
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/Player.cpp2
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp4
-rw-r--r--src/server/game/Entities/Unit/Unit.h7
-rw-r--r--src/server/game/Spells/Spell.cpp4
-rw-r--r--src/server/game/Spells/SpellEffects.cpp4
5 files changed, 7 insertions, 14 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index e6681f27e51..9783e577b2b 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -8001,7 +8001,7 @@ void Player::CastItemCombatSpell(DamageInfo const& damageInfo, Item* item, ItemT
}
// not allow proc extra attack spell at extra attack
- if (HasExtraAttacksPending() && spellInfo->HasEffect(SPELL_EFFECT_ADD_EXTRA_ATTACKS))
+ if (m_extraAttacks && spellInfo->HasEffect(SPELL_EFFECT_ADD_EXTRA_ATTACKS))
return;
float chance = (float)spellInfo->ProcChance;
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 4dcb9a505ea..34df0891448 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -2088,13 +2088,11 @@ void Unit::AttackerStateUpdate(Unit* victim, WeaponAttackType attType, bool extr
void Unit::HandleProcExtraAttackFor(Unit* victim)
{
- while (m_extraAttacks > 0)
+ while (m_extraAttacks)
{
AttackerStateUpdate(victim, BASE_ATTACK, true);
--m_extraAttacks;
}
-
- m_extraAttacks = 0;
}
MeleeHitOutcome Unit::RollMeleeOutcomeAgainst(Unit const* victim, WeaponAttackType attType) const
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index aee3d783868..525d0d54ecb 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1296,10 +1296,7 @@ class TC_GAME_API Unit : public WorldObject
bool IsWithinMeleeRange(Unit const* obj) const;
float GetMeleeRange(Unit const* target) const;
void GetRandomContactPoint(const Unit* target, float &x, float &y, float &z, float distance2dMin, float distance2dMax) const;
-
- bool HasExtraAttacksPending() const { return m_extraAttacks > 0; }
- void SetExtraAttacks(uint32 val) { m_extraAttacks = static_cast<int32>(val); }
-
+ uint32 m_extraAttacks;
bool m_canDualWield;
void _addAttacker(Unit* pAttacker); // must be called only from Unit::Attack(Unit*)
@@ -2288,8 +2285,6 @@ class TC_GAME_API Unit : public WorldObject
uint32 m_lastManaUse; // msecs
TimeTrackerSmall m_movesplineTimer;
- int32 m_extraAttacks;
-
Diminishing m_Diminishing;
// Manage all Units that are threatened by us
HostileRefManager m_HostileRefManager;
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 9b21ea4c5fb..f072d71d9ff 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -3498,12 +3498,12 @@ void Spell::_handle_finish_phase()
m_caster->m_playerMovingMe->GainSpellComboPoints(m_comboPointGain);
}
- if (m_caster->HasExtraAttacksPending() && m_spellInfo->HasEffect(SPELL_EFFECT_ADD_EXTRA_ATTACKS))
+ if (m_caster->m_extraAttacks && m_spellInfo->HasEffect(SPELL_EFFECT_ADD_EXTRA_ATTACKS))
{
if (Unit* victim = ObjectAccessor::GetUnit(*m_caster, m_targets.GetOrigUnitTargetGUID()))
m_caster->HandleProcExtraAttackFor(victim);
else
- m_caster->SetExtraAttacks(0);
+ m_caster->m_extraAttacks = 0;
}
// Handle procs on finish
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 9867b25259b..1b570e7778c 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -4495,10 +4495,10 @@ void Spell::EffectAddExtraAttacks(SpellEffIndex effIndex)
if (!unitTarget || !unitTarget->IsAlive())
return;
- if (unitTarget->HasExtraAttacksPending())
+ if (unitTarget->m_extraAttacks)
return;
- unitTarget->SetExtraAttacks(damage);
+ unitTarget->m_extraAttacks = damage;
ExecuteLogEffectExtraAttacks(effIndex, unitTarget, damage);
}