remove player pause
This commit is contained in:
parent
a71323a52b
commit
cf7d735c30
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user