Compare commits
10
Commits
ac1459fb55
..
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d21a36d5aa | ||
|
|
5594f91d5b | ||
|
|
483ddd950f | ||
|
|
00ae308e45 | ||
|
|
9690a3beaa | ||
|
|
0bc95fda44 | ||
|
|
c80f3a46ae | ||
|
|
afade8304e | ||
|
|
eff2d8506c | ||
|
|
aeed2f341b |
@@ -4,8 +4,10 @@ namespace MatchManagerSuite;
|
||||
|
||||
use Exception;
|
||||
use ManiaControl\Callbacks\CallbackListener;
|
||||
use ManiaControl\Callbacks\CallbackManager;
|
||||
use ManiaControl\Callbacks\Callbacks;
|
||||
use ManiaControl\Callbacks\TimerListener;
|
||||
use ManiaControl\Files\AsyncHttpRequest;
|
||||
use ManiaControl\Logger;
|
||||
use ManiaControl\ManiaControl;
|
||||
use ManiaControl\Manialinks\ManialinkPageAnswerListener;
|
||||
@@ -31,7 +33,7 @@ class MatchManagerPickAndBan implements ManialinkPageAnswerListener, CallbackLis
|
||||
* Constants
|
||||
*/
|
||||
const PLUGIN_ID = 223;
|
||||
const PLUGIN_VERSION = 0.1;
|
||||
const PLUGIN_VERSION = 0.4;
|
||||
const PLUGIN_NAME = 'MatchManager Pick & Ban';
|
||||
const PLUGIN_AUTHOR = 'Beu';
|
||||
|
||||
@@ -41,15 +43,21 @@ class MatchManagerPickAndBan implements ManialinkPageAnswerListener, CallbackLis
|
||||
const SETTING_ENABLE = 'Enable pick & ban';
|
||||
const SETTING_STEPCONFIG = 'Step config';
|
||||
const SETTING_STEPDURATION = 'Step duration';
|
||||
const SETTING_DURATIONAFTERTHELASTSTEP = 'Duration after the last step';
|
||||
const SETTING_STARTMATCHAUTOMATICALLY = 'Start match automatically after the end of the pick & ban';
|
||||
const SETTING_PRODUCTIONAPIURL = 'Production API URL';
|
||||
|
||||
|
||||
// Other MatchManager plugin
|
||||
const MATCHMANAGERCORE_PLUGIN = 'MatchManagerSuite\MatchManagerCore';
|
||||
const MATCHMANAGERADMINUI_PLUGIN = 'MatchManagerSuite\MatchManagerAdminUI';
|
||||
|
||||
// Steps
|
||||
const ML_STEP_OPENSETTINGS = 'MatchManagerSuite\MatchManagerPickAndBan.OpenSettings';
|
||||
const ML_STEP_OPENSETTINGS = 'MatchManagerSuite\MatchManagerPickAndBan.OpenSettings';
|
||||
const ML_STEP_MAPCHOOSENREGEX = '/^MatchManagerPickAndBan_MapChoosen:.*/';
|
||||
|
||||
const CALLBACK_PICKANDBANINFO = 'Trackmania.MatchManager.PickAndBanInfo';
|
||||
|
||||
/*
|
||||
* Private properties
|
||||
*/
|
||||
@@ -58,7 +66,7 @@ class MatchManagerPickAndBan implements ManialinkPageAnswerListener, CallbackLis
|
||||
private MatchManagerPickAndBan_State $state;
|
||||
|
||||
/**
|
||||
* @param \ManiaControl\ManiaControl $maniaControl
|
||||
* @param ManiaControl $maniaControl
|
||||
* @see \ManiaControl\Plugins\Plugin::prepare()
|
||||
*/
|
||||
public static function prepare(ManiaControl $maniaControl) {
|
||||
@@ -100,7 +108,7 @@ class MatchManagerPickAndBan implements ManialinkPageAnswerListener, CallbackLis
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \ManiaControl\ManiaControl $maniaControl
|
||||
* @param ManiaControl $maniaControl
|
||||
* @return bool
|
||||
* @see \ManiaControl\Plugins\Plugin::load()
|
||||
*/
|
||||
@@ -119,14 +127,18 @@ class MatchManagerPickAndBan implements ManialinkPageAnswerListener, CallbackLis
|
||||
|
||||
// Settings
|
||||
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_ENABLE, true, '', 0);
|
||||
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_STEPCONFIG, '', '', 0);
|
||||
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_STEPDURATION, 60, '', 0);
|
||||
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_STEPCONFIG, '', '', 100);
|
||||
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_STEPDURATION, 60, '',100);
|
||||
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_DURATIONAFTERTHELASTSTEP, 30, '', 150);
|
||||
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_STARTMATCHAUTOMATICALLY, true, '', 150);
|
||||
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_PRODUCTIONAPIURL, '', '', 200);
|
||||
|
||||
// Callbacks
|
||||
$this->maniaControl->getManialinkManager()->registerManialinkPageAnswerListener(self::ML_STEP_OPENSETTINGS, $this, 'handleStepOpenSettings');
|
||||
$this->maniaControl->getManialinkManager()->registerManialinkPageAnswerRegexListener(self::ML_STEP_MAPCHOOSENREGEX, $this, 'handleStepMapChoosen');
|
||||
$this->maniaControl->getCallbackManager()->registerCallbackListener(Callbacks::AFTERINIT, $this, 'handleAfterInit');
|
||||
$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_STOPMATCH, $this, 'handleEndMatch');
|
||||
|
||||
@@ -135,6 +147,7 @@ class MatchManagerPickAndBan implements ManialinkPageAnswerListener, CallbackLis
|
||||
$this->updateAdminUIMenuItems();
|
||||
|
||||
$this->sendStateToPlayers();
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -228,8 +241,13 @@ class MatchManagerPickAndBan implements ManialinkPageAnswerListener, CallbackLis
|
||||
}
|
||||
|
||||
$this->state->startTimestamp = time();
|
||||
$this->state->endTimestamp = time() + $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_STEPDURATION);
|
||||
if ($this->state->stepIndex >= count($this->state->steps)) {
|
||||
$this->state->endTimestamp = time() + $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_DURATIONAFTERTHELASTSTEP);
|
||||
} else {
|
||||
$this->state->endTimestamp = time() + $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_STEPDURATION);
|
||||
}
|
||||
|
||||
$this->sendStateToProduction();
|
||||
$this->sendStateToPlayers();
|
||||
}
|
||||
|
||||
@@ -248,10 +266,39 @@ class MatchManagerPickAndBan implements ManialinkPageAnswerListener, CallbackLis
|
||||
$this->state->steps[$this->state->stepIndex]->login = "";
|
||||
$this->manageStep();
|
||||
} else {
|
||||
$this->log("Start match");
|
||||
$this->maniaControl->getChat()->sendSuccess("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->MatchManagerCore->MatchStart();
|
||||
$this->clearManialinks();
|
||||
$this->sendStateToProduction();
|
||||
$this->sendCallbackToServer();
|
||||
|
||||
if ($this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_STARTMATCHAUTOMATICALLY)) {
|
||||
$this->log("Automatically starting the match");
|
||||
$this->MatchManagerCore->MatchStart();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -304,6 +351,10 @@ class MatchManagerPickAndBan implements ManialinkPageAnswerListener, CallbackLis
|
||||
$this->manageStep();
|
||||
}
|
||||
|
||||
public function handleBeginMapCallback() {
|
||||
if ($this->state->status !== MatchManagerPickAndBan_State::STATUS_COMPLETED) return;
|
||||
$this->sendCallbackToServer();
|
||||
}
|
||||
/**
|
||||
* handle MatchManagerCore Can Start Match callback
|
||||
*/
|
||||
@@ -460,7 +511,7 @@ class MatchManagerPickAndBan implements ManialinkPageAnswerListener, CallbackLis
|
||||
<label id="label-step" class="text" pos="0 -2.3" size="75 8" halign="center" valign="center" textsize="3" textprefix="$t$s" text="Banned By CARLJR."/>
|
||||
</frame>
|
||||
</framemodel>
|
||||
<frame id="frame-global" hidden="1">
|
||||
<frame id="frame-global" hidden="1" z-index="50">
|
||||
<quad size="320 180" fullscreen="1" halign="center" valign="center" image="file://Media/Manialinks/Nadeo/Trackmania/Menus/PageProfile/UI_profile_background_map_gradients.dds"/>
|
||||
<frame pos="-160 0">
|
||||
<label class="text" pos="116 80" halign="center" textsize="10" text="Pick & Ban"/>
|
||||
@@ -478,6 +529,7 @@ class MatchManagerPickAndBan implements ManialinkPageAnswerListener, CallbackLis
|
||||
<frameinstance modelid="framemodel-map" hidden="1"/>
|
||||
<frameinstance modelid="framemodel-map" hidden="1"/>
|
||||
</frame>
|
||||
<label id="label-current-action" class="text" pos="116 -68" size="200 8" halign="center" textsize="5" text=""/>
|
||||
<label id="label-timer" class="text" pos="116 -77" halign="center" textsize="8" text=""/>
|
||||
<quad pos="116 -88" size="232 2" halign="center" bgcolor="ffffff" opacity="0.4"/>
|
||||
<quad id="quad-timer" pos="116 -88" size="0 2" halign="center" bgcolor="ffffff"/>
|
||||
@@ -505,6 +557,7 @@ class MatchManagerPickAndBan implements ManialinkPageAnswerListener, CallbackLis
|
||||
#Include "TextLib" as TL
|
||||
#Include "TimeLib" as TiL
|
||||
|
||||
#Include "Libs/Nadeo/CMGame/Utils/Task@2.Script.txt" as Task
|
||||
#Include "Libs/Nadeo/CMGame/Utils/Tools.Script.txt" as Tools
|
||||
#Include "Libs/Nadeo/Trackmania/Stores/UserStore_ML.Script.txt" as UserStore
|
||||
|
||||
@@ -518,6 +571,9 @@ class MatchManagerPickAndBan implements ManialinkPageAnswerListener, CallbackLis
|
||||
#Const C_Color_Gray <.7, .7, .7>
|
||||
#Const C_Color_Reset <-1., -1., -1.>
|
||||
|
||||
#Const C_CooldownDuration 1000
|
||||
#Const C_MaxAccountIdsPerTask 150 //< Asking for more at one time will create an http error 414 URI Too Long
|
||||
|
||||
'. $this->getManialinkStructures() . '
|
||||
|
||||
Void Focus(CMlFrame _Frame) {
|
||||
@@ -539,6 +595,7 @@ main() {
|
||||
declare CMlFrame Frame_Maps <=> (Frame_Global.GetFirstChild("frame-maps") as CMlFrame);
|
||||
declare CMlFrame Frame_Steps <=> (Frame_Global.GetFirstChild("frame-steps") as CMlFrame);
|
||||
declare CMlLabel Label_Timer <=> (Frame_Global.GetFirstChild("label-timer") as CMlLabel);
|
||||
declare CMlLabel Label_CurrentAction <=> (Frame_Global.GetFirstChild("label-current-action") as CMlLabel);
|
||||
declare CMlQuad Quad_Timer <=> (Frame_Global.GetFirstChild("quad-timer") as CMlQuad);
|
||||
|
||||
wait(InputPlayer != Null);
|
||||
@@ -547,13 +604,26 @@ main() {
|
||||
declare Integer MatchManagerPickAndBan_State_Serial for This;
|
||||
declare Integer Last_State_Serial = -1;
|
||||
|
||||
declare Integer Last_Timer_Update ;
|
||||
declare Integer Last_Timer_Update;
|
||||
|
||||
declare Task::K_Task Task_RetrievingName;
|
||||
declare Integer Cooldown;
|
||||
declare Text[] PendingAccountIds;
|
||||
declare Text[] RequestingAccountIds;
|
||||
|
||||
declare Boolean UpdateNow;
|
||||
|
||||
while(True) {
|
||||
yield;
|
||||
|
||||
if (Last_State_Serial != MatchManagerPickAndBan_State_Serial) {
|
||||
Last_State_Serial = MatchManagerPickAndBan_State_Serial;
|
||||
log("New state " ^ MatchManagerPickAndBan_State);
|
||||
UpdateNow = True;
|
||||
}
|
||||
|
||||
if (UpdateNow) {
|
||||
UpdateNow = False;
|
||||
log("Updating interface");
|
||||
|
||||
Frame_Global.Visible = (MatchManagerPickAndBan_State.status == C_Status_InProgress);
|
||||
if (Frame_Global.Visible) {
|
||||
@@ -638,11 +708,54 @@ main() {
|
||||
} else {
|
||||
Label_Step.Value = "Random pick";
|
||||
}
|
||||
if (MatchManagerPickAndBan_State.stepIndex == Index) {
|
||||
Label_CurrentAction.Value = "";
|
||||
}
|
||||
} else if (Step.type == C_StepType_Ban) {
|
||||
Label_Step.Value = "Ban by "^ UserStore::GetUserMgrPlayerName(Step.login);
|
||||
declare Text DisplayName = UserStore::GetUserMgrPlayerName(Step.login);
|
||||
if (DisplayName == "") {
|
||||
Label_Step.Value = "Ban by "^ Step.login;
|
||||
if (!PendingAccountIds.exists(Step.login)) {
|
||||
PendingAccountIds.add(Step.login);
|
||||
}
|
||||
if (MatchManagerPickAndBan_State.stepIndex == Index) {
|
||||
Label_CurrentAction.Value = "";
|
||||
}
|
||||
} else {
|
||||
Label_Step.Value = "Ban by "^ DisplayName;
|
||||
if (MatchManagerPickAndBan_State.stepIndex == Index) {
|
||||
if (Step.login == InputPlayer.User.Login) {
|
||||
Label_CurrentAction.Value = "You have to ban a map";
|
||||
System.FlashWindow();
|
||||
} else {
|
||||
Label_CurrentAction.Value = DisplayName ^" has to ban a map";
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Label_Step.Value = "Pick by "^ UserStore::GetUserMgrPlayerName(Step.login);
|
||||
declare Text DisplayName = UserStore::GetUserMgrPlayerName(Step.login);
|
||||
if (DisplayName == "") {
|
||||
Label_Step.Value = "Pick by "^ Step.login;
|
||||
if (!PendingAccountIds.exists(Step.login)) {
|
||||
PendingAccountIds.add(Step.login);
|
||||
}
|
||||
if (MatchManagerPickAndBan_State.stepIndex == Index) {
|
||||
Label_CurrentAction.Value = "";
|
||||
}
|
||||
} else {
|
||||
Label_Step.Value = "Pick by "^ DisplayName;
|
||||
if (MatchManagerPickAndBan_State.stepIndex == Index) {
|
||||
if (Step.login == InputPlayer.User.Login) {
|
||||
Label_CurrentAction.Value = "You have to pick a map";
|
||||
System.FlashWindow();
|
||||
} else {
|
||||
Label_CurrentAction.Value = DisplayName ^" has to pick a map";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
log(Label_CurrentAction.Value );
|
||||
log(MatchManagerPickAndBan_State.stepIndex ^"=="^ Index);
|
||||
} else {
|
||||
Frame_MapName.Visible = True;
|
||||
Label_Step.RelativePosition_V3.Y = -2.3;
|
||||
@@ -664,15 +777,36 @@ main() {
|
||||
Quad_MapThumbnail.Colorize = C_Color_Reset;
|
||||
}
|
||||
} else if (Step.type == C_StepType_Ban) {
|
||||
Label_Step.Value = "Banned by "^ UserStore::GetUserMgrPlayerName(Step.login);
|
||||
declare Text DisplayName = UserStore::GetUserMgrPlayerName(Step.login);
|
||||
if (DisplayName == "") {
|
||||
Label_Step.Value = "Ban by "^ Step.login;
|
||||
if (!PendingAccountIds.exists(Step.login)) {
|
||||
PendingAccountIds.add(Step.login);
|
||||
}
|
||||
} else {
|
||||
Label_Step.Value = "Ban by "^ DisplayName;
|
||||
}
|
||||
Quad_MapThumbnail.Colorize = C_Color_White;
|
||||
} else {
|
||||
Label_Step.Value = "Picked by "^ UserStore::GetUserMgrPlayerName(Step.login);
|
||||
declare Text DisplayName = UserStore::GetUserMgrPlayerName(Step.login);
|
||||
if (DisplayName == "") {
|
||||
Label_Step.Value = "Pick by "^ Step.login;
|
||||
if (!PendingAccountIds.exists(Step.login)) {
|
||||
PendingAccountIds.add(Step.login);
|
||||
}
|
||||
} else {
|
||||
Label_Step.Value = "Pick by "^ DisplayName;
|
||||
}
|
||||
Quad_MapThumbnail.Colorize = C_Color_Reset;
|
||||
}
|
||||
|
||||
if (MatchManagerPickAndBan_State.stepIndex == Index || MatchManagerPickAndBan_State.stepIndex >= StepsCount) {
|
||||
Label_CurrentAction.Value = "";
|
||||
}
|
||||
}
|
||||
|
||||
Tools::FitLabelValue(Label_Step, 3., 1., 0.25);
|
||||
Tools::FitLabelValue(Label_CurrentAction, 5., 3., 0.25);
|
||||
Index += 1;
|
||||
}
|
||||
while (Frame_Steps.Controls.existskey(Index)) {
|
||||
@@ -707,7 +841,7 @@ main() {
|
||||
|
||||
if (Last_Timer_Update < Now) {
|
||||
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);
|
||||
Label_Timer.Value = ""^ RemainingTime;
|
||||
declare Real Width = RemainingTime * 232. / (MatchManagerPickAndBan_State.endTimestamp - MatchManagerPickAndBan_State.startTimestamp);
|
||||
@@ -719,6 +853,27 @@ main() {
|
||||
}
|
||||
}
|
||||
|
||||
if (Task::IsProcessing(Task_RetrievingName)) {
|
||||
Task_RetrievingName = Task::Update(UserMgr, UserMgr, Task_RetrievingName);
|
||||
|
||||
if (!Task::IsProcessing(Task_RetrievingName)) {
|
||||
log("Ending RetrieveNames Task_RetrievingName for: "^ RequestingAccountIds);
|
||||
Task_RetrievingName = Task::Destroy(UserMgr, UserMgr, Task_RetrievingName);
|
||||
|
||||
UpdateNow = True;
|
||||
}
|
||||
} else if (PendingAccountIds.count > 0 && Cooldown <= Now) {
|
||||
RequestingAccountIds = PendingAccountIds.slice(0, C_MaxAccountIdsPerTask);
|
||||
PendingAccountIds = PendingAccountIds.slice(C_MaxAccountIdsPerTask);
|
||||
Task_RetrievingName = Task::DestroyAndCreate(
|
||||
UserMgr,
|
||||
UserMgr,
|
||||
Task_RetrievingName,
|
||||
UserMgr.RetrieveDisplayName(UserMgr.MainUser.Id, RequestingAccountIds)
|
||||
);
|
||||
log("Starting RetrieveNames Task_RetrievingName for: "^ RequestingAccountIds);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
--></script>
|
||||
@@ -749,6 +904,52 @@ main() {
|
||||
$this->maniaControl->getManialinkManager()->sendManialink($manialink);
|
||||
}
|
||||
|
||||
private function sendStateToProduction(): void {
|
||||
$url = $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_PRODUCTIONAPIURL);
|
||||
if ($url === '') return;
|
||||
|
||||
$this->log('Sending state to the API');
|
||||
|
||||
$asyncHttpRequest = new AsyncHttpRequest($this->maniaControl, $url);
|
||||
$asyncHttpRequest->setContentType(AsyncHttpRequest::CONTENT_TYPE_JSON);
|
||||
$asyncHttpRequest->setContent(json_encode($this->state));
|
||||
|
||||
$asyncHttpRequest->setCallable(function ($data, $error, $headers){
|
||||
if ($error) {
|
||||
$this->logError('Error when sending state: '. $error);
|
||||
return;
|
||||
}
|
||||
$this->log('Succesfully sent the state to the Production API');
|
||||
});
|
||||
$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() {
|
||||
$this->maniaControl->getManialinkManager()->hideManialink(self::getShortClassName() . ':UI');
|
||||
$this->maniaControl->getManialinkManager()->hideManialink(self::getShortClassName() . ':State');
|
||||
@@ -783,6 +984,17 @@ main() {
|
||||
private static function getShortClassName(): string {
|
||||
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 {
|
||||
|
||||
Reference in New Issue
Block a user