diff options
Diffstat (limited to 'src/server/game/Globals/ObjectMgr.cpp')
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 11 |
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; } } |