function HalfLife_Rcon($ip, $port, $rcon, $command, &$challenge, $challenged = 0) { # No point challenging more than we have too. if (strlen($challenge) < 5) { $challenge = HalfLife_GetChallenge($ip, $port); $challenged++; } $cmd = "ÿÿÿÿrcon {$challenge} \"{$rcon}\" {$command}"; if (!($serverdata = GetServerData($cmd, $ip, $port))) { return false; } $serverdata = trim($serverdata); if (eregi('^Bad challenge.', $serverdata)) { # Try for the challenge twice, if that fails... fail? if ($challenged < 2) { $challenge = ''; $serverdata = HalfLife_Rcon($ip, $port, $rcon, $command, $challenge, $challenged); } else { return false; } } elseif (eregi('^Bad rcon_password.', $serverdata)) { return false; } return $serverdata; }
// strange as of 29.10.2008 only the Source_A2S_Rules returns a challenge which // is used and needed in Source_A2S_Player $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); // If HLStats currently stores the rcon, might as well try to get more data from a HL status // since the rcon is broken we deactivate this.... 31.10.2008 banana // @todo: to complete this and use eg. steamcondenser $server_rcon = false; $server_status = false; if ($server_rcon) { if ($server['source'] == 1) { $server_players_tmp = $server_players; $server_status = Source_Rcon($server_ip, $server_port, $server_rcon, 'status'); } else { $server_status = HalfLife_Rcon($server_ip, $server_port, $server_rcon, 'status', $query_challenge); } if ($server_status) { # Rcon worked $server_players = array(); $server_hltv = array(); Parse_HL_Status($server_status, $server['source'], $server_players, $server_hltv); $player_columns[] = array('column' => 'id', 'name' => ' ID', 'align' => 'left', 'width' => '25'); $player_columns[] = array('column' => 'name', 'name' => 'Name', 'align' => 'left', 'width' => ''); $player_columns[] = array('column' => 'uid', 'name' => 'Unique ID', 'align' => 'left', 'width' => '125'); $player_columns[] = array('column' => 'ping', 'name' => 'Ping', 'align' => 'right', 'width' => '35'); $player_columns[] = array('column' => 'frags', 'name' => 'Frags', 'align' => 'right', 'width' => '30'); $player_columns[] = array('column' => 'loss', 'name' => 'Loss', 'align' => 'right', 'width' => '30'); $player_columns[] = array('column' => 'time', 'name' => 'Connected', 'align' => 'right', 'width' => '75'); } }