diff --git a/application/plugins/Obstacle.php b/application/plugins/Obstacle.php index 553653f0..252bf342 100644 --- a/application/plugins/Obstacle.php +++ b/application/plugins/Obstacle.php @@ -1,6 +1,8 @@ author = 'steeffeen'; $this->description = 'Plugin offering various Commands for the ShootMania Obstacle Game Mode.'; - // Register for jump command + // Init settings + $this->maniaControl->settingManager->initSetting($this, self::SETTING_JUMPTOAUTHLEVEL, + AuthenticationManager::AUTH_LEVEL_OPERATOR); + + // Register for commands $this->maniaControl->commandManager->registerCommandListener('jumpto', $this, 'command_JumpTo'); + + // Register for callbacks + $this->maniaControl->callbackManager->registerScriptCallbackListener(self::SCB_ONFINISH, $this, 'callback_OnFinish'); + $this->maniaControl->callbackManager->registerScriptCallbackListener(self::SCB_ONCHECKPOINT, $this, 'callback_OnCheckpoint'); } /** @@ -40,8 +53,8 @@ class ObstaclePlugin extends Plugin implements CommandListener { * @return bool */ public function command_JumpTo(array $chatCallback, Player $player) { - // $rightLevel = - if (!$this->maniaControl->authenticationManager->checkRight($player, AuthenticationManager::AUTH_LEVEL_OPERATOR)) { + $authLevel = $this->maniaControl->settingManager->getSetting($this, self::SETTING_JUMPTOAUTHLEVEL); + if (!$this->maniaControl->authenticationManager->checkRight($player, $authLevel)) { $this->maniaControl->authenticationManager->sendNotAllowed($player); return false; } @@ -53,6 +66,42 @@ class ObstaclePlugin extends Plugin implements CommandListener { } return true; } + + /** + * Handle OnFinish script callback + * + * @param array $callback + */ + public function callback_OnFinish(array $callback) { + $data = json_decode($callback[1]); + $player = $this->maniaControl->playerManager->getPlayer($data->Player->Login); + if (!$player) { + return; + } + $time = $data->Run->Time; + // Trigger trackmania player finish callback + $finishCallback = array($player->pid, $player->login, $time); + $finishCallback = array(CallbackManager::CB_TM_PLAYERFINISH, $finishCallback); + $this->maniaControl->callbackManager->triggerCallback(CallbackManager::CB_TM_PLAYERFINISH, $finishCallback); + } + + /** + * Handle OnCheckpoint script callback + * + * @param array $callback + */ + public function callback_OnCheckpoint(array $callback) { + $data = json_decode($callback[1]); + $player = $this->maniaControl->playerManager->getPlayer($data->Player->Login); + if (!$player) { + return; + } + $time = $data->Run->Time; + // Trigger trackmania player finish callback + $finishCallback = array($player->pid, $player->login, $time); + $finishCallback = array(CallbackManager::CB_TM_PLAYERCHECKPOINT, $finishCallback); + $this->maniaControl->callbackManager->triggerCallback(CallbackManager::CB_TM_PLAYERCHECKPOINT, $finishCallback); + } } ?>