161 lines
5.0 KiB
Diff
161 lines
5.0 KiB
Diff
diff --git a/src/server.cpp b/src/server.cpp
|
|
index 52e9dc8..1e98a56 100644
|
|
--- a/src/server.cpp
|
|
+++ b/src/server.cpp
|
|
@@ -165,6 +165,10 @@ void * EmergeThread::Thread()
|
|
*/
|
|
|
|
bool only_from_disk = true;
|
|
+ // <worldtest hack>
|
|
+ // This doesn't seem to really work in our case
|
|
+ only_from_disk = false;
|
|
+ // </worldtest hack>
|
|
|
|
{
|
|
core::map<u16, u8>::Iterator i;
|
|
@@ -987,6 +991,20 @@ u32 PIChecksum(core::list<PlayerInfo> &l)
|
|
// Load players
|
|
infostream<<"Server: Loading players"<<std::endl;
|
|
m_env.deSerializePlayers(m_mapsavedir);
|
|
+
|
|
+ // <worldtest hack>
|
|
+ // Load or generate blocks near origin
|
|
+ dstream<<DTIME<<"Worldtest hack server started."<<std::endl;
|
|
+ dstream<<DTIME<<"Will load or generate origin and quit."<<std::endl;
|
|
+ m_emerge_queue.addBlock(PEER_ID_INEXISTENT, v3s16(0,0,0), 0);
|
|
+ m_emerge_queue.addBlock(PEER_ID_INEXISTENT, v3s16(0,0,-1), 0);
|
|
+ m_emerge_queue.addBlock(PEER_ID_INEXISTENT, v3s16(0,-1,0), 0);
|
|
+ m_emerge_queue.addBlock(PEER_ID_INEXISTENT, v3s16(0,-1,-1), 0);
|
|
+ m_emerge_queue.addBlock(PEER_ID_INEXISTENT, v3s16(-1,0,0), 0);
|
|
+ m_emerge_queue.addBlock(PEER_ID_INEXISTENT, v3s16(-1,0,-1), 0);
|
|
+ m_emerge_queue.addBlock(PEER_ID_INEXISTENT, v3s16(-1,-1,0), 0);
|
|
+ m_emerge_queue.addBlock(PEER_ID_INEXISTENT, v3s16(-1,-1,-1), 0);
|
|
+ // </worldtest hack>
|
|
}
|
|
|
|
Server::~Server()
|
|
@@ -1204,6 +1222,123 @@ void Server::AsyncRunStep()
|
|
}
|
|
}
|
|
|
|
+ // <worldtest hack>
|
|
+ // Quit when blocks near origin have been loaded or generated
|
|
+ {
|
|
+ JMutexAutoLock envlock(m_env_mutex);
|
|
+ // Make sure EmergeThread runs
|
|
+ m_emergethread.trigger();
|
|
+ // Check area near origin
|
|
+ Map *map = &m_env.getMap();
|
|
+ if(
|
|
+ !m_shutdown_requested &&
|
|
+ map->getBlockNoCreateNoEx(v3s16(0,0,0)) &&
|
|
+ map->getBlockNoCreateNoEx(v3s16(0,0,0))->isGenerated() &&
|
|
+ map->getBlockNoCreateNoEx(v3s16(0,0,-1)) &&
|
|
+ map->getBlockNoCreateNoEx(v3s16(0,0,-1))->isGenerated() &&
|
|
+ map->getBlockNoCreateNoEx(v3s16(0,-1,0)) &&
|
|
+ map->getBlockNoCreateNoEx(v3s16(0,-1,0))->isGenerated() &&
|
|
+ map->getBlockNoCreateNoEx(v3s16(0,-1,-1)) &&
|
|
+ map->getBlockNoCreateNoEx(v3s16(0,-1,-1))->isGenerated() &&
|
|
+ map->getBlockNoCreateNoEx(v3s16(-1,0,0)) &&
|
|
+ map->getBlockNoCreateNoEx(v3s16(-1,0,0))->isGenerated() &&
|
|
+ map->getBlockNoCreateNoEx(v3s16(-1,0,-1)) &&
|
|
+ map->getBlockNoCreateNoEx(v3s16(-1,0,-1))->isGenerated() &&
|
|
+ map->getBlockNoCreateNoEx(v3s16(-1,-1,0)) &&
|
|
+ map->getBlockNoCreateNoEx(v3s16(-1,-1,0))->isGenerated() &&
|
|
+ map->getBlockNoCreateNoEx(v3s16(-1,-1,-1)) &&
|
|
+ map->getBlockNoCreateNoEx(v3s16(-1,-1,-1))->isGenerated()
|
|
+ ){
|
|
+ dstream<<DTIME<<"Worldtest server: Loaded all blocks."<<std::endl;
|
|
+
|
|
+ /*
|
|
+ Check contents of nodes
|
|
+ */
|
|
+
|
|
+ dstream<<DTIME<<"Worldtest server: Checking nodes"<<std::endl;
|
|
+ std::ofstream resultfile("worldtest_result.txt");
|
|
+ int errors = 0;
|
|
+#define NODECHECK(x){\
|
|
+ if(!(x)){\
|
|
+ dstream<<"BAD: Check failed: "<<(#x)<<std::endl;\
|
|
+ resultfile<<"BAD: Check failed: "<<(#x)<<std::endl;\
|
|
+ errors++;\
|
|
+ } else {\
|
|
+ dstream<<"GOOD: Check succeeded: "<<(#x)<<std::endl;\
|
|
+ resultfile<<"GOOD: Check succeeded: "<<(#x)<<std::endl;\
|
|
+ }\
|
|
+}
|
|
+ {
|
|
+ MapNode n = map->getNodeNoEx(v3s16(-1,-1,-1));
|
|
+ NODECHECK(n.getContent() == CONTENT_NC);
|
|
+ }
|
|
+ {
|
|
+ MapNode n = map->getNodeNoEx(v3s16(0,3,0));
|
|
+ NODECHECK(n.getContent() == CONTENT_NC);
|
|
+ }
|
|
+ {
|
|
+ MapNode n = map->getNodeNoEx(v3s16(0,2,0));
|
|
+ NODECHECK(n.getContent() == CONTENT_TORCH);
|
|
+ NODECHECK(n.getLight(LIGHTBANK_DAY) == 13);
|
|
+ NODECHECK(n.getLight(LIGHTBANK_NIGHT) == 13);
|
|
+ }
|
|
+ {
|
|
+ MapNode n = map->getNodeNoEx(v3s16(0,1,0));
|
|
+ NODECHECK(n.getContent() == CONTENT_GLASS);
|
|
+ NODECHECK(n.getLight(LIGHTBANK_DAY) == 12);
|
|
+ NODECHECK(n.getLight(LIGHTBANK_NIGHT) == 12);
|
|
+ }
|
|
+ {
|
|
+ MapNode n = map->getNodeNoEx(v3s16(0,0,0));
|
|
+ NODECHECK(n.getContent() == CONTENT_AIR);
|
|
+ NODECHECK(n.getLight(LIGHTBANK_DAY) == 11);
|
|
+ NODECHECK(n.getLight(LIGHTBANK_NIGHT) == 11);
|
|
+ }
|
|
+ dstream<<"ERRORS: "<<errors<<std::endl;
|
|
+ resultfile<<"ERRORS: "<<errors<<std::endl;
|
|
+ resultfile.close();
|
|
+
|
|
+ /*
|
|
+ Set contents of nodes
|
|
+ */
|
|
+
|
|
+ dstream<<DTIME<<"Worldtest server: Setting nodes"<<std::endl;
|
|
+ for(int x=-1; x<=1; x++)
|
|
+ for(int y=-1; y<=3; y++)
|
|
+ for(int z=-1; z<=1; z++)
|
|
+ {
|
|
+ MapNode n(CONTENT_NC);
|
|
+ map->setNode(v3s16(x,y,z), n);
|
|
+ }
|
|
+ {
|
|
+ MapNode n(CONTENT_TORCH);
|
|
+ n.setLight(LIGHTBANK_DAY, 13);
|
|
+ n.setLight(LIGHTBANK_NIGHT, 13);
|
|
+ map->setNode(v3s16(0,2,0), n);
|
|
+ }
|
|
+ {
|
|
+ MapNode n(CONTENT_GLASS);
|
|
+ n.setLight(LIGHTBANK_DAY, 12);
|
|
+ n.setLight(LIGHTBANK_NIGHT, 12);
|
|
+ map->setNode(v3s16(0,1,0), n);
|
|
+ }
|
|
+ {
|
|
+ MapNode n(CONTENT_AIR);
|
|
+ n.setLight(LIGHTBANK_DAY, 11);
|
|
+ n.setLight(LIGHTBANK_NIGHT, 11);
|
|
+ map->setNode(v3s16(0,0,0), n);
|
|
+ }
|
|
+ {
|
|
+ MapNode n(CONTENT_SIGN_WALL);
|
|
+ map->setNode(v3s16(0,0,2), n);
|
|
+ map->setNodeMetadata(v3s16(0,0,2), new SignNodeMetadata("Foo Bar"));
|
|
+ }
|
|
+ dstream<<DTIME<<"Worldtest server: Quitting."<<std::endl;
|
|
+ m_shutdown_requested = true;
|
|
+ }
|
|
+ }
|
|
+ // </worldtest hack>
|
|
+
|
|
{
|
|
JMutexAutoLock lock(m_env_mutex);
|
|
// Step environment
|