maniaControl = $maniaControl; //Register Callbacks $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, 1); //TODO TEMP on 1, normally 3 or 4 $this->maniaControl->settingManager->initSetting($this, self::SETTING_ON_SHOOT_PRESTORE, 30); } /** * onInit * * @param array $callback */ public function onInit(array $callback) { //Define Stats MetaData $this->maniaControl->statisticManager->defineStatMetaData(self::STAT_ON_SHOOT); $this->maniaControl->statisticManager->defineStatMetaData(self::STAT_ON_NEARMISS); $this->maniaControl->statisticManager->defineStatMetaData(self::STAT_ON_CAPTURE); $this->maniaControl->statisticManager->defineStatMetaData(self::STAT_ON_HIT); $this->maniaControl->statisticManager->defineStatMetaData(self::STAT_ON_GOT_HIT); $this->maniaControl->statisticManager->defineStatMetaData(self::STAT_ON_DEATH); $this->maniaControl->statisticManager->defineStatMetaData(self::STAT_ON_PLAYER_REQUEST_RESPAWN); $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] > $this->maniaControl->settingManager->getSetting($this, self::SETTING_ON_SHOOT_PRESTORE)) { $serverIndex = $this->maniaControl->server->getIndex(); $player = $this->maniaControl->playerManager->getPlayer($login); $this->maniaControl->statisticManager->insertStat(self::STAT_ON_SHOOT, $player, $serverIndex, $this->onShootArray[$login]); $this->onShootArray[$login] = 0; } } /** * Insert OnShoot Statistic when a player leaves * * @param array $callback */ public function onPlayerDisconnect(array $callback) { $player = $callback[1]; //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) { $serverIndex = $this->maniaControl->server->getIndex(); $this->maniaControl->statisticManager->insertStat(self::STAT_ON_SHOOT, $player, $serverIndex, $this->onShootArray[$player->login]); } unset($this->onShootArray[$player->login]); } } /** * Handle stats on callbacks * * @param array $callback */ public function handleCallbacks(array $callback) { //Check if Stat Collecting is enabled if(!$this->maniaControl->settingManager->getSetting($this, self::SETTING_COLLECT_STATS_ENABLED)) { return; } //Check for Minplayer if(count($this->maniaControl->playerManager->getPlayers()) < $this->maniaControl->settingManager->getSetting($this, self::SETTING_COLLECT_STATS_MINPLAYERS)) { return; } $callbackName = $callback[1][0]; switch($callbackName) { 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); $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); break; case 'LibXmlRpc_OnCapture': $player = $this->maniaControl->playerManager->getPlayer($callback[1][1][0]); $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); $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); break; case 'OnShoot': $paramsObject = json_decode($callback[1][1]); $this->handleOnShoot($paramsObject->Event->Shooter->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); 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); 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); $victim = $this->maniaControl->playerManager->getPlayer($paramsObject->Event->Victim->Login); $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); $shooter = $this->maniaControl->playerManager->getPlayer($paramsObject->Event->Shooter->Login); $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); break; } } }