aboutsummaryrefslogtreecommitdiff
path: root/src/server/game
diff options
context:
space:
mode:
authorPeter Keresztes Schmidt <carbenium@outlook.com>2020-08-20 00:46:52 +0200
committerGitHub <noreply@github.com>2020-08-20 00:46:52 +0200
commit4286e7aa02e777268b25d8a5bcc1ee87f7b16c4d (patch)
tree13c9a4c4be3ae749a0301f0e397051a98a10f339 /src/server/game
parent9c9e8c7d58cd0e939330089cfb555945ebbf73eb (diff)
Core/ChatCommands: Check whether a passed numeric enum value is valid (#25285)
Diffstat (limited to 'src/server/game')
-rw-r--r--src/server/game/AuctionHouseBot/enuminfo_AuctionHouseBot.cpp31
-rw-r--r--src/server/game/Chat/ChatCommands/ChatCommandArgs.h4
-rw-r--r--src/server/game/Entities/Creature/enuminfo_CreatureData.cpp44
-rw-r--r--src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp80
-rw-r--r--src/server/game/Instances/InstanceScript.h1
-rw-r--r--src/server/game/Instances/enuminfo_InstanceScript.cpp76
-rw-r--r--src/server/game/Maps/enuminfo_SpawnData.cpp14
-rw-r--r--src/server/game/Warden/enuminfo_WardenCheckMgr.cpp33
8 files changed, 268 insertions, 15 deletions
diff --git a/src/server/game/AuctionHouseBot/enuminfo_AuctionHouseBot.cpp b/src/server/game/AuctionHouseBot/enuminfo_AuctionHouseBot.cpp
index bdec8875922..2d784a94425 100644
--- a/src/server/game/AuctionHouseBot/enuminfo_AuctionHouseBot.cpp
+++ b/src/server/game/AuctionHouseBot/enuminfo_AuctionHouseBot.cpp
@@ -20,9 +20,7 @@
#include "SmartEnum.h"
#include <stdexcept>
-namespace Trinity
-{
-namespace Impl
+namespace Trinity::Impl
{
/************************************************************************\
@@ -63,6 +61,22 @@ TC_API_EXPORT AuctionQuality EnumUtils<AuctionQuality>::FromIndex(size_t index)
}
}
+template <>
+TC_API_EXPORT size_t EnumUtils<AuctionQuality>::ToIndex(AuctionQuality value)
+{
+ switch (value)
+ {
+ case AUCTION_QUALITY_GRAY: return 0;
+ case AUCTION_QUALITY_WHITE: return 1;
+ case AUCTION_QUALITY_GREEN: return 2;
+ case AUCTION_QUALITY_BLUE: return 3;
+ case AUCTION_QUALITY_PURPLE: return 4;
+ case AUCTION_QUALITY_ORANGE: return 5;
+ case AUCTION_QUALITY_YELLOW: return 6;
+ default: throw std::out_of_range("value");
+ }
+}
+
/**************************************************************************\
|* data for enum 'AuctionHouseType' in 'AuctionHouseBot.h' auto-generated *|
\**************************************************************************/
@@ -92,5 +106,16 @@ TC_API_EXPORT AuctionHouseType EnumUtils<AuctionHouseType>::FromIndex(size_t ind
default: throw std::out_of_range("index");
}
}
+
+template <>
+TC_API_EXPORT size_t EnumUtils<AuctionHouseType>::ToIndex(AuctionHouseType value)
+{
+ switch (value)
+ {
+ case AUCTION_HOUSE_NEUTRAL: return 0;
+ case AUCTION_HOUSE_ALLIANCE: return 1;
+ case AUCTION_HOUSE_HORDE: return 2;
+ default: throw std::out_of_range("value");
+ }
}
}
diff --git a/src/server/game/Chat/ChatCommands/ChatCommandArgs.h b/src/server/game/Chat/ChatCommands/ChatCommandArgs.h
index d7fa5cf65db..2e33384ee42 100644
--- a/src/server/game/Chat/ChatCommands/ChatCommandArgs.h
+++ b/src/server/game/Chat/ChatCommands/ChatCommandArgs.h
@@ -193,7 +193,11 @@ struct ArgInfo<T, std::enable_if_t<std::is_enum_v<T>>>
U uVal = 0;
ret = ArgInfo<U>::TryConsume(uVal, args);
if (ret)
+ {
val = static_cast<T>(uVal);
+ if (!EnumUtils::IsValid(val))
+ return nullptr;
+ }
return ret;
}
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 <stdexcept>
-namespace Trinity
-{
-namespace Impl
+namespace Trinity::Impl
{
/*************************************************************************\
@@ -112,5 +110,45 @@ TC_API_EXPORT CreatureFlagsExtra EnumUtils<CreatureFlagsExtra>::FromIndex(size_t
default: throw std::out_of_range("index");
}
}
+
+template <>
+TC_API_EXPORT size_t EnumUtils<CreatureFlagsExtra>::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 f1e91fabab9..5452ca1048c 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 <stdexcept>
-namespace Trinity
-{
-namespace Impl
+namespace Trinity::Impl
{
/***************************************************************\
@@ -113,6 +111,47 @@ TC_API_EXPORT UnitFlags EnumUtils<UnitFlags>::FromIndex(size_t index)
}
}
+template <>
+TC_API_EXPORT size_t EnumUtils<UnitFlags>::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_CANNOT_SWIM: return 14;
+ case UNIT_FLAG_SWIMMING: 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 'NPCFlags' in 'UnitDefines.h' auto-generated *|
\**************************************************************/
@@ -190,5 +229,40 @@ TC_API_EXPORT NPCFlags EnumUtils<NPCFlags>::FromIndex(size_t index)
default: throw std::out_of_range("index");
}
}
+
+template <>
+TC_API_EXPORT size_t EnumUtils<NPCFlags>::ToIndex(NPCFlags value)
+{
+ switch (value)
+ {
+ case UNIT_NPC_FLAG_GOSSIP: return 0;
+ case UNIT_NPC_FLAG_QUESTGIVER: return 1;
+ case UNIT_NPC_FLAG_UNK1: return 2;
+ case UNIT_NPC_FLAG_UNK2: return 3;
+ case UNIT_NPC_FLAG_TRAINER: return 4;
+ case UNIT_NPC_FLAG_TRAINER_CLASS: return 5;
+ case UNIT_NPC_FLAG_TRAINER_PROFESSION: return 6;
+ case UNIT_NPC_FLAG_VENDOR: return 7;
+ case UNIT_NPC_FLAG_VENDOR_AMMO: return 8;
+ case UNIT_NPC_FLAG_VENDOR_FOOD: return 9;
+ case UNIT_NPC_FLAG_VENDOR_POISON: return 10;
+ case UNIT_NPC_FLAG_VENDOR_REAGENT: return 11;
+ case UNIT_NPC_FLAG_REPAIR: return 12;
+ case UNIT_NPC_FLAG_FLIGHTMASTER: return 13;
+ case UNIT_NPC_FLAG_SPIRITHEALER: return 14;
+ case UNIT_NPC_FLAG_SPIRITGUIDE: return 15;
+ case UNIT_NPC_FLAG_INNKEEPER: return 16;
+ case UNIT_NPC_FLAG_BANKER: return 17;
+ case UNIT_NPC_FLAG_PETITIONER: return 18;
+ case UNIT_NPC_FLAG_TABARDDESIGNER: return 19;
+ case UNIT_NPC_FLAG_BATTLEMASTER: return 20;
+ case UNIT_NPC_FLAG_AUCTIONEER: return 21;
+ case UNIT_NPC_FLAG_STABLEMASTER: return 22;
+ case UNIT_NPC_FLAG_GUILD_BANKER: return 23;
+ case UNIT_NPC_FLAG_SPELLCLICK: return 24;
+ case UNIT_NPC_FLAG_PLAYER_VEHICLE: return 25;
+ case UNIT_NPC_FLAG_MAILBOX: return 26;
+ default: throw std::out_of_range("value");
+ }
}
}
diff --git a/src/server/game/Instances/InstanceScript.h b/src/server/game/Instances/InstanceScript.h
index 96b2a9f2245..5b6846ec562 100644
--- a/src/server/game/Instances/InstanceScript.h
+++ b/src/server/game/Instances/InstanceScript.h
@@ -64,6 +64,7 @@ enum EncounterFrameType
ENCOUNTER_FRAME_UNK7 = 7 // Seems to have something to do with sorting the encounter units
};
+// EnumUtils: DESCRIBE THIS
enum EncounterState
{
NOT_STARTED = 0,
diff --git a/src/server/game/Instances/enuminfo_InstanceScript.cpp b/src/server/game/Instances/enuminfo_InstanceScript.cpp
new file mode 100644
index 00000000000..7fcbc5d3036
--- /dev/null
+++ b/src/server/game/Instances/enuminfo_InstanceScript.cpp
@@ -0,0 +1,76 @@
+/*
+ * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "InstanceScript.h"
+#include "Define.h"
+#include "SmartEnum.h"
+#include <stdexcept>
+
+namespace Trinity::Impl
+{
+
+/***********************************************************************\
+|* data for enum 'EncounterState' in 'InstanceScript.h' auto-generated *|
+\***********************************************************************/
+template <>
+TC_API_EXPORT EnumText EnumUtils<EncounterState>::ToString(EncounterState value)
+{
+ switch (value)
+ {
+ case NOT_STARTED: return { "NOT_STARTED", "NOT_STARTED", "" };
+ case IN_PROGRESS: return { "IN_PROGRESS", "IN_PROGRESS", "" };
+ case FAIL: return { "FAIL", "FAIL", "" };
+ case DONE: return { "DONE", "DONE", "" };
+ case SPECIAL: return { "SPECIAL", "SPECIAL", "" };
+ case TO_BE_DECIDED: return { "TO_BE_DECIDED", "TO_BE_DECIDED", "" };
+ default: throw std::out_of_range("value");
+ }
+}
+
+template <>
+TC_API_EXPORT size_t EnumUtils<EncounterState>::Count() { return 6; }
+
+template <>
+TC_API_EXPORT EncounterState EnumUtils<EncounterState>::FromIndex(size_t index)
+{
+ switch (index)
+ {
+ case 0: return NOT_STARTED;
+ case 1: return IN_PROGRESS;
+ case 2: return FAIL;
+ case 3: return DONE;
+ case 4: return SPECIAL;
+ case 5: return TO_BE_DECIDED;
+ default: throw std::out_of_range("index");
+ }
+}
+
+template <>
+TC_API_EXPORT size_t EnumUtils<EncounterState>::ToIndex(EncounterState value)
+{
+ switch (value)
+ {
+ case NOT_STARTED: return 0;
+ case IN_PROGRESS: return 1;
+ case FAIL: return 2;
+ case DONE: return 3;
+ case SPECIAL: return 4;
+ case TO_BE_DECIDED: return 5;
+ default: throw std::out_of_range("value");
+ }
+}
+}
diff --git a/src/server/game/Maps/enuminfo_SpawnData.cpp b/src/server/game/Maps/enuminfo_SpawnData.cpp
index 92226f25572..82b75acb148 100644
--- a/src/server/game/Maps/enuminfo_SpawnData.cpp
+++ b/src/server/game/Maps/enuminfo_SpawnData.cpp
@@ -20,9 +20,7 @@
#include "SmartEnum.h"
#include <stdexcept>
-namespace Trinity
-{
-namespace Impl
+namespace Trinity::Impl
{
/*******************************************************************\
@@ -52,5 +50,15 @@ TC_API_EXPORT SpawnObjectType EnumUtils<SpawnObjectType>::FromIndex(size_t index
default: throw std::out_of_range("index");
}
}
+
+template <>
+TC_API_EXPORT size_t EnumUtils<SpawnObjectType>::ToIndex(SpawnObjectType value)
+{
+ switch (value)
+ {
+ case SPAWN_TYPE_CREATURE: return 0;
+ case SPAWN_TYPE_GAMEOBJECT: return 1;
+ default: throw std::out_of_range("value");
+ }
}
}
diff --git a/src/server/game/Warden/enuminfo_WardenCheckMgr.cpp b/src/server/game/Warden/enuminfo_WardenCheckMgr.cpp
index e4c5fc4efa3..450760148f0 100644
--- a/src/server/game/Warden/enuminfo_WardenCheckMgr.cpp
+++ b/src/server/game/Warden/enuminfo_WardenCheckMgr.cpp
@@ -20,9 +20,7 @@
#include "SmartEnum.h"
#include <stdexcept>
-namespace Trinity
-{
-namespace Impl
+namespace Trinity::Impl
{
/**********************************************************************\
@@ -55,6 +53,18 @@ TC_API_EXPORT WardenActions EnumUtils<WardenActions>::FromIndex(size_t index)
}
}
+template <>
+TC_API_EXPORT size_t EnumUtils<WardenActions>::ToIndex(WardenActions value)
+{
+ switch (value)
+ {
+ case WARDEN_ACTION_LOG: return 0;
+ case WARDEN_ACTION_KICK: return 1;
+ case WARDEN_ACTION_BAN: return 2;
+ default: throw std::out_of_range("value");
+ }
+}
+
/************************************************************************\
|* data for enum 'WardenCheckType' in 'WardenCheckMgr.h' auto-generated *|
\************************************************************************/
@@ -96,5 +106,22 @@ TC_API_EXPORT WardenCheckType EnumUtils<WardenCheckType>::FromIndex(size_t index
default: throw std::out_of_range("index");
}
}
+
+template <>
+TC_API_EXPORT size_t EnumUtils<WardenCheckType>::ToIndex(WardenCheckType value)
+{
+ switch (value)
+ {
+ case MEM_CHECK: return 0;
+ case PAGE_CHECK_A: return 1;
+ case PAGE_CHECK_B: return 2;
+ case MPQ_CHECK: return 3;
+ case LUA_STR_CHECK: return 4;
+ case DRIVER_CHECK: return 5;
+ case TIMING_CHECK: return 6;
+ case PROC_CHECK: return 7;
+ case MODULE_CHECK: return 8;
+ default: throw std::out_of_range("value");
+ }
}
}