aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Globals/ObjectMgr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Globals/ObjectMgr.cpp')
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index ec0bff126d2..01cbae72fd8 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -4048,7 +4048,7 @@ void ObjectMgr::LoadPlayerInfo()
{
uint32 oldMSTime = getMSTime();
- QueryResult result = WorldDatabase.PQuery("SELECT raceMask, classMask, spell FROM playercreateinfo_cast_spell");
+ QueryResult result = WorldDatabase.PQuery("SELECT raceMask, classMask, spell, createMode FROM playercreateinfo_cast_spell");
if (!result)
TC_LOG_INFO("server.loading", ">> Loaded 0 player create cast spells. DB table `playercreateinfo_cast_spell` is empty.");
@@ -4062,6 +4062,7 @@ void ObjectMgr::LoadPlayerInfo()
Trinity::RaceMask<uint64> raceMask = { fields[0].GetUInt64() };
uint32 classMask = fields[1].GetUInt32();
uint32 spellId = fields[2].GetUInt32();
+ int8 playerCreateMode = fields[3].GetInt8();
if (raceMask && !(raceMask.RawValue & RACEMASK_ALL_PLAYABLE))
{
@@ -4075,6 +4076,12 @@ void ObjectMgr::LoadPlayerInfo()
continue;
}
+ if (playerCreateMode < 0 || playerCreateMode >= AsUnderlyingType(PlayerCreateMode::Max))
+ {
+ TC_LOG_ERROR("sql.sql", "Uses invalid createMode %u in `playercreateinfo_cast_spell` table, ignoring.", playerCreateMode);
+ continue;
+ }
+
for (uint32 raceIndex = RACE_HUMAN; raceIndex < MAX_RACES; ++raceIndex)
{
if (!raceMask || raceMask.HasRace(raceIndex))
@@ -4085,7 +4092,7 @@ void ObjectMgr::LoadPlayerInfo()
{
if (auto& info = _playerInfo[raceIndex][classIndex])
{
- info->castSpells.push_back(spellId);
+ info->castSpells[playerCreateMode].push_back(spellId);
++count;
}
}