CS 1,6 query og Source Query
Hey.. Jeg har følgende script til at udføre en rcon kommando på min CS 1,6 server. Er der mulighed for, at det kan ændres en smule, så det også er kompatibelt med HL2? Altså CS:Source?function RconCommand($command, $pagenumber = 0, $single = true)
{
//If there is no open connection return false
if(!$this->connected)
return $this->connected;
//get challenge number
if($this->challenge_number == "")
{
//send request of challenge number
$challenge = "\xFF\xFF\xFF\xFFchallenge rcon\n";
$buffer = $this->Communicate($challenge);
//If no connection is open
if(trim($buffer) == "")
{
$this->connected = false;
return false;
}
//get challenge number
$buffer = explode(" ", $buffer);
$this->challenge_number = trim($buffer[2]);
}
//build command
$command = "\xFF\xFF\xFF\xFFrcon $this->challenge_number \"$this->server_password\" $command\n";
//get specified page
$result = "";
$buffer = "";
while($pagenumber >= 0)
{
//send rcon command
$buffer .= $this->Communicate($command);
//get only one package
if($single == true)
$result = $buffer;
//get more then one package and put them together
else
$result .= $buffer;
//clear command for higher iterations
$command = "";
$pagenumber--;
} //while($pagenumber >= 0)
//return unformatted result
return trim($result);
}
Endvidere er der en Communicate funktion længere nede i scriptet, som sørger for den egentlige forbindelse...
function Communicate($command)
{
//If there is no open connection return false
if(!$this->connected)
return $this->connected;
//write command on socket
if($command != "")
fputs($this->socket, $command, strlen($command));
//get results from server
$buffer = fread ($this->socket, 1);
$status = socket_get_status($this->socket);
$buffer .= fread($this->socket, $status["unread_bytes"]);
//If there is another package waiting
if(substr($buffer, 0, 4) == "\xfe\xff\xff\xff")
{
//get results from server
$buffer2 = fread ($this->socket, 1);
$status = socket_get_status($this->socket);
$buffer2 .= fread($this->socket, $status["unread_bytes"]);
//If the second one came first
if(strlen($buffer) > strlen($buffer2))
$buffer = substr($buffer, 14) . substr($buffer2, 9);
else
$buffer = substr($buffer2, 14) . substr($buffer, 9);
}
//In case there is only one package
else
$buffer = substr($buffer, 5);
//return unformatted result
return $buffer;
} //function Communicate($buffer)
}
Jeg har lidt på fornemmelsen, at det er $command, som skal laves om... Jeg har søgt en del efter det, men kan sgu ikke finde noget brugbart :/ Jeg ved, at det er meget kode. Men det er ikke så slemt, som det ser ud til. Det er ret simpel kode.
Det er på linjen med $buffer2 = fread ($this->socket, 1); at den fejler pga. for lang execution time. Det kører som sagt perfekt med en 1,6 server.
Mvh
Anders