From 3c82863c528fa9ea1bd5eb75fa596a99266431b7 Mon Sep 17 00:00:00 2001 From: Peter Keresztes Schmidt Date: Thu, 20 Aug 2020 00:46:52 +0200 Subject: Core/ChatCommands: Check whether a passed numeric enum value is valid (#25285) (cherry picked from commit 4286e7aa02e777268b25d8a5bcc1ee87f7b16c4d) --- .../Entities/Creature/enuminfo_CreatureData.cpp | 44 +++++- .../game/Entities/Unit/enuminfo_UnitDefines.cpp | 156 ++++++++++++++++++++- 2 files changed, 194 insertions(+), 6 deletions(-) (limited to 'src/server/game/Entities') diff --git a/src/server/game/Entities/Creature/enuminfo_CreatureData.cpp b/src/server/game/Entities/Creature/enuminfo_CreatureData.cpp index f15a5d8ca16..01549c93c4f 100644 --- a/src/server/game/Entities/Creature/enuminfo_CreatureData.cpp +++ b/src/server/game/Entities/Creature/enuminfo_CreatureData.cpp @@ -20,9 +20,7 @@ #include "SmartEnum.h" #include -namespace Trinity -{ -namespace Impl +namespace Trinity::Impl { /*************************************************************************\ @@ -112,5 +110,45 @@ TC_API_EXPORT CreatureFlagsExtra EnumUtils::FromIndex(size_t default: throw std::out_of_range("index"); } } + +template <> +TC_API_EXPORT size_t EnumUtils::ToIndex(CreatureFlagsExtra value) +{ + switch (value) + { + case CREATURE_FLAG_EXTRA_INSTANCE_BIND: return 0; + case CREATURE_FLAG_EXTRA_CIVILIAN: return 1; + case CREATURE_FLAG_EXTRA_NO_PARRY: return 2; + case CREATURE_FLAG_EXTRA_NO_PARRY_HASTEN: return 3; + case CREATURE_FLAG_EXTRA_NO_BLOCK: return 4; + case CREATURE_FLAG_EXTRA_NO_CRUSH: return 5; + case CREATURE_FLAG_EXTRA_NO_XP_AT_KILL: return 6; + case CREATURE_FLAG_EXTRA_TRIGGER: return 7; + case CREATURE_FLAG_EXTRA_NO_TAUNT: return 8; + case CREATURE_FLAG_EXTRA_NO_MOVE_FLAGS_UPDATE: return 9; + case CREATURE_FLAG_EXTRA_GHOST_VISIBILITY: return 10; + case CREATURE_FLAG_EXTRA_USE_OFFHAND_ATTACK: return 11; + case CREATURE_FLAG_EXTRA_NO_SELL_VENDOR: return 12; + case CREATURE_FLAG_EXTRA_NO_COMBAT: return 13; + case CREATURE_FLAG_EXTRA_WORLDEVENT: return 14; + case CREATURE_FLAG_EXTRA_GUARD: return 15; + case CREATURE_FLAG_EXTRA_UNUSED_16: return 16; + case CREATURE_FLAG_EXTRA_NO_CRIT: return 17; + case CREATURE_FLAG_EXTRA_NO_SKILLGAIN: return 18; + case CREATURE_FLAG_EXTRA_TAUNT_DIMINISH: return 19; + case CREATURE_FLAG_EXTRA_ALL_DIMINISH: return 20; + case CREATURE_FLAG_EXTRA_NO_PLAYER_DAMAGE_REQ: return 21; + case CREATURE_FLAG_EXTRA_UNUSED_22: return 22; + case CREATURE_FLAG_EXTRA_UNUSED_23: return 23; + case CREATURE_FLAG_EXTRA_UNUSED_24: return 24; + case CREATURE_FLAG_EXTRA_UNUSED_25: return 25; + case CREATURE_FLAG_EXTRA_UNUSED_26: return 26; + case CREATURE_FLAG_EXTRA_UNUSED_27: return 27; + case CREATURE_FLAG_EXTRA_DUNGEON_BOSS: return 28; + case CREATURE_FLAG_EXTRA_IGNORE_PATHFINDING: return 29; + case CREATURE_FLAG_EXTRA_IMMUNITY_KNOCKBACK: return 30; + case CREATURE_FLAG_EXTRA_UNUSED_31: return 31; + default: throw std::out_of_range("value"); + } } } diff --git a/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp b/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp index ca44b6d07bc..af02f32baea 100644 --- a/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp +++ b/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp @@ -20,9 +20,7 @@ #include "SmartEnum.h" #include -namespace Trinity -{ -namespace Impl +namespace Trinity::Impl { /***************************************************************\ @@ -113,6 +111,47 @@ TC_API_EXPORT UnitFlags EnumUtils::FromIndex(size_t index) } } +template <> +TC_API_EXPORT size_t EnumUtils::ToIndex(UnitFlags value) +{ + switch (value) + { + case UNIT_FLAG_SERVER_CONTROLLED: return 0; + case UNIT_FLAG_NON_ATTACKABLE: return 1; + case UNIT_FLAG_REMOVE_CLIENT_CONTROL: return 2; + case UNIT_FLAG_PLAYER_CONTROLLED: return 3; + case UNIT_FLAG_RENAME: return 4; + case UNIT_FLAG_PREPARATION: return 5; + case UNIT_FLAG_UNK_6: return 6; + case UNIT_FLAG_NOT_ATTACKABLE_1: return 7; + case UNIT_FLAG_IMMUNE_TO_PC: return 8; + case UNIT_FLAG_IMMUNE_TO_NPC: return 9; + case UNIT_FLAG_LOOTING: return 10; + case UNIT_FLAG_PET_IN_COMBAT: return 11; + case UNIT_FLAG_PVP: return 12; + case UNIT_FLAG_SILENCED: return 13; + case UNIT_FLAG_CANT_SWIM: return 14; + case UNIT_FLAG_CAN_SWIM: return 15; + case UNIT_FLAG_NON_ATTACKABLE_2: return 16; + case UNIT_FLAG_PACIFIED: return 17; + case UNIT_FLAG_STUNNED: return 18; + case UNIT_FLAG_IN_COMBAT: return 19; + case UNIT_FLAG_TAXI_FLIGHT: return 20; + case UNIT_FLAG_DISARMED: return 21; + case UNIT_FLAG_CONFUSED: return 22; + case UNIT_FLAG_FLEEING: return 23; + case UNIT_FLAG_POSSESSED: return 24; + case UNIT_FLAG_NOT_SELECTABLE: return 25; + case UNIT_FLAG_SKINNABLE: return 26; + case UNIT_FLAG_MOUNT: return 27; + case UNIT_FLAG_UNK_28: return 28; + case UNIT_FLAG_UNK_29: return 29; + case UNIT_FLAG_SHEATHE: return 30; + case UNIT_FLAG_IMMUNE: return 31; + default: throw std::out_of_range("value"); + } +} + /****************************************************************\ |* data for enum 'UnitFlags2' in 'UnitDefines.h' auto-generated *| \****************************************************************/ @@ -197,6 +236,45 @@ TC_API_EXPORT UnitFlags2 EnumUtils::FromIndex(size_t index) } } +template <> +TC_API_EXPORT size_t EnumUtils::ToIndex(UnitFlags2 value) +{ + switch (value) + { + case UNIT_FLAG2_FEIGN_DEATH: return 0; + case UNIT_FLAG2_HIDE_BODY: return 1; + case UNIT_FLAG2_IGNORE_REPUTATION: return 2; + case UNIT_FLAG2_COMPREHEND_LANG: return 3; + case UNIT_FLAG2_MIRROR_IMAGE: return 4; + case UNIT_FLAG2_DONT_FADE_IN: return 5; + case UNIT_FLAG2_FORCE_MOVEMENT: return 6; + case UNIT_FLAG2_DISARM_OFFHAND: return 7; + case UNIT_FLAG2_DISABLE_PRED_STATS: return 8; + case UNIT_FLAG2_ALLOW_CHANGING_TALENTS: return 9; + case UNIT_FLAG2_DISARM_RANGED: return 10; + case UNIT_FLAG2_REGENERATE_POWER: return 11; + case UNIT_FLAG2_RESTRICT_PARTY_INTERACTION: return 12; + case UNIT_FLAG2_PREVENT_SPELL_CLICK: return 13; + case UNIT_FLAG2_INTERACT_WHILE_HOSTILE: return 14; + case UNIT_FLAG2_CANNOT_TURN: return 15; + case UNIT_FLAG2_UNK2: return 16; + case UNIT_FLAG2_PLAY_DEATH_ANIM: return 17; + case UNIT_FLAG2_ALLOW_CHEAT_SPELLS: return 18; + case UNIT_FLAG2_SUPPRESS_HIGHLIGHT_WHEN_TARGETED_OR_MOUSED_OVER: return 19; + case UNIT_FLAG2_TREAT_AS_RAID_UNIT_FOR_HELPFUL_SPELLS: return 20; + case UNIT_FLAG2_LARGE_AOI: return 21; + case UNIT_FLAG2_GIGANTIC_AOI: return 22; + case UNIT_FLAG2_NO_ACTIONS: return 23; + case UNIT_FLAG2_AI_WILL_ONLY_SWIM_IF_TARGET_SWIMS: return 24; + case UNIT_FLAG2_DONT_GENERATE_COMBAT_LOG_WHEN_ENGAGED_WITH_NPCS: return 25; + case UNIT_FLAG2_UNTARGETABLE_BY_CLIENT: return 26; + case UNIT_FLAG2_ATTACKER_IGNORES_MINIMUM_RANGES: return 27; + case UNIT_FLAG2_UNINTERACTIBLE_IF_HOSTILE: return 28; + case UNIT_FLAG2_INFINITE_AOI: return 29; + default: throw std::out_of_range("value"); + } +} + /****************************************************************\ |* data for enum 'UnitFlags3' in 'UnitDefines.h' auto-generated *| \****************************************************************/ @@ -223,6 +301,16 @@ TC_API_EXPORT UnitFlags3 EnumUtils::FromIndex(size_t index) } } +template <> +TC_API_EXPORT size_t EnumUtils::ToIndex(UnitFlags3 value) +{ + switch (value) + { + case UNIT_FLAG3_UNK1: return 0; + default: throw std::out_of_range("value"); + } +} + /**************************************************************\ |* data for enum 'NPCFlags' in 'UnitDefines.h' auto-generated *| \**************************************************************/ @@ -313,6 +401,48 @@ TC_API_EXPORT NPCFlags EnumUtils::FromIndex(size_t index) } } +template <> +TC_API_EXPORT size_t EnumUtils::ToIndex(NPCFlags value) +{ + switch (value) + { + case UNIT_NPC_FLAG_NONE: return 0; + case UNIT_NPC_FLAG_GOSSIP: return 1; + case UNIT_NPC_FLAG_QUESTGIVER: return 2; + case UNIT_NPC_FLAG_UNK1: return 3; + case UNIT_NPC_FLAG_UNK2: return 4; + case UNIT_NPC_FLAG_TRAINER: return 5; + case UNIT_NPC_FLAG_TRAINER_CLASS: return 6; + case UNIT_NPC_FLAG_TRAINER_PROFESSION: return 7; + case UNIT_NPC_FLAG_VENDOR: return 8; + case UNIT_NPC_FLAG_VENDOR_AMMO: return 9; + case UNIT_NPC_FLAG_VENDOR_FOOD: return 10; + case UNIT_NPC_FLAG_VENDOR_POISON: return 11; + case UNIT_NPC_FLAG_VENDOR_REAGENT: return 12; + case UNIT_NPC_FLAG_REPAIR: return 13; + case UNIT_NPC_FLAG_FLIGHTMASTER: return 14; + case UNIT_NPC_FLAG_SPIRITHEALER: return 15; + case UNIT_NPC_FLAG_SPIRITGUIDE: return 16; + case UNIT_NPC_FLAG_INNKEEPER: return 17; + case UNIT_NPC_FLAG_BANKER: return 18; + case UNIT_NPC_FLAG_PETITIONER: return 19; + case UNIT_NPC_FLAG_TABARDDESIGNER: return 20; + case UNIT_NPC_FLAG_BATTLEMASTER: return 21; + case UNIT_NPC_FLAG_AUCTIONEER: return 22; + case UNIT_NPC_FLAG_STABLEMASTER: return 23; + case UNIT_NPC_FLAG_GUILD_BANKER: return 24; + case UNIT_NPC_FLAG_SPELLCLICK: return 25; + case UNIT_NPC_FLAG_PLAYER_VEHICLE: return 26; + case UNIT_NPC_FLAG_MAILBOX: return 27; + case UNIT_NPC_FLAG_ARTIFACT_POWER_RESPEC: return 28; + case UNIT_NPC_FLAG_TRANSMOGRIFIER: return 29; + case UNIT_NPC_FLAG_VAULTKEEPER: return 30; + case UNIT_NPC_FLAG_WILD_BATTLE_PET: return 31; + case UNIT_NPC_FLAG_BLACK_MARKET: return 32; + default: throw std::out_of_range("value"); + } +} + /***************************************************************\ |* data for enum 'NPCFlags2' in 'UnitDefines.h' auto-generated *| \***************************************************************/ @@ -360,5 +490,25 @@ TC_API_EXPORT NPCFlags2 EnumUtils::FromIndex(size_t index) default: throw std::out_of_range("index"); } } + +template <> +TC_API_EXPORT size_t EnumUtils::ToIndex(NPCFlags2 value) +{ + switch (value) + { + case UNIT_NPC_FLAG_2_NONE: return 0; + case UNIT_NPC_FLAG_2_ITEM_UPGRADE_MASTER: return 1; + case UNIT_NPC_FLAG_2_GARRISON_ARCHITECT: return 2; + case UNIT_NPC_FLAG_2_STEERING: return 3; + case UNIT_NPC_FLAG_2_SHIPMENT_CRAFTER: return 4; + case UNIT_NPC_FLAG_2_GARRISON_MISSION_NPC: return 5; + case UNIT_NPC_FLAG_2_TRADESKILL_NPC: return 6; + case UNIT_NPC_FLAG_2_BLACK_MARKET_VIEW: return 7; + case UNIT_NPC_FLAG_2_GARRISON_TALENT_NPC: return 8; + case UNIT_NPC_FLAG_2_CONTRIBUTION_COLLECTOR: return 9; + case UNIT_NPC_FLAG_2_AZERITE_RESPEC: return 10; + case UNIT_NPC_FLAG_2_ISLANDS_QUEUE: return 11; + default: throw std::out_of_range("value"); + } } } -- cgit v1.2.3