/** * Handle processing details since they are different than BF3 * * @param \GameQ\Buffer $buffer * * @return array */ protected function processDetails(Buffer $buffer) { // Decode into items $items = $this->decode($buffer); // Set the result to a new result instance $result = new Result(); // Server is always dedicated $result->add('dedicated', 1); // These are the same no matter what mode the server is in $result->add('hostname', $items[1]); $result->add('num_players', (int) $items[2]); $result->add('max_players', (int) $items[3]); $result->add('gametype', $items[4]); $result->add('map', $items[5]); $result->add('roundsplayed', (int) $items[6]); $result->add('roundstotal', (int) $items[7]); $result->add('num_teams', (int) $items[8]); // Set the current index $index_current = 9; // Pull the team count $teamCount = $result->get('num_teams'); // Loop for the number of teams found, increment along the way for ($id = 1; $id <= $teamCount; $id++, $index_current++) { // Shows the tickets $result->addTeam('tickets', $items[$index_current]); // We add an id so we know which team this is $result->addTeam('id', $id); } // Get and set the rest of the data points. $result->add('targetscore', (int) $items[$index_current]); $result->add('online', 1); // Forced true, it seems $words[$index_current + 1] is always empty $result->add('ranked', (int) $items[$index_current + 2]); $result->add('punkbuster', (int) $items[$index_current + 3]); $result->add('password', (int) $items[$index_current + 4]); $result->add('uptime', (int) $items[$index_current + 5]); $result->add('roundtime', (int) $items[$index_current + 6]); $result->add('ip_port', $items[$index_current + 7]); $result->add('punkbuster_version', $items[$index_current + 8]); $result->add('join_queue', (int) $items[$index_current + 9]); $result->add('region', $items[$index_current + 10]); $result->add('pingsite', $items[$index_current + 11]); $result->add('country', $items[$index_current + 12]); //$result->add('quickmatch', (int) $items[$index_current + 13]); Supposed to be here according to R42 but is not $result->add('blaze_player_count', (int) $items[$index_current + 13]); $result->add('blaze_game_state', (int) $items[$index_current + 14]); unset($items, $index_current, $teamCount, $buffer); return $result->fetch(); }
/** * Handles processing the server details from goldsource response * * @param \GameQ\Buffer $buffer * * @return array * @throws \GameQ\Exception\Protocol */ protected function processDetailsGoldSource(Buffer $buffer) { // Set the result to a new result instance $result = new Result(); $result->add('address', $buffer->readString()); $result->add('hostname', $buffer->readString()); $result->add('map', $buffer->readString()); $result->add('game_dir', $buffer->readString()); $result->add('game_descr', $buffer->readString()); $result->add('num_players', $buffer->readInt8()); $result->add('max_players', $buffer->readInt8()); $result->add('version', $buffer->readInt8()); $result->add('dedicated', $buffer->read()); $result->add('os', $buffer->read()); $result->add('password', $buffer->readInt8()); // Mod section $result->add('ismod', $buffer->readInt8()); // We only run these if ismod is 1 (true) if ($result->get('ismod') == 1) { $result->add('mod_urlinfo', $buffer->readString()); $result->add('mod_urldl', $buffer->readString()); $buffer->skip(); $result->add('mod_version', $buffer->readInt32Signed()); $result->add('mod_size', $buffer->readInt32Signed()); $result->add('mod_type', $buffer->readInt8()); $result->add('mod_cldll', $buffer->readInt8()); } $result->add('secure', $buffer->readInt8()); $result->add('num_bots', $buffer->readInt8()); unset($buffer); return $result->fetch(); }