From d57753cd6873ac279f8de163393db2c1cc6a2a00 Mon Sep 17 00:00:00 2001 From: faketruth Date: Tue, 27 Dec 2011 22:57:33 +0000 Subject: Users file was pretty messed up with mixed unix and windows line endings. The ini failed to parse correctly under cygwin. 'Fixed' a 'bug' where MCServer would seemingly endlessly calculate lighting for an entire world (and then crash), when this entire world has 'wrong' lighting. This happens when running a converted map from Vanilla. Fixed this by only allowing a maximum of 50 chunks to recalculate their lighting per tick. Fixed a small coding error in cChunkMap where it would check PakVersion twice, instead of also ChunkVersion. DeNotch converter does not need the VS2010 runtime thingies anymore git-svn-id: http://mc-server.googlecode.com/svn/trunk@138 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/cChunkMap.cpp | 2 +- source/cPlayer.cpp | 1 + source/cWorld.cpp | 9 ++++++++- 3 files changed, 10 insertions(+), 2 deletions(-) (limited to 'source') diff --git a/source/cChunkMap.cpp b/source/cChunkMap.cpp index 2f8339176..90b3258e7 100644 --- a/source/cChunkMap.cpp +++ b/source/cChunkMap.cpp @@ -653,7 +653,7 @@ cChunkMap::cChunkLayer* cChunkMap::LoadLayer(int a_LayerX, int a_LayerZ ) if( fread( &PakVersion, sizeof(PakVersion), 1, f) != 1 ) { LOGERROR("ERROR 1 READING FROM FILE %s", SourceFile); fclose(f); return false; } if( PakVersion != 1 ) { LOGERROR("WRONG PAK VERSION!"); fclose(f); return 0; } if( fread( &ChunkVersion, sizeof(ChunkVersion), 1, f) != 1 ) { LOGERROR("ERROR 2 READING FROM FILE %s", SourceFile); fclose(f); return false; } - if( PakVersion != 1 ) { LOGERROR("WRONG CHUNK VERSION!"); fclose(f); return 0; } + if( ChunkVersion != 1 ) { LOGERROR("WRONG CHUNK VERSION!"); fclose(f); return 0; } short NumChunks = 0; if( fread( &NumChunks, sizeof(NumChunks), 1, f) != 1 ) { LOGERROR("ERROR 3 READING FROM FILE %s", SourceFile); fclose(f); return false; } diff --git a/source/cPlayer.cpp b/source/cPlayer.cpp index 4e743a2fe..aca2879ca 100644 --- a/source/cPlayer.cpp +++ b/source/cPlayer.cpp @@ -751,6 +751,7 @@ bool cPlayer::LoadFromDisk() // TODO - This should also get/set/whatever the cor } else { + LOGWARN("WARNING: Failed to read ini file users.ini"); AddToGroup("Default"); } ResolvePermissions(); diff --git a/source/cWorld.cpp b/source/cWorld.cpp index 85f8872ec..3d984019c 100644 --- a/source/cWorld.cpp +++ b/source/cWorld.cpp @@ -419,13 +419,20 @@ void cWorld::Tick(float a_Dt) LockChunks(); - while( !m_pState->SpreadQueue.empty() ) + + int TimesSpreaded = 0; + while( !m_pState->SpreadQueue.empty() && TimesSpreaded < 50 ) // Spread a max of 50 times each tick, otherwise server will hang { cChunk* Chunk = (*m_pState->SpreadQueue.begin()); //LOG("Spreading: %p", Chunk ); Chunk->SpreadLight( Chunk->pGetSkyLight() ); Chunk->SpreadLight( Chunk->pGetLight() ); m_pState->SpreadQueue.remove( &*Chunk ); + TimesSpreaded++; + } + if( TimesSpreaded >= 50 ) + { + LOGWARN("Lots of lighting to do! At least %i chunks left!", m_pState->SpreadQueue.size() ); } m_ChunkMap->Tick(a_Dt); -- cgit v1.2.3