diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h index 6e9fce1154..b1010f5918 100644 --- a/src/game/SharedDefines.h +++ b/src/game/SharedDefines.h @@ -409,7 +409,7 @@ enum SpellAttributesEx4 SPELL_ATTR_EX4_UNK4 = 0x00000010,// 4 This will no longer cause guards to attack on use?? SPELL_ATTR_EX4_UNK5 = 0x00000020,// 5 SPELL_ATTR_EX4_NOT_STEALABLE = 0x00000040,// 6 although such auras might be dispellable, they cannot be stolen - SPELL_ATTR_EX4_UNK7 = 0x00000080,// 7 + SPELL_ATTR_EX4_CAN_CAST_WHILE_CASTING = 0x00000080,// 7 In theory, can use this spell while another is channeled/cast/autocast SPELL_ATTR_EX4_STACK_DOT_MODIFIER = 0x00000100,// 8 no effect on non DoTs? SPELL_ATTR_EX4_UNK9 = 0x00000200,// 9 SPELL_ATTR_EX4_SPELL_VS_EXTEND_COST = 0x00000400,// 10 Rogue Shiv have this flag diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 1dde1eeebe..d915e651ab 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -3080,7 +3080,7 @@ void Spell::SetTargetMap(SpellEffectIndex effIndex, uint32 targetMode, UnitList& SpellCastResult Spell::PreCastCheck(Aura* triggeredByAura /*= nullptr*/) { // Prevent casting at cast another spell (ServerSide check) - if (m_caster->IsNonMeleeSpellCasted(false, true, true) && m_cast_count) + if (m_caster->IsNonMeleeSpellCasted(false, true, true) && m_cast_count && !m_spellInfo->HasAttribute(SPELL_ATTR_EX4_CAN_CAST_WHILE_CASTING)) return SPELL_FAILED_SPELL_IN_PROGRESS; SpellCastResult result = CheckCast(true); @@ -6481,7 +6481,7 @@ SpellCastResult Spell::CheckPetCast(Unit* target) if (!m_caster->isAlive()) return SPELL_FAILED_CASTER_DEAD; - if (m_caster->IsNonMeleeSpellCasted(false)) // prevent spellcast interruption by another spellcast + if (m_caster->IsNonMeleeSpellCasted(false) && !m_spellInfo->HasAttribute(SPELL_ATTR_EX4_CAN_CAST_WHILE_CASTING)) // prevent spellcast interruption by another spellcast return SPELL_FAILED_SPELL_IN_PROGRESS; if (m_caster->isInCombat() && IsNonCombatSpell(m_spellInfo)) return SPELL_FAILED_AFFECTING_COMBAT;