aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/Spell.cpp5
-rw-r--r--src/game/SpellEffects.cpp18
2 files changed, 12 insertions, 11 deletions
diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp
index 2227bc4c92b..4fdd26c806f 100644
--- a/src/game/Spell.cpp
+++ b/src/game/Spell.cpp
@@ -978,7 +978,8 @@ void Spell::DoAllEffectOnTarget(TargetInfo *target)
uint32 procEx = PROC_EX_NONE;
//Spells with this flag cannot trigger if effect is casted on self
- bool canEffectTrigger = (m_spellInfo->AttributesEx4 & SPELL_ATTR_EX4_CANT_PROC_FROM_SELFCAST ? m_caster!=unitTarget : true)
+ // Slice and Dice, relentless strikes, eviscerate
+ bool canEffectTrigger = (m_spellInfo->AttributesEx4 & (SPELL_ATTR_EX4_CANT_PROC_FROM_SELFCAST | SPELL_ATTR_EX4_UNK4) ? m_caster!=unitTarget : true)
&& m_canTrigger;
if (missInfo==SPELL_MISS_NONE) // In case spell hit target, do all effect on that target
@@ -1222,7 +1223,7 @@ void Spell::DoSpellHitOnUnit(Unit *unit, const uint32 effectMask)
((Creature*)m_caster)->AI()->SpellHitTarget(unit, m_spellInfo);
// spells with this flag can trigger only if not selfcast (eviscerate for example)
- if (m_ChanceTriggerSpells.size() && (!(m_spellInfo->AttributesEx4 & SPELL_ATTR_EX4_CANT_PROC_FROM_SELFCAST) || unit!=m_caster))
+ if (m_ChanceTriggerSpells.size() && (!(m_spellInfo->AttributesEx4 & SPELL_ATTR_EX4_CANT_PROC_FROM_SELFCAST | SPELL_ATTR_EX4_UNK4) || unit!=m_caster))
{
int _duration=0;
for(ChanceTriggerSpells::const_iterator i = m_ChanceTriggerSpells.begin(); i != m_ChanceTriggerSpells.end(); ++i)
diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
index 9ee2050a6ab..86c2235cdb5 100644
--- a/src/game/SpellEffects.cpp
+++ b/src/game/SpellEffects.cpp
@@ -1824,7 +1824,8 @@ void Spell::EffectTriggerSpell(uint32 i)
return;
// get highest rank of the Stealth spell
- uint32 spellId = 0;
+ bool found = false;
+ SpellEntry const *spellInfo;
const PlayerSpellMap& sp_list = ((Player*)m_caster)->GetSpellMap();
for (PlayerSpellMap::const_iterator itr = sp_list.begin(); itr != sp_list.end(); ++itr)
{
@@ -1832,26 +1833,26 @@ void Spell::EffectTriggerSpell(uint32 i)
if(!itr->second->active || itr->second->disabled || itr->second->state == PLAYERSPELL_REMOVED)
continue;
- SpellEntry const *spellInfo = sSpellStore.LookupEntry(itr->first);
+ spellInfo = sSpellStore.LookupEntry(itr->first);
if (!spellInfo)
continue;
if (spellInfo->SpellFamilyName == SPELLFAMILY_ROGUE && spellInfo->SpellFamilyFlags & SPELLFAMILYFLAG_ROGUE_STEALTH)
{
- spellId = spellInfo->Id;
+ found=true;
break;
}
}
// no Stealth spell found
- if (!spellId)
+ if (!found)
return;
// reset cooldown on it if needed
- if(((Player*)m_caster)->HasSpellCooldown(spellId))
- ((Player*)m_caster)->RemoveSpellCooldown(spellId);
+ if(((Player*)m_caster)->HasSpellCooldown(spellInfo->Id))
+ ((Player*)m_caster)->RemoveSpellCooldown(spellInfo->Id);
- m_caster->CastSpell(m_caster, spellId, true);
+ m_TriggerSpells.push_back(spellInfo);
return;
}
// just skip
@@ -1961,8 +1962,7 @@ void Spell::EffectTriggerSpell(uint32 i)
for(uint32 j = i+1; j < 3; ++j)
{
if(m_spellInfo->EffectImplicitTargetA[j] == TARGET_UNIT_CASTER
- && (m_spellInfo->Effect[j]==SPELL_EFFECT_INSTAKILL
- || m_spellInfo->Effect[j]==SPELL_EFFECT_SANCTUARY))
+ && (m_spellInfo->Effect[j]==SPELL_EFFECT_INSTAKILL))
{
instant = true;
break;