aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells/Spell.cpp
diff options
context:
space:
mode:
authorariel- <ariel-@users.noreply.github.com>2016-11-19 03:05:44 -0300
committerjoschiwald <joschiwald.trinity@gmail.com>2018-01-13 16:38:07 +0100
commit8cb118009efc189e017742328d0697e1c868b8ce (patch)
treed81849626f9ec5dbbe14aee8383afe58545c7afa /src/server/game/Spells/Spell.cpp
parent843a190052d2060f88bf5190e346b0444fc92369 (diff)
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
Diffstat (limited to 'src/server/game/Spells/Spell.cpp')
-rw-r--r--src/server/game/Spells/Spell.cpp14
1 files changed, 6 insertions, 8 deletions
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);
}
}
}