diff options
| author | leak <leakzx@googlemail.com> | 2011-04-28 22:16:13 +0200 |
|---|---|---|
| committer | leak <leakzx@googlemail.com> | 2011-04-28 22:16:13 +0200 |
| commit | 5aeb4fe794174c1269b4efcb43556a8b69d2b26a (patch) | |
| tree | de6d43ceed0cb2a0242446d6c2388e8b97acb24d /src/server/game/Globals/ObjectMgr.cpp | |
| parent | 19cab2c50857045788bd80e202ed661e49ed8bba (diff) | |
Core/ObjectMgr: Refactor sInstanceTemplate
Diffstat (limited to 'src/server/game/Globals/ObjectMgr.cpp')
| -rwxr-xr-x | src/server/game/Globals/ObjectMgr.cpp | 52 |
1 files changed, 38 insertions, 14 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index ca9690c6775..a39d8665486 100755 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -5600,29 +5600,53 @@ void ObjectMgr::LoadInstanceTemplate() { uint32 oldMSTime = getMSTime(); - SQLInstanceLoader loader; - loader.Load(sInstanceTemplate); + QueryResult result = WorldDatabase.Query("SELECT map, parent, script, allowMount FROM instance_template"); - for (uint32 i = 0; i < sInstanceTemplate.MaxEntry; i++) + if (!result) { - InstanceTemplate* temp = const_cast<InstanceTemplate*>(ObjectMgr::GetInstanceTemplate(i)); - if (!temp) - continue; + sLog->outString(">> Loaded 0 instance templates. DB table `page_text` is empty!"); + sLog->outString(); + return; + } + + uint32 count = 0; + do + { + Field* fields = result->Fetch(); - if (!MapManager::IsValidMAP(temp->map)) - sLog->outErrorDb("ObjectMgr::LoadInstanceTemplate: bad mapid %d for template!", temp->map); + uint16 mapID = fields[0].GetUInt16(); - if (!MapManager::IsValidMapCoord(temp->parent,temp->startLocX,temp->startLocY,temp->startLocZ,temp->startLocO)) + if (!MapManager::IsValidMAP(mapID, true)) { - sLog->outErrorDb("ObjectMgr::LoadInstanceTemplate: bad parent entrance coordinates for map id %d template!", temp->map); - temp->parent = 0; // will have wrong continent 0 parent, at least existed + sLog->outErrorDb("ObjectMgr::LoadInstanceTemplate: bad mapid %d for template!", mapID); + continue; } + + InstanceTemplate instanceTemplate; + + instanceTemplate.AllowMount = fields[3].GetBool(); + instanceTemplate.Parent = fields[1].GetUInt16(); + instanceTemplate.ScriptId = sObjectMgr->GetScriptId(fields[2].GetCString()); + + InstanceTemplateStore[mapID] = instanceTemplate; + + ++count; } + while (result->NextRow()); - sLog->outString(">> Loaded %u Instance Template definitions in %u ms", sInstanceTemplate.RecordCount, GetMSTimeDiffToNow(oldMSTime)); + sLog->outString(">> Loaded %u instance templates in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); sLog->outString(); } +InstanceTemplate const* ObjectMgr::GetInstanceTemplate(uint32 mapID) +{ + InstanceTemplateContainer::const_iterator itr = InstanceTemplateStore.find(uint16(mapID)); + if (itr != InstanceTemplateStore.end()) + return &(itr->second); + + return NULL; +} + void ObjectMgr::LoadInstanceEncounters() { uint32 oldMSTime = getMSTime(); @@ -6608,12 +6632,12 @@ AreaTrigger const* ObjectMgr::GetGoBackTrigger(uint32 Map) const if (mapEntry->IsDungeon()) { - const InstanceTemplate *iTemplate = ObjectMgr::GetInstanceTemplate(Map); + const InstanceTemplate *iTemplate = sObjectMgr->GetInstanceTemplate(Map); if (!iTemplate) return NULL; - parentId = iTemplate->parent; + parentId = iTemplate->Parent; useParentDbValue = true; } |
