Skip to content

Commit

Permalink
feat: init pb cps times
Browse files Browse the repository at this point in the history
fix: map settings not updating after skip
  • Loading branch information
Ahmad committed Aug 3, 2023
1 parent 69a7e1e commit 4673de1
Show file tree
Hide file tree
Showing 6 changed files with 124 additions and 24 deletions.
27 changes: 25 additions & 2 deletions Scripts/Libs/ahmad3/UI/MlAuth.Script.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
CONSTANTS
*********************************************/

#Const Version "2023-07-21"
#Const Version "2023-08-02"
#Const ScriptName "MlAuth.Script.txt"

#Const C_AuthMessage """We are about to refresh your personal tokens.
Expand Down Expand Up @@ -371,7 +371,6 @@ Void Private_PlayerFinished(Integer _LastRun, Integer _RespawnCount, Integer[] _
// Update player infos
Void Private_UpdatePlayer() {
declare body = K_UpdatePlayerBody {
login = InputPlayer.User.Login,
name = InputPlayer.User.Name,
zone_path = InputPlayer.User.ZonePath
};
Expand All @@ -393,11 +392,33 @@ Void Private_UpdatePlayer() {
declare err = Error_Handle(req.StatusCode, req.Result);
SendCustomEvent("ban:update", [InputPlayer.User.Login, err.ban.tojson()]);
UI.SendChat(err.message);
OnError();
}

Http.Destroy(Http.Requests[Req]);
}

Void InitPbCpsTimes() {
declare persistent ObsStore_UserToken for LocalUser = "";

declare Url = "{{{Constants::C_HostUrl}}}player/pb?map_uid="^Map.Id;
declare Req = Http.CreateGet(Url, True, "Accept: application/json\nPlayerLogin: " ^ InputPlayer.User.Login ^ "\nAuthorization: " ^ ObsStore_UserToken);

ClientUI.UISequence = CUIConfig::EUISequence::UIInteraction;
wait(Req.IsCompleted);
ClientUI.UISequence = CUIConfig::EUISequence::None;

if (Req.StatusCode != 200) {
declare Err = Error_Handle(Req.StatusCode, Req.Result);
UI.SendChat(Err.message);
OnError();
} else {
SendCustomEvent("cptimes:init", [InputPlayer.User.Login, Req.Result]);
}

Http.Destroy(Req);
}

// Returns true if the user has Openplanet installed
Boolean HasOpenplanet() {
return TL::RegexFind("^Openplanet ", System.ExtraTool_Info, "").count == 1;
Expand Down Expand Up @@ -448,6 +469,8 @@ main() {
declare netread Integer[] _LastCPTimes for UI;
declare LastRun_Cache = _LastRun;
declare RespawnCount_Cache = _RespawnCount;

InitPbCpsTimes();

while (True) {
yield;
Expand Down
39 changes: 39 additions & 0 deletions Scripts/Libs/smokegun/CPTimes.Script.txt
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,10 @@ Text Private_GetWidget() {
<quad id="Quad_Selector" pos="-82.5 44.5" z-index="0" size="14 6" bgcolor="FFFFFF33" halign="center" valign="center"/>
<quad pos="-90 48" z-index="0" size="30 7" bgcolor="000000AA"/>
</frame>
<frame id="Frame_CPTimes_Reset" pos="72 45">
<label pos="0 0" size="30 7" text="Reset my times" textcolor="FFFFFFFF" maxline="1" halign="center" textfont="Oswald" textsize="3" style="TextTitle3" textemboss="1" valign="center" />
<quad id="Label_CPTimes_Reset" halign="center" valign="center" z-index="0" size="30 7" style="BgRaceScore2" substyle="BgCardPlayer" scriptevents="1" />
</frame>
<label pos="0 39" size="100 10" text="Checkpoints Times" textcolor="FFFFFFFF" maxline="1" halign="center" valign="bottom" textfont="Oswald" textsize="9" style="TextTitle3" textemboss="1"/>
<quad pos="0 40" z-index="-1" size="220 0.5" bgcolor="000000AA" halign="center"/>
</frame>
Expand Down Expand Up @@ -261,6 +265,9 @@ Text GetLayer() {
case "prev_button": {
ChangePage(-1);
}
case "Label_CPTimes_Reset": {
SendCustomEvent("cpstimes:reset", [LocalUser.Login]);
}
}
}
}
Expand Down Expand Up @@ -296,6 +303,38 @@ Text GetLayer() {
""";
}

Void ResetLayer(CSmPlayer _Player, Integer _CpsNumber) {
declare netwrite SCPTotalTime[][] Net_CPTotalTimes for Teams[0];
declare netwrite SCPDeltaTime[][] Net_CPDeltaTimes for Teams[0];

for (I, 0, _CpsNumber) {
// Remove line from total times
declare ToRemove = -1;
foreach (iCPTime => CPTime in Net_CPTotalTimes[I]) {
if (CPTime.Login == _Player.User.Login) {
ToRemove = iCPTime;
}
}
if (ToRemove >= 0) {
declare Removed = Net_CPTotalTimes[I].removekey(ToRemove);
}

// Remove line from delta times
ToRemove = -1;
foreach (iCPTime => CPTime in Net_CPDeltaTimes[I]) {
if (CPTime.Login == _Player.User.Login) {
ToRemove = iCPTime;
}
}
if (ToRemove >= 0) {
declare Removed = Net_CPDeltaTimes[I].removekey(ToRemove);
}
}

declare netwrite Integer Net_CPTimesUpdated for Teams[0] = 0;
Net_CPTimesUpdated = Now;
}

Void UpdateLayer(CSmPlayer _Player) {
declare TimeToSub = 0;
declare LastCPTimes = Player::getBestCPTimes(_Player);
Expand Down
12 changes: 6 additions & 6 deletions Scripts/Libs/smokegun/ObstacleLib.Script.txt
Original file line number Diff line number Diff line change
Expand Up @@ -368,7 +368,7 @@ Void Private_SendFinishedRun(CSmPlayer _Player, Integer _Run, Ident _GoalId) {
*
* Arguments: CSmPlayer _Player player to update
*/
Void Private_UpdatePlayerBestTime(CSmPlayer _Player) {
Void UpdatePlayerBestTimeColumn(CSmPlayer _Player) {
if (Hud == Null || Hud.ScoresTable == Null) return;

declare cpProgress = Player::getCpProgress(_Player);
Expand All @@ -394,7 +394,7 @@ Void Private_UpdatePlayerBestTime(CSmPlayer _Player) {
*
* Arguments: CSmPlayer _Player player to update
*/
Void Private_UpdatePlayerRsCounter(CSmPlayer _Player) {
Void UpdatePlayerRsCounterColumn(CSmPlayer _Player) {
if (Hud == Null || Hud.ScoresTable == Null) return;
Hud.ScoresTable.SetColumnValue (_Player.Score, "RS", Player::getRespawnCount(_Player));
}
Expand Down Expand Up @@ -572,10 +572,10 @@ Void ObsRespawnPlayer(CSmPlayer _Player, Boolean _forceRestart) {
}


Private_UpdatePlayerBestTime(_Player); // update rs count
UpdatePlayerBestTimeColumn(_Player); // update rs count

if (Player::getBestRun(_Player) < 0) {
Private_UpdatePlayerRsCounter(_Player);
UpdatePlayerRsCounterColumn(_Player);
}

Player::clearBuffTimes(_Player);
Expand Down Expand Up @@ -785,7 +785,7 @@ Void Private_HandleFinish(CSmPlayer _Player, Ident _GoalId) {
Player::setBestRun(_Player, Time);
Player::setBestCPTimes(_Player, Player::getLastCPTimes(_Player));

Private_UpdatePlayerRsCounter(_Player);
UpdatePlayerRsCounterColumn(_Player);

CPTimes::UpdateLayer(_Player);
}
Expand Down Expand Up @@ -867,7 +867,7 @@ Void Private_HandleCheckpoint(CSmPlayer _Player, Ident _CheckpointId) {
XmlRpc.SendCallback("Obstacle_OnCheckpoint", Player::ToJSON(_Player));

// UPDATE UI
Private_UpdatePlayerBestTime(_Player);
UpdatePlayerBestTimeColumn(_Player);

declare UI <=> UIManager.GetUI(_Player);
if (_Player.Score == Null) return;
Expand Down
10 changes: 10 additions & 0 deletions Scripts/Libs/smokegun/ObstacleRecords.Script.txt
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,16 @@
Boolean reversed;
}

#Struct K_PbCpTimesResponseItem {
Integer cp_num;
Integer time;
}

#Struct K_PbResponse {
Integer rs_count;
K_PbCpTimesResponseItem[] cps_times;
}

/*********************************************
GLOBALES
*********************************************/
Expand Down
4 changes: 2 additions & 2 deletions Scripts/Libs/smokegun/UI/TimeDiff.Script.txt
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ Text GetLayer() {
declare Text CPTimes = "";
declare InitialDifference = 0;

declare netread Net_ReversedMapLB for Teams[0] = False;

while (True) {
yield;

Expand Down Expand Up @@ -124,8 +126,6 @@ Text GetLayer() {
declare netread Net_Time2 for LocalPlayer = 0;
declare netread Net_CheckpointRank for LocalPlayer = 0;

declare netread Net_ReversedMapLB for Teams[0] = False;

if (!PageIsVisible) continue;

// Hide after 3 sec
Expand Down
56 changes: 42 additions & 14 deletions Scripts/Modes/ShootMania/Obstacle.Script.txt
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
#Include "Libs/miltant/UI/JumpBack.Script.txt" as JumpBack
#Include "Libs/smokegun/UI/CpProgress.Script.txt" as CpProgress
#Include "Libs/smokegun/UI/SpectatorCount.Script.txt" as SpectatorCount
#Include "Libs/ahmad3/UI/SpecList.Script.txt" as SpecList
#Include "Libs/smokegun/UI/NextMapVote.Script.txt" as NextMapVote
#Include "Libs/smokegun/UI/RespawnBehavior.Script.txt" as RespawnBehavior
#Include "Libs/smokegun/UI/SpecKeys.Script.txt" as SpecKeys
Expand All @@ -46,6 +45,7 @@
#Include "Libs/smokegun/Score.Script.txt" as ObsScores

#Include "Libs/ahmad3/UI/MlAuth.Script.txt" as MlAuth
#Include "Libs/ahmad3/UI/SpecList.Script.txt" as SpecList
#Include "Libs/ahmad3/Ban.Script.txt" as Ban

// ---------------------------------- //
Expand Down Expand Up @@ -247,22 +247,14 @@ if (!Obstacle::PrepareMap(ModeInfo::GetName()) && Editor_WayPointSpawn_Flag == 0
MB_Private_StopMap();
}

if (Obstacle::IsLeaderboardReversed()) {
{
declare netwrite Boolean Net_ReversedMapLB for Teams[0];
Net_ReversedMapLB = True;
}
if (Obstacle::IsPvPWeaponsMap()) {
UsePvPWeapons = True;
}
if (Obstacle::IsPvPCollisionsMap()) {
UsePvPCollisions = True;
}
if (Obstacle::IsSameWallJumpMap()) {
UseSameWallJump = True;
} else {
UseSameWallJump = False;
Net_ReversedMapLB = Obstacle::IsLeaderboardReversed();
}

UsePvPWeapons = Obstacle::IsPvPWeaponsMap();
UsePvPCollisions = Obstacle::IsPvPCollisionsMap();
UseSameWallJump = Obstacle::IsSameWallJumpMap();
SpawnInvulnerabilityDuration = Obstacle::InvulnerabilityDuration();


Expand Down Expand Up @@ -373,6 +365,42 @@ foreach (Event in UIManager.PendingEvents) {
ban.fromjson(Event.CustomEventData[1]);
Player::setBanned(Player, ban);
}
case "cptimes:init": {
declare API::K_PbResponse Res;
Res.fromjson(Event.CustomEventData[1]);
// Avoid setting best run if player hasn't saved any record yet
if (Res.cps_times.count == 0) continue;

declare Player = SM::GetPlayer(Event.CustomEventData[0]);
declare Integer[Ident] CpTimes;
declare Time = 0;

foreach (PbCpTime in Res.cps_times) {
Time += PbCpTime.time;
foreach (Landmark in MapLandmarks) {
if (Tools::IsCheckpoint(Landmark) && RNG::GetOrder(Landmark) == PbCpTime.cp_num + 1) {
CpTimes[Landmark.Id] = Time;
break;
}
}
}

Player::setRespawnCount(Player, Res.rs_count);
Obstacle::UpdatePlayerRsCounterColumn(Player);
Player::setRespawnCount(Player, 0);
Player::setBestRun(Player, Time);
Player::setBestCPTimes(Player, CpTimes);
CPTimes::UpdateLayer(Player);
Obstacle::UpdatePlayerBestTimeColumn(Player);
}
case "cpstimes:reset": {
declare Player = SM::GetPlayer(Event.CustomEventData[0]);
Obstacle::UpdatePlayerRsCounterColumn(Player);
Player::setBestRun(Player, -1);
Player::setBestCPTimes(Player, []);
Obstacle::UpdatePlayerBestTimeColumn(Player);
CPTimes::ResetLayer(Player, Obstacle::GetCheckpointsTotal());
}
}
}
}
Expand Down

0 comments on commit 4673de1

Please sign in to comment.