
 /*----------------------------------------------------------------------------------------------------------\
 |                                                                                                            |
 |                      [ LIVE GAME SERVER LIST ] [  RICHARD PERRY FROM GREYCUBE.COM ]                       |
 |                                                                                                            |
 |    Released under the terms and conditions of the GNU General Public License Version 3 (http://gnu.org)    |
 |                                                                                                            |
 \-----------------------------------------------------------------------------------------------------------*/


  function lgsl_query_23(&$server, &$lgsl_need, &$lgsl_fp)
  {
//---------------------------------------------------------+
//  REFERENCE:
//  http://siteinthe.us
//  http://www.tribesmasterserver.com

    fwrite($lgsl_fp, "b++");

    $buffer = fread($lgsl_fp, 4096);

    if (!$buffer) { return FALSE; }

    $buffer = substr($buffer, 4); // REMOVE HEADER

//---------------------------------------------------------+

    $server['s']['game']       = lgsl_cut_pascal($buffer);
    $server['e']['version']    = lgsl_cut_pascal($buffer);
    $server['s']['name']       = lgsl_cut_pascal($buffer);
    $server['e']['dedicated']  = ord(lgsl_cut_byte($buffer, 1));
    $server['s']['password']   = ord(lgsl_cut_byte($buffer, 1));
    $server['s']['players']    = ord(lgsl_cut_byte($buffer, 1));
    $server['s']['playersmax'] = ord(lgsl_cut_byte($buffer, 1));
    $server['e']['cpu']        = lgsl_unpack(lgsl_cut_byte($buffer, 2), "S");
    $server['e']['mod']        = lgsl_cut_pascal($buffer);
    $server['e']['type']       = lgsl_cut_pascal($buffer);
    $server['s']['map']        = lgsl_cut_pascal($buffer);
    $server['e']['motd']       = lgsl_cut_pascal($buffer);
    $server['e']['teams']      = ord(lgsl_cut_byte($buffer, 1));

//---------------------------------------------------------+

    $team_field = "?".lgsl_cut_pascal($buffer);
    $team_field = split("\t", $team_field);

    foreach ($team_field as $key => $value)
    {
      $value = substr($value, 1);
      $value = strtolower($value);
      $team_field[$key] = $value;
    }

//---------------------------------------------------------+

    $player_field = "?".lgsl_cut_pascal($buffer);
    $player_field = split("\t", $player_field);

    foreach ($player_field as $key => $value)
    {
      $value = substr($value, 1);
      $value = strtolower($value);

      if ($value == "player name") { $value = "name"; }

      $player_field[$key] = $value;
    }

    $player_field[] = "unknown_1";
    $player_field[] = "unknown_2";

//---------------------------------------------------------+

    for ($i=0; $i<$server['e']['teams']; $i++)
    {
      $team_name = lgsl_cut_pascal($buffer);
      $team_info = lgsl_cut_pascal($buffer);

      if (!$team_info) { continue; }

      $team_info = str_replace("%t", $team_name, $team_info);
      $team_info = split("\t", $team_info);

      foreach ($team_info as $key => $value)
      {
        $field = $team_field[$key];
        $value = trim($value);

        if ($field == "team name") { $field = "name"; }

        $server['t'][$i][$field] = $value;
      }
    }

//---------------------------------------------------------+

    for ($i=0; $i<$server['s']['players']; $i++)
    {
      $player_bits   = array();
      $player_bits[] = ord(lgsl_cut_byte($buffer, 1)) * 4; // %p = PING
      $player_bits[] = ord(lgsl_cut_byte($buffer, 1));     // %l = PACKET LOSS
      $player_bits[] = ord(lgsl_cut_byte($buffer, 1));     // %t = TEAM
      $player_bits[] = lgsl_cut_pascal($buffer);           // %n = PLAYER NAME
      $player_info   = lgsl_cut_pascal($buffer);

      if (!$player_info) { continue; }

      $player_info = str_replace(array("%p","%l","%t","%n"), $player_bits, $player_info);
      $player_info = split("\t", $player_info);

      foreach ($player_info as $key => $value)
      {
        $field = $player_field[$key];
        $value = trim($value);

        if ($field == "team") { $value = $server['t'][$value]['name']; }

        $server['p'][$i][$field] = $value;
      }
    }

//---------------------------------------------------------+

    return TRUE;
  }
