From 9df61fd111a39983d751ac0bed767137b330c547 Mon Sep 17 00:00:00 2001 From: Peter Keresztes Schmidt Date: Mon, 17 Aug 2020 18:26:41 +0200 Subject: Core/ChatCommands: Parse SpellInfo also from enchant, glyph, talent and trade links (PR #25270) --- src/server/game/Chat/ChatCommands/ChatCommandArgs.cpp | 10 +++++++++- src/server/game/Chat/HyperlinkTags.cpp | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/server/game/Chat/ChatCommands/ChatCommandArgs.cpp b/src/server/game/Chat/ChatCommands/ChatCommandArgs.cpp index fb94f6811b3..22eabb01613 100644 --- a/src/server/game/Chat/ChatCommands/ChatCommandArgs.cpp +++ b/src/server/game/Chat/ChatCommands/ChatCommandArgs.cpp @@ -54,12 +54,20 @@ char const* Trinity::ChatCommands::ArgInfo::TryConsume(GameTele struct SpellInfoVisitor { using value_type = SpellInfo const*; + value_type operator()(Hyperlink enchant) const { return enchant; }; + value_type operator()(Hyperlink glyph) const { return operator()(glyph->Glyph->SpellID); }; value_type operator()(Hyperlink spell) const { return *spell; } + value_type operator()(Hyperlink talent) const + { + return operator()(talent->Talent->SpellRank[talent->Rank - 1]); + }; + value_type operator()(Hyperlink trade) const { return trade->Spell; }; + value_type operator()(uint32 spellId) const { return sSpellMgr->GetSpellInfo(spellId); } }; char const* Trinity::ChatCommands::ArgInfo::TryConsume(SpellInfo const*& data, char const* args) { - Variant, uint32> val; + Variant, Hyperlink, Hyperlink, Hyperlink, Hyperlink, uint32> val; if ((args = CommandArgsConsumerSingle::TryConsumeTo(val, args))) data = val.visit(SpellInfoVisitor()); return args; diff --git a/src/server/game/Chat/HyperlinkTags.cpp b/src/server/game/Chat/HyperlinkTags.cpp index 6276cd0cafb..a933504b866 100644 --- a/src/server/game/Chat/HyperlinkTags.cpp +++ b/src/server/game/Chat/HyperlinkTags.cpp @@ -125,7 +125,7 @@ bool Trinity::Hyperlinks::LinkTags::talent::StoreTo(TalentLinkData& val, char co int8 rank; // talent links contain -1, we store if (!(t.TryConsumeTo(talentId) && t.TryConsumeTo(rank) && t.IsEmpty())) return false; - if (rank < -1 || rank > 4) + if (rank < -1 || rank >= MAX_TALENT_RANK) return false; val.Rank = rank+1; if (!(val.Talent = sTalentStore.LookupEntry(talentId))) -- cgit v1.2.3