aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Chat/ChatCommands
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2022-09-02 19:17:56 +0200
committerShauren <shauren.trinity@gmail.com>2022-09-02 19:27:27 +0200
commit6d2b8511547004b997cc1de76cdbaf5498b8b12c (patch)
treeefff0e743318d63b011f6aed08bc7a51f4589d41 /src/server/game/Chat/ChatCommands
parent10302dca55ffc7db8c8cfc5b42f68bb082b1e8d7 (diff)
Core/Commands: Convert quest commands to new system
Diffstat (limited to 'src/server/game/Chat/ChatCommands')
-rw-r--r--src/server/game/Chat/ChatCommands/ChatCommandArgs.cpp17
-rw-r--r--src/server/game/Chat/ChatCommands/ChatCommandArgs.h7
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 727f84fa633..8989a5a2cba 100644
--- a/src/server/game/Chat/ChatCommands/ChatCommandArgs.cpp
+++ b/src/server/game/Chat/ChatCommands/ChatCommandArgs.cpp
@@ -93,6 +93,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 7262b8f180c..7788e9f50ee 100644
--- a/src/server/game/Chat/ChatCommands/ChatCommandArgs.h
+++ b/src/server/game/Chat/ChatCommands/ChatCommandArgs.h
@@ -319,6 +319,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*>