To może popracujemy nad tym razem, lub coś? Hwao niewiele mi zdążył pomóc przed padem GG.
Znalazłem skrypt phpRCON (logowanie, zarządzanie serwerem, odpalanie komend, listy banów etc). Jest w nim klasa Rcon, którą możnaby jakoś przerobić. Ja niestety nie znam się na klasach, nie wiem jak ich skutecznie używać itp., więc ktoś musiałby tu pomóc (ennics? hwao?). To jest ta klasa:
http://bez-strachu.pl/najki/rcon_hl_net.txtTo co robimy dalej?
UPDATE: Znalazłem coś ciekawego.
Plik "librcon.php"<?
#Lib half-life rcon v 0.2 by Mariusz \"Aiv\" Dalewski <aiv@battlefield1942.pl>
function rcon_open($ip, $port) {
$socket = fsockopen(\"udp://$ip\", $port, $err1, $err2); return $socket;
}
function rcon_close($socket) {
}
function rcon_public_command($socket, $command, $timeout = 5) {
fwrite($socket,\"xFFxFFxFFxFF$command0\"); $response = rcon_read($socket);
return $response;
}
function rcon_command($socket, $challenge, $password, $command, $timeout = 5) {
fwrite($socket,\"xFFxFFxFFxFFrcon $challenge \"$password\" $command0\"); $response = rcon_read($socket);
return $response;
}
function rcon_get_challenge($socket, $timeout = 5) {
fwrite($socket,\"xFFxFFxFFxFFchallenge rcon0\"); $header = fread($socket, 5
); $package = fread($socket, $status['unread_bytes']); $response = $challenge[2];
return $response;
}
function rcon_read($socket) {
while($header = fread($socket, 5
)) { $package = fread($socket, $status['unread_bytes']); $headers[] = $header;
$packages[] = $package;
if (substr($package, 2, 2) == \"x00x12\") { $packages_more[$header] = $package;
}
}
for($i = 0; $i != count($packages); $i++) { if (substr($packages[$i],2,2) == \"x00x02\") { $package_more = $packages_more[$headers[$i]];
$package_more = substr($package_more,4
); $package_more = substr($package_more,0
,strlen($package_more)-1
); $package = $packages[$i];
$package = substr($package,10
); $package .= $package_more;
$new[] = $package;
} elseif (substr($packages[$i],2,2) != \"x00x12\" && substr($packages[$i],strlen($packages[$i])-2) == \"x00x00\") { $packages[$i] = substr($packages[$i],0
,strlen($packages[$i])-2
); $new[] = $packages[$i];
}
}
if ($new)
else
$response = @implode('', $packages);
return $response;
}
function parse_info($package) {
$parse = explode(\"0\", $package); $response[address] = $parse[0];
$response[hostname] = $parse[1];
$response[map] = $parse[2];
$response[gamedir] = $parse[3];
$response[description] = $parse[4];
$response[players
] = ord
($package[strlen($package)-3
]); $response[max] = ord
($package[strlen($package)-2
]); $response[protocol
] = ord
($package[strlen($package)-1
]); return $response;
}
function parse_infostring($package) {
$parse = explode(\"0\", $package); $parse = explode(\"\", $parse[1]); for ($i = 1; $i < count($parse); ($i += 2
)) { $response[$parse[$i]] = $parse[($i+1)];
}
return $response;
}
function parse_players($package) {
$users = ord($package[0]);
$offset = 1;
for ($i = 0; $i < $users; $i++) {
$gracz = ord($package[$offset++]);
$nick = '';
while ($package[$offset] != \"x00\") {
$nick .= $package[$offset];
$offset++;
}
$offset++;
$llong = unpack(\"llong\",$package[$offset].$package[$offset+1].$package[$offset+2].$package[$offset
+3]); $frags = $llong['long'];
$offset += 4;
$ffloat = unpack(\"ffloat\",$package[$offset].$package[$offset+1].$package[$offset+2].$package[$offset
+3]); $time = $ffloat['float'];
$offset += 4;
$minutes = floor($time / 60
); $h = floor($minutes / 60
); $seconds = floor($time - ($minutes * 60
)); $minutes = $minutes - ($h * 60);
$time = sprintf(\"%02s:%02s:%02s\", $h, $minutes, $seconds);
$response[$i][id] = $gracz;
$response[$i][nick] = $nick;
$response[$i][frags] = $frags;
$response[$i][time] = $time; }
return $response;
}
function parse_rules($package) {
$parse = explode(\"0\", $package); for ($i = 1; $i < count($parse); ($i=$i+2
)) { $response[$parse[$i]] = $parse[($i+1)];
}
return $response;
}
?>
Plik "test.php"<?
include('librcon.php');
$ip = 'your server ip';
$port = 'your server port';
$rcon_password = 'your rcon password';
$command = 'command';
// Public query
$socket = rcon_open($ip, $port);
$response = rcon_public_command($socket, 'infostring');
$infostring = parse_infostring($response);
rcon_close($socket);
// Rcon
$socket = rcon_open($ip, $port);
$challenge = rcon_get_challenge($socket);
$command = rcon_command($socket, $challenge, $rcon_password, $command);
rcon_close($socket);
?>
Jest git!