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(){
if($this->bufferLen > 0 and $this->buffer instanceof RakNetPacket){
$this->buffer->seqNumber = $this->counter[0]++;
$this->send($this->buffer);
if($this->connected === true){
if($this->bufferLen > 0 and $this->buffer instanceof RakNetPacket){
$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){
@ -2418,7 +2420,7 @@ class Player{
$packet->messageIndex = $this->counter[3]++;
$packet->reliability = 2;
$this->buffer->data[] = $packet;
@$this->buffer->data[] = $packet;
$this->bufferLen += 6 + $len;
return array();
}

View File

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