diff options
author | Treeston <treeston.mmoc@gmail.com> | 2018-09-17 20:35:35 +0200 |
---|---|---|
committer | Treeston <treeston.mmoc@gmail.com> | 2018-09-17 20:36:02 +0200 |
commit | 152f3fc3e3f94a92f3648379ff037d4eabd479bb (patch) | |
tree | df9946e0c59c439c0da62fa3e44f5bd57a42b149 | |
parent | 5b0f4009df4cde413c92c73467ca9a63e79a772b (diff) |
Core/Chat: Fix tradeskill hyperlinks - embedded GUID is now properly read as base 16 (not 10). Closes #22446.
-rw-r--r-- | src/server/game/Chat/HyperlinkTags.cpp | 8 | ||||
-rw-r--r-- | src/server/game/Chat/Hyperlinks.h | 7 |
2 files changed, 9 insertions, 6 deletions
diff --git a/src/server/game/Chat/HyperlinkTags.cpp b/src/server/game/Chat/HyperlinkTags.cpp index 4fa14dc7b1b..a13a3348dd4 100644 --- a/src/server/game/Chat/HyperlinkTags.cpp +++ b/src/server/game/Chat/HyperlinkTags.cpp @@ -135,13 +135,9 @@ bool Trinity::Hyperlinks::LinkTags::trade::StoreTo(TradeskillLinkData& val, char { HyperlinkDataTokenizer t(pos, len); uint32 spellId; - uint64 guid; if (!t.TryConsumeTo(spellId)) return false; val.Spell = sSpellMgr->GetSpellInfo(spellId); - if (!(val.Spell && val.Spell->Effects[0].Effect == SPELL_EFFECT_TRADE_SKILL && t.TryConsumeTo(val.CurValue) && - t.TryConsumeTo(val.MaxValue) && t.TryConsumeTo(guid) && t.TryConsumeTo(val.KnownRecipes) && t.IsEmpty())) - return false; - val.Owner.Set(guid); - return true; + return (val.Spell && val.Spell->Effects[0].Effect == SPELL_EFFECT_TRADE_SKILL && t.TryConsumeTo(val.CurValue) && + t.TryConsumeTo(val.MaxValue) && t.TryConsumeTo(val.Owner) && t.TryConsumeTo(val.KnownRecipes) && t.IsEmpty()); } diff --git a/src/server/game/Chat/Hyperlinks.h b/src/server/game/Chat/Hyperlinks.h index 6b5aa4b0d86..5808cbe9447 100644 --- a/src/server/game/Chat/Hyperlinks.h +++ b/src/server/game/Chat/Hyperlinks.h @@ -121,6 +121,13 @@ namespace LinkTags { catch (...) { return false; } return true; } + + static bool StoreTo(ObjectGuid& val, char const* pos, size_t len) + { + try { val.Set(std::stoul(std::string(pos, len), nullptr, 16)); } + catch (...) { return false; } + return true; + } }; #define make_base_tag(ltag, type) struct ltag : public base_tag { using value_type = type; static constexpr char const* tag() { return #ltag; } } |