From f1598ac8b5657d3afd18a93ad1be34f35e75568b Mon Sep 17 00:00:00 2001 From: Beu Date: Mon, 22 May 2023 17:18:36 +0200 Subject: [PATCH] fix when the guestlist file was not previously loaded by the server --- Beu/GuestlistManager.php | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/Beu/GuestlistManager.php b/Beu/GuestlistManager.php index a5017ac..9fca985 100644 --- a/Beu/GuestlistManager.php +++ b/Beu/GuestlistManager.php @@ -3,6 +3,7 @@ namespace Beu; use ManiaControl\Commands\CommandListener; +use ManiaControl\Logger; use ManiaControl\Players\Player; use ManiaControl\Players\PlayerManager; use ManiaControl\Plugins\Plugin; @@ -19,7 +20,7 @@ class GuestlistManager implements CommandListener, Plugin { * Constants */ const PLUGIN_ID = 154; - const PLUGIN_VERSION = 1.1; + const PLUGIN_VERSION = 1.2; const PLUGIN_NAME = 'Guestlist Manager'; const PLUGIN_AUTHOR = 'Beu'; @@ -85,7 +86,10 @@ class GuestlistManager implements CommandListener, Plugin { $this->maniaControl->getCommandManager()->registerCommandListener('loadgl', $this, 'doloadgl', true, 'Load the guestlist'); $this->maniaControl->getCommandManager()->registerCommandListener('cleangl', $this, 'docleangl', true, 'Clean the guestlist'); - return true; + $guestlist = $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_GUESTLIST_FILE); + if ($guestlist === "" || is_file($this->maniaControl->getServer()->getDirectory()->getUserDataFolder() . DIRECTORY_SEPARATOR . "Config" . DIRECTORY_SEPARATOR . $guestlist)) { + $this->maniaControl->getClient()->loadGuestList($guestlist); + } } /** @@ -204,10 +208,33 @@ class GuestlistManager implements CommandListener, Plugin { * @param \ManiaControl\Players\Player $player */ public function dosavegl(Array $chat, Player $player) { - // impossible to save on a other file, idk why - $guestlist = $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_GUESTLIST_FILE); - $this->maniaControl->getClient()->saveGuestList($guestlist); - $this->maniaControl->getChat()->sendSuccess( "Guestlist saved!" , $player); + try { + $guestlist = $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_GUESTLIST_FILE); + + if ($guestlist !== "") { + $filepath = $this->maniaControl->getServer()->getDirectory()->getUserDataFolder() . DIRECTORY_SEPARATOR . "Config" . DIRECTORY_SEPARATOR . $guestlist; + + if (!is_file($filepath)) { + file_put_contents($filepath, ''); + } + } + + // Workaround when the file was never loaded by the server + $currentguestlist = $this->maniaControl->getClient()->getGuestList(); + $this->maniaControl->getClient()->loadGuestList($guestlist); + + $this->maniaControl->getClient()->cleanGuestList(); + foreach ($currentguestlist as $player) { + $this->maniaControl->getClient()->addGuest($player->login); + } + + $this->maniaControl->getClient()->saveGuestList($guestlist); + + $this->maniaControl->getChat()->sendSuccess( "Guestlist saved!" , $player); + } catch (\Exception $e) { + Logger::logError("Impossible to save guestlist: " . $e->getMessage()); + $this->maniaControl->getChat()->sendError("Impossible to save guestlist: " . $e->getMessage(), $player); + } } /**