remove player pause

This commit is contained in:
Beu 2021-06-27 21:34:31 +02:00
parent a71323a52b
commit cf7d735c30

View File

@ -27,6 +27,7 @@ use ManiaControl\Settings\SettingManager;
use ManiaControl\Configurator\GameModeSettings; use ManiaControl\Configurator\GameModeSettings;
use ManiaControl\Utils\Formatter; use ManiaControl\Utils\Formatter;
use Maniaplanet\DedicatedServer\InvalidArgumentException; use Maniaplanet\DedicatedServer\InvalidArgumentException;
use ManiaControl\Callbacks\TimerListener;
/** /**
* MatchManager Core * MatchManager Core
@ -34,7 +35,7 @@ use Maniaplanet\DedicatedServer\InvalidArgumentException;
* @author Beu (based on MatchPlugin by jonthekiller) * @author Beu (based on MatchPlugin by jonthekiller)
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3 * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/ */
class MatchManagerCore implements ManialinkPageAnswerListener, CallbackListener, CommandListener, CommunicationListener, Plugin { class MatchManagerCore implements ManialinkPageAnswerListener, CallbackListener, CommandListener, TimerListener, CommunicationListener, Plugin {
const PLUGIN_ID = 152; const PLUGIN_ID = 152;
const PLUGIN_VERSION = 1.4; const PLUGIN_VERSION = 1.4;
@ -64,7 +65,6 @@ class MatchManagerCore implements ManialinkPageAnswerListener, CallbackListener,
const SETTING_MATCH_MATCHSETTINGS_CONF = 'Match settings from matchsettings file only:'; const SETTING_MATCH_MATCHSETTINGS_CONF = 'Match settings from matchsettings file only:';
const SETTING_MATCH_GAMEMODE_AFTERMATCH = 'Gamemode used after match:'; const SETTING_MATCH_GAMEMODE_AFTERMATCH = 'Gamemode used after match:';
const SETTING_MATCH_PAUSE_DURATION = 'Default Pause Duration in seconds'; const SETTING_MATCH_PAUSE_DURATION = 'Default Pause Duration in seconds';
const SETTING_MATCH_PAUSE_MAXNUMBER = 'Pause Max per Player';
const SETTING_MATCH_PAUSE_POSX = 'Pause Widget-Position: X'; const SETTING_MATCH_PAUSE_POSX = 'Pause Widget-Position: X';
const SETTING_MATCH_PAUSE_POSY = 'Pause Widget-Position: Y'; const SETTING_MATCH_PAUSE_POSY = 'Pause Widget-Position: Y';
const SETTING_MATCH_SHUFFLEMAPS = 'Randomize map order (shuffle)'; const SETTING_MATCH_SHUFFLEMAPS = 'Randomize map order (shuffle)';
@ -293,7 +293,6 @@ class MatchManagerCore implements ManialinkPageAnswerListener, CallbackListener,
/** @var ManiaControl $maniaControl */ /** @var ManiaControl $maniaControl */
private $maniaControl = null; private $maniaControl = null;
private $chatprefix = '$<$fc3$w🏆$m$> '; // Would like to create a setting but MC database doesn't support utf8mb4 private $chatprefix = '$<$fc3$w🏆$m$> '; // Would like to create a setting but MC database doesn't support utf8mb4
private $times = array();
private $nbmaps = 0; private $nbmaps = 0;
private $nbrounds = 0; private $nbrounds = 0;
private $nbspectators = 0; private $nbspectators = 0;
@ -316,10 +315,7 @@ class MatchManagerCore implements ManialinkPageAnswerListener, CallbackListener,
private $currentteamsscore = array(); private $currentteamsscore = array();
private $playerpause = array(); private $playerpause = array();
private $pausetimer = 0; private $pausetimer = 0;
private $pauseasked = false;
private $pauseon = false; private $pauseon = false;
private $pauseaskedbyplayer = "";
private $numberpause = 0;
private $skipround = false; private $skipround = false;
@ -390,7 +386,6 @@ class MatchManagerCore implements ManialinkPageAnswerListener, CallbackListener,
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_MATCH_MAPLIST, "match.txt", "Maps + Matchsettings file to load (empty to use server login)"); $this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_MATCH_MAPLIST, "match.txt", "Maps + Matchsettings file to load (empty to use server login)");
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_MATCH_MATCHSETTINGS_CONF, false, "Load configuration from matchsettings file instead of Admin Interface (can be usefull with a custom script)"); $this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_MATCH_MATCHSETTINGS_CONF, false, "Load configuration from matchsettings file instead of Admin Interface (can be usefull with a custom script)");
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_MATCH_PAUSE_DURATION, 120, "Default Pause Duration in seconds"); $this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_MATCH_PAUSE_DURATION, 120, "Default Pause Duration in seconds");
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_MATCH_PAUSE_MAXNUMBER, 0, "Number of pause a player can ask during a match");
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_MATCH_PAUSE_POSX, 0, "Position of the Pause Countdown (on X axis)"); $this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_MATCH_PAUSE_POSX, 0, "Position of the Pause Countdown (on X axis)");
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_MATCH_PAUSE_POSY, 43, "Position of the Pause Countdown (on Y axis)"); $this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_MATCH_PAUSE_POSY, 43, "Position of the Pause Countdown (on Y axis)");
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_MATCH_SHUFFLEMAPS, true, "Shuffle maps order"); $this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_MATCH_SHUFFLEMAPS, true, "Shuffle maps order");
@ -410,9 +405,6 @@ class MatchManagerCore implements ManialinkPageAnswerListener, CallbackListener,
$this->maniaControl->getCommandManager()->registerCommandListener(array('matchpause','pause'), $this, 'onCommandSetPause', true, 'Set pause during a match. [time] in seconds can be added to force another value'); $this->maniaControl->getCommandManager()->registerCommandListener(array('matchpause','pause'), $this, 'onCommandSetPause', true, 'Set pause during a match. [time] in seconds can be added to force another value');
$this->maniaControl->getCommandManager()->registerCommandListener(array('matchendpause','endpause'), $this, 'onCommandUnsetPause', true, 'End the pause during a match.'); $this->maniaControl->getCommandManager()->registerCommandListener(array('matchendpause','endpause'), $this, 'onCommandUnsetPause', true, 'End the pause during a match.');
//Register Player Commands
$this->maniaControl->getCommandManager()->registerCommandListener('pause', $this, 'onCommandSetPausePlayer', false, 'Set pause during a match.');
//Register Callbacks //Register Callbacks
$this->maniaControl->getCallbackManager()->registerCallbackListener(SettingManager::CB_SETTING_CHANGED, $this, 'updateSettings'); $this->maniaControl->getCallbackManager()->registerCallbackListener(SettingManager::CB_SETTING_CHANGED, $this, 'updateSettings');
$this->maniaControl->getCallbackManager()->registerCallbackListener(GameModeSettings::CB_GAMEMODESETTINGS_CHANGED, $this, 'updateGMvariables'); $this->maniaControl->getCallbackManager()->registerCallbackListener(GameModeSettings::CB_GAMEMODESETTINGS_CHANGED, $this, 'updateGMvariables');
@ -562,6 +554,10 @@ class MatchManagerCore implements ManialinkPageAnswerListener, CallbackListener,
return $this->settings_nbwinners; return $this->settings_nbwinners;
} }
public function getPauseStatus() {
return $this->pauseon;
}
/** /**
* Update Widgets on Setting Changes * Update Widgets on Setting Changes
* *
@ -717,15 +713,6 @@ class MatchManagerCore implements ManialinkPageAnswerListener, CallbackListener,
$this->handlePlayerConnect($player); $this->handlePlayerConnect($player);
} }
//Reset Player Pause counter
foreach ($players as $player) {
if (!$player->isSpectator) {
$this->playerpause[$player->login] = 0;
}
}
$this->pauseasked = false;
$this->pauseaskedbyplayer = "";
// MYSQL DATA INSERT // MYSQL DATA INSERT
$mysqli = $this->maniaControl->getDatabase()->getMysqli(); $mysqli = $this->maniaControl->getDatabase()->getMysqli();
$query = 'INSERT INTO `' . self::DB_MATCHESINDEX . '` $query = 'INSERT INTO `' . self::DB_MATCHESINDEX . '`
@ -938,7 +925,7 @@ class MatchManagerCore implements ManialinkPageAnswerListener, CallbackListener,
* @param boolean $admin * @param boolean $admin
* @param integer $time * @param integer $time
*/ */
private function setNadeoPause($admin = false, $time = null) { public function setNadeoPause($admin = false, $time = null) {
Logger::log("Nadeo Pause"); Logger::log("Nadeo Pause");
if ($time === null) { if ($time === null) {
@ -947,24 +934,16 @@ class MatchManagerCore implements ManialinkPageAnswerListener, CallbackListener,
$this->pausetimer = $time; $this->pausetimer = $time;
} }
$this->numberpause++;
$numberpause = $this->numberpause;
$this->pauseon = true; $this->pauseon = true;
$this->maniaControl->getModeScriptEventManager()->startPause(); $this->maniaControl->getModeScriptEventManager()->startPause();
$this->maniaControl->getChat()->sendSuccessToAdmins($this->chatprefix . 'You can interrupt the pause with the command //matchendpause'); $this->maniaControl->getChat()->sendSuccessToAdmins($this->chatprefix . 'You can interrupt the pause with the command //matchendpause');
if ($this->pausetimer > 0) { if ($this->pausetimer > 0) {
$this->maniaControl->getTimerManager()->registerOneTimeListening($this, function () use (&$numberpause) { $this->displayPauseWidget();
$this->maniaControl->getTimerManager()->registerOneTimeListening($this, function () {
if ($numberpause == $this->numberpause) {
$this->unsetNadeoPause(); $this->unsetNadeoPause();
} else {
Logger::log("Pause not stopped because another is in progress!");
}
}, $this->pausetimer * 1000); }, $this->pausetimer * 1000);
$this->displayPauseWidget($numberpause);
} }
} }
@ -975,6 +954,8 @@ class MatchManagerCore implements ManialinkPageAnswerListener, CallbackListener,
if ($this->pauseon) { if ($this->pauseon) {
Logger::log("End Pause"); Logger::log("End Pause");
$this->closePauseWidget(); $this->closePauseWidget();
$this->pauseon = false;
$this->skipround = true;
$this->maniaControl->getModeScriptEventManager()->endPause(); $this->maniaControl->getModeScriptEventManager()->endPause();
} }
} }
@ -982,9 +963,8 @@ class MatchManagerCore implements ManialinkPageAnswerListener, CallbackListener,
/** /**
* Display Pause Widget * Display Pause Widget
* *
* @param integer $numberpause
*/ */
public function displayPauseWidget($numberpause) { public function displayPauseWidget() {
$posX = $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_MATCH_PAUSE_POSX); $posX = $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_MATCH_PAUSE_POSX);
$posY = $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_MATCH_PAUSE_POSY); $posY = $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_MATCH_PAUSE_POSY);
@ -1017,15 +997,13 @@ class MatchManagerCore implements ManialinkPageAnswerListener, CallbackListener,
// Send manialink // Send manialink
$this->maniaControl->getManialinkManager()->sendManialink($maniaLink); $this->maniaControl->getManialinkManager()->sendManialink($maniaLink);
$this->maniaControl->getTimerManager()->registerOneTimeListening($this, function () use (&$numberpause) { $this->maniaControl->getTimerManager()->registerOneTimeListening($this, function () {
if ($numberpause == $this->numberpause) {
if ($this->pausetimer > 0 && $this->pauseon) { if ($this->pausetimer > 0 && $this->pauseon) {
$this->pausetimer--; $this->pausetimer--;
$this->displayPauseWidget($numberpause); $this->displayPauseWidget();
} else { } else {
$this->closePauseWidget(); $this->closePauseWidget();
} }
}
}, 1000); }, 1000);
} }
@ -1047,12 +1025,6 @@ class MatchManagerCore implements ManialinkPageAnswerListener, CallbackListener,
if ($this->pauseon) { if ($this->pauseon) {
$this->displayPauseWidget($player->login); $this->displayPauseWidget($player->login);
} }
if ($this->matchStarted) {
if (!isset($this->playerpause[$player->login])) {
$this->playerpause[$player->login] = 0;
}
}
} }
/** /**
@ -1197,13 +1169,6 @@ class MatchManagerCore implements ManialinkPageAnswerListener, CallbackListener,
*/ */
public function handleBeginRoundCallback() { public function handleBeginRoundCallback() {
Logger::log("handleBeginRoundCallback"); Logger::log("handleBeginRoundCallback");
$this->times = array();
if ($this->pauseasked) {
$this->pauseasked = false;
Logger::log("Set Pause");
$this->setNadeoPause();
}
if ($this->matchStarted && $this->nbmaps > 0) { if ($this->matchStarted && $this->nbmaps > 0) {
if (in_array($this->currentgmbase, ["Cup", "Teams", "Rounds"])) { if (in_array($this->currentgmbase, ["Cup", "Teams", "Rounds"])) {
@ -1212,9 +1177,6 @@ class MatchManagerCore implements ManialinkPageAnswerListener, CallbackListener,
$this->maniaControl->getChat()->sendSuccess($this->chatprefix . 'The match is currently on $<$F00pause$>!'); $this->maniaControl->getChat()->sendSuccess($this->chatprefix . 'The match is currently on $<$F00pause$>!');
Logger::log("Pause"); Logger::log("Pause");
} else { } else {
if ($this->pauseon) {
$this->pauseon = false;
}
$this->maniaControl->getChat()->sendInformation($this->chatprefix . '$o$iRound: ' . ($this->nbrounds + 1) . ' / ' . $this->settings_nbroundsbymap); $this->maniaControl->getChat()->sendInformation($this->chatprefix . '$o$iRound: ' . ($this->nbrounds + 1) . ' / ' . $this->settings_nbroundsbymap);
Logger::log("Round: " . ($this->nbrounds + 1) . ' / ' . $this->settings_nbroundsbymap); Logger::log("Round: " . ($this->nbrounds + 1) . ' / ' . $this->settings_nbroundsbymap);
} }
@ -1249,7 +1211,6 @@ class MatchManagerCore implements ManialinkPageAnswerListener, CallbackListener,
if (!$player) { if (!$player) {
return; return;
} }
$this->times[] = array($player->login, $structure->getRaceTime());
} }
} }
@ -1331,8 +1292,6 @@ class MatchManagerCore implements ManialinkPageAnswerListener, CallbackListener,
$rank++; $rank++;
} }
Logger::log('Count number of players finish: '. count($this->times));
if (!$this->pauseon && !$this->skipround) { if (!$this->pauseon && !$this->skipround) {
$this->nbrounds++; $this->nbrounds++;
} }
@ -1626,31 +1585,4 @@ class MatchManagerCore implements ManialinkPageAnswerListener, CallbackListener,
$this->maniaControl->getChat()->sendError($this->chatprefix . 'Missing or invalid parameters', $adminplayer); $this->maniaControl->getChat()->sendError($this->chatprefix . 'Missing or invalid parameters', $adminplayer);
} }
} }
/**
* Command /pause for players
*
* @param OnScoresStructure $structure
*/
public function onCommandSetPausePlayer(array $chatCallback, Player $player) {
if (($this->matchStarted) && ($this->currentgmbase != "TimeAttack" || !empty($this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_MATCH_CUSTOM_GAMEMODE))) && (!$player->isSpectator && !$player->isPureSpectator)) {
if ($this->playerpause[$player->login] < $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_MATCH_PAUSE_MAXNUMBER)) {
if ($this->pauseasked === false && $this->pauseon === false) {
$this->maniaControl->getChat()->sendSuccess($this->chatprefix . 'Player $<$ff0' . $player->nickname . '$> ask for a break of ' . $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_MATCH_PAUSE_DURATION) . ' seconds! It will start after this round.');
$this->playerpause[$player->login] = $this->playerpause[$player->login] + 1;
Logger::log($this->playerpause[$player->login] . " pause for " . $player->login);
$this->pauseasked = true;
$this->pauseaskedbyplayer = $player->login;
} else {
$this->maniaControl->getChat()->sendError($this->chatprefix . 'Pause already asked by a player!', $player);
}
} else {
$this->maniaControl->getChat()->sendError($this->chatprefix . 'Pause not available, too many pause asked', $player);
}
} else {
$this->maniaControl->getChat()->sendError($this->chatprefix . 'Pause not available (TA or you are spectator)', $player);
}
}
} }