Do not unload spawn chunks

This commit is contained in:
Shoghi Cervantes 2014-02-14 19:37:39 +01:00
parent f0ff420659
commit fdf519398a
2 changed files with 26 additions and 11 deletions

View File

@ -2322,14 +2322,16 @@ class Player{
} }
public function sendBuffer(){ public function sendBuffer(){
if($this->bufferLen > 0 and $this->buffer instanceof RakNetPacket){ if($this->connected === true){
$this->buffer->seqNumber = $this->counter[0]++; if($this->bufferLen > 0 and $this->buffer instanceof RakNetPacket){
$this->send($this->buffer); $this->buffer->seqNumber = $this->counter[0]++;
$this->send($this->buffer);
}
$this->bufferLen = 0;
$this->buffer = new RakNetPacket(RakNetInfo::DATA_PACKET_0);
$this->buffer->data = array();
$this->nextBuffer = microtime(true) + 0.1;
} }
$this->bufferLen = 0;
$this->buffer = new RakNetPacket(RakNetInfo::DATA_PACKET_0);
$this->buffer->data = array();
$this->nextBuffer = microtime(true) + 0.1;
} }
private function directBigRawPacket(RakNetDataPacket $packet){ private function directBigRawPacket(RakNetDataPacket $packet){
@ -2418,7 +2420,7 @@ class Player{
$packet->messageIndex = $this->counter[3]++; $packet->messageIndex = $this->counter[3]++;
$packet->reliability = 2; $packet->reliability = 2;
$this->buffer->data[] = $packet; @$this->buffer->data[] = $packet;
$this->bufferLen += 6 + $len; $this->bufferLen += 6 + $len;
return array(); return array();
} }

View File

@ -138,8 +138,11 @@ class Level{
if(count($c) === 0){ if(count($c) === 0){
unset($this->usedChunks[$i]); unset($this->usedChunks[$i]);
$X = explode(".", $i); $X = explode(".", $i);
$Z = array_pop($X); $Z = (int) array_pop($X);
$this->level->unloadChunk((int) array_pop($X), (int) $Z, $this->server->saveEnabled); $X = (int) array_pop($X);
if(!$this->isSpawnChunk($X, $Z)){
$this->level->unloadChunk($X, $Z, $this->server->saveEnabled);
}
} }
} }
$this->save(false, false); $this->save(false, false);
@ -408,13 +411,23 @@ class Level{
return $this->level->loadChunk($X, $Z); return $this->level->loadChunk($X, $Z);
} }
public function unloadChunk($X, $Z){ public function unloadChunk($X, $Z, $force = false){
if(!isset($this->level)){ if(!isset($this->level)){
return false; return false;
} }
if($force !== true and $this->isSpawnChunk($X, $Z)){
return false;
}
Cache::remove("world:{$this->name}:$X:$Z"); Cache::remove("world:{$this->name}:$X:$Z");
return $this->level->unloadChunk($X, $Z, $this->server->saveEnabled); return $this->level->unloadChunk($X, $Z, $this->server->saveEnabled);
} }
public function isSpawnChunk($X, $Z){
$spawnX = $this->level->getData("spawnX") >> 4;
$spawnZ = $this->level->getData("spawnZ") >> 4;
return abs($X - $spawnX) <= 1 and abs($Z - $spawnZ) <= 1;
}
public function getOrderedChunk($X, $Z, $Yndex){ public function getOrderedChunk($X, $Z, $Yndex){
if(!isset($this->level)){ if(!isset($this->level)){