mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-09-04 08:56:15 +00:00
Fixed ACK/NACK range writing
This commit is contained in:
@ -61,20 +61,36 @@ class Packet{
|
|||||||
switch($this->pid){
|
switch($this->pid){
|
||||||
case 0xc0:
|
case 0xc0:
|
||||||
case 0xa0:
|
case 0xa0:
|
||||||
$cnt = 0;
|
$payload = "";
|
||||||
$this->addRaw(Utils::writeShort(ceil(count($this->data[$field]) / 2)));
|
$records = 0;
|
||||||
foreach($this->data[$field] as $i => $count){
|
$pointer = 0;
|
||||||
if(($cnt % 2) === 0 or $cnt === 0){
|
sort($this->data[$field], SORT_NUMERIC);
|
||||||
if(count($this->data[$field]) > 1){
|
$max = count($this->data[$field]);
|
||||||
$this->addRaw(Utils::writeBool(false));
|
while($pointer < $max){
|
||||||
|
$type = true;
|
||||||
|
$curr = $start = $this->data[$field][$pointer];
|
||||||
|
for($i = $start + 1; $i < $max; ++$i){
|
||||||
|
$n = $this->data[$field][$i];
|
||||||
|
if(($n - $curr) === 1){
|
||||||
|
$curr = $end = $n;
|
||||||
|
$type = false;
|
||||||
|
$pointer = $i + 1;
|
||||||
}else{
|
}else{
|
||||||
$this->addRaw(Utils::writeBool(true));
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
++$cnt;
|
++$pointer;
|
||||||
$this->addRaw(strrev(Utils::writeTriad($count)));
|
if($type === false){
|
||||||
unset($this->data[$field][$i]);
|
$payload .= Utils::writeBool(false);
|
||||||
|
$payload .= strrev(Utils::writeTriad($start));
|
||||||
|
$payload .= strrev(Utils::writeTriad($end));
|
||||||
|
}else{
|
||||||
|
$payload .= Utils::writeBool(true);
|
||||||
|
$payload .= strrev(Utils::writeTriad($start));
|
||||||
|
}
|
||||||
|
++$records;
|
||||||
}
|
}
|
||||||
|
$this->addRaw(Utils::writeShort($records) . $payload);
|
||||||
break;
|
break;
|
||||||
case 0x05:
|
case 0x05:
|
||||||
$this->addRaw($this->data[$field]);
|
$this->addRaw($this->data[$field]);
|
||||||
|
Reference in New Issue
Block a user