diff options
author | Shauren <shauren.trinity@gmail.com> | 2024-02-19 21:05:03 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2024-02-19 21:05:03 +0100 |
commit | 877ae5b47d56a754b56f1326990f5ae41aa989c9 (patch) | |
tree | 8ffb81be40ed79c618b40a90889b1e5912798e9c | |
parent | 88242a42ceabed65520dfccb6e32ff5d8ce63012 (diff) |
Core/Spells: Implemented SPELL_ATTR8_CAN_HIT_AOE_UNTARGETABLE
-rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp | 5 | ||||
-rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 4 | ||||
-rw-r--r-- | src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Spells/Spell.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 2 |
6 files changed, 13 insertions, 10 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 0e717aea0ed..fa9ed374883 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -3043,7 +3043,7 @@ bool WorldObject::IsValidAttackTarget(WorldObject const* target, SpellInfo const if (!unitTarget->HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED) && unitOrOwner->IsImmuneToNPC()) return false; - if (!bySpell || !bySpell->HasAttribute(SPELL_ATTR8_ATTACK_IGNORE_IMMUNE_TO_PC_FLAG)) + if (!bySpell || !bySpell->HasAttribute(SPELL_ATTR8_CAN_ATTACK_IMMUNE_PC)) { if (unitOrOwner->HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED) && unitTarget->IsImmuneToPC()) return false; @@ -3183,7 +3183,7 @@ bool WorldObject::IsValidAssistTarget(WorldObject const* target, SpellInfo const { if (unit && unit->HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED)) { - if (!bySpell || !bySpell->HasAttribute(SPELL_ATTR8_ATTACK_IGNORE_IMMUNE_TO_PC_FLAG)) + if (!bySpell || !bySpell->HasAttribute(SPELL_ATTR8_CAN_ATTACK_IMMUNE_PC)) if (unitTarget && unitTarget->IsImmuneToPC()) return false; } diff --git a/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp b/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp index 3c870223ffc..e904b8c1461 100644 --- a/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp +++ b/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp @@ -564,12 +564,13 @@ TC_API_EXPORT EnumText EnumUtils<NPCFlags2>::ToString(NPCFlags2 value) case UNIT_NPC_FLAG_2_AZERITE_RESPEC: return { "UNIT_NPC_FLAG_2_AZERITE_RESPEC", "is azerite respec", "" }; case UNIT_NPC_FLAG_2_ISLANDS_QUEUE: return { "UNIT_NPC_FLAG_2_ISLANDS_QUEUE", "is islands queue", "" }; case UNIT_NPC_FLAG_2_SUPPRESS_NPC_SOUNDS_EXCEPT_END_OF_INTERACTION: return { "UNIT_NPC_FLAG_2_SUPPRESS_NPC_SOUNDS_EXCEPT_END_OF_INTERACTION", "UNIT_NPC_FLAG_2_SUPPRESS_NPC_SOUNDS_EXCEPT_END_OF_INTERACTION", "" }; + case UNIT_NPC_FLAG_2_PERSONAL_TABARD_DESIGNER: return { "UNIT_NPC_FLAG_2_PERSONAL_TABARD_DESIGNER", "is personal tabard designer", "" }; default: throw std::out_of_range("value"); } } template <> -TC_API_EXPORT size_t EnumUtils<NPCFlags2>::Count() { return 14; } +TC_API_EXPORT size_t EnumUtils<NPCFlags2>::Count() { return 15; } template <> TC_API_EXPORT NPCFlags2 EnumUtils<NPCFlags2>::FromIndex(size_t index) @@ -590,6 +591,7 @@ TC_API_EXPORT NPCFlags2 EnumUtils<NPCFlags2>::FromIndex(size_t index) case 11: return UNIT_NPC_FLAG_2_AZERITE_RESPEC; case 12: return UNIT_NPC_FLAG_2_ISLANDS_QUEUE; case 13: return UNIT_NPC_FLAG_2_SUPPRESS_NPC_SOUNDS_EXCEPT_END_OF_INTERACTION; + case 14: return UNIT_NPC_FLAG_2_PERSONAL_TABARD_DESIGNER; default: throw std::out_of_range("index"); } } @@ -613,6 +615,7 @@ TC_API_EXPORT size_t EnumUtils<NPCFlags2>::ToIndex(NPCFlags2 value) case UNIT_NPC_FLAG_2_AZERITE_RESPEC: return 11; case UNIT_NPC_FLAG_2_ISLANDS_QUEUE: return 12; case UNIT_NPC_FLAG_2_SUPPRESS_NPC_SOUNDS_EXCEPT_END_OF_INTERACTION: return 13; + case UNIT_NPC_FLAG_2_PERSONAL_TABARD_DESIGNER: return 14; default: throw std::out_of_range("value"); } } diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index 58c15dba090..7fdc1b74eac 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -726,7 +726,7 @@ enum SpellAttr8 : uint32 SPELL_ATTR8_IGNORE_DYNAMIC_OBJECT_CASTER = 0x00000002, /*NYI*/ // TITLE Ignore Dynamic Object Caster SPELL_ATTR8_REMOVE_OUTSIDE_DUNGEONS_AND_RAIDS = 0x00000004, // TITLE Remove Outside Dungeons and Raids SPELL_ATTR8_ONLY_TARGET_IF_SAME_CREATOR = 0x00000008, // TITLE Only Target If Same Creator - SPELL_ATTR8_CAN_HIT_AOE_UNTARGETABLE = 0x00000010, /*NYI - no aoe immunity implementation*/ // TITLE Can Hit AOE Untargetable + SPELL_ATTR8_CAN_HIT_AOE_UNTARGETABLE = 0x00000010, // TITLE Can Hit AOE Untargetable SPELL_ATTR8_ALLOW_WHILE_CHARMED = 0x00000020, /*NYI - not implementable currently, charming replaces AI*/ // TITLE Allow While Charmed SPELL_ATTR8_AURA_REQUIRED_BY_CLIENT = 0x00000040, /*NYI - we send all auras to client*/ // TITLE Aura Required by Client SPELL_ATTR8_IGNORE_SANCTUARY = 0x00000080, // TITLE Ignore Sanctuary @@ -753,7 +753,7 @@ enum SpellAttr8 : uint32 SPELL_ATTR8_NOT_IN_BATTLEGROUND = 0x10000000, // TITLE Not in Battleground SPELL_ATTR8_MASTERY_AFFECTS_POINTS = 0x20000000, // TITLE Mastery Affects Points SPELL_ATTR8_DISPLAY_LARGE_AURA_ICON_ON_UNIT_FRAMES_BOSS_AURA = 0x40000000, // TITLE Display Large Aura Icon On Unit Frames (Boss Aura) - SPELL_ATTR8_ATTACK_IGNORE_IMMUNE_TO_PC_FLAG = 0x80000000 // TITLE Can Attack ImmunePC DESCRIPTION Do not check UNIT_FLAG_IMMUNE_TO_PC in IsValidAttackTarget + SPELL_ATTR8_CAN_ATTACK_IMMUNE_PC = 0x80000000 // TITLE Can Attack ImmunePC DESCRIPTION Do not check UNIT_FLAG_IMMUNE_TO_PC in IsValidAttackTarget }; // EnumUtils: DESCRIBE THIS diff --git a/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp b/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp index 78b6cb9d68d..b6a27b664f4 100644 --- a/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp +++ b/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp @@ -1337,7 +1337,7 @@ TC_API_EXPORT EnumText EnumUtils<SpellAttr8>::ToString(SpellAttr8 value) case SPELL_ATTR8_NOT_IN_BATTLEGROUND: return { "SPELL_ATTR8_NOT_IN_BATTLEGROUND", "Not in Battleground", "" }; case SPELL_ATTR8_MASTERY_AFFECTS_POINTS: return { "SPELL_ATTR8_MASTERY_AFFECTS_POINTS", "Mastery Affects Points", "" }; case SPELL_ATTR8_DISPLAY_LARGE_AURA_ICON_ON_UNIT_FRAMES_BOSS_AURA: return { "SPELL_ATTR8_DISPLAY_LARGE_AURA_ICON_ON_UNIT_FRAMES_BOSS_AURA", "Display Large Aura Icon On Unit Frames (Boss Aura)", "" }; - case SPELL_ATTR8_ATTACK_IGNORE_IMMUNE_TO_PC_FLAG: return { "SPELL_ATTR8_ATTACK_IGNORE_IMMUNE_TO_PC_FLAG", "Can Attack ImmunePC", "Do not check UNIT_FLAG_IMMUNE_TO_PC in IsValidAttackTarget" }; + case SPELL_ATTR8_CAN_ATTACK_IMMUNE_PC: return { "SPELL_ATTR8_CAN_ATTACK_IMMUNE_PC", "Can Attack ImmunePC", "Do not check UNIT_FLAG_IMMUNE_TO_PC in IsValidAttackTarget" }; default: throw std::out_of_range("value"); } } @@ -1381,7 +1381,7 @@ TC_API_EXPORT SpellAttr8 EnumUtils<SpellAttr8>::FromIndex(size_t index) case 28: return SPELL_ATTR8_NOT_IN_BATTLEGROUND; case 29: return SPELL_ATTR8_MASTERY_AFFECTS_POINTS; case 30: return SPELL_ATTR8_DISPLAY_LARGE_AURA_ICON_ON_UNIT_FRAMES_BOSS_AURA; - case 31: return SPELL_ATTR8_ATTACK_IGNORE_IMMUNE_TO_PC_FLAG; + case 31: return SPELL_ATTR8_CAN_ATTACK_IMMUNE_PC; default: throw std::out_of_range("index"); } } @@ -1422,7 +1422,7 @@ TC_API_EXPORT size_t EnumUtils<SpellAttr8>::ToIndex(SpellAttr8 value) case SPELL_ATTR8_NOT_IN_BATTLEGROUND: return 28; case SPELL_ATTR8_MASTERY_AFFECTS_POINTS: return 29; case SPELL_ATTR8_DISPLAY_LARGE_AURA_ICON_ON_UNIT_FRAMES_BOSS_AURA: return 30; - case SPELL_ATTR8_ATTACK_IGNORE_IMMUNE_TO_PC_FLAG: return 31; + case SPELL_ATTR8_CAN_ATTACK_IMMUNE_PC: 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 2aed9e672b8..a819a800632 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -9222,7 +9222,7 @@ bool WorldObjectSpellAreaTargetCheck::operator()(WorldObject* target) const switch (_searchReason) { case WorldObjectSpellAreaTargetSearchReason::Area: - if (unitTarget->GetSpellOtherImmunityMask().HasFlag(SpellOtherImmunity::AoETarget)) + if (!_spellInfo->HasAttribute(SPELL_ATTR8_CAN_HIT_AOE_UNTARGETABLE) && unitTarget->GetSpellOtherImmunityMask().HasFlag(SpellOtherImmunity::AoETarget)) return false; break; case WorldObjectSpellAreaTargetSearchReason::Chain: diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index fe31c6e00ea..e7673939f7c 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -4742,7 +4742,7 @@ void SpellMgr::LoadSpellInfoCorrections() // Stinging Sap ApplySpellFix({ 374523 }, [](SpellInfo* spellInfo) { - spellInfo->AttributesEx8 |= SPELL_ATTR8_ATTACK_IGNORE_IMMUNE_TO_PC_FLAG; + spellInfo->AttributesEx8 |= SPELL_ATTR8_CAN_ATTACK_IMMUNE_PC; }); // Jump to Center (DNT) |