diff --git a/application/core/Commands/CommandManager.php b/application/core/Commands/CommandManager.php index dcc6e9d7..0e22f7b0 100644 --- a/application/core/Commands/CommandManager.php +++ b/application/core/Commands/CommandManager.php @@ -18,7 +18,7 @@ class CommandManager implements CallbackListener { */ private $maniaControl = null; private $commandListeners = array(); - + private $adminCommandListeners = array(); /** * Construct commands manager * @@ -32,23 +32,33 @@ class CommandManager implements CallbackListener { /** * Register a command listener * - * @param string $commandName - * @param CommandListener $listener - * @param string $method + * @param string $commandName + * @param CommandListener $listener + * @param string $method + * @param bool $adminCommand * @return bool */ - public function registerCommandListener($commandName, CommandListener $listener, $method) { + public function registerCommandListener($commandName, CommandListener $listener, $method, $adminCommand = false) { $command = strtolower($commandName); if (!method_exists($listener, $method)) { trigger_error("Given listener can't handle command '{$command}' (no method '{$method}')!"); return false; } - if (!array_key_exists($command, $this->commandListeners) || !is_array($this->commandListeners[$command])) { - // Init listeners array - $this->commandListeners[$command] = array(); + if($adminCommand){ + if (!array_key_exists($command, $this->adminCommandListeners) || !is_array($this->adminCommandListeners[$command])) { + // Init listeners array + $this->adminCommandListeners[$command] = array(); + } + // Register admin command listener + array_push($this->adminCommandListeners[$command], array($listener, $method)); + }else{ + if (!array_key_exists($command, $this->commandListeners) || !is_array($this->commandListeners[$command])) { + // Init listeners array + $this->commandListeners[$command] = array(); + } + // Register command listener + array_push($this->commandListeners[$command], array($listener, $method)); } - // Register command listener - array_push($this->commandListeners[$command], array($listener, $method)); return true; } @@ -70,12 +80,24 @@ class CommandManager implements CallbackListener { // Handle command $command = explode(" ", substr($callback[1][2], 1)); $command = strtolower($command[0]); - if (!array_key_exists($command, $this->commandListeners) || !is_array($this->commandListeners[$command])) { + + if(substr($command,0,1) == "/" || $command == "admin"){ //admin command + $commandListeners = $this->adminCommandListeners; + if($command == "admin"){ + //TODO make /admin working + } + $command = substr($command, 1); + }else{ //user command + $commandListeners = $this->commandListeners; + } + + if (!array_key_exists($command, $commandListeners) || !is_array($commandListeners[$command])) { // No command listener registered return; } + // Inform command listeners - foreach ($this->commandListeners[$command] as $listener) { + foreach ($commandListeners[$command] as $listener) { call_user_func(array($listener[0], $listener[1]), $callback, $player); } } diff --git a/application/core/Players/PlayerCommands.php b/application/core/Players/PlayerCommands.php index 63ac0ea5..4990c3b0 100644 --- a/application/core/Players/PlayerCommands.php +++ b/application/core/Players/PlayerCommands.php @@ -26,15 +26,15 @@ class PlayerCommands implements CommandListener { $this->maniaControl = $maniaControl; // Register for commands - $this->maniaControl->commandManager->registerCommandListener('/teambalance', $this, 'command_TeamBalance'); - $this->maniaControl->commandManager->registerCommandListener('/autoteambalance', $this, 'command_TeamBalance'); - $this->maniaControl->commandManager->registerCommandListener('/kick', $this, 'command_Kick'); - $this->maniaControl->commandManager->registerCommandListener('/forcespec', $this, 'command_ForceSpectator'); - $this->maniaControl->commandManager->registerCommandListener('/forcespectator', $this, 'command_ForceSpectator'); - $this->maniaControl->commandManager->registerCommandListener('/forceplay', $this, 'command_ForcePlayer'); - $this->maniaControl->commandManager->registerCommandListener('/forceplayer', $this, 'command_ForcePlayer'); - $this->maniaControl->commandManager->registerCommandListener('/addfakeplayers', $this, 'command_AddFakePlayers'); - $this->maniaControl->commandManager->registerCommandListener('/removefakeplayers', $this, 'command_RemoveFakePlayers'); + $this->maniaControl->commandManager->registerCommandListener('teambalance', $this, 'command_TeamBalance',true); + $this->maniaControl->commandManager->registerCommandListener('autoteambalance', $this, 'command_TeamBalance',true); + $this->maniaControl->commandManager->registerCommandListener('kick', $this, 'command_Kick',true); + $this->maniaControl->commandManager->registerCommandListener('forcespec', $this, 'command_ForceSpectator',true); + $this->maniaControl->commandManager->registerCommandListener('forcespectator', $this, 'command_ForceSpectator',true); + $this->maniaControl->commandManager->registerCommandListener('forceplay', $this, 'command_ForcePlayer',true); + $this->maniaControl->commandManager->registerCommandListener('forceplayer', $this, 'command_ForcePlayer',true); + $this->maniaControl->commandManager->registerCommandListener('addbots', $this, 'command_AddFakePlayers',true); + $this->maniaControl->commandManager->registerCommandListener('removebots', $this, 'command_RemoveFakePlayers',true); } /**