Unsupported PHP app for analysing and displaying stats for Team Fortress 2
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

mapchange.php 2.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #!/usr/bin/php -q
  2. <?PHP
  3. require_once(dirname(__FILE__) . '/config.php');
  4. require_once(dirname(__FILE__) . '/inc/rcon.class.php');
  5. require_once(dirname(__FILE__) . '/inc/database.php');
  6. define('SCRIPT_HEAD1', 'mapchange.php v0.1');
  7. define('SCRIPT_HEAD3', 'Changes maps on an empty server');
  8. require(dirname(__FILE__) . '/inc/cliheader.php');
  9. $sql = 'SELECT server_id, server_ip, server_port, server_rcon FROM servers';
  10. $res = mysql_query($sql);
  11. while ($row = mysql_fetch_assoc($res)) {
  12. echo str_pad($row['server_ip'] . ':' . $row['server_port'], 80, '-', STR_PAD_BOTH);
  13. echo "\n\n";
  14. if (empty($row['server_rcon'])) {
  15. echo "No RCON password specified. Skipping.\n";
  16. continue;
  17. }
  18. $rcon = new Rcon($row['server_ip'], $row['server_port'], $row['server_rcon']);
  19. foreach (explode("\n", $rcon->getStatus()) as $line) {
  20. if (preg_match('/^players : ([0-9]+)/', $line, $m)) {
  21. $players = (int) $m[1];
  22. } else if (preg_match('/^map\s*: ([^\s]+) at/', $line, $m)) {
  23. $map = $m[1];
  24. } else if (preg_match('/^hostname\s*:\s*(.*?)\s*$/', $line, $m)) {
  25. $hostname = $m[1];
  26. }
  27. }
  28. if (isset($hostname)) {
  29. $sql = 'UPDATE servers SET server_name = \'' . s($hostname) . '\' WHERE server_id = ' . $row['server_id'];
  30. mysql_query($sql);
  31. }
  32. if (!isset($players)) {
  33. echo "Could not determine the number of players. Skipping.\n";
  34. continue;
  35. } else if ($players > 0) {
  36. echo "Players on the server; not interfering.\n";
  37. continue;
  38. }
  39. $sql = 'SELECT map_name, SUM(TIMESTAMPDIFF(MINUTE, session_starttime, session_endtime)) AS time FROM maps NATURAL JOIN games NATURAL JOIN sessions GROUP BY map_name ORDER BY time DESC LIMIT 0,10';
  40. $res = mysql_query($sql);
  41. $maps = array();
  42. while ($row = mysql_fetch_assoc($res)) {
  43. if ($row['map_name'] == $map) { continue; }
  44. $maps[] = $row['map_name'];
  45. }
  46. echo "Currently $players players on map $map.\n";
  47. $nextmap = $maps[rand(0, count($maps)-1)];
  48. echo "Selected map $nextmap. Changing... ";
  49. $rcon->execute('changelevel ' . $nextmap);
  50. echo "Done\n\n";
  51. }
  52. echo str_repeat('-', 80), "\n";
  53. ?>