diff options
-rw-r--r-- | src/client.cpp | 16 | ||||
-rw-r--r-- | src/resources/colordb.cpp | 2 | ||||
-rw-r--r-- | src/resources/emotedb.cpp | 2 | ||||
-rw-r--r-- | src/resources/itemdb.cpp | 2 | ||||
-rw-r--r-- | src/resources/monsterdb.cpp | 2 | ||||
-rw-r--r-- | src/resources/npcdb.cpp | 2 | ||||
-rw-r--r-- | src/statuseffect.cpp | 10 | ||||
-rw-r--r-- | src/statuseffect.h | 1 |
8 files changed, 24 insertions, 13 deletions
diff --git a/src/client.cpp b/src/client.cpp index aa48591f..93450805 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -422,6 +422,14 @@ Client::~Client() SDL_RemoveTimer(mLogicCounterId); SDL_RemoveTimer(mSecondsCounterId); + // Unload XML databases + ColorDB::unload(); + EmoteDB::unload(); + ItemDB::unload(); + MonsterDB::unload(); + NPCDB::unload(); + StatusEffect::unload(); + // Before config.write() since it writes the shortcuts to the config delete itemShortcut; delete emoteShortcut; @@ -575,14 +583,6 @@ int Client::exec() { delete game; game = 0; - - // Unload XML databases - ColorDB::unload(); - EmoteDB::unload(); - ItemDB::unload(); - MonsterDB::unload(); - NPCDB::unload(); - StatusEffect::unload(); } mOldState = mState; diff --git a/src/resources/colordb.cpp b/src/resources/colordb.cpp index 0041cee4..c35a5660 100644 --- a/src/resources/colordb.cpp +++ b/src/resources/colordb.cpp @@ -36,7 +36,7 @@ namespace void ColorDB::load() { if (mLoaded) - return; + unload(); XML::Document *doc = new XML::Document("hair.xml"); xmlNodePtr root = doc->rootNode(); diff --git a/src/resources/emotedb.cpp b/src/resources/emotedb.cpp index 117c0bab..fddab500 100644 --- a/src/resources/emotedb.cpp +++ b/src/resources/emotedb.cpp @@ -36,7 +36,7 @@ namespace void EmoteDB::load() { if (mLoaded) - return; + unload(); mLastEmote = 0; diff --git a/src/resources/itemdb.cpp b/src/resources/itemdb.cpp index 4638f00e..077012c7 100644 --- a/src/resources/itemdb.cpp +++ b/src/resources/itemdb.cpp @@ -108,7 +108,7 @@ static std::string normalized(const std::string &name) void ItemDB::load() { if (mLoaded) - return; + unload(); logger->log("Initializing item database..."); diff --git a/src/resources/monsterdb.cpp b/src/resources/monsterdb.cpp index e9afa7ef..5a796f5f 100644 --- a/src/resources/monsterdb.cpp +++ b/src/resources/monsterdb.cpp @@ -43,7 +43,7 @@ namespace void MonsterDB::load() { if (mLoaded) - return; + unload(); mUnknown.addSprite("error.xml"); diff --git a/src/resources/npcdb.cpp b/src/resources/npcdb.cpp index 4bc5a6e4..bc36a3b4 100644 --- a/src/resources/npcdb.cpp +++ b/src/resources/npcdb.cpp @@ -35,7 +35,7 @@ namespace void NPCDB::load() { if (mLoaded) - return; + unload(); NPCsprite *unknownSprite = new NPCsprite; unknownSprite->sprite = "error.xml"; diff --git a/src/statuseffect.cpp b/src/statuseffect.cpp index 49619f8a..6ab0b8fa 100644 --- a/src/statuseffect.cpp +++ b/src/statuseffect.cpp @@ -32,6 +32,8 @@ #define STATUS_EFFECTS_FILE "status-effects.xml" +bool StatusEffect::mLoaded = false; + StatusEffect::StatusEffect() : mPersistentParticleEffect(false) {} @@ -113,6 +115,9 @@ StatusEffect *StatusEffect::getStunEffect(int index, bool enabling) void StatusEffect::load() { + if (mLoaded) + unload(); + XML::Document doc(STATUS_EFFECTS_FILE); xmlNodePtr rootNode = doc.rootNode(); @@ -175,8 +180,13 @@ void unloadMap(std::map<int, StatusEffect *> map) void StatusEffect::unload() { + if (!mLoaded) + return; + unloadMap(statusEffects[0]); unloadMap(statusEffects[1]); unloadMap(stunEffects[0]); unloadMap(stunEffects[1]); + + mLoaded = false; } diff --git a/src/statuseffect.h b/src/statuseffect.h index 0fed5748..fc0e7336 100644 --- a/src/statuseffect.h +++ b/src/statuseffect.h @@ -98,6 +98,7 @@ public: static void unload(); private: + static bool mLoaded; std::string mMessage; std::string mSFXEffect; |