diff options
author | Shauren <shauren.trinity@gmail.com> | 2024-06-15 12:35:49 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2024-06-15 12:35:49 +0200 |
commit | dd61ba2844fc96b3344183fe0b05ce65985fa8be (patch) | |
tree | 8915bfd7d3e471a3bfe05068a05dab93e4e21c6b | |
parent | 53204130c62aadca3b961844a1c9d2dfe967518d (diff) |
Core/Spells: Implemented SPELL_ATTR9_TARGET_MUST_BE_GROUNDED
-rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 2 | ||||
-rw-r--r-- | src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Spells/SpellInfo.cpp | 5 |
3 files changed, 9 insertions, 4 deletions
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index 9e43cbfbb48..93363a57b9d 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -769,7 +769,7 @@ enum SpellAttr9 : uint32 SPELL_ATTR9_DO_NOT_ADD_TO_UNLEARN_LIST = 0x00000080, /* NYI - unlearn list not maintained SMSG_SEND_UNLEARN_SPELLS always empty */ // TITLE Do Not Add to Unlearn List SPELL_ATTR9_COOLDOWN_IGNORES_RANGED_WEAPON = 0x00000100, // TITLE Cooldown Ignores Ranged Weapon SPELL_ATTR9_NOT_IN_ARENA = 0x00000200, // TITLE Not In Arena - SPELL_ATTR9_UNK10 = 0x00000400, // TITLE Unknown attribute 10@Attr9 + SPELL_ATTR9_TARGET_MUST_BE_GROUNDED = 0x00000400, // TITLE Target Must Be Grounded SPELL_ATTR9_UNK11 = 0x00000800, // TITLE Unknown attribute 11@Attr9 SPELL_ATTR9_UNK12 = 0x00001000, // TITLE Unknown attribute 12@Attr9 SPELL_ATTR9_SLAM = 0x00002000, // TITLE Haste Affects Melee Ability Casttime diff --git a/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp b/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp index 6656ef26628..f1bf1611ac2 100644 --- a/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp +++ b/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp @@ -1445,7 +1445,7 @@ TC_API_EXPORT EnumText EnumUtils<SpellAttr9>::ToString(SpellAttr9 value) case SPELL_ATTR9_DO_NOT_ADD_TO_UNLEARN_LIST: return { "SPELL_ATTR9_DO_NOT_ADD_TO_UNLEARN_LIST", "Do Not Add to Unlearn List", "" }; case SPELL_ATTR9_COOLDOWN_IGNORES_RANGED_WEAPON: return { "SPELL_ATTR9_COOLDOWN_IGNORES_RANGED_WEAPON", "Cooldown Ignores Ranged Weapon", "" }; case SPELL_ATTR9_NOT_IN_ARENA: return { "SPELL_ATTR9_NOT_IN_ARENA", "Not In Arena", "" }; - case SPELL_ATTR9_UNK10: return { "SPELL_ATTR9_UNK10", "Unknown attribute 10@Attr9", "" }; + case SPELL_ATTR9_TARGET_MUST_BE_GROUNDED: return { "SPELL_ATTR9_TARGET_MUST_BE_GROUNDED", "Target Must Be Grounded", "" }; case SPELL_ATTR9_UNK11: return { "SPELL_ATTR9_UNK11", "Unknown attribute 11@Attr9", "" }; case SPELL_ATTR9_UNK12: return { "SPELL_ATTR9_UNK12", "Unknown attribute 12@Attr9", "" }; case SPELL_ATTR9_SLAM: return { "SPELL_ATTR9_SLAM", "Haste Affects Melee Ability Casttime", "" }; @@ -1489,7 +1489,7 @@ TC_API_EXPORT SpellAttr9 EnumUtils<SpellAttr9>::FromIndex(size_t index) case 7: return SPELL_ATTR9_DO_NOT_ADD_TO_UNLEARN_LIST; case 8: return SPELL_ATTR9_COOLDOWN_IGNORES_RANGED_WEAPON; case 9: return SPELL_ATTR9_NOT_IN_ARENA; - case 10: return SPELL_ATTR9_UNK10; + case 10: return SPELL_ATTR9_TARGET_MUST_BE_GROUNDED; case 11: return SPELL_ATTR9_UNK11; case 12: return SPELL_ATTR9_UNK12; case 13: return SPELL_ATTR9_SLAM; @@ -1530,7 +1530,7 @@ TC_API_EXPORT size_t EnumUtils<SpellAttr9>::ToIndex(SpellAttr9 value) case SPELL_ATTR9_DO_NOT_ADD_TO_UNLEARN_LIST: return 7; case SPELL_ATTR9_COOLDOWN_IGNORES_RANGED_WEAPON: return 8; case SPELL_ATTR9_NOT_IN_ARENA: return 9; - case SPELL_ATTR9_UNK10: return 10; + case SPELL_ATTR9_TARGET_MUST_BE_GROUNDED: return 10; case SPELL_ATTR9_UNK11: return 11; case SPELL_ATTR9_UNK12: return 12; case SPELL_ATTR9_SLAM: return 13; diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 5adbd2bd01f..1a81a1ce7ab 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -2252,6 +2252,11 @@ SpellCastResult SpellInfo::CheckTarget(WorldObject const* caster, WorldObject co if (HasAttribute(SPELL_ATTR3_NOT_ON_AOE_IMMUNE)) if (unitTarget->GetSpellOtherImmunityMask().HasFlag(SpellOtherImmunity::AoETarget)) return SPELL_FAILED_BAD_TARGETS; + + if (HasAttribute(SPELL_ATTR9_TARGET_MUST_BE_GROUNDED) && + (unitTarget->HasUnitMovementFlag(MOVEMENTFLAG_FALLING | MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_FLYING | MOVEMENTFLAG_HOVER) || + unitTarget->HasExtraUnitMovementFlag2(MOVEMENTFLAG3_ADV_FLYING))) + return SPELL_FAILED_TARGET_NOT_GROUNDED; } // corpse specific target checks else if (Corpse const* corpseTarget = target->ToCorpse()) |