tjone270

servers.php

Jan 24th, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2.   require_once dirname(dirname(__FILE__)) . "/base.php";
  3.   require_once dirname(dirname(__FILE__)) . "/thirdparty/SourceQuery/bootstrap.php";
  4.  
  5.   use xPaw\SourceQuery\SourceQuery;
  6.  
  7.   $servers = array(
  8.     "103.25.58.139" => array( // purgery sydney
  9.       "27960",
  10.       "27961",
  11.       "27962",
  12.       "27963",
  13.       "27964",
  14.       "27965",
  15.       "27966",
  16.       "27967",
  17.       "27968",
  18.       "27970",
  19.       "27971",
  20.       "27972",
  21.     ),
  22.     "119.252.27.101" => array( // purgery adelaide
  23.       "27960",
  24.       "27961",
  25.       "27962",
  26.       "27963",
  27.       "27964",
  28.       "27965",
  29.       "27966",
  30.       "27967",
  31.       "27968",
  32.       "27969",
  33.     ),
  34.     "45.114.116.189" => array( // cage
  35.       "27960",
  36.       "27961",
  37.       "27962",
  38.       "27963",
  39.       "27964",
  40.     ),
  41.     "125.63.61.78" => array( // cage
  42.       "27960",
  43.       "27961",
  44.       "27962",
  45.       "27963",
  46.       "27964",
  47.     ),
  48.   );
  49.  
  50.   function isTeamGame($info) {
  51.     $team_gametypes = array(
  52.       "Attack and Defend",
  53.       "Capture the Flag",
  54.       "Clan Arena",
  55.       "Domination",
  56.       "Freeze Tag",
  57.       "Harvester",
  58.       "One Flag CTF",
  59.       "Red Rover",
  60.       "Team Deathmatch",
  61.       "Overload",
  62.     );
  63.     $free_gametypes = array(
  64.       "Duel",
  65.       "Free For All",
  66.       "Race",
  67.     );
  68.     $gametype = $info["ModDesc"];
  69.     if (in_array($gametype, $team_gametypes)) {
  70.       return true;
  71.     } elseif (in_array($gametype, $free_gametypes)) {
  72.       return false;
  73.     } else {
  74.       return ("Error while determining team gametype: " . $gametype);
  75.     }
  76.   }
  77.  
  78.   function getGamestateNicely($rules) {
  79.     if ($rules["g_gameState"] == "IN_PROGRESS") {
  80.       return "In Progress";
  81.     } elseif ($rules["g_gameState"] == "PRE_GAME") {
  82.       return "Warm Up";
  83.     } elseif ($rules["g_gameState"] == "COUNT_DOWN") {
  84.       return "Count Down";
  85.     } else {
  86.       return $rules["g_gameState"];
  87.     }
  88.   }
  89.  
  90.   function colourNames($players) {
  91.     foreach ($players as &$player) {
  92.       $player["ColouredName"] = Functions::quakeColourConvert($player["Name"]);
  93.     }
  94.     return $players;
  95.   }
  96.  
  97.   function filterData($info, $players, $rules) {
  98.     return array(
  99.       "ServerName" => trim($info["HostName"]),
  100.       "ServerTags" => $info["GameTags"],
  101.       "ServerTagsArray" => explode(",", $info["GameTags"]),
  102.       "GameType" => $info["ModDesc"],
  103.       "GameTypeID" => $rules["g_gametype"],
  104.       "Map" => $info["Map"],
  105.       "SteamID" => $info["SteamID"],
  106.       "CurrentPlayers" => $info["Players"],
  107.       "MaxPlayers" => $info["MaxPlayers"],
  108.       "NumPlayers" => ($info["Players"] . "/" . $info["MaxPlayers"]),
  109.       "PlayersInfo" => colourNames($players),
  110.       "RedScore" => $rules["g_redScore"],
  111.       "BlueScore" => $rules["g_blueScore"],
  112.       "TeamScores" => ("<font color=\"red\">" . $rules["g_redScore"] . "</font><font color=\"black\">-</font><font color=\"blue\">" . $rules["g_blueScore"] . "</font>"),
  113.       "TeamGame" => isTeamGame($info),
  114.       "Fraglimit" => $rules["fraglimit"],
  115.       "Capturelimit" => $rules["capturelimit"],
  116.       "Timelimit" => $rules["timelimit"],
  117.       "Roundlimit" => $rules["roundlimit"],
  118.       "Scorelimit" => $rules["scorelimit"],
  119.       "TeamSize" => $rules["teamsize"],
  120.       "GameState" => $rules["g_gameState"],
  121.       "GameStateHumanReadable" => getGamestateNicely($rules),
  122.     );
  123.   }
  124.  
  125.   function getServerData($ip, $port) {
  126.     try {
  127.       $query = new SourceQuery();
  128.       $query->Connect($ip, $port, 1, SourceQuery::SOURCE);
  129.  
  130.       $getInfo = $query->GetInfo();
  131.       $getPlayers = $query->GetPlayers();
  132.       $getRules = $query->GetRules();
  133.  
  134.       $data = filterData($getInfo, $getPlayers, $getRules);
  135.       return array_merge($data, array(
  136.         "link" => ("steam://connect/" . $ip . ":" . $port),
  137.       ));
  138.     } catch (Exception $e) {
  139.       return array(
  140.         "Error" => $e->getMessage(),
  141.       );
  142.     } finally {
  143.       $query->Disconnect();
  144.     }
  145.   }
  146.  
  147.   $serverData = array();
  148.   foreach ($servers as $ip => $ports) {
  149.     foreach ($ports as $port) {
  150.       $data = getServerData($ip, $port);
  151.       if (!isset($data["Error"])) {
  152.         array_push($serverData, $data);
  153.       }
  154.     }
  155.   }
  156.   /*
  157.   $serverModals = array();
  158.   foreach ($serverData as $server) {
  159.     array_push($serverModals, array(
  160.       ""
  161.     ));
  162.   }
  163.   */
  164.  
  165.   $rend->setTemplateVariable("serverdata", $serverData);
  166.   //$GLOBALS["rendererVars"]["servermodals"] = $serverModals;
Add Comment
Please, Sign In to add comment