2013-11-19 20:29:37 +01:00
< ? php
namespace ManiaControl\Server ;
2014-01-31 20:12:01 +01:00
use FML\Controls\Quads\Quad_BgRaceScore2 ;
2014-01-10 00:18:15 +01:00
use FML\Controls\Quads\Quad_Icons128x32_1 ;
2014-01-10 13:28:48 +01:00
use FML\Controls\Quads\Quad_Icons64x64_1 ;
2013-11-19 20:29:37 +01:00
use ManiaControl\Admin\AuthenticationManager ;
use ManiaControl\Callbacks\CallbackListener ;
use ManiaControl\Callbacks\CallbackManager ;
2014-01-31 00:04:40 +01:00
use ManiaControl\Callbacks\TimerListener ;
2013-11-19 20:29:37 +01:00
use ManiaControl\Commands\CommandListener ;
2014-01-10 12:06:47 +01:00
use ManiaControl\ManiaControl ;
2014-01-10 00:18:15 +01:00
use ManiaControl\Manialinks\ManialinkPageAnswerListener ;
2013-11-19 20:29:37 +01:00
use ManiaControl\Players\Player ;
2014-04-19 23:14:37 +02:00
use Maniaplanet\DedicatedServer\Xmlrpc\NotInScriptModeException ;
2013-11-19 20:29:37 +01:00
/**
2014-04-12 12:14:37 +02:00
* Class offering various Commands related to the Dedicated Server
2013-11-19 20:29:37 +01:00
*
2014-04-19 23:14:37 +02:00
* @ author steeffeen & kremsy
2014-04-12 12:14:37 +02:00
* @ copyright ManiaControl Copyright © 2014 ManiaControl Team
2014-04-19 23:14:37 +02:00
* @ license http :// www . gnu . org / licenses / GNU General Public License , Version 3
2013-11-19 20:29:37 +01:00
*/
2014-01-31 00:04:40 +01:00
class ServerCommands implements CallbackListener , CommandListener , ManialinkPageAnswerListener , TimerListener {
2014-04-12 12:14:37 +02:00
/*
2014-01-10 00:18:15 +01:00
* Constants
*/
2014-01-31 16:55:01 +01:00
const ACTION_SET_PAUSE = 'ServerCommands.SetPause' ;
2014-01-31 20:12:01 +01:00
const ACTION_EXTEND_WARMUP = 'ServerCommands.ExtendWarmup' ;
const ACTION_END_WARMUP = 'ServerCommands.EndWarmup' ;
2014-01-31 16:55:01 +01:00
const ACTION_CANCEL_VOTE = 'ServerCommands.CancelVote' ;
const CB_VOTE_CANCELED = 'ServerCommands.VoteCanceled' ;
const SETTING_PERMISSION_CANCEL_VOTE = 'Cancel Vote' ;
const SETTING_PERMISSION_SET_PAUSE = 'Set Pause' ;
2014-01-31 20:12:01 +01:00
const SETTING_PERMISSION_HANDLE_WARMUP = 'Handle Warmup' ;
2014-01-31 16:55:01 +01:00
const SETTING_PERMISSION_SHOW_SYSTEMINFO = 'Show SystemInfo' ;
const SETTING_PERMISSION_SHUTDOWN_SERVER = 'Shutdown Server' ;
const SETTING_PERMISSION_CHANGE_SERVERSETTINGS = 'Change ServerSettings' ;
2014-01-11 23:36:53 +01:00
2014-04-12 12:14:37 +02:00
/*
* Private Properties
2013-11-19 20:29:37 +01:00
*/
private $maniaControl = null ;
private $serverShutdownTime = - 1 ;
private $serverShutdownEmpty = false ;
/**
* Create a new server commands instance
*
2014-01-01 19:25:51 +01:00
* @ param ManiaControl $maniaControl
2013-11-19 20:29:37 +01:00
*/
public function __construct ( ManiaControl $maniaControl ) {
$this -> maniaControl = $maniaControl ;
2014-01-10 12:06:47 +01:00
2013-12-05 00:30:10 +01:00
// Register for callbacks
2014-01-31 00:04:40 +01:00
$this -> maniaControl -> timerManager -> registerTimerListening ( $this , 'each5Seconds' , 5000 );
2014-02-19 12:53:06 +01:00
$this -> maniaControl -> callbackManager -> registerCallbackListener ( CallbackManager :: CB_ONINIT , $this , 'handleOnInit' );
2014-01-10 12:06:47 +01:00
2013-12-05 00:30:10 +01:00
// Register for commands
2014-05-01 01:41:19 +02:00
$this -> maniaControl -> commandManager -> registerCommandListener ( 'setpwd' , $this , 'command_SetPwd' , true , 'Sets play password.' );
$this -> maniaControl -> commandManager -> registerCommandListener ( 'setservername' , $this , 'command_SetServerName' , true , 'Sets the servername.' );
$this -> maniaControl -> commandManager -> registerCommandListener ( 'setmaxplayers' , $this , 'command_SetMaxPlayers' , true , 'Sets the maximum number of players.' );
$this -> maniaControl -> commandManager -> registerCommandListener ( 'setmaxspectators' , $this , 'command_SetMaxSpectators' , true , 'Sets the maximum number of spectators.' );
$this -> maniaControl -> commandManager -> registerCommandListener ( 'setspecpwd' , $this , 'command_SetSpecPwd' , true , 'Sets spectator password.' );
$this -> maniaControl -> commandManager -> registerCommandListener ( 'shutdownserver' , $this , 'command_ShutdownServer' , true , 'Shuts down the ManiaPlanet server.' );
$this -> maniaControl -> commandManager -> registerCommandListener ( 'systeminfo' , $this , 'command_SystemInfo' , true , 'Shows system information.' );
2014-01-10 00:18:15 +01:00
2014-05-01 01:41:19 +02:00
$this -> maniaControl -> commandManager -> registerCommandListener ( 'cancel' , $this , 'command_CancelVote' , true , 'Cancels the current vote.' );
2014-01-10 00:18:15 +01:00
$this -> maniaControl -> manialinkManager -> registerManialinkPageAnswerListener ( self :: ACTION_SET_PAUSE , $this , 'setPause' );
2014-01-14 20:09:27 +01:00
}
2014-01-10 00:18:15 +01:00
2014-01-14 20:09:27 +01:00
/**
2014-02-19 15:44:00 +01:00
* Handle ManiaControl OnInit Callback
2014-01-14 20:09:27 +01:00
*/
2014-02-19 15:44:00 +01:00
public function handleOnInit () {
2014-01-31 16:55:01 +01:00
//Define Permissions
$this -> maniaControl -> authenticationManager -> definePermissionLevel ( self :: SETTING_PERMISSION_SHUTDOWN_SERVER , AuthenticationManager :: AUTH_LEVEL_SUPERADMIN );
$this -> maniaControl -> authenticationManager -> definePermissionLevel ( self :: SETTING_PERMISSION_SHOW_SYSTEMINFO , AuthenticationManager :: AUTH_LEVEL_SUPERADMIN );
$this -> maniaControl -> authenticationManager -> definePermissionLevel ( self :: SETTING_PERMISSION_CHANGE_SERVERSETTINGS , AuthenticationManager :: AUTH_LEVEL_ADMIN );
$this -> maniaControl -> authenticationManager -> definePermissionLevel ( self :: SETTING_PERMISSION_SET_PAUSE , AuthenticationManager :: AUTH_LEVEL_MODERATOR );
$this -> maniaControl -> authenticationManager -> definePermissionLevel ( self :: SETTING_PERMISSION_CANCEL_VOTE , AuthenticationManager :: AUTH_LEVEL_MODERATOR );
2014-01-31 20:12:01 +01:00
$this -> maniaControl -> authenticationManager -> definePermissionLevel ( self :: SETTING_PERMISSION_HANDLE_WARMUP , AuthenticationManager :: AUTH_LEVEL_MODERATOR );
2014-01-31 16:55:01 +01:00
2014-01-31 20:12:01 +01:00
// Extend WarmUp
$this -> maniaControl -> manialinkManager -> registerManialinkPageAnswerListener ( self :: ACTION_EXTEND_WARMUP , $this , 'command_extendWarmup' );
$itemQuad = new Quad_BgRaceScore2 ();
$itemQuad -> setSubStyle ( $itemQuad :: SUBSTYLE_SendScore );
$itemQuad -> setAction ( self :: ACTION_EXTEND_WARMUP );
$this -> maniaControl -> actionsMenu -> addMenuItem ( $itemQuad , false , 14 , 'Extend Warmup' );
// Stop WarmUp
$this -> maniaControl -> manialinkManager -> registerManialinkPageAnswerListener ( self :: ACTION_END_WARMUP , $this , 'command_endWarmup' );
$itemQuad = new Quad_Icons64x64_1 ();
$itemQuad -> setSubStyle ( $itemQuad :: SUBSTYLE_ArrowGreen );
$itemQuad -> setAction ( self :: ACTION_END_WARMUP );
$this -> maniaControl -> actionsMenu -> addMenuItem ( $itemQuad , false , 15 , 'End Warmup' );
2014-01-10 13:28:48 +01:00
// Action cancel Vote
$this -> maniaControl -> manialinkManager -> registerManialinkPageAnswerListener ( self :: ACTION_CANCEL_VOTE , $this , 'command_cancelVote' );
$itemQuad = new Quad_Icons64x64_1 ();
$itemQuad -> setSubStyle ( $itemQuad :: SUBSTYLE_ArrowRed );
$itemQuad -> setAction ( self :: ACTION_CANCEL_VOTE );
2014-01-31 20:12:01 +01:00
$this -> maniaControl -> actionsMenu -> addMenuItem ( $itemQuad , false , 30 , 'Cancel Vote' );
2014-02-13 00:26:18 +01:00
//Check if Pause exists in current GameMode
try {
$scriptInfos = $this -> maniaControl -> client -> getModeScriptInfo ();
2014-04-19 23:14:37 +02:00
} catch ( NotInScriptModeException $e ) {
return ;
2014-02-13 00:26:18 +01:00
}
$pauseExists = false ;
foreach ( $scriptInfos -> commandDescs as $param ) {
if ( $param -> name == " Command_ForceWarmUp " ) {
$pauseExists = true ;
break ;
}
}
// Set Pause
if ( $pauseExists ) {
$itemQuad = new Quad_Icons128x32_1 ();
$itemQuad -> setSubStyle ( $itemQuad :: SUBSTYLE_ManiaLinkSwitch );
$itemQuad -> setAction ( self :: ACTION_SET_PAUSE );
$this -> maniaControl -> actionsMenu -> addAdminMenuItem ( $itemQuad , 13 , 'Pauses the current game' );
}
2014-01-10 13:28:48 +01:00
}
2014-02-01 19:06:21 +01:00
2014-01-10 13:28:48 +01:00
/**
* Handle //cancelvote command
*
* @ param array $chatCallback
* @ param Player $player
*/
public function command_CancelVote ( array $chatCallback , Player $player ) {
2014-01-31 16:55:01 +01:00
if ( ! $this -> maniaControl -> authenticationManager -> checkPermission ( $player , self :: SETTING_PERMISSION_CANCEL_VOTE )) {
2014-01-10 13:28:48 +01:00
$this -> maniaControl -> authenticationManager -> sendNotAllowed ( $player );
return ;
}
2014-01-16 19:49:36 +01:00
$this -> maniaControl -> client -> cancelVote ();
2014-01-10 13:28:48 +01:00
$this -> maniaControl -> chat -> sendInformation ( '$<' . $player -> nickname . '$> canceled the Vote!' );
2014-01-11 23:36:53 +01:00
// Trigger callback
2014-02-19 15:44:00 +01:00
$this -> maniaControl -> callbackManager -> triggerCallback ( self :: CB_VOTE_CANCELED , $player );
2014-01-10 00:18:15 +01:00
}
2014-01-31 20:12:01 +01:00
/**
* Extends the Warmup
*
* @ param array $callback
* @ param Player $player
*/
public function command_extendWarmup ( array $callback , Player $player ) {
if ( ! $this -> maniaControl -> authenticationManager -> checkPermission ( $player , self :: SETTING_PERMISSION_HANDLE_WARMUP )) {
$this -> maniaControl -> authenticationManager -> sendNotAllowed ( $player );
return ;
}
try {
$this -> maniaControl -> client -> triggerModeScriptEvent ( 'WarmUp_Extend' , '10' );
2014-04-19 23:14:37 +02:00
} catch ( NotInScriptModeException $e ) {
return ;
2014-01-31 20:12:01 +01:00
}
$this -> maniaControl -> chat -> sendInformation ( '$<' . $player -> nickname . '$> extended the WarmUp by 10 seconds!' );
}
/**
* Ends the Warmup
*
* @ param array $callback
* @ param Player $player
*/
public function command_endWarmup ( array $callback , Player $player ) {
if ( ! $this -> maniaControl -> authenticationManager -> checkPermission ( $player , self :: SETTING_PERMISSION_HANDLE_WARMUP )) {
$this -> maniaControl -> authenticationManager -> sendNotAllowed ( $player );
return ;
}
try {
$this -> maniaControl -> client -> triggerModeScriptEvent ( 'WarmUp_Stop' , '' );
2014-04-19 23:14:37 +02:00
} catch ( NotInScriptModeException $e ) {
return ;
2014-01-31 20:12:01 +01:00
}
$this -> maniaControl -> chat -> sendInformation ( '$<' . $player -> nickname . '$> stopped the WarmUp!' );
}
2014-01-10 00:18:15 +01:00
/**
* Breaks the current game
2014-01-10 12:06:47 +01:00
*
2014-01-10 00:18:15 +01:00
* @ param array $callback
*/
2014-01-31 16:55:01 +01:00
public function setPause ( array $callback , Player $player ) {
if ( ! $this -> maniaControl -> authenticationManager -> checkPermission ( $player , self :: SETTING_PERMISSION_SET_PAUSE )) {
$this -> maniaControl -> authenticationManager -> sendNotAllowed ( $player );
return ;
2014-01-10 12:06:47 +01:00
}
2014-01-31 16:55:01 +01:00
try {
$this -> maniaControl -> client -> sendModeScriptCommands ( array ( 'Command_ForceWarmUp' => True ));
2014-04-19 23:14:37 +02:00
} catch ( NotInScriptModeException $e ) {
return ;
2014-01-31 16:55:01 +01:00
}
$this -> maniaControl -> chat -> sendInformation ( '$<' . $player -> nickname . '$> paused the Game!' );
2013-11-19 20:29:37 +01:00
}
/**
* Check stuff each 5 seconds
*
2014-01-31 00:04:40 +01:00
* @ param $timer
2013-11-19 20:29:37 +01:00
* @ return bool
*/
2014-01-31 00:04:40 +01:00
public function each5Seconds ( $timer ) {
2013-11-19 20:29:37 +01:00
// Empty shutdown
2014-01-31 00:04:40 +01:00
if ( $this -> serverShutdownEmpty ) {
2014-01-06 16:14:49 +01:00
$players = $this -> maniaControl -> playerManager -> getPlayers ();
2014-01-31 00:04:40 +01:00
if ( count ( $players ) <= 0 ) {
2013-12-05 00:30:10 +01:00
$this -> shutdownServer ( 'empty' );
2013-11-19 20:29:37 +01:00
}
}
2014-01-10 12:06:47 +01:00
2013-11-19 20:29:37 +01:00
// Delayed shutdown
2014-01-31 00:04:40 +01:00
if ( $this -> serverShutdownTime > 0 ) {
if ( time () >= $this -> serverShutdownTime ) {
2013-12-05 00:30:10 +01:00
$this -> shutdownServer ( 'delayed' );
2013-11-19 20:29:37 +01:00
}
}
}
/**
2013-11-24 23:55:54 +01:00
* Handle //systeminfo command
2013-11-19 20:29:37 +01:00
*
2014-01-10 12:06:47 +01:00
* @ param array $chat
2014-01-01 19:25:51 +01:00
* @ param Player $player
2013-11-19 20:29:37 +01:00
*/
public function command_SystemInfo ( array $chat , Player $player ) {
2014-01-31 16:55:01 +01:00
if ( ! $this -> maniaControl -> authenticationManager -> checkPermission ( $player , self :: SETTING_PERMISSION_SHOW_SYSTEMINFO )) {
2013-11-19 20:29:37 +01:00
$this -> maniaControl -> authenticationManager -> sendNotAllowed ( $player );
2013-12-05 00:30:10 +01:00
return ;
2013-11-19 20:29:37 +01:00
}
2014-02-15 13:04:31 +01:00
$systemInfo = $this -> maniaControl -> client -> getSystemInfo ();
2014-01-23 17:47:21 +01:00
$message = 'SystemInfo: ip=' . $systemInfo -> publishedIp . ', port=' . $systemInfo -> port . ', p2pPort=' . $systemInfo -> p2PPort . ', title=' . $systemInfo -> titleId . ', login=' . $systemInfo -> serverLogin . '.' ;
2013-12-05 00:30:10 +01:00
$this -> maniaControl -> chat -> sendInformation ( $message , $player -> login );
2013-11-19 20:29:37 +01:00
}
/**
2013-11-24 23:55:54 +01:00
* Handle //shutdownserver command
2013-11-19 20:29:37 +01:00
*
2014-01-10 12:06:47 +01:00
* @ param array $chat
2014-01-01 19:25:51 +01:00
* @ param Player $player
2013-11-19 20:29:37 +01:00
*/
public function command_ShutdownServer ( array $chat , Player $player ) {
2014-01-31 16:55:01 +01:00
if ( ! $this -> maniaControl -> authenticationManager -> checkPermission ( $player , self :: SETTING_PERMISSION_SHUTDOWN_SERVER )) {
2013-11-19 20:29:37 +01:00
$this -> maniaControl -> authenticationManager -> sendNotAllowed ( $player );
2013-12-05 00:30:10 +01:00
return ;
2013-11-19 20:29:37 +01:00
}
// Check for delayed shutdown
$params = explode ( ' ' , $chat [ 1 ][ 2 ]);
2014-01-31 00:04:40 +01:00
if ( count ( $params ) >= 2 ) {
2013-11-19 20:29:37 +01:00
$param = $params [ 1 ];
2014-01-31 00:04:40 +01:00
if ( $param == 'empty' ) {
2013-11-19 20:29:37 +01:00
$this -> serverShutdownEmpty = ! $this -> serverShutdownEmpty ;
2014-01-31 00:04:40 +01:00
if ( $this -> serverShutdownEmpty ) {
2013-11-19 20:29:37 +01:00
$this -> maniaControl -> chat -> sendInformation ( " The server will shutdown as soon as it's empty! " , $player -> login );
2013-12-05 00:30:10 +01:00
return ;
2013-11-19 20:29:37 +01:00
}
$this -> maniaControl -> chat -> sendInformation ( " Empty-shutdown cancelled! " , $player -> login );
2013-12-05 00:30:10 +01:00
return ;
2013-11-19 20:29:37 +01:00
}
2014-01-10 12:06:47 +01:00
$delay = ( int ) $param ;
2014-01-31 00:04:40 +01:00
if ( $delay <= 0 ) {
2013-11-19 20:29:37 +01:00
// Cancel shutdown
$this -> serverShutdownTime = - 1 ;
$this -> maniaControl -> chat -> sendInformation ( " Delayed shutdown cancelled! " , $player -> login );
2013-12-05 00:30:10 +01:00
return ;
2013-11-19 20:29:37 +01:00
}
// Trigger delayed shutdown
$this -> serverShutdownTime = time () + $delay * 60. ;
$this -> maniaControl -> chat -> sendInformation ( " The server will shut down in { $delay } minutes! " , $player -> login );
2013-12-05 00:30:10 +01:00
return ;
2013-11-19 20:29:37 +01:00
}
2013-12-05 00:30:10 +01:00
$this -> shutdownServer ( $player -> login );
2013-11-19 20:29:37 +01:00
}
/**
2013-11-24 23:55:54 +01:00
* Handle //setservername command
2013-11-19 20:29:37 +01:00
*
2014-01-10 12:06:47 +01:00
* @ param array $chat
2014-01-01 19:25:51 +01:00
* @ param Player $player
2013-11-19 20:29:37 +01:00
*/
public function command_SetServerName ( array $chat , Player $player ) {
2014-01-31 16:55:01 +01:00
if ( ! $this -> maniaControl -> authenticationManager -> checkPermission ( $player , self :: SETTING_PERMISSION_CHANGE_SERVERSETTINGS )) {
2013-11-19 20:29:37 +01:00
$this -> maniaControl -> authenticationManager -> sendNotAllowed ( $player );
2013-12-05 00:30:10 +01:00
return ;
2013-11-19 20:29:37 +01:00
}
$params = explode ( ' ' , $chat [ 1 ][ 2 ], 2 );
2014-01-31 00:04:40 +01:00
if ( count ( $params ) < 2 ) {
2013-11-19 20:29:37 +01:00
$this -> maniaControl -> chat -> sendUsageInfo ( 'Usage example: //setservername ManiaPlanet Server' , $player -> login );
2013-12-05 00:30:10 +01:00
return ;
2013-11-19 20:29:37 +01:00
}
$serverName = $params [ 1 ];
2014-02-13 14:21:25 +01:00
$this -> maniaControl -> client -> setServerName ( $serverName );
2013-11-24 23:55:54 +01:00
$this -> maniaControl -> chat -> sendSuccess ( " Server name changed to: ' { $serverName } '! " , $player -> login );
}
/**
* Handle //setpwd command
*
2014-01-10 12:06:47 +01:00
* @ param array $chatCallback
2014-01-01 19:25:51 +01:00
* @ param Player $player
2013-11-24 23:55:54 +01:00
*/
public function command_SetPwd ( array $chatCallback , Player $player ) {
2014-01-31 16:55:01 +01:00
if ( ! $this -> maniaControl -> authenticationManager -> checkPermission ( $player , self :: SETTING_PERMISSION_CHANGE_SERVERSETTINGS )) {
2013-11-24 23:55:54 +01:00
$this -> maniaControl -> authenticationManager -> sendNotAllowed ( $player );
2013-12-05 00:30:10 +01:00
return ;
2013-11-24 23:55:54 +01:00
}
2014-01-10 12:06:47 +01:00
$messageParts = explode ( ' ' , $chatCallback [ 1 ][ 2 ], 2 );
$password = '' ;
2013-11-24 23:55:54 +01:00
$successMessage = 'Password removed!' ;
2014-01-31 00:04:40 +01:00
if ( isset ( $messageParts [ 1 ])) {
2014-01-10 12:06:47 +01:00
$password = $messageParts [ 1 ];
2013-11-24 23:55:54 +01:00
$successMessage = " Password changed to: ' { $password } '! " ;
}
2014-02-13 14:21:25 +01:00
$this -> maniaControl -> client -> setServerPassword ( $password );
2013-11-24 23:55:54 +01:00
$this -> maniaControl -> chat -> sendSuccess ( $successMessage , $player -> login );
}
/**
* Handle //setspecpwd command
*
2014-01-10 12:06:47 +01:00
* @ param array $chatCallback
2014-01-01 19:25:51 +01:00
* @ param Player $player
2013-11-24 23:55:54 +01:00
*/
public function command_SetSpecPwd ( array $chatCallback , Player $player ) {
2014-01-31 16:55:01 +01:00
if ( ! $this -> maniaControl -> authenticationManager -> checkPermission ( $player , self :: SETTING_PERMISSION_CHANGE_SERVERSETTINGS )) {
2013-11-24 23:55:54 +01:00
$this -> maniaControl -> authenticationManager -> sendNotAllowed ( $player );
2013-12-05 00:30:10 +01:00
return ;
2013-11-24 23:55:54 +01:00
}
2014-01-10 12:06:47 +01:00
$messageParts = explode ( ' ' , $chatCallback [ 1 ][ 2 ], 2 );
$password = '' ;
2013-11-24 23:55:54 +01:00
$successMessage = 'Spectator password removed!' ;
2014-01-31 00:04:40 +01:00
if ( isset ( $messageParts [ 1 ])) {
2014-01-10 12:06:47 +01:00
$password = $messageParts [ 1 ];
2013-11-24 23:55:54 +01:00
$successMessage = " Spectator password changed to: ' { $password } '! " ;
}
2014-02-13 14:21:25 +01:00
$this -> maniaControl -> client -> setServerPasswordForSpectator ( $password );
2013-11-24 23:55:54 +01:00
$this -> maniaControl -> chat -> sendSuccess ( $successMessage , $player -> login );
}
/**
* Handle //setmaxplayers command
*
2014-01-10 12:06:47 +01:00
* @ param array $chatCallback
2014-01-01 19:25:51 +01:00
* @ param Player $player
2013-11-24 23:55:54 +01:00
*/
public function command_SetMaxPlayers ( array $chatCallback , Player $player ) {
2014-01-31 16:55:01 +01:00
if ( ! $this -> maniaControl -> authenticationManager -> checkPermission ( $player , self :: SETTING_PERMISSION_CHANGE_SERVERSETTINGS )) {
2013-11-24 23:55:54 +01:00
$this -> maniaControl -> authenticationManager -> sendNotAllowed ( $player );
2013-12-05 00:30:10 +01:00
return ;
2013-11-24 23:55:54 +01:00
}
$messageParts = explode ( ' ' , $chatCallback [ 1 ][ 2 ], 2 );
2014-01-31 00:04:40 +01:00
if ( ! isset ( $messageParts [ 1 ])) {
2013-11-24 23:55:54 +01:00
$this -> maniaControl -> chat -> sendUsageInfo ( 'Usage example: //setmaxplayers 16' , $player -> login );
2013-12-05 00:30:10 +01:00
return ;
2013-11-24 23:55:54 +01:00
}
$amount = $messageParts [ 1 ];
2014-01-31 00:04:40 +01:00
if ( ! is_numeric ( $amount )) {
2013-11-24 23:55:54 +01:00
$this -> maniaControl -> chat -> sendUsageInfo ( 'Usage example: //setmaxplayers 16' , $player -> login );
2013-12-05 00:30:10 +01:00
return ;
2013-11-24 23:55:54 +01:00
}
2014-01-10 12:06:47 +01:00
$amount = ( int ) $amount ;
2014-01-31 00:04:40 +01:00
if ( $amount < 0 ) {
2013-11-24 23:55:54 +01:00
$amount = 0 ;
}
2014-01-20 20:51:03 +01:00
2014-02-13 14:21:25 +01:00
$this -> maniaControl -> client -> setMaxPlayers ( $amount );
2013-11-24 23:55:54 +01:00
$this -> maniaControl -> chat -> sendSuccess ( " Changed max players to: { $amount } " , $player -> login );
}
/**
* Handle //setmaxspectators command
*
2014-01-10 12:06:47 +01:00
* @ param array $chatCallback
2014-01-01 19:25:51 +01:00
* @ param Player $player
2013-11-24 23:55:54 +01:00
*/
public function command_SetMaxSpectators ( array $chatCallback , Player $player ) {
2014-01-31 16:55:01 +01:00
if ( ! $this -> maniaControl -> authenticationManager -> checkPermission ( $player , self :: SETTING_PERMISSION_CHANGE_SERVERSETTINGS )) {
2013-11-24 23:55:54 +01:00
$this -> maniaControl -> authenticationManager -> sendNotAllowed ( $player );
2013-12-05 00:30:10 +01:00
return ;
2013-11-24 23:55:54 +01:00
}
$messageParts = explode ( ' ' , $chatCallback [ 1 ][ 2 ], 2 );
2014-01-31 00:04:40 +01:00
if ( ! isset ( $messageParts [ 1 ])) {
2013-11-24 23:55:54 +01:00
$this -> maniaControl -> chat -> sendUsageInfo ( 'Usage example: //setmaxspectators 16' , $player -> login );
2013-12-05 00:30:10 +01:00
return ;
2013-11-24 23:55:54 +01:00
}
$amount = $messageParts [ 1 ];
2014-01-31 00:04:40 +01:00
if ( ! is_numeric ( $amount )) {
2013-11-24 23:55:54 +01:00
$this -> maniaControl -> chat -> sendUsageInfo ( 'Usage example: //setmaxspectators 16' , $player -> login );
2013-12-05 00:30:10 +01:00
return ;
2013-11-24 23:55:54 +01:00
}
2014-01-10 12:06:47 +01:00
$amount = ( int ) $amount ;
2014-01-31 00:04:40 +01:00
if ( $amount < 0 ) {
2013-11-24 23:55:54 +01:00
$amount = 0 ;
}
2014-01-20 20:51:03 +01:00
2014-02-13 14:21:25 +01:00
$this -> maniaControl -> client -> setMaxSpectators ( $amount );
2013-11-24 23:55:54 +01:00
$this -> maniaControl -> chat -> sendSuccess ( " Changed max spectators to: { $amount } " , $player -> login );
2013-12-05 00:30:10 +01:00
}
2013-11-19 20:29:37 +01:00
/**
* Perform server shutdown
*
2014-01-01 19:25:51 +01:00
* @ param string $login
2013-11-19 20:29:37 +01:00
*/
private function shutdownServer ( $login = '#' ) {
2014-02-13 14:21:25 +01:00
$this -> maniaControl -> client -> stopServer ();
2013-11-19 20:29:37 +01:00
$this -> maniaControl -> quit ( " Server shutdown requested by ' { $login } ' " );
}
}