167 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			167 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| namespace Beu;
 | |
| 
 | |
| use ManiaControl\ManiaControl;
 | |
| use ManiaControl\Plugins\Plugin;
 | |
| use \ManiaControl\Logger;
 | |
| use ManiaControl\Players\PlayerManager;
 | |
| use ManiaControl\Callbacks\CallbackListener;
 | |
| use ManiaControl\Players\Player;
 | |
| 
 | |
| use ManiaControl\Settings\Setting;
 | |
| use ManiaControl\Settings\SettingManager;
 | |
| use ManiaControl\Manialinks\ManialinkPageAnswerListener;
 | |
| 
 | |
| use \Exception;
 | |
| 
 | |
| /**
 | |
|  * ReloadDevTool
 | |
|  *
 | |
|  * @author	Beu
 | |
|  * @license   http://www.gnu.org/licenses/ GNU General Public License, Version 3
 | |
|  */
 | |
| class ReloadDevTool implements ManialinkPageAnswerListener, CallbackListener, Plugin {
 | |
| 	/*
 | |
| 	* Constants
 | |
| 	*/
 | |
| 	const PLUGIN_ID			= 165;
 | |
| 	const PLUGIN_VERSION	= 1.0;
 | |
| 	const PLUGIN_NAME		= 'ReloadDevTool';
 | |
| 	const PLUGIN_AUTHOR		= 'Beu';
 | |
| 
 | |
| 	const SETTING_RELOAD_GAMEMODE		= 'Reload Gamemode';
 | |
| 	const SETTING_GAMEMODE_TO_LOAD		= 'Gamemode to load';
 | |
| 	const SETTING_RESTART_MANIACONTROL	= 'Restart Maniacontrol';
 | |
| 
 | |
| 	/*
 | |
| 	* Private properties
 | |
| 	*/
 | |
| 	/** @var ManiaControl $maniaControl */
 | |
| 	private $maniaControl	= null;
 | |
| 	private $manialink		= <<<'EOD'
 | |
| 	<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 | |
| 	<manialink id="ReloadDevTool" version="3">
 | |
| 		<script><!--
 | |
| 			main () {
 | |
| 				log("DEBUG_ReloadGamemode loaded");
 | |
| 				while(True) {
 | |
| 					yield;
 | |
| 					foreach(Event in PendingEvents) {
 | |
| 						if (Event.Type == CMlScriptEvent::Type::KeyPress && Event.KeyName == "F5") {
 | |
| 							TriggerPageAction("ReloadDevTool_Reload");
 | |
| 						}
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 		--></script>
 | |
| 	</manialink>
 | |
| 	EOD;
 | |
| 
 | |
| 	/**
 | |
| 	 * @see \ManiaControl\Plugins\Plugin::prepare()
 | |
| 	 */
 | |
| 	public static function prepare(ManiaControl $maniaControl) {
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * @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 "Simple plugin to reload gamemode or maniacontrol with F5";
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * @see \ManiaControl\Plugins\Plugin::load()
 | |
| 	 */
 | |
| 	public function load(ManiaControl $maniaControl) {
 | |
| 		$this->maniaControl = $maniaControl;
 | |
| 
 | |
| 		$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_RELOAD_GAMEMODE, false, "");
 | |
| 		$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_GAMEMODE_TO_LOAD, "", 'File to load in UserData/Scripts/Modes/');
 | |
| 		$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_RESTART_MANIACONTROL, false, "");
 | |
| 
 | |
| 		$this->maniaControl->getCallbackManager()->registerCallbackListener(PlayerManager::CB_PLAYERCONNECT, $this, 'handlePlayerConnect');
 | |
| 		$this->maniaControl->getManialinkManager()->registerManialinkPageAnswerListener("ReloadDevTool_Reload", $this, 'handleReload');
 | |
| 
 | |
| 		$admins = $this->maniaControl->getAuthenticationManager()->getAdmins();
 | |
| 		if (!empty($admins)) {
 | |
| 			$this->maniaControl->getManialinkManager()->sendManialink($this->manialink,$admins);
 | |
| 		}
 | |
| 
 | |
| 	}
 | |
| 	
 | |
| 	/**
 | |
| 	 * Handle when a player connects
 | |
| 	 * 
 | |
| 	 * @param Player $player
 | |
| 	 */
 | |
| 	public function handlePlayerConnect(Player $player) {
 | |
| 		if ($player->authLevel > 0) {
 | |
| 			$this->maniaControl->getManialinkManager()->sendManialink($this->manialink,$player->login);
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	public function handleReload(array $callback, Player $player) {
 | |
| 		if ($player->authLevel <= 0) {
 | |
| 			Logger::logError('Wrong authlevel');
 | |
| 			return;
 | |
| 		}
 | |
| 		Logger::log('handleReload');
 | |
| 		$this->maniaControl->getChat()->sendSuccess("Handle Reload");
 | |
| 
 | |
| 		if ($this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_RELOAD_GAMEMODE)) {
 | |
| 			$file = $this->maniaControl->getServer()->getDirectory()->getUserDataFolder() . "Scripts" . DIRECTORY_SEPARATOR .  "Modes" . DIRECTORY_SEPARATOR . $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_GAMEMODE_TO_LOAD);
 | |
| 			if ($file && is_file($file)) {
 | |
| 				try {
 | |
| 					$this->maniaControl->getChat()->sendSuccess("Loading In-Dev Script");
 | |
| 					$this->maniaControl->getClient()->setModeScriptText(file_get_contents($file));
 | |
| 				} catch (\Exception $e) {
 | |
| 					Logger::logError($e->getMessage());
 | |
| 					$this->maniaControl->getChat()->sendErrorToAdmins($e->getMessage());
 | |
| 				}
 | |
| 			} else {
 | |
| 				Logger::logError('No Game mode to load');
 | |
| 				$this->maniaControl->getChat()->sendErrorToAdmins("No Game mode to load");
 | |
| 			}
 | |
| 		}
 | |
| 		if ($this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_RESTART_MANIACONTROL)) {
 | |
| 			$this->maniaControl->reboot();
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Unload the plugin and its Resources
 | |
| 	 */
 | |
| 	public function unload() {
 | |
| 
 | |
| 	}
 | |
| }
 |