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.

awards.php 3.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #!/usr/bin/php -q
  2. <?PHP
  3. define('SCRIPT_HEAD1', 'awards.php v0.1');
  4. define('SCRIPT_HEAD3', 'Assigns awards to players');
  5. require(dirname(__FILE__) . '/inc/cliheader.php');
  6. require_once(dirname(__FILE__) . '/config.php');
  7. require_once(dirname(__FILE__) . '/inc/database.php');
  8. if (!ENABLE_AWARDS) {
  9. die("Error: Awards are not enabled\n");
  10. }
  11. function giveAward($award, $player, $value, $time) {
  12. if (empty($player)) {
  13. echo "\tNo winner :(";
  14. return;
  15. }
  16. echo "\tPlayer $player won!";
  17. $sql = 'INSERT INTO awardwinners (award_id, player_id, winner_awarded, winner_value)';
  18. $sql .= ' VALUES (' . $award . ', ' . $player . ', FROM_UNIXTIME(';
  19. $sql .= $time . '), \'' . s($value) . '\')';
  20. mysql_query($sql) or die(mysql_error() . "\n\n" . $sql . "\n");
  21. }
  22. function doEventAward($id, $field, $from, $to) {
  23. $sql = '
  24. SELECT player_id, COUNT(*) AS res
  25. FROM events
  26. NATURAL JOIN roleperiods
  27. WHERE event_timestamp > FROM_UNIXTIME(' . $from . ')
  28. AND event_timestamp < FROM_UNIXTIME(' . $to . ')
  29. AND event_type = \'' . s($field) . '\'
  30. GROUP BY player_id
  31. ORDER BY res DESC
  32. LIMIT 0,1';
  33. $res = mysql_query($sql) or die(mysql_error() . "\n\n" . $sql . "\n");
  34. $row = mysql_fetch_assoc($res);
  35. giveAward($id, $row['player_id'], $row['res'] . ' events', $to);
  36. }
  37. function doWeaponAward($id, $field, $from, $to) {
  38. $sql = '
  39. SELECT player_id, COUNT(*) AS res
  40. FROM kills
  41. INNER JOIN roleperiods ON kill_killer = roleperiod_id
  42. WHERE kill_timestamp > FROM_UNIXTIME(' . $from . ')
  43. AND kill_timestamp < FROM_UNIXTIME(' . $to . ')
  44. AND weapon_id = ' . $field . '
  45. GROUP BY player_id
  46. ORDER BY res DESC
  47. LIMIT 0,1';
  48. $res = mysql_query($sql) or die(mysql_error() . "\n\n" . $sql . "\n");
  49. $row = mysql_fetch_assoc($res);
  50. giveAward($id, $row['player_id'], $row['res'] . ' kills', $to);
  51. }
  52. function doWeaponclassAward($id, $field, $from, $to) {
  53. $sql = '
  54. SELECT player_id, COUNT(*) AS res
  55. FROM kills
  56. INNER JOIN roleperiods ON kill_killer = roleperiod_id
  57. NATURAL JOIN weapons
  58. WHERE kill_timestamp > FROM_UNIXTIME(' . $from . ')
  59. AND kill_timestamp < FROM_UNIXTIME(' . $to . ')
  60. AND weapon_class = \'' . s($field) . '\'
  61. GROUP BY player_id
  62. ORDER BY res DESC
  63. LIMIT 0,1';
  64. $res = mysql_query($sql) or die(mysql_error() . "\n\n" . $sql . "\n");
  65. $row = mysql_fetch_assoc($res);
  66. giveAward($id, $row['player_id'], $row['res'] . ' kills', $to);
  67. }
  68. $sql = 'SELECT MIN(UNIX_TIMESTAMP(game_starttime)) AS start FROM games';
  69. $res = mysql_query($sql);
  70. $first = mysql_result($res, 0);
  71. $sql = 'SELECT awards.award_id, award_type, award_field, ';
  72. $sql .= 'MAX(UNIX_TIMESTAMP(winner_awarded)) AS lasttime FROM awards ';
  73. $sql .= 'LEFT OUTER JOIN awardwinners ON awardwinners.award_id ';
  74. $sql .= '= awards.award_id GROUP BY awards.award_id';
  75. $res = mysql_query($sql) or die(mysql_error() . "\n\n" . $sql . "\n");
  76. while ($row = mysql_fetch_assoc($res)) {
  77. if ($row['lasttime'] > 60 + strtotime('-' . AWARD_FREQUENCY . ' days')) {
  78. // Already awarded.
  79. continue;
  80. }
  81. $from = $row['lasttime'] == null ? $first : $row['lasttime'];
  82. $to = $from + AWARD_FREQUENCY * 60 * 60 * 24;
  83. do {
  84. echo "\nAward ", $row['award_id'], " from $from to $to:";
  85. call_user_func('do' . ucfirst($row['award_type']) . 'Award', $row['award_id'], $row['award_field'], $from, $to);
  86. $from += AWARD_FREQUENCY * 60 * 60 * 24;
  87. $to += AWARD_FREQUENCY * 60 * 60 * 24;
  88. } while ($to < time());
  89. }
  90. echo "\n";
  91. ?>