completely rework Admin UI plugin
This commit is contained in:
@ -29,6 +29,8 @@ use ManiaControl\Configurator\GameModeSettings;
|
||||
use ManiaControl\Utils\Formatter;
|
||||
use Maniaplanet\DedicatedServer\InvalidArgumentException;
|
||||
use ManiaControl\Callbacks\TimerListener; // for pause
|
||||
use ManiaControl\Plugins\PluginManager;
|
||||
use ManiaControl\Plugins\PluginMenu;
|
||||
|
||||
/**
|
||||
* MatchManager Core
|
||||
@ -54,6 +56,16 @@ class MatchManagerCore implements CallbackListener, CommandListener, TimerListen
|
||||
const DB_MATCHESTEAMSRESULT = 'MatchManager_MatchesTeamsResult';
|
||||
const MLID_MATCH_PAUSE_WIDGET = 'Pause Widget';
|
||||
|
||||
// Other MatchManager plugin
|
||||
const MATCHMANAGERADMINUI_PLUGIN = 'MatchManagerSuite\MatchManagerAdminUI';
|
||||
|
||||
// Actions
|
||||
const ML_ACTION_OPENSETTINGS = 'MatchManagerSuite\MatchManagerCore.OpenSettings';
|
||||
const ML_ACTION_SKIPROUND = 'MatchManagerSuite\MatchManagerCore.SkipRound';
|
||||
const ML_ACTION_PAUSEMATCH = 'MatchManagerSuite\MatchManagerCore.PauseMatch';
|
||||
const ML_ACTION_STOPMATCH = 'MatchManagerSuite\MatchManagerCore.StopMatch';
|
||||
const ML_ACTION_STARTMATCH = 'MatchManagerSuite\MatchManagerCore.StartMatch';
|
||||
|
||||
// Internal Callback Trigger
|
||||
const CB_MATCHMANAGER_BEGINMAP = 'MatchManager.BeginMap';
|
||||
const CB_MATCHMANAGER_ENDROUND = 'MatchManager.EndRound';
|
||||
@ -450,8 +462,12 @@ class MatchManagerCore implements CallbackListener, CommandListener, TimerListen
|
||||
$this->maniaControl->getCommandManager()->registerCommandListener(array('matchendpause','endpause'), $this, 'onCommandUnsetPause', true, 'End the pause during a match.');
|
||||
|
||||
//Register Callbacks
|
||||
$this->maniaControl->getCallbackManager()->registerCallbackListener(Callbacks::AFTERINIT, $this, 'handleAfterInit');
|
||||
$this->maniaControl->getCallbackManager()->registerCallbackListener(PluginManager::CB_PLUGIN_LOADED, $this, 'handlePluginLoaded');
|
||||
|
||||
$this->maniaControl->getCallbackManager()->registerCallbackListener(SettingManager::CB_SETTING_CHANGED, $this, 'updateSettings');
|
||||
$this->maniaControl->getCallbackManager()->registerCallbackListener(GameModeSettings::CB_GAMEMODESETTINGS_CHANGED, $this, 'updateGMvariables');
|
||||
$this->maniaControl->getCallbackManager()->registerCallbackListener(CallbackManager::CB_MP_PLAYERMANIALINKPAGEANSWER, $this, 'handleManialinkPageAnswer');
|
||||
|
||||
$this->maniaControl->getCallbackManager()->registerCallbackListener(PlayerManager::CB_PLAYERCONNECT, $this, 'handlePlayerConnect');
|
||||
$this->maniaControl->getCallbackManager()->registerCallbackListener(PlayerManager::CB_PLAYERDISCONNECT, $this, 'handlePlayerDisconnect');
|
||||
@ -467,7 +483,9 @@ class MatchManagerCore implements CallbackListener, CommandListener, TimerListen
|
||||
$this->maniaControl->getCommunicationManager()->registerCommunicationListener("Match.GetCurrentScore", $this, function () { return new CommunicationAnswer($this->getCurrentScore()); });
|
||||
$this->maniaControl->getCommunicationManager()->registerCommunicationListener("Match.MatchStart", $this, function () { return new CommunicationAnswer($this->MatchStart()); });
|
||||
$this->maniaControl->getCommunicationManager()->registerCommunicationListener("Match.MatchStop", $this, function () { return new CommunicationAnswer($this->MatchStop()); });
|
||||
$this->maniaControl->getCommunicationManager()->registerCommunicationListener("Match.GetMatchOptions", $this, function () { return new CommunicationAnswer($this->getGMSettings($this->currentgmbase,$this->currentcustomgm)); });
|
||||
$this->maniaControl->getCommunicationManager()->registerCommunicationListener("Match.GetMatchOptions", $this, function () { return new CommunicationAnswer($this->getGMSettings($this->currentgmbase,$this->currentcustomgm)); });
|
||||
|
||||
$this->updateAdminUIMenuItems();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -475,6 +493,16 @@ class MatchManagerCore implements CallbackListener, CommandListener, TimerListen
|
||||
*/
|
||||
public function unload() {
|
||||
$this->closePauseWidget();
|
||||
|
||||
/** @var \MatchManagerSuite\MatchManagerAdminUI|null */
|
||||
$adminUIPlugin = $this->maniaControl->getPluginManager()->getPlugin(self::MATCHMANAGERADMINUI_PLUGIN);
|
||||
if ($adminUIPlugin !== null) {
|
||||
$adminUIPlugin->removeMenuItem(self::ML_ACTION_OPENSETTINGS);
|
||||
$adminUIPlugin->removeMenuItem(self::ML_ACTION_STARTMATCH);
|
||||
$adminUIPlugin->removeMenuItem(self::ML_ACTION_SKIPROUND);
|
||||
$adminUIPlugin->removeMenuItem(self::ML_ACTION_PAUSEMATCH);
|
||||
$adminUIPlugin->removeMenuItem(self::ML_ACTION_STOPMATCH);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -671,6 +699,43 @@ class MatchManagerCore implements CallbackListener, CommandListener, TimerListen
|
||||
* MARK: Internal Functions
|
||||
*/
|
||||
|
||||
/**
|
||||
* Add items in AdminUI plugin
|
||||
*/
|
||||
public function updateAdminUIMenuItems() {
|
||||
/** @var \MatchManagerSuite\MatchManagerAdminUI|null */
|
||||
$adminUIPlugin = $this->maniaControl->getPluginManager()->getPlugin(self::MATCHMANAGERADMINUI_PLUGIN);
|
||||
if ($adminUIPlugin === null) return;
|
||||
|
||||
$menuItem = new \MatchManagerSuite\MatchManagerAdminUI_MenuItem();
|
||||
$menuItem->setActionId(self::ML_ACTION_OPENSETTINGS)->setOrder(99999)->setStyle('UICommon64_1')->setSubStyle('Settings_light')->setDescription('Open Core Settings');
|
||||
$adminUIPlugin->addMenuItem($menuItem);
|
||||
|
||||
if ($this->matchStarted) {
|
||||
$adminUIPlugin->removeMenuItem(self::ML_ACTION_STARTMATCH);
|
||||
|
||||
$menuItem = new \MatchManagerSuite\MatchManagerAdminUI_MenuItem();
|
||||
$menuItem->setActionId(self::ML_ACTION_SKIPROUND)->setOrder(0)->setStyle('UICommon64_1')->setSubStyle('Cross_light')->setDescription('Skip the round / Warmup / Pause');
|
||||
$adminUIPlugin->addMenuItem($menuItem);
|
||||
|
||||
$menuItem = new \MatchManagerSuite\MatchManagerAdminUI_MenuItem();
|
||||
$menuItem->setActionId(self::ML_ACTION_PAUSEMATCH)->setOrder(1)->setStyle('UICommon64_1')->setSubStyle('Pause_light')->setDescription('Pause the match');
|
||||
$adminUIPlugin->addMenuItem($menuItem);
|
||||
|
||||
$menuItem = new \MatchManagerSuite\MatchManagerAdminUI_MenuItem();
|
||||
$menuItem->setActionId(self::ML_ACTION_STOPMATCH)->setOrder(2)->setStyle('UICommon64_1')->setSubStyle('Stop_light')->setDescription('Stop the match');
|
||||
$adminUIPlugin->addMenuItem($menuItem);
|
||||
} else {
|
||||
$adminUIPlugin->removeMenuItem(self::ML_ACTION_SKIPROUND);
|
||||
$adminUIPlugin->removeMenuItem(self::ML_ACTION_PAUSEMATCH);
|
||||
$adminUIPlugin->removeMenuItem(self::ML_ACTION_STOPMATCH);
|
||||
|
||||
$menuItem = new \MatchManagerSuite\MatchManagerAdminUI_MenuItem();
|
||||
$menuItem->setActionId(self::ML_ACTION_STARTMATCH)->setOrder(0)->setStyle('UICommon64_1')->setSubStyle('Play_light')->setDescription('Start the match');
|
||||
$adminUIPlugin->addMenuItem($menuItem);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update Widgets on Setting Changes
|
||||
*
|
||||
@ -1135,6 +1200,7 @@ class MatchManagerCore implements CallbackListener, CommandListener, TimerListen
|
||||
'mapshidden' => $this->mapshidden,
|
||||
'maps' => $this->maps];
|
||||
$this->maniaControl->getCallbackManager()->triggerCallback(self::CB_MATCHMANAGER_STARTMATCH, $this->matchid, $settings);
|
||||
$this->updateAdminUIMenuItems();
|
||||
|
||||
Logger::log("Skip map");
|
||||
$this->maniaControl->getMapManager()->getMapActions()->skipMap();
|
||||
@ -1230,6 +1296,7 @@ class MatchManagerCore implements CallbackListener, CommandListener, TimerListen
|
||||
Logger::log("Match finished");
|
||||
|
||||
$this->resetMatchVariables();
|
||||
$this->updateAdminUIMenuItems();
|
||||
|
||||
// Teams Specifics variables
|
||||
$this->currentteamsscore = [];
|
||||
@ -1280,6 +1347,7 @@ class MatchManagerCore implements CallbackListener, CommandListener, TimerListen
|
||||
}
|
||||
|
||||
$this->resetMatchVariables();
|
||||
$this->updateAdminUIMenuItems();
|
||||
} catch (Exception $e) {
|
||||
$this->maniaControl->getChat()->sendErrorToAdmins($this->chatprefix . 'Can not stop match: ' . $e->getMessage());
|
||||
}
|
||||
@ -2186,4 +2254,57 @@ class MatchManagerCore implements CallbackListener, CommandListener, TimerListen
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* MARK: Internal Callbacks
|
||||
*/
|
||||
public function handleAfterInit() {
|
||||
$this->updateAdminUIMenuItems();
|
||||
}
|
||||
|
||||
public function handlePluginLoaded(string $pluginClass) {
|
||||
if ($pluginClass === self::MATCHMANAGERADMINUI_PLUGIN) {
|
||||
$this->updateAdminUIMenuItems();
|
||||
}
|
||||
}
|
||||
|
||||
public function handleManialinkPageAnswer($callback) {
|
||||
$actionId = $callback[1][2];
|
||||
$actionArray = explode('.', $actionId);
|
||||
if ($actionArray[0] !== self::class) {
|
||||
return;
|
||||
}
|
||||
|
||||
$login = $callback[1][1];
|
||||
$player = $this->maniaControl->getPlayerManager()->getPlayer($login);
|
||||
$authLevel = $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_MATCH_AUTHLEVEL);
|
||||
if (!$this->maniaControl->getAuthenticationManager()->checkRight($player, AuthenticationManager::getAuthLevel($authLevel))) {
|
||||
return;
|
||||
}
|
||||
|
||||
switch ($actionId) {
|
||||
case self::ML_ACTION_OPENSETTINGS:
|
||||
$pluginMenu = $this->maniaControl->getPluginManager()->getPluginMenu();
|
||||
if (defined("\ManiaControl\ManiaControl::ISTRACKMANIACONTROL")) {
|
||||
$player->setCache($pluginMenu, PluginMenu::CACHE_SETTING_CLASS, "PluginMenu.Settings." . self::class);
|
||||
} else {
|
||||
$player->setCache($pluginMenu, PluginMenu::CACHE_SETTING_CLASS, self::class);
|
||||
}
|
||||
$this->maniaControl->getConfigurator()->showMenu($player, $pluginMenu);
|
||||
case self::ML_ACTION_STOPMATCH:
|
||||
$this->MatchStop();
|
||||
break;
|
||||
case self::ML_ACTION_PAUSEMATCH:
|
||||
$this->setNadeoPause();
|
||||
break;
|
||||
case self::ML_ACTION_SKIPROUND:
|
||||
$this->onCommandMatchEndWU(array(), $player);
|
||||
$this->onCommandUnsetPause(array(), $player);
|
||||
$this->onCommandMatchEndRound(array(), $player);
|
||||
break;
|
||||
case self::ML_ACTION_STARTMATCH:
|
||||
$this->MatchStart();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user