Unsupported PHP app for analysing and displaying stats for Team Fortress 2
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

triggered.php 7.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. <?PHP
  2. class TriggeredHandler {
  3. /*-------------------------------------------------------------------------*\
  4. * Handles triggered events. *
  5. \*-------------------------------------------------------------------------*/
  6. public function parseLine($date, $player, $playerdetails, $line) {
  7. $type = Parser::parseString($line);
  8. switch($type) {
  9. case 'chargedeployed':
  10. $this->chargeDeployed($date, $player);
  11. break;
  12. case 'domination':
  13. $this->domination($date, $player, $line, 'domination');
  14. break;
  15. case 'revenge':
  16. $this->domination($date, $player, $line, 'revenge');
  17. break;
  18. case 'kill assist':
  19. $this->assist($date, $player, $line);
  20. break;
  21. case 'builtobject':
  22. $this->builtObject($date, $player, $line);
  23. break;
  24. case 'killedobject':
  25. $this->killedObject($date, $player, $line);
  26. break;
  27. case 'flagevent':
  28. $this->flagEvent($date, $player, $line);
  29. break;
  30. default:
  31. //echo "No support for trigger type $type\n";
  32. }
  33. }
  34. private function flagEvent($date, $player, $line) {
  35. $props = Parser::parseProps($line);
  36. switch ($props['event']) {
  37. case 'defended':
  38. $this->doFlagEvent($date, $player, $line, 'intel defended', $props);
  39. $player->addScore(2);
  40. break;
  41. case 'picked up':
  42. $this->doFlagEvent($date, $player, $line, 'intel picked up', $props);
  43. $player->addScore(2);
  44. break;
  45. case 'dropped':
  46. $this->doFlagEvent($date, $player, $line, 'intel dropped', $props);
  47. $player->addScore(-2);
  48. break;
  49. case 'captured':
  50. $this->doFlagEvent($date, $player, $line, 'intel captured', $props);
  51. $player->addScore(5);
  52. break;
  53. default:
  54. // echo ...
  55. }
  56. }
  57. private function doFlagEvent($date, $player, $line, $type, $props) {
  58. if ($player->getOpenSession() == null || $player->getOpenSession()->getRolePeriod() == null) {
  59. echo "Player ", $player->getSteamID(), " has no session/roleperiod. Dropping flag event\n";
  60. return;
  61. }
  62. $playerID = $player->getOpenSession()->getRolePeriod()->getID();
  63. $sql = 'INSERT INTO events (event_timestamp, roleperiod_id, event_type, ';
  64. $sql .= 'event_location) VALUES (FROM_UNIXTIME(' . $date . '), ' . $playerID;
  65. $sql .= ', \'' . $type . '\', \'' . s($props['position']) . '\')';
  66. mysql_query($sql);
  67. }
  68. private function killedObject($date, $player, $line) {
  69. $props = Parser::parseProps($line);
  70. if (isset($props['assist'])) {
  71. // TODO!
  72. return;
  73. }
  74. $arg = s($props['object']);
  75. $victim = Parser::parsePlayer($props['objectowner'], false);
  76. $victim = Player::getBySteamID($victim['steamid']);
  77. if ($victim == null || $victim->getOpenSession() == null
  78. || $victim->getOpenSession()->getRolePeriod() == null) {
  79. echo "Victim invalid\n";
  80. return;
  81. }
  82. if ($player == null || $player->getOpenSession() == null
  83. || $player->getOpenSession()->getRolePeriod() == null) {
  84. echo "Player invalid\n";
  85. return;
  86. }
  87. $victimID = $victim->getOpenSession()->getRolePeriod()->getID();
  88. $playerID = $player->getOpenSession()->getRolePeriod()->getID();
  89. $location = s($props['attacker_position']);
  90. $weapon = Weapon::getID($props['weapon']);
  91. $sql = 'INSERT INTO events (event_timestamp, roleperiod_id, event_type, ';
  92. $sql .= 'event_location, event_arg, event_victim, event_weapon) VALUES (';
  93. $sql .= 'FROM_UNIXTIME(' . $date . '), ' . $playerID . ', \'object killed\', ';
  94. $sql .= '\'' . $location . '\', \'' . $arg . '\', ' . $victimID . ', ';
  95. $sql .= $weapon . ')';
  96. mysql_query($sql) or die(mysql_error());
  97. $player->addScore( 2);
  98. $victim->addScore(-1);
  99. }
  100. private function builtObject($date, $player, $line) {
  101. $props = Parser::parseProps($line);
  102. if ($player == null || $player->getOpenSession() == null
  103. || $player->getOpenSession()->getRolePeriod() == null) {
  104. echo "Player invalid\n";
  105. return;
  106. }
  107. $sql = 'INSERT INTO events (event_timestamp, roleperiod_id, event_type, ';
  108. $sql .= 'event_arg, event_location) VALUES (FROM_UNIXTIME(' . $date . '), ';
  109. $sql .= $player->getOpenSession()->getRolePeriod()->getID() . ', ';
  110. $sql .= '\'object built\', \'' . s($props['object']) . '\', \'';
  111. $sql .= s($props['position']) . '\')';
  112. $res = mysql_query($sql);
  113. $player->addScore(2);
  114. }
  115. private function assist($date, $player, $line) {
  116. $line = substr($line, 8); // against
  117. $victim = Parser::parsePlayer($line);
  118. $victim = Player::getBySteamID($victim['steamid']);
  119. $props = Parser::parseProps($line);
  120. if ($victim == null || $victim->getOpenSession() == null
  121. || $victim->getOpenSession()->getRolePeriod() == null) {
  122. echo "Victim invalid\n";
  123. return;
  124. }
  125. if ($player == null || $player->getOpenSession() == null
  126. || $player->getOpenSession()->getRolePeriod() == null) {
  127. echo "Player invalid\n";
  128. return;
  129. }
  130. $sql = 'SELECT kill_id FROM kills WHERE kill_victim = ';
  131. $sql .= $victim->getOpenSession()->getRolePeriod()->getID() . ' ORDER BY kill_timestamp DESC LIMIT 0,1';
  132. $res = mysql_query($sql);
  133. if (mysql_num_rows($res) == 0) {
  134. echo "Couldn't find kill for assist\n";
  135. return;
  136. }
  137. $num = mysql_result($res, 0);
  138. $sql = 'UPDATE kills SET kill_assist = ';
  139. $sql .= $player->getOpenSession()->getRolePeriod()->getID();
  140. $sql .= ', kill_assist_position = \'' . $props['assister_position'] . '\' WHERE kill_id = ' . $num;
  141. $res = mysql_query($sql);
  142. $score = ($victim->getScore() / $player->getScore())
  143. * PlayerClass::getModifier($victim->getOpenSession()->getRolePeriod()->getClass(),
  144. $player->getOpenSession()->getRolePeriod()->getClass());
  145. $player->addScore($score);
  146. }
  147. private function chargeDeployed($date, $player) {
  148. if ($player == null || $player->getOpenSession() == null
  149. || $player->getOpenSession()->getRolePeriod() == null) {
  150. echo "Player invalid\n";
  151. return;
  152. }
  153. $sql = 'INSERT INTO events (event_timestamp, roleperiod_id, event_type) ';
  154. $sql .= 'VALUES (FROM_UNIXTIME(' . $date . '), ' . $player->getOpenSession()->getRolePeriod()->getID() . ', \'ubercharge\')';
  155. $res = mysql_query($sql);
  156. $player->addScore(2);
  157. }
  158. private function domination($date, $player, $line, $type) {
  159. $line = substr($line, 8); // against
  160. $victim = Parser::parsePlayer($line);
  161. $victim = Player::getBySteamID($victim['steamid']);
  162. if ($victim == null || $victim->getOpenSession() == null
  163. || $victim->getOpenSession()->getRolePeriod() == null) {
  164. echo "Victim invalid\n";
  165. return;
  166. }
  167. if ($player == null || $player->getOpenSession() == null
  168. || $player->getOpenSession()->getRolePeriod() == null) {
  169. echo "Player invalid\n";
  170. return;
  171. }
  172. $sql = 'INSERT INTO events (event_timestamp, roleperiod_id, event_type, ';
  173. $sql .= 'event_victim) VALUES (FROM_UNIXTIME(' . $date . '), ';
  174. $sql .= $player->getOpenSession()->getRolePeriod()->getID() . ', \'' . $type;
  175. $sql .= '\', ' . $victim->getOpenSession()->getRolePeriod()->getID() . ')';
  176. $res = mysql_query($sql);
  177. $player->addScore(5);
  178. }
  179. }
  180. ?>