Diff
checker
टेक्स्ट
टेक्स्ट
छवियां
दस्तावेज़
Excel
फ़ोल्डर्स
Legal
Enterprise
डेस्कटॉप
मूल्य
साइन इन करें
Diffchecker डेस्कटॉप डाउनलोड करें
टेक्स्ट की तुलना करें
दो टेक्स्ट फ़ाइलों के बीच अंतर ढूंढें
उपकरण
इतिहास
रियल-टाइम एडिटर
रिक्त स्थान छिपाएँ
अपरिवर्तित संक्षिप्त करें
लाइन रैप बंद
लेआउट
विभाजित
संयुक्त
परिवर्तन हाइलाइट करें
स्मार्ट
शब्द
अक्षर
टेक्स्ट शैलियां
दिखावट बदलें
सिंटैक्स हाइलाइटिंग
सिंटैक्स चुनें
अनदेखा करें
टेक्स्ट बदलें
पहले अंतर पर जाएँ
इनपुट संपादित करें
Diffchecker Desktop
Diffchecker चलाने का सबसे सुरक्षित तरीका। Diffchecker Desktop ऐप पाएं: आपके diffs कभी आपके कंप्यूटर से बाहर नहीं जाते!
Desktop पाएं
Untitled diff
बनाया गया
9 वर्ष पहले
Diff कभी समाप्त नहीं होता
साफ़
निर्यात करें
शेयर करें
समझाएं
1 हटाया गया
लाइनें
कुल
हटाया गया
अक्षर
कुल
हटाया गया
इस सुविधा का उपयोग जारी रखने के लिए, अपग्रेड करें
Diff
checker
Pro
मूल्य देखें
488 लाइनें
सभी को कॉपी करें
492 जोड़े गए
लाइनें
कुल
जोड़ा गया
अक्षर
कुल
जोड़ा गया
इस सुविधा का उपयोग जारी रखने के लिए, अपग्रेड करें
Diff
checker
Pro
मूल्य देखें
977 लाइनें
सभी को कॉपी करें
<?php
<?php
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
/*
/*
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
LiveStats Library
LiveStats Library
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
version: 2.0
version: 2.0
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
query engines: Goldsource, Source, SA:MP
query engines: Goldsource, Source, SA:MP
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
protocol: 47, 48
protocol: 47, 48
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
author: nr913
author: nr913
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
visit www.
freakz
.ro
visit www.
foxh
.ro
*/
*/
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
define('HL_PACKET', -1);
define('HL_PACKET', -1);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
define('HL_PACKET_SPLITTED', -2);
define('HL_PACKET_SPLITTED', -2);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
define('SAMP_PACKET', 1347240275);
define('SAMP_PACKET', 1347240275);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
class Player {
class Player {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $ID;
var $ID;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $Name;
var $Name;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $Score;
var $Score;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $TimePlayed;
var $TimePlayed;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $Ping;
var $Ping;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
class Server {
class Server {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $Type = 0;
var $Type = 0;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $ProtocolVersion;
var $ProtocolVersion;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $Address;
var $Address;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $Hostname;
var $Hostname;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $Map;
var $Map;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $Directory;
var $Directory;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $Description;
var $Description;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $AppID;
var $AppID;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $MaxPlayers;
var $MaxPlayers;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $PlayerCount;
var $PlayerCount;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $BotCount;
var $BotCount;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $Dedicated;
var $Dedicated;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $OS;
var $OS;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $PasswordProtected;
var $PasswordProtected;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $Secured;
var $Secured;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $GameMode;
var $GameMode;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $WitnessCount;
var $WitnessCount;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $WitnessTime;
var $WitnessTime;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $GameVersion;
var $GameVersion;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $Players = array();
var $Players = array();
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $Rules = array();
var $Rules = array();
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
class Time {
class Time {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $Hours;
var $Hours;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $Minutes;
var $Minutes;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $Seconds;
var $Seconds;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
function __construct($seconds) {
function __construct($seconds) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Hours = floor($seconds / 3600);
$this->Hours = floor($seconds / 3600);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Minutes = floor($seconds / 60) % 60;
$this->Minutes = floor($seconds / 60) % 60;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Seconds = floor($seconds) % 60;
$this->Seconds = floor($seconds) % 60;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
function __toString() {
function __toString() {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$hours = ($this->Hours < 10 ? '0' . $this->Hours : $this->Hours);
$hours = ($this->Hours < 10 ? '0' . $this->Hours : $this->Hours);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$minutes = ($this->Minutes < 10 ? '0' . $this->Minutes : $this->Minutes);
$minutes = ($this->Minutes < 10 ? '0' . $this->Minutes : $this->Minutes);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$seconds = ($this->Seconds < 10 ? '0' . $this->Seconds : $this->Seconds);
$seconds = ($this->Seconds < 10 ? '0' . $this->Seconds : $this->Seconds);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
return "$hours:$minutes:$seconds";
return "$hours:$minutes:$seconds";
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
class LSError extends Exception {
class LSError extends Exception {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $ErrorMessage;
var $ErrorMessage;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $ErrorCode;
var $ErrorCode;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
function __construct($errcode, $errmsg) {
function __construct($errcode, $errmsg) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->ErrorCode = $errcode;
$this->ErrorCode = $errcode;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->ErrorMessage = $errmsg;
$this->ErrorMessage = $errmsg;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
class Utils {
class Utils {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
static function getTime() {
static function getTime() {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
list($u, $s) = explode(' ', microtime());
list($u, $s) = explode(' ', microtime());
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
return ((float)$u + (float)$s);
return ((float)$u + (float)$s);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
static function getString($packet, &$offset, $length = -1) {
static function getString($packet, &$offset, $length = -1) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$len = strlen($packet);
$len = strlen($packet);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$i = 0;
$i = 0;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if ($length == -1) {
if ($length == -1) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
while ($offset + $i < $len && $packet[$offset + $i] != "\x00")
while ($offset + $i < $len && $packet[$offset + $i] != "\x00")
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$i++;
$i++;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$offset += $i + 1;
$offset += $i + 1;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
return substr($packet, $offset - $i - 1, $i);
return substr($packet, $offset - $i - 1, $i);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
} else {
} else {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$i = $length;
$i = $length;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if ($len - $offset < $length)
if ($len - $offset < $length)
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$i = $len - $offset;
$i = $len - $offset;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$offset += $i;
$offset += $i;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
return substr($packet, $offset - $i, $i);
return substr($packet, $offset - $i, $i);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
static function getByte($packet, &$offset) {
static function getByte($packet, &$offset) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if ($offset >= strlen($packet))
if ($offset >= strlen($packet))
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
return 0;
return 0;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$char = unpack('cchar', $packet[$offset]);
$char = unpack('cchar', $packet[$offset]);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$offset++;
$offset++;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
return $char['char'];
return $char['char'];
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
static function getShort($packet, &$offset) {
static function getShort($packet, &$offset) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if ($offset + 2 >= strlen($packet))
if ($offset + 2 >= strlen($packet))
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
return 0;
return 0;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$short = unpack('sshort', substr($packet, $offset, 2));
$short = unpack('sshort', substr($packet, $offset, 2));
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$offset += 2;
$offset += 2;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
return $short['short'];
return $short['short'];
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
static function getInt($packet, &$offset) {
static function getInt($packet, &$offset) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if ($offset + 4 >= strlen($packet))
if ($offset + 4 >= strlen($packet))
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
return 0;
return 0;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$int = unpack('iint', substr($packet, $offset, 4));
$int = unpack('iint', substr($packet, $offset, 4));
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$offset += 4;
$offset += 4;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
return $int['int'];
return $int['int'];
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
static function getFloat($packet, &$offset) {
static function getFloat($packet, &$offset) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if ($offset + 4 >= strlen($packet))
if ($offset + 4 >= strlen($packet))
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
return ((float)0.0);
return ((float)0.0);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$float = unpack('ffloat', substr($packet, $offset, 4));
$float = unpack('ffloat', substr($packet, $offset, 4));
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$offset += 4;
$offset += 4;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
return ((float)$float['float']);
return ((float)$float['float']);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
class LiveStats {
class LiveStats {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $IP;
var $IP;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $Port;
var $Port;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $Sock;
var $Sock;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $Challenge = "\xFF\xFF\xFF\xFF";
var $Challenge = "\xFF\xFF\xFF\xFF";
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $HaveInfo = false;
var $HaveInfo = false;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $HavePlayer = false;
var $HavePlayer = false;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $HaveRules = false;
var $HaveRules = false;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $ResendPlayer = false;
var $ResendPlayer = false;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $ResendRules = false;
var $ResendRules = false;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $SendQueue = array();
var $SendQueue = array();
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $MaxExecutionTime = 2;
var $MaxExecutionTime = 2;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $SplittedPackets = array();
var $SplittedPackets = array();
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $SAMPHeader = "SAMP";
var $SAMPHeader = "SAMP";
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
var $Server;
var $Server;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
public function __construct($hostname, $port = 27015) {
public function __construct($hostname, $port = 27015) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->IP = gethostbyname($hostname);
$this->IP = gethostbyname($hostname);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Port = $port;
$this->Port = $port;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$errno = 0; $errstr = '';
$errno = 0; $errstr = '';
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Sock = @stream_socket_client("udp://{$this->IP}:{$this->Port}", $errno, $errstr, 5);
$this->Sock = @stream_socket_client("udp://{$this->IP}:{$this->Port}", $errno, $errstr, 5);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if ($this->Sock === false)
if ($this->Sock === false)
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
throw new LSError(1, "Could not connect to specified host [$errno]: $errstr.");
throw new LSError(1, "Could not connect to specified host [$errno]: $errstr.");
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if (stream_set_blocking($this->Sock, false) == false)
if (stream_set_blocking($this->Sock, false) == false)
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
throw new LSError(2, "Could not set to non-blocking mode.");
throw new LSError(2, "Could not set to non-blocking mode.");
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if (stream_set_timeout($this->Sock, 3) == false)
if (stream_set_timeout($this->Sock, 3) == false)
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
throw new LSError(3, "Could not set timeout to 10 seconds.");
throw new LSError(3, "Could not set timeout to 10 seconds.");
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server = new Server;
$this->Server = new Server;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->Address = "{$this->IP}:{$this->Port}";
$this->Server->Address = "{$this->IP}:{$this->Port}";
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$ip = explode('.', $this->IP);
$ip = explode('.', $this->IP);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->SAMPHeader .= chr($ip[0]) . chr($ip[1]) . chr($ip[2]) . chr($ip[3]) . chr($this->Port & 0xFF) . chr(($this->Port >> 8) & 0xFF);
$this->SAMPHeader .= chr($ip[0]) . chr($ip[1]) . chr($ip[2]) . chr($ip[3]) . chr($this->Port & 0xFF) . chr(($this->Port >> 8) & 0xFF);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
function onSplittedPacketReceived($packet) {
function onSplittedPacketReceived($packet) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$offset = 4;
$offset = 4;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$ReqID = Utils::getInt($packet, $offset);
$ReqID = Utils::getInt($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if (!isset($this->SplittedPackets[$ReqID])) {
if (!isset($this->SplittedPackets[$ReqID])) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->SplittedPackets[$ReqID] = array(
$this->SplittedPackets[$ReqID] = array(
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
'Data' => array(),
'Data' => array(),
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
'Type' => -1,
'Type' => -1,
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
'Packets' => -1
'Packets' => -1
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
);
);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->SplittedPackets[$ReqID]['Data'][] = $packet;
$this->SplittedPackets[$ReqID]['Data'][] = $packet;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if (count($this->SplittedPackets[$ReqID]['Data']) == 2) {
if (count($this->SplittedPackets[$ReqID]['Data']) == 2) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$offset = 8;
$offset = 8;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$FB1 = Utils::getByte($this->SplittedPackets[$ReqID]['Data'][0], $offset);
$FB1 = Utils::getByte($this->SplittedPackets[$ReqID]['Data'][0], $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$offset = 8;
$offset = 8;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$FB2 = Utils::getByte($this->SplittedPackets[$ReqID]['Data'][1], $offset);
$FB2 = Utils::getByte($this->SplittedPackets[$ReqID]['Data'][1], $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if ($FB1 != $FB2) {
if ($FB1 != $FB2) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->SplittedPackets[$ReqID]['Type'] = 0;
$this->SplittedPackets[$ReqID]['Type'] = 0;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->SplittedPackets[$ReqID]['Packets'] = ($FB1<<4)>>4;
$this->SplittedPackets[$ReqID]['Packets'] = ($FB1<<4)>>4;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
} else {
} else {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->SplittedPackets[$ReqID]['Type'] = 1;
$this->SplittedPackets[$ReqID]['Type'] = 1;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->SplittedPackets[$ReqID]['Packets'] = $FB1;
$this->SplittedPackets[$ReqID]['Packets'] = $FB1;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if (count($this->SplittedPackets[$ReqID]['Data']) == $this->SplittedPackets[$ReqID]['Packets']) {
if (count($this->SplittedPackets[$ReqID]['Data']) == $this->SplittedPackets[$ReqID]['Packets']) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if ($this->SplittedPackets[$ReqID]['Type'] == 0) {
if ($this->SplittedPackets[$ReqID]['Type'] == 0) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
for ($i = 0; $i < $this->SplittedPackets[$ReqID]['Packets']; $i++) {
for ($i = 0; $i < $this->SplittedPackets[$ReqID]['Packets']; $i++) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$offset = 8;
$offset = 8;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$PckID = Utils::getByte($this->SplittedPackets[$ReqID]['Data'][$i], $offset)>>4;
$PckID = Utils::getByte($this->SplittedPackets[$ReqID]['Data'][$i], $offset)>>4;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if ($i != $PckID) {
if ($i != $PckID) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$aux = $this->SplittedPackets[$ReqID]['Data'][$PckID];
$aux = $this->SplittedPackets[$ReqID]['Data'][$PckID];
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->SplittedPackets[$ReqID]['Data'][$PckID] = $this->SplittedPackets[$ReqID]['Data'][$i];
$this->SplittedPackets[$ReqID]['Data'][$PckID] = $this->SplittedPackets[$ReqID]['Data'][$i];
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->SplittedPackets[$ReqID]['Data'][$i] = $aux;
$this->SplittedPackets[$ReqID]['Data'][$i] = $aux;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$i--;
$i--;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$packet = "\xFF\xFF\xFF\xFF" . substr($this->SplittedPackets[$ReqID]['Data'][0], 13);
$packet = "\xFF\xFF\xFF\xFF" . substr($this->SplittedPackets[$ReqID]['Data'][0], 13);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
for ($i = 1; $i < $this->SplittedPackets[$ReqID]['Packets']; $i++)
for ($i = 1; $i < $this->SplittedPackets[$ReqID]['Packets']; $i++)
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$packet .= substr($this->SplittedPackets[$ReqID]['Data'][$i], 9);
$packet .= substr($this->SplittedPackets[$ReqID]['Data'][$i], 9);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
} else {
} else {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
for ($i = 0; $i < $this->SplittedPackets[$ReqID]['Packets']; $i++) {
for ($i = 0; $i < $this->SplittedPackets[$ReqID]['Packets']; $i++) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$offset = 9;
$offset = 9;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$PckID = Utils::getByte($this->SplittedPackets[$ReqID]['Data'][$i], $offset);
$PckID = Utils::getByte($this->SplittedPackets[$ReqID]['Data'][$i], $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if ($i != $PckID) {
if ($i != $PckID) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$aux = $this->SplittedPackets[$ReqID]['Data'][$PckID];
$aux = $this->SplittedPackets[$ReqID]['Data'][$PckID];
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->SplittedPackets[$ReqID]['Data'][$PckID] = $this->SplittedPackets[$ReqID]['Data'][$i];
$this->SplittedPackets[$ReqID]['Data'][$PckID] = $this->SplittedPackets[$ReqID]['Data'][$i];
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->SplittedPackets[$ReqID]['Data'][$i] = $aux;
$this->SplittedPackets[$ReqID]['Data'][$i] = $aux;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$i--;
$i--;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$packet = "\xFF\xFF\xFF\xFF" . substr($this->SplittedPackets[$ReqID]['Data'][0], 16);
$packet = "\xFF\xFF\xFF\xFF" . substr($this->SplittedPackets[$ReqID]['Data'][0], 16);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
for ($i = 1; $i < $this->SplittedPackets[$ReqID]['Packets']; $i++)
for ($i = 1; $i < $this->SplittedPackets[$ReqID]['Packets']; $i++)
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$packet .= substr($this->SplittedPackets[$ReqID]['Data'][$i], 12);
$packet .= substr($this->SplittedPackets[$ReqID]['Data'][$i], 12);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
unset($this->SplittedPackets[$ReqID]);
unset($this->SplittedPackets[$ReqID]);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->onPacketReceived($packet);
$this->onPacketReceived($packet);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
function onPacketReceived($packet) {
function onPacketReceived($packet) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$offset = 4;
$offset = 4;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
switch (Utils::getByte($packet, $offset)) {
switch (Utils::getByte($packet, $offset)) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
case 0x41: // challenge
case 0x41: // challenge
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Challenge = substr($packet, 5);
$this->Challenge = substr($packet, 5);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if ($this->ResendPlayer) {
if ($this->ResendPlayer) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->ResendPlayer = false;
$this->ResendPlayer = false;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->requestPlayer();
$this->requestPlayer();
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if ($this->ResendRules) {
if ($this->ResendRules) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->ResendRules = false;
$this->ResendRules = false;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->requestRules();
$this->requestRules();
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
break;
break;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
case 0x44: // player
case 0x44: // player
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if ($this->HavePlayer)
if ($this->HavePlayer)
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
break;
break;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$offset = 5;
$offset = 5;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$numplayers = Utils::getByte($packet, $offset);
$numplayers = Utils::getByte($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
while ($numplayers) {
while ($numplayers) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$Player = new Player;
$Player = new Player;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$Player->ID = Utils::getByte($packet, $offset);
$Player->ID = Utils::getByte($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$Player->Name = Utils::getString($packet, $offset);
$Player->Name = Utils::getString($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$len = strlen($Player->Name);
$len = strlen($Player->Name);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$Player->Score = Utils::getInt($packet, $offset);
$Player->Score = Utils::getInt($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$Player->TimePlayed = new Time(Utils::getFloat($packet, $offset));
$Player->TimePlayed = new Time(Utils::getFloat($packet, $offset));
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$numplayers--;
$numplayers--;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
array_push($this->Server->Players, $Player);
array_push($this->Server->Players, $Player);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->HavePlayer = true;
$this->HavePlayer = true;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->ResendPlayer = false;
$this->ResendPlayer = false;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
break;
break;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
case 0x49: // info, source
case 0x49: // info, source
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if ($this->HaveInfo)
if ($this->HaveInfo)
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
break;
break;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$offset = 5;
$offset = 5;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->ProtocolVersion = Utils::getByte($packet, $offset);
$this->Server->ProtocolVersion = Utils::getByte($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->Hostname = Utils::getString($packet, $offset);
$this->Server->Hostname = Utils::getString($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->Map = Utils::getString($packet, $offset);
$this->Server->Map = Utils::getString($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->Directory = Utils::getString($packet, $offset);
$this->Server->Directory = Utils::getString($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->Description = Utils::getString($packet, $offset);
$this->Server->Description = Utils::getString($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->AppID = Utils::getShort($packet, $offset);
$this->Server->AppID = Utils::getShort($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->PlayerCount = Utils::getByte($packet, $offset);
$this->Server->PlayerCount = Utils::getByte($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->MaxPlayers = Utils::getByte($packet, $offset);
$this->Server->MaxPlayers = Utils::getByte($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->BotCount = Utils::getByte($packet, $offset);
$this->Server->BotCount = Utils::getByte($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->Dedicated = (Utils::getByte($packet, $offset) == ord('d') ? true : false);
$this->Server->Dedicated = (Utils::getByte($packet, $offset) == ord('d') ? true : false);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->OS = (Utils::getByte($packet, $offset) == 'l' ? 'Linux' : 'Windows');
$this->Server->OS = (Utils::getByte($packet, $offset) == 'l' ? 'Linux' : 'Windows');
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->PasswordProtected = (Utils::getByte($packet, $offset) == 1 ? true : false);
$this->Server->PasswordProtected = (Utils::getByte($packet, $offset) == 1 ? true : false);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->Secured = (Utils::getByte($packet, $offset) == 1 ? true : false);
$this->Server->Secured = (Utils::getByte($packet, $offset) == 1 ? true : false);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$TheShipAppIDs = array(2400, 2401, 2402, 2412, 2430, 2406, 2405, 2403);
$TheShipAppIDs = array(2400, 2401, 2402, 2412, 2430, 2406, 2405, 2403);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if (in_array($this->Server->AppID, $TheShipAppIDs)) {
if (in_array($this->Server->AppID, $TheShipAppIDs)) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$gm = Utils::getByte($packet, $offset);
$gm = Utils::getByte($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$GameModes = array('Hunt', 'Elimination', 'Duel', 'Deathmatch', 'Team VIP', 'Team Elimination');
$GameModes = array('Hunt', 'Elimination', 'Duel', 'Deathmatch', 'Team VIP', 'Team Elimination');
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->GameMode = (isset($GameModes[$gm]) ? $GameModes[$gm] : 'Unknown');
$this->Server->GameMode = (isset($GameModes[$gm]) ? $GameModes[$gm] : 'Unknown');
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->WitnessCount = Utils::getByte($packet, $offset);
$this->Server->WitnessCount = Utils::getByte($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->WitnessTime = Utils::getByte($packet, $offset);
$this->Server->WitnessTime = Utils::getByte($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->GameVersion = Utils::getString($packet, $offset);
$this->Server->GameVersion = Utils::getString($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->HaveInfo = true;
$this->HaveInfo = true;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
break;
break;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
case 0x6D: // info, goldsource
case 0x6D: // info, goldsource
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if ($this->HaveInfo)
if ($this->HaveInfo)
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
break;
break;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$offset = 5;
$offset = 5;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
Utils::getString($packet, $offset);
Utils::getString($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->Hostname = Utils::getString($packet, $offset);
$this->Server->Hostname = Utils::getString($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->Map = Utils::getString($packet, $offset);
$this->Server->Map = Utils::getString($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->Directory = Utils::getString($packet, $offset);
$this->Server->Directory = Utils::getString($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->Description = Utils::getString($packet, $offset);
$this->Server->Description = Utils::getString($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->PlayerCount = Utils::getByte($packet, $offset);
$this->Server->PlayerCount = Utils::getByte($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->MaxPlayers = Utils::getByte($packet, $offset);
$this->Server->MaxPlayers = Utils::getByte($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->ProtocolVersion = Utils::getByte($packet, $offset);
$this->Server->ProtocolVersion = Utils::getByte($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->Dedicated = (Utils::getByte($packet, $offset) == ord('d') ? true : false);
$this->Server->Dedicated = (Utils::getByte($packet, $offset) == ord('d') ? true : false);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->OS = (Utils::getByte($packet, $offset) == 'l' ? 'Linux' : 'Windows');
$this->Server->OS = (Utils::getByte($packet, $offset) == 'l' ? 'Linux' : 'Windows');
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->AppID = ($this->Server->OS == 'Linux' ? 4 : 5);
$this->Server->AppID = ($this->Server->OS == 'Linux' ? 4 : 5);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->PasswordProtected = (Utils::getByte($packet, $offset) == 1 ? true : false);
$this->Server->PasswordProtected = (Utils::getByte($packet, $offset) == 1 ? true : false);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$IsMod = Utils::getByte($packet, $offset);
$IsMod = Utils::getByte($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if ($IsMod == 1) {
if ($IsMod == 1) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
Utils::getString($packet, $offset);
Utils::getString($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
Utils::getString($packet, $offset);
Utils::getString($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
Utils::getByte($packet, $offset);
Utils::getByte($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
Utils::getInt($packet, $offset);
Utils::getInt($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
Utils::getInt($packet, $offset);
Utils::getInt($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
Utils::getByte($packet, $offset);
Utils::getByte($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
Utils::getByte($packet, $offset);
Utils::getByte($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->Secured = (Utils::getByte($packet, $offset) == 1 ? true : false);
$this->Server->Secured = (Utils::getByte($packet, $offset) == 1 ? true : false);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->BotCount = Utils::getByte($packet, $offset);
$this->Server->BotCount = Utils::getByte($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->HaveInfo = true;
$this->HaveInfo = true;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
break;
break;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
case 0x45: // rules
case 0x45: // rules
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if ($this->HaveRules)
if ($this->HaveRules)
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
break;
break;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$offset = 5;
$offset = 5;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$rulesnum = Utils::getShort($packet, $offset);
$rulesnum = Utils::getShort($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
while ($rulesnum) {
while ($rulesnum) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$Name = Utils::getString($packet, $offset);
$Name = Utils::getString($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$Value = Utils::getString($packet, $offset);
$Value = Utils::getString($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$rulesnum--;
$rulesnum--;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->Rules[$Name] = $Value;
$this->Server->Rules[$Name] = $Value;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->HaveRules = true;
$this->HaveRules = true;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->ResendRules = false;
$this->ResendRules = false;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
break;
break;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
default:
default:
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
break;
break;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
function onSampPacketReceived($packet) {
function onSampPacketReceived($packet) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$offset = 10;
$offset = 10;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
switch (Utils::getByte($packet, $offset)) {
switch (Utils::getByte($packet, $offset)) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
case 0x69: // info
case 0x69: // info
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if ($this->HaveInfo)
if ($this->HaveInfo)
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
break;
break;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->PasswordProtected = (Utils::getByte($packet, $offset) == 1 ? true : false);
$this->Server->PasswordProtected = (Utils::getByte($packet, $offset) == 1 ? true : false);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->PlayerCount = Utils::getShort($packet, $offset);
$this->Server->PlayerCount = Utils::getShort($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->MaxPlayers = Utils::getShort($packet, $offset);
$this->Server->MaxPlayers = Utils::getShort($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$len = Utils::getInt($packet, $offset);
$len = Utils::getInt($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->Hostname = Utils::getString($packet, $offset, $len);
$this->Server->Hostname = Utils::getString($packet, $offset, $len);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$len = Utils::getInt($packet, $offset);
$len = Utils::getInt($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->GameMode = Utils::getString($packet, $offset, $len);
$this->Server->GameMode = Utils::getString($packet, $offset, $len);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$len = Utils::getInt($packet, $offset);
$len = Utils::getInt($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->Map = Utils::getString($packet, $offset, $len);
$this->Server->Map = Utils::getString($packet, $offset, $len);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->HaveInfo = true;
$this->HaveInfo = true;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if ($this->Server->PlayerCount >= 100)
if ($this->Server->PlayerCount >= 100)
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->HavePlayer = true;
$this->HavePlayer = true;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
break;
break;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
case 0x72: // rules
case 0x72: // rules
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if ($this->HaveRules)
if ($this->HaveRules)
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
break;
break;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$rulesnum = Utils::getShort($packet, $offset);
$rulesnum = Utils::getShort($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
while ($rulesnum) {
while ($rulesnum) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$len = Utils::getByte($packet, $offset);
$len = Utils::getByte($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$Name = Utils::getString($packet, $offset, $len);
$Name = Utils::getString($packet, $offset, $len);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$len = Utils::getByte($packet, $offset);
$len = Utils::getByte($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$Value = Utils::getString($packet, $offset, $len);
$Value = Utils::getString($packet, $offset, $len);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$rulesnum--;
$rulesnum--;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->Rules[$Name] = $Value;
$this->Server->Rules[$Name] = $Value;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->HaveRules = true;
$this->HaveRules = true;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
break;
break;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
case 0x64: // player
case 0x64: // player
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if ($this->HavePlayer)
if ($this->HavePlayer)
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
break;
break;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$numplayers = Utils::getShort($packet, $offset);
$numplayers = Utils::getShort($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$lastID = 0;
$lastID = 0;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$plusID = 0;
$plusID = 0;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
while ($numplayers) {
while ($numplayers) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$Player = new Player;
$Player = new Player;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$Player->ID = Utils::getByte($packet, $offset) + $plusID;
$Player->ID = Utils::getByte($packet, $offset) + $plusID;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if ($Player->ID < $lastID) {
if ($Player->ID < $lastID) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$Player->ID += 256;
$Player->ID += 256;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$plusID += 256;
$plusID += 256;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$lastID = $Player->ID;
$lastID = $Player->ID;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$len = Utils::getByte($packet, $offset);
$len = Utils::getByte($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$Player->Name = Utils::getString($packet, $offset, $len);
$Player->Name = Utils::getString($packet, $offset, $len);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$len = strlen($Player->Name);
$len = strlen($Player->Name);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$Player->Score = Utils::getInt($packet, $offset);
$Player->Score = Utils::getInt($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$Player->Ping = Utils::getInt($packet, $offset);
$Player->Ping = Utils::getInt($packet, $offset);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$numplayers--;
$numplayers--;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
array_push($this->Server->Players, $Player);
array_push($this->Server->Players, $Player);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->HavePlayer = true;
$this->HavePlayer = true;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
break;
break;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
default:
default:
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
break;
break;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
function requestInfo() {
function requestInfo() {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
array_push($this->SendQueue, "\xFF\xFF\xFF\xFFTSource Engine Query\x00");
array_push($this->SendQueue, "\xFF\xFF\xFF\xFFTSource Engine Query\x00");
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
array_push($this->SendQueue, $this->SAMPHeader . "i");
array_push($this->SendQueue, $this->SAMPHeader . "i");
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
function requestPlayer() {
function requestPlayer() {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
array_push($this->SendQueue, "\xFF\xFF\xFF\xFF\x55" . $this->Challenge);
array_push($this->SendQueue, "\xFF\xFF\xFF\xFF\x55" . $this->Challenge);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
array_push($this->SendQueue, $this->SAMPHeader . "d");
array_push($this->SendQueue, $this->SAMPHeader . "d");
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if ($this->Challenge == "\xFF\xFF\xFF\xFF")
if ($this->Challenge == "\xFF\xFF\xFF\xFF")
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->ResendPlayer = true;
$this->ResendPlayer = true;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
function requestRules() {
function requestRules() {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
array_push($this->SendQueue, "\xFF\xFF\xFF\xFF\x56" . $this->Challenge);
array_push($this->SendQueue, "\xFF\xFF\xFF\xFF\x56" . $this->Challenge);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
array_push($this->SendQueue, $this->SAMPHeader . "r");
array_push($this->SendQueue, $this->SAMPHeader . "r");
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if ($this->Challenge == "\xFF\xFF\xFF\xFF")
if ($this->Challenge == "\xFF\xFF\xFF\xFF")
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->ResendRules = true;
$this->ResendRules = true;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
function GetServer() {
function GetServer() {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$start = Utils::getTime();
$start = Utils::getTime();
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->requestInfo();
$this->requestInfo();
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->requestPlayer();
$this->requestPlayer();
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->requestRules();
$this->requestRules();
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
while (!($this->HaveRules && $this->HaveInfo && $this->HavePlayer)) {
while (!($this->HaveRules && $this->HaveInfo && $this->HavePlayer)) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if (Utils::getTime() - $start >= $this->MaxExecutionTime) {
if (Utils::getTime() - $start >= $this->MaxExecutionTime) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if ($this->HaveInfo && $this->HavePlayer) {
if ($this->HaveInfo && $this->HavePlayer) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->HaveRules = true;
$this->HaveRules = true;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
} else {
} else {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
throw new LSError(4, "Timed out.");
throw new LSError(4, "Timed out.");
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if (count($this->SendQueue) > 0) {
if (count($this->SendQueue) > 0) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
stream_socket_sendto($this->Sock, array_shift($this->SendQueue));
stream_socket_sendto($this->Sock, array_shift($this->SendQueue));
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$meta = stream_get_meta_data($this->Sock);
$meta = stream_get_meta_data($this->Sock);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if ($meta['timed_out'])
if ($meta['timed_out'])
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
throw new LSError(5, "Timed out.");
throw new LSError(5, "Timed out.");
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
usleep(50000);
usleep(50000);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$packet = fread($this->Sock, 2048);
$packet = fread($this->Sock, 2048);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$meta = stream_get_meta_data($this->Sock);
$meta = stream_get_meta_data($this->Sock);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if ($meta['timed_out'])
if ($meta['timed_out'])
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
throw new LSError(6, "Timed out.");
throw new LSError(6, "Timed out.");
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if (strlen($packet) > 0) {
if (strlen($packet) > 0) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$offset = 0;
$offset = 0;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
switch (Utils::getInt($packet, $offset)) {
switch (Utils::getInt($packet, $offset)) {
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
case HL_PACKET:
case HL_PACKET:
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if (!in_array($this->Server->Type, array(0, 1)))
if (!in_array($this->Server->Type, array(0, 1)))
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
break;
break;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->Type = 1;
$this->Server->Type = 1;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->onPacketReceived($packet);
$this->onPacketReceived($packet);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
break;
break;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
case HL_PACKET_SPLITTED:
case HL_PACKET_SPLITTED:
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if (!in_array($this->Server->Type, array(0, 1)))
if (!in_array($this->Server->Type, array(0, 1)))
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
break;
break;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->Type = 1;
$this->Server->Type = 1;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->onSplittedPacketReceived($packet);
$this->onSplittedPacketReceived($packet);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
break;
break;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
case SAMP_PACKET:
case SAMP_PACKET:
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
if (!in_array($this->Server->Type, array(0, 2)))
if (!in_array($this->Server->Type, array(0, 2)))
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
break;
break;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->Server->Type = 2;
$this->Server->Type = 2;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
$this->onSampPacketReceived($packet);
$this->onSampPacketReceived($packet);
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
break;
break;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
default:
default:
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
break;
break;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
return $this->Server;
return $this->Server;
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
}
}
कॉपी
कॉपी हुआ
कॉपी
कॉपी हुआ
?>
?>
सेव किए गए Diffs
ऑरिजनल टेक्स्ट
फ़ाइल खोलें
<?php /* LiveStats Library version: 2.0 query engines: Goldsource, Source, SA:MP protocol: 47, 48 author: nr913 visit www.freakz.ro */ define('HL_PACKET', -1); define('HL_PACKET_SPLITTED', -2); define('SAMP_PACKET', 1347240275); class Player { var $ID; var $Name; var $Score; var $TimePlayed; var $Ping; } class Server { var $Type = 0; var $ProtocolVersion; var $Address; var $Hostname; var $Map; var $Directory; var $Description; var $AppID; var $MaxPlayers; var $PlayerCount; var $BotCount; var $Dedicated; var $OS; var $PasswordProtected; var $Secured; var $GameMode; var $WitnessCount; var $WitnessTime; var $GameVersion; var $Players = array(); var $Rules = array(); } class Time { var $Hours; var $Minutes; var $Seconds; function __construct($seconds) { $this->Hours = floor($seconds / 3600); $this->Minutes = floor($seconds / 60) % 60; $this->Seconds = floor($seconds) % 60; } function __toString() { $hours = ($this->Hours < 10 ? '0' . $this->Hours : $this->Hours); $minutes = ($this->Minutes < 10 ? '0' . $this->Minutes : $this->Minutes); $seconds = ($this->Seconds < 10 ? '0' . $this->Seconds : $this->Seconds); return "$hours:$minutes:$seconds"; } } class LSError extends Exception { var $ErrorMessage; var $ErrorCode; function __construct($errcode, $errmsg) { $this->ErrorCode = $errcode; $this->ErrorMessage = $errmsg; } } class Utils { static function getTime() { list($u, $s) = explode(' ', microtime()); return ((float)$u + (float)$s); } static function getString($packet, &$offset, $length = -1) { $len = strlen($packet); $i = 0; if ($length == -1) { while ($offset + $i < $len && $packet[$offset + $i] != "\x00") $i++; $offset += $i + 1; return substr($packet, $offset - $i - 1, $i); } else { $i = $length; if ($len - $offset < $length) $i = $len - $offset; $offset += $i; return substr($packet, $offset - $i, $i); } } static function getByte($packet, &$offset) { if ($offset >= strlen($packet)) return 0; $char = unpack('cchar', $packet[$offset]); $offset++; return $char['char']; } static function getShort($packet, &$offset) { if ($offset + 2 >= strlen($packet)) return 0; $short = unpack('sshort', substr($packet, $offset, 2)); $offset += 2; return $short['short']; } static function getInt($packet, &$offset) { if ($offset + 4 >= strlen($packet)) return 0; $int = unpack('iint', substr($packet, $offset, 4)); $offset += 4; return $int['int']; } static function getFloat($packet, &$offset) { if ($offset + 4 >= strlen($packet)) return ((float)0.0); $float = unpack('ffloat', substr($packet, $offset, 4)); $offset += 4; return ((float)$float['float']); } } class LiveStats { var $IP; var $Port; var $Sock; var $Challenge = "\xFF\xFF\xFF\xFF"; var $HaveInfo = false; var $HavePlayer = false; var $HaveRules = false; var $ResendPlayer = false; var $ResendRules = false; var $SendQueue = array(); var $MaxExecutionTime = 2; var $SplittedPackets = array(); var $SAMPHeader = "SAMP"; var $Server; public function __construct($hostname, $port = 27015) { $this->IP = gethostbyname($hostname); $this->Port = $port; $errno = 0; $errstr = ''; $this->Sock = @stream_socket_client("udp://{$this->IP}:{$this->Port}", $errno, $errstr, 5); if ($this->Sock === false) throw new LSError(1, "Could not connect to specified host [$errno]: $errstr."); if (stream_set_blocking($this->Sock, false) == false) throw new LSError(2, "Could not set to non-blocking mode."); if (stream_set_timeout($this->Sock, 3) == false) throw new LSError(3, "Could not set timeout to 10 seconds."); $this->Server = new Server; $this->Server->Address = "{$this->IP}:{$this->Port}"; $ip = explode('.', $this->IP); $this->SAMPHeader .= chr($ip[0]) . chr($ip[1]) . chr($ip[2]) . chr($ip[3]) . chr($this->Port & 0xFF) . chr(($this->Port >> 8) & 0xFF); } function onSplittedPacketReceived($packet) { $offset = 4; $ReqID = Utils::getInt($packet, $offset); if (!isset($this->SplittedPackets[$ReqID])) { $this->SplittedPackets[$ReqID] = array( 'Data' => array(), 'Type' => -1, 'Packets' => -1 ); } $this->SplittedPackets[$ReqID]['Data'][] = $packet; if (count($this->SplittedPackets[$ReqID]['Data']) == 2) { $offset = 8; $FB1 = Utils::getByte($this->SplittedPackets[$ReqID]['Data'][0], $offset); $offset = 8; $FB2 = Utils::getByte($this->SplittedPackets[$ReqID]['Data'][1], $offset); if ($FB1 != $FB2) { $this->SplittedPackets[$ReqID]['Type'] = 0; $this->SplittedPackets[$ReqID]['Packets'] = ($FB1<<4)>>4; } else { $this->SplittedPackets[$ReqID]['Type'] = 1; $this->SplittedPackets[$ReqID]['Packets'] = $FB1; } } if (count($this->SplittedPackets[$ReqID]['Data']) == $this->SplittedPackets[$ReqID]['Packets']) { if ($this->SplittedPackets[$ReqID]['Type'] == 0) { for ($i = 0; $i < $this->SplittedPackets[$ReqID]['Packets']; $i++) { $offset = 8; $PckID = Utils::getByte($this->SplittedPackets[$ReqID]['Data'][$i], $offset)>>4; if ($i != $PckID) { $aux = $this->SplittedPackets[$ReqID]['Data'][$PckID]; $this->SplittedPackets[$ReqID]['Data'][$PckID] = $this->SplittedPackets[$ReqID]['Data'][$i]; $this->SplittedPackets[$ReqID]['Data'][$i] = $aux; $i--; } } $packet = "\xFF\xFF\xFF\xFF" . substr($this->SplittedPackets[$ReqID]['Data'][0], 13); for ($i = 1; $i < $this->SplittedPackets[$ReqID]['Packets']; $i++) $packet .= substr($this->SplittedPackets[$ReqID]['Data'][$i], 9); } else { for ($i = 0; $i < $this->SplittedPackets[$ReqID]['Packets']; $i++) { $offset = 9; $PckID = Utils::getByte($this->SplittedPackets[$ReqID]['Data'][$i], $offset); if ($i != $PckID) { $aux = $this->SplittedPackets[$ReqID]['Data'][$PckID]; $this->SplittedPackets[$ReqID]['Data'][$PckID] = $this->SplittedPackets[$ReqID]['Data'][$i]; $this->SplittedPackets[$ReqID]['Data'][$i] = $aux; $i--; } } $packet = "\xFF\xFF\xFF\xFF" . substr($this->SplittedPackets[$ReqID]['Data'][0], 16); for ($i = 1; $i < $this->SplittedPackets[$ReqID]['Packets']; $i++) $packet .= substr($this->SplittedPackets[$ReqID]['Data'][$i], 12); } unset($this->SplittedPackets[$ReqID]); $this->onPacketReceived($packet); } } function onPacketReceived($packet) { $offset = 4; switch (Utils::getByte($packet, $offset)) { case 0x41: // challenge $this->Challenge = substr($packet, 5); if ($this->ResendPlayer) { $this->ResendPlayer = false; $this->requestPlayer(); } if ($this->ResendRules) { $this->ResendRules = false; $this->requestRules(); } break; case 0x44: // player if ($this->HavePlayer) break; $offset = 5; $numplayers = Utils::getByte($packet, $offset); while ($numplayers) { $Player = new Player; $Player->ID = Utils::getByte($packet, $offset); $Player->Name = Utils::getString($packet, $offset); $len = strlen($Player->Name); $Player->Score = Utils::getInt($packet, $offset); $Player->TimePlayed = new Time(Utils::getFloat($packet, $offset)); $numplayers--; array_push($this->Server->Players, $Player); } $this->HavePlayer = true; $this->ResendPlayer = false; break; case 0x49: // info, source if ($this->HaveInfo) break; $offset = 5; $this->Server->ProtocolVersion = Utils::getByte($packet, $offset); $this->Server->Hostname = Utils::getString($packet, $offset); $this->Server->Map = Utils::getString($packet, $offset); $this->Server->Directory = Utils::getString($packet, $offset); $this->Server->Description = Utils::getString($packet, $offset); $this->Server->AppID = Utils::getShort($packet, $offset); $this->Server->PlayerCount = Utils::getByte($packet, $offset); $this->Server->MaxPlayers = Utils::getByte($packet, $offset); $this->Server->BotCount = Utils::getByte($packet, $offset); $this->Server->Dedicated = (Utils::getByte($packet, $offset) == ord('d') ? true : false); $this->Server->OS = (Utils::getByte($packet, $offset) == 'l' ? 'Linux' : 'Windows'); $this->Server->PasswordProtected = (Utils::getByte($packet, $offset) == 1 ? true : false); $this->Server->Secured = (Utils::getByte($packet, $offset) == 1 ? true : false); $TheShipAppIDs = array(2400, 2401, 2402, 2412, 2430, 2406, 2405, 2403); if (in_array($this->Server->AppID, $TheShipAppIDs)) { $gm = Utils::getByte($packet, $offset); $GameModes = array('Hunt', 'Elimination', 'Duel', 'Deathmatch', 'Team VIP', 'Team Elimination'); $this->Server->GameMode = (isset($GameModes[$gm]) ? $GameModes[$gm] : 'Unknown'); $this->Server->WitnessCount = Utils::getByte($packet, $offset); $this->Server->WitnessTime = Utils::getByte($packet, $offset); } $this->Server->GameVersion = Utils::getString($packet, $offset); $this->HaveInfo = true; break; case 0x6D: // info, goldsource if ($this->HaveInfo) break; $offset = 5; Utils::getString($packet, $offset); $this->Server->Hostname = Utils::getString($packet, $offset); $this->Server->Map = Utils::getString($packet, $offset); $this->Server->Directory = Utils::getString($packet, $offset); $this->Server->Description = Utils::getString($packet, $offset); $this->Server->PlayerCount = Utils::getByte($packet, $offset); $this->Server->MaxPlayers = Utils::getByte($packet, $offset); $this->Server->ProtocolVersion = Utils::getByte($packet, $offset); $this->Server->Dedicated = (Utils::getByte($packet, $offset) == ord('d') ? true : false); $this->Server->OS = (Utils::getByte($packet, $offset) == 'l' ? 'Linux' : 'Windows'); $this->Server->AppID = ($this->Server->OS == 'Linux' ? 4 : 5); $this->Server->PasswordProtected = (Utils::getByte($packet, $offset) == 1 ? true : false); $IsMod = Utils::getByte($packet, $offset); if ($IsMod == 1) { Utils::getString($packet, $offset); Utils::getString($packet, $offset); Utils::getByte($packet, $offset); Utils::getInt($packet, $offset); Utils::getInt($packet, $offset); Utils::getByte($packet, $offset); Utils::getByte($packet, $offset); } $this->Server->Secured = (Utils::getByte($packet, $offset) == 1 ? true : false); $this->Server->BotCount = Utils::getByte($packet, $offset); $this->HaveInfo = true; break; case 0x45: // rules if ($this->HaveRules) break; $offset = 5; $rulesnum = Utils::getShort($packet, $offset); while ($rulesnum) { $Name = Utils::getString($packet, $offset); $Value = Utils::getString($packet, $offset); $rulesnum--; $this->Server->Rules[$Name] = $Value; } $this->HaveRules = true; $this->ResendRules = false; break; default: break; } } function onSampPacketReceived($packet) { $offset = 10; switch (Utils::getByte($packet, $offset)) { case 0x69: // info if ($this->HaveInfo) break; $this->Server->PasswordProtected = (Utils::getByte($packet, $offset) == 1 ? true : false); $this->Server->PlayerCount = Utils::getShort($packet, $offset); $this->Server->MaxPlayers = Utils::getShort($packet, $offset); $len = Utils::getInt($packet, $offset); $this->Server->Hostname = Utils::getString($packet, $offset, $len); $len = Utils::getInt($packet, $offset); $this->Server->GameMode = Utils::getString($packet, $offset, $len); $len = Utils::getInt($packet, $offset); $this->Server->Map = Utils::getString($packet, $offset, $len); $this->HaveInfo = true; if ($this->Server->PlayerCount >= 100) $this->HavePlayer = true; break; case 0x72: // rules if ($this->HaveRules) break; $rulesnum = Utils::getShort($packet, $offset); while ($rulesnum) { $len = Utils::getByte($packet, $offset); $Name = Utils::getString($packet, $offset, $len); $len = Utils::getByte($packet, $offset); $Value = Utils::getString($packet, $offset, $len); $rulesnum--; $this->Server->Rules[$Name] = $Value; } $this->HaveRules = true; break; case 0x64: // player if ($this->HavePlayer) break; $numplayers = Utils::getShort($packet, $offset); $lastID = 0; $plusID = 0; while ($numplayers) { $Player = new Player; $Player->ID = Utils::getByte($packet, $offset) + $plusID; if ($Player->ID < $lastID) { $Player->ID += 256; $plusID += 256; } $lastID = $Player->ID; $len = Utils::getByte($packet, $offset); $Player->Name = Utils::getString($packet, $offset, $len); $len = strlen($Player->Name); $Player->Score = Utils::getInt($packet, $offset); $Player->Ping = Utils::getInt($packet, $offset); $numplayers--; array_push($this->Server->Players, $Player); } $this->HavePlayer = true; break; default: break; } } function requestInfo() { array_push($this->SendQueue, "\xFF\xFF\xFF\xFFTSource Engine Query\x00"); array_push($this->SendQueue, $this->SAMPHeader . "i"); } function requestPlayer() { array_push($this->SendQueue, "\xFF\xFF\xFF\xFF\x55" . $this->Challenge); array_push($this->SendQueue, $this->SAMPHeader . "d"); if ($this->Challenge == "\xFF\xFF\xFF\xFF") $this->ResendPlayer = true; } function requestRules() { array_push($this->SendQueue, "\xFF\xFF\xFF\xFF\x56" . $this->Challenge); array_push($this->SendQueue, $this->SAMPHeader . "r"); if ($this->Challenge == "\xFF\xFF\xFF\xFF") $this->ResendRules = true; } function GetServer() { $start = Utils::getTime(); $this->requestInfo(); $this->requestPlayer(); $this->requestRules(); while (!($this->HaveRules && $this->HaveInfo && $this->HavePlayer)) { if (Utils::getTime() - $start >= $this->MaxExecutionTime) { if ($this->HaveInfo && $this->HavePlayer) { $this->HaveRules = true; } else { throw new LSError(4, "Timed out."); } } if (count($this->SendQueue) > 0) { stream_socket_sendto($this->Sock, array_shift($this->SendQueue)); $meta = stream_get_meta_data($this->Sock); if ($meta['timed_out']) throw new LSError(5, "Timed out."); } usleep(50000); $packet = fread($this->Sock, 2048); $meta = stream_get_meta_data($this->Sock); if ($meta['timed_out']) throw new LSError(6, "Timed out."); if (strlen($packet) > 0) { $offset = 0; switch (Utils::getInt($packet, $offset)) { case HL_PACKET: if (!in_array($this->Server->Type, array(0, 1))) break; $this->Server->Type = 1; $this->onPacketReceived($packet); break; case HL_PACKET_SPLITTED: if (!in_array($this->Server->Type, array(0, 1))) break; $this->Server->Type = 1; $this->onSplittedPacketReceived($packet); break; case SAMP_PACKET: if (!in_array($this->Server->Type, array(0, 2))) break; $this->Server->Type = 2; $this->onSampPacketReceived($packet); break; default: break; } } } return $this->Server; } } ?>
परिवर्तित टेक्स्ट
फ़ाइल खोलें
<?php /* LiveStats Library version: 2.0 query engines: Goldsource, Source, SA:MP protocol: 47, 48 author: nr913 visit www.foxh.ro */ define('HL_PACKET', -1); define('HL_PACKET_SPLITTED', -2); define('SAMP_PACKET', 1347240275); class Player { var $ID; var $Name; var $Score; var $TimePlayed; var $Ping; } class Server { var $Type = 0; var $ProtocolVersion; var $Address; var $Hostname; var $Map; var $Directory; var $Description; var $AppID; var $MaxPlayers; var $PlayerCount; var $BotCount; var $Dedicated; var $OS; var $PasswordProtected; var $Secured; var $GameMode; var $WitnessCount; var $WitnessTime; var $GameVersion; var $Players = array(); var $Rules = array(); } class Time { var $Hours; var $Minutes; var $Seconds; function __construct($seconds) { $this->Hours = floor($seconds / 3600); $this->Minutes = floor($seconds / 60) % 60; $this->Seconds = floor($seconds) % 60; } function __toString() { $hours = ($this->Hours < 10 ? '0' . $this->Hours : $this->Hours); $minutes = ($this->Minutes < 10 ? '0' . $this->Minutes : $this->Minutes); $seconds = ($this->Seconds < 10 ? '0' . $this->Seconds : $this->Seconds); return "$hours:$minutes:$seconds"; } } class LSError extends Exception { var $ErrorMessage; var $ErrorCode; function __construct($errcode, $errmsg) { $this->ErrorCode = $errcode; $this->ErrorMessage = $errmsg; } } class Utils { static function getTime() { list($u, $s) = explode(' ', microtime()); return ((float)$u + (float)$s); } static function getString($packet, &$offset, $length = -1) { $len = strlen($packet); $i = 0; if ($length == -1) { while ($offset + $i < $len && $packet[$offset + $i] != "\x00") $i++; $offset += $i + 1; return substr($packet, $offset - $i - 1, $i); } else { $i = $length; if ($len - $offset < $length) $i = $len - $offset; $offset += $i; return substr($packet, $offset - $i, $i); } } static function getByte($packet, &$offset) { if ($offset >= strlen($packet)) return 0; $char = unpack('cchar', $packet[$offset]); $offset++; return $char['char']; } static function getShort($packet, &$offset) { if ($offset + 2 >= strlen($packet)) return 0; $short = unpack('sshort', substr($packet, $offset, 2)); $offset += 2; return $short['short']; } static function getInt($packet, &$offset) { if ($offset + 4 >= strlen($packet)) return 0; $int = unpack('iint', substr($packet, $offset, 4)); $offset += 4; return $int['int']; } static function getFloat($packet, &$offset) { if ($offset + 4 >= strlen($packet)) return ((float)0.0); $float = unpack('ffloat', substr($packet, $offset, 4)); $offset += 4; return ((float)$float['float']); } } class LiveStats { var $IP; var $Port; var $Sock; var $Challenge = "\xFF\xFF\xFF\xFF"; var $HaveInfo = false; var $HavePlayer = false; var $HaveRules = false; var $ResendPlayer = false; var $ResendRules = false; var $SendQueue = array(); var $MaxExecutionTime = 2; var $SplittedPackets = array(); var $SAMPHeader = "SAMP"; var $Server; public function __construct($hostname, $port = 27015) { $this->IP = gethostbyname($hostname); $this->Port = $port; $errno = 0; $errstr = ''; $this->Sock = @stream_socket_client("udp://{$this->IP}:{$this->Port}", $errno, $errstr, 5); if ($this->Sock === false) throw new LSError(1, "Could not connect to specified host [$errno]: $errstr."); if (stream_set_blocking($this->Sock, false) == false) throw new LSError(2, "Could not set to non-blocking mode."); if (stream_set_timeout($this->Sock, 3) == false) throw new LSError(3, "Could not set timeout to 10 seconds."); $this->Server = new Server; $this->Server->Address = "{$this->IP}:{$this->Port}"; $ip = explode('.', $this->IP); $this->SAMPHeader .= chr($ip[0]) . chr($ip[1]) . chr($ip[2]) . chr($ip[3]) . chr($this->Port & 0xFF) . chr(($this->Port >> 8) & 0xFF); } function onSplittedPacketReceived($packet) { $offset = 4; $ReqID = Utils::getInt($packet, $offset); if (!isset($this->SplittedPackets[$ReqID])) { $this->SplittedPackets[$ReqID] = array( 'Data' => array(), 'Type' => -1, 'Packets' => -1 ); } $this->SplittedPackets[$ReqID]['Data'][] = $packet; if (count($this->SplittedPackets[$ReqID]['Data']) == 2) { $offset = 8; $FB1 = Utils::getByte($this->SplittedPackets[$ReqID]['Data'][0], $offset); $offset = 8; $FB2 = Utils::getByte($this->SplittedPackets[$ReqID]['Data'][1], $offset); if ($FB1 != $FB2) { $this->SplittedPackets[$ReqID]['Type'] = 0; $this->SplittedPackets[$ReqID]['Packets'] = ($FB1<<4)>>4; } else { $this->SplittedPackets[$ReqID]['Type'] = 1; $this->SplittedPackets[$ReqID]['Packets'] = $FB1; } } if (count($this->SplittedPackets[$ReqID]['Data']) == $this->SplittedPackets[$ReqID]['Packets']) { if ($this->SplittedPackets[$ReqID]['Type'] == 0) { for ($i = 0; $i < $this->SplittedPackets[$ReqID]['Packets']; $i++) { $offset = 8; $PckID = Utils::getByte($this->SplittedPackets[$ReqID]['Data'][$i], $offset)>>4; if ($i != $PckID) { $aux = $this->SplittedPackets[$ReqID]['Data'][$PckID]; $this->SplittedPackets[$ReqID]['Data'][$PckID] = $this->SplittedPackets[$ReqID]['Data'][$i]; $this->SplittedPackets[$ReqID]['Data'][$i] = $aux; $i--; } } $packet = "\xFF\xFF\xFF\xFF" . substr($this->SplittedPackets[$ReqID]['Data'][0], 13); for ($i = 1; $i < $this->SplittedPackets[$ReqID]['Packets']; $i++) $packet .= substr($this->SplittedPackets[$ReqID]['Data'][$i], 9); } else { for ($i = 0; $i < $this->SplittedPackets[$ReqID]['Packets']; $i++) { $offset = 9; $PckID = Utils::getByte($this->SplittedPackets[$ReqID]['Data'][$i], $offset); if ($i != $PckID) { $aux = $this->SplittedPackets[$ReqID]['Data'][$PckID]; $this->SplittedPackets[$ReqID]['Data'][$PckID] = $this->SplittedPackets[$ReqID]['Data'][$i]; $this->SplittedPackets[$ReqID]['Data'][$i] = $aux; $i--; } } $packet = "\xFF\xFF\xFF\xFF" . substr($this->SplittedPackets[$ReqID]['Data'][0], 16); for ($i = 1; $i < $this->SplittedPackets[$ReqID]['Packets']; $i++) $packet .= substr($this->SplittedPackets[$ReqID]['Data'][$i], 12); } unset($this->SplittedPackets[$ReqID]); $this->onPacketReceived($packet); } } function onPacketReceived($packet) { $offset = 4; switch (Utils::getByte($packet, $offset)) { case 0x41: // challenge $this->Challenge = substr($packet, 5); if ($this->ResendPlayer) { $this->ResendPlayer = false; $this->requestPlayer(); } if ($this->ResendRules) { $this->ResendRules = false; $this->requestRules(); } break; case 0x44: // player if ($this->HavePlayer) break; $offset = 5; $numplayers = Utils::getByte($packet, $offset); while ($numplayers) { $Player = new Player; $Player->ID = Utils::getByte($packet, $offset); $Player->Name = Utils::getString($packet, $offset); $len = strlen($Player->Name); $Player->Score = Utils::getInt($packet, $offset); $Player->TimePlayed = new Time(Utils::getFloat($packet, $offset)); $numplayers--; array_push($this->Server->Players, $Player); } $this->HavePlayer = true; $this->ResendPlayer = false; break; case 0x49: // info, source if ($this->HaveInfo) break; $offset = 5; $this->Server->ProtocolVersion = Utils::getByte($packet, $offset); $this->Server->Hostname = Utils::getString($packet, $offset); $this->Server->Map = Utils::getString($packet, $offset); $this->Server->Directory = Utils::getString($packet, $offset); $this->Server->Description = Utils::getString($packet, $offset); $this->Server->AppID = Utils::getShort($packet, $offset); $this->Server->PlayerCount = Utils::getByte($packet, $offset); $this->Server->MaxPlayers = Utils::getByte($packet, $offset); $this->Server->BotCount = Utils::getByte($packet, $offset); $this->Server->Dedicated = (Utils::getByte($packet, $offset) == ord('d') ? true : false); $this->Server->OS = (Utils::getByte($packet, $offset) == 'l' ? 'Linux' : 'Windows'); $this->Server->PasswordProtected = (Utils::getByte($packet, $offset) == 1 ? true : false); $this->Server->Secured = (Utils::getByte($packet, $offset) == 1 ? true : false); $TheShipAppIDs = array(2400, 2401, 2402, 2412, 2430, 2406, 2405, 2403); if (in_array($this->Server->AppID, $TheShipAppIDs)) { $gm = Utils::getByte($packet, $offset); $GameModes = array('Hunt', 'Elimination', 'Duel', 'Deathmatch', 'Team VIP', 'Team Elimination'); $this->Server->GameMode = (isset($GameModes[$gm]) ? $GameModes[$gm] : 'Unknown'); $this->Server->WitnessCount = Utils::getByte($packet, $offset); $this->Server->WitnessTime = Utils::getByte($packet, $offset); } $this->Server->GameVersion = Utils::getString($packet, $offset); $this->HaveInfo = true; break; case 0x6D: // info, goldsource if ($this->HaveInfo) break; $offset = 5; Utils::getString($packet, $offset); $this->Server->Hostname = Utils::getString($packet, $offset); $this->Server->Map = Utils::getString($packet, $offset); $this->Server->Directory = Utils::getString($packet, $offset); $this->Server->Description = Utils::getString($packet, $offset); $this->Server->PlayerCount = Utils::getByte($packet, $offset); $this->Server->MaxPlayers = Utils::getByte($packet, $offset); $this->Server->ProtocolVersion = Utils::getByte($packet, $offset); $this->Server->Dedicated = (Utils::getByte($packet, $offset) == ord('d') ? true : false); $this->Server->OS = (Utils::getByte($packet, $offset) == 'l' ? 'Linux' : 'Windows'); $this->Server->AppID = ($this->Server->OS == 'Linux' ? 4 : 5); $this->Server->PasswordProtected = (Utils::getByte($packet, $offset) == 1 ? true : false); $IsMod = Utils::getByte($packet, $offset); if ($IsMod == 1) { Utils::getString($packet, $offset); Utils::getString($packet, $offset); Utils::getByte($packet, $offset); Utils::getInt($packet, $offset); Utils::getInt($packet, $offset); Utils::getByte($packet, $offset); Utils::getByte($packet, $offset); } $this->Server->Secured = (Utils::getByte($packet, $offset) == 1 ? true : false); $this->Server->BotCount = Utils::getByte($packet, $offset); $this->HaveInfo = true; break; case 0x45: // rules if ($this->HaveRules) break; $offset = 5; $rulesnum = Utils::getShort($packet, $offset); while ($rulesnum) { $Name = Utils::getString($packet, $offset); $Value = Utils::getString($packet, $offset); $rulesnum--; $this->Server->Rules[$Name] = $Value; } $this->HaveRules = true; $this->ResendRules = false; break; default: break; } } function onSampPacketReceived($packet) { $offset = 10; switch (Utils::getByte($packet, $offset)) { case 0x69: // info if ($this->HaveInfo) break; $this->Server->PasswordProtected = (Utils::getByte($packet, $offset) == 1 ? true : false); $this->Server->PlayerCount = Utils::getShort($packet, $offset); $this->Server->MaxPlayers = Utils::getShort($packet, $offset); $len = Utils::getInt($packet, $offset); $this->Server->Hostname = Utils::getString($packet, $offset, $len); $len = Utils::getInt($packet, $offset); $this->Server->GameMode = Utils::getString($packet, $offset, $len); $len = Utils::getInt($packet, $offset); $this->Server->Map = Utils::getString($packet, $offset, $len); $this->HaveInfo = true; if ($this->Server->PlayerCount >= 100) $this->HavePlayer = true; break; case 0x72: // rules if ($this->HaveRules) break; $rulesnum = Utils::getShort($packet, $offset); while ($rulesnum) { $len = Utils::getByte($packet, $offset); $Name = Utils::getString($packet, $offset, $len); $len = Utils::getByte($packet, $offset); $Value = Utils::getString($packet, $offset, $len); $rulesnum--; $this->Server->Rules[$Name] = $Value; } $this->HaveRules = true; break; case 0x64: // player if ($this->HavePlayer) break; $numplayers = Utils::getShort($packet, $offset); $lastID = 0; $plusID = 0; while ($numplayers) { $Player = new Player; $Player->ID = Utils::getByte($packet, $offset) + $plusID; if ($Player->ID < $lastID) { $Player->ID += 256; $plusID += 256; } $lastID = $Player->ID; $len = Utils::getByte($packet, $offset); $Player->Name = Utils::getString($packet, $offset, $len); $len = strlen($Player->Name); $Player->Score = Utils::getInt($packet, $offset); $Player->Ping = Utils::getInt($packet, $offset); $numplayers--; array_push($this->Server->Players, $Player); } $this->HavePlayer = true; break; default: break; } } function requestInfo() { array_push($this->SendQueue, "\xFF\xFF\xFF\xFFTSource Engine Query\x00"); array_push($this->SendQueue, $this->SAMPHeader . "i"); } function requestPlayer() { array_push($this->SendQueue, "\xFF\xFF\xFF\xFF\x55" . $this->Challenge); array_push($this->SendQueue, $this->SAMPHeader . "d"); if ($this->Challenge == "\xFF\xFF\xFF\xFF") $this->ResendPlayer = true; } function requestRules() { array_push($this->SendQueue, "\xFF\xFF\xFF\xFF\x56" . $this->Challenge); array_push($this->SendQueue, $this->SAMPHeader . "r"); if ($this->Challenge == "\xFF\xFF\xFF\xFF") $this->ResendRules = true; } function GetServer() { $start = Utils::getTime(); $this->requestInfo(); $this->requestPlayer(); $this->requestRules(); while (!($this->HaveRules && $this->HaveInfo && $this->HavePlayer)) { if (Utils::getTime() - $start >= $this->MaxExecutionTime) { if ($this->HaveInfo && $this->HavePlayer) { $this->HaveRules = true; } else { throw new LSError(4, "Timed out."); } } if (count($this->SendQueue) > 0) { stream_socket_sendto($this->Sock, array_shift($this->SendQueue)); $meta = stream_get_meta_data($this->Sock); if ($meta['timed_out']) throw new LSError(5, "Timed out."); } usleep(50000); $packet = fread($this->Sock, 2048); $meta = stream_get_meta_data($this->Sock); if ($meta['timed_out']) throw new LSError(6, "Timed out."); if (strlen($packet) > 0) { $offset = 0; switch (Utils::getInt($packet, $offset)) { case HL_PACKET: if (!in_array($this->Server->Type, array(0, 1))) break; $this->Server->Type = 1; $this->onPacketReceived($packet); break; case HL_PACKET_SPLITTED: if (!in_array($this->Server->Type, array(0, 1))) break; $this->Server->Type = 1; $this->onSplittedPacketReceived($packet); break; case SAMP_PACKET: if (!in_array($this->Server->Type, array(0, 2))) break; $this->Server->Type = 2; $this->onSampPacketReceived($packet); break; default: break; } } } return $this->Server; } } ?>
अंतर खोजें