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 ;
2014-05-24 16:39:12 +02:00
use ManiaControl\Callbacks\Callbacks ;
2017-04-13 20:46:23 +02:00
use ManiaControl\Callbacks\Structures\Common\StatusCallbackStructure ;
2017-05-08 22:42:43 +02:00
use ManiaControl\Callbacks\Structures\TrackMania\OnPointsRepartitionStructure ;
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-08-05 01:49:13 +02:00
use ManiaControl\Logger ;
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-05-13 17:59:37 +02:00
use Maniaplanet\DedicatedServer\Xmlrpc\GameModeException ;
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-05-02 17:50:30 +02:00
* @ author ManiaControl Team < mail @ maniacontrol . com >
2017-02-04 11:49:23 +01:00
* @ copyright 2014 - 2017 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-07-19 23:12:11 +02:00
class Commands implements CallbackListener , CommandListener , ManialinkPageAnswerListener , TimerListener {
2014-04-12 12:14:37 +02:00
/*
2014-01-10 00:18:15 +01:00
* Constants
*/
2017-05-08 22:42:43 +02:00
const ACTION_SET_PAUSE = 'ServerCommands.SetPause' ;
const ACTION_EXTEND_WARMUP = 'ServerCommands.ExtendWarmup' ;
const ACTION_END_WARMUP = 'ServerCommands.EndWarmup' ;
const ACTION_CANCEL_VOTE = 'ServerCommands.CancelVote' ;
const CB_VOTE_CANCELLED = 'ServerCommands.VoteCancelled' ;
const SETTING_PERMISSION_CANCEL_VOTE = 'Cancel Vote' ;
const SETTING_PERMISSION_SET_PAUSE = 'Set Pause' ;
const SETTING_PERMISSION_HANDLE_WARMUP = 'Handle Warmup' ;
const SETTING_PERMISSION_SHOW_SYSTEMINFO = 'Show SystemInfo' ;
const SETTING_PERMISSION_SHUTDOWN_SERVER = 'Shutdown Server' ;
const SETTING_PERMISSION_CHANGE_SERVERSETTINGS = 'Change ServerSettings' ;
2017-05-08 23:01:15 +02:00
const SETTING_PERMISSION_TM_HANDLE_POINTS_REPARTITION = 'Handle Points Distribution Settings' ;
2017-05-15 21:08:52 +02:00
const SETTING_PERMISSION_END_ROUND = 'Force end of current Trackmania Round' ;
2014-01-11 23:36:53 +01:00
2014-04-12 12:14:37 +02:00
/*
2014-07-25 16:28:47 +02:00
* Private properties
2013-11-19 20:29:37 +01:00
*/
2014-08-02 22:31:46 +02:00
/** @var ManiaControl $maniaControl */
2015-09-02 13:50:09 +02:00
private $maniaControl = null ;
private $serverShutdownTime = - 1 ;
2013-11-19 20:29:37 +01:00
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
2014-08-03 01:34:18 +02:00
// Callbacks
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getTimerManager () -> registerTimerListening ( $this , 'each5Seconds' , 5000 );
$this -> maniaControl -> getCallbackManager () -> registerCallbackListener ( Callbacks :: ONINIT , $this , 'handleOnInit' );
2017-04-13 20:46:23 +02:00
$this -> maniaControl -> getCallbackManager () -> registerCallbackListener ( Callbacks :: MP_WARMUP_STATUS , $this , 'handleWarmUpStatus' );
2014-08-03 01:34:18 +02:00
// Chat commands
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getCommandManager () -> registerCommandListener ( 'setservername' , $this , 'commandSetServerName' , true , 'Sets the ServerName.' );
$this -> maniaControl -> getCommandManager () -> registerCommandListener ( 'setpwd' , $this , 'commandSetPwd' , true , 'Sets play password.' );
$this -> maniaControl -> getCommandManager () -> registerCommandListener ( 'setspecpwd' , $this , 'commandSetSpecPwd' , true , 'Sets spectator password.' );
$this -> maniaControl -> getCommandManager () -> registerCommandListener ( 'setmaxplayers' , $this , 'commandSetMaxPlayers' , true , 'Sets the maximum number of players.' );
$this -> maniaControl -> getCommandManager () -> registerCommandListener ( 'setmaxspectators' , $this , 'commandSetMaxSpectators' , true , 'Sets the maximum number of spectators.' );
$this -> maniaControl -> getCommandManager () -> registerCommandListener ( 'shutdownserver' , $this , 'commandShutdownServer' , true , 'Shuts down the ManiaPlanet server.' );
$this -> maniaControl -> getCommandManager () -> registerCommandListener ( 'systeminfo' , $this , 'commandSystemInfo' , true , 'Shows system information.' );
$this -> maniaControl -> getCommandManager () -> registerCommandListener ( 'cancel' , $this , 'commandCancelVote' , true , 'Cancels the current vote.' );
2014-08-03 01:34:18 +02:00
// Page actions
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getManialinkManager () -> registerManialinkPageAnswerListener ( self :: ACTION_SET_PAUSE , $this , 'setPause' );
$this -> maniaControl -> getManialinkManager () -> registerManialinkPageAnswerListener ( self :: ACTION_EXTEND_WARMUP , $this , 'commandExtendWarmup' );
$this -> maniaControl -> getManialinkManager () -> registerManialinkPageAnswerListener ( self :: ACTION_END_WARMUP , $this , 'commandEndWarmup' );
$this -> maniaControl -> getManialinkManager () -> registerManialinkPageAnswerListener ( self :: ACTION_CANCEL_VOTE , $this , 'commandCancelVote' );
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-08-03 01:34:18 +02:00
// Permissions
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getAuthenticationManager () -> definePermissionLevel ( self :: SETTING_PERMISSION_SHUTDOWN_SERVER , AuthenticationManager :: AUTH_LEVEL_SUPERADMIN );
$this -> maniaControl -> getAuthenticationManager () -> definePermissionLevel ( self :: SETTING_PERMISSION_SHOW_SYSTEMINFO , AuthenticationManager :: AUTH_LEVEL_SUPERADMIN );
$this -> maniaControl -> getAuthenticationManager () -> definePermissionLevel ( self :: SETTING_PERMISSION_CHANGE_SERVERSETTINGS , AuthenticationManager :: AUTH_LEVEL_ADMIN );
$this -> maniaControl -> getAuthenticationManager () -> definePermissionLevel ( self :: SETTING_PERMISSION_SET_PAUSE , AuthenticationManager :: AUTH_LEVEL_MODERATOR );
$this -> maniaControl -> getAuthenticationManager () -> definePermissionLevel ( self :: SETTING_PERMISSION_CANCEL_VOTE , AuthenticationManager :: AUTH_LEVEL_MODERATOR );
$this -> maniaControl -> getAuthenticationManager () -> definePermissionLevel ( self :: SETTING_PERMISSION_HANDLE_WARMUP , AuthenticationManager :: AUTH_LEVEL_MODERATOR );
2014-01-31 16:55:01 +01:00
2017-04-13 22:59:41 +02:00
//Triggers a WarmUp Status Callback
2017-05-15 21:08:52 +02:00
try {
2017-05-13 11:57:21 +02:00
$this -> maniaControl -> getModeScriptEventManager () -> getWarmupStatus ();
2017-05-15 21:08:52 +02:00
} catch ( GameModeException $e ) {
2017-05-13 11:57:21 +02:00
$this -> maniaControl -> getChat () -> sendErrorToAdmins ( " Not in script mode " );
Logger :: logError ( " Not in Script mode " );
}
2017-04-13 22:59:41 +02:00
2014-07-19 23:29:20 +02:00
$this -> updateCancelVoteMenuItem ();
$this -> updateWarmUpMenuItems ();
2017-05-08 22:42:43 +02:00
if ( $this -> maniaControl -> getMapManager () -> getCurrentMap () -> getGame () === 'tm' ) {
$this -> maniaControl -> getAuthenticationManager () -> definePermissionLevel ( self :: SETTING_PERMISSION_TM_HANDLE_POINTS_REPARTITION , AuthenticationManager :: AUTH_LEVEL_SUPERADMIN );
2017-05-15 21:08:52 +02:00
$this -> maniaControl -> getAuthenticationManager () -> definePermissionLevel ( self :: SETTING_PERMISSION_END_ROUND , AuthenticationManager :: AUTH_LEVEL_MODERATOR );
2017-05-08 22:42:43 +02:00
2017-05-14 11:22:19 +02:00
$this -> maniaControl -> getCommandManager () -> registerCommandListener ( 'setpointsdistribution' , $this , 'commandSetPointsRepartition' , true , 'Sets the Rounds Point Repartition.' );
$this -> maniaControl -> getCommandManager () -> registerCommandListener ( 'getpointsdistribution' , $this , 'commandGetPointsRepartition' , true , 'Gets the Rounds Point Repartition.' );
2017-05-15 21:08:52 +02:00
$this -> maniaControl -> getCommandManager () -> registerCommandListener ( array ( 'endround' , 'end' ), $this , 'commandTrackManiaEndRound' , true , 'Ends the Current Round.' );
2017-05-08 22:42:43 +02:00
}
2014-07-19 23:29:20 +02:00
}
2014-01-31 20:12:01 +01:00
2014-07-19 23:29:20 +02:00
/**
* Add the cancel vote menu item
*/
private function updateCancelVoteMenuItem () {
2014-01-10 13:28:48 +01:00
$itemQuad = new Quad_Icons64x64_1 ();
$itemQuad -> setSubStyle ( $itemQuad :: SUBSTYLE_ArrowRed );
$itemQuad -> setAction ( self :: ACTION_CANCEL_VOTE );
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getActionsMenu () -> addMenuItem ( $itemQuad , false , 30 , 'Cancel Vote' );
2014-07-19 23:29:20 +02:00
}
2014-02-13 00:26:18 +01:00
2014-07-19 23:29:20 +02:00
/**
* Manage the WarmUp related menu items
*/
private function updateWarmUpMenuItems () {
// Add pause menu item
2017-04-13 20:46:23 +02:00
if ( $this -> maniaControl -> getServer () -> getScriptManager () -> modeUsesPause ()) {
2014-02-13 00:26:18 +01:00
$itemQuad = new Quad_Icons128x32_1 ();
$itemQuad -> setSubStyle ( $itemQuad :: SUBSTYLE_ManiaLinkSwitch );
$itemQuad -> setAction ( self :: ACTION_SET_PAUSE );
2017-04-19 19:37:36 +02:00
$this -> maniaControl -> getActionsMenu () -> addAdminMenuItem ( $itemQuad , 32 , 'Pause the current game' );
2014-02-13 00:26:18 +01:00
}
2014-07-19 23:29:20 +02:00
2014-01-10 13:28:48 +01:00
}
2017-05-08 22:42:43 +02:00
2014-07-04 18:25:09 +02:00
/**
2014-07-19 23:29:20 +02:00
* Handle the WarmupStatus Callback , and removes or adds the Menu Items for extending / Stopping warmup
2014-07-04 18:25:09 +02:00
*
2017-04-13 22:59:41 +02:00
* @ param \ManiaControl\Callbacks\Structures\Common\StatusCallbackStructure $structure
2014-07-04 18:25:09 +02:00
*/
2017-04-13 20:46:23 +02:00
public function handleWarmUpStatus ( StatusCallbackStructure $structure ) {
if ( $structure -> isAvailable ()) {
2014-07-19 23:29:20 +02:00
// Extend WarmUp menu item
2014-07-04 18:25:09 +02:00
$itemQuad = new Quad_BgRaceScore2 ();
$itemQuad -> setSubStyle ( $itemQuad :: SUBSTYLE_SendScore );
$itemQuad -> setAction ( self :: ACTION_EXTEND_WARMUP );
2017-04-19 19:37:36 +02:00
$this -> maniaControl -> getActionsMenu () -> addMenuItem ( $itemQuad , false , 22 , 'Extend Warmup' );
2014-07-04 18:25:09 +02:00
2014-07-19 23:29:20 +02:00
// Stop WarmUp menu item
2014-07-04 18:25:09 +02:00
$itemQuad = new Quad_Icons64x64_1 ();
$itemQuad -> setSubStyle ( $itemQuad :: SUBSTYLE_ArrowGreen );
$itemQuad -> setAction ( self :: ACTION_END_WARMUP );
2017-04-19 19:37:36 +02:00
$this -> maniaControl -> getActionsMenu () -> addMenuItem ( $itemQuad , false , 24 , 'End Warmup' );
2014-07-04 18:25:09 +02:00
} else {
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getActionsMenu () -> removeMenuItem ( 14 , false );
$this -> maniaControl -> getActionsMenu () -> removeMenuItem ( 15 , false );
2014-07-04 18:25:09 +02: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
*/
2014-07-19 23:29:20 +02:00
public function commandCancelVote ( array $chatCallback , Player $player ) {
2015-09-02 13:50:09 +02:00
if ( ! $this -> maniaControl -> getAuthenticationManager () -> checkPermission ( $player , self :: SETTING_PERMISSION_CANCEL_VOTE )) {
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getAuthenticationManager () -> sendNotAllowed ( $player );
2014-01-10 13:28:48 +01:00
return ;
}
2014-01-16 19:49:36 +01:00
2015-09-02 13:50:09 +02:00
if ( $this -> maniaControl -> getClient () -> cancelVote ()) {
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getChat () -> sendInformation ( $player -> getEscapedNickname () . ' cancelled the Vote!' );
2014-07-19 23:29:20 +02:00
} else {
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getChat () -> sendInformation ( " There's no vote running currently! " , $player );
2014-07-19 23:29:20 +02:00
}
2014-07-27 22:27:39 +02:00
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getCallbackManager () -> triggerCallback ( self :: CB_VOTE_CANCELLED , $player );
2014-01-10 00:18:15 +01:00
}
2014-01-31 20:12:01 +01:00
/**
2014-07-19 23:29:20 +02:00
* Extend the WarmUp
2014-01-31 20:12:01 +01:00
*
* @ param array $callback
* @ param Player $player
*/
2014-07-19 23:29:20 +02:00
public function commandExtendWarmup ( array $callback , Player $player ) {
2015-09-02 13:50:09 +02:00
if ( ! $this -> maniaControl -> getAuthenticationManager () -> checkPermission ( $player , self :: SETTING_PERMISSION_HANDLE_WARMUP )) {
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getAuthenticationManager () -> sendNotAllowed ( $player );
2014-01-31 20:12:01 +01:00
return ;
}
2017-04-13 20:46:23 +02:00
//TODO command paprameter for seconds
$this -> maniaControl -> getModeScriptEventManager () -> extendManiaPlanetWarmup ( 10 );
$this -> maniaControl -> getChat () -> sendInformation ( $player -> getEscapedNickname () . ' extended the WarmUp by 10 seconds!' );
2014-01-31 20:12:01 +01:00
}
/**
2014-07-19 23:29:20 +02:00
* End the WarmUp
2014-01-31 20:12:01 +01:00
*
* @ param array $callback
* @ param Player $player
*/
2014-07-19 23:29:20 +02:00
public function commandEndWarmup ( array $callback , Player $player ) {
2015-09-02 13:50:09 +02:00
if ( ! $this -> maniaControl -> getAuthenticationManager () -> checkPermission ( $player , self :: SETTING_PERMISSION_HANDLE_WARMUP )) {
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getAuthenticationManager () -> sendNotAllowed ( $player );
2014-01-31 20:12:01 +01:00
return ;
}
2017-04-08 15:06:14 +02:00
$this -> maniaControl -> getModeScriptEventManager () -> stopManiaPlanetWarmup ();
2017-04-13 20:46:23 +02:00
$this -> maniaControl -> getChat () -> sendInformation ( $player -> getEscapedNickname () . ' stopped the WarmUp!' );
2014-01-31 20:12:01 +01:00
}
2014-01-10 00:18:15 +01:00
/**
2014-05-02 16:13:45 +02:00
* Pause the current game
2014-01-10 12:06:47 +01:00
*
2014-05-02 17:50:30 +02:00
* @ param array $callback
2014-05-02 16:13:45 +02:00
* @ param Player $player
2014-01-10 00:18:15 +01:00
*/
2014-01-31 16:55:01 +01:00
public function setPause ( array $callback , Player $player ) {
2015-09-02 13:50:09 +02:00
if ( ! $this -> maniaControl -> getAuthenticationManager () -> checkPermission ( $player , self :: SETTING_PERMISSION_SET_PAUSE )) {
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getAuthenticationManager () -> sendNotAllowed ( $player );
2014-01-31 16:55:01 +01:00
return ;
2014-01-10 12:06:47 +01:00
}
2015-09-02 13:50:09 +02:00
//Normal Gamemodes
2014-01-31 16:55:01 +01:00
try {
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getClient () -> sendModeScriptCommands ( array ( 'Command_ForceWarmUp' => true ));
$this -> maniaControl -> getChat () -> sendInformation ( $player -> getEscapedNickname () . ' paused the Game!' );
2014-05-13 17:59:37 +02:00
} catch ( GameModeException $e ) {
2014-01-31 16:55:01 +01:00
}
2015-09-02 13:50:09 +02:00
try {
//Chase and Combo?
$this -> maniaControl -> getClient () -> sendModeScriptCommands ( array ( 'Command_SetPause' => true ));
$this -> maniaControl -> getChat () -> sendInformation ( $player -> getEscapedNickname () . ' paused the Game!' );
//Especially for chase, force end of the round to reach a draw
$this -> maniaControl -> getClient () -> sendModeScriptCommands ( array ( 'Command_ForceEndRound' => true ));
} catch ( GameModeException $ex ) {
}
2017-04-13 20:46:23 +02:00
//TODO verify if not everything is replaced through the new pause
$this -> maniaControl -> getModeScriptEventManager () -> startPause ();
$this -> maniaControl -> getChat () -> sendInformation ( '$f8fVote to $fffpause the current Game$f8f has been successful!' );
2013-11-19 20:29:37 +01:00
}
/**
2014-05-13 16:40:05 +02:00
* Check Stuff each 5 Seconds
2013-11-19 20:29:37 +01:00
*/
2014-05-13 16:40:05 +02:00
public function each5Seconds () {
2014-07-19 23:29:20 +02:00
// TODO: move empty & delayed shutdown code into server class
2013-11-19 20:29:37 +01:00
// Empty shutdown
2014-01-31 00:04:40 +01:00
if ( $this -> serverShutdownEmpty ) {
2015-09-02 13:50:09 +02:00
if ( $this -> maniaControl -> getPlayerManager () -> getPlayerCount ( false ) <= 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
}
}
}
2014-05-02 17:50:30 +02:00
/**
* Perform server shutdown
*
* @ param string $login
*/
2014-06-20 16:34:19 +02:00
private function shutdownServer ( $login = '-' ) {
2014-08-05 01:49:13 +02:00
Logger :: logInfo ( " Server shutdown requested by ' { $login } '! " );
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getClient () -> stopServer ();
2014-05-02 17:50:30 +02:00
}
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
*/
2014-07-19 23:29:20 +02:00
public function commandSystemInfo ( array $chat , Player $player ) {
2015-09-02 13:50:09 +02:00
if ( ! $this -> maniaControl -> getAuthenticationManager () -> checkPermission ( $player , self :: SETTING_PERMISSION_SHOW_SYSTEMINFO )) {
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getAuthenticationManager () -> sendNotAllowed ( $player );
2013-12-05 00:30:10 +01:00
return ;
2013-11-19 20:29:37 +01:00
}
2014-08-13 11:05:52 +02:00
$systemInfo = $this -> maniaControl -> getClient () -> 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 . '.' ;
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getChat () -> 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
*/
2014-07-19 23:29:20 +02:00
public function commandShutdownServer ( array $chat , Player $player ) {
2015-09-02 13:50:09 +02:00
if ( ! $this -> maniaControl -> getAuthenticationManager () -> checkPermission ( $player , self :: SETTING_PERMISSION_SHUTDOWN_SERVER )) {
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getAuthenticationManager () -> 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-06-14 14:32:29 +02:00
if ( strtolower ( $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 ) {
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getChat () -> sendInformation ( " The server will shutdown as soon as it's empty! " , $player );
2013-12-05 00:30:10 +01:00
return ;
2013-11-19 20:29:37 +01:00
}
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getChat () -> sendInformation ( " Empty-shutdown cancelled! " , $player );
2013-12-05 00:30:10 +01:00
return ;
2013-11-19 20:29:37 +01:00
}
2015-09-02 13:50:09 +02: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 ;
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getChat () -> sendInformation ( " Delayed shutdown cancelled! " , $player );
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. ;
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getChat () -> sendInformation ( " The server will shut down in { $delay } minutes! " , $player );
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
*/
2014-07-19 23:29:20 +02:00
public function commandSetServerName ( array $chat , Player $player ) {
2015-09-02 13:50:09 +02:00
if ( ! $this -> maniaControl -> getAuthenticationManager () -> checkPermission ( $player , self :: SETTING_PERMISSION_CHANGE_SERVERSETTINGS )) {
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getAuthenticationManager () -> 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 ) {
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getChat () -> sendUsageInfo ( 'Usage example: //setservername ManiaPlanet Server' , $player );
2013-12-05 00:30:10 +01:00
return ;
2013-11-19 20:29:37 +01:00
}
$serverName = $params [ 1 ];
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getClient () -> setServerName ( $serverName );
$this -> maniaControl -> getChat () -> sendSuccess ( " Server name changed to: ' { $serverName } '! " , $player );
2013-11-24 23:55:54 +01:00
}
/**
* 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
*/
2014-07-19 23:29:20 +02:00
public function commandSetPwd ( array $chatCallback , Player $player ) {
2015-09-02 13:50:09 +02:00
if ( ! $this -> maniaControl -> getAuthenticationManager () -> checkPermission ( $player , self :: SETTING_PERMISSION_CHANGE_SERVERSETTINGS )) {
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getAuthenticationManager () -> 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-08-13 11:05:52 +02:00
$this -> maniaControl -> getClient () -> setServerPassword ( $password );
$this -> maniaControl -> getChat () -> sendSuccess ( $successMessage , $player );
2013-11-24 23:55:54 +01:00
}
/**
* 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
*/
2014-07-19 23:29:20 +02:00
public function commandSetSpecPwd ( array $chatCallback , Player $player ) {
2015-09-02 13:50:09 +02:00
if ( ! $this -> maniaControl -> getAuthenticationManager () -> checkPermission ( $player , self :: SETTING_PERMISSION_CHANGE_SERVERSETTINGS )) {
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getAuthenticationManager () -> 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-08-13 11:05:52 +02:00
$this -> maniaControl -> getClient () -> setServerPasswordForSpectator ( $password );
$this -> maniaControl -> getChat () -> sendSuccess ( $successMessage , $player );
2013-11-24 23:55:54 +01:00
}
/**
* 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
*/
2014-07-19 23:29:20 +02:00
public function commandSetMaxPlayers ( array $chatCallback , Player $player ) {
2015-09-02 13:50:09 +02:00
if ( ! $this -> maniaControl -> getAuthenticationManager () -> checkPermission ( $player , self :: SETTING_PERMISSION_CHANGE_SERVERSETTINGS )) {
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getAuthenticationManager () -> 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 ])) {
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getChat () -> sendUsageInfo ( 'Usage example: //setmaxplayers 16' , $player );
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 )) {
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getChat () -> sendUsageInfo ( 'Usage example: //setmaxplayers 16' , $player );
2013-12-05 00:30:10 +01:00
return ;
2013-11-24 23:55:54 +01:00
}
2015-09-02 13:50:09 +02: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-08-13 11:05:52 +02:00
$this -> maniaControl -> getClient () -> setMaxPlayers ( $amount );
$this -> maniaControl -> getChat () -> sendSuccess ( " Changed max players to: { $amount } " , $player );
2013-11-24 23:55:54 +01:00
}
/**
* 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
*/
2014-07-19 23:29:20 +02:00
public function commandSetMaxSpectators ( array $chatCallback , Player $player ) {
2015-09-02 13:50:09 +02:00
if ( ! $this -> maniaControl -> getAuthenticationManager () -> checkPermission ( $player , self :: SETTING_PERMISSION_CHANGE_SERVERSETTINGS )) {
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getAuthenticationManager () -> 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 ])) {
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getChat () -> sendUsageInfo ( 'Usage example: //setmaxspectators 16' , $player );
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 )) {
2014-08-13 11:05:52 +02:00
$this -> maniaControl -> getChat () -> sendUsageInfo ( 'Usage example: //setmaxspectators 16' , $player );
2013-12-05 00:30:10 +01:00
return ;
2013-11-24 23:55:54 +01:00
}
2015-09-02 13:50:09 +02: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-08-13 11:05:52 +02:00
$this -> maniaControl -> getClient () -> setMaxSpectators ( $amount );
$this -> maniaControl -> getChat () -> sendSuccess ( " Changed max spectators to: { $amount } " , $player );
2013-12-05 00:30:10 +01:00
}
2017-05-08 22:42:43 +02:00
/**
* Handle //setpointsrepartition command
*
* @ param array $chatCallback
* @ param \ManiaControl\Players\Player $player
*/
public function commandSetPointsRepartition ( array $chatCallback , Player $player ) {
if ( ! $this -> maniaControl -> getAuthenticationManager () -> checkPermission ( $player , self :: SETTING_PERMISSION_TM_HANDLE_POINTS_REPARTITION )) {
$this -> maniaControl -> getAuthenticationManager () -> sendNotAllowed ( $player );
return ;
}
// Check for delayed shutdown
$params = explode ( ' ' , $chatCallback [ 1 ][ 2 ]);
if ( count ( $params ) >= 1 ) {
$pointString = $params [ 1 ];
$pointArray = explode ( ',' , $pointString );
$this -> maniaControl -> getModeScriptEventManager () -> setTrackmaniaPointsRepartition ( $pointArray );
2017-05-08 23:28:37 +02:00
$this -> maniaControl -> getChat () -> sendInformation ( 'Points Distribution Changed!' , $player );
2017-05-08 22:42:43 +02:00
$this -> commandGetPointsRepartition ( $chatCallback , $player );
} else {
2017-05-08 23:28:37 +02:00
$this -> maniaControl -> getChat () -> sendError ( 'You must provide a point Distribution in the following form: 10,8,6,4,3 !' , $player );
2017-05-08 22:42:43 +02:00
}
}
/**
* Handle //getpointsrepartition command
*
* @ param array $chatCallback
* @ param \ManiaControl\Players\Player $player
*/
public function commandGetPointsRepartition ( array $chatCallback , Player $player ) {
if ( ! $this -> maniaControl -> getAuthenticationManager () -> checkPermission ( $player , self :: SETTING_PERMISSION_TM_HANDLE_POINTS_REPARTITION )) {
$this -> maniaControl -> getAuthenticationManager () -> sendNotAllowed ( $player );
return ;
}
2017-05-15 21:08:52 +02:00
$this -> maniaControl -> getModeScriptEventManager () -> getTrackmaniaPointsRepartition () -> setCallable ( function ( OnPointsRepartitionStructure $structure ) use ( $player ) {
2017-05-08 22:42:43 +02:00
$pointRepartitionString = " " ;
foreach ( $structure -> getPointsRepartition () as $points ) {
$pointRepartitionString .= $points . ',' ;
}
$pointRepartitionString = substr ( $pointRepartitionString , 0 , - 1 );
2017-05-08 23:28:37 +02:00
$this -> maniaControl -> getChat () -> sendInformation ( 'Current Points Distribution: ' . $pointRepartitionString , $player );
2017-05-08 22:42:43 +02:00
});
2017-05-15 21:08:52 +02:00
}
/**
* Handle //endround command
*
* @ param array $chatCallback
* @ param \ManiaControl\Players\Player $player
*/
public function commandTrackManiaEndRound ( array $chatCallback , Player $player ) {
2017-05-15 21:09:11 +02:00
if ( ! $this -> maniaControl -> getAuthenticationManager () -> checkPermission ( $player , self :: SETTING_PERMISSION_END_ROUND )) {
2017-05-15 21:08:52 +02:00
$this -> maniaControl -> getAuthenticationManager () -> sendNotAllowed ( $player );
return ;
}
2017-05-08 22:42:43 +02:00
2017-05-15 21:08:52 +02:00
$this -> maniaControl -> getModeScriptEventManager () -> forceTrackmaniaRoundEnd ();
$this -> maniaControl -> getChat () -> sendSuccess ( $player -> getEscapedNickname () . ' forced end of the Round!' );
2017-05-08 22:42:43 +02:00
}
2013-11-19 20:29:37 +01:00
}