Compare commits
3
Commits
00ae308e45
..
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d21a36d5aa | ||
|
|
5594f91d5b | ||
|
|
483ddd950f |
@@ -4,6 +4,7 @@ namespace MatchManagerSuite;
|
|||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
use ManiaControl\Callbacks\CallbackListener;
|
use ManiaControl\Callbacks\CallbackListener;
|
||||||
|
use ManiaControl\Callbacks\CallbackManager;
|
||||||
use ManiaControl\Callbacks\Callbacks;
|
use ManiaControl\Callbacks\Callbacks;
|
||||||
use ManiaControl\Callbacks\TimerListener;
|
use ManiaControl\Callbacks\TimerListener;
|
||||||
use ManiaControl\Files\AsyncHttpRequest;
|
use ManiaControl\Files\AsyncHttpRequest;
|
||||||
@@ -32,7 +33,7 @@ class MatchManagerPickAndBan implements ManialinkPageAnswerListener, CallbackLis
|
|||||||
* Constants
|
* Constants
|
||||||
*/
|
*/
|
||||||
const PLUGIN_ID = 223;
|
const PLUGIN_ID = 223;
|
||||||
const PLUGIN_VERSION = 0.3;
|
const PLUGIN_VERSION = 0.4;
|
||||||
const PLUGIN_NAME = 'MatchManager Pick & Ban';
|
const PLUGIN_NAME = 'MatchManager Pick & Ban';
|
||||||
const PLUGIN_AUTHOR = 'Beu';
|
const PLUGIN_AUTHOR = 'Beu';
|
||||||
|
|
||||||
@@ -55,6 +56,8 @@ class MatchManagerPickAndBan implements ManialinkPageAnswerListener, CallbackLis
|
|||||||
const ML_STEP_OPENSETTINGS = 'MatchManagerSuite\MatchManagerPickAndBan.OpenSettings';
|
const ML_STEP_OPENSETTINGS = 'MatchManagerSuite\MatchManagerPickAndBan.OpenSettings';
|
||||||
const ML_STEP_MAPCHOOSENREGEX = '/^MatchManagerPickAndBan_MapChoosen:.*/';
|
const ML_STEP_MAPCHOOSENREGEX = '/^MatchManagerPickAndBan_MapChoosen:.*/';
|
||||||
|
|
||||||
|
const CALLBACK_PICKANDBANINFO = 'Trackmania.MatchManager.PickAndBanInfo';
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Private properties
|
* Private properties
|
||||||
*/
|
*/
|
||||||
@@ -63,7 +66,7 @@ class MatchManagerPickAndBan implements ManialinkPageAnswerListener, CallbackLis
|
|||||||
private MatchManagerPickAndBan_State $state;
|
private MatchManagerPickAndBan_State $state;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param \ManiaControl\ManiaControl $maniaControl
|
* @param ManiaControl $maniaControl
|
||||||
* @see \ManiaControl\Plugins\Plugin::prepare()
|
* @see \ManiaControl\Plugins\Plugin::prepare()
|
||||||
*/
|
*/
|
||||||
public static function prepare(ManiaControl $maniaControl) {
|
public static function prepare(ManiaControl $maniaControl) {
|
||||||
@@ -105,7 +108,7 @@ class MatchManagerPickAndBan implements ManialinkPageAnswerListener, CallbackLis
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param \ManiaControl\ManiaControl $maniaControl
|
* @param ManiaControl $maniaControl
|
||||||
* @return bool
|
* @return bool
|
||||||
* @see \ManiaControl\Plugins\Plugin::load()
|
* @see \ManiaControl\Plugins\Plugin::load()
|
||||||
*/
|
*/
|
||||||
@@ -135,6 +138,7 @@ class MatchManagerPickAndBan implements ManialinkPageAnswerListener, CallbackLis
|
|||||||
$this->maniaControl->getManialinkManager()->registerManialinkPageAnswerRegexListener(self::ML_STEP_MAPCHOOSENREGEX, $this, 'handleStepMapChoosen');
|
$this->maniaControl->getManialinkManager()->registerManialinkPageAnswerRegexListener(self::ML_STEP_MAPCHOOSENREGEX, $this, 'handleStepMapChoosen');
|
||||||
$this->maniaControl->getCallbackManager()->registerCallbackListener(Callbacks::AFTERINIT, $this, 'handleAfterInit');
|
$this->maniaControl->getCallbackManager()->registerCallbackListener(Callbacks::AFTERINIT, $this, 'handleAfterInit');
|
||||||
$this->maniaControl->getCallbackManager()->registerCallbackListener(PluginManager::CB_PLUGIN_LOADED, $this, 'handlePluginLoaded');
|
$this->maniaControl->getCallbackManager()->registerCallbackListener(PluginManager::CB_PLUGIN_LOADED, $this, 'handlePluginLoaded');
|
||||||
|
$this->maniaControl->getCallbackManager()->registerCallbackListener(CallbackManager::CB_MP_BEGINMAP, $this, 'handleBeginMapCallback');
|
||||||
$this->maniaControl->getCallbackManager()->registerCallbackListener($this->MatchManagerCore::CB_MATCHMANAGER_ENDMATCH, $this, 'handleEndMatch');
|
$this->maniaControl->getCallbackManager()->registerCallbackListener($this->MatchManagerCore::CB_MATCHMANAGER_ENDMATCH, $this, 'handleEndMatch');
|
||||||
$this->maniaControl->getCallbackManager()->registerCallbackListener($this->MatchManagerCore::CB_MATCHMANAGER_STOPMATCH, $this, 'handleEndMatch');
|
$this->maniaControl->getCallbackManager()->registerCallbackListener($this->MatchManagerCore::CB_MATCHMANAGER_STOPMATCH, $this, 'handleEndMatch');
|
||||||
|
|
||||||
@@ -143,6 +147,7 @@ class MatchManagerPickAndBan implements ManialinkPageAnswerListener, CallbackLis
|
|||||||
$this->updateAdminUIMenuItems();
|
$this->updateAdminUIMenuItems();
|
||||||
|
|
||||||
$this->sendStateToPlayers();
|
$this->sendStateToPlayers();
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -261,10 +266,34 @@ class MatchManagerPickAndBan implements ManialinkPageAnswerListener, CallbackLis
|
|||||||
$this->state->steps[$this->state->stepIndex]->login = "";
|
$this->state->steps[$this->state->stepIndex]->login = "";
|
||||||
$this->manageStep();
|
$this->manageStep();
|
||||||
} else {
|
} else {
|
||||||
|
$this->maniaControl->getChat()->sendSuccess("Pick & ban are over");
|
||||||
$this->log("Pick & ban are over");
|
$this->log("Pick & ban are over");
|
||||||
|
|
||||||
|
foreach ($this->state->steps as $step) {
|
||||||
|
$mapName = array_key_exists($step->mapUid, $this->state->maps) ? $this->state->maps[$step->mapUid]->name : $step->mapUid;
|
||||||
|
|
||||||
|
if ($step->login === "") {
|
||||||
|
if ($step->type === MatchManagerPickAndBan_Step::STEP_PICK) {
|
||||||
|
$this->log('"' . $mapName . '" picked randomly');
|
||||||
|
} else if ($step->type === MatchManagerPickAndBan_Step::STEP_BAN) {
|
||||||
|
$this->log('"' . $mapName . '" banned randomly');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$player = $this->maniaControl->getPlayerManager()->getPlayer($step->login);
|
||||||
|
$name = $player !== null ? $player->nickname : $step->login;
|
||||||
|
|
||||||
|
if ($step->type === MatchManagerPickAndBan_Step::STEP_PICK) {
|
||||||
|
$this->log('"' . $mapName . '" picked by "' . $name . '"');
|
||||||
|
} else if ($step->type === MatchManagerPickAndBan_Step::STEP_BAN) {
|
||||||
|
$this->log('"' . $mapName . '" banned by "' . $name . '"');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$this->state->status = MatchManagerPickAndBan_State::STATUS_COMPLETED;
|
$this->state->status = MatchManagerPickAndBan_State::STATUS_COMPLETED;
|
||||||
$this->clearManialinks();
|
$this->clearManialinks();
|
||||||
$this->sendStateToProduction();
|
$this->sendStateToProduction();
|
||||||
|
$this->sendCallbackToServer();
|
||||||
|
|
||||||
if ($this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_STARTMATCHAUTOMATICALLY)) {
|
if ($this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_STARTMATCHAUTOMATICALLY)) {
|
||||||
$this->log("Automatically starting the match");
|
$this->log("Automatically starting the match");
|
||||||
@@ -322,6 +351,10 @@ class MatchManagerPickAndBan implements ManialinkPageAnswerListener, CallbackLis
|
|||||||
$this->manageStep();
|
$this->manageStep();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function handleBeginMapCallback() {
|
||||||
|
if ($this->state->status !== MatchManagerPickAndBan_State::STATUS_COMPLETED) return;
|
||||||
|
$this->sendCallbackToServer();
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* handle MatchManagerCore Can Start Match callback
|
* handle MatchManagerCore Can Start Match callback
|
||||||
*/
|
*/
|
||||||
@@ -808,7 +841,7 @@ main() {
|
|||||||
|
|
||||||
if (Last_Timer_Update < Now) {
|
if (Last_Timer_Update < Now) {
|
||||||
Last_Timer_Update = Now + 100;
|
Last_Timer_Update = Now + 100;
|
||||||
if (MatchManagerPickAndBan_State.startTimestamp != 0 && MatchManagerPickAndBan_State.endTimestamp != 0) {
|
if (MatchManagerPickAndBan_State.startTimestamp != 0 && MatchManagerPickAndBan_State.endTimestamp != 0 && MatchManagerPickAndBan_State.startTimestamp != MatchManagerPickAndBan_State.endTimestamp) {
|
||||||
declare Integer RemainingTime = ML::Max(MatchManagerPickAndBan_State.endTimestamp - TL::ToInteger(TiL::GetCurrent()), 0);
|
declare Integer RemainingTime = ML::Max(MatchManagerPickAndBan_State.endTimestamp - TL::ToInteger(TiL::GetCurrent()), 0);
|
||||||
Label_Timer.Value = ""^ RemainingTime;
|
Label_Timer.Value = ""^ RemainingTime;
|
||||||
declare Real Width = RemainingTime * 232. / (MatchManagerPickAndBan_State.endTimestamp - MatchManagerPickAndBan_State.startTimestamp);
|
declare Real Width = RemainingTime * 232. / (MatchManagerPickAndBan_State.endTimestamp - MatchManagerPickAndBan_State.startTimestamp);
|
||||||
@@ -883,14 +916,40 @@ main() {
|
|||||||
|
|
||||||
$asyncHttpRequest->setCallable(function ($data, $error, $headers){
|
$asyncHttpRequest->setCallable(function ($data, $error, $headers){
|
||||||
if ($error) {
|
if ($error) {
|
||||||
Logger::logError('Error when sending state: '. $error);
|
$this->logError('Error when sending state: '. $error);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Logger::log('Succesfully sent the state to the Production API');
|
$this->log('Succesfully sent the state to the Production API');
|
||||||
});
|
});
|
||||||
$asyncHttpRequest->postData();
|
$asyncHttpRequest->postData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function sendCallbackToServer(): void {
|
||||||
|
$callbackPayload = [
|
||||||
|
"Picks" => [],
|
||||||
|
"Bans" => []
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach ($this->state->steps as $step) {
|
||||||
|
if ($step->login === "") {
|
||||||
|
if ($step->type === MatchManagerPickAndBan_Step::STEP_PICK) {
|
||||||
|
$callbackPayload["Picks"][$step->mapUid] = "";
|
||||||
|
} else if ($step->type === MatchManagerPickAndBan_Step::STEP_BAN) {
|
||||||
|
$callbackPayload["Bans"][$step->mapUid] = "";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if ($step->type === MatchManagerPickAndBan_Step::STEP_PICK) {
|
||||||
|
$callbackPayload['Picks'][$step->mapUid] = $this->getAccountId($step->login);
|
||||||
|
} else if ($step->type === MatchManagerPickAndBan_Step::STEP_BAN) {
|
||||||
|
$callbackPayload['Bans'][$step->mapUid] = $this->getAccountId($step->login);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->log('Sending callback to the server');
|
||||||
|
$this->maniaControl->getClient()->triggerModeScriptEvent(self::CALLBACK_PICKANDBANINFO, [json_encode($callbackPayload)]);
|
||||||
|
}
|
||||||
|
|
||||||
private function clearManialinks() {
|
private function clearManialinks() {
|
||||||
$this->maniaControl->getManialinkManager()->hideManialink(self::getShortClassName() . ':UI');
|
$this->maniaControl->getManialinkManager()->hideManialink(self::getShortClassName() . ':UI');
|
||||||
$this->maniaControl->getManialinkManager()->hideManialink(self::getShortClassName() . ':State');
|
$this->maniaControl->getManialinkManager()->hideManialink(self::getShortClassName() . ':State');
|
||||||
@@ -925,6 +984,17 @@ main() {
|
|||||||
private static function getShortClassName(): string {
|
private static function getShortClassName(): string {
|
||||||
return (new \ReflectionClass(static::class))->getShortName();
|
return (new \ReflectionClass(static::class))->getShortName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function getAccountId(string $login) {
|
||||||
|
if (strlen($login) !== 22) return $login;
|
||||||
|
|
||||||
|
$login = str_pad($login, 24, "=", STR_PAD_RIGHT);
|
||||||
|
|
||||||
|
$login = str_replace("_","/", str_replace("-","+", $login));
|
||||||
|
$login = base64_decode($login);
|
||||||
|
|
||||||
|
return vsprintf("%s%s-%s-%s-%s-%s%s%s", str_split(bin2hex($login), 4));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class MatchManagerPickAndBan_State {
|
class MatchManagerPickAndBan_State {
|
||||||
|
|||||||
Reference in New Issue
Block a user