diff options
| author | Shauren <shauren.trinity@gmail.com> | 2023-05-13 15:46:27 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2023-08-15 21:59:52 +0200 |
| commit | a4299c2a4b88d1cbdcea1301a190da6081abf876 (patch) | |
| tree | 85b194c12b0413b8da3ad554633ddeb0fec98185 /src/server/game/Chat/ChatCommands | |
| parent | b9201d3c07ecbd690117d248bec238e3657b57b9 (diff) | |
Core/Misc: Replace string to int conversion functions from Common.h with c++17 std::from_chars based ones Trinity::StringTo
(cherry picked from commit 3260b94dd627b7b0c7114f94bb97d108b005af3e)
Diffstat (limited to 'src/server/game/Chat/ChatCommands')
| -rw-r--r-- | src/server/game/Chat/ChatCommands/ChatCommandArgs.cpp | 17 | ||||
| -rw-r--r-- | src/server/game/Chat/ChatCommands/ChatCommandArgs.h | 7 |
2 files changed, 24 insertions, 0 deletions
diff --git a/src/server/game/Chat/ChatCommands/ChatCommandArgs.cpp b/src/server/game/Chat/ChatCommands/ChatCommandArgs.cpp index 9a5f45b6c07..a19f9571d0e 100644 --- a/src/server/game/Chat/ChatCommands/ChatCommandArgs.cpp +++ b/src/server/game/Chat/ChatCommands/ChatCommandArgs.cpp @@ -77,6 +77,23 @@ ChatCommandResult Trinity::Impl::ChatCommands::ArgInfo<ItemTemplate const*>::Try return std::nullopt; } +struct QuestVisitor +{ + using value_type = Quest const*; + value_type operator()(Hyperlink<quest> quest) const { return quest->Quest; } + value_type operator()(uint32 questId) const { return sObjectMgr->GetQuestTemplate(questId); } +}; +ChatCommandResult Trinity::Impl::ChatCommands::ArgInfo<Quest const*, void>::TryConsume(Quest const*& data, ChatHandler const* handler, std::string_view args) +{ + Variant<Hyperlink<quest>, uint32> val; + ChatCommandResult result = ArgInfo<decltype(val)>::TryConsume(val, handler, args); + if (!result || (data = val.visit(QuestVisitor()))) + return result; + if (uint32* id = std::get_if<uint32>(&val)) + return FormatTrinityString(handler, LANG_CMDPARSER_QUEST_NO_EXIST, *id); + return std::nullopt; +} + struct SpellInfoVisitor { using value_type = SpellInfo const*; diff --git a/src/server/game/Chat/ChatCommands/ChatCommandArgs.h b/src/server/game/Chat/ChatCommands/ChatCommandArgs.h index 770f67b3485..79a74e35582 100644 --- a/src/server/game/Chat/ChatCommands/ChatCommandArgs.h +++ b/src/server/game/Chat/ChatCommands/ChatCommandArgs.h @@ -312,6 +312,13 @@ namespace Trinity::Impl::ChatCommands static ChatCommandResult TryConsume(ItemTemplate const*&, ChatHandler const*, std::string_view); }; + // Quest* from numeric id or link + template <> + struct TC_GAME_API ArgInfo<Quest const*> + { + static ChatCommandResult TryConsume(Quest const*&, ChatHandler const*, std::string_view); + }; + // SpellInfo const* from spell id or link template <> struct TC_GAME_API ArgInfo<SpellInfo const*> |
