From e0290b6947a59604c80c0985e05d640690672b66 Mon Sep 17 00:00:00 2001 From: kremsy Date: Wed, 17 May 2017 12:18:15 +0200 Subject: [PATCH] deploy first version of Trackmania Rounds Plugin --- core/Admin/AuthenticationManager.php | 5 +- core/Script/ModeScriptEventManager.php | 25 +++ core/Server/Commands.php | 55 ------- plugins/MCTeam/TrackmaniaRoundsPlugin.php | 178 ++++++++++++++++++++++ 4 files changed, 206 insertions(+), 57 deletions(-) create mode 100644 plugins/MCTeam/TrackmaniaRoundsPlugin.php diff --git a/core/Admin/AuthenticationManager.php b/core/Admin/AuthenticationManager.php index 6fc07393..c72e02bf 100644 --- a/core/Admin/AuthenticationManager.php +++ b/core/Admin/AuthenticationManager.php @@ -429,16 +429,17 @@ class AuthenticationManager implements CallbackListener, EchoListener, Communica * @param int $authLevelNeeded */ public function definePermissionLevel($rightName, $authLevelNeeded) { - $this->maniaControl->getSettingManager()->initSetting($this, $rightName, $this->getPermissionLevelNameArray($authLevelNeeded)); + $this->maniaControl->getSettingManager()->initSetting($this, $rightName, self::getPermissionLevelNameArray($authLevelNeeded)); } /** * Get the PermissionLevelNameArray * + * @api * @param $authLevelNeeded * @return array[] */ - private function getPermissionLevelNameArray($authLevelNeeded) { + public static function getPermissionLevelNameArray($authLevelNeeded) { switch ($authLevelNeeded) { case self::AUTH_LEVEL_MODERATOR: return array(self::AUTH_NAME_MODERATOR, self::AUTH_NAME_ADMIN, self::AUTH_NAME_SUPERADMIN, self::AUTH_NAME_MASTERADMIN); diff --git a/core/Script/ModeScriptEventManager.php b/core/Script/ModeScriptEventManager.php index 5b3746a0..1304a122 100644 --- a/core/Script/ModeScriptEventManager.php +++ b/core/Script/ModeScriptEventManager.php @@ -474,6 +474,31 @@ class ModeScriptEventManager implements UsageInformationAble { $this->triggerModeScriptEvent('Trackmania.SetPointsRepartition', $pointArray); } + /** + * Sets the Trackmania Player Points + * + * @param \ManiaControl\Players\Player $player + * @param string|int $roundPoints //< The round points, use an empty string to not update. + * @param string|int $mapPoints //< The map points, use an empty string to not update. + * @param string|int $matchPoints //< The match points, use an empty string to not update. + */ + public function setTrackmaniaPlayerPoints(Player $player, $roundPoints = "", $mapPoints = "", $matchPoints = "") { + $login = Player::parseLogin($player); + $this->triggerModeScriptEvent('Trackmania.SetPlayerPoints', array($login, strval($roundPoints), strval($mapPoints), strval($matchPoints))); + } + + /** + * Sets the Trackmania Team Points + * + * @param int $teamId //< Id of the team t. Can be 1 or 2. + * @param string|int $roundPoints + * @param string|int $mapPoints + * @param string|int $matchPoints + */ + public function setTrackmaniaTeamPoints($teamId, $roundPoints = "", $mapPoints = "", $matchPoints = "") { + $this->triggerModeScriptEvent('Trackmania.SetTeamPoints', array(strval($teamId), strval($roundPoints), strval($mapPoints), strval($matchPoints))); + } + /** * Request the current ui properties. This method will trigger the "Shootmania.UIProperties" callback. * diff --git a/core/Server/Commands.php b/core/Server/Commands.php index 66d6bf08..60b1e4b2 100644 --- a/core/Server/Commands.php +++ b/core/Server/Commands.php @@ -40,7 +40,6 @@ class Commands implements CallbackListener, CommandListener, ManialinkPageAnswer const SETTING_PERMISSION_SHOW_SYSTEMINFO = 'Show SystemInfo'; const SETTING_PERMISSION_SHUTDOWN_SERVER = 'Shutdown Server'; const SETTING_PERMISSION_CHANGE_SERVERSETTINGS = 'Change ServerSettings'; - const SETTING_PERMISSION_TM_HANDLE_POINTS_REPARTITION = 'Handle Points Distribution Settings'; const SETTING_PERMISSION_END_ROUND = 'Force end of current Trackmania Round'; /* @@ -106,12 +105,7 @@ class Commands implements CallbackListener, CommandListener, ManialinkPageAnswer $this->updateWarmUpMenuItems(); if ($this->maniaControl->getMapManager()->getCurrentMap()->getGame() === 'tm') { - $this->maniaControl->getAuthenticationManager()->definePermissionLevel(self::SETTING_PERMISSION_TM_HANDLE_POINTS_REPARTITION, AuthenticationManager::AUTH_LEVEL_SUPERADMIN); $this->maniaControl->getAuthenticationManager()->definePermissionLevel(self::SETTING_PERMISSION_END_ROUND, AuthenticationManager::AUTH_LEVEL_MODERATOR); - - $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.'); - $this->maniaControl->getCommandManager()->registerCommandListener(array('endround', 'end'), $this, 'commandTrackManiaEndRound', true, 'Ends the Current Round.'); } } @@ -466,55 +460,6 @@ class Commands implements CallbackListener, CommandListener, ManialinkPageAnswer $this->maniaControl->getChat()->sendSuccess("Changed max spectators to: {$amount}", $player); } - /** - * 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); - $this->maniaControl->getChat()->sendInformation('Points Distribution Changed!', $player); - $this->commandGetPointsRepartition($chatCallback, $player); - } else { - $this->maniaControl->getChat()->sendError('You must provide a point Distribution in the following form: 10,8,6,4,3 !', $player); - } - - } - - /** - * 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; - } - - $this->maniaControl->getModeScriptEventManager()->getTrackmaniaPointsRepartition()->setCallable(function (OnPointsRepartitionStructure $structure) use ($player) { - $pointRepartitionString = ""; - foreach ($structure->getPointsRepartition() as $points) { - $pointRepartitionString .= $points . ','; - } - $pointRepartitionString = substr($pointRepartitionString, 0, -1); - - $this->maniaControl->getChat()->sendInformation('Current Points Distribution: ' . $pointRepartitionString, $player); - }); - } - /** * Handle //endround command * diff --git a/plugins/MCTeam/TrackmaniaRoundsPlugin.php b/plugins/MCTeam/TrackmaniaRoundsPlugin.php new file mode 100644 index 00000000..b3f753fa --- /dev/null +++ b/plugins/MCTeam/TrackmaniaRoundsPlugin.php @@ -0,0 +1,178 @@ + + * @copyright 2014-2017 ManiaControl Team + * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3 + */ +class TrackmaniaRoundsPlugin implements Plugin, CommandListener { + /* + * Constants + */ + const PLUGIN_ID = 6; + const PLUGIN_VERSION = 0.1; + const PLUGIN_NAME = 'Trackmania Rounds Plugin'; + const PLUGIN_AUTHOR = 'MCTeam'; + + const MAX_POINT_DISTRIBUTIONS = 8; + + const SETTING_PERMISSION_TM_HANDLE_POINTS_REPARTITION = 'Handle Points Distribution Settings'; + const SETTING_POINT_DISTRIBUTION_NAME = 'Server Distribution Name '; + const SETTING_POINT_DISTRIBUTION_VALUE = 'Server Distribution Value '; + + /* + * Private properties + */ + /** @var ManiaControl $maniaControl * */ + private $maniaControl = null; + + + /** + * @see \ManiaControl\Plugins\Plugin::prepare() + */ + public static function prepare(ManiaControl $maniaControl) { + } + + /** + * @see \ManiaControl\Plugins\Plugin::load() + */ + public function load(ManiaControl $maniaControl) { + $this->maniaControl = $maniaControl; + + //Authentication Permission Level + $this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_PERMISSION_TM_HANDLE_POINTS_REPARTITION, AuthenticationManager::getPermissionLevelNameArray(AuthenticationManager::AUTH_LEVEL_ADMIN)); + + //Settings + $this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_POINT_DISTRIBUTION_NAME . 1, "motogp"); + $this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_POINT_DISTRIBUTION_VALUE . 1, "25,20,16,13,11,10,9,8,7,6,5,4,3,2,1,1,1,1,1"); + + for ($i = 2; $i <= self::MAX_POINT_DISTRIBUTIONS; $i++) { + $this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_POINT_DISTRIBUTION_NAME . $i, "distribution " . $i); + $this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_POINT_DISTRIBUTION_VALUE . $i, ""); + } + + // Commands + $this->maniaControl->getCommandManager()->registerCommandListener(array('setrpoints', + 'setpointsdistribution'), $this, 'commandSetPointsRepartition', true, 'Sets the Rounds Point Repartition.'); + $this->maniaControl->getCommandManager()->registerCommandListener(array('getrpoints', + 'getpointsdistribution'), $this, 'commandGetPointsRepartition', true, 'Gets the Rounds Point Repartition.'); + } + + /** + * Handle //setpointsrepartition command + * + * @param array $chatCallback + * @param \ManiaControl\Players\Player $player + */ + public function commandSetPointsRepartition(array $chatCallback, Player $player) { + $permission = $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_PERMISSION_TM_HANDLE_POINTS_REPARTITION); + if (!AuthenticationManager::checkRight($player, $permission)) { + $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); + + if (count($pointArray) > 0) { + for ($i = 1; $i <= self::MAX_POINT_DISTRIBUTIONS; $i++) { + $name = $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_POINT_DISTRIBUTION_NAME . $i); + + if ($name == $pointString) { + $pointString = $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_POINT_DISTRIBUTION_VALUE . $i); + $pointArray = explode(',', $pointString); + break; + } + } + } + + $this->maniaControl->getModeScriptEventManager()->setTrackmaniaPointsRepartition($pointArray); + $this->maniaControl->getChat()->sendInformation('Points Distribution Changed!', $player); + $this->commandGetPointsRepartition($chatCallback, $player); + } else { + $this->maniaControl->getChat()->sendError('You must provide a point Distribution in the following form: 10,8,6,4,3 !', $player); + } + + } + + /** + * Handle //getpointsrepartition command + * + * @param array $chatCallback + * @param \ManiaControl\Players\Player $player + */ + public function commandGetPointsRepartition(array $chatCallback, Player $player) { + $permission = $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_PERMISSION_TM_HANDLE_POINTS_REPARTITION); + if (!AuthenticationManager::checkRight($player, $permission)) { + $this->maniaControl->getAuthenticationManager()->sendNotAllowed($player); + return; + } + + $this->maniaControl->getModeScriptEventManager()->getTrackmaniaPointsRepartition()->setCallable(function (OnPointsRepartitionStructure $structure) use ($player) { + $pointRepartitionString = ""; + foreach ($structure->getPointsRepartition() as $points) { + $pointRepartitionString .= $points . ','; + } + $pointRepartitionString = substr($pointRepartitionString, 0, -1); + + $this->maniaControl->getChat()->sendInformation('Current Points Distribution: ' . $pointRepartitionString, $player); + }); + } + + /** + * @see \ManiaControl\Plugins\Plugin::getId() + */ + public static function getId() { + return self::PLUGIN_ID; + } + + /** + * @see \ManiaControl\Plugins\Plugin::getName() + */ + public static function getName() { + return self::PLUGIN_NAME; + } + + /** + * @see \ManiaControl\Plugins\Plugin::getVersion() + */ + public static function getVersion() { + return self::PLUGIN_VERSION; + } + + /** + * @see \ManiaControl\Plugins\Plugin::getAuthor() + */ + public static function getAuthor() { + return self::PLUGIN_AUTHOR; + } + + /** + * @see \ManiaControl\Plugins\Plugin::getDescription() + */ + public static function getDescription() { + return "Plugin offers simple functionalites for Trackmania Round, Team and Cup Modes"; + } + + + /** + * @see \ManiaControl\Plugins\Plugin::unload() + */ + public function unload() { + } + +}