aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Chat/HyperlinkTags.cpp18
-rw-r--r--src/server/game/Chat/Hyperlinks.cpp9
-rw-r--r--src/server/game/Chat/Hyperlinks.h1
-rw-r--r--src/server/game/Spells/SpellMgr.h2
-rw-r--r--src/server/shared/DataStores/DBCStructure.h10
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