2013-12-31 21:41:52 +01:00
|
|
|
<?php
|
|
|
|
|
2014-04-12 12:14:37 +02:00
|
|
|
namespace ManiaControl\Statistics;
|
2013-12-31 21:41:52 +01:00
|
|
|
|
|
|
|
use ManiaControl\Callbacks\CallbackListener;
|
|
|
|
use ManiaControl\Callbacks\CallbackManager;
|
2014-05-24 16:39:12 +02:00
|
|
|
use ManiaControl\Callbacks\Callbacks;
|
2013-12-31 21:41:52 +01:00
|
|
|
use ManiaControl\ManiaControl;
|
2014-02-19 15:44:00 +01:00
|
|
|
use ManiaControl\Players\Player;
|
2014-03-02 10:27:55 +01:00
|
|
|
use ManiaControl\Players\PlayerManager;
|
2013-12-31 21:41:52 +01:00
|
|
|
|
2014-04-12 12:14:37 +02:00
|
|
|
/**
|
|
|
|
* Statistic Collector Class
|
|
|
|
*
|
2014-05-02 17:50:30 +02:00
|
|
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
2016-05-04 09:57:31 +02:00
|
|
|
* @copyright 2014-2016 ManiaControl Team
|
2014-05-02 17:50:30 +02:00
|
|
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
2014-04-12 12:14:37 +02:00
|
|
|
*/
|
2013-12-31 21:41:52 +01:00
|
|
|
class StatisticCollector implements CallbackListener {
|
2014-04-12 12:14:37 +02:00
|
|
|
/*
|
2013-12-31 21:41:52 +01:00
|
|
|
* Constants
|
|
|
|
*/
|
|
|
|
const SETTING_COLLECT_STATS_ENABLED = 'Collect Stats Enabled';
|
2014-05-13 18:26:38 +02:00
|
|
|
const SETTING_COLLECT_STATS_MINPLAYERS = 'Minimum Player Count for Collecting Stats';
|
|
|
|
const SETTING_ON_SHOOT_PRESTORE = 'Prestore Shots before Insert into Database';
|
2013-12-31 21:41:52 +01:00
|
|
|
/*
|
|
|
|
* Statistics
|
|
|
|
*/
|
2014-01-11 18:24:44 +01:00
|
|
|
const STAT_PLAYTIME = 'Play Time';
|
2014-02-06 21:18:25 +01:00
|
|
|
const STAT_MAP_WINS = 'Map Wins';
|
2014-01-04 00:11:12 +01:00
|
|
|
const STAT_ON_SHOOT = 'Shots';
|
2014-01-03 18:37:51 +01:00
|
|
|
const STAT_ON_NEARMISS = 'Near Misses';
|
|
|
|
const STAT_ON_CAPTURE = 'Captures';
|
|
|
|
const STAT_ON_HIT = 'Hits';
|
|
|
|
const STAT_ON_GOT_HIT = 'Got Hits';
|
|
|
|
const STAT_ON_DEATH = 'Deaths';
|
|
|
|
const STAT_ON_PLAYER_REQUEST_RESPAWN = 'Respawns';
|
|
|
|
const STAT_ON_KILL = 'Kills';
|
2014-01-23 21:55:40 +01:00
|
|
|
const STAT_LASER_SHOT = 'Laser Shots';
|
2014-01-28 22:27:33 +01:00
|
|
|
const STAT_LASER_HIT = 'Laser Hits';
|
2014-01-23 21:55:40 +01:00
|
|
|
const STAT_ROCKET_SHOT = 'Rocket Shots';
|
2014-01-28 22:27:33 +01:00
|
|
|
const STAT_ROCKET_HIT = 'Rocket Hits';
|
2014-01-23 21:55:40 +01:00
|
|
|
const STAT_ARROW_SHOT = 'Arrow Shots';
|
2014-01-28 22:27:33 +01:00
|
|
|
const STAT_ARROW_HIT = 'Arrow Hits';
|
2014-01-23 21:55:40 +01:00
|
|
|
const STAT_NUCLEUS_SHOT = 'Nucleus Shots';
|
2014-01-28 22:27:33 +01:00
|
|
|
const STAT_NUCLEUS_HIT = 'Nucleus Hits';
|
2014-01-03 19:14:07 +01:00
|
|
|
|
|
|
|
const SPECIAL_STAT_KILL_DEATH_RATIO = 'Kill / Death';
|
|
|
|
|
2014-01-23 21:55:40 +01:00
|
|
|
const WEAPON_LASER = 1;
|
|
|
|
const WEAPON_ROCKET = 2;
|
|
|
|
const WEAPON_NUCLEUS = 3;
|
|
|
|
const WEAPON_ARROW = 5;
|
|
|
|
|
2014-04-12 12:14:37 +02:00
|
|
|
/*
|
2014-08-02 22:31:46 +02:00
|
|
|
* Private properties
|
2013-12-31 21:41:52 +01:00
|
|
|
*/
|
2014-08-02 22:31:46 +02:00
|
|
|
/** @var ManiaControl $maniaControl */
|
2013-12-31 21:41:52 +01:00
|
|
|
private $maniaControl = null;
|
2014-01-02 11:19:26 +01:00
|
|
|
private $onShootArray = array();
|
2014-01-02 13:35:52 +01:00
|
|
|
|
2013-12-31 21:41:52 +01:00
|
|
|
/**
|
2014-08-03 01:34:18 +02:00
|
|
|
* Construct a new statistic collector instance
|
2013-12-31 21:41:52 +01:00
|
|
|
*
|
2014-08-03 01:34:18 +02:00
|
|
|
* @param ManiaControl $maniaControl
|
2013-12-31 21:41:52 +01:00
|
|
|
*/
|
2014-03-01 11:11:50 +01:00
|
|
|
public function __construct(ManiaControl $maniaControl) {
|
2013-12-31 21:41:52 +01:00
|
|
|
$this->maniaControl = $maniaControl;
|
|
|
|
|
2014-08-03 01:34:18 +02:00
|
|
|
// Callbacks
|
2014-08-13 11:05:52 +02:00
|
|
|
$this->maniaControl->getCallbackManager()->registerCallbackListener(CallbackManager::CB_MP_MODESCRIPTCALLBACK, $this, 'handleCallbacks');
|
|
|
|
$this->maniaControl->getCallbackManager()->registerCallbackListener(CallbackManager::CB_MP_MODESCRIPTCALLBACKARRAY, $this, 'handleCallbacks');
|
|
|
|
$this->maniaControl->getCallbackManager()->registerCallbackListener(Callbacks::ONINIT, $this, 'onInit');
|
|
|
|
$this->maniaControl->getCallbackManager()->registerCallbackListener(PlayerManager::CB_PLAYERDISCONNECT, $this, 'onPlayerDisconnect');
|
2013-12-31 21:41:52 +01:00
|
|
|
|
2014-08-03 01:34:18 +02:00
|
|
|
// Settings
|
2014-08-13 11:05:52 +02:00
|
|
|
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_COLLECT_STATS_ENABLED, true);
|
|
|
|
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_COLLECT_STATS_MINPLAYERS, 4);
|
|
|
|
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_ON_SHOOT_PRESTORE, 10);
|
2014-01-01 18:27:56 +01:00
|
|
|
}
|
2013-12-31 21:41:52 +01:00
|
|
|
|
2014-01-01 18:27:56 +01:00
|
|
|
/**
|
2014-02-19 15:44:00 +01:00
|
|
|
* Handle ManiaControl OnInit Callback
|
2014-01-01 18:27:56 +01:00
|
|
|
*/
|
2014-02-19 15:44:00 +01:00
|
|
|
public function onInit() {
|
2014-08-03 01:34:18 +02:00
|
|
|
// Define Stats MetaData
|
2014-08-13 11:05:52 +02:00
|
|
|
$this->maniaControl->getStatisticManager()->defineStatMetaData(self::STAT_PLAYTIME, StatisticManager::STAT_TYPE_TIME);
|
|
|
|
$this->maniaControl->getStatisticManager()->defineStatMetaData(self::STAT_MAP_WINS);
|
|
|
|
$this->maniaControl->getStatisticManager()->defineStatMetaData(self::STAT_ON_SHOOT);
|
|
|
|
$this->maniaControl->getStatisticManager()->defineStatMetaData(self::STAT_ON_NEARMISS);
|
|
|
|
$this->maniaControl->getStatisticManager()->defineStatMetaData(self::STAT_ON_CAPTURE);
|
|
|
|
$this->maniaControl->getStatisticManager()->defineStatMetaData(self::STAT_ON_HIT);
|
|
|
|
$this->maniaControl->getStatisticManager()->defineStatMetaData(self::STAT_ON_GOT_HIT);
|
|
|
|
$this->maniaControl->getStatisticManager()->defineStatMetaData(self::STAT_ON_DEATH);
|
|
|
|
$this->maniaControl->getStatisticManager()->defineStatMetaData(self::STAT_ON_PLAYER_REQUEST_RESPAWN);
|
|
|
|
$this->maniaControl->getStatisticManager()->defineStatMetaData(self::STAT_ON_KILL);
|
|
|
|
$this->maniaControl->getStatisticManager()->defineStatMetaData(self::STAT_LASER_HIT);
|
|
|
|
$this->maniaControl->getStatisticManager()->defineStatMetaData(self::STAT_LASER_SHOT);
|
|
|
|
$this->maniaControl->getStatisticManager()->defineStatMetaData(self::STAT_NUCLEUS_HIT);
|
|
|
|
$this->maniaControl->getStatisticManager()->defineStatMetaData(self::STAT_NUCLEUS_SHOT);
|
|
|
|
$this->maniaControl->getStatisticManager()->defineStatMetaData(self::STAT_ROCKET_HIT);
|
|
|
|
$this->maniaControl->getStatisticManager()->defineStatMetaData(self::STAT_ROCKET_SHOT);
|
|
|
|
$this->maniaControl->getStatisticManager()->defineStatMetaData(self::STAT_ARROW_HIT);
|
|
|
|
$this->maniaControl->getStatisticManager()->defineStatMetaData(self::STAT_ARROW_SHOT);
|
2013-12-31 21:41:52 +01:00
|
|
|
}
|
|
|
|
|
2014-02-06 21:18:25 +01:00
|
|
|
/**
|
|
|
|
* Handle EndMap
|
|
|
|
*
|
|
|
|
* @param array $callback
|
|
|
|
*/
|
|
|
|
public function onEndMap(array $callback) {
|
|
|
|
//Check for Minimum PlayerCount
|
2014-08-13 11:05:52 +02:00
|
|
|
if ($this->maniaControl->getPlayerManager()->getPlayerCount() < $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_COLLECT_STATS_MINPLAYERS)
|
2014-08-05 02:17:41 +02:00
|
|
|
) {
|
2014-02-06 21:18:25 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2014-08-13 11:05:52 +02:00
|
|
|
$leaders = $this->maniaControl->getServer()->getRankingManager()->getLeaders();
|
2014-02-06 21:18:25 +01:00
|
|
|
|
2014-05-02 17:50:30 +02:00
|
|
|
foreach ($leaders as $leaderLogin) {
|
2014-08-13 11:05:52 +02:00
|
|
|
$leader = $this->maniaControl->getPlayerManager()->getPlayer($leaderLogin);
|
|
|
|
$this->maniaControl->getStatisticManager()->incrementStat(self::STAT_MAP_WINS, $leader);
|
2014-02-06 21:18:25 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-01-02 11:19:26 +01:00
|
|
|
/**
|
|
|
|
* Insert OnShoot Statistic when a player leaves
|
2014-01-02 13:35:52 +01:00
|
|
|
*
|
2014-02-19 15:44:00 +01:00
|
|
|
* @param Player $player
|
2014-01-02 11:19:26 +01:00
|
|
|
*/
|
2014-02-19 15:44:00 +01:00
|
|
|
public function onPlayerDisconnect(Player $player) {
|
|
|
|
// Check if Stat Collecting is enabled
|
2014-08-13 11:05:52 +02:00
|
|
|
if (!$this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_COLLECT_STATS_ENABLED)
|
2014-08-05 02:17:41 +02:00
|
|
|
) {
|
2014-01-02 11:19:26 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2014-02-19 15:44:00 +01:00
|
|
|
// Insert Data into Database, and destroy player
|
2014-01-28 22:27:33 +01:00
|
|
|
if (isset($this->onShootArray[$player->login])) {
|
|
|
|
if ($this->onShootArray[$player->login] > 0) {
|
2014-08-13 11:05:52 +02:00
|
|
|
$this->maniaControl->getStatisticManager()->insertStat(self::STAT_ON_SHOOT, $player, $this->maniaControl->getServer()->index, $this->onShootArray[$player->login]);
|
2014-01-02 11:19:26 +01:00
|
|
|
}
|
|
|
|
unset($this->onShootArray[$player->login]);
|
|
|
|
}
|
|
|
|
}
|
2013-12-31 21:41:52 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Handle stats on callbacks
|
2014-01-01 19:37:15 +01:00
|
|
|
*
|
2013-12-31 21:41:52 +01:00
|
|
|
* @param array $callback
|
|
|
|
*/
|
2014-05-13 16:03:26 +02:00
|
|
|
public function handleCallbacks(array $callback) {
|
|
|
|
//TODO survivals
|
2014-05-27 22:44:22 +02:00
|
|
|
// Check if Stat Collecting is enabled
|
2014-08-13 11:05:52 +02:00
|
|
|
if (!$this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_COLLECT_STATS_ENABLED)
|
2014-08-05 02:17:41 +02:00
|
|
|
) {
|
2013-12-31 21:41:52 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2014-05-27 22:44:22 +02:00
|
|
|
// Check for Minimum PlayerCount
|
2014-08-13 11:05:52 +02:00
|
|
|
if ($this->maniaControl->getPlayerManager()->getPlayerCount() < $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_COLLECT_STATS_MINPLAYERS)
|
2014-08-05 02:17:41 +02:00
|
|
|
) {
|
2013-12-31 21:41:52 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2014-01-01 19:37:15 +01:00
|
|
|
$callbackName = $callback[1][0];
|
|
|
|
|
2014-05-02 17:50:30 +02:00
|
|
|
switch ($callbackName) {
|
2014-01-02 11:19:26 +01:00
|
|
|
case 'LibXmlRpc_OnShoot':
|
2014-01-31 19:00:01 +01:00
|
|
|
$this->handleOnShoot($callback[1][1][0], $callback[1][1][1]);
|
2014-01-01 19:37:15 +01:00
|
|
|
break;
|
|
|
|
case 'LibXmlRpc_OnHit':
|
2014-08-13 11:05:52 +02:00
|
|
|
$shooter = $this->maniaControl->getPlayerManager()->getPlayer($callback[1][1][0]);
|
|
|
|
$victim = $this->maniaControl->getPlayerManager()->getPlayer($callback[1][1][1]);
|
2014-01-24 22:34:35 +01:00
|
|
|
$weapon = $callback[1][1][3];
|
2014-04-09 11:11:22 +02:00
|
|
|
if ($shooter) {
|
2014-08-13 11:05:52 +02:00
|
|
|
$this->maniaControl->getStatisticManager()->incrementStat($this->getWeaponStat(intval($weapon), false), $shooter);
|
|
|
|
$this->maniaControl->getStatisticManager()->incrementStat(self::STAT_ON_HIT, $shooter);
|
2014-04-09 11:11:22 +02:00
|
|
|
}
|
|
|
|
if ($victim) {
|
2014-08-13 11:05:52 +02:00
|
|
|
$this->maniaControl->getStatisticManager()->incrementStat(self::STAT_ON_GOT_HIT, $victim);
|
2014-04-09 11:11:22 +02:00
|
|
|
}
|
2014-01-01 19:37:15 +01:00
|
|
|
break;
|
|
|
|
case 'LibXmlRpc_OnNearMiss':
|
2014-08-13 11:05:52 +02:00
|
|
|
$player = $this->maniaControl->getPlayerManager()->getPlayer($callback[1][1][0]);
|
|
|
|
$this->maniaControl->getStatisticManager()->incrementStat(self::STAT_ON_NEARMISS, $player);
|
2014-01-01 19:37:15 +01:00
|
|
|
break;
|
|
|
|
case 'LibXmlRpc_OnCapture':
|
2014-01-05 19:15:27 +01:00
|
|
|
$logins = $callback[1][1][0];
|
|
|
|
$logins = explode(';', $logins);
|
2014-05-02 17:50:30 +02:00
|
|
|
foreach ($logins as $login) {
|
2014-08-13 11:05:52 +02:00
|
|
|
$player = $this->maniaControl->getPlayerManager()->getPlayer($login);
|
2014-01-28 22:27:33 +01:00
|
|
|
if (!$player) {
|
2014-01-11 18:24:44 +01:00
|
|
|
continue;
|
|
|
|
}
|
2014-08-13 11:05:52 +02:00
|
|
|
$this->maniaControl->getStatisticManager()->incrementStat(self::STAT_ON_CAPTURE, $player);
|
2014-01-05 19:15:27 +01:00
|
|
|
}
|
2014-01-01 19:37:15 +01:00
|
|
|
break;
|
|
|
|
case 'LibXmlRpc_OnArmorEmpty':
|
2014-08-13 11:05:52 +02:00
|
|
|
$victim = $this->maniaControl->getPlayerManager()->getPlayer($callback[1][1][1]);
|
2014-02-13 20:46:40 +01:00
|
|
|
if (isset($callback[1][1][0])) {
|
2014-08-13 11:05:52 +02:00
|
|
|
$shooter = $this->maniaControl->getPlayerManager()->getPlayer($callback[1][1][0]);
|
2014-03-31 21:41:05 +02:00
|
|
|
if ($shooter) {
|
2014-08-13 11:05:52 +02:00
|
|
|
$this->maniaControl->getStatisticManager()->incrementStat(self::STAT_ON_KILL, $shooter);
|
2014-02-15 16:42:18 +01:00
|
|
|
}
|
2014-01-11 18:24:44 +01:00
|
|
|
}
|
2014-03-02 10:27:55 +01:00
|
|
|
if ($victim) {
|
2014-08-13 11:05:52 +02:00
|
|
|
$this->maniaControl->getStatisticManager()->incrementStat(self::STAT_ON_DEATH, $victim);
|
2014-03-02 10:27:55 +01:00
|
|
|
}
|
2014-01-01 19:37:15 +01:00
|
|
|
break;
|
|
|
|
case 'LibXmlRpc_OnPlayerRequestRespawn':
|
2014-08-13 11:05:52 +02:00
|
|
|
$player = $this->maniaControl->getPlayerManager()->getPlayer($callback[1][1][0]);
|
|
|
|
$this->maniaControl->getStatisticManager()->incrementStat(self::STAT_ON_PLAYER_REQUEST_RESPAWN, $player);
|
2014-01-01 19:37:15 +01:00
|
|
|
break;
|
2014-01-02 11:19:26 +01:00
|
|
|
case 'OnShoot':
|
|
|
|
$paramsObject = json_decode($callback[1][1]);
|
2014-07-21 14:53:05 +02:00
|
|
|
if ($paramsObject && isset($paramsObject->Event)) {
|
|
|
|
$this->handleOnShoot($paramsObject->Event->Shooter->Login, $paramsObject->Event->WeaponNum);
|
|
|
|
}
|
2014-01-01 19:37:15 +01:00
|
|
|
break;
|
|
|
|
case 'OnNearMiss':
|
|
|
|
$paramsObject = json_decode($callback[1][1]);
|
2014-07-21 14:53:05 +02:00
|
|
|
if ($paramsObject && isset($paramsObject->Event)) {
|
2014-08-13 11:05:52 +02:00
|
|
|
$player = $this->maniaControl->getPlayerManager()->getPlayer($paramsObject->Event->Shooter->Login);
|
|
|
|
$this->maniaControl->getStatisticManager()->incrementStat(self::STAT_ON_NEARMISS, $player);
|
2014-07-21 14:53:05 +02:00
|
|
|
}
|
2014-01-01 19:37:15 +01:00
|
|
|
break;
|
|
|
|
case 'OnCapture':
|
|
|
|
$paramsObject = json_decode($callback[1][1]);
|
2014-07-21 14:53:05 +02:00
|
|
|
if ($paramsObject && isset($paramsObject->Event)) {
|
2014-08-13 11:05:52 +02:00
|
|
|
$player = $this->maniaControl->getPlayerManager()->getPlayer($paramsObject->Event->Player->Login);
|
|
|
|
$this->maniaControl->getStatisticManager()->incrementStat(self::STAT_ON_CAPTURE, $player);
|
2014-07-21 14:53:05 +02:00
|
|
|
}
|
2014-01-01 19:37:15 +01:00
|
|
|
break;
|
|
|
|
case 'OnHit':
|
|
|
|
$paramsObject = json_decode($callback[1][1]);
|
2014-07-21 14:53:05 +02:00
|
|
|
if ($paramsObject && isset($paramsObject->Event)) {
|
|
|
|
$weapon = (int)$paramsObject->Event->WeaponNum;
|
|
|
|
if (isset($paramsObject->Event->Shooter)) {
|
2014-08-13 11:05:52 +02:00
|
|
|
$shooter = $this->maniaControl->getPlayerManager()->getPlayer($paramsObject->Event->Shooter->Login);
|
2014-07-21 14:53:05 +02:00
|
|
|
if ($shooter) {
|
2014-08-13 11:05:52 +02:00
|
|
|
$this->maniaControl->getStatisticManager()->incrementStat($this->getWeaponStat($weapon, false), $shooter);
|
|
|
|
$this->maniaControl->getStatisticManager()->incrementStat(self::STAT_ON_HIT, $shooter);
|
2014-07-21 14:53:05 +02:00
|
|
|
}
|
2014-06-14 17:10:06 +02:00
|
|
|
}
|
2014-07-21 14:53:05 +02:00
|
|
|
if (isset($paramsObject->Event->Victim)) {
|
2014-08-13 11:05:52 +02:00
|
|
|
$victim = $this->maniaControl->getPlayerManager()->getPlayer($paramsObject->Event->Victim->Login);
|
2014-07-21 14:53:05 +02:00
|
|
|
if ($victim) {
|
2014-08-13 11:05:52 +02:00
|
|
|
$this->maniaControl->getStatisticManager()->incrementStat(self::STAT_ON_GOT_HIT, $victim);
|
2014-07-21 14:53:05 +02:00
|
|
|
}
|
2014-06-14 17:10:06 +02:00
|
|
|
}
|
2014-04-09 11:11:22 +02:00
|
|
|
}
|
2014-01-01 19:37:15 +01:00
|
|
|
break;
|
|
|
|
case 'OnArmorEmpty':
|
|
|
|
$paramsObject = json_decode($callback[1][1]);
|
2014-07-21 14:53:05 +02:00
|
|
|
if ($paramsObject && isset($paramsObject->Event)) {
|
2014-08-13 11:05:52 +02:00
|
|
|
$victim = $this->maniaControl->getPlayerManager()->getPlayer($paramsObject->Event->Victim->Login);
|
|
|
|
$this->maniaControl->getStatisticManager()->incrementStat(self::STAT_ON_DEATH, $victim);
|
2014-07-21 14:53:05 +02:00
|
|
|
if (isset($paramsObject->Event->Shooter->Login)) {
|
2014-08-13 11:05:52 +02:00
|
|
|
$shooter = $this->maniaControl->getPlayerManager()->getPlayer($paramsObject->Event->Shooter->Login);
|
2014-07-21 14:53:05 +02:00
|
|
|
if ($shooter) {
|
2014-08-13 11:05:52 +02:00
|
|
|
$this->maniaControl->getStatisticManager()->incrementStat(self::STAT_ON_KILL, $shooter);
|
2014-07-21 14:53:05 +02:00
|
|
|
}
|
2014-08-13 11:05:52 +02:00
|
|
|
$this->maniaControl->getStatisticManager()->incrementStat(self::STAT_ON_KILL, $shooter);
|
2014-02-15 16:42:18 +01:00
|
|
|
}
|
2014-01-11 18:24:44 +01:00
|
|
|
}
|
2014-01-01 19:37:15 +01:00
|
|
|
break;
|
|
|
|
case 'OnRequestRespawn':
|
|
|
|
$paramsObject = json_decode($callback[1][1]);
|
2014-07-21 14:53:05 +02:00
|
|
|
if ($paramsObject && isset($paramsObject->Event)) {
|
2014-08-13 11:05:52 +02:00
|
|
|
$player = $this->maniaControl->getPlayerManager()->getPlayer($paramsObject->Event->Player->Login);
|
|
|
|
$this->maniaControl->getStatisticManager()->incrementStat(self::STAT_ON_PLAYER_REQUEST_RESPAWN, $player);
|
2014-07-21 14:53:05 +02:00
|
|
|
}
|
2014-01-01 19:37:15 +01:00
|
|
|
break;
|
2014-01-11 18:24:44 +01:00
|
|
|
case 'EndTurn': //TODO make it for other modes working
|
|
|
|
$paramsObject = json_decode($callback[1][1]);
|
2014-07-29 00:00:07 +02:00
|
|
|
if ($paramsObject && is_array($paramsObject->ScoresTable)) {
|
|
|
|
$durationTime = (int)(($paramsObject->EndTime - $paramsObject->StartTime) / 1000);
|
|
|
|
foreach ($paramsObject->ScoresTable as $score) {
|
2014-08-13 11:05:52 +02:00
|
|
|
$player = $this->maniaControl->getPlayerManager()->getPlayer($score->Login);
|
|
|
|
$this->maniaControl->getStatisticManager()->insertStat(self::STAT_PLAYTIME, $player, -1, $durationTime);
|
2014-07-29 00:00:07 +02:00
|
|
|
}
|
2014-01-11 18:24:44 +01:00
|
|
|
}
|
|
|
|
break;
|
2014-01-01 19:37:15 +01:00
|
|
|
}
|
2013-12-31 21:41:52 +01:00
|
|
|
}
|
2014-05-02 17:50:30 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Handle Player Shots
|
|
|
|
*
|
|
|
|
* @param string $login
|
|
|
|
* @param int $weaponNumber
|
|
|
|
*/
|
|
|
|
private function handleOnShoot($login, $weaponNumber) {
|
|
|
|
if (!isset($this->onShootArray[$login])) {
|
|
|
|
$this->onShootArray[$login] = array(self::WEAPON_ROCKET => 0, self::WEAPON_ARROW => 0, self::WEAPON_NUCLEUS => 0, self::WEAPON_LASER => 0);
|
|
|
|
}
|
2014-06-14 16:44:49 +02:00
|
|
|
if (!isset($this->onShootArray[$login][$weaponNumber])) {
|
|
|
|
$this->onShootArray[$login][$weaponNumber] = 0;
|
|
|
|
}
|
|
|
|
$this->onShootArray[$login][$weaponNumber]++;
|
2014-05-02 17:50:30 +02:00
|
|
|
|
|
|
|
//Write Shoot Data into database
|
2014-08-13 11:05:52 +02:00
|
|
|
if (array_sum($this->onShootArray[$login]) > $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_ON_SHOOT_PRESTORE)
|
2014-08-05 02:17:41 +02:00
|
|
|
) {
|
2014-08-13 11:05:52 +02:00
|
|
|
$player = $this->maniaControl->getPlayerManager()->getPlayer($login);
|
2014-05-02 17:50:30 +02:00
|
|
|
|
|
|
|
$rocketShots = $this->onShootArray[$login][self::WEAPON_ROCKET];
|
|
|
|
$laserShots = $this->onShootArray[$login][self::WEAPON_LASER];
|
|
|
|
$arrowShots = $this->onShootArray[$login][self::WEAPON_ARROW];
|
|
|
|
$nucleusShots = $this->onShootArray[$login][self::WEAPON_NUCLEUS];
|
|
|
|
|
|
|
|
if ($rocketShots > 0) {
|
2014-08-13 11:05:52 +02:00
|
|
|
$this->maniaControl->getStatisticManager()->insertStat(self::STAT_ROCKET_SHOT, $player, $this->maniaControl->getServer()->index, $rocketShots);
|
2014-05-02 17:50:30 +02:00
|
|
|
$this->onShootArray[$login][self::WEAPON_ROCKET] = 0;
|
|
|
|
}
|
|
|
|
if ($laserShots > 0) {
|
2014-08-13 11:05:52 +02:00
|
|
|
$this->maniaControl->getStatisticManager()->insertStat(self::STAT_LASER_SHOT, $player, $this->maniaControl->getServer()->index, $laserShots);
|
2014-05-02 17:50:30 +02:00
|
|
|
$this->onShootArray[$login][self::WEAPON_LASER] = 0;
|
|
|
|
}
|
|
|
|
if ($arrowShots > 0) {
|
2014-08-13 11:05:52 +02:00
|
|
|
$this->maniaControl->getStatisticManager()->insertStat(self::STAT_ARROW_SHOT, $player, $this->maniaControl->getServer()->index, $arrowShots);
|
2014-05-02 17:50:30 +02:00
|
|
|
$this->onShootArray[$login][self::WEAPON_ARROW] = 0;
|
|
|
|
}
|
|
|
|
if ($nucleusShots > 0) {
|
2014-08-13 11:05:52 +02:00
|
|
|
$this->maniaControl->getStatisticManager()->insertStat(self::STAT_NUCLEUS_SHOT, $player, $this->maniaControl->getServer()->index, $nucleusShots);
|
2014-05-02 17:50:30 +02:00
|
|
|
$this->onShootArray[$login][self::WEAPON_NUCLEUS] = 0;
|
|
|
|
}
|
|
|
|
|
2014-08-13 11:05:52 +02:00
|
|
|
$this->maniaControl->getStatisticManager()->insertStat(self::STAT_ON_SHOOT, $player, $this->maniaControl->getServer()->index, $rocketShots + $laserShots + $arrowShots + $nucleusShots);
|
2014-05-02 17:50:30 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the Weapon stat
|
|
|
|
*
|
|
|
|
* @param int $weaponNumber
|
|
|
|
* @param bool $shot
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
private function getWeaponStat($weaponNumber, $shot = true) {
|
|
|
|
if ($shot) {
|
|
|
|
switch ($weaponNumber) {
|
|
|
|
case self::WEAPON_ROCKET:
|
|
|
|
return self::STAT_ROCKET_SHOT;
|
|
|
|
case self::WEAPON_LASER:
|
|
|
|
return self::STAT_LASER_SHOT;
|
|
|
|
case self::WEAPON_ARROW:
|
|
|
|
return self::STAT_ARROW_SHOT;
|
|
|
|
case self::WEAPON_NUCLEUS:
|
|
|
|
return self::STAT_NUCLEUS_SHOT;
|
|
|
|
default:
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
switch ($weaponNumber) {
|
|
|
|
case self::WEAPON_ROCKET:
|
|
|
|
return self::STAT_ROCKET_HIT;
|
|
|
|
case self::WEAPON_LASER:
|
|
|
|
return self::STAT_LASER_HIT;
|
|
|
|
case self::WEAPON_ARROW:
|
|
|
|
return self::STAT_ARROW_HIT;
|
|
|
|
case self::WEAPON_NUCLEUS:
|
|
|
|
return self::STAT_NUCLEUS_HIT;
|
|
|
|
default:
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2013-12-31 21:41:52 +01:00
|
|
|
}
|