summaryrefslogtreecommitdiff
path: root/src/server.cpp
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2012-06-04 22:34:22 +0300
committerPerttu Ahola <celeron55@gmail.com>2012-06-04 22:34:40 +0300
commitf48882213e31c47660cf0c87df1e04e51db9b50a (patch)
tree36693dde9d144f41f228044b5f84479f3dd0016f /src/server.cpp
parent1cd2076d42d9f97c10984cce17645b2ee4905713 (diff)
downloadminetest-f48882213e31c47660cf0c87df1e04e51db9b50a.tar.gz
minetest-f48882213e31c47660cf0c87df1e04e51db9b50a.tar.bz2
minetest-f48882213e31c47660cf0c87df1e04e51db9b50a.zip
Add ignore_world_load_errors configuration option and provide better error messages
Diffstat (limited to 'src/server.cpp')
-rw-r--r--src/server.cpp23
1 files changed, 21 insertions, 2 deletions
diff --git a/src/server.cpp b/src/server.cpp
index fbeff83bf..f336fadc8 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -164,6 +164,8 @@ void * EmergeThread::Thread()
BEGIN_DEBUG_EXCEPTION_HANDLER
bool enable_mapgen_debug_info = g_settings->getBool("enable_mapgen_debug_info");
+
+ v3s16 last_tried_pos(-32768,-32768,-32768); // For error output
/*
Get block info from queue, emerge them and send them
@@ -181,6 +183,8 @@ void * EmergeThread::Thread()
v3s16 &p = q->pos;
v2s16 p2d(p.X,p.Z);
+
+ last_tried_pos = p;
/*
Do not generate over-limit
@@ -377,8 +381,23 @@ void * EmergeThread::Thread()
}
catch(VersionMismatchException &e)
{
- m_server->setAsyncFatalError(std::string(
- "World data version mismatch (server-side) (world probably saved by a newer version of Minetest): ")+e.what());
+ std::ostringstream err;
+ err<<"World data version mismatch in MapBlock "<<PP(last_tried_pos)<<std::endl;
+ err<<"----"<<std::endl;
+ err<<"\""<<e.what()<<"\""<<std::endl;
+ err<<"See debug.txt."<<std::endl;
+ err<<"World probably saved by a newer version of Minetest."<<std::endl;
+ m_server->setAsyncFatalError(err.str());
+ }
+ catch(SerializationError &e)
+ {
+ std::ostringstream err;
+ err<<"Invalid data in MapBlock "<<PP(last_tried_pos)<<std::endl;
+ err<<"----"<<std::endl;
+ err<<"\""<<e.what()<<"\""<<std::endl;
+ err<<"See debug.txt."<<std::endl;
+ err<<"You can ignore this using [ignore_world_load_errors = true]."<<std::endl;
+ m_server->setAsyncFatalError(err.str());
}
END_DEBUG_EXCEPTION_HANDLER(errorstream)