New //showmode command, which shows all available presets

This commit is contained in:
Alexander Nell 2020-05-22 16:55:05 +02:00
parent 2c9ea14b78
commit 74d94ea6dc
1 changed files with 42 additions and 14 deletions

View File

@ -22,7 +22,7 @@ class GameModePresetsPlugin implements Plugin, CommandListener, TimerListener {
* Constants
*/
const PLUGIN_ID = 9;
const PLUGIN_VERSION = 0.1;
const PLUGIN_VERSION = 0.11;
const PLUGIN_NAME = 'GameMode Presets Plugin';
const PLUGIN_AUTHOR = 'MCTeam';
@ -63,14 +63,12 @@ class GameModePresetsPlugin implements Plugin, CommandListener, TimerListener {
$this->maniaControl->getAuthenticationManager()->definePluginPermissionLevel(
$this,
self::SETTING_PERMISSION_LOAD_GAMEMODE_PRESET,
AuthenticationManager::AUTH_LEVEL_ADMIN,
AuthenticationManager::AUTH_LEVEL_MODERATOR
AuthenticationManager::AUTH_LEVEL_ADMIN
);
$this->maniaControl->getAuthenticationManager()->definePluginPermissionLevel(
$this,
self::SETTING_PERMISSION_SAVE_GAMEMODE_PRESET,
AuthenticationManager::AUTH_LEVEL_SUPERADMIN,
AuthenticationManager::AUTH_LEVEL_MODERATOR
AuthenticationManager::AUTH_LEVEL_SUPERADMIN
);
// Settings
@ -92,6 +90,7 @@ class GameModePresetsPlugin implements Plugin, CommandListener, TimerListener {
// Commands
$this->maniaControl->getCommandManager()->registerCommandListener(array('loadmode', 'modeload'), $this, 'commandLoadMode', true, 'Loads the mode settings from the given preset name.');
$this->maniaControl->getCommandManager()->registerCommandListener(array('savemode', 'modesave'), $this, 'commandSaveMode', true, 'Saves the mode settings under the given preset name.');
$this->maniaControl->getCommandManager()->registerCommandListener(array('showmode', 'modeshow'), $this, 'commandSaveMode', true, 'Shows the available game mode presets.');
$this->initTables();
}
@ -134,7 +133,7 @@ class GameModePresetsPlugin implements Plugin, CommandListener, TimerListener {
$statement->bind_param('s', $name);
$statement->execute();
if ($statement->error) {
trigger_error($statement->error);
trigger_error($statement->error, E_USER_ERROR);
$statement->close();
return null;
}
@ -181,7 +180,7 @@ class GameModePresetsPlugin implements Plugin, CommandListener, TimerListener {
$statement->bind_param('ss', $name, $settings);
$statement->execute();
if ($statement->error) {
trigger_error($statement->error);
trigger_error($statement->error, E_USER_ERROR);
return false;
}
@ -243,7 +242,6 @@ class GameModePresetsPlugin implements Plugin, CommandListener, TimerListener {
return;
}
// Check for delayed shutdown
$params = explode(' ', $chatCallback[1][2]);
if (count($params) < 2) {
$this->maniaControl->getChat()->sendError('You must provide a gamemode preset name to load settings from!', $player);
@ -256,7 +254,7 @@ class GameModePresetsPlugin implements Plugin, CommandListener, TimerListener {
$presetName = strtolower($params[1]);
$presetSettings = $this->fetchPreset($presetName);
if (!$presetSettings) {
$this->maniaControl->getChat()->sendError('The gamemode preset $<$fff' . $presetName . '$> does not exist!', $player);
$this->maniaControl->getChat()->sendError('The gamemode preset $<$g$z$fff' . $presetName . '$> does not exist, use $<$g$z$fff//showmode$> to see the available presets!', $player);
return;
}
@ -282,8 +280,9 @@ class GameModePresetsPlugin implements Plugin, CommandListener, TimerListener {
$this->maniaControl->getChat()->sendError('Unable to load gamemode preset $<$fff' . $presetName . '$>!', $player);
return;
}
$this->maniaControl->getChat()->sendSuccess($player->getEscapedNickname() . ' loaded gamemode preset $<$fff' . $presetName . '$>!');
$authLevel = AuthenticationManager::getAuthLevelInt($this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_PERMISSION_LOAD_GAMEMODE_PRESET));
$this->maniaControl->getChat()->sendSuccessToAdmins($player->getEscapedNickname() . ' loaded gamemode preset $<$fff' . $presetName . '$>!', $authLevel);
$this->maniaControl->getTimerManager()->registerOneTimeListening(
$this,
function () {
@ -310,12 +309,11 @@ class GameModePresetsPlugin implements Plugin, CommandListener, TimerListener {
* @param \ManiaControl\Players\Player $player
*/
public function commandSaveMode(array $chatCallback, Player $player) {
if (!$this->maniaControl->getAuthenticationManager()->checkPluginPermission($this, $player, self::SETTING_PERMISSION_LOAD_GAMEMODE_PRESET)) {
if (!$this->maniaControl->getAuthenticationManager()->checkPluginPermission($this, $player, self::SETTING_PERMISSION_SAVE_GAMEMODE_PRESET)) {
$this->maniaControl->getAuthenticationManager()->sendNotAllowed($player);
return;
}
// Check for delayed shutdown
$params = explode(' ', $chatCallback[1][2]);
if (count($params) < 2) {
$this->maniaControl->getChat()->sendError('You must provide a gamemode preset name to save settings into!', $player);
@ -334,7 +332,37 @@ class GameModePresetsPlugin implements Plugin, CommandListener, TimerListener {
return;
}
$this->maniaControl->getChat()->sendSuccess($player->getEscapedNickname() . ' saved gamemode settings in preset $<$fff"' . $presetName . '"$>!');
$authLevel = AuthenticationManager::getAuthLevelInt($this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_PERMISSION_SAVE_GAMEMODE_PRESET));
$this->maniaControl->getChat()->sendSuccessToAdmins($player->getEscapedNickname() . ' saved gamemode settings in preset $<$fff' . $presetName . '$>!', $authLevel);
}
/**
* Handle //showmode command
*
* @param array $chatCallback
* @param \ManiaControl\Players\Player $player
*/
public function commandShowMode(array $chatCallback, Player $player) {
if (!$this->maniaControl->getAuthenticationManager()->checkPluginPermission($this, $player, self::SETTING_PERMISSION_LOAD_GAMEMODE_PRESET)) {
$this->maniaControl->getAuthenticationManager()->sendNotAllowed($player);
return;
}
$mysqli = $this->maniaControl->getDatabase()->getMysqli();
$query = "SELECT `name`
FROM `" . self::TABLE_GAMEMODEPRESETS . "`;";
$result = $mysqli->query($query);
if ($mysqli->error) {
trigger_error($mysqli->error);
return null;
}
$presets = array();
while ($preset = $result->fetch_object()) {
array_push($presets, $preset);
}
$result->free();
$this->maniaControl->getChat()->sendInformation('Available presets: $<$g$z$fff' . implode(', ', $presets) . '$>', $player);
}
/**