diff options
author | QAston <qaston@gmail.com> | 2011-07-26 23:09:28 +0200 |
---|---|---|
committer | QAston <qaston@gmail.com> | 2011-07-26 23:09:28 +0200 |
commit | b0fe236265465a0f39aa98a8cee2916d1ccfaa02 (patch) | |
tree | 77ed4bde46de983c280a542d657a30b24865638c /src/server/game/Globals/ObjectMgr.cpp | |
parent | 29c228a80170e4264129d4e3bed4d2fc41aca5a7 (diff) |
Core: Use new SpellInfo class in core. Sadly, this commit is not compatibile with some of the custom code. To make your code work again you may need to change:
*SpellEntry is now SpellInfo
*GetSpellProto is now GetSpellInfo
*SpellEntry::Effect*[effIndex] is now avalible under SpellInfo.Effects[effIndex].*
*sSpellStore.LookupEntry is no longer valid, use sSpellMgr->GetSpellInfo()
*SpellFunctions from SpellMgr.h like DoSpellStuff(spellId) are now: spellInfo->DoStuff()
*SpellMgr::CalculateEffectValue and similar functions are now avalible in SpellEffectInfo class.
*GET_SPELL macro is removed, code which used it is moved to SpellMgr::LoadDbcDataCorrections
*code which affected dbc data in SpellMgr::LoadSpellCustomAttr is now moved to LoadDbcDataCorrections
Diffstat (limited to 'src/server/game/Globals/ObjectMgr.cpp')
-rwxr-xr-x | src/server/game/Globals/ObjectMgr.cpp | 98 |
1 files changed, 51 insertions, 47 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 79df2b9fa73..2cff8f4d219 100755 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -587,7 +587,7 @@ void ObjectMgr::LoadCreatureTemplateAddons() creatureAddon.auras.resize(tokens.size()); for (Tokens::iterator itr = tokens.begin(); itr != tokens.end(); ++itr) { - SpellEntry const *AdditionalSpellInfo = sSpellStore.LookupEntry(uint32(atol(*itr))); + SpellInfo const *AdditionalSpellInfo = sSpellMgr->GetSpellInfo(uint32(atol(*itr))); if (!AdditionalSpellInfo) { sLog->outErrorDb("Creature (GUID: %u) has wrong spell %u defined in `auras` field in `creature_addon`.", entry, uint32(atol(*itr))); @@ -869,7 +869,7 @@ void ObjectMgr::CheckCreatureTemplate(CreatureTemplate const* cInfo) for (uint8 j = 0; j < CREATURE_MAX_SPELLS; ++j) { - if (cInfo->spells[j] && !sSpellStore.LookupEntry(cInfo->spells[j])) + if (cInfo->spells[j] && !sSpellMgr->GetSpellInfo(cInfo->spells[j])) { sLog->outErrorDb("Creature (Entry: %u) has non-existing Spell%d (%u), set to 0.", cInfo->Entry, j+1, cInfo->spells[j]); const_cast<CreatureTemplate*>(cInfo)->spells[j] = 0; @@ -955,7 +955,7 @@ void ObjectMgr::LoadCreatureAddons() creatureAddon.auras.resize(tokens.size()); for (Tokens::iterator itr = tokens.begin(); itr != tokens.end(); ++itr) { - SpellEntry const *AdditionalSpellInfo = sSpellStore.LookupEntry(uint32(atol(*itr))); + SpellInfo const *AdditionalSpellInfo = sSpellMgr->GetSpellInfo(uint32(atol(*itr))); if (!AdditionalSpellInfo) { sLog->outErrorDb("Creature (GUID: %u) has wrong spell %u defined in `auras` field in `creature_addon`.", guid, uint32(atol(*itr))); @@ -2401,7 +2401,7 @@ void ObjectMgr::LoadItemTemplates() } } - if (itemTemplate.RequiredSpell && !sSpellStore.LookupEntry(itemTemplate.RequiredSpell)) + if (itemTemplate.RequiredSpell && !sSpellMgr->GetSpellInfo(itemTemplate.RequiredSpell)) { sLog->outErrorDb("Item (Entry: %u) has a wrong (non-existing) spell in RequiredSpell (%u)", entry, itemTemplate.RequiredSpell); itemTemplate.RequiredSpell = 0; @@ -2509,7 +2509,7 @@ void ObjectMgr::LoadItemTemplates() } else if (itemTemplate.Spells[1].SpellId != -1) { - SpellEntry const* spellInfo = sSpellStore.LookupEntry(itemTemplate.Spells[1].SpellId); + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(itemTemplate.Spells[1].SpellId); if (!spellInfo && !sDisableMgr->IsDisabledFor(DISABLE_TYPE_SPELL, itemTemplate.Spells[1].SpellId, NULL)) { sLog->outErrorDb("Item (Entry: %u) has wrong (not existing) spell in spellid_%d (%d)", entry, 1+1, itemTemplate.Spells[1].SpellId); @@ -2557,7 +2557,7 @@ void ObjectMgr::LoadItemTemplates() if (itemTemplate.Spells[j].SpellId && itemTemplate.Spells[j].SpellId != -1) { - SpellEntry const* spellInfo = sSpellStore.LookupEntry(itemTemplate.Spells[j].SpellId); + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(itemTemplate.Spells[j].SpellId); if (!spellInfo && !sDisableMgr->IsDisabledFor(DISABLE_TYPE_SPELL, itemTemplate.Spells[j].SpellId, NULL)) { sLog->outErrorDb("Item (Entry: %u) has wrong (not existing) spell in spellid_%d (%d)", entry, j+1, itemTemplate.Spells[j].SpellId); @@ -4018,7 +4018,7 @@ void ObjectMgr::LoadQuests() if (qinfo->SrcSpell) { - SpellEntry const* spellInfo = sSpellStore.LookupEntry(qinfo->SrcSpell); + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(qinfo->SrcSpell); if (!spellInfo) { sLog->outErrorDb("Quest %u has `SrcSpell` = %u but spell %u doesn't exist, quest can't be done.", @@ -4090,7 +4090,7 @@ void ObjectMgr::LoadQuests() uint32 id = qinfo->ReqSpell[j]; if (id) { - SpellEntry const* spellInfo = sSpellStore.LookupEntry(id); + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(id); if (!spellInfo) { sLog->outErrorDb("Quest %u has `ReqSpellCast%d` = %u but spell %u does not exist, quest can't be done.", @@ -4103,8 +4103,8 @@ void ObjectMgr::LoadQuests() bool found = false; for (uint8 k = 0; k < MAX_SPELL_EFFECTS; ++k) { - if ((spellInfo->Effect[k] == SPELL_EFFECT_QUEST_COMPLETE && uint32(spellInfo->EffectMiscValue[k]) == qinfo->QuestId) || - spellInfo->Effect[k] == SPELL_EFFECT_SEND_EVENT) + if ((spellInfo->Effects[k].Effect == SPELL_EFFECT_QUEST_COMPLETE && uint32(spellInfo->Effects[k].MiscValue) == qinfo->QuestId) || + spellInfo->Effects[k].Effect == SPELL_EFFECT_SEND_EVENT) { found = true; break; @@ -4248,7 +4248,7 @@ void ObjectMgr::LoadQuests() if (qinfo->RewSpell) { - SpellEntry const* spellInfo = sSpellStore.LookupEntry(qinfo->RewSpell); + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(qinfo->RewSpell); if (!spellInfo) { @@ -4274,7 +4274,7 @@ void ObjectMgr::LoadQuests() if (qinfo->RewSpellCast > 0) { - SpellEntry const* spellInfo = sSpellStore.LookupEntry(qinfo->RewSpellCast); + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(qinfo->RewSpellCast); if (!spellInfo) { @@ -4366,18 +4366,18 @@ void ObjectMgr::LoadQuests() } // check QUEST_TRINITY_FLAGS_EXPLORATION_OR_EVENT for spell with SPELL_EFFECT_QUEST_COMPLETE - for (uint32 i = 0; i < sSpellStore.GetNumRows(); ++i) + for (uint32 i = 0; i < sSpellMgr->GetSpellInfoStoreSize(); ++i) { - SpellEntry const *spellInfo = sSpellStore.LookupEntry(i); + SpellInfo const *spellInfo = sSpellMgr->GetSpellInfo(i); if (!spellInfo) continue; for (uint8 j = 0; j < MAX_SPELL_EFFECTS; ++j) { - if (spellInfo->Effect[j] != SPELL_EFFECT_QUEST_COMPLETE) + if (spellInfo->Effects[j].Effect != SPELL_EFFECT_QUEST_COMPLETE) continue; - uint32 quest_id = spellInfo->EffectMiscValue[j]; + uint32 quest_id = spellInfo->Effects[j].MiscValue; Quest const* quest = GetQuestTemplate(quest_id); @@ -4707,7 +4707,7 @@ void ObjectMgr::LoadScripts(ScriptsType type) case SCRIPT_COMMAND_REMOVE_AURA: { - if (!sSpellStore.LookupEntry(tmp.RemoveAura.SpellID)) + if (!sSpellMgr->GetSpellInfo(tmp.RemoveAura.SpellID)) { sLog->outErrorDb("Table `%s` using non-existent spell (id: %u) in SCRIPT_COMMAND_REMOVE_AURA for script id %u", tableName.c_str(), tmp.RemoveAura.SpellID, tmp.id); @@ -4724,7 +4724,7 @@ void ObjectMgr::LoadScripts(ScriptsType type) case SCRIPT_COMMAND_CAST_SPELL: { - if (!sSpellStore.LookupEntry(tmp.CastSpell.SpellID)) + if (!sSpellMgr->GetSpellInfo(tmp.CastSpell.SpellID)) { sLog->outErrorDb("Table `%s` using non-existent spell (id: %u) in SCRIPT_COMMAND_CAST_SPELL for script id %u", tableName.c_str(), tmp.CastSpell.SpellID, tmp.id); @@ -4830,7 +4830,7 @@ void ObjectMgr::LoadSpellScripts() for (ScriptMapMap::const_iterator itr = sSpellScripts.begin(); itr != sSpellScripts.end(); ++itr) { uint32 spellId = uint32(itr->first) & 0x00FFFFFF; - SpellEntry const* spellInfo = sSpellStore.LookupEntry(spellId); + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId); if (!spellInfo) { @@ -4840,7 +4840,7 @@ void ObjectMgr::LoadSpellScripts() uint8 i = (uint8)((uint32(itr->first) >> 24) & 0x000000FF); //check for correct spellEffect - if (!spellInfo->Effect[i] || (spellInfo->Effect[i] != SPELL_EFFECT_SCRIPT_EFFECT && spellInfo->Effect[i] != SPELL_EFFECT_DUMMY)) + if (!spellInfo->Effects[i].Effect || (spellInfo->Effects[i].Effect != SPELL_EFFECT_SCRIPT_EFFECT && spellInfo->Effects[i].Effect != SPELL_EFFECT_DUMMY)) sLog->outErrorDb("Table `spell_scripts` - spell %u effect %u is not SPELL_EFFECT_SCRIPT_EFFECT or SPELL_EFFECT_DUMMY", spellId, i); } } @@ -4857,17 +4857,17 @@ void ObjectMgr::LoadEventScripts() evt_scripts.insert(eventId); // Load all possible script entries from spells - for (uint32 i = 1; i < sSpellStore.GetNumRows(); ++i) + for (uint32 i = 1; i < sSpellMgr->GetSpellInfoStoreSize(); ++i) { - SpellEntry const* spell = sSpellStore.LookupEntry(i); + SpellInfo const* spell = sSpellMgr->GetSpellInfo(i); if (spell) { for (uint8 j = 0; j < MAX_SPELL_EFFECTS; ++j) { - if (spell->Effect[j] == SPELL_EFFECT_SEND_EVENT) + if (spell->Effects[j].Effect == SPELL_EFFECT_SEND_EVENT) { - if (spell->EffectMiscValue[j]) - evt_scripts.insert(spell->EffectMiscValue[j]); + if (spell->Effects[j].MiscValue) + evt_scripts.insert(spell->Effects[j].MiscValue); } } } @@ -4956,8 +4956,8 @@ void ObjectMgr::LoadSpellScriptNames() spellId = -spellId; } - SpellEntry const* spellEntry = sSpellStore.LookupEntry(spellId); - if (!spellEntry) + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId); + if (!spellInfo) { sLog->outErrorDb("Scriptname:`%s` spell (spell_id:%d) does not exist in `Spell.dbc`.", scriptName, fields[0].GetInt32()); continue; @@ -4970,14 +4970,14 @@ void ObjectMgr::LoadSpellScriptNames() sLog->outErrorDb("Scriptname:`%s` spell (spell_id:%d) is not first rank of spell.", scriptName, fields[0].GetInt32()); continue; } - while(spellId) + while(spellInfo) { - mSpellScripts.insert(SpellScriptsMap::value_type(spellId, GetScriptId(scriptName))); - spellId = sSpellMgr->GetNextSpellInChain(spellId); + mSpellScripts.insert(SpellScriptsMap::value_type(spellInfo->Id, GetScriptId(scriptName))); + spellInfo = sSpellMgr->GetSpellInfo(spellInfo->Id)->GetNextRankSpell(); } } else - mSpellScripts.insert(SpellScriptsMap::value_type(spellId, GetScriptId(scriptName))); + mSpellScripts.insert(SpellScriptsMap::value_type(spellInfo->Id, GetScriptId(scriptName))); ++count; } while (result->NextRow()); @@ -5001,7 +5001,7 @@ void ObjectMgr::ValidateSpellScripts() for (SpellScriptsMap::iterator itr = mSpellScripts.begin(); itr != mSpellScripts.end();) { - SpellEntry const* spellEntry = sSpellStore.LookupEntry(itr->first); + SpellInfo const* spellEntry = sSpellMgr->GetSpellInfo(itr->first); std::vector<std::pair<SpellScriptLoader *, SpellScriptsMap::iterator> > SpellScriptLoaders; sScriptMgr->CreateSpellScriptLoaders(itr->first, SpellScriptLoaders); itr = mSpellScripts.upper_bound(itr->first); @@ -5237,7 +5237,7 @@ void ObjectMgr::LoadInstanceEncounters() break; } case ENCOUNTER_CREDIT_CAST_SPELL: - if (!sSpellStore.LookupEntry(creditEntry)) + if (!sSpellMgr->GetSpellInfo(creditEntry)) { sLog->outErrorDb("Table `instance_encounters` has an invalid spell (entry %u) linked to the encounter %u (%s), skipped!", creditEntry, entry, dungeonEncounter->encounterName[0]); continue; @@ -6430,7 +6430,7 @@ inline void CheckGOLinkedTrapId(GameObjectTemplate const* goInfo, uint32 dataN, inline void CheckGOSpellId(GameObjectTemplate const* goInfo, uint32 dataN, uint32 N) { - if (sSpellStore.LookupEntry(dataN)) + if (sSpellMgr->GetSpellInfo(dataN)) return; sLog->outErrorDb("Gameobject (Entry: %u GoType: %u) have data%d=%u but Spell (Entry %u) not exist.", @@ -7208,7 +7208,7 @@ void ObjectMgr::LoadNPCSpellClickSpells() } uint32 spellid = fields[1].GetUInt32(); - SpellEntry const *spellinfo = sSpellStore.LookupEntry(spellid); + SpellInfo const *spellinfo = sSpellMgr->GetSpellInfo(spellid); if (!spellinfo) { sLog->outErrorDb("Table npc_spellclick_spells references unknown spellid %u. Skipping entry.", spellid); @@ -7218,7 +7218,7 @@ void ObjectMgr::LoadNPCSpellClickSpells() uint32 auraRequired = fields[6].GetUInt32(); if (auraRequired) { - SpellEntry const *aurReqInfo = sSpellStore.LookupEntry(auraRequired); + SpellInfo const *aurReqInfo = sSpellMgr->GetSpellInfo(auraRequired); if (!aurReqInfo) { sLog->outErrorDb("Table npc_spellclick_spells references unknown aura required %u. Skipping entry.", auraRequired); @@ -7229,7 +7229,7 @@ void ObjectMgr::LoadNPCSpellClickSpells() uint32 auraForbidden = fields[7].GetUInt32(); if (auraForbidden) { - SpellEntry const *aurForInfo = sSpellStore.LookupEntry(auraForbidden); + SpellInfo const *aurForInfo = sSpellMgr->GetSpellInfo(auraForbidden); if (!aurForInfo) { sLog->outErrorDb("Table npc_spellclick_spells references unknown aura forbidden %u. Skipping entry.", auraForbidden); @@ -8219,7 +8219,7 @@ void ObjectMgr::AddSpellToTrainer(uint32 entry, uint32 spell, uint32 spellCost, return; } - SpellEntry const *spellinfo = sSpellStore.LookupEntry(spell); + SpellInfo const *spellinfo = sSpellMgr->GetSpellInfo(spell); if (!spellinfo) { sLog->outErrorDb("Table `npc_trainer` contains an entry (Entry: %u) for a non-existing spell (Spell: %u), ignoring", entry, spell); @@ -8248,28 +8248,32 @@ void ObjectMgr::AddSpellToTrainer(uint32 entry, uint32 spell, uint32 spellCost, trainerSpell.reqLevel = reqLevel; if (!trainerSpell.reqLevel) - trainerSpell.reqLevel = spellinfo->spellLevel; + trainerSpell.reqLevel = spellinfo->SpellLevel; // calculate learned spell for profession case when stored cast-spell trainerSpell.learnedSpell[0] = spell; for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) { - if (spellinfo->Effect[i] != SPELL_EFFECT_LEARN_SPELL) + if (spellinfo->Effects[i].Effect != SPELL_EFFECT_LEARN_SPELL) continue; if (trainerSpell.learnedSpell[0] == spell) trainerSpell.learnedSpell[0] = 0; // player must be able to cast spell on himself - if (spellinfo->EffectImplicitTargetA[i] != 0 && spellinfo->EffectImplicitTargetA[i] != TARGET_UNIT_TARGET_ALLY - && spellinfo->EffectImplicitTargetA[i] != TARGET_UNIT_TARGET_ANY && spellinfo->EffectImplicitTargetA[i] != TARGET_UNIT_CASTER) + if (spellinfo->Effects[i].TargetA != 0 && spellinfo->Effects[i].TargetA != TARGET_UNIT_TARGET_ALLY + && spellinfo->Effects[i].TargetA != TARGET_UNIT_TARGET_ANY && spellinfo->Effects[i].TargetA != TARGET_UNIT_CASTER) { sLog->outErrorDb("Table `npc_trainer` has spell %u for trainer entry %u with learn effect which has incorrect target type, ignoring learn effect!", spell, entry); continue; } - trainerSpell.learnedSpell[i] = spellinfo->EffectTriggerSpell[i]; + trainerSpell.learnedSpell[i] = spellinfo->Effects[i].TriggerSpell; - if (trainerSpell.learnedSpell[i] && SpellMgr::IsProfessionSpell(trainerSpell.learnedSpell[i])) - data.trainerType = 2; + if (trainerSpell.learnedSpell[i]) + { + SpellInfo const* learnedSpellInfo = sSpellMgr->GetSpellInfo(trainerSpell.learnedSpell[i]); + if (learnedSpellInfo && learnedSpellInfo->IsProfession()) + data.trainerType = 2; + } } return; @@ -8925,9 +8929,9 @@ void ObjectMgr::LoadFactionChangeSpells() uint32 alliance = fields[0].GetUInt32(); uint32 horde = fields[1].GetUInt32(); - if (!sSpellStore.LookupEntry(alliance)) + if (!sSpellMgr->GetSpellInfo(alliance)) sLog->outErrorDb("Spell %u referenced in `player_factionchange_spells` does not exist, pair skipped!", alliance); - else if (!sSpellStore.LookupEntry(horde)) + else if (!sSpellMgr->GetSpellInfo(horde)) sLog->outErrorDb("Spell %u referenced in `player_factionchange_spells` does not exist, pair skipped!", horde); else factionchange_spells[alliance] = horde; |