From 8b2a97bee667e16aa3f17516b7819ca7a74148d8 Mon Sep 17 00:00:00 2001 From: Beu Date: Mon, 6 Sep 2021 19:05:55 +0200 Subject: [PATCH] fix cup point system --- MatchManagerSuite/MatchManagerCore.php | 33 ++++++++++++++---------- MatchManagerSuite/MatchManagerWidget.php | 8 ++---- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/MatchManagerSuite/MatchManagerCore.php b/MatchManagerSuite/MatchManagerCore.php index e75fdf2..a781cd8 100644 --- a/MatchManagerSuite/MatchManagerCore.php +++ b/MatchManagerSuite/MatchManagerCore.php @@ -37,7 +37,7 @@ use ManiaControl\Maps\Map; class MatchManagerCore implements CallbackListener, CommandListener, TimerListener, CommunicationListener, Plugin { const PLUGIN_ID = 152; - const PLUGIN_VERSION = 2.4; + const PLUGIN_VERSION = 2.5; const PLUGIN_NAME = 'MatchManager Core'; const PLUGIN_AUTHOR = 'Beu'; @@ -337,7 +337,6 @@ class MatchManagerCore implements CallbackListener, CommandListener, TimerListen private $settings_pointlimit = 100; private $nbwinners = 0; - private $nbstillalive = 0; private $scriptSettings = array(); private $currentscore = array(); @@ -649,6 +648,8 @@ class MatchManagerCore implements CallbackListener, CommandListener, TimerListen $this->postmatch = true; $this->matchid = ""; + $this->nbwinners = 0; + $this->settings_nbroundsbymap = 5; $this->settings_nbwinner = 2; $this->settings_nbmapsbymatch = 0; @@ -924,9 +925,6 @@ class MatchManagerCore implements CallbackListener, CommandListener, TimerListen $this->resetMatchVariables(); - // KO Specifics variables - $this->nbstillalive = 0; - // Teams Specifics variables $this->currentteamsscore = []; @@ -1385,12 +1383,6 @@ class MatchManagerCore implements CallbackListener, CommandListener, TimerListen usort($results, function ($a, $b) { return -($a->getMatchPoints() + $a->getRoundPoints() <=> $b->getMatchPoints() + $b->getRoundPoints()); }); } - // CUP Specific variables - $this->nbwinners = 0; - - // Knockout Specific variables - $this->nbstillalive = 0; - $pointsrepartition = $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_MATCH_S_POINTSREPARTITION); $pointsrepartition = explode(',', $pointsrepartition); @@ -1408,14 +1400,27 @@ class MatchManagerCore implements CallbackListener, CommandListener, TimerListen if ($this->currentgmbase == "Champion") { $this->currentscore = array_merge($this->currentscore, array(array($rank, $player->login, $points , $result->getMapPoints(), $time, ""))); } elseif ($this->currentgmbase == "Cup") { - $this->currentscore = array_merge($this->currentscore, array(array($rank, $player->login, ($points + $roundpoints), $roundpoints, $time, "-1"))); + // Bypass false winner because of the sum of points + if ($points + $roundpoints > $this->settings_pointlimit && $roundpoints > 0) { + if ($points == $this->settings_pointlimit) { // new winner + var_dump("settings_pointlimit: " . $this->settings_pointlimit . " / settings_nbwinners: " . $this->settings_nbwinners . " / nbwinners: " . $this->nbwinners); + $matchpoints = $this->settings_pointlimit + 1 + $this->settings_nbwinners - $this->nbwinners; + $this->nbwinners++; + } else { + $matchpoints = $this->settings_pointlimit; + } + + } else { + $matchpoints = $points + $roundpoints; + } + $this->currentscore = array_merge($this->currentscore, array(array($rank, $player->login, $matchpoints, $roundpoints, $time, "-1"))); if ($roundpoints > 0) $atleastonefinished = true; // Round is skipped if no one finishes only in cup mode } elseif ($this->currentgmbase == "Rounds" ) { - $this->currentscore = array_merge($this->currentscore, array(array($rank, $player->login, ($points + $roundpoints), $roundpoints, $time, "-1"))); + $this->currentscore = array_merge($this->currentscore, array(array($rank, $player->login, $matchpoints, $roundpoints, $time, "-1"))); } elseif ($this->currentgmbase == "Teams") { $this->currentscore = array_merge($this->currentscore, array(array($rank, $player->login, ($points + $roundpoints), $roundpoints, $time, $player->teamId))); } elseif ($this->currentgmbase == "Knockout") { - $this->currentscore = array_merge($this->currentscore, array(array($rank, $player->login, $points, "-1", $time, "-1"))); + $this->currentscore = array_merge($this->currentscore, array(array($rank, $player->login, $points, "-1", $time, "-1"))); //TODO check } } elseif (in_array($this->currentgmbase, ["Laps", "TimeAttack", "RoyalTimeAttack"]) && !(($time == 0 || $time == -1) && ($player->isSpectator || $player->isFakePlayer()))) { $besttime = $result->getBestRaceTime(); diff --git a/MatchManagerSuite/MatchManagerWidget.php b/MatchManagerSuite/MatchManagerWidget.php index 60b5815..dd168cb 100644 --- a/MatchManagerSuite/MatchManagerWidget.php +++ b/MatchManagerSuite/MatchManagerWidget.php @@ -42,7 +42,7 @@ class MatchManagerWidget implements ManialinkPageAnswerListener, CallbackListene * Constants */ const PLUGIN_ID = 153; - const PLUGIN_VERSION = 1.3; + const PLUGIN_VERSION = 1.4; const PLUGIN_NAME = 'MatchManager Widget'; const PLUGIN_AUTHOR = 'Beu'; @@ -454,11 +454,7 @@ class MatchManagerWidget implements ManialinkPageAnswerListener, CallbackListene $points = $score[2]; if (isset($pointlimit)) { if ($score[2] > $pointlimit) { - if ($score[3] == 0 || $score[2] - $score[3] == $pointlimit) { - $points = '$0f0Winner'; - } else { - $points = '$f00Finalist'; - } + $points = '$0f0Winner'; } elseif ($score[2] == $pointlimit) { $points = '$f00Finalist'; }