diff options
author | Shauren <shauren.trinity@gmail.com> | 2021-03-19 23:48:33 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-03-19 23:48:33 +0100 |
commit | 6db27c58b97a028026e0159109fbf20f6132e6b5 (patch) | |
tree | ca281ca2bf39436687dca3fc39c011ccaa286a18 /src | |
parent | 69e0b9a98516a0cac14bc3f985a2deb2fe79205f (diff) |
Core/Spells: Updated spell shapeshift form flags enum
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/DataStores/DB2Structure.h | 2 | ||||
-rw-r--r-- | src/server/game/DataStores/DBCEnums.h | 32 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/UnitDefines.h | 2 | ||||
-rw-r--r-- | src/server/game/Spells/SpellInfo.cpp | 4 |
5 files changed, 28 insertions, 14 deletions
diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h index 928d104b5ef..ea94fb836b3 100644 --- a/src/server/game/DataStores/DB2Structure.h +++ b/src/server/game/DataStores/DB2Structure.h @@ -3171,6 +3171,8 @@ struct SpellShapeshiftFormEntry uint16 MountTypeID; uint32 CreatureDisplayID[4]; uint32 PresetSpellID[MAX_SHAPESHIFT_SPELLS]; + + EnumFlag<SpellShapeshiftFormFlags> GetFlags() const { return static_cast<SpellShapeshiftFormFlags>(Flags); } }; struct SpellTargetRestrictionsEntry diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index be08ea15090..fabbe06250c 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -1357,19 +1357,29 @@ enum SpellProcsPerMinuteModType constexpr std::size_t MAX_POWERS_PER_SPELL = 4; -enum SpellShapeshiftFormFlags -{ - SHAPESHIFT_FORM_IS_NOT_A_SHAPESHIFT = 0x0001, - SHAPESHIFT_FORM_CANNOT_CANCEL = 0x0002, // player cannot cancel the aura giving this shapeshift - SHAPESHIFT_FORM_CAN_INTERACT = 0x0008, // if the form does not have SHAPESHIFT_FORM_IS_NOT_A_SHAPESHIFT then this flag must be present to allow NPC interaction - SHAPESHIFT_FORM_CAN_EQUIP_ITEMS = 0x0040, // if the form does not have SHAPESHIFT_FORM_IS_NOT_A_SHAPESHIFT then this flag allows equipping items without ITEM_FLAG_USABLE_WHEN_SHAPESHIFTED - SHAPESHIFT_FORM_CAN_USE_ITEMS = 0x0080, // if the form does not have SHAPESHIFT_FORM_IS_NOT_A_SHAPESHIFT then this flag allows using items without ITEM_FLAG_USABLE_WHEN_SHAPESHIFTED - SHAPESHIFT_FORM_CAN_AUTO_UNSHIFT = 0x0100, // clientside - SHAPESHIFT_FORM_PREVENT_LFG_TELEPORT = 0x0200, - SHAPESHIFT_FORM_PREVENT_USING_OWN_SKILLS = 0x0400, // prevents using spells that don't have any shapeshift requirement - SHAPESHIFT_FORM_PREVENT_EMOTE_SOUNDS = 0x1000 +enum class SpellShapeshiftFormFlags : int32 +{ + Stance = 0x00000001, + NotToggleable = 0x00000002, // player cannot cancel the aura giving this shapeshift + PersistOnDeath = 0x00000004, + CanInteractNPC = 0x00000008, // if the form does not have SHAPESHIFT_FORM_IS_NOT_A_SHAPESHIFT then this flag must be present to allow NPC interaction + DontUseWeapon = 0x00000010, + + CanUseEquippedItems = 0x00000040, // if the form does not have SHAPESHIFT_FORM_IS_NOT_A_SHAPESHIFT then this flag allows equipping items without ITEM_FLAG_USABLE_WHEN_SHAPESHIFTED + CanUseItems = 0x00000080, // if the form does not have SHAPESHIFT_FORM_IS_NOT_A_SHAPESHIFT then this flag allows using items without ITEM_FLAG_USABLE_WHEN_SHAPESHIFTED + DontAutoUnshift = 0x00000100, // clientside + ConsideredDead = 0x00000200, + CanOnlyCastShapeshiftSpells = 0x00000400, // prevents using spells that don't have any shapeshift requirement + StanceCancelsAtFlightmaster = 0x00000800, + NoEmoteSounds = 0x00001000, + NoTriggerTeleport = 0x00002000, + CannotChangeEquippedItems = 0x00004000, + + CannotUseGameObjects = 0x00010000 }; +DEFINE_ENUM_FLAG(SpellShapeshiftFormFlags); + #define TaxiMaskSize 337 typedef std::array<uint8, TaxiMaskSize> TaxiMask; diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 71ef592f227..d28da5afd8d 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -9500,7 +9500,7 @@ bool Unit::IsDisallowedMountForm(uint32 spellId, ShapeshiftForm form, uint32 dis if (!shapeshift) return true; - if (!(shapeshift->Flags & SHAPESHIFT_FORM_IS_NOT_A_SHAPESHIFT)) + if (!shapeshift->GetFlags().HasFlag(SpellShapeshiftFormFlags::Stance)) return true; } diff --git a/src/server/game/Entities/Unit/UnitDefines.h b/src/server/game/Entities/Unit/UnitDefines.h index 103d8ae9d2e..f12b41498d8 100644 --- a/src/server/game/Entities/Unit/UnitDefines.h +++ b/src/server/game/Entities/Unit/UnitDefines.h @@ -142,6 +142,8 @@ enum ShapeshiftForm FORM_SPIRIT_OWL_FORM_2 = 38, FORM_WISP_FORM = 39, FORM_WISP_FORM_2 = 40, + FORM_SOULSHAPE = 41, + FORM_FORGEBORNE_REVERIES = 42 }; enum UnitMoveType diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 80809ba3f5d..aa8d5f513ea 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -1887,12 +1887,12 @@ SpellCastResult SpellInfo::CheckShapeshift(uint32 form) const TC_LOG_ERROR("spells", "GetErrorAtShapeshiftedCast: unknown shapeshift %u", form); return SPELL_CAST_OK; } - actAsShifted = !(shapeInfo->Flags & SHAPESHIFT_FORM_IS_NOT_A_SHAPESHIFT); + actAsShifted = !shapeInfo->GetFlags().HasFlag(SpellShapeshiftFormFlags::Stance); } if (actAsShifted) { - if (HasAttribute(SPELL_ATTR0_NOT_SHAPESHIFT) || (shapeInfo && shapeInfo->Flags & SHAPESHIFT_FORM_PREVENT_USING_OWN_SKILLS)) // not while shapeshifted + if (HasAttribute(SPELL_ATTR0_NOT_SHAPESHIFT) || (shapeInfo && shapeInfo->GetFlags().HasFlag(SpellShapeshiftFormFlags::CanOnlyCastShapeshiftSpells))) // not while shapeshifted return SPELL_FAILED_NOT_SHAPESHIFT; else if (Stances != 0) // needs other shapeshift return SPELL_FAILED_ONLY_SHAPESHIFT; |