summaryrefslogtreecommitdiff
path: root/src/client.cpp
diff options
context:
space:
mode:
authorYohann Ferreira <yohann_dot_ferreira_at_orange_dot_efer>2011-01-13 17:58:50 +0100
committerYohann Ferreira <yohann_dot_ferreira_at_orange_dot_efer>2011-01-13 17:58:50 +0100
commit715d07feeb01a3f633aa42aeb40a524c16ca321e (patch)
tree68eec12d328476a9f303cc0584ecb3cd6fa868af /src/client.cpp
parent83a3b6f920f446b3001725554ab15bed34d6f368 (diff)
downloadmana-715d07feeb01a3f633aa42aeb40a524c16ca321e.tar.gz
mana-715d07feeb01a3f633aa42aeb40a524c16ca321e.tar.bz2
mana-715d07feeb01a3f633aa42aeb40a524c16ca321e.tar.xz
mana-715d07feeb01a3f633aa42aeb40a524c16ca321e.zip
Made the client handle better the lack of items.xml file.
Now the client returns to server choice dialog with a warning instead of aborting. I'm kinda certain I'm not the only one getting crazy with such a lazy behaviour. Reviewed-by: Jaxad.
Diffstat (limited to 'src/client.cpp')
-rw-r--r--src/client.cpp23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/client.cpp b/src/client.cpp
index 20d85ede..7ca90444 100644
--- a/src/client.cpp
+++ b/src/client.cpp
@@ -210,8 +210,16 @@ public:
}
} loginListener;
-} // anonymous namespace
+class ServerChoiceListener : public gcn::ActionListener
+{
+public:
+ void action(const gcn::ActionEvent &)
+ {
+ Client::setState(STATE_CHOOSE_SERVER);
+ }
+} serverChoiceListener;
+} // anonymous namespace
Client *Client::mInstance = 0;
@@ -782,6 +790,19 @@ int Client::exec()
// Load XML databases
ColorDB::load();
itemDb = new ItemDB;
+ if (!itemDb || !itemDb->isLoaded())
+ {
+ // Warn and return to login screen
+ errorMessage =
+ _("This server is missing needed world data. "
+ "Please contact the administrator(s).");
+ mCurrentDialog = new OkDialog(
+ _("ItemDB: Error while loading " ITEMS_DB_FILE "!"),
+ errorMessage);
+ mCurrentDialog->addActionListener(&serverChoiceListener);
+ mCurrentDialog = NULL; // OkDialog deletes itself
+ break;
+ }
Being::load(); // Hairstyles
MonsterDB::load();
SpecialDB::load();