From 1e6f5283eceff138873ec54159ad8f716ed39b45 Mon Sep 17 00:00:00 2001 From: Bjørn Lindeijer <bjorn@lindeijer.nl> Date: Sat, 23 Dec 2006 18:01:01 +0000 Subject: Load the databases at the start of the LOGIN state, after the updates are loaded. --- ChangeLog | 4 ++++ src/main.cpp | 11 ++++++----- src/resources/equipmentdb.cpp | 3 +++ src/resources/itemdb.cpp | 8 ++++++++ src/resources/itemdb.h | 6 +++--- src/resources/monsterdb.cpp | 8 ++++++++ 6 files changed, 32 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index ce03c9a3..1a0cd200 100644 --- a/ChangeLog +++ b/ChangeLog @@ -12,6 +12,10 @@ sounds from the release. They will be released dynamically only. * data/graphics/tiles/snow_x3.png: Added bottom of Christmas tree by pauan. + * src/main.cpp, src/resources/itemdb.h, src/resources/monsterdb.cpp, + src/resources/itemdb.cpp, src/resources/equipmentdb.cpp: Load the + databases at the start of the LOGIN state, after the updates are + loaded. 2006-12-22 Bjørn Lindeijer <bjorn@lindeijer.nl> diff --git a/src/main.cpp b/src/main.cpp index f54b0792..1a171d84 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -286,11 +286,6 @@ void init_engine(const Options &options) errorMessage = err; logger->log("Warning: %s", err); } - - // Load XML databases - EquipmentDB::load(); - ItemDB::load(); - MonsterDB::load(); } /** Clear the engine */ @@ -625,6 +620,12 @@ int main(int argc, char *argv[]) switch (state) { case LOGIN_STATE: logger->log("State: LOGIN"); + + // Load XML databases + EquipmentDB::load(); + ItemDB::load(); + MonsterDB::load(); + if (!loginData.password.empty()) { state = ACCOUNT_STATE; } else { diff --git a/src/resources/equipmentdb.cpp b/src/resources/equipmentdb.cpp index 78ae3b6a..52a9fbd3 100644 --- a/src/resources/equipmentdb.cpp +++ b/src/resources/equipmentdb.cpp @@ -40,6 +40,9 @@ namespace void EquipmentDB::load() { + if (mLoaded) + return; + logger->log("Initializing equipment database..."); mUnknown.setSprite("error.xml", 0); mUnknown.setSprite("error.xml", 1); diff --git a/src/resources/itemdb.cpp b/src/resources/itemdb.cpp index b91e34cc..f914af47 100644 --- a/src/resources/itemdb.cpp +++ b/src/resources/itemdb.cpp @@ -37,11 +37,15 @@ namespace { ItemDB::ItemInfos mItemInfos; ItemInfo mUnknown; + bool mLoaded = false; } void ItemDB::load() { + if (mLoaded) + return; + logger->log("Initializing item database..."); mUnknown.setName("Unknown item"); @@ -150,6 +154,8 @@ void ItemDB::load() } xmlFreeDoc(doc); + + mLoaded = true; } void ItemDB::unload() @@ -159,6 +165,8 @@ void ItemDB::unload() delete i->second; } mItemInfos.clear(); + + mLoaded = false; } const ItemInfo& diff --git a/src/resources/itemdb.h b/src/resources/itemdb.h index 5922984a..c080194b 100644 --- a/src/resources/itemdb.h +++ b/src/resources/itemdb.h @@ -29,17 +29,17 @@ #include <map> /** - * The namespace that holds the item information + * The namespace that holds the item information. */ namespace ItemDB { /** - * Loads the item data from Items.xml + * Loads the item data from <code>items.xml</code>. */ void load(); /** - * Frees item data + * Frees item data. */ void unload(); diff --git a/src/resources/monsterdb.cpp b/src/resources/monsterdb.cpp index fb03f6c1..e4406f9c 100644 --- a/src/resources/monsterdb.cpp +++ b/src/resources/monsterdb.cpp @@ -34,11 +34,15 @@ namespace { MonsterDB::MonsterInfos mMonsterInfos; MonsterInfo mUnknown; + bool mLoaded = false; } void MonsterDB::load() { + if (mLoaded) + return; + mUnknown.setSprite("error.xml"); mUnknown.setName("unnamed"); @@ -123,6 +127,8 @@ MonsterDB::load() } mMonsterInfos[XML::getProperty(monsterNode, "id", 0)] = currentInfo; } + + mLoaded = true; } void @@ -131,6 +137,8 @@ MonsterDB::unload() for_each ( mMonsterInfos.begin(), mMonsterInfos.end(), make_dtor(mMonsterInfos)); mMonsterInfos.clear(); + + mLoaded = false; } -- cgit v1.2.3-70-g09d2