diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Chat/HyperlinkTags.cpp | 18 | ||||
-rw-r--r-- | src/server/game/Chat/Hyperlinks.cpp | 9 | ||||
-rw-r--r-- | src/server/game/Chat/Hyperlinks.h | 1 | ||||
-rw-r--r-- | src/server/game/Spells/SpellMgr.h | 2 | ||||
-rw-r--r-- | src/server/shared/DataStores/DBCStructure.h | 10 |
5 files changed, 29 insertions, 11 deletions
diff --git a/src/server/game/Chat/HyperlinkTags.cpp b/src/server/game/Chat/HyperlinkTags.cpp index 35c47c04c0d..f34053360d6 100644 --- a/src/server/game/Chat/HyperlinkTags.cpp +++ b/src/server/game/Chat/HyperlinkTags.cpp @@ -183,11 +183,23 @@ bool Trinity::Hyperlinks::LinkTags::talent::StoreTo(TalentLinkData& val, std::st return false; if (rank < -1 || rank >= MAX_TALENT_RANK) return false; + val.Talent = sTalentStore.LookupEntry(talentId); val.Rank = rank+1; - if (!(val.Talent = sTalentStore.LookupEntry(talentId))) - return false; - if (val.Rank > 0 && !val.Talent->SpellRank[val.Rank - 1]) + if (!val.Talent) return false; + if (val.Rank > 0) + { + uint32 const spellId = val.Talent->SpellRank[val.Rank - 1]; + if (!spellId) + return false; + val.Spell = sSpellMgr->GetSpellInfo(spellId); + if (!val.Spell) + return false; + } + else + { + val.Spell = nullptr; + } return true; } diff --git a/src/server/game/Chat/Hyperlinks.cpp b/src/server/game/Chat/Hyperlinks.cpp index 8b82cb1e38c..06fe42b1fb1 100644 --- a/src/server/game/Chat/Hyperlinks.cpp +++ b/src/server/game/Chat/Hyperlinks.cpp @@ -277,9 +277,12 @@ struct LinkValidator<LinkTags::talent> { static bool IsTextValid(TalentLinkData const& data, std::string_view text) { - if (SpellInfo const* info = sSpellMgr->GetSpellInfo(data.Talent->SpellRank[0])) - return LinkValidator<LinkTags::spell>::IsTextValid(info, text); - return false; + SpellInfo const* info = data.Spell; + if (!info) + info = sSpellMgr->GetSpellInfo(data.Talent->SpellRank[0]); + if (!info) + return false; + return LinkValidator<LinkTags::spell>::IsTextValid(info, text); } static bool IsColorValid(TalentLinkData const&, HyperlinkColor c) diff --git a/src/server/game/Chat/Hyperlinks.h b/src/server/game/Chat/Hyperlinks.h index 4a263df4a01..b9399d153e4 100644 --- a/src/server/game/Chat/Hyperlinks.h +++ b/src/server/game/Chat/Hyperlinks.h @@ -77,6 +77,7 @@ namespace Trinity::Hyperlinks { TalentEntry const* Talent; uint8 Rank; + SpellInfo const* Spell; }; struct TradeskillLinkData diff --git a/src/server/game/Spells/SpellMgr.h b/src/server/game/Spells/SpellMgr.h index 7f691453bb7..4fcc7cb0e4a 100644 --- a/src/server/game/Spells/SpellMgr.h +++ b/src/server/game/Spells/SpellMgr.h @@ -733,6 +733,8 @@ class TC_GAME_API SpellMgr PetLevelupSpellMap mPetLevelupSpellMap; PetDefaultSpellsMap mPetDefaultSpellsMap; // only spells not listed in related mPetLevelupSpellMap entry SpellInfoMap mSpellInfoMap; + + friend class UnitTestDataLoader; }; #define sSpellMgr SpellMgr::instance() diff --git a/src/server/shared/DataStores/DBCStructure.h b/src/server/shared/DataStores/DBCStructure.h index 753067043b6..56ea11415fb 100644 --- a/src/server/shared/DataStores/DBCStructure.h +++ b/src/server/shared/DataStores/DBCStructure.h @@ -1663,15 +1663,15 @@ struct TalentEntry uint32 TabID; // 1 index in TalentTab.dbc (TalentTabEntry) uint32 TierID; // 2 uint32 ColumnIndex; // 3 - uint32 SpellRank[MAX_TALENT_RANK]; // 4-8 - //uint32 SpellRankUnused[4]; // 9-12 + std::array<uint32, MAX_TALENT_RANK> SpellRank; // 4-8 + //std::array<uint32, 4> SpellRankUnused; // 9-12 uint32 PrereqTalent; // 13 index in Talent.dbc (TalentEntry) - //uint32 PrereqTalentUnused[2]; // 14-15 + //std::array<uint32, 2> PrereqTalentUnused; // 14-15 uint32 PrereqRank; // 16 - //uint32 PrereqRankUnused[2]; // 17-18 + //std::array<uint32, 2> PrereqRankUnused; // 17-18 //uint32 Flags; // 19 //uint32 RequiredSpellID; // 20 all 0 - //uint32 CategoryMask[2]; // 21 its a 64 bit mask for pet 1<<CategoryEnumID in CreatureFamily.dbc + //std::array<uint32, 2> CategoryMask; // 21 its a 64 bit mask for pet 1<<CategoryEnumID in CreatureFamily.dbc }; struct TalentTabEntry |