diff options
-rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 52 | ||||
-rw-r--r-- | src/server/game/Spells/Spell.cpp | 9 |
2 files changed, 50 insertions, 11 deletions
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index d5e8d7b9c41..3132756683a 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -472,7 +472,7 @@ enum SpellAttr2 SPELL_ATTR2_UNK25 = 0x02000000, // 25 SPELL_ATTR2_UNAFFECTED_BY_AURA_SCHOOL_IMMUNE = 0x04000000, // 26 unaffected by school immunity SPELL_ATTR2_UNK27 = 0x08000000, // 27 - SPELL_ATTR2_IGNORE_ITEM_CHECK = 0x10000000, // 28 Spell is cast without checking item requirements (charges/reagents/totem) + SPELL_ATTR2_IGNORE_ACTION_AURA_INTERRUPT_FLAGS= 0x10000000, // 28 doesnt break auras with SpellAuraInterruptFlags::Action and SpellAuraInterruptFlags::ActionDelayed SPELL_ATTR2_CANT_CRIT = 0x20000000, // 29 Spell can't crit SPELL_ATTR2_TRIGGERED_CAN_TRIGGER_PROC = 0x40000000, // 30 spell can trigger even if triggered SPELL_ATTR2_FOOD_BUFF = 0x80000000 // 31 Food or Drink Buff (like Well Fed) @@ -531,7 +531,7 @@ enum SpellAttr4 SPELL_ATTR4_UNK12 = 0x00001000, // 12 SPELL_ATTR4_COMBAT_LOG_NO_CASTER = 0x00002000, // 13 No caster object is sent to client combat log SPELL_ATTR4_DAMAGE_DOESNT_BREAK_AURAS = 0x00004000, // 14 doesn't break auras by damage from these spells - SPELL_ATTR4_UNK15 = 0x00008000, // 15 + SPELL_ATTR4_HIDDEN_IN_SPELLBOOK = 0x00008000, // 15 SPELL_ATTR4_NOT_USABLE_IN_ARENA_OR_RATED_BG = 0x00010000, // 16 Cannot be used in both Arenas or Rated Battlegrounds SPELL_ATTR4_USABLE_IN_ARENA = 0x00020000, // 17 SPELL_ATTR4_AREA_TARGET_CHAIN = 0x00040000, // 18 (NYI)hits area targets one after another instead of all at once @@ -637,10 +637,10 @@ enum SpellAttr7 SPELL_ATTR7_DISPEL_CHARGES = 0x00000400, // 10 Dispel and Spellsteal individual charges instead of whole aura. SPELL_ATTR7_INTERRUPT_ONLY_NONPLAYER = 0x00000800, // 11 Only non-player casts interrupt, though Feral Charge - Bear has it. SPELL_ATTR7_SILENCE_ONLY_NONPLAYER = 0x00001000, // 12 Not set in 3.2.2a. - SPELL_ATTR7_UNK13 = 0x00002000, // 13 Not set in 3.2.2a. + SPELL_ATTR7_CAN_ALWAYS_BE_INTERRUPTED = 0x00002000, // 13 Can always be interrupted, even if caster is immune SPELL_ATTR7_UNK14 = 0x00004000, // 14 Only 52150 (Raise Dead - Pet) spell. SPELL_ATTR7_UNK15 = 0x00008000, // 15 Exorcism. Usable on players? 100% crit chance on undead and demons? - SPELL_ATTR7_CAN_RESTORE_SECONDARY_POWER = 0x00010000, // 16 These spells can replenish a powertype, which is not the current powertype. + SPELL_ATTR7_HIDDEN_IN_SPELLBOOK_WHEN_LEARNED = 0x00010000, // 16 After learning these spells become hidden in spellbook (but are visible when not learned for low level characters) SPELL_ATTR7_UNK17 = 0x00020000, // 17 Only 27965 (Suicide) spell. SPELL_ATTR7_HAS_CHARGE_EFFECT = 0x00040000, // 18 Only spells that have Charge among effects. SPELL_ATTR7_ZONE_TELEPORT = 0x00080000, // 19 Teleports to specific zones. @@ -842,7 +842,7 @@ enum SpellAttr13 { SPELL_ATTR13_UNK0 = 0x00000001, // 0 SPELL_ATTR13_UNK1 = 0x00000002, // 1 - SPELL_ATTR13_UNK2 = 0x00000004, // 2 + SPELL_ATTR13_PASSIVE_IS_UPGRADE = 0x00000004, // 2 Displays "Upgrade" in spell tooltip instead of "Passive" SPELL_ATTR13_UNK3 = 0x00000008, // 3 SPELL_ATTR13_UNK4 = 0x00000010, // 4 SPELL_ATTR13_UNK5 = 0x00000020, // 5 @@ -863,11 +863,51 @@ enum SpellAttr13 SPELL_ATTR13_UNK20 = 0x00100000, // 20 SPELL_ATTR13_UNK21 = 0x00200000, // 21 SPELL_ATTR13_UNK22 = 0x00400000, // 22 - SPELL_ATTR13_UNK23 = 0x00800000 // 23 + SPELL_ATTR13_UNK23 = 0x00800000, // 23 + SPELL_ATTR13_UNK24 = 0x01000000, // 24 + SPELL_ATTR13_UNK25 = 0x02000000, // 25 + SPELL_ATTR13_UNK26 = 0x04000000, // 26 + SPELL_ATTR13_UNK27 = 0x08000000, // 27 + SPELL_ATTR13_UNK28 = 0x10000000, // 28 + SPELL_ATTR13_UNK29 = 0x20000000, // 29 + SPELL_ATTR13_UNK30 = 0x40000000, // 30 + SPELL_ATTR13_UNK31 = 0x80000000 // 31 }; enum SpellAttr14 { + SPELL_ATTR14_UNK0 = 0x00000001, // 0 + SPELL_ATTR14_REAGENT_COST_CONSUMES_CHARGES = 0x00000002, // 1 Consumes item charges for reagent costs instead of whole items + SPELL_ATTR14_UNK2 = 0x00000004, // 2 + SPELL_ATTR14_HIDE_PASSIVE_FROM_TOOLTIP = 0x00000008, // 3 Don't show "Passive" or "Upgrade" in tooltip + SPELL_ATTR14_UNK4 = 0x00000010, // 4 + SPELL_ATTR14_UNK5 = 0x00000020, // 5 + SPELL_ATTR14_UNK6 = 0x00000040, // 6 + SPELL_ATTR14_UNK7 = 0x00000080, // 7 + SPELL_ATTR14_UNK8 = 0x00000100, // 8 + SPELL_ATTR14_UNK9 = 0x00000200, // 9 + SPELL_ATTR14_UNK10 = 0x00000400, // 10 + SPELL_ATTR14_UNK11 = 0x00000800, // 11 + SPELL_ATTR14_UNK12 = 0x00001000, // 12 + SPELL_ATTR14_UNK13 = 0x00002000, // 13 + SPELL_ATTR14_UNK14 = 0x00004000, // 14 + SPELL_ATTR14_UNK15 = 0x00008000, // 15 + SPELL_ATTR14_UNK16 = 0x00010000, // 16 + SPELL_ATTR14_UNK17 = 0x00020000, // 17 + SPELL_ATTR14_UNK18 = 0x00040000, // 18 + SPELL_ATTR14_UNK19 = 0x00080000, // 19 + SPELL_ATTR14_UNK20 = 0x00100000, // 20 + SPELL_ATTR14_UNK21 = 0x00200000, // 21 + SPELL_ATTR14_UNK22 = 0x00400000, // 22 + SPELL_ATTR14_UNK23 = 0x00800000, // 23 + SPELL_ATTR14_UNK24 = 0x01000000, // 24 + SPELL_ATTR14_UNK25 = 0x02000000, // 25 + SPELL_ATTR14_UNK26 = 0x04000000, // 26 + SPELL_ATTR14_UNK27 = 0x08000000, // 27 + SPELL_ATTR14_UNK28 = 0x10000000, // 28 + SPELL_ATTR14_UNK29 = 0x20000000, // 29 + SPELL_ATTR14_UNK30 = 0x40000000, // 30 + SPELL_ATTR14_UNK31 = 0x80000000 // 31 }; #define MIN_SPECIALIZATION_LEVEL 10 diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 281b603d931..0cd419ee9e7 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -3056,7 +3056,7 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const* triggered { // stealth must be removed at cast starting (at show channel bar) // skip triggered spell (item equip spell casting and other not explicit character casts/item uses) - if (!(_triggeredCastFlags & TRIGGERED_IGNORE_AURA_INTERRUPT_FLAGS) && m_spellInfo->IsBreakingStealth()) + if (!(_triggeredCastFlags & TRIGGERED_IGNORE_AURA_INTERRUPT_FLAGS) && m_spellInfo->IsBreakingStealth() && !m_spellInfo->HasAttribute(SPELL_ATTR2_IGNORE_ACTION_AURA_INTERRUPT_FLAGS)) m_caster->RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags::Action); m_caster->SetCurrentCastSpell(this); @@ -3379,7 +3379,9 @@ void Spell::_cast(bool skipCheck) if (!(hitMask & PROC_HIT_CRITICAL)) hitMask |= PROC_HIT_NORMAL; - m_originalCaster->RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags::ActionDelayed); + if (!(_triggeredCastFlags & TRIGGERED_IGNORE_AURA_INTERRUPT_FLAGS) && !m_spellInfo->HasAttribute(SPELL_ATTR2_IGNORE_ACTION_AURA_INTERRUPT_FLAGS)) + m_originalCaster->RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags::ActionDelayed); + m_originalCaster->ProcSkillsAndAuras(nullptr, procAttacker, PROC_FLAG_NONE, PROC_SPELL_TYPE_MASK_ALL, PROC_SPELL_PHASE_CAST, hitMask, this, nullptr, nullptr); // Call CreatureAI hook OnSuccessfulSpellCast @@ -6331,9 +6333,6 @@ SpellCastResult Spell::CheckItems(uint32* param1 /*= nullptr*/, uint32* param2 / if (!player) return SPELL_CAST_OK; - if (m_spellInfo->HasAttribute(SPELL_ATTR2_IGNORE_ITEM_CHECK)) - return SPELL_CAST_OK; - if (!m_CastItem) { if (!m_castItemGUID.IsEmpty()) |