function Source_A2S_Rules($ip, $port, &$challenge) { $cmd = "ÿÿÿÿV" . pack('l', $challenge); if (!($serverdata = GetServerData($cmd, $ip, $port))) { return false; } $datastart = 0; GetInt32($serverdata, $datastart); $type = GetInt8($serverdata, $datastart); if ($type == 65) { $challenge = Decode_Challenge_Packet($serverdata, $datastart); return Source_A2S_Rules($ip, $port, $challenge); } return Decode_Rule_Packet($serverdata); }
$server_details['players_connecting'] -= $server_details['numbots']; $server_details['players_connecting'] -= count($server_players); $server_details['players_connecting'] -= $server_details['hltvcount']; // we have some info from the server (no rcon yet) $xmlBody .= "<map>" . $server_details['map'] . "</map>"; $xmlBody .= "<serverName>" . htmlentities($server_details['hostname'], ENT_COMPAT, "UTF-8") . "</serverName>"; $xmlBody .= "<maxplayers>" . $server_details['maxplayers'] . "</maxplayers>"; $xmlBody .= "<players>" . $server_details['players_real'] . "</players>"; $xmlBody .= "<secure>" . $server_details['secure'] . "</secure>"; if ($server_details['botcount'] > 0) { $xmlBody .= "<bots>" . $server_details['numbots'] . "</bots>"; } # Get challenge $query_challenge = Source_A2S_GetChallenge($server_ip, $server_port); # Get packets with challenge number $server_rules = Source_A2S_Rules($server_ip, $server_port, $query_challenge); $server_players = Source_A2S_Player($server_ip, $server_port, $query_challenge); $server_details = Format_Info_Array($server_details); // the nextmap if (isset($server_rules['cm_nextmap'])) { $server_details['nextmap'] = $server_rules['cm_nextmap']; } elseif (isset($server_rules['amx_nextmap'])) { $server_details['nextmap'] = $server_rules['amx_nextmap']; } elseif (isset($server_rules['mani_nextmap'])) { $server_details['nextmap'] = $server_rules['mani_nextmap']; } if (isset($server_details['nextmap']) && $server_details['nextmap'] != "") { $xmlBody .= "<nextmap>" . $server_details['nextmap'] . "</nextmap>"; } # Some unfortunate games like CS don't usually give the map timeleft # I wonder if some plugin can yet again provide a use here...