aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h52
-rw-r--r--src/server/game/Spells/Spell.cpp9
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())