From 8cb118009efc189e017742328d0697e1c868b8ce Mon Sep 17 00:00:00 2001 From: ariel- Date: Sat, 19 Nov 2016 03:05:44 -0300 Subject: Core/Spell: restore old proc system behaviour on auras self proc. - Use Spell::m_triggeredByAuraSpell and compare against trigger aura, it requires scripts to set triggeredByAura parameter. - Fixed existing scripts lacking it DB/Spell: Anger Capacitor (Tiny Abomination in a Jar) proc Closes #18269 (cherry picked from commit 5b56c94e6d9510fb9cd835216dde7181371a2454) # Conflicts: # src/server/game/Entities/Unit/Unit.cpp # src/server/game/Spells/Auras/SpellAuras.cpp # src/server/game/Spells/Spell.cpp # src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp # src/server/scripts/Pet/pet_hunter.cpp # src/server/scripts/Spells/spell_dk.cpp # src/server/scripts/Spells/spell_druid.cpp # src/server/scripts/Spells/spell_hunter.cpp # src/server/scripts/Spells/spell_item.cpp # src/server/scripts/Spells/spell_mage.cpp # src/server/scripts/Spells/spell_paladin.cpp # src/server/scripts/Spells/spell_priest.cpp # src/server/scripts/Spells/spell_rogue.cpp # src/server/scripts/Spells/spell_shaman.cpp # src/server/scripts/Spells/spell_warlock.cpp # src/server/scripts/Spells/spell_warrior.cpp --- src/server/game/Spells/Spell.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'src/server/game/Spells/Spell.cpp') diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 6fbe7e5dadc..d132fa50d07 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -2389,7 +2389,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target) m_spellAura = nullptr; // Set aura to null for every target-make sure that pointer is not used for unit without aura applied // Spells with this flag cannot trigger if effect is cast on self - bool canEffectTrigger = !m_spellInfo->HasAttribute(SPELL_ATTR3_CANT_TRIGGER_PROC) && (CanExecuteTriggersOnHit(mask) || missInfo == SPELL_MISS_IMMUNE || missInfo == SPELL_MISS_IMMUNE2); + bool const canEffectTrigger = !m_spellInfo->HasAttribute(SPELL_ATTR3_CANT_TRIGGER_PROC) && unitTarget->CanProc() && (CanExecuteTriggersOnHit(mask) || missInfo == SPELL_MISS_IMMUNE || missInfo == SPELL_MISS_IMMUNE2); Unit* spellHitTarget = nullptr; if (missInfo == SPELL_MISS_NONE) // In case spell hit target, do all effect on that target @@ -2801,8 +2801,8 @@ void Spell::DoTriggersOnSpellHit(Unit* unit, uint32 effMask) // info confirmed with retail sniffs of permafrost and shadow weaving if (!m_hitTriggerSpells.empty()) { - int _duration = 0; - for (HitTriggerSpellList::const_iterator i = m_hitTriggerSpells.begin(); i != m_hitTriggerSpells.end(); ++i) + int32 _duration = 0; + for (auto i = m_hitTriggerSpells.begin(); i != m_hitTriggerSpells.end(); ++i) { if (CanExecuteTriggersOnHit(effMask, i->triggeredByAura) && roll_chance_i(i->chance)) { @@ -7601,12 +7601,10 @@ void Spell::PrepareTriggersExecutedOnHit() int32 auraBaseAmount = aurEff->GetBaseAmount(); // proc chance is stored in effect amount int32 chance = m_caster->CalculateSpellDamage(nullptr, aurEff->GetSpellInfo(), aurEff->GetEffIndex(), &auraBaseAmount); + chance *= aurEff->GetBase()->GetStackAmount(); + // build trigger and add to the list - HitTriggerSpell spellTriggerInfo; - spellTriggerInfo.triggeredSpell = spellInfo; - spellTriggerInfo.triggeredByAura = aurEff->GetSpellInfo(); - spellTriggerInfo.chance = chance * aurEff->GetBase()->GetStackAmount(); - m_hitTriggerSpells.push_back(spellTriggerInfo); + m_hitTriggerSpells.emplace_back(spellInfo, aurEff->GetSpellInfo(), chance); } } } -- cgit v1.2.3