From d07802912428dde1a001820a267f823389cd85a7 Mon Sep 17 00:00:00 2001 From: ariel- Date: Fri, 7 Oct 2016 12:50:08 -0300 Subject: Revert "Core/Unit: prevent m_extraAttacks underflow. Fixes a freeze with SPELL_EFFECT_ADD_EXTRA_ATTACKS" This reverts commit f09e7cbbfe1808956c50efefa6446515b62927e3. --- src/server/game/Entities/Player/Player.cpp | 2 +- src/server/game/Entities/Unit/Unit.cpp | 4 +--- src/server/game/Entities/Unit/Unit.h | 7 +------ src/server/game/Spells/Spell.cpp | 4 ++-- src/server/game/Spells/SpellEffects.cpp | 4 ++-- 5 files changed, 7 insertions(+), 14 deletions(-) (limited to 'src') 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(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); } -- cgit v1.2.3