improved statstic collector, nothing tested yet
This commit is contained in:
		@@ -10,6 +10,8 @@ namespace ManiaControl\Statistics;
 | 
			
		||||
use ManiaControl\Callbacks\CallbackListener;
 | 
			
		||||
use ManiaControl\Callbacks\CallbackManager;
 | 
			
		||||
use ManiaControl\ManiaControl;
 | 
			
		||||
use ManiaControl\Players\Player;
 | 
			
		||||
use ManiaControl\Players\PlayerManager;
 | 
			
		||||
 | 
			
		||||
class StatisticCollector implements CallbackListener {
 | 
			
		||||
	/**
 | 
			
		||||
@@ -17,7 +19,7 @@ class StatisticCollector implements CallbackListener {
 | 
			
		||||
	 */
 | 
			
		||||
	const SETTING_COLLECT_STATS_ENABLED    = 'Collect Stats Enabled';
 | 
			
		||||
	const SETTING_COLLECT_STATS_MINPLAYERS = 'Minimum Playercount for Collecting Stats';
 | 
			
		||||
 | 
			
		||||
	const SETTING_ON_SHOOT_PRESTORE = 'Prestore Shoots before insert into Database';
 | 
			
		||||
	/*
 | 
			
		||||
	 * Statistics
 | 
			
		||||
	 */
 | 
			
		||||
@@ -33,7 +35,7 @@ class StatisticCollector implements CallbackListener {
 | 
			
		||||
	 * Private Properties
 | 
			
		||||
	 */
 | 
			
		||||
	private $maniaControl = null;
 | 
			
		||||
 | 
			
		||||
	private $onShootArray = array();
 | 
			
		||||
	/**
 | 
			
		||||
	 * Construct player manager
 | 
			
		||||
	 *
 | 
			
		||||
@@ -46,10 +48,12 @@ class StatisticCollector implements CallbackListener {
 | 
			
		||||
		$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_MP_MODESCRIPTCALLBACK, $this, 'handleCallbacks');
 | 
			
		||||
		$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_MP_MODESCRIPTCALLBACKARRAY, $this, 'handleCallbacks');
 | 
			
		||||
		$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_MC_ONINIT, $this, 'onInit');
 | 
			
		||||
		$this->maniaControl->callbackManager->registerCallbackListener(PlayerManager::CB_PLAYERDISCONNECTED, $this, 'onPlayerDisconnect');
 | 
			
		||||
 | 
			
		||||
		//Initialize Settings
 | 
			
		||||
		$this->maniaControl->settingManager->initSetting($this, self::SETTING_COLLECT_STATS_ENABLED, true);
 | 
			
		||||
		$this->maniaControl->settingManager->initSetting($this, self::SETTING_COLLECT_STATS_MINPLAYERS, 4);
 | 
			
		||||
		$this->maniaControl->settingManager->initSetting($this, self::SETTING_ON_SHOOT_PRESTORE, 30);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
@@ -69,6 +73,47 @@ class StatisticCollector implements CallbackListener {
 | 
			
		||||
		$this->maniaControl->statisticManager->defineStatMetaData(self::STAT_ON_KILL);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Handle Player Shoots
 | 
			
		||||
	 * @param $login
 | 
			
		||||
	 */
 | 
			
		||||
	private function handleOnShoot($login){
 | 
			
		||||
		if(!isset($this->onShootArray[$login])){
 | 
			
		||||
			$this->onShootArray[$login] = 1;
 | 
			
		||||
		}else{
 | 
			
		||||
			$this->onShootArray[$login]++;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//Write Shoot Data into database
 | 
			
		||||
		if($this->onShootArray[$login] > self::SETTING_ON_SHOOT_PRESTORE){
 | 
			
		||||
			$serverLogin = $this->maniaControl->server->getLogin();
 | 
			
		||||
			$player = $this->maniaControl->playerManager->getPlayer($login);
 | 
			
		||||
			$this->maniaControl->statisticManager->insertStat(self::STAT_ON_SHOOT, $player, $serverLogin, $this->onShootArray[$login]);
 | 
			
		||||
			$this->onShootArray[$login] = 0;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Insert OnShoot Statistic when a player leaves
 | 
			
		||||
	 * @param array  $callback
 | 
			
		||||
	 * @param Player $player
 | 
			
		||||
	 */
 | 
			
		||||
	public function onPlayerDisconnect(array $callback, Player $player) {
 | 
			
		||||
		//Check if Stat Collecting is enabled
 | 
			
		||||
		if(!$this->maniaControl->settingManager->getSetting($this, self::SETTING_COLLECT_STATS_ENABLED)) {
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//Insert Data into Database, and destroy player
 | 
			
		||||
		if(isset($this->onShootArray[$player->login])){
 | 
			
		||||
			if($this->onShootArray[$player->login] > 0){
 | 
			
		||||
				$serverLogin = $this->maniaControl->server->getLogin();
 | 
			
		||||
				$this->maniaControl->statisticManager->insertStat(self::STAT_ON_SHOOT, $player, $serverLogin, $this->onShootArray[$player->login]);
 | 
			
		||||
			}
 | 
			
		||||
			unset($this->onShootArray[$player->login]);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Handle stats on callbacks
 | 
			
		||||
@@ -88,66 +133,67 @@ class StatisticCollector implements CallbackListener {
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$callbackName = $callback[1][0];
 | 
			
		||||
		$serverLogin  = $this->maniaControl->server->getLogin();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		switch($callbackName) {
 | 
			
		||||
			case 'LibXmlRpc_OnShoot': //TODO
 | 
			
		||||
			case 'LibXmlRpc_OnShoot':
 | 
			
		||||
				$this->handleOnShoot($callback[1][1][0]);
 | 
			
		||||
				break;
 | 
			
		||||
			case 'LibXmlRpc_OnHit':
 | 
			
		||||
				$shooter = $this->maniaControl->playerManager->getPlayer($callback[1][1][0]);
 | 
			
		||||
				$victim  = $this->maniaControl->playerManager->getPlayer($callback[1][1][1]);
 | 
			
		||||
				$this->maniaControl->statisticManager->incrementStat(self::STAT_ON_HIT, $shooter, $serverLogin);
 | 
			
		||||
				$this->maniaControl->statisticManager->incrementStat(self::STAT_ON_GOT_HIT, $victim, $serverLogin);
 | 
			
		||||
				$this->maniaControl->statisticManager->incrementStat(self::STAT_ON_HIT, $shooter);
 | 
			
		||||
				$this->maniaControl->statisticManager->incrementStat(self::STAT_ON_GOT_HIT, $victim);
 | 
			
		||||
				break;
 | 
			
		||||
			case 'LibXmlRpc_OnNearMiss':
 | 
			
		||||
				$player = $this->maniaControl->playerManager->getPlayer($callback[1][1][0]);
 | 
			
		||||
				$this->maniaControl->statisticManager->incrementStat(self::STAT_ON_NEARMISS, $player, $serverLogin);
 | 
			
		||||
				$this->maniaControl->statisticManager->incrementStat(self::STAT_ON_NEARMISS, $player);
 | 
			
		||||
				break;
 | 
			
		||||
			case 'LibXmlRpc_OnCapture':
 | 
			
		||||
				$player = $this->maniaControl->playerManager->getPlayer($callback[1][1][0]);
 | 
			
		||||
				$this->maniaControl->statisticManager->incrementStat(self::STAT_ON_CAPTURE, $player, $serverLogin);
 | 
			
		||||
				$this->maniaControl->statisticManager->incrementStat(self::STAT_ON_CAPTURE, $player);
 | 
			
		||||
				break;
 | 
			
		||||
			case 'LibXmlRpc_OnArmorEmpty':
 | 
			
		||||
				$shooter = $this->maniaControl->playerManager->getPlayer($callback[1][1][0]);
 | 
			
		||||
				$victim  = $this->maniaControl->playerManager->getPlayer($callback[1][1][1]);
 | 
			
		||||
				$this->maniaControl->statisticManager->incrementStat(self::STAT_ON_KILL, $shooter, $serverLogin);
 | 
			
		||||
				$this->maniaControl->statisticManager->incrementStat(self::STAT_ON_DEATH, $victim, $serverLogin);
 | 
			
		||||
				$this->maniaControl->statisticManager->incrementStat(self::STAT_ON_KILL, $shooter);
 | 
			
		||||
				$this->maniaControl->statisticManager->incrementStat(self::STAT_ON_DEATH, $victim);
 | 
			
		||||
				break;
 | 
			
		||||
			case 'LibXmlRpc_OnPlayerRequestRespawn':
 | 
			
		||||
				$player = $this->maniaControl->playerManager->getPlayer($callback[1][1][0]);
 | 
			
		||||
				$this->maniaControl->statisticManager->incrementStat(self::STAT_ON_PLAYER_REQUEST_RESPAWN, $player, $serverLogin);
 | 
			
		||||
				$this->maniaControl->statisticManager->incrementStat(self::STAT_ON_PLAYER_REQUEST_RESPAWN, $player);
 | 
			
		||||
				break;
 | 
			
		||||
			case 'OnShoot': //TODO
 | 
			
		||||
			case 'OnShoot':
 | 
			
		||||
				$paramsObject = json_decode($callback[1][1]);
 | 
			
		||||
				$this->handleOnShoot($paramsObject->Event->Player->Login);
 | 
			
		||||
				break;
 | 
			
		||||
			case 'OnNearMiss':
 | 
			
		||||
				$paramsObject = json_decode($callback[1][1]);
 | 
			
		||||
				$player       = $this->maniaControl->playerManager->getPlayer($paramsObject->Event->Shooter->Login);
 | 
			
		||||
				$this->maniaControl->statisticManager->incrementStat(self::STAT_ON_NEARMISS, $player, $serverLogin);
 | 
			
		||||
				$this->maniaControl->statisticManager->incrementStat(self::STAT_ON_NEARMISS, $player);
 | 
			
		||||
				break;
 | 
			
		||||
			case 'OnCapture':
 | 
			
		||||
				$paramsObject = json_decode($callback[1][1]);
 | 
			
		||||
				$player       = $this->maniaControl->playerManager->getPlayer($paramsObject->Event->Player->Login);
 | 
			
		||||
				$this->maniaControl->statisticManager->incrementStat(self::STAT_ON_CAPTURE, $player, $serverLogin);
 | 
			
		||||
				$this->maniaControl->statisticManager->incrementStat(self::STAT_ON_CAPTURE, $player);
 | 
			
		||||
				break;
 | 
			
		||||
			case 'OnHit':
 | 
			
		||||
				$paramsObject = json_decode($callback[1][1]);
 | 
			
		||||
				$shooter      = $this->maniaControl->playerManager->getPlayer($paramsObject->Event->Shooter->Login);
 | 
			
		||||
				$this->maniaControl->statisticManager->incrementStat(self::STAT_ON_HIT, $shooter, $serverLogin);
 | 
			
		||||
				$this->maniaControl->statisticManager->incrementStat(self::STAT_ON_HIT, $shooter);
 | 
			
		||||
				$victim = $this->maniaControl->playerManager->getPlayer($paramsObject->Event->Victim->Login);
 | 
			
		||||
				$this->maniaControl->statisticManager->incrementStat(self::STAT_ON_GOT_HIT, $victim, $serverLogin);
 | 
			
		||||
				$this->maniaControl->statisticManager->incrementStat(self::STAT_ON_GOT_HIT, $victim);
 | 
			
		||||
				break;
 | 
			
		||||
			case 'OnArmorEmpty':
 | 
			
		||||
				$paramsObject = json_decode($callback[1][1]);
 | 
			
		||||
				$victim       = $this->maniaControl->playerManager->getPlayer($paramsObject->Event->Victim->Login);
 | 
			
		||||
				$this->maniaControl->statisticManager->incrementStat(self::STAT_ON_DEATH, $victim, $serverLogin);
 | 
			
		||||
				$this->maniaControl->statisticManager->incrementStat(self::STAT_ON_DEATH, $victim);
 | 
			
		||||
				$shooter = $this->maniaControl->playerManager->getPlayer($paramsObject->Event->Shooter->Login);
 | 
			
		||||
				$this->maniaControl->statisticManager->incrementStat(self::STAT_ON_KILL, $shooter, $serverLogin);
 | 
			
		||||
				$this->maniaControl->statisticManager->incrementStat(self::STAT_ON_KILL, $shooter);
 | 
			
		||||
				break;
 | 
			
		||||
			case 'OnRequestRespawn':
 | 
			
		||||
				$paramsObject = json_decode($callback[1][1]);
 | 
			
		||||
				$player       = $this->maniaControl->playerManager->getPlayer($paramsObject->Event->Player->Login);
 | 
			
		||||
				$this->maniaControl->statisticManager->incrementStat(self::STAT_ON_PLAYER_REQUEST_RESPAWN, $player, $serverLogin);
 | 
			
		||||
				$this->maniaControl->statisticManager->incrementStat(self::STAT_ON_PLAYER_REQUEST_RESPAWN, $player);
 | 
			
		||||
				break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user