aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2018-09-17 20:35:35 +0200
committerTreeston <treeston.mmoc@gmail.com>2018-09-17 20:36:02 +0200
commit152f3fc3e3f94a92f3648379ff037d4eabd479bb (patch)
treedf9946e0c59c439c0da62fa3e44f5bd57a42b149
parent5b0f4009df4cde413c92c73467ca9a63e79a772b (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.cpp8
-rw-r--r--src/server/game/Chat/Hyperlinks.h7
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; } }