diff options
| -rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 10 | ||||
| -rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 64 | ||||
| -rw-r--r-- | src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp | 180 | ||||
| -rw-r--r-- | src/server/game/Spells/Spell.cpp | 8 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellHistory.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellInfo.cpp | 10 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 4 | ||||
| -rw-r--r-- | src/server/scripts/World/duel_reset.cpp | 2 |
8 files changed, 137 insertions, 143 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index ad8aeadceb6..fef22d2af9a 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -2927,7 +2927,7 @@ bool WorldObject::IsValidAttackTarget(WorldObject const* target, SpellInfo const if (unit) { // can't attack invisible - if (!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_CAN_TARGET_INVISIBLE)) + if (!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_IGNORE_PHASE_SHIFT)) { if (!unit->CanSeeOrDetect(target, bySpell && bySpell->IsAffectingArea())) return false; @@ -2958,7 +2958,7 @@ bool WorldObject::IsValidAttackTarget(WorldObject const* target, SpellInfo const unitOrOwner = go->GetOwner(); // ignore immunity flags when assisting - if (unitOrOwner && unitTarget && !(isPositiveSpell && bySpell->HasAttribute(SPELL_ATTR6_ASSIST_IGNORE_IMMUNE_FLAG))) + if (unitOrOwner && unitTarget && !(isPositiveSpell && bySpell->HasAttribute(SPELL_ATTR6_CAN_ASSIST_IMMUNE_PC))) { if (!unitOrOwner->HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED) && unitTarget->IsImmuneToNPC()) return false; @@ -3081,7 +3081,7 @@ bool WorldObject::IsValidAssistTarget(WorldObject const* target, SpellInfo const } // can't assist invisible - if ((!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_CAN_TARGET_INVISIBLE)) && !CanSeeOrDetect(target, bySpell && bySpell->IsAffectingArea())) + if ((!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_IGNORE_PHASE_SHIFT)) && !CanSeeOrDetect(target, bySpell && bySpell->IsAffectingArea())) return false; // can't assist dead @@ -3096,7 +3096,7 @@ bool WorldObject::IsValidAssistTarget(WorldObject const* target, SpellInfo const if (isNegativeSpell && unitTarget && unitTarget->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_ON_TAXI | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_NON_ATTACKABLE_2)) return false; - if (isNegativeSpell || !bySpell || !bySpell->HasAttribute(SPELL_ATTR6_ASSIST_IGNORE_IMMUNE_FLAG)) + if (isNegativeSpell || !bySpell || !bySpell->HasAttribute(SPELL_ATTR6_CAN_ASSIST_IMMUNE_PC)) { if (unit && unit->HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED)) { @@ -3142,7 +3142,7 @@ bool WorldObject::IsValidAssistTarget(WorldObject const* target, SpellInfo const // !target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) && else if (unit && unit->HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED)) { - if (!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_ASSIST_IGNORE_IMMUNE_FLAG)) + if (!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_CAN_ASSIST_IMMUNE_PC)) if (unitTarget && !unitTarget->IsPvP()) if (Creature const* creatureTarget = target->ToCreature()) return ((creatureTarget->GetCreatureTemplate()->type_flags & CREATURE_TYPE_FLAG_TREAT_AS_RAID_UNIT) || (creatureTarget->GetCreatureTemplate()->type_flags & CREATURE_TYPE_FLAG_CAN_ASSIST)); diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index 3177c1244f6..022b29cae54 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -626,38 +626,38 @@ enum SpellAttr5 : uint32 // EnumUtils: DESCRIBE THIS enum SpellAttr6 : uint32 { - SPELL_ATTR6_DONT_DISPLAY_COOLDOWN = 0x00000001, // TITLE Don't display cooldown (client only) - SPELL_ATTR6_ONLY_IN_ARENA = 0x00000002, // TITLE Only usable in arena - SPELL_ATTR6_IGNORE_CASTER_AURAS = 0x00000004, // TITLE Ignore all preventing caster auras - SPELL_ATTR6_ASSIST_IGNORE_IMMUNE_FLAG = 0x00000008, // TITLE Ignore immunity flags when assisting - SPELL_ATTR6_UNK4 = 0x00000010, // TITLE Unknown attribute 4@Attr6 - SPELL_ATTR6_DO_NOT_CONSUME_RESOURCES = 0x00000020, // TITLE Don't consume proc charges - SPELL_ATTR6_USE_SPELL_CAST_EVENT = 0x00000040, // TITLE Generate spell_cast event instead of aura_start (client only) - SPELL_ATTR6_UNK7 = 0x00000080, // TITLE Unknown attribute 7@Attr6 - SPELL_ATTR6_CANT_TARGET_CROWD_CONTROLLED = 0x00000100, // TITLE Do not implicitly target in CC DESCRIPTION Implicit targeting (chaining and area targeting) will not impact crowd controlled targets - SPELL_ATTR6_UNK9 = 0x00000200, // TITLE Unknown attribute 9@Attr6 - SPELL_ATTR6_CAN_TARGET_POSSESSED_FRIENDS = 0x00000400, // TITLE Can target possessed friends DESCRIPTION [NYI] - SPELL_ATTR6_NOT_IN_RAID_INSTANCE = 0x00000800, // TITLE Unusable in raid instances - SPELL_ATTR6_CASTABLE_WHILE_ON_VEHICLE = 0x00001000, // TITLE Castable while caster is on vehicle - SPELL_ATTR6_CAN_TARGET_INVISIBLE = 0x00002000, // TITLE Can target invisible units - SPELL_ATTR6_UNK14 = 0x00004000, // TITLE Unknown attribute 14@Attr6 - SPELL_ATTR6_UNK15 = 0x00008000, // TITLE Unknown attribute 15@Attr6 - SPELL_ATTR6_UNK16 = 0x00010000, // TITLE Unknown attribute 16@Attr6 - SPELL_ATTR6_UNK17 = 0x00020000, // TITLE Unknown attribute 17@Attr6 DESCRIPTION Mount related? - SPELL_ATTR6_CAST_BY_CHARMER = 0x00040000, // TITLE Spell is cast by charmer DESCRIPTION Client will prevent casting if not possessed, charmer will be caster for all intents and purposes - SPELL_ATTR6_UNK19 = 0x00080000, // TITLE Unknown attribute 19@Attr6 - SPELL_ATTR6_ONLY_VISIBLE_TO_CASTER = 0x00100000, // TITLE Only visible to caster (client only) - SPELL_ATTR6_CLIENT_UI_TARGET_EFFECTS = 0x00200000, // TITLE Client UI target effects (client only) - SPELL_ATTR6_UNK22 = 0x00400000, // TITLE Unknown attribute 22@Attr6 - SPELL_ATTR6_UNK23 = 0x00800000, // TITLE Unknown attribute 23@Attr6 - SPELL_ATTR6_CAN_TARGET_UNTARGETABLE = 0x01000000, // TITLE Can target untargetable units - SPELL_ATTR6_NOT_RESET_SWING_IF_INSTANT = 0x02000000, // TITLE Do not reset swing timer if cast time is instant - SPELL_ATTR6_UNK26 = 0x04000000, // TITLE Unknown attribute 26@Attr6 DESCRIPTION Player castable buff? - SPELL_ATTR6_IGNORE_HEALING_MODIFIERS = 0x08000000, // TITLE Limit applicable %healing modifiers DESCRIPTION This prevents certain healing modifiers from applying - see implementation if you really care about details - SPELL_ATTR6_UNK28 = 0x10000000, // TITLE Unknown attribute 28@Attr6 DESCRIPTION Death grip? - SPELL_ATTR6_IGNORE_CASTER_DAMAGE_MODIFIERS = 0x20000000, // TITLE Limit applicable %damage modifiers DESCRIPTION This prevents certain damage modifiers from applying - see implementation if you really care about details - SPELL_ATTR6_UNK30 = 0x40000000, // TITLE Unknown attribute 30@Attr6 - SPELL_ATTR6_IGNORE_CATEGORY_COOLDOWN_MODS = 0x80000000 // TITLE Ignore cooldown modifiers for category cooldown + SPELL_ATTR6_NO_COOLDOWN_ON_TOOLTIP = 0x00000001, // TITLE No Cooldown On Tooltip (client only) + SPELL_ATTR6_DO_NOT_RESET_COOLDOWN_IN_ARENA = 0x00000002, /*NYI*/ // TITLE Do Not Reset Cooldown In Arena + SPELL_ATTR6_NOT_AN_ATTACK = 0x00000004, /*NYI*/ // TITLE Not an Attack + SPELL_ATTR6_CAN_ASSIST_IMMUNE_PC = 0x00000008, // TITLE Can Assist Immune PC + SPELL_ATTR6_IGNORE_FOR_MOD_TIME_RATE = 0x00000010, /*NYI, time rate not implemented*/ // TITLE Ignore For Mod Time Rate + SPELL_ATTR6_DO_NOT_CONSUME_RESOURCES = 0x00000020, // TITLE Do Not Consume Resources + SPELL_ATTR6_FLOATING_COMBAT_TEXT_ON_CAST = 0x00000040, // TITLE Floating Combat Text On Cast (client only) + SPELL_ATTR6_AURA_IS_WEAPON_PROC = 0x00000080, /*NYI*/ // TITLE Aura Is Weapon Proc + SPELL_ATTR6_DO_NOT_CHAIN_TO_CROWD_CONTROLLED_TARGETS = 0x00000100, // TITLE Do Not Chain To Crowd-Controlled Targets DESCRIPTION Implicit targeting (chaining and area targeting) will not impact crowd controlled targets + SPELL_ATTR6_ALLOW_ON_CHARMED_TARGETS = 0x00000200, /*NYI*/ // TITLE Allow On Charmed Targets + SPELL_ATTR6_NO_AURA_LOG = 0x00000400, // TITLE No Aura Log + SPELL_ATTR6_NOT_IN_RAID_INSTANCES = 0x00000800, // TITLE Not In Raid Instances + SPELL_ATTR6_ALLOW_WHILE_RIDING_VEHICLE = 0x00001000, // TITLE Allow While Riding Vehicle + SPELL_ATTR6_IGNORE_PHASE_SHIFT = 0x00002000, // TITLE Ignore Phase Shift + SPELL_ATTR6_AI_PRIMARY_RANGED_ATTACK = 0x00004000, /*NYI*/ // TITLE AI Primary Ranged Attack + SPELL_ATTR6_NO_PUSHBACK = 0x00008000, /*NYI*/ // TITLE No Pushback + SPELL_ATTR6_NO_JUMP_PATHING = 0x00010000, /*NYI*/ // TITLE No Jump Pathing + SPELL_ATTR6_ALLOW_EQUIP_WHILE_CASTING = 0x00020000, /*NYI*/ // TITLE Allow Equip While Casting + SPELL_ATTR6_ORIGINATE_FROM_CONTROLLER = 0x00040000, // TITLE Originate From Controller DESCRIPTION Client will prevent casting if not possessed, charmer will be caster for all intents and purposes + SPELL_ATTR6_DELAY_COMBAT_TIMER_DURING_CAST = 0x00080000, /*NYI*/ // TITLE Delay Combat Timer During Cast + SPELL_ATTR6_AURA_ICON_ONLY_FOR_CASTER_LIMIT_10 = 0x00100000, // TITLE Aura Icon Only For Caster (Limit 10) (client only) + SPELL_ATTR6_SHOW_MECHANIC_AS_COMBAT_TEXT = 0x00200000, // TITLE Show Mechanic as Combat Text (client only) + SPELL_ATTR6_ABSORB_CANNOT_BE_IGNORE = 0x00400000, /*NYI*/ // TITLE Absorb Cannot Be Ignore + SPELL_ATTR6_TAPS_IMMEDIATELY = 0x00800000, /*NYI*/ // TITLE Taps immediately + SPELL_ATTR6_CAN_TARGET_UNTARGETABLE = 0x01000000, // TITLE Can Target Untargetable + SPELL_ATTR6_DOESNT_RESET_SWING_TIMER_IF_INSTANT = 0x02000000, // TITLE Doesn't Reset Swing Timer if Instant + SPELL_ATTR6_VEHICLE_IMMUNITY_CATEGORY = 0x04000000, /*NYI*/ // TITLE Vehicle Immunity Category + SPELL_ATTR6_IGNORE_HEALING_MODIFIERS = 0x08000000, // TITLE Ignore Healing Modifiers DESCRIPTION This prevents certain healing modifiers from applying - see implementation if you really care about details + SPELL_ATTR6_DO_NOT_AUTO_SELECT_TARGET_WITH_INITIATES_COMBAT = 0x10000000, // TITLE Do Not Auto Select Target with Initiates Combat (client only) + SPELL_ATTR6_IGNORE_CASTER_DAMAGE_MODIFIERS = 0x20000000, // TITLE Ignore Caster Damage Modifiers DESCRIPTION This prevents certain damage modifiers from applying - see implementation if you really care about details + SPELL_ATTR6_DISABLE_TIED_EFFECT_POINTS = 0x40000000, /*NYI*/ // TITLE Disable Tied Effect Points + SPELL_ATTR6_NO_CATEGORY_COOLDOWN_MODS = 0x80000000 // TITLE No Category Cooldown Mods }; // EnumUtils: DESCRIBE THIS diff --git a/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp b/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp index 94ece733376..89890edcb19 100644 --- a/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp +++ b/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp @@ -912,13 +912,13 @@ TC_API_EXPORT EnumText EnumUtils<SpellAttr5>::ToString(SpellAttr5 value) case SPELL_ATTR5_ALLOW_WHILE_FLEEING: return { "SPELL_ATTR5_ALLOW_WHILE_FLEEING", "Allow While Fleeing", "" }; case SPELL_ATTR5_ALLOW_WHILE_CONFUSED: return { "SPELL_ATTR5_ALLOW_WHILE_CONFUSED", "Allow While Confused", "" }; case SPELL_ATTR5_AI_DOESNT_FACE_TARGET: return { "SPELL_ATTR5_AI_DOESNT_FACE_TARGET", "AI Doesn't Face Target", "" }; - case SPELL_ATTR5_DO_NOT_ATTEMPT_A_PET_RESUMMON_WHEN_DISMOUNTING: return { "SPELL_ATTR5_DO_NOT_ATTEMPT_A_PET_RESUMMON_WHEN_DISMOUNTING", "Do Not Attempt a Pet Resummon When Dismounting", "" }; + case SPELL_ATTR5_DO_NOT_ATTEMPT_A_PET_RESUMMON_WHEN_DISMOUNTING: return { "SPELL_ATTR5_DO_NOT_ATTEMPT_A_PET_RESUMMON_WHEN_DISMOUNTING", "Do Not Attempt a Pet Resummon When Dismounting", "No generic handling possible, used by scripted dismount spells" }; case SPELL_ATTR5_IGNORE_TARGET_REQUIREMENTS: return { "SPELL_ATTR5_IGNORE_TARGET_REQUIREMENTS", "Ignore Target Requirements", "" }; case SPELL_ATTR5_NOT_ON_TRIVIAL: return { "SPELL_ATTR5_NOT_ON_TRIVIAL", "Not On Trivial", "" }; case SPELL_ATTR5_NO_PARTIAL_RESISTS: return { "SPELL_ATTR5_NO_PARTIAL_RESISTS", "No Partial Resists", "" }; case SPELL_ATTR5_IGNORE_CASTER_REQUIREMENTS: return { "SPELL_ATTR5_IGNORE_CASTER_REQUIREMENTS", "Ignore Caster Requirements", "" }; case SPELL_ATTR5_ALWAYS_LINE_OF_SIGHT: return { "SPELL_ATTR5_ALWAYS_LINE_OF_SIGHT", "Always Line of Sight", "" }; - case SPELL_ATTR5_ALWAYS_AOE_LINE_OF_SIGHT: return { "SPELL_ATTR5_ALWAYS_AOE_LINE_OF_SIGHT", "Always AOE Line of Sight", "" }; + case SPELL_ATTR5_ALWAYS_AOE_LINE_OF_SIGHT: return { "SPELL_ATTR5_ALWAYS_AOE_LINE_OF_SIGHT", "Always AOE Line of Sight", "Requires line of sight between caster and target in addition to between dest and target" }; case SPELL_ATTR5_NO_CASTER_AURA_ICON: return { "SPELL_ATTR5_NO_CASTER_AURA_ICON", "No Caster Aura Icon (client only)", "" }; case SPELL_ATTR5_NO_TARGET_AURA_ICON: return { "SPELL_ATTR5_NO_TARGET_AURA_ICON", "No Target Aura Icon (client only)", "" }; case SPELL_ATTR5_AURA_UNIQUE_PER_CASTER: return { "SPELL_ATTR5_AURA_UNIQUE_PER_CASTER", "Aura Unique Per Caster", "" }; @@ -1021,38 +1021,38 @@ TC_API_EXPORT EnumText EnumUtils<SpellAttr6>::ToString(SpellAttr6 value) { switch (value) { - case SPELL_ATTR6_DONT_DISPLAY_COOLDOWN: return { "SPELL_ATTR6_DONT_DISPLAY_COOLDOWN", "Don't display cooldown (client only)", "" }; - case SPELL_ATTR6_ONLY_IN_ARENA: return { "SPELL_ATTR6_ONLY_IN_ARENA", "Only usable in arena", "" }; - case SPELL_ATTR6_IGNORE_CASTER_AURAS: return { "SPELL_ATTR6_IGNORE_CASTER_AURAS", "Ignore all preventing caster auras", "" }; - case SPELL_ATTR6_ASSIST_IGNORE_IMMUNE_FLAG: return { "SPELL_ATTR6_ASSIST_IGNORE_IMMUNE_FLAG", "Ignore immunity flags when assisting", "" }; - case SPELL_ATTR6_UNK4: return { "SPELL_ATTR6_UNK4", "Unknown attribute 4@Attr6", "" }; - case SPELL_ATTR6_DO_NOT_CONSUME_RESOURCES: return { "SPELL_ATTR6_DO_NOT_CONSUME_RESOURCES", "Don't consume proc charges", "" }; - case SPELL_ATTR6_USE_SPELL_CAST_EVENT: return { "SPELL_ATTR6_USE_SPELL_CAST_EVENT", "Generate spell_cast event instead of aura_start (client only)", "" }; - case SPELL_ATTR6_UNK7: return { "SPELL_ATTR6_UNK7", "Unknown attribute 7@Attr6", "" }; - case SPELL_ATTR6_CANT_TARGET_CROWD_CONTROLLED: return { "SPELL_ATTR6_CANT_TARGET_CROWD_CONTROLLED", "Do not implicitly target in CC", "Implicit targeting (chaining and area targeting) will not impact crowd controlled targets" }; - case SPELL_ATTR6_UNK9: return { "SPELL_ATTR6_UNK9", "Unknown attribute 9@Attr6", "" }; - case SPELL_ATTR6_CAN_TARGET_POSSESSED_FRIENDS: return { "SPELL_ATTR6_CAN_TARGET_POSSESSED_FRIENDS", "Can target possessed friends", "[NYI]" }; - case SPELL_ATTR6_NOT_IN_RAID_INSTANCE: return { "SPELL_ATTR6_NOT_IN_RAID_INSTANCE", "Unusable in raid instances", "" }; - case SPELL_ATTR6_CASTABLE_WHILE_ON_VEHICLE: return { "SPELL_ATTR6_CASTABLE_WHILE_ON_VEHICLE", "Castable while caster is on vehicle", "" }; - case SPELL_ATTR6_CAN_TARGET_INVISIBLE: return { "SPELL_ATTR6_CAN_TARGET_INVISIBLE", "Can target invisible units", "" }; - case SPELL_ATTR6_UNK14: return { "SPELL_ATTR6_UNK14", "Unknown attribute 14@Attr6", "" }; - case SPELL_ATTR6_UNK15: return { "SPELL_ATTR6_UNK15", "Unknown attribute 15@Attr6", "" }; - case SPELL_ATTR6_UNK16: return { "SPELL_ATTR6_UNK16", "Unknown attribute 16@Attr6", "" }; - case SPELL_ATTR6_UNK17: return { "SPELL_ATTR6_UNK17", "Unknown attribute 17@Attr6", "Mount related?" }; - case SPELL_ATTR6_CAST_BY_CHARMER: return { "SPELL_ATTR6_CAST_BY_CHARMER", "Spell is cast by charmer", "Client will prevent casting if not possessed, charmer will be caster for all intents and purposes" }; - case SPELL_ATTR6_UNK19: return { "SPELL_ATTR6_UNK19", "Unknown attribute 19@Attr6", "" }; - case SPELL_ATTR6_ONLY_VISIBLE_TO_CASTER: return { "SPELL_ATTR6_ONLY_VISIBLE_TO_CASTER", "Only visible to caster (client only)", "" }; - case SPELL_ATTR6_CLIENT_UI_TARGET_EFFECTS: return { "SPELL_ATTR6_CLIENT_UI_TARGET_EFFECTS", "Client UI target effects (client only)", "" }; - case SPELL_ATTR6_UNK22: return { "SPELL_ATTR6_UNK22", "Unknown attribute 22@Attr6", "" }; - case SPELL_ATTR6_UNK23: return { "SPELL_ATTR6_UNK23", "Unknown attribute 23@Attr6", "" }; - case SPELL_ATTR6_CAN_TARGET_UNTARGETABLE: return { "SPELL_ATTR6_CAN_TARGET_UNTARGETABLE", "Can target untargetable units", "" }; - case SPELL_ATTR6_NOT_RESET_SWING_IF_INSTANT: return { "SPELL_ATTR6_NOT_RESET_SWING_IF_INSTANT", "Do not reset swing timer if cast time is instant", "" }; - case SPELL_ATTR6_UNK26: return { "SPELL_ATTR6_UNK26", "Unknown attribute 26@Attr6", "Player castable buff?" }; - case SPELL_ATTR6_IGNORE_HEALING_MODIFIERS: return { "SPELL_ATTR6_IGNORE_HEALING_MODIFIERS", "Limit applicable %healing modifiers", "This prevents certain healing modifiers from applying - see implementation if you really care about details" }; - case SPELL_ATTR6_UNK28: return { "SPELL_ATTR6_UNK28", "Unknown attribute 28@Attr6", "Death grip?" }; - case SPELL_ATTR6_IGNORE_CASTER_DAMAGE_MODIFIERS: return { "SPELL_ATTR6_IGNORE_CASTER_DAMAGE_MODIFIERS", "Limit applicable %damage modifiers", "This prevents certain damage modifiers from applying - see implementation if you really care about details" }; - case SPELL_ATTR6_UNK30: return { "SPELL_ATTR6_UNK30", "Unknown attribute 30@Attr6", "" }; - case SPELL_ATTR6_IGNORE_CATEGORY_COOLDOWN_MODS: return { "SPELL_ATTR6_IGNORE_CATEGORY_COOLDOWN_MODS", "Ignore cooldown modifiers for category cooldown", "" }; + case SPELL_ATTR6_NO_COOLDOWN_ON_TOOLTIP: return { "SPELL_ATTR6_NO_COOLDOWN_ON_TOOLTIP", "No Cooldown On Tooltip (client only)", "" }; + case SPELL_ATTR6_DO_NOT_RESET_COOLDOWN_IN_ARENA: return { "SPELL_ATTR6_DO_NOT_RESET_COOLDOWN_IN_ARENA", "Do Not Reset Cooldown In Arena", "" }; + case SPELL_ATTR6_NOT_AN_ATTACK: return { "SPELL_ATTR6_NOT_AN_ATTACK", "Not an Attack", "" }; + case SPELL_ATTR6_CAN_ASSIST_IMMUNE_PC: return { "SPELL_ATTR6_CAN_ASSIST_IMMUNE_PC", "Can Assist Immune PC", "" }; + case SPELL_ATTR6_IGNORE_FOR_MOD_TIME_RATE: return { "SPELL_ATTR6_IGNORE_FOR_MOD_TIME_RATE", "Ignore For Mod Time Rate", "" }; + case SPELL_ATTR6_DO_NOT_CONSUME_RESOURCES: return { "SPELL_ATTR6_DO_NOT_CONSUME_RESOURCES", "Do Not Consume Resources", "" }; + case SPELL_ATTR6_FLOATING_COMBAT_TEXT_ON_CAST: return { "SPELL_ATTR6_FLOATING_COMBAT_TEXT_ON_CAST", "Floating Combat Text On Cast (client only)", "" }; + case SPELL_ATTR6_AURA_IS_WEAPON_PROC: return { "SPELL_ATTR6_AURA_IS_WEAPON_PROC", "Aura Is Weapon Proc", "" }; + case SPELL_ATTR6_DO_NOT_CHAIN_TO_CROWD_CONTROLLED_TARGETS: return { "SPELL_ATTR6_DO_NOT_CHAIN_TO_CROWD_CONTROLLED_TARGETS", "Do Not Chain To Crowd-Controlled Targets", "Implicit targeting (chaining and area targeting) will not impact crowd controlled targets" }; + case SPELL_ATTR6_ALLOW_ON_CHARMED_TARGETS: return { "SPELL_ATTR6_ALLOW_ON_CHARMED_TARGETS", "Allow On Charmed Targets", "" }; + case SPELL_ATTR6_NO_AURA_LOG: return { "SPELL_ATTR6_NO_AURA_LOG", "No Aura Log", "" }; + case SPELL_ATTR6_NOT_IN_RAID_INSTANCES: return { "SPELL_ATTR6_NOT_IN_RAID_INSTANCES", "Not In Raid Instances", "" }; + case SPELL_ATTR6_ALLOW_WHILE_RIDING_VEHICLE: return { "SPELL_ATTR6_ALLOW_WHILE_RIDING_VEHICLE", "Allow While Riding Vehicle", "" }; + case SPELL_ATTR6_IGNORE_PHASE_SHIFT: return { "SPELL_ATTR6_IGNORE_PHASE_SHIFT", "Ignore Phase Shift", "" }; + case SPELL_ATTR6_AI_PRIMARY_RANGED_ATTACK: return { "SPELL_ATTR6_AI_PRIMARY_RANGED_ATTACK", "AI Primary Ranged Attack", "" }; + case SPELL_ATTR6_NO_PUSHBACK: return { "SPELL_ATTR6_NO_PUSHBACK", "No Pushback", "" }; + case SPELL_ATTR6_NO_JUMP_PATHING: return { "SPELL_ATTR6_NO_JUMP_PATHING", "No Jump Pathing", "" }; + case SPELL_ATTR6_ALLOW_EQUIP_WHILE_CASTING: return { "SPELL_ATTR6_ALLOW_EQUIP_WHILE_CASTING", "Allow Equip While Casting", "" }; + case SPELL_ATTR6_ORIGINATE_FROM_CONTROLLER: return { "SPELL_ATTR6_ORIGINATE_FROM_CONTROLLER", "Originate From Controller", "Client will prevent casting if not possessed, charmer will be caster for all intents and purposes" }; + case SPELL_ATTR6_DELAY_COMBAT_TIMER_DURING_CAST: return { "SPELL_ATTR6_DELAY_COMBAT_TIMER_DURING_CAST", "Delay Combat Timer During Cast", "" }; + case SPELL_ATTR6_AURA_ICON_ONLY_FOR_CASTER_LIMIT_10: return { "SPELL_ATTR6_AURA_ICON_ONLY_FOR_CASTER_LIMIT_10", "Aura Icon Only For Caster (Limit 10) (client only)", "" }; + case SPELL_ATTR6_SHOW_MECHANIC_AS_COMBAT_TEXT: return { "SPELL_ATTR6_SHOW_MECHANIC_AS_COMBAT_TEXT", "Show Mechanic as Combat Text (client only)", "" }; + case SPELL_ATTR6_ABSORB_CANNOT_BE_IGNORE: return { "SPELL_ATTR6_ABSORB_CANNOT_BE_IGNORE", "Absorb Cannot Be Ignore", "" }; + case SPELL_ATTR6_TAPS_IMMEDIATELY: return { "SPELL_ATTR6_TAPS_IMMEDIATELY", "Taps immediately", "" }; + case SPELL_ATTR6_CAN_TARGET_UNTARGETABLE: return { "SPELL_ATTR6_CAN_TARGET_UNTARGETABLE", "Can Target Untargetable", "" }; + case SPELL_ATTR6_DOESNT_RESET_SWING_TIMER_IF_INSTANT: return { "SPELL_ATTR6_DOESNT_RESET_SWING_TIMER_IF_INSTANT", "Doesn't Reset Swing Timer if Instant", "" }; + case SPELL_ATTR6_VEHICLE_IMMUNITY_CATEGORY: return { "SPELL_ATTR6_VEHICLE_IMMUNITY_CATEGORY", "Vehicle Immunity Category", "" }; + case SPELL_ATTR6_IGNORE_HEALING_MODIFIERS: return { "SPELL_ATTR6_IGNORE_HEALING_MODIFIERS", "Ignore Healing Modifiers", "This prevents certain healing modifiers from applying - see implementation if you really care about details" }; + case SPELL_ATTR6_DO_NOT_AUTO_SELECT_TARGET_WITH_INITIATES_COMBAT: return { "SPELL_ATTR6_DO_NOT_AUTO_SELECT_TARGET_WITH_INITIATES_COMBAT", "Do Not Auto Select Target with Initiates Combat (client only)", "" }; + case SPELL_ATTR6_IGNORE_CASTER_DAMAGE_MODIFIERS: return { "SPELL_ATTR6_IGNORE_CASTER_DAMAGE_MODIFIERS", "Ignore Caster Damage Modifiers", "This prevents certain damage modifiers from applying - see implementation if you really care about details" }; + case SPELL_ATTR6_DISABLE_TIED_EFFECT_POINTS: return { "SPELL_ATTR6_DISABLE_TIED_EFFECT_POINTS", "Disable Tied Effect Points", "" }; + case SPELL_ATTR6_NO_CATEGORY_COOLDOWN_MODS: return { "SPELL_ATTR6_NO_CATEGORY_COOLDOWN_MODS", "No Category Cooldown Mods", "" }; default: throw std::out_of_range("value"); } } @@ -1065,38 +1065,38 @@ TC_API_EXPORT SpellAttr6 EnumUtils<SpellAttr6>::FromIndex(size_t index) { switch (index) { - case 0: return SPELL_ATTR6_DONT_DISPLAY_COOLDOWN; - case 1: return SPELL_ATTR6_ONLY_IN_ARENA; - case 2: return SPELL_ATTR6_IGNORE_CASTER_AURAS; - case 3: return SPELL_ATTR6_ASSIST_IGNORE_IMMUNE_FLAG; - case 4: return SPELL_ATTR6_UNK4; + case 0: return SPELL_ATTR6_NO_COOLDOWN_ON_TOOLTIP; + case 1: return SPELL_ATTR6_DO_NOT_RESET_COOLDOWN_IN_ARENA; + case 2: return SPELL_ATTR6_NOT_AN_ATTACK; + case 3: return SPELL_ATTR6_CAN_ASSIST_IMMUNE_PC; + case 4: return SPELL_ATTR6_IGNORE_FOR_MOD_TIME_RATE; case 5: return SPELL_ATTR6_DO_NOT_CONSUME_RESOURCES; - case 6: return SPELL_ATTR6_USE_SPELL_CAST_EVENT; - case 7: return SPELL_ATTR6_UNK7; - case 8: return SPELL_ATTR6_CANT_TARGET_CROWD_CONTROLLED; - case 9: return SPELL_ATTR6_UNK9; - case 10: return SPELL_ATTR6_CAN_TARGET_POSSESSED_FRIENDS; - case 11: return SPELL_ATTR6_NOT_IN_RAID_INSTANCE; - case 12: return SPELL_ATTR6_CASTABLE_WHILE_ON_VEHICLE; - case 13: return SPELL_ATTR6_CAN_TARGET_INVISIBLE; - case 14: return SPELL_ATTR6_UNK14; - case 15: return SPELL_ATTR6_UNK15; - case 16: return SPELL_ATTR6_UNK16; - case 17: return SPELL_ATTR6_UNK17; - case 18: return SPELL_ATTR6_CAST_BY_CHARMER; - case 19: return SPELL_ATTR6_UNK19; - case 20: return SPELL_ATTR6_ONLY_VISIBLE_TO_CASTER; - case 21: return SPELL_ATTR6_CLIENT_UI_TARGET_EFFECTS; - case 22: return SPELL_ATTR6_UNK22; - case 23: return SPELL_ATTR6_UNK23; + case 6: return SPELL_ATTR6_FLOATING_COMBAT_TEXT_ON_CAST; + case 7: return SPELL_ATTR6_AURA_IS_WEAPON_PROC; + case 8: return SPELL_ATTR6_DO_NOT_CHAIN_TO_CROWD_CONTROLLED_TARGETS; + case 9: return SPELL_ATTR6_ALLOW_ON_CHARMED_TARGETS; + case 10: return SPELL_ATTR6_NO_AURA_LOG; + case 11: return SPELL_ATTR6_NOT_IN_RAID_INSTANCES; + case 12: return SPELL_ATTR6_ALLOW_WHILE_RIDING_VEHICLE; + case 13: return SPELL_ATTR6_IGNORE_PHASE_SHIFT; + case 14: return SPELL_ATTR6_AI_PRIMARY_RANGED_ATTACK; + case 15: return SPELL_ATTR6_NO_PUSHBACK; + case 16: return SPELL_ATTR6_NO_JUMP_PATHING; + case 17: return SPELL_ATTR6_ALLOW_EQUIP_WHILE_CASTING; + case 18: return SPELL_ATTR6_ORIGINATE_FROM_CONTROLLER; + case 19: return SPELL_ATTR6_DELAY_COMBAT_TIMER_DURING_CAST; + case 20: return SPELL_ATTR6_AURA_ICON_ONLY_FOR_CASTER_LIMIT_10; + case 21: return SPELL_ATTR6_SHOW_MECHANIC_AS_COMBAT_TEXT; + case 22: return SPELL_ATTR6_ABSORB_CANNOT_BE_IGNORE; + case 23: return SPELL_ATTR6_TAPS_IMMEDIATELY; case 24: return SPELL_ATTR6_CAN_TARGET_UNTARGETABLE; - case 25: return SPELL_ATTR6_NOT_RESET_SWING_IF_INSTANT; - case 26: return SPELL_ATTR6_UNK26; + case 25: return SPELL_ATTR6_DOESNT_RESET_SWING_TIMER_IF_INSTANT; + case 26: return SPELL_ATTR6_VEHICLE_IMMUNITY_CATEGORY; case 27: return SPELL_ATTR6_IGNORE_HEALING_MODIFIERS; - case 28: return SPELL_ATTR6_UNK28; + case 28: return SPELL_ATTR6_DO_NOT_AUTO_SELECT_TARGET_WITH_INITIATES_COMBAT; case 29: return SPELL_ATTR6_IGNORE_CASTER_DAMAGE_MODIFIERS; - case 30: return SPELL_ATTR6_UNK30; - case 31: return SPELL_ATTR6_IGNORE_CATEGORY_COOLDOWN_MODS; + case 30: return SPELL_ATTR6_DISABLE_TIED_EFFECT_POINTS; + case 31: return SPELL_ATTR6_NO_CATEGORY_COOLDOWN_MODS; default: throw std::out_of_range("index"); } } @@ -1106,38 +1106,38 @@ TC_API_EXPORT size_t EnumUtils<SpellAttr6>::ToIndex(SpellAttr6 value) { switch (value) { - case SPELL_ATTR6_DONT_DISPLAY_COOLDOWN: return 0; - case SPELL_ATTR6_ONLY_IN_ARENA: return 1; - case SPELL_ATTR6_IGNORE_CASTER_AURAS: return 2; - case SPELL_ATTR6_ASSIST_IGNORE_IMMUNE_FLAG: return 3; - case SPELL_ATTR6_UNK4: return 4; + case SPELL_ATTR6_NO_COOLDOWN_ON_TOOLTIP: return 0; + case SPELL_ATTR6_DO_NOT_RESET_COOLDOWN_IN_ARENA: return 1; + case SPELL_ATTR6_NOT_AN_ATTACK: return 2; + case SPELL_ATTR6_CAN_ASSIST_IMMUNE_PC: return 3; + case SPELL_ATTR6_IGNORE_FOR_MOD_TIME_RATE: return 4; case SPELL_ATTR6_DO_NOT_CONSUME_RESOURCES: return 5; - case SPELL_ATTR6_USE_SPELL_CAST_EVENT: return 6; - case SPELL_ATTR6_UNK7: return 7; - case SPELL_ATTR6_CANT_TARGET_CROWD_CONTROLLED: return 8; - case SPELL_ATTR6_UNK9: return 9; - case SPELL_ATTR6_CAN_TARGET_POSSESSED_FRIENDS: return 10; - case SPELL_ATTR6_NOT_IN_RAID_INSTANCE: return 11; - case SPELL_ATTR6_CASTABLE_WHILE_ON_VEHICLE: return 12; - case SPELL_ATTR6_CAN_TARGET_INVISIBLE: return 13; - case SPELL_ATTR6_UNK14: return 14; - case SPELL_ATTR6_UNK15: return 15; - case SPELL_ATTR6_UNK16: return 16; - case SPELL_ATTR6_UNK17: return 17; - case SPELL_ATTR6_CAST_BY_CHARMER: return 18; - case SPELL_ATTR6_UNK19: return 19; - case SPELL_ATTR6_ONLY_VISIBLE_TO_CASTER: return 20; - case SPELL_ATTR6_CLIENT_UI_TARGET_EFFECTS: return 21; - case SPELL_ATTR6_UNK22: return 22; - case SPELL_ATTR6_UNK23: return 23; + case SPELL_ATTR6_FLOATING_COMBAT_TEXT_ON_CAST: return 6; + case SPELL_ATTR6_AURA_IS_WEAPON_PROC: return 7; + case SPELL_ATTR6_DO_NOT_CHAIN_TO_CROWD_CONTROLLED_TARGETS: return 8; + case SPELL_ATTR6_ALLOW_ON_CHARMED_TARGETS: return 9; + case SPELL_ATTR6_NO_AURA_LOG: return 10; + case SPELL_ATTR6_NOT_IN_RAID_INSTANCES: return 11; + case SPELL_ATTR6_ALLOW_WHILE_RIDING_VEHICLE: return 12; + case SPELL_ATTR6_IGNORE_PHASE_SHIFT: return 13; + case SPELL_ATTR6_AI_PRIMARY_RANGED_ATTACK: return 14; + case SPELL_ATTR6_NO_PUSHBACK: return 15; + case SPELL_ATTR6_NO_JUMP_PATHING: return 16; + case SPELL_ATTR6_ALLOW_EQUIP_WHILE_CASTING: return 17; + case SPELL_ATTR6_ORIGINATE_FROM_CONTROLLER: return 18; + case SPELL_ATTR6_DELAY_COMBAT_TIMER_DURING_CAST: return 19; + case SPELL_ATTR6_AURA_ICON_ONLY_FOR_CASTER_LIMIT_10: return 20; + case SPELL_ATTR6_SHOW_MECHANIC_AS_COMBAT_TEXT: return 21; + case SPELL_ATTR6_ABSORB_CANNOT_BE_IGNORE: return 22; + case SPELL_ATTR6_TAPS_IMMEDIATELY: return 23; case SPELL_ATTR6_CAN_TARGET_UNTARGETABLE: return 24; - case SPELL_ATTR6_NOT_RESET_SWING_IF_INSTANT: return 25; - case SPELL_ATTR6_UNK26: return 26; + case SPELL_ATTR6_DOESNT_RESET_SWING_TIMER_IF_INSTANT: return 25; + case SPELL_ATTR6_VEHICLE_IMMUNITY_CATEGORY: return 26; case SPELL_ATTR6_IGNORE_HEALING_MODIFIERS: return 27; - case SPELL_ATTR6_UNK28: return 28; + case SPELL_ATTR6_DO_NOT_AUTO_SELECT_TARGET_WITH_INITIATES_COMBAT: return 28; case SPELL_ATTR6_IGNORE_CASTER_DAMAGE_MODIFIERS: return 29; - case SPELL_ATTR6_UNK30: return 30; - case SPELL_ATTR6_IGNORE_CATEGORY_COOLDOWN_MODS: return 31; + case SPELL_ATTR6_DISABLE_TIED_EFFECT_POINTS: return 30; + case SPELL_ATTR6_NO_CATEGORY_COOLDOWN_MODS: return 31; default: throw std::out_of_range("value"); } } diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index d2022454a8f..119585fb60b 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -491,7 +491,7 @@ protected: Spell::Spell(WorldObject* caster, SpellInfo const* info, TriggerCastFlags triggerFlags, ObjectGuid originalCasterGUID /*= ObjectGuid::Empty*/, ObjectGuid originalCastId /*= ObjectGuid::Empty*/) : -m_spellInfo(info), m_caster((info->HasAttribute(SPELL_ATTR6_CAST_BY_CHARMER) && caster->GetCharmerOrOwner()) ? caster->GetCharmerOrOwner() : caster), +m_spellInfo(info), m_caster((info->HasAttribute(SPELL_ATTR6_ORIGINATE_FROM_CONTROLLER) && caster->GetCharmerOrOwner()) ? caster->GetCharmerOrOwner() : caster), m_spellValue(new SpellValue(m_spellInfo, caster)), _spellEvent(nullptr) { m_customError = SPELL_CUSTOM_ERROR_NONE; @@ -6640,10 +6640,6 @@ SpellCastResult Spell::CheckCasterAuras(int32* param1) const if (!unitCaster) return SPELL_CAST_OK; - // spells totally immuned to caster auras (wsg flag drop, give marks etc) - if (m_spellInfo->HasAttribute(SPELL_ATTR6_IGNORE_CASTER_AURAS)) - return SPELL_CAST_OK; - // these attributes only show the spell as usable on the client when it has related aura applied // still they need to be checked against certain mechanics @@ -7963,7 +7959,7 @@ bool Spell::IsAutoActionResetSpell() const if (IsTriggered()) return false; - if (!m_casttime && m_spellInfo->HasAttribute(SPELL_ATTR6_NOT_RESET_SWING_IF_INSTANT)) + if (!m_casttime && m_spellInfo->HasAttribute(SPELL_ATTR6_DOESNT_RESET_SWING_TIMER_IF_INSTANT)) return false; return true; diff --git a/src/server/game/Spells/SpellHistory.cpp b/src/server/game/Spells/SpellHistory.cpp index e4298f9f7e3..fffa4139ec8 100644 --- a/src/server/game/Spells/SpellHistory.cpp +++ b/src/server/game/Spells/SpellHistory.cpp @@ -448,7 +448,7 @@ void SpellHistory::StartCooldown(SpellInfo const* spellInfo, uint32 itemId, Spel if (cooldown >= Duration::zero()) applySpellMod(cooldown); - if (categoryCooldown >= Clock::duration::zero() && !spellInfo->HasAttribute(SPELL_ATTR6_IGNORE_CATEGORY_COOLDOWN_MODS)) + if (categoryCooldown >= Clock::duration::zero() && !spellInfo->HasAttribute(SPELL_ATTR6_NO_CATEGORY_COOLDOWN_MODS)) applySpellMod(categoryCooldown); } diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 8f5e8ccd5e3..0f3c0f3f608 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -1973,7 +1973,7 @@ SpellCastResult SpellInfo::CheckLocation(uint32 map_id, uint32 zone_id, uint32 a } // raid instance limitation - if (HasAttribute(SPELL_ATTR6_NOT_IN_RAID_INSTANCE)) + if (HasAttribute(SPELL_ATTR6_NOT_IN_RAID_INSTANCES)) { MapEntry const* mapEntry = sMapStore.LookupEntry(map_id); if (!mapEntry || mapEntry->IsRaid()) @@ -2098,7 +2098,7 @@ SpellCastResult SpellInfo::CheckTarget(WorldObject const* caster, WorldObject co return SPELL_FAILED_BAD_TARGETS; // check visibility - ignore stealth for implicit (area) targets - if (!HasAttribute(SPELL_ATTR6_CAN_TARGET_INVISIBLE) && !caster->CanSeeOrDetect(target, implicit)) + if (!HasAttribute(SPELL_ATTR6_IGNORE_PHASE_SHIFT) && !caster->CanSeeOrDetect(target, implicit)) return SPELL_FAILED_BAD_TARGETS; Unit const* unitTarget = target->ToUnit(); @@ -2184,15 +2184,13 @@ SpellCastResult SpellInfo::CheckTarget(WorldObject const* caster, WorldObject co return SPELL_FAILED_TARGETS_DEAD; // check this flag only for implicit targets (chain and area), allow to explicitly target units for spells like Shield of Righteousness - if (implicit && HasAttribute(SPELL_ATTR6_CANT_TARGET_CROWD_CONTROLLED) && !unitTarget->CanFreeMove()) + if (implicit && HasAttribute(SPELL_ATTR6_DO_NOT_CHAIN_TO_CROWD_CONTROLLED_TARGETS) && !unitTarget->CanFreeMove()) return SPELL_FAILED_BAD_TARGETS; // checked in Unit::IsValidAttack/AssistTarget, shouldn't be checked for ENTRY targets //if (!HasAttribute(SPELL_ATTR6_CAN_TARGET_UNTARGETABLE) && target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNINTERACTIBLE)) // return SPELL_FAILED_BAD_TARGETS; - //if (!HasAttribute(SPELL_ATTR6_CAN_TARGET_POSSESSED_FRIENDS)) - if (!CheckTargetCreatureType(unitTarget)) { if (target->GetTypeId() == TYPEID_PLAYER) @@ -2318,7 +2316,7 @@ SpellCastResult SpellInfo::CheckVehicle(Unit const* caster) const checkMask = VEHICLE_SEAT_FLAG_CAN_ATTACK; VehicleSeatEntry const* vehicleSeat = vehicle->GetSeatForPassenger(caster); - if (!HasAttribute(SPELL_ATTR6_CASTABLE_WHILE_ON_VEHICLE) && !HasAttribute(SPELL_ATTR0_ALLOW_WHILE_MOUNTED) + if (!HasAttribute(SPELL_ATTR6_ALLOW_WHILE_RIDING_VEHICLE) && !HasAttribute(SPELL_ATTR0_ALLOW_WHILE_MOUNTED) && (vehicleSeat->Flags & checkMask) != checkMask) return SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW; diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index f1a3f88fead..0b9856d6fb8 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -3650,7 +3650,7 @@ void SpellMgr::LoadSpellInfoCorrections() 41487 // Envenom - Black Temple }, [](SpellInfo* spellInfo) { - spellInfo->AttributesEx6 |= SPELL_ATTR6_CAN_TARGET_INVISIBLE; + spellInfo->AttributesEx6 |= SPELL_ATTR6_IGNORE_PHASE_SHIFT; }); // Oscillation Field @@ -4393,7 +4393,7 @@ void SpellMgr::LoadSpellInfoCorrections() // Twilight Mending ApplySpellFix({ 75509 }, [](SpellInfo* spellInfo) { - spellInfo->AttributesEx6 |= SPELL_ATTR6_CAN_TARGET_INVISIBLE; + spellInfo->AttributesEx6 |= SPELL_ATTR6_IGNORE_PHASE_SHIFT; spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT; }); diff --git a/src/server/scripts/World/duel_reset.cpp b/src/server/scripts/World/duel_reset.cpp index d5d4a9a0de7..9f4fc5977c9 100644 --- a/src/server/scripts/World/duel_reset.cpp +++ b/src/server/scripts/World/duel_reset.cpp @@ -110,7 +110,7 @@ class DuelResetScript : public PlayerScript if (int32 cooldownMod = player->GetTotalAuraModifier(SPELL_AURA_MOD_COOLDOWN)) totalCooldown += Milliseconds(cooldownMod); - if (!spellInfo->HasAttribute(SPELL_ATTR6_IGNORE_CATEGORY_COOLDOWN_MODS)) + if (!spellInfo->HasAttribute(SPELL_ATTR6_NO_CATEGORY_COOLDOWN_MODS)) applySpellMod(categoryCooldown); return remainingCooldown > 0ms |
