aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Chat/ChatCommands/ChatCommandArgs.h16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/server/game/Chat/ChatCommands/ChatCommandArgs.h b/src/server/game/Chat/ChatCommands/ChatCommandArgs.h
index 9369ed10eda..630e7ea6237 100644
--- a/src/server/game/Chat/ChatCommands/ChatCommandArgs.h
+++ b/src/server/game/Chat/ChatCommands/ChatCommandArgs.h
@@ -20,6 +20,7 @@
#include "ChatCommandHelpers.h"
#include "ChatCommandTags.h"
+#include "EnumFlag.h"
#include "SmartEnum.h"
#include "StringConvert.h"
#include "StringFormat.h"
@@ -188,16 +189,21 @@ namespace Trinity::Impl::ChatCommands
}
// Value not found. Try to parse arg as underlying type and cast it to enum type
- using U = std::underlying_type_t<T>;
- U uVal = 0;
- if (ChatCommandResult next2 = ArgInfo<U>::TryConsume(uVal, handler, args))
+ do
{
- if (EnumUtils::IsValid<T>(uVal))
+ using U = std::underlying_type_t<T>;
+ U uVal = 0;
+ if (ChatCommandResult next2 = ArgInfo<U>::TryConsume(uVal, handler, args))
{
+ // validate numeric value only if its not a flag to allow combined flags
+ if constexpr (!EnumTraits::IsFlag<T>::value)
+ if (!EnumUtils::IsValid<T>(uVal))
+ break;
+
val = static_cast<T>(uVal);
return next2;
}
- }
+ } while (false);
if (next1)
return FormatTrinityString(handler, LANG_CMDPARSER_STRING_VALUE_INVALID, STRING_VIEW_FMT_ARG(strVal), Trinity::GetTypeName<T>().c_str());