Skip to content

Instantly share code, notes, and snippets.

@BigBang1112
Last active November 29, 2023 23:22
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save BigBang1112/5b0983e40cb406847a6f86861a05e92d to your computer and use it in GitHub Desktop.
Save BigBang1112/5b0983e40cb406847a6f86861a05e92d to your computer and use it in GitHub Desktop.
Manialink for simple leaderboard data extraction
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<manialink version="3">
<!--
LEADERBOARDS 2020-05-10a
- Added a zone button
- Shows a window where you can select any zone of your wish to see the leaderboards of
- Collapse button collapses all of the zones and autoselects World
- Locate button find your exact zone and opens every zone section it goes through
- Behaviour is still really buggy but should be crashless
- Added a new "PB" mode
- Shows your records on the campaign maps, includes medal unlocks
- Switchable between WR and PB
- PB mode focuses leaderboards on your records rather than world records (WR mode is the default world record mode)
- Added a message when the manialink is blocked in certain title packs
- Fixed Escape crashing when no title loaded
-->
<quad scriptevents="1" id="CANCEL"/>
<label z-index="0" size="100 10" text="The manialink is blocked in this title pack due to request by the title pack creator. Sorry." halign="center" valign="center" autonewline="1" textfont="RajdhaniMono" textemboss="1" id="LABEL_BLOCKED" hidden="1"/>
<quad pos="0 0" z-index="-2" size="320 180" bgcolor="444" halign="center" valign="center" hidden="1"/>
<quad pos="0 0" z-index="-1" size="320 180" halign="center" valign="center" opacity="0" id="QUAD_BACKGROUND"/>
<frame pos="0 250" id="FRAME_WELCOME" hidden="0">
<quad pos="0 0" z-index="-2" size="300 147.5" style="Bgs1" substyle="BgCardList" valign="top" halign="center"/>
<quad pos="0 0" z-index="-1" size="300 147.5" style="Bgs1" substyle="BgGradV" valign="top" halign="center"/>
<quad pos="103 -30" z-index="0" size="70 40" bgcolor="0006" halign="center" valign="center"/>
<quad pos="103 -73.75" z-index="0" size="70 40" bgcolor="0006" halign="center" valign="center"/>
<quad pos="103 -117.5" z-index="0" size="70 40" bgcolor="0006" halign="center" valign="center"/>
<quad pos="103 -30" z-index="1" size="68 38.25" halign="center" valign="center" image="https://bigbang1112.eu/projects/leaderboards/Leaderboards1Small.jpg"/>
<quad pos="103 -73.75" z-index="1" size="68 38.25" halign="center" valign="center" image="https://bigbang1112.eu/projects/leaderboards/Leaderboards2Small.jpg"/>
<quad pos="103 -117.5" z-index="1" size="68 38.25" halign="center" valign="center" image="https://bigbang1112.eu/projects/leaderboards/Leaderboards3Small.jpg"/>
<label pos="-140 -10" z-index="0" size="200 10" text="Welcome to $iLEADERBOARDS!" textsize="9" textfont="RajdhaniMono"/>
<label pos="-140 -25" z-index="0" size="200 10" text="$iLEADERBOARDS $z is a manialink project focused on simple leaderboard data extraction." textfont="RajdhaniMono"/>
<label pos="-140 -35" z-index="0" size="200 15" text="As extracting leaderboard records without user's (extractor's) identity is nearly impossible, the manialink tries to solve this with ingame requests - those from official title packs where you can view or race against world records and such." textfont="RajdhaniMono" autonewline="1"/>
<label pos="-140 -52.5" z-index="0" size="200 15" text="Good thing to note is that $f00it's not possible to refresh the leaderboards instantly$fff - there's still yet unknown period before you can fully refresh a leaderboard. Therefore, comparing leaderboard changes with time is not easily possible in the browser. But $ff0you can setup a leaderboard tracker!" textfont="RajdhaniMono" autonewline="1"/>
<label pos="-140 -72.5" z-index="0" size="200 10" text="Wanna join $iLEADERBOARDS?" textfont="RajdhaniMono" autonewline="1" textsize="5"/>
<label pos="-140 -82.5" z-index="0" size="200 5" text="Joining allows you to:" textfont="RajdhaniMono" autonewline="1"/>
<label pos="-140 -88" z-index="0" size="200 5" text="- Show the support of this project" textfont="RajdhaniMono" autonewline="1" textsize="2"/>
<label pos="-140 -92.5" z-index="0" size="200 5" text="- Setup a leaderboard tracker" textfont="RajdhaniMono" autonewline="1" textsize="2"/>
<label pos="-140 -97" z-index="0" size="200 5" text="- Not receive this annoying message again" textfont="RajdhaniMono" autonewline="1" textsize="2"/>
<label pos="-140 -104" z-index="0" size="200 5" text="To join, you have to provide:" textfont="RajdhaniMono" autonewline="1"/>
<label pos="-140 -110" z-index="0" size="200 5" textprefix="- Your login: " text="bigbang1112" textfont="RajdhaniMono" autonewline="1" textsize="2" id="LABEL_LOGIN"/>
<label pos="-140 -114.5" z-index="0" size="200 5" textprefix="- Your nickname: " text="$i$o$nBIGBANG1112" textfont="RajdhaniMono" autonewline="1" textsize="2" id="LABEL_NICKNAME"/>
<label pos="-140 -119.5" z-index="0" size="200 5" textprefix="- Your zone: " text="World | Europe | Czech Republic | Jihocesky kraj" textfont="RajdhaniMono" autonewline="1" textsize="2" id="LABEL_ZONE"/>
<frame pos="25 -75" z-index="2">
<quad z-index="0" size="60 10" halign="center" style="Bgs1InRace" substyle="BgCard" scriptevents="1" modulatecolor="048" valign="center" url="https://forum.maniaplanet.com/viewtopic.php?f=464&t=46475&p=310760"/>
<label z-index="1" size="55 5" text="SEE THE FORUM FOR MORE" halign="center" valign="center2" textfont="RajdhaniMono" textsize="2" pos="0 -.35" translate="1" style="TextTitle3"/>
</frame>
<frame pos="-110 -132.5" z-index="2">
<quad z-index="0" size="60 10" halign="center" style="Bgs1InRace" substyle="BgCard" scriptevents="1" modulatecolor="048" valign="center" id="QUAD_BUTTON_JOIN"/>
<label z-index="1" size="55 5" text="JOIN" halign="center" valign="center2" textfont="RajdhaniMono" textsize="2.5" pos="0 -.35" translate="1" style="TextTitle3"/>
</frame>
<frame pos="-42.5 -132.5" z-index="2">
<quad z-index="0" size="70 10" halign="center" style="Bgs1InRace" substyle="BgCard" scriptevents="1" modulatecolor="345" valign="center" id="QUAD_BUTTON_ANONYMOUS"/>
<label z-index="1" size="65 5" text="CONTINUE ANONYMOUSLY" halign="center" valign="center2" textfont="RajdhaniMono" textsize="2.5" pos="0 -.35" translate="1" style="TextTitle3"/>
</frame>
</frame>
<frame id="FRAME_MENU" pos="320 250">
<frame pos="-116.333">
<frame pos="0 80">
<quad pos="0 0" z-index="0" size="67.5 9.5" style="Bgs1" substyle="BgCardList" valign="top" halign="center"/>
<quad pos="0 0" z-index="1" size="67.5 9.5" style="Bgs1" substyle="BgGradV" valign="top" halign="center"/>
<label pos="0 -5.2" z-index="2" size="60 5" text="Title" valign="center2" textfont="RajdhaniMono" textsize="3" translate="1" style="TextTitle3" halign="center"/>
</frame>
<quad pos="0 70" z-index="0" size="67.5 120" style="Bgs1" substyle="BgCardList" halign="center"/>
<quad pos="0 70" z-index="1" size="67.5 120" style="Bgs1" substyle="BgGradV" halign="center"/>
<frame pos="30 67.5" z-index="1" hidden="1">
<quad pos="0 0" z-index="0" size="2 132.5" style="Bgs1" substyle="BgCardList"/>
<quad pos="0 0" z-index="1" size="2 30" style="Bgs1" substyle="BgWindow4" hidden="1"/>
</frame>
<frame pos="0 55" id="FRAME_NOTITLE" z-index="3" hidden="0">
<label z-index="0" size="55 5" text=" PLEASE OPEN THE MANIALINK IN A TITLE PACK TO SEE THE LEADERBOARDS" halign="center" textfont="Oswald" valign="center" textsize="2" autonewline="1"/>
</frame>
<frame pos="0 25" id="FRAME_TRACKER_SUGGESTION" z-index="3" hidden="0">
<label z-index="0" size="55 5" text="WANNA TRACK LEADERBOARD HISTORY?" halign="center" textfont="Oswald" valign="center" textsize="2"/>
<label pos="0 -5" z-index="0" size="55 5" text="$oSETUP A LEADERBOARD TRACKER" halign="center" textfont="Oswald" valign="center" textsize="1" textcolor="FF0" url="https://forum.maniaplanet.com/viewtopic.php?p=310763#p310760" style="TextCardMedium"/>
</frame>
<frame z-index="2" pos="0 49.5" clip="True" clipsizen="62.5 132" clipposn="0 -47.5" id="FRAME_TITLES">
<frame pos="0 0" hidden="1" data-index="0">
<quad size="62 36" style="Bgs1" substyle="BgListLine" halign="center" valign="center" opacity=".5"/>
<quad z-index="1" size="59 33" halign="center" valign="center" bgcolor="0004" id="QUAD_CARD" opacity="1"/>
<label pos="25 -10" z-index="3" size="50 5" halign="right" valign="center2" id="LABEL_TITLEID" textfont="Oswald" textsize="4" hidden="1"/>
<quad pos="0.1 -0.1" z-index="4" size="62 36" halign="center" valign="center2" style="Bgs1" substyle="BgCardInventoryItem" scriptevents="1" modulatecolor="8BF" opacity=".5" id="QUAD_SELECT" styleselected="1"/>
<frame z-index="3" id="FRAME_LOADING" hidden="1">
<quad size="62 36" style="Bgs1" substyle="BgTitle" halign="center" valign="center" scriptevents="1" opacity="0" modulatecolor="CCF" id="QUAD_LOADING_BLINK"/>
<quad z-index="1" size="10 10" halign="center" valign="center" style="BgRaceScore2" substyle="SandTimer" pos="23 0" class="LOADING" id="QUAD_LOADING"/>
<gauge pos="-27.5 0" z-index="1" size="45 8" style="EnergyBar" ratio="0" valign="center" drawbg="0" id="GAUGE_LOADING"/>
</frame>
</frame>
</frame>
<frame pos="0 -52.5">
<quad z-index="0" size="67.5 15" style="Bgs1" substyle="BgCardList" halign="center"/>
<quad z-index="1" size="67.5 15" style="Bgs1" substyle="BgGradV" halign="center"/>
<frame pos="0 -7.5" z-index="2" hidden="1">
<quad pos="0 0" z-index="0" size="60 10" style="Bgs1" substyle="BgCard3" halign="center" valign="center" opacity=".25"/>
<quad pos="0 -0.1" z-index="0" size="60 10" halign="center" valign="center2" style="Bgs1" substyle="BgCardInventoryItem" scriptevents="1" modulatecolor="F33" opacity=".5" id="QUAD_BUTTON_SETTINGS"/>
<quad z-index="0" size="60 10" halign="center" style="Bgs1InRace" substyle="BgCard" scriptevents="1" modulatecolor="048" valign="center" hidden="1"/>
<label z-index="1" size="55 5" text="Settings" halign="center" valign="center2" textfont="RajdhaniMono" textsize="2" pos="-1 -.35" translate="1" textprefix="🔧 " style="TextTitle3"/>
</frame>
<label z-index="2" size="55 5" text="VERSION $o2020-05-10a" halign="center" valign="center2" textfont="Oswald" pos="0 -7.9" translate="1"/>
</frame>
</frame>
<frame pos="-80">
<frame pos="0 80">
<quad pos="0 0" z-index="0" size="160 9.5" style="Bgs1" substyle="BgCardList" valign="top"/>
<quad pos="0 0" z-index="1" size="160 9.5" style="Bgs1" substyle="BgGradV" valign="top"/>
<label pos="5 -5.2" z-index="2" size="110 5" text="" valign="center2" textfont="RajdhaniMono" id="LABEL_TITLE"/>
<label pos="155 -5.2" z-index="2" size="110 5" text="--.--.----" valign="center2" textfont="Oswald" halign="right" textsize="2" textprefix="DATA FROM $o" id="LABEL_DATADATE" hidden="1"/>
<label z-index="2" size="35 5" text="WR" halign="center" valign="center2" textfont="RajdhaniMono" textsize="2.5" pos="103 -5.1" style="TextCardRaceRank" scriptevents="1" textcolor="3AF" id="LABEL_TYPE_WR"/>
<label z-index="2" size="35 5" text="/" halign="center" valign="center2" textfont="RajdhaniMono" textsize="2" pos="108 -5.1"/>
<label z-index="2" size="35 5" text="PB" halign="center" valign="center2" textfont="RajdhaniMono" textsize="2.5" pos="112.5 -5.1" style="TextCardRaceRank" scriptevents="1" id="LABEL_TYPE_PB"/>
<frame pos="137.5 -4.75" z-index="2" hidden="0">
<quad pos="0 0" z-index="0" size="40 7" style="Bgs1" substyle="BgCard3" halign="center" valign="center" opacity=".25"/>
<quad pos="0 -0.1" z-index="0" size="40 7" halign="center" valign="center2" style="Bgs1" substyle="BgCardInventoryItem" scriptevents="1" modulatecolor="8BF" opacity=".5" id="QUAD_BUTTON_ZONE"/>
<quad z-index="0" size="40 7" halign="center" style="Bgs1InRace" substyle="BgCard" scriptevents="1" modulatecolor="048" valign="center" hidden="1"/>
<label z-index="1" size="35 5" text="|Zone|World" halign="center" valign="center2" textfont="RajdhaniMono" textsize="1.5" pos="0 -.35" translate="1" style="TextTitle3" id="LABEL_BUTTON_ZONE"/>
</frame>
</frame>
<quad pos="0 70" z-index="0" size="160 137.5" style="Bgs1" substyle="BgCardList"/>
<quad pos="0 70" z-index="1" size="160 137.5" style="Bgs1" substyle="BgGradV"/>
<frame pos="156.5 67" z-index="1">
<quad pos="0 0" z-index="0" size="2 119.25" style="Bgs1" substyle="BgCardList" id="QUAD_LIST_SCROLLABLE" scriptevents="1"/>
<quad pos="0 0" z-index="1" size="2 30" style="Bgs1" substyle="BgWindow4" opacity=".75" id="QUAD_LIST_SCROLLBAR" scriptevents="1" hidden="1"/>
</frame>
<framemodel id="FRAMEMODEL_ITEM">
<quad pos="-0.5 0" z-index="0" size="154 10" style="Bgs1" substyle="BgCard3" halign="center" valign="center" opacity=".25" id="QUAD_BUTTONBG"/>
<quad pos="-0.4 -0.1" z-index="0" size="154 10" halign="center" valign="center2" style="Bgs1" substyle="BgCardInventoryItem" scriptevents="1" modulatecolor="8BF" opacity=".5" id="QUAD_SELECTOR"/>
<frame z-index="1" id="FRAME_CONTENT">
<label pos="-74 0.25" size="100 5" text=" A01" valign="center" textfont="RajdhaniMono" id="LABEL_ITEM" textsize="2"/>
<label pos="72.5 0.25" size="30 5" text="0:01.023" textfont="RajdhaniMono" halign="right" valign="center" hidden="1" id="LABEL_WR"/>
<label pos="25 0.25" size="40 5" text="$i$o$nBIGBANG1112" valign="center" textfont="RajdhaniMono" hidden="1" id="LABEL_WR_HOLDER" halign="center"/>
<label pos="72.5 0.1" size="75 5" text="SCORE CONTEXT: $oCanyonCar" textfont="Oswald" halign="right" valign="center" id="LABEL_CONTEXT" textsize="2"/>
<quad pos="14.5" z-index="0" size="7 7" halign="center" valign="center" style="MedalsBig" substyle="MedalSlot" id="QUAD_MEDAL_BRONZE" hidden="1"/>
<quad pos="21.5" z-index="0" size="7 7" halign="center" valign="center" style="MedalsBig" substyle="MedalSlot" id="QUAD_MEDAL_SILVER" hidden="1"/>
<quad pos="28.5" z-index="0" size="7 7" halign="center" valign="center" style="MedalsBig" substyle="MedalSlot" id="QUAD_MEDAL_GOLD" hidden="1"/>
<quad pos="35.5" z-index="0" size="7 7" halign="center" valign="center" style="MedalsBig" substyle="MedalSlot" id="QUAD_MEDAL_AUTHOR" hidden="1"/>
<frame pos="-76 0" clip="True" clipsizen="70 7" clipposn="36 -0.02">
<quad z-index="-1" size="70 70" valign="center" id="QUAD_THUMBNAIL" opacity="0.75"/>
</frame>
</frame>
<quad z-index="1" size="7 7" halign="center" valign="center" style="BgRaceScore2" substyle="SandTimer" pos="62.5 0" class="LOADING" hidden="1" id="QUAD_LOADING"/>
<label pos="72.5 0.25" z-index="1" size="50 5" text="10 records" textfont="RajdhaniMono" halign="right" valign="center" hidden="1"/>
</framemodel>
<frame id="FRAME_OUTER_LIST" pos="80 62.5" z-index="2" clip="True" clipsizen="160 120" clipposn="0 -54.5">
<frame id="FRAME_LIST">
<frameinstance modelid="FRAMEMODEL_ITEM" data-index="0" hidden="1"/>
<frameinstance pos="0 -10" modelid="FRAMEMODEL_ITEM" data-index="1" hidden="1"/>
<frameinstance pos="0 -20" modelid="FRAMEMODEL_ITEM" data-index="2" hidden="1"/>
<frameinstance pos="0 -30" modelid="FRAMEMODEL_ITEM" data-index="3" hidden="1"/>
<frameinstance pos="0 -40" modelid="FRAMEMODEL_ITEM" data-index="4" hidden="1"/>
<frameinstance pos="0 -50" modelid="FRAMEMODEL_ITEM" data-index="5" hidden="1"/>
<frameinstance pos="0 -60" modelid="FRAMEMODEL_ITEM" data-index="6" hidden="1"/>
<frameinstance pos="0 -70" modelid="FRAMEMODEL_ITEM" data-index="7" hidden="1"/>
<frameinstance pos="0 -80" modelid="FRAMEMODEL_ITEM" data-index="8" hidden="1"/>
<frameinstance pos="0 -90" modelid="FRAMEMODEL_ITEM" data-index="9" hidden="1"/>
<frameinstance pos="0 -100" modelid="FRAMEMODEL_ITEM" data-index="10" hidden="1"/>
<frameinstance pos="0 -110" modelid="FRAMEMODEL_ITEM" data-index="11" hidden="1"/>
</frame>
</frame>
<frame pos="80 -60" z-index="2" id="FRAME_BOTTOM">
<quad size="155 10" style="Bgs1" substyle="BgCard3" halign="center" valign="center" opacity=".25"/>
<label pos="-72.5 -0.3" z-index="2" size="90 5" text="" valign="center2" textfont="RajdhaniMono" id="LABEL_FOLDER_LEVEL"/>
<frame pos="51 0" z-index="2" id="FRAME_BUTTON_FINDMAP" hidden="1">
<quad z-index="0" size="50 7.5" halign="center" style="Bgs1InRace" substyle="BgCard" scriptevents="1" modulatecolor="048" valign="center" id="QUAD_BUTTON_FINDMAP"/>
<label z-index="1" size="45 4" text="Find current map" halign="center" valign="center2" textfont="RajdhaniMono" textsize="2" pos="0 -.35" translate="1" textprefix=" " style="TextTitle3"/>
</frame>
<frame pos="51 0" z-index="2" id="FRAME_BUTTON_COMPARE" hidden="1">
<quad z-index="0" size="50 7.5" halign="center" style="Bgs1InRace" substyle="BgCard" scriptevents="1" modulatecolor="444" valign="center" id="QUAD_BUTTON_COMPARE"/>
<label z-index="1" size="45 4" text="Compare timestamps" halign="center" valign="center2" textfont="RajdhaniMono" textsize="2" pos="0 -.35" translate="1"/>
</frame>
<label z-index="1" size="45 4" text="COMPARE MODE" halign="center" valign="center2" textfont="RajdhaniMono" textcolor="FF0" pos="51 -.45" translate="1" id="LABEL_COMPAREMODE" hidden="1"/>
<frame pos="8 0" z-index="2" id="FRAME_SAVEALLGHOSTS" hidden="1">
<quad pos="0 0" z-index="0" size="35 8" style="Bgs1" substyle="BgCard3" halign="center" valign="center" opacity=".25"/>
<quad pos="-0.05 -0.1" z-index="0" size="35 8" halign="center" valign="center2" style="Bgs1" substyle="BgCardInventoryItem" scriptevents="1" modulatecolor="8BF" opacity=".5" id="QUAD_DOWNLOAD_SAVEALLGHOSTS"/>
<quad z-index="0" size="35 8" halign="center" style="Bgs1InRace" substyle="BgCard" scriptevents="1" modulatecolor="048" valign="center" hidden="1"/>
<label z-index="1" size="35 6" text="Save all ghosts" halign="center" valign="center2" textfont="RajdhaniMono" textsize="1.5" pos="0 -.25" translate="1" style="TextTitle3" autonewline="1"/>
</frame>
<frame pos="51 0" z-index="2" id="FRAME_BUTTON_PLAYMAP" hidden="1">
<quad z-index="0" size="50 7.5" halign="center" style="Bgs1InRace" substyle="BgCard" scriptevents="1" modulatecolor="444" valign="center" id="QUAD_BUTTON_PLAYMAP"/>
<label z-index="1" size="45 4" text="Go to map" halign="center" valign="center2" textfont="RajdhaniMono" textsize="2" pos="0 -.35" translate="1" id="LABEL_BUTTON_PLAYMAP"/>
</frame>
<frame id="FRAME_REPLAYSAVE" z-index="2" hidden="1">
<entry pos="-72.5 -0.3" size="95 5" default="" valign="center2" textfont="RajdhaniMono" id="ENTRY_REPLAY"/>
<frame pos="39 0">
<quad pos="0 0" z-index="0" size="25 8" style="Bgs1" substyle="BgCard3" halign="center" valign="center" opacity=".25"/>
<quad pos="0 -0.1" z-index="0" size="25 8" halign="center" valign="center2" style="Bgs1" substyle="BgCardInventoryItem" scriptevents="1" modulatecolor="8BF" opacity=".5" id="QUAD_REPLAY_SAVE"/>
<quad z-index="0" size="25 8" halign="center" style="Bgs1InRace" substyle="BgCard" scriptevents="1" modulatecolor="048" valign="center" hidden="1"/>
<label z-index="1" size="25 6" text="Save" halign="center" valign="center2" textfont="RajdhaniMono" textsize="2" pos="0 -.35" translate="1" style="TextTitle3"/>
</frame>
<frame pos="64 0">
<quad pos="0 0" z-index="0" size="25 8" style="Bgs1" substyle="BgCard3" halign="center" valign="center" opacity=".25"/>
<quad pos="0 -0.1" z-index="0" size="25 8" halign="center" valign="center2" style="Bgs1" substyle="BgCardInventoryItem" scriptevents="1" modulatecolor="8BF" opacity=".5" id="QUAD_REPLAY_BACK"/>
<quad z-index="0" size="25 8" halign="center" style="Bgs1InRace" substyle="BgCard" scriptevents="1" modulatecolor="048" valign="center" hidden="1"/>
<label z-index="1" size="25 6" text="Back" halign="center" valign="center2" textfont="RajdhaniMono" textsize="2" pos="0 -.35" translate="1" style="TextTitle3"/>
</frame>
</frame>
</frame>
</frame>
<frame pos="116.333">
<frame pos="0 80">
<quad pos="0 0" z-index="0" size="67.5 9.5" style="Bgs1" substyle="BgCardList" valign="top" halign="center"/>
<quad pos="0 0" z-index="1" size="67.5 9.5" style="Bgs1" substyle="BgGradV" valign="top" halign="center"/>
<label pos="0 -5.2" z-index="2" size="60 5" text="" valign="center2" textfont="RajdhaniMono" textsize="3" translate="1" style="TextTitle3" halign="center" id="LABEL_PANEL_NAME"/>
</frame>
<quad pos="0 70" z-index="0" size="67.5 67.5" style="Bgs1" substyle="BgCardList" halign="center"/>
<quad pos="0 70" z-index="1" size="67.5 67.5" style="Bgs1" substyle="BgGradV" halign="center"/>
<quad z-index="3" size="15 15" halign="center" valign="center" style="BgRaceScore2" substyle="SandTimer" pos="0 37.5" class="LOADING" hidden="1" id="QUAD_PANEL_LOADING"/>
<frame z-index="2" id="FRAME_PANEL_CAMPAIGN" hidden="1">
<label pos="0 63.5" size="57.5 8" text="TMValley@nadeo#1" textfont="Oswald" textsize="3" halign="center" id="LABEL_CAMPAIGN" valign="center2" textprefix="$o"/>
<label pos="0 55" size="57.5 5" text="$o0$o map groups" textfont="RajdhaniMono" textsize="2.5" halign="center" id="LABEL_MAPGROUPS" valign="center2"/>
<label pos="0 50" size="57.5 5" text="$o0$o total maps" textfont="RajdhaniMono" textsize="2.5" halign="center" id="LABEL_TOTALMAPS" valign="center2"/>
<label pos="0 40" size="57.5 5" text="Official records $4c4$oenabled" textfont="RajdhaniMono" textsize="2" halign="center" id="LABEL_OFFICIALRECORDS" valign="center2"/>
<label pos="0 35" size="57.5 5" text="$o0 players$o participated" textfont="RajdhaniMono" textsize="2" halign="center" id="LABEL_PLAYERS" valign="center2"/>
<label pos="0 30" size="55 5" text="$o0 total records$o driven" textfont="RajdhaniMono" textsize="2" id="LABEL_RECORDCOUNT" valign="center2" halign="center"/>
<frame pos="0 12.5">
<quad pos="0 0" z-index="0" size="60 10" style="Bgs1" substyle="BgCard3" halign="center" valign="center" opacity=".25"/>
<quad pos="0 0" z-index="1" size="60 10" style="Bgs1" substyle="BgWindow4" halign="center" valign="center" opacity=".5" colorize="8BF"/>
<quad pos="-0.1 -0.1" z-index="0" size="60 10" halign="center" valign="center2" style="Bgs1" substyle="BgCardInventoryItem" scriptevents="1" modulatecolor="8BF" opacity=".5" id="QUAD_BUTTON_VIEWCAMPAIGN"/>
<quad z-index="0" size="60 10" halign="center" style="Bgs1InRace" substyle="BgCard" scriptevents="1" modulatecolor="048" valign="center" hidden="1"/>
<label z-index="2" size="55 5" text="View the campaign" halign="center" valign="center2" textfont="RajdhaniMono" textsize="2.5" pos="-1 -.35" translate="1" textprefix=" " style="TextTitle3"/>
</frame>
</frame>
<frame z-index="2" id="FRAME_PANEL_MAPGROUP" hidden="1">
<frame id="FRAME_MAPS" z-index="2">
<frame pos="0 62.5" clip="True" clipsizen="70 9" clipposn="0 -0.02">
<quad z-index="0" size="60 60" valign="center" id="QUAD_THUMBNAIL" opacity="0.75" halign="center"/>
<label z-index="1" pos="0 -0.7" size="57.5 9" text="StarValleyE01" textfont="Gotham/Gotham-Bold" textsize="3" halign="center" id="LABEL_MAP" valign="center2"/>
</frame>
<frame pos="0 52.5" clip="True" clipsizen="70 9" clipposn="0 -0.02">
<quad z-index="0" size="60 60" valign="center" id="QUAD_THUMBNAIL" opacity="0.75" halign="center"/>
<label z-index="1" pos="0 -0.7" size="57.5 9" text="StarValleyE02" textfont="Gotham/Gotham-Bold" textsize="3" halign="center" id="LABEL_MAP" valign="center2"/>
</frame>
<frame pos="0 42.5" clip="True" clipsizen="70 9" clipposn="0 -0.02">
<quad z-index="0" size="60 60" valign="center" id="QUAD_THUMBNAIL" opacity="0.75" halign="center"/>
<label z-index="1" pos="0 -0.7" size="57.5 9" text="StarValleyE03" textfont="Gotham/Gotham-Bold" textsize="3" halign="center" id="LABEL_MAP" valign="center2"/>
</frame>
<frame pos="0 32.5" clip="True" clipsizen="70 9" clipposn="0 -0.02">
<quad z-index="0" size="60 60" valign="center" id="QUAD_THUMBNAIL" opacity="0.75" halign="center" pos="0 0"/>
<label z-index="1" pos="0 -0.7" size="57.5 9" text="StarValleyE04" textfont="Gotham/Gotham-Bold" textsize="3" halign="center" id="LABEL_MAP" valign="center2"/>
</frame>
</frame>
<label pos="0 22.5" size="55 5" text="$o0 total records$o driven" textfont="RajdhaniMono" textsize="2" id="LABEL_RECORDCOUNT" valign="center" halign="center"/>
<frame pos="0 12.5">
<quad pos="0 0" z-index="0" size="60 10" style="Bgs1" substyle="BgCard3" halign="center" valign="center" opacity=".25"/>
<quad pos="0 0" z-index="1" size="60 10" style="Bgs1" substyle="BgWindow4" halign="center" valign="center" opacity=".5" colorize="8BF"/>
<quad pos="-0.1 -0.1" z-index="0" size="60 10" halign="center" valign="center2" style="Bgs1" substyle="BgCardInventoryItem" scriptevents="1" modulatecolor="8BF" opacity=".5" id="QUAD_BUTTON_VIEWMAPS"/>
<quad z-index="0" size="60 10" halign="center" style="Bgs1InRace" substyle="BgCard" scriptevents="1" modulatecolor="048" valign="center" hidden="1"/>
<label z-index="2" size="55 5" text="View the maps" halign="center" valign="center2" textfont="RajdhaniMono" textsize="2.5" pos="-1 -.35" translate="1" textprefix=" " style="TextTitle3"/>
</frame>
</frame>
<frame z-index="2" id="FRAME_PANEL_MAP" hidden="1">
<label pos="0 63.5" size="57.5 8" text="StarValleyC03" textfont="Gotham/Gotham-Bold" textsize="3" halign="center" id="LABEL_MAP" valign="center2"/>
<label pos="0 59" size="57.5 5" text="BigBang1112" textfont="RajdhaniMono" textsize="1.5" halign="center" id="LABEL_AUTHOR"/>
<entry pos="0 52.5" size="50 4" halign="center" default="" textsize="1" valign="center2" textfont="Gotham/Gotham-Book" selecttext="1" id="ENTRY_MAPUID" textcolor="AAA"/>
<frame pos="0 40">
<quad z-index="-1" size="60 15" halign="center" valign="center" style="Bgs1" substyle="BgCardList" opacity=".75"/>
<label pos="0 4" z-index="0" size="55 5" text="No record" halign="center" textsize="1" textfont="RajdhaniMono" valign="center" id="LABEL_RECORDBY"/>
<frame pos="0 -2">
<quad pos="0 0" z-index="0" size="55 7" style="Bgs1" substyle="BgCard3" halign="center" valign="center" opacity=".25"/>
<quad pos="0.1 -0.1" z-index="0" size="55 7" halign="center" valign="center2" style="Bgs1" substyle="BgCardInventoryItem" scriptevents="1" modulatecolor="8BF" opacity=".5" id="QUAD_BUTTON_WR_SAVEREPLAY"/>
<quad z-index="0" size="55 7" halign="center" style="Bgs1InRace" substyle="BgCard" scriptevents="1" modulatecolor="048" valign="center" hidden="1"/>
<label z-index="1" size="50 5" text="Downloading data" halign="center" valign="center2" textfont="RajdhaniMono" textsize="1" pos="-0.5 -.35" translate="1" style="TextTitle3" id="LABEL_BUTTON_WR_SAVEREPLAY"/>
</frame>
</frame>
<label pos="0 27.5" size="55 5" text="Finished by $o0%$o of players" textfont="RajdhaniMono" textsize="1.5" id="LABEL_FINISHPERCENT" valign="center" halign="center"/>
<label pos="0 22.5" size="55 5" text="$o0 records$o driven" textfont="RajdhaniMono" style="TextCardRaceRank" textsize="2" id="LABEL_RECORDCOUNT" valign="center" halign="center" scriptevents="1"/>
<frame pos="0 12.5">
<quad pos="0 0" z-index="0" size="60 10" style="Bgs1" substyle="BgCard3" halign="center" valign="center" opacity=".25"/>
<quad pos="0 0" z-index="1" size="60 10" style="Bgs1" substyle="BgWindow4" halign="center" valign="center" opacity=".5" colorize="8BF"/>
<quad pos="-0.1 -0.1" z-index="0" size="60 10" halign="center" valign="center2" style="Bgs1" substyle="BgCardInventoryItem" scriptevents="1" modulatecolor="8BF" opacity=".5" id="QUAD_BUTTON_VIEWLEADERBOARD"/>
<quad z-index="0" size="60 10" halign="center" style="Bgs1InRace" substyle="BgCard" scriptevents="1" modulatecolor="048" valign="center" hidden="1"/>
<label z-index="2" size="55 5" text="View the leaderboard" halign="center" valign="center2" textfont="RajdhaniMono" textsize="2.5" pos="-1 -.35" translate="1" textprefix=" " style="TextTitle3"/>
</frame>
</frame>
<frame z-index="2" id="FRAME_PANEL_ONLINERECORD" hidden="1">
<label pos="0 66.5" size="57.5 8" text="0:01.023" textfont="Gotham/Gotham-Bold" textsize="6" halign="center" id="LABEL_RECORD" scriptevents="1" style="TextCardRaceRank"/>
<label pos="0 59" size="57.5 5" textprefix="by " text="BigBang1112" textfont="RajdhaniMono" textsize="2" halign="center" id="LABEL_NICKNAME"/>
<label pos="0 54" size="57.5 5" textprefix="on " text="A01" textfont="RajdhaniMono" textsize="2" halign="center" id="LABEL_MAP"/>
<frame pos="0 42.5">
<quad pos="0 0" z-index="0" size="60 10" style="Bgs1" substyle="BgCard3" halign="center" valign="center" opacity=".25"/>
<quad pos="-0.1 -0.1" z-index="0" size="60 10" halign="center" valign="center2" style="Bgs1" substyle="BgCardInventoryItem" scriptevents="1" modulatecolor="8BF" opacity=".5" id="QUAD_BUTTON_SAVEREPLAY"/>
<quad z-index="0" size="60 10" halign="center" style="Bgs1InRace" substyle="BgCard" scriptevents="1" modulatecolor="048" valign="center" hidden="1"/>
<label z-index="1" size="55 5" text="Save replay" halign="center" valign="center2" textfont="RajdhaniMono" textsize="2.5" pos="-1 -.35" translate="1" textprefix=" " style="TextTitle3" id="LABEL_BUTTON_SAVEREPLAY"/>
</frame>
<frame pos="0 23.5">
<quad pos="0 0" z-index="0" size="60 10" style="Bgs1" substyle="BgCard3" halign="center" valign="center" opacity=".25"/>
<quad pos="-0.1 -0.1" z-index="0" size="60 10" halign="center" valign="center2" style="Bgs1" substyle="BgCardInventoryItem" scriptevents="1" modulatecolor="8BF" opacity=".5" id="QUAD_BUTTON_COPY"/>
<quad z-index="0" size="60 10" halign="center" style="Bgs1InRace" substyle="BgCard" scriptevents="1" modulatecolor="048" valign="center" hidden="1"/>
<label z-index="1" size="55 5" text="Copy to clipboard" halign="center" valign="center2" textfont="RajdhaniMono" textsize="2.5" pos="-1 -.35" translate="1" textprefix=" " style="TextTitle3"/>
</frame>
<frame pos="0 12.5">
<quad pos="0 0" z-index="0" size="60 10" style="Bgs1" substyle="BgCard3" halign="center" valign="center" opacity=".25"/>
<quad pos="0 0" z-index="1" size="60 10" style="Bgs1" substyle="BgWindow4" halign="center" valign="center" opacity=".5" colorize="8BF"/>
<quad pos="-0.1 -0.1" z-index="0" size="60 10" halign="center" valign="center2" style="Bgs1" substyle="BgCardInventoryItem" scriptevents="1" modulatecolor="8BF" opacity=".5" id="QUAD_BUTTON_VIEWCHECKPOINTS"/>
<quad z-index="0" size="60 10" halign="center" style="Bgs1InRace" substyle="BgCard" scriptevents="1" modulatecolor="048" valign="center" hidden="1"/>
<label z-index="2" size="55 5" text="View checkpoint times" halign="center" valign="center2" textfont="RajdhaniMono" textsize="2.5" pos="-1 -.35" translate="1" textprefix="🕑 " style="TextTitle3"/>
</frame>
</frame>
<frame id="FRAME_PANEL_CHECKPOINT" z-index="2" hidden="1">
<label pos="0 62.5" size="50 5" text="0.00.000" valign="center2" halign="center" textfont="Gotham/Gotham-Bold" textsize="5" id="LABEL_CHECKPOINT"/>
<frame id="FRAME_CHECKPOINTS" pos="0 10" clip="True" clipsizen="55 50" clipposn="0 22.5">
<label pos="-27.5 45" size="200 5" text="01)$o 0.00.000 $oby" valign="center2" textfont="OswaldMono" textsize="3"/>
<label pos="-27.5 40" size="200 5" text="02)$o 0.00.000 $oby" valign="center2" textfont="OswaldMono" textsize="3"/>
<label pos="-27.5 35" size="200 5" text="03)$o 0.00.000 $oby" valign="center2" textfont="OswaldMono" textsize="3"/>
<label pos="-27.5 30" size="200 5" text="04)$o 0.00.000 $oby" valign="center2" textfont="OswaldMono" textsize="3"/>
<label pos="-27.5 25" size="200 5" text="05)$o 0.00.000 $oby" valign="center2" textfont="OswaldMono" textsize="3"/>
<label pos="-27.5 20" size="200 5" text="06)$o 0.00.000 $oby" valign="center2" textfont="OswaldMono" textsize="3"/>
<label pos="-27.5 15" size="200 5" text="07)$o 0.00.000 $oby" valign="center2" textfont="OswaldMono" textsize="3"/>
<label pos="-27.5 10" size="200 5" text="08)$o 0.00.000 $oby" valign="center2" textfont="OswaldMono" textsize="3"/>
<label pos="-27.5 5" size="200 5" text="09)$o 0.00.000 $oby" valign="center2" textfont="OswaldMono" textsize="3"/>
<label pos="-27.5 0" size="200 5" text="10)$o 0.00.000 $oby" valign="center2" textfont="OswaldMono" textsize="3"/>
</frame>
</frame>
<frame id="FRAME_PANEL_MOSTWORLDRECORDS" z-index="2" hidden="1">
<label pos="0 62.5" size="50 5" text="54 world records" valign="center2" halign="center" textfont="Gotham/Gotham-Bold" textsize="3" id="LABEL_MOSTWORLDRECORDS"/>
<frame id="FRAME_RECORDS" pos="0 10" clip="True" clipsizen="55 50" clipposn="0 22.5">
<label pos="-27.5 45" size="200 5" text="01)$o 0.00.000 $oon A01" valign="center2" textfont="RajdhaniMono" textsize="3" scriptevents="1" style="TextCardRaceRank" id="LABEL_WORLDRECORD" data-index="0"/>
<label pos="-27.5 40" size="200 5" text="02)$o 0.00.000 $oon A01" valign="center2" textfont="RajdhaniMono" textsize="3" scriptevents="1" style="TextCardRaceRank" id="LABEL_WORLDRECORD" data-index="1"/>
<label pos="-27.5 35" size="200 5" text="03)$o 0.00.000 $oon A01" valign="center2" textfont="RajdhaniMono" textsize="3" scriptevents="1" style="TextCardRaceRank" id="LABEL_WORLDRECORD" data-index="2"/>
<label pos="-27.5 30" size="200 5" text="04)$o 0.00.000 $oon A01" valign="center2" textfont="RajdhaniMono" textsize="3" scriptevents="1" style="TextCardRaceRank" id="LABEL_WORLDRECORD" data-index="3"/>
<label pos="-27.5 25" size="200 5" text="05)$o 0.00.000 $oon A01" valign="center2" textfont="RajdhaniMono" textsize="3" scriptevents="1" style="TextCardRaceRank" id="LABEL_WORLDRECORD" data-index="4"/>
<label pos="-27.5 20" size="200 5" text="06)$o 0.00.000 $oon A01" valign="center2" textfont="RajdhaniMono" textsize="3" scriptevents="1" style="TextCardRaceRank" id="LABEL_WORLDRECORD" data-index="5"/>
<label pos="-27.5 15" size="200 5" text="07)$o 0.00.000 $oon A01" valign="center2" textfont="RajdhaniMono" textsize="3" scriptevents="1" style="TextCardRaceRank" id="LABEL_WORLDRECORD" data-index="6"/>
<label pos="-27.5 10" size="200 5" text="08)$o 0.00.000 $oon A01" valign="center2" textfont="RajdhaniMono" textsize="3" scriptevents="1" style="TextCardRaceRank" id="LABEL_WORLDRECORD" data-index="7"/>
<label pos="-27.5 5" size="200 5" text="09)$o 0.00.000 $oon A01" valign="center2" textfont="RajdhaniMono" textsize="3" scriptevents="1" style="TextCardRaceRank" id="LABEL_WORLDRECORD" data-index="8"/>
<label pos="-27.5 0" size="200 5" text="10)$o 0.00.000 $oon A01" valign="center2" textfont="RajdhaniMono" textsize="3" scriptevents="1" style="TextCardRaceRank" id="LABEL_WORLDRECORD" data-index="9"/>
</frame>
</frame>
</frame>
<frame pos="116.333 -80">
<frame pos="0 80">
<quad pos="0 0" z-index="0" size="67.5 9.5" style="Bgs1" substyle="BgCardList" valign="top" halign="center"/>
<quad pos="0 0" z-index="1" size="67.5 9.5" style="Bgs1" substyle="BgGradV" valign="top" halign="center"/>
<label pos="0 -5.2" z-index="2" size="60 5" text="Leaderboard tracker" valign="center2" textfont="RajdhaniMono" textsize="3" translate="1" style="TextTitle3" halign="center"/>
</frame>
<quad pos="0 70" z-index="0" size="67.5 57.5" style="Bgs1" substyle="BgCardList" halign="center"/>
<quad pos="0 70" z-index="1" size="67.5 57.5" style="Bgs1" substyle="BgGradV" halign="center"/>
<frame z-index="2" pos="0 62.5" id="FRAME_TRACKER_ENABLED" hidden="1">
<label z-index="1" size="55 5" text="URL" halign="center" valign="center2" textfont="RajdhaniMono" textsize="3" translate="1" style="TextTitle3" pos="0 1"/>
<label pos="27.5 -2" z-index="2" size="5 5" text="" halign="center" valign="center" scriptevents="1" textcolor="FF0" style="TextCardMedium" id="LABEL_TRACKER_URLWARNING" hidden="1"/>
<entry z-index="1" size="55 5" halign="center" valign="center" textfont="RajdhaniMono" textsize="1" translate="1" pos="0 -5" id="ENTRY_TRACKER_URL" selecttext="1"/>
<label z-index="1" size="55 5" text="SECRET KEY" halign="center" valign="center2" textfont="RajdhaniMono" textsize="2.5" translate="1" style="TextTitle3" pos="0 -13"/>
<frame pos="0 -19">
<quad pos="0 0" z-index="0" size="60 7" style="Bgs1" substyle="BgCard3" halign="center" valign="center" opacity=".25"/>
<quad pos="0 -0.1" z-index="0" size="60 7" halign="center" valign="center2" style="Bgs1" substyle="BgCardInventoryItem" scriptevents="1" modulatecolor="8BF" opacity=".5" id="QUAD_BUTTON_SECRETKEY"/>
<quad z-index="0" size="60 7" halign="center" style="Bgs1InRace" substyle="BgCard" scriptevents="1" modulatecolor="048" valign="center" hidden="1"/>
<label z-index="1" size="55 5" text="Copy the secret key" halign="center" valign="center2" textfont="RajdhaniMono" textsize="1.5" pos="0 -.35" translate="1" style="TextTitle3"/>
</frame>
<label z-index="1" size="55 10" text="(if you have secure mode enabled, use this button to copy the secret key to the Leaderboard Tracker settings)" textsize="1" translate="1" pos="0 -23.5" autonewline="1" halign="center" textcolor="AAA"/>
<frame pos="0 -40">
<quad pos="0 0" z-index="0" size="60 10" style="Bgs1" substyle="BgCard3" halign="center" valign="center" opacity=".25"/>
<quad pos="0 -0.1" z-index="0" size="60 10" halign="center" valign="center2" style="Bgs1" substyle="BgCardInventoryItem" scriptevents="1" modulatecolor="F33" opacity=".5" id="QUAD_BUTTON_GENERATEKEY"/>
<quad z-index="0" size="60 10" halign="center" style="Bgs1InRace" substyle="BgCard" scriptevents="1" modulatecolor="048" valign="center" hidden="1"/>
<label z-index="1" size="55 5" text="Generate a new secret key" halign="center" valign="center2" textfont="RajdhaniMono" textsize="2" pos="-1 -.35" translate="1" textprefix="🔑 " style="TextTitle3"/>
</frame>
</frame>
<frame z-index="2" pos="0 42.5" id="FRAME_TRACKER_DISABLED">
<label size="55 20" text="Authorize with Leaderboards to be able to use Leaderboard Tracker" halign="center" valign="center2" textfont="RajdhaniMono" textsize="3" pos="0 -.35" translate="1" style="TextButtonBig" autonewline="1" textcolor="F33" scriptevents="1" id="LABEL_COMEBACK"/>
</frame>
</frame>
</frame>
<frame pos="0 -105" id="FRAME_NOBODYCARES">
<quad pos="0 0" z-index="0" size="300 10" style="Bgs1" substyle="BgCardList" halign="center" valign="center"/>
<quad pos="0 0" z-index="1" size="300 10" style="Bgs1" substyle="BgGradV" halign="center" valign="center"/>
<label pos="0 -.3" z-index="2" size="50 5" text="$iMANIALINK BY $o$nBIGBANG1112" halign="center" valign="center2" textfont="Oswald" manialink="bigbang1112" style="TextButtonBig" textsize="3"/>
<label pos="0 -.3" z-index="2" size="290 5" text="$i• •" halign="center" valign="center2" textfont="Oswald"/>
<label pos="25 -0.3" z-index="2" size="25 5" text="$iCONTRIBUTE" valign="center2" textfont="Oswald" style="TextButtonBig" textsize="3" url="https://gist.github.com/BigBang1112/5b0983e40cb406847a6f86861a05e92d"/>
<label pos="-25 -0.3" z-index="2" size="30 5" text="$iLEADERBOARDS" valign="center2" textfont="Oswald" style="TextButtonBig" textsize="3" url="https://forum.maniaplanet.com/viewtopic.php?f=464&t=46475&p=310760" halign="right"/>
<frame pos="145 0" z-index="2">
<quad pos="0 0" z-index="0" size="9 9" style="Bgs1" substyle="BgCard3" halign="center" valign="center" opacity=".25"/>
<quad pos="0 -0.1" z-index="0" size="9 9" halign="center" valign="center2" style="Bgs1" substyle="BgCardInventoryItem" scriptevents="1" modulatecolor="F33" opacity=".5" id="QUAD_BUTTON_EXIT"/>
<quad z-index="0" size="9 9" halign="center" style="Bgs1InRace" substyle="BgCard" scriptevents="1" modulatecolor="048" valign="center" hidden="1"/>
<label z-index="1" size="9 9" text="" halign="center" valign="center2" textfont="RajdhaniMono" textsize="2" pos="0 -.6" translate="1" style="TextTitle3"/>
</frame>
</frame>
<frame pos="0 0" z-index="10" id="FRAME_SAVEREPLAY" hidden="1">
<quad z-index="0" size="320 180" bgcolor="2228" halign="center" valign="center" scriptevents="1"/>
<quad pos="0 0" z-index="-1" size="120 30" style="Bgs1" substyle="BgCardList" valign="center" halign="center"/>
<quad pos="0 0" z-index="0" size="120 30" style="Bgs1" substyle="BgCardList" valign="center" halign="center"/>
<quad pos="0 0" z-index="1" size="120 30" style="Bgs1" substyle="BgGradV" valign="center" halign="center"/>
<label pos="-54 10" z-index="2" size="107.5 6" text="Save replay here?" textfont="RajdhaniMono" textsize="5" translate="1" style="TextTitle3"/>
<label pos="-54 0" z-index="2" size="107.5 6" text="Replays/" textfont="Gotham/Gotham-Book" textsize="1" translate="1" style="TextTitle3" valign="center2" id="LABEL_SAVEREPLAY_FILE"/>
<frame pos="9 -8" z-index="2">
<quad z-index="0" size="30 8" halign="center" style="Bgs1InRace" substyle="BgCard" scriptevents="1" modulatecolor="080" valign="center" id="QUAD_BUTTON_SAVEREPLAY_YES"/>
<label z-index="1" size="25 5" text="Yes" halign="center" valign="center2" textfont="RajdhaniMono" textsize="2.5" pos="0 -.35" translate="1" style="TextTitle3"/>
</frame>
<frame pos="40 -8" z-index="2">
<quad z-index="0" size="30 8" halign="center" style="Bgs1InRace" substyle="BgCard" scriptevents="1" modulatecolor="800" valign="center" id="QUAD_BUTTON_SAVEREPLAY_NO"/>
<label z-index="1" size="25 5" text="No" halign="center" valign="center2" textfont="RajdhaniMono" textsize="2.5" pos="0 -.35" translate="1" style="TextTitle3"/>
</frame>
</frame>
<frame pos="0 0" z-index="10" id="FRAME_COPY" hidden="1">
<quad z-index="0" size="320 180" bgcolor="2228" halign="center" valign="center" scriptevents="1"/>
<quad pos="0 0" z-index="-1" size="140 60" style="Bgs1" substyle="BgCardList" valign="center" halign="center"/>
<quad pos="0 0" z-index="0" size="140 60" style="Bgs1" substyle="BgCardList" valign="center" halign="center"/>
<quad pos="0 0" z-index="1" size="140 60" style="Bgs1" substyle="BgGradV" valign="center" halign="center"/>
<label pos="-64 25" z-index="2" size="107.5 6" text="Copy to clipboard" textfont="RajdhaniMono" textsize="5" translate="1" style="TextTitle3"/>
<textedit pos="-64 15" z-index="2" size="90 27.5" id="TEXTEDIT_COPY" textsize="1.5"/>
<frame id="FRAME_COPY_FORMATS" pos="30 14.5" z-index="2">
<label size="35 5" text="Very short" textprefix="O $fff" textsize="2" valign="center2" textfont="BiryaniDemiBold" textcolor="444" style="TextCardMedium" scriptevents="1" translate="1" id="LABEL_FORMAT_VERYSHORT"/>
<label pos="0 -5" size="35 5" text="Short" textprefix="O $fff" textsize="2" valign="center2" textfont="BiryaniDemiBold" textcolor="444" style="TextCardMedium" scriptevents="1" translate="1" id="LABEL_FORMAT_SHORT"/>
<label pos="0 -10" size="35 5" text="Balanced" textprefix="O $fff" textsize="2" valign="center2" textfont="BiryaniDemiBold" textcolor="48B" style="TextCardMedium" scriptevents="1" translate="1" id="LABEL_FORMAT_BALANCED"/>
<label pos="0 -15" size="35 5" text="Detailed" textprefix="O $fff" textsize="2" valign="center2" textfont="BiryaniDemiBold" textcolor="444" style="TextCardMedium" scriptevents="1" translate="1" id="LABEL_FORMAT_DETAILED"/>
<label pos="0 -20" size="35 5" text="Trackmania Report" textprefix="O $fff" textsize="2" valign="center2" textfont="BiryaniDemiBold" textcolor="444" style="TextCardMedium" scriptevents="1" translate="1" id="LABEL_FORMAT_TMREPORT"/>
<label pos="0 -25" size="35 5" text="Envimix" textprefix="O $fff" textsize="2" valign="center2" textfont="BiryaniDemiBold" textcolor="444" style="TextCardMedium" scriptevents="1" translate="1" id="LABEL_FORMAT_ENVIMIX"/>
</frame>
<frame pos="-54 -20" z-index="2">
<quad z-index="0" size="20 10" halign="center" style="Bgs1InRace" substyle="BgCard" scriptevents="1" modulatecolor="444" valign="center" id="QUAD_BUTTON_MX"/>
<label pos="0 0" z-index="1" size="15 5" text=" MANIA EXCHANGE" valign="center2" textfont="Gotham/Gotham-Medium" autonewline="1" textsize=".5" halign="center"/>
<quad z-index="1" size="8 8" halign="center" valign="center" style="BgRaceScore2" substyle="SandTimer" pos="16 0" class="LOADING" id="QUAD_MX_LOADING"/>
</frame>
<frame pos="22.5 -20" z-index="2">
<quad z-index="0" size="60 10" halign="center" style="Bgs1InRace" substyle="BgCard" scriptevents="1" modulatecolor="048" valign="center" id="QUAD_BUTTON_COPYCLIPBOARD"/>
<label z-index="1" size="55 5" text="Copy to clipboard" halign="center" valign="center2" textfont="RajdhaniMono" textsize="2.5" pos="0 -.35" translate="1" style="TextTitle3"/>
</frame>
<frame pos="60 -20" z-index="2">
<quad z-index="0" size="10 10" halign="center" style="Bgs1InRace" substyle="BgCard" scriptevents="1" modulatecolor="800" valign="center" id="QUAD_BUTTON_COPY_EXIT"/>
<label z-index="1" size="5 5" text="" halign="center" valign="center2" textfont="RajdhaniMono" textsize="2.5" pos="0 -.7" translate="1" style="TextTitle3"/>
</frame>
</frame>
<frame id="FRAME_CHANGEZONE" z-index="10" hidden="1">
<quad z-index="0" size="120 145" style="Bgs1" substyle="BgCardList" valign="center" halign="center"/>
<quad z-index="1" size="120 145" style="Bgs1" substyle="BgGradV" valign="center" halign="center"/>
<label pos="62 -70" z-index="0" size="60 3" text="Zone browser by $o$n$iBIGBANG1112" textfont="RajdhaniMono" rot="-90" manialink="bigbang1112" style="TextCardRaceRank" textsize="1" textemboss="1" hidden="1"/>
<frame z-index="2">
<label pos="0 66.2" size="90 6" text="Change location" halign="center" valign="center" translate="1" textfont="RajdhaniMono" textprefix="$t" textsize="4"/>
<frame pos="-52.5 65.5">
<quad pos="0 0" z-index="0" size="10 10" style="Bgs1" substyle="BgCard3" halign="center" valign="center" opacity=".25"/>
<quad pos="0.1 -0.1" z-index="0" size="10 10" halign="center" valign="center2" style="Bgs1" substyle="BgCardInventoryItem" scriptevents="1" modulatecolor="8BF" opacity=".5" id="QUAD_CHANGEZONE_COLLAPSE"/>
<quad z-index="0" size="10 10" halign="center" style="Bgs1InRace" substyle="BgCard" scriptevents="1" modulatecolor="048" valign="center" hidden="1"/>
<label z-index="1" size="10 8" text="" halign="center" valign="center2" textfont="RajdhaniMono" pos="0 -.5" style="TextTitle3" textsize="3.5"/>
</frame>
<frame pos="52.5 65.5">
<quad pos="0 0" z-index="0" size="10 10" style="Bgs1" substyle="BgCard3" halign="center" valign="center" opacity=".25"/>
<quad pos="0.1 -0.1" z-index="0" size="10 10" halign="center" valign="center2" style="Bgs1" substyle="BgCardInventoryItem" scriptevents="1" modulatecolor="8BF" opacity=".5" id="QUAD_CHANGEZONE_LOCATE"/>
<quad z-index="0" size="10 10" halign="center" style="Bgs1InRace" substyle="BgCard" scriptevents="1" modulatecolor="048" valign="center" hidden="1"/>
<label z-index="1" size="10 8" text="" halign="center" valign="center2" textfont="RajdhaniMono" pos="0 -.5" style="TextTitle3" textsize="3.5"/>
</frame>
<framemodel id="FRAMEMODEL_ITEM_ZONE">
<quad z-index="0" size="112 10.5" valign="center" style="Bgs1" substyle="BgCard3" opacity=".25" data-opacity=".25"/>
<quad z-index="1" size="112 10" valign="center" style="Bgs1" substyle="BgCardInventoryItem" opacity=".5" data-opacity=".5" scriptevents="1" modulatecolor="8BF" id="QUAD_ZONE_SELECT"/>
<quad pos="6" z-index="2" size="8 8" halign="center" valign="center" id="QUAD_ZONE"/>
<label pos="12.5 -0.3" z-index="2" size="95 5" valign="center2" textfont="RajdhaniMono" id="LABEL_ZONE" translate="1"/>
</framemodel>
<quad pos="-1.5 0" size="112 120" style="Bgs1" substyle="BgCardList" halign="center" valign="center" opacity=".5"/>
<frame z-index="1" pos="-57.5 55" id="FRAME_CHANGEZONE_SCROLL" scroll="True" scrollgrid="10 10" clip="True" clipposn="56.5 -54.25" clipsizen="112 119.5">
<frame id="FRAME_CHANGEZONE_SCROLL_INNER">
<frameinstance modelid="FRAMEMODEL_ITEM_ZONE" hidden="1"/>
<frameinstance modelid="FRAMEMODEL_ITEM_ZONE" pos="0 -10" hidden="1"/>
<frameinstance modelid="FRAMEMODEL_ITEM_ZONE" pos="0 -20" hidden="1"/>
<frameinstance modelid="FRAMEMODEL_ITEM_ZONE" pos="0 -30" hidden="1"/>
<frameinstance modelid="FRAMEMODEL_ITEM_ZONE" pos="0 -40" hidden="1"/>
<frameinstance modelid="FRAMEMODEL_ITEM_ZONE" pos="0 -50" hidden="1"/>
<frameinstance modelid="FRAMEMODEL_ITEM_ZONE" pos="0 -60" hidden="1"/>
<frameinstance modelid="FRAMEMODEL_ITEM_ZONE" pos="0 -70" hidden="1"/>
<frameinstance modelid="FRAMEMODEL_ITEM_ZONE" pos="0 -80" hidden="1"/>
<frameinstance modelid="FRAMEMODEL_ITEM_ZONE" pos="0 -90" hidden="1"/>
<frameinstance modelid="FRAMEMODEL_ITEM_ZONE" pos="0 -100" hidden="1"/>
<frameinstance modelid="FRAMEMODEL_ITEM_ZONE" pos="0 -110" hidden="1"/>
</frame>
</frame>
<quad z-index="2" size="20 20" halign="center" valign="center" pos="-1.5" style="BgRaceScore2" substyle="SandTimer" id="QUAD_CHANGEZONE_LOADING" class="LOADING"/>
<frame pos="56 60">
<quad z-index="0" size="2 120" style="Bgs1" substyle="BgCardList" id="QUAD_CHANGEZONE_SCROLLABLE" scriptevents="1" halign="center"/>
<quad z-index="1" size="2 30" style="Bgs1" substyle="BgWindow4" opacity=".75" id="QUAD_CHANGEZONE_SCROLLBAR" scriptevents="1" halign="center" hidden="1"/>
</frame>
<frame pos="-15.25 -65.5">
<quad pos="0 0" z-index="0" size="85 10" style="Bgs1" substyle="BgCard3" halign="center" valign="center" opacity=".25"/>
<quad pos="0.1 -0.1" z-index="0" size="85 10" halign="center" valign="center2" style="Bgs1" substyle="BgCardInventoryItem" scriptevents="1" modulatecolor="8BF" opacity=".5" id="QUAD_CHANGEZONE_CHANGE"/>
<quad z-index="0" size="85 10" halign="center" style="Bgs1InRace" substyle="BgCard" scriptevents="1" modulatecolor="048" valign="center" hidden="1"/>
<label z-index="1" size="85 8" text="Apply" halign="center" valign="center2" textfont="RajdhaniMono" pos="0 -.35" translate="1" style="TextTitle3" textsize="2.5"/>
</frame>
<frame pos="42.25 -65.5">
<quad pos="0 0" z-index="0" size="30 10" style="Bgs1" substyle="BgCard3" halign="center" valign="center" opacity=".25"/>
<quad pos="0.1 -0.1" z-index="0" size="30 10" halign="center" valign="center2" style="Bgs1" substyle="BgCardInventoryItem" scriptevents="1" modulatecolor="8BF" opacity=".5" id="QUAD_CHANGEZONE_BACK"/>
<quad z-index="0" size="30 10" halign="center" style="Bgs1InRace" substyle="BgCard" scriptevents="1" modulatecolor="048" valign="center" hidden="1"/>
<label z-index="1" size="30 8" text="Back" halign="center" valign="center2" textfont="RajdhaniMono" pos="0 -.35" translate="1" style="TextTitle3" textsize="2.5"/>
</frame>
</frame>
</frame>
<frame z-index="20" id="FRAME_TOOLTIP" hidden="1">
<quad pos="0 0" z-index="-1" size="43.5 6" style="Bgs1" substyle="BgCardOnline" colorize="000" id="QUAD_TOOLTIP"/>
<label pos="2 -3.1" z-index="0" size="43.5 6" text="Random text" valign="center2" textsize="1.5" textfont="BiryaniDemiBold" id="LABEL_TEXT" translate="1"/>
</frame>
<script><![CDATA[
#Include "TextLib" as TextLib
#Include "MathLib" as MathLib
#Include "TimeLib" as TimeLib
#Include "ColorLib" as ColorLib
#Struct SPersonalRecord {
Text Nickname;
Integer Time;
Integer Score;
Integer NbRespawns;
Integer[] Checkpoints;
}
#Struct SItem {
Text Content;
Text WR;
Text WRHolder;
Text WRHolderLogin;
Integer PB;
Text Context;
Text Image;
Text MapUid;
Text Timestamp;
Text Folder;
Integer SPRank;
Integer Skillpoints;
Integer WRCount;
Integer[] Medals;
Boolean Selected;
}
#Struct STitleInfo {
Text uid;
Integer cost;
Text name;
Text description;
Text card_url;
Text download_url;
Text background_url;
Text logo_url;
Text title_maker;
Boolean public;
}
#Struct SMXTrack {
Integer TrackID;
}
#Struct SMember {
Boolean Exists;
}
#Struct STrackerTitle {
Text Timestamp;
Text SecretKey;
Text TitleId;
Text AuthorLogin;
Text AuthorName;
Text Name;
Text Desc;
Text InfoUrl;
Text DownloadUrl;
Text TitleVersion;
Text MakerTitleId;
Text BaseTitleId;
}
#Struct STrackerMapInfo {
Text MapUid;
Text Comments;
Integer CopperPrice;
Text CollectionName;
Text AuthorLogin;
Text AuthorNickName;
Text AuthorZonePath;
Text MapType;
Boolean IsPlayable;
Integer TMObjective_AuthorTime;
Integer TMObjective_GoldTime;
Integer TMObjective_SilverTime;
Integer TMObjective_BronzeTime;
Integer TMObjective_NbLaps;
Boolean TMObjective_IsLapRace;
Text Name;
Integer RecordCount;
}
#Struct STrackerCampaign {
Text SecretKey;
Text TitleId;
Text CampaignId;
Text Timestamp;
Integer PlayerCount;
STrackerMapInfo[Text][] Maps;
}
#Struct STrackerRecord {
Integer Rank;
Text Login;
Text Nickname;
Integer Score;
Text ReplayUrl;
Text FileName;
}
#Struct STrackerCampaignRecords {
Text SecretKey;
Text TitleId;
Text CampaignId;
Text Timestamp;
STrackerRecord[][Text] Records;
}
#Struct STrackerGetCampaignsAttributes {
Text SecretKey;
Text TitleId;
Text Timestamp;
}
#Struct STrackerGetMapsAttributes {
Text SecretKey;
Text TitleId;
Text Timestamp;
Text Campaign;
}
#Struct STrackerGetRecordsAttributes {
Text SecretKey;
Text TitleId;
Text Timestamp;
Text Campaign;
Integer MapGroup;
}
#Struct STrackerCompareAttributes {
Text SecretKey;
Text TitleId;
Text Timestamp1;
Text Timestamp2;
}
#Struct STrackerHistoryMap {
Text name;
Text map_uid;
Text comments;
Integer copper_price;
Text collection_name;
Text author_login;
Text author_nickname;
Text author_zone_path;
Text map_type;
Boolean is_playable;
Integer author_time;
Integer gold_time;
Integer silver_time;
Integer bronze_time;
Integer laps;
Boolean is_lap_race;
Integer record_count;
}
#Struct STrackerHistoryRecord {
Integer rank;
Text login;
Text nickname;
Integer score;
Text replay_url;
Text file_name;
}
#Struct STrackerCompareRecord {
Integer rank;
Text login;
Text nickname;
Integer score;
Text replay_url;
Text file_name;
}
#Struct STrackerCompareMap {
Text name;
Text map_uid;
Text comments;
Integer copper_price;
Text collection_name;
Text author_login;
Text author_nickname;
Text author_zone_path;
Text map_type;
Boolean is_playable;
Integer author_time;
Integer gold_time;
Integer silver_time;
Integer bronze_time;
Integer laps;
Boolean is_lap_race;
Integer record_count;
STrackerCompareRecord[] records;
}
#Struct SZone {
Text path;
}
// Taken from Random.Script.txt
Text Char(Text _Charset) {
return TextLib::SubText(_Charset, MathLib::Rand(0,TextLib::Length(_Charset) - 1), 1);
}
Text String(Text _Charset, Integer _Min, Integer _Max) {
declare Text RandomString;
for(i,1,MathLib::Rand(_Min,_Max)) {
RandomString ^= Char(_Charset);
}
return RandomString;
}
Text String(Integer _Min, Integer _Max) {
return String("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", _Min, _Max);
}
//
declare Boolean Animate;
declare Text TitleFolderLevel;
declare Integer SelectedTitle;
declare Integer SelectedCampaign;
declare Integer SelectedMapGroup;
declare Integer SelectedMapInfo;
declare Integer SelectedRecord;
declare Integer SelectedMostWorldRecords;
declare Integer SelectedMostSkillpoints;
declare SItem[] Items;
declare Integer IsInFolder;
declare CTaskResult_NaturalLeaderBoardInfoList[Text][Text] TaskRecords;
declare CTaskResult_NaturalLeaderBoardInfoList TaskRecordsAdditional;
declare Boolean TaskRecordsAdditionalCompleted;
declare Boolean[Text][Text] TaskRecordsCompletion;
declare Integer[Text][Text] RecordCount;
declare Boolean StartRecordRequesting;
declare Integer TotalRequests;
declare CTaskResult_Ghost[] TaskGhosts;
declare Boolean[] TaskGhostsCompletion;
declare Boolean PreviousMouseRight;
declare Integer[] CampaignPlayerCount;
declare Text CampaignListType;
declare CTaskResult_NaturalLeaderBoardInfoList[Text] TaskSkillpoints;
declare CTaskResult_NaturalLeaderBoardInfoList TaskSkillpointsAdditional;
declare Boolean TaskSkillpointsAdditionalCompleted;
declare Boolean[Text] TaskSkillpointsCompletion;
declare CTaskResult_MapRecordList TaskSkillpointsList;
declare Boolean TaskSkillpointsListDone;
declare Vec2 ListOldScroll;
declare Boolean ListHoldScrollbar;
declare Real ListHoldScrollbarPos;
declare STitleInfo[Text] OnlineTitleInfo;
declare CHttpRequest[Text] RequestOnlineTitleInfo;
declare Text CurrentTitleTimestamp;
declare Text State;
declare Text[] TrackerTitles;
declare STrackerCampaign[] TrackerCampaigns;
declare STrackerCampaignRecords[] TrackerCampaignRecords;
declare Text[][Text] TrackerTimestamps;
declare Boolean IsInHistory;
declare Integer SelectedTimestamp;
declare Text[] TrackerHistoryCampaigns;
declare STrackerHistoryMap[][] TrackerHistoryMaps;
declare STrackerHistoryRecord[][Text] TrackerHistoryRecords;
declare STrackerCompareMap[][][Text] TrackerCompareResult;
declare CMap CurrentMap;
declare Text PreviousMapUid;
declare CTaskResult_ReplayList ReplayList;
declare Text SaveReplayFile;
declare CGhost SaveReplayGhost;
declare CTaskResult SaveReplayTask;
declare Boolean IsOnCurrentMap;
declare Text SaveReplayOrigin;
declare CTaskResult_NaturalLeaderBoardInfoList[Text] SortedMostWorldRecords;
declare CTaskResult_MapRecord[] SortedMostSkillpoints;
declare Text LeaderboardType;
declare Text LeaderboardZone;
Text TimeToTextWithMilli(Integer _Time, Boolean _Safe) {
if(_Time < 0)
return "-:--.---";
declare TimeText = TextLib::TimeToText(_Time, True)^TextLib::SubText(""^_Time, TextLib::Length(""^_Time)-1, 1);
if(_Safe) TimeText = TextLib::Replace(TextLib::Replace(TimeText, ":", "'"), ".", "''");
return TimeText;
}
Text TimeToTextWithMilli(Integer _Time) {
return TimeToTextWithMilli(_Time, False);
}
Text ToNicerNumber(Integer _Num) {
declare NewText = "";
for(I, 0, TextLib::Length(_Num^"")-1) {
NewText ^= TextLib::SubText(_Num^"", I, 1);
if((TextLib::Length(_Num^"")-I-1) % 3 == 0) NewText ^= " ";
}
return NewText;
}
Void StartLoadingRecords() {
CurrentTitleTimestamp = TimeLib::GetCurrent();
TotalRequests = 0;
foreach(C => Tasks in TaskRecords)
foreach(T in Tasks)
ScoreMgr.TaskResult_Release(T.Id);
TaskRecords.clear();
TaskRecordsCompletion.clear();
RecordCount.clear();
foreach(C => Task in TaskSkillpoints)
ScoreMgr.TaskResult_Release(Task.Id);
TaskSkillpoints.clear();
TaskSkillpointsCompletion.clear();
foreach(Campaign in DataFileMgr.Campaigns) {
if(Campaign.OfficialRecordEnabled) {
TaskRecords[Campaign.CampaignId] = [];
TaskRecordsCompletion[Campaign.CampaignId] = [];
RecordCount[Campaign.CampaignId] = [];
TaskSkillpoints[Campaign.CampaignId] = ScoreMgr.CampaignLeaderBoard_GetPlayerList(NullId, Campaign.CampaignId, LeaderboardZone, True, 0, 10);
TaskSkillpointsCompletion[Campaign.CampaignId] = False;
foreach(Group in Campaign.MapGroups) {
foreach(Info in Group.MapInfos) {
TaskRecords[Campaign.CampaignId][Info.MapUid] = ScoreMgr.MapLeaderBoard_GetPlayerList(NullId, Info.MapUid, Campaign.ScoreContext, LeaderboardZone, 0, 10);
TaskRecordsCompletion[Campaign.CampaignId][Info.MapUid] = False;
for(I, 0, 2) RecordCount[Campaign.CampaignId][Info.MapUid] = ScoreMgr.MapLeaderBoard_GetPlayerCount(Info.MapUid, Campaign.ScoreContext, LeaderboardZone);
TotalRequests += 1;
}
}
}
}
StartRecordRequesting = True;
}
Boolean IsCompareMode() {
return (Page.GetFirstChild("QUAD_BUTTON_COMPARE") as CMlQuad).ModulateColor == ColorLib::HexToRgb("048");
}
Void DisableCompareMode() {
(Page.GetFirstChild("QUAD_BUTTON_COMPARE") as CMlQuad).ModulateColor = ColorLib::HexToRgb("444");
}
Text GetCampaignIdFromIndex(Integer _I) {
declare Text Campaign;
declare Counter = 0;
foreach(C => Groups in TrackerCompareResult) {
if(Counter == _I) {
Campaign = C;
break;
}
Counter += 1;
}
return Campaign;
}
***ChangeZoneInit***
***
declare Frame_ChangeZone = (Page.GetFirstChild("FRAME_CHANGEZONE") as CMlFrame);
declare Frame_ChangeZone_Scroll = (Page.GetFirstChild("FRAME_CHANGEZONE_SCROLL") as CMlFrame);
declare Frame_ChangeZone_Scroll_Inner = (Page.GetFirstChild("FRAME_CHANGEZONE_SCROLL_INNER") as CMlFrame);
declare Quad_ChangeZone_Scrollbar = (Page.GetFirstChild("QUAD_CHANGEZONE_SCROLLBAR") as CMlQuad);
declare Quad_ChangeZone_Scrollable = (Page.GetFirstChild("QUAD_CHANGEZONE_SCROLLABLE") as CMlQuad);
declare SZone[] EntireZoneList;
declare Text[] ShownZones;
declare Text[] ExpandedZones;
declare Text SelectedZone;
Frame_ChangeZone_Scroll.DataAttributeSet("count", ShownZones.count^"");
Frame_ChangeZone_Scroll.DataAttributeSet("scroll", "-1");
declare HoldingScrollbarMouseY = 0.;
declare HoldingScrollbarPosY = 0.;
declare HoldingScrollbar = False;
declare PrevHoldingScrollbar = False;
declare OverScrollbar = False;
declare CHttpRequest RequestZones;
declare UpdateAutoScroll = -1.;
***
***ChangeZoneLoopBeforeEvent***
***
if(UpdateAutoScroll != -1) {
Frame_ChangeZone_Scroll.ScrollOffset.Y = UpdateAutoScroll;
UpdateAutoScroll = -1.;
}
***
***ChangeZoneLoop***
***
if(RequestZones != Null) {
if(RequestZones.IsCompleted) {
if(RequestZones.StatusCode == 200) {
declare Json = EntireZoneList.fromjson(RequestZones.Result);
+++UpdateShownZones+++
Frame_ChangeZone_Scroll.DataAttributeSet("count", ShownZones.count^"");
Frame_ChangeZone_Scroll.ScrollMax.Y = MathLib::Max(0., (ShownZones.count - 12) * 10.);
SelectedZone = LeaderboardZone;
+++UpdateChangeZoneScroll+++
}
Page.GetFirstChild("QUAD_CHANGEZONE_LOADING").Hide();
Http.Destroy(RequestZones);
RequestZones = Null;
}
}
if(HoldingScrollbar) {
Quad_ChangeZone_Scrollbar.RelativePosition_V3.Y = MathLib::Min(0.,
MathLib::Max(-Quad_ChangeZone_Scrollable.Size.Y + Quad_ChangeZone_Scrollbar.Size.Y,
MathLib::NearestInteger((HoldingScrollbarPosY - HoldingScrollbarMouseY + MouseY) / (Quad_ChangeZone_Scrollbar.Size.Y / 12)) * (Quad_ChangeZone_Scrollbar.Size.Y / 12)));
Frame_ChangeZone_Scroll.ScrollOffset.Y = MathLib::Min(Frame_ChangeZone_Scroll.ScrollMax.Y,
MathLib::Max(0.,
MathLib::NearestInteger((-HoldingScrollbarPosY + (HoldingScrollbarMouseY - MouseY)) / (Quad_ChangeZone_Scrollbar.Size.Y / 12)) * 10.));
if(!MouseLeftButton)
HoldingScrollbar = False;
}
if(HoldingScrollbar != PrevHoldingScrollbar) {
if(!HoldingScrollbar) {
if(!OverScrollbar)
AnimMgr.Add(Quad_ChangeZone_Scrollbar, "<quad opacity=\".75\"/>", 150, CAnimManager::EAnimManagerEasing::QuadOut);
}
PrevHoldingScrollbar = HoldingScrollbar;
}
Frame_ChangeZone_Scroll.ScrollMax.Y = MathLib::Max(0., (ShownZones.count - 12) * 10.);
if(Frame_ChangeZone_Scroll.ScrollMax.Y == 0)
Quad_ChangeZone_Scrollbar.Visible = False;
else Quad_ChangeZone_Scrollbar.Visible = True;
if(Frame_ChangeZone_Scroll.ScrollOffset.Y != TextLib::ToReal(Frame_ChangeZone_Scroll.DataAttributeGet("scroll"))) {
+++UpdateChangeZoneScroll+++
Frame_ChangeZone_Scroll.DataAttributeSet("scroll", Frame_ChangeZone_Scroll.ScrollOffset.Y^"");
}
***
***ChangeZoneEvent***
***
switch(Event.Type) {
case CMlScriptEvent::Type::MouseClick: {
switch(Event.ControlId) {
case "QUAD_CHANGEZONE_SCROLLBAR": {
HoldingScrollbar = True;
HoldingScrollbarMouseY = MouseY;
HoldingScrollbarPosY = Event.Control.RelativePosition_V3.Y;
}
case "QUAD_ZONE_SELECT": {
declare Zone = Event.Control.DataAttributeGet("zone");
SelectedZone = Zone;
if(ExpandedZones.exists(Zone)) {
for(I, 0, ExpandedZones.count - 1) {
declare ToRemove = -1;
foreach(Index => Z in ExpandedZones)
if(TextLib::StartsWith(Zone, Z))
ToRemove = Index;
if(ToRemove != -1)
ExpandedZones.removekey(ToRemove);
}
}
else {
ExpandedZones.add(Zone);
}
+++UpdateShownZones+++
Frame_ChangeZone_Scroll.DataAttributeSet("count", ShownZones.count^"");
Frame_ChangeZone_Scroll.ScrollMax.Y = MathLib::Max(0., (ShownZones.count - 12) * 10.);
+++UpdateChangeZoneScroll+++
}
case "QUAD_CHANGEZONE_LOCATE": {
declare Zone = LocalUser.ZonePath;
declare Zones = TextLib::Split("|", Zone);
declare Text[] ZoneBuild;
for(I, 0, Zones.count - 1) {
ZoneBuild.add(Zones[I]);
if(!ExpandedZones.exists(TextLib::Join("|", ZoneBuild)))
ExpandedZones.add(TextLib::Join("|", ZoneBuild));
}
+++UpdateShownZones+++
SelectedZone = Zone;
Frame_ChangeZone_Scroll.DataAttributeSet("count", ShownZones.count^"");
Frame_ChangeZone_Scroll.ScrollMax.Y = MathLib::Max(0., (ShownZones.count - 12) * 10.);
+++UpdateChangeZoneScroll+++
foreach(I => Z in ShownZones) {
if(Z == Zone) {
UpdateAutoScroll = (I-5)*10.;
break;
}
}
}
case "QUAD_CHANGEZONE_COLLAPSE": {
ExpandedZones.clear();
+++UpdateShownZones+++
SelectedZone = "World";
Frame_ChangeZone_Scroll.DataAttributeSet("count", ShownZones.count^"");
Frame_ChangeZone_Scroll.ScrollMax.Y = MathLib::Max(0., (ShownZones.count - 12) * 10.);
+++UpdateChangeZoneScroll+++
}
case "QUAD_CHANGEZONE_CHANGE": {
LeaderboardZone = SelectedZone;
declare Zones = TextLib::Split("|", SelectedZone);
declare Label = (Page.GetFirstChild("LABEL_BUTTON_ZONE") as CMlLabel);
Label.Value = "|Zone|"^Zones[Zones.count-1];
Label.TextSizeReal = 1.5;
while(Label.ComputeWidth(Label.Value, True) > Label.Size.X)
Label.TextSizeReal -= .1;
StartLoadingRecords();
if(TitleFolderLevel == "Map info" || TitleFolderLevel == "Map group" || TitleFolderLevel == "Campaign")
UpdateTitleFolder(False, False);
else if(LoadedTitle != Null)
ChangeToTitleLevel(LoadedTitle.TitleId);
}
case "QUAD_CHANGEZONE_BACK": {
}
}
}
case CMlScriptEvent::Type::MouseOver: {
switch(Event.ControlId) {
case "QUAD_CHANGEZONE_SCROLLBAR": {
OverScrollbar = True;
AnimMgr.Add(Event.Control, "<quad opacity=\"1\"/>", 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
}
}
case CMlScriptEvent::Type::MouseOut: {
switch(Event.ControlId) {
case "QUAD_CHANGEZONE_SCROLLBAR": {
OverScrollbar = False;
if(!HoldingScrollbar)
AnimMgr.Add(Event.Control, "<quad opacity=\".75\"/>", 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
}
}
}
***
***UpdateChangeZoneScroll***
***
Frame_ChangeZone_Scroll_Inner.RelativePosition_V3.Y = -Frame_ChangeZone_Scroll.ScrollOffset.Y;
declare Count = TextLib::ToInteger(Frame_ChangeZone_Scroll.DataAttributeGet("count"));
declare Offset = MathLib::NearestInteger(Frame_ChangeZone_Scroll.ScrollOffset.Y / 10);
declare Difference = MathLib::NearestInteger((Frame_ChangeZone_Scroll.ScrollOffset.Y - TextLib::ToReal(Frame_ChangeZone_Scroll.DataAttributeGet("scroll"))) / 10);
if(Count > 12) {
Quad_ChangeZone_Scrollbar.Size.Y = 12. / Count * Quad_ChangeZone_Scrollable.Size.Y;
Quad_ChangeZone_Scrollbar.RelativePosition_V3.Y = -Frame_ChangeZone_Scroll.ScrollOffset.Y / Frame_ChangeZone_Scroll.ScrollMax.Y * (Quad_ChangeZone_Scrollable.Size.Y - Quad_ChangeZone_Scrollbar.Size.Y);
Quad_ChangeZone_Scrollbar.Show();
}
else {
Quad_ChangeZone_Scrollbar.Hide();
}
foreach(Index => Control in Frame_ChangeZone_Scroll_Inner.Controls) {
declare Frame = (Control as CMlFrame);
if(Index < Count) {
declare Label_Zone = (Frame.GetFirstChild("LABEL_ZONE") as CMlLabel);
declare Quad_Zone = (Frame.GetFirstChild("QUAD_ZONE") as CMlQuad);
declare Quad_Zone_Select = (Frame.GetFirstChild("QUAD_ZONE_SELECT") as CMlQuad);
while(!ShownZones.existskey(Index + Offset)) {
Frame_ChangeZone_Scroll.ScrollOffset.Y -= 10.;
Offset = MathLib::NearestInteger(Frame_ChangeZone_Scroll.ScrollOffset.Y / 10);
}
declare Zone = ShownZones[Index + Offset];
Quad_Zone_Select.DataAttributeSet("zone", Zone);
declare Zones = TextLib::Split("|", Zone);
Quad_Zone.ChangeImageUrl("file://ZoneFlags/Path/"^Zone);
Quad_Zone.RelativePosition_V3.X = 6 + (Zones.count-1)*5.;
Label_Zone.RelativePosition_V3.X = 12.5 + (Zones.count-1)*5.;
Label_Zone.Size.X = 95-(Label_Zone.RelativePosition_V3.X-12.5);
Label_Zone.Value = TextLib::GetTranslatedText("|Zone|"^Zones[Zones.count-1]);
declare Amount = 0;
foreach(Z in EntireZoneList) {
if(TextLib::StartsWith(Zone^"|", Z.path)) {
Amount += 1;
}
}
if(Amount > 0) {
if(ExpandedZones.exists(Zone))
Label_Zone.Value ^= " ⏷";
else
Label_Zone.Value ^= " ⏵";
}
if(Zone == SelectedZone) {
Quad_Zone_Select.StyleSelected = True;
}
else {
Quad_Zone_Select.StyleSelected = False;
}
Control.Show();
if(!HoldingScrollbar && ((Index == 0 && Difference == -1) || (Index == 12 - 1 && Difference == 1))) {
foreach(C in Frame.Controls) {
declare DataOpacity = C.DataAttributeGet("opacity");
declare Opacity = 1.;
if(DataOpacity != "") Opacity = TextLib::ToReal(DataOpacity);
if(C is CMlQuad) (C as CMlQuad).Opacity = 0.;
if(C is CMlLabel) (C as CMlLabel).Opacity = 0.;
AnimMgr.Add(C, "<control opacity=\""^Opacity^"\"/>", 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
}
}
else {
Control.Hide();
}
}
***
***UpdateShownZones***
***
ShownZones.clear();
foreach(I => Z in EntireZoneList) {
if(I == 0) {
ShownZones.add(Z.path);
continue;
}
declare Zones = TextLib::Split("|", Z.path);
foreach(ExZone in ExpandedZones) {
if(TextLib::StartsWith(ExZone, Z.path) && TextLib::Split("|", ExZone).count == Zones.count-1)
ShownZones.add(Z.path);
}
}
***
***UpdatePanelCampaign***
***
Label_Panel_Name.Value = "Campaign";
declare Label_Campaign = (Frame_Panel_Campaign.GetFirstChild("LABEL_CAMPAIGN") as CMlLabel);
declare Label_MapGroups = (Frame_Panel_Campaign.GetFirstChild("LABEL_MAPGROUPS") as CMlLabel);
declare Label_TotalMaps = (Frame_Panel_Campaign.GetFirstChild("LABEL_TOTALMAPS") as CMlLabel);
declare Label_OfficialRecords = (Frame_Panel_Campaign.GetFirstChild("LABEL_OFFICIALRECORDS") as CMlLabel);
declare Label_Players = (Frame_Panel_Campaign.GetFirstChild("LABEL_PLAYERS") as CMlLabel);
declare Label_RecordCount = (Frame_Panel_Campaign.GetFirstChild("LABEL_RECORDCOUNT") as CMlLabel);
if(IsInHistory) {
Label_Players.Hide();
Label_RecordCount.Hide();
Label_MapGroups.Hide();
Label_TotalMaps.Hide();
Label_OfficialRecords.Hide();
declare Text ChangeCampaign;
if(IsCompareMode()) {
declare Counter = 0;
foreach(Campaign => Groups in TrackerCompareResult) {
if(Counter == I) {
ChangeCampaign = Campaign;
break;
}
Counter += 1;
}
}
else
ChangeCampaign = TrackerHistoryCampaigns[I];
if(_Animate) {
if(Label_Campaign.Value != ChangeCampaign) {
AnimMgr.Flush(Label_Campaign);
Label_Campaign.Opacity = 0.;
AnimMgr.Add(Label_Campaign, "<label opacity=\"1\"/>", Now+50*0, 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
}
Label_Campaign.Value = ChangeCampaign;
}
else {
declare Campaign = DataFileMgr.Campaigns[I];
declare MapCount = 0;
declare RecCount = 0;
foreach(MapGroup in Campaign.MapGroups) {
MapCount += MapGroup.MapInfos.count;
if(Campaign.OfficialRecordEnabled)
foreach(MapUid => Count in RecordCount[Campaign.CampaignId])
RecCount += Count;
}
declare ChangeCampaign = Campaign.CampaignId;
declare ChangeMapGroups = "$o"^Campaign.MapGroups.count^"$o map groups";
declare ChangeTotalMaps = "$o"^MapCount^"$o total maps";
if(_Animate) {
if(Label_Campaign.Value != ChangeCampaign) {
AnimMgr.Flush(Label_Campaign);
Label_Campaign.Opacity = 0.;
AnimMgr.Add(Label_Campaign, "<label opacity=\"1\"/>", Now+50*0, 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
if(Label_MapGroups.Value != ChangeMapGroups) {
AnimMgr.Flush(Label_MapGroups);
Label_MapGroups.Opacity = 0.;
AnimMgr.Add(Label_MapGroups, "<label opacity=\"1\"/>", Now+50*1, 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
if(Label_TotalMaps.Value != ChangeTotalMaps) {
AnimMgr.Flush(Label_TotalMaps);
Label_TotalMaps.Opacity = 0.;
AnimMgr.Add(Label_TotalMaps, "<label opacity=\"1\"/>", Now+50*2, 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
}
Label_Campaign.Value = ChangeCampaign;
Label_MapGroups.Value = ChangeMapGroups;
Label_TotalMaps.Value = ChangeTotalMaps;
declare ChangeOfficialRecords = "Official records $4c4$oenabled";
declare ChangePlayers = "$o" ^ ScoreMgr.CampaignLeaderBoard_GetPlayerCount(Campaign.CampaignId, LeaderboardZone, True) ^ " players$o participated";
declare ChangeRecordCount = "$o" ^ RecCount ^ " total records$o driven";
if(Campaign.OfficialRecordEnabled) {
if(_Animate) {
if(Label_OfficialRecords.Value != ChangeOfficialRecords) {
AnimMgr.Flush(Label_OfficialRecords);
Label_OfficialRecords.Opacity = 0.;
AnimMgr.Add(Label_OfficialRecords, "<label opacity=\"1\"/>", Now+50*3, 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
if(Label_Players.Value != ChangePlayers) {
AnimMgr.Flush(Label_Players);
Label_Players.Opacity = 0.;
AnimMgr.Add(Label_Players, "<label opacity=\"1\"/>", Now+50*4, 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
if(Label_RecordCount.Value != ChangeRecordCount) {
AnimMgr.Flush(Label_RecordCount);
Label_RecordCount.Opacity = 0.;
AnimMgr.Add(Label_RecordCount, "<label opacity=\"1\"/>", Now+50*5, 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
}
Label_OfficialRecords.Value = ChangeOfficialRecords;
Label_Players.Value = ChangePlayers;
Label_RecordCount.Value = ChangeRecordCount;
Label_Players.Show();
Label_RecordCount.Show();
}
else {
Label_OfficialRecords.Value = "Official records $c44$odisabled";
Label_Players.Hide();
Label_RecordCount.Hide();
}
Label_MapGroups.Show();
Label_TotalMaps.Show();
Label_OfficialRecords.Show();
}
Frame_Panel_Campaign.Show();
***
***UpdatePanelMostWorldRecords***
***
Label_Panel_Name.Value = "$t"^Items[I].WRHolder;
declare Label_MostWorldRecords = (Frame_Panel_MostWorldRecords.GetFirstChild("LABEL_MOSTWORLDRECORDS") as CMlLabel);
declare Frame_Records = (Frame_Panel_MostWorldRecords.GetFirstChild("FRAME_RECORDS") as CMlFrame);
if(IsInHistory) {
}
else {
if(TaskRecords.existskey(DataFileMgr.Campaigns[SelectedCampaign].CampaignId)) {
declare CTaskResult_NaturalLeaderBoardInfoList[Text] MostWorldRecords;
declare Text[Text] Nicknames;
foreach(MapUid => Task in TaskRecords[DataFileMgr.Campaigns[SelectedCampaign].CampaignId]) {
if(Task.HasSucceeded) {
if(Task.LeaderBoardInfo.count > 0 && Task.LeaderBoardInfo[0].Score >= 0) {
declare WR <=> Task.LeaderBoardInfo[0];
if(WR.Login == Items[I].WRHolderLogin) {
MostWorldRecords[MapUid] = Task;
}
}
}
}
declare Integer[Text] MapSorts;
foreach(MapUid => Task in MostWorldRecords) {
MapSorts[MapUid] = RecordCount[DataFileMgr.Campaigns[SelectedCampaign].CampaignId][MapUid];
}
MapSorts = MapSorts.sortreverse();
SortedMostWorldRecords.clear();
foreach(MapUid => Count in MapSorts) {
SortedMostWorldRecords[MapUid] = MostWorldRecords[MapUid];
}
MostWorldRecords.clear();
declare CMapInfo[Text] MapInfos;
foreach(MapUid => Count in MapSorts) {
foreach(MapGroup in DataFileMgr.Campaigns[SelectedCampaign].MapGroups) {
foreach(MapInfo in MapGroup.MapInfos) {
if(MapInfo.MapUid == MapUid) {
MapInfos[MapUid] <=> MapInfo;
}
}
}
}
declare Counter = 0;
declare Offset = 0;
foreach(MapUid => Task in SortedMostWorldRecords) {
declare Rank = Counter+1-Offset;
if(Frame_Records.Controls.existskey(Counter)) {
declare Label = (Frame_Records.Controls[Counter] as CMlLabel);
Label.Value = TextLib::FormatInteger(Rank, 2) ^ ")$o " ^ TimeToTextWithMilli(Task.LeaderBoardInfo[0].Score) ^ " $o" ^ TextLib::GetTranslatedText("on") ^ " " ^ MapInfos[MapUid].Name;
Label.DataAttributeSet("mapuid", MapUid);
Label.Show();
if(_Animate) {
AnimMgr.Flush(Label);
Label.Opacity = 0.;
AnimMgr.Add(Label, "<label opacity=\"1\"/>", Now+Counter*20, 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
}
Counter += 1;
}
for(J, Counter, Frame_Records.Controls.count-1) {
Frame_Records.Controls[J].Hide();
}
if(SortedMostWorldRecords.count == 1)
Label_MostWorldRecords.Value = "1 world record";
else
Label_MostWorldRecords.Value = SortedMostWorldRecords.count ^ " world records";
if(_Animate) {
Label_MostWorldRecords.Opacity = 0.;
AnimMgr.Add(Label_MostWorldRecords, "<label opacity=\"1\"/>", 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
}
}
Frame_Panel_MostWorldRecords.Show();
***
***UpdatePanelMostSkillpoints***
***
Label_Panel_Name.Value = "$t"^Items[I].WRHolder;
declare Login = Items[I].WRHolderLogin;
declare Label_MostWorldRecords = (Frame_Panel_MostWorldRecords.GetFirstChild("LABEL_MOSTWORLDRECORDS") as CMlLabel);
declare Frame_Records = (Frame_Panel_MostWorldRecords.GetFirstChild("FRAME_RECORDS") as CMlFrame);
Quad_Panel_Loading.Hide();
if(IsInHistory) {
}
else {
if(TaskSkillpointsList == Null) {
TaskSkillpointsList = ScoreMgr.Campaign_GetOpponentRecords(NullId, DataFileMgr.Campaigns[SelectedCampaign].CampaignId, Items[I].WRHolderLogin);
Frame_Panel_MostWorldRecords.Hide();
Quad_Panel_Loading.Show();
}
else if(TaskSkillpointsList.HasSucceeded) {
declare Counter = 0;
declare Offset = 0;
SortedMostSkillpoints.clear();
declare Integer[Text] Sorter;
foreach(Record in TaskSkillpointsList.MapRecordList) {
Sorter[Record.MapUid] = Record.SkillPoints;
}
Sorter = Sorter.sortreverse();
foreach(MapUid => SP in Sorter) {
foreach(Record in TaskSkillpointsList.MapRecordList) {
if(Record.MapUid == MapUid)
SortedMostSkillpoints.add(Record);
}
}
foreach(Record in SortedMostSkillpoints) {
declare Rank = Counter+1-Offset;
if(Frame_Records.Controls.existskey(Counter)) {
declare Label = (Frame_Records.Controls[Counter] as CMlLabel);
Label.Value = TextLib::FormatInteger(Rank, 2) ^ ") $0f0" ^ ToNicerNumber(Record.SkillPoints) ^ "$fff" ^ TextLib::GetTranslatedText("on") ^ " " ^ Record.MapName;
Label.DataAttributeSet("mapuid", Record.MapUid);
Label.DataAttributeSet("timestamp", Record.Timestamp^"");
Label.Show();
if(_Animate) {
AnimMgr.Flush(Label);
Label.Opacity = 0.;
AnimMgr.Add(Label, "<label opacity=\"1\"/>", Now+Counter*20, 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
}
Counter += 1;
}
for(J, Counter, Frame_Records.Controls.count-1) {
Frame_Records.Controls[J].Hide();
}
Frame_Panel_MostWorldRecords.Show();
}
else {
if(TaskSkillpointsList.IsProcessing)
Quad_Panel_Loading.Show();
Frame_Panel_MostWorldRecords.Hide();
}
if(I >= 10)
Label_MostWorldRecords.Value = "$0f0" ^ ToNicerNumber(TaskSkillpointsAdditional.LeaderBoardInfo[I-10].Score);
else
Label_MostWorldRecords.Value = "$0f0" ^ ToNicerNumber(TaskSkillpoints[DataFileMgr.Campaigns[SelectedCampaign].CampaignId].LeaderBoardInfo[I].Score);
/*if(TaskRecords.existskey(DataFileMgr.Campaigns[SelectedCampaign].CampaignId)) {
declare CTaskResult_NaturalLeaderBoardInfoList[Text] MostWorldRecords;
declare Text[Text] Nicknames;
foreach(MapUid => Task in TaskRecords[DataFileMgr.Campaigns[SelectedCampaign].CampaignId]) {
if(Task.HasSucceeded) {
if(Task.LeaderBoardInfo.count > 0 && Task.LeaderBoardInfo[0].Score >= 0) {
declare WR <=> Task.LeaderBoardInfo[0];
if(WR.Login == Items[I].WRHolderLogin) {
MostWorldRecords[MapUid] = Task;
}
}
}
}
declare Integer[Text] MapSorts;
foreach(MapUid => Task in MostWorldRecords) {
MapSorts[MapUid] = RecordCount[DataFileMgr.Campaigns[SelectedCampaign].CampaignId][MapUid];
}
MapSorts = MapSorts.sortreverse();
SortedMostWorldRecords.clear();
foreach(MapUid => Count in MapSorts) {
SortedMostWorldRecords[MapUid] = MostWorldRecords[MapUid];
}
MostWorldRecords.clear();
declare CMapInfo[Text] MapInfos;
foreach(MapUid => Count in MapSorts) {
foreach(MapGroup in DataFileMgr.Campaigns[SelectedCampaign].MapGroups) {
foreach(MapInfo in MapGroup.MapInfos) {
if(MapInfo.MapUid == MapUid) {
MapInfos[MapUid] <=> MapInfo;
}
}
}
}
declare Counter = 0;
declare Offset = 0;
foreach(MapUid => Task in SortedMostWorldRecords) {
declare Rank = Counter+1-Offset;
if(Frame_Records.Controls.existskey(Counter)) {
declare Label = (Frame_Records.Controls[Counter] as CMlLabel);
Label.Value = TextLib::FormatInteger(Rank, 2) ^ ")$o " ^ TimeToTextWithMilli(Task.LeaderBoardInfo[0].Score) ^ " $o" ^ TextLib::GetTranslatedText("on") ^ " " ^ MapInfos[MapUid].Name;
Label.DataAttributeSet("mapuid", MapUid);
Label.Show();
if(_Animate) {
AnimMgr.Flush(Label);
Label.Opacity = 0.;
AnimMgr.Add(Label, "<label opacity=\"1\"/>", Now+Counter*20, 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
}
Counter += 1;
}
for(J, Counter, Frame_Records.Controls.count-1) {
Frame_Records.Controls[J].Hide();
}
if(SortedMostWorldRecords.count == 1)
Label_MostWorldRecords.Value = "1 world record";
else
Label_MostWorldRecords.Value = SortedMostWorldRecords.count ^ " world records";
if(_Animate) {
Label_MostWorldRecords.Opacity = 0.;
AnimMgr.Add(Label_MostWorldRecords, "<label opacity=\"1\"/>", 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
}*/
}
***
***UpdatePanelMapGroup***
***
Label_Panel_Name.Value = "Map group";
declare Frame_Maps = (Frame_Panel_MapGroup.GetFirstChild("FRAME_MAPS") as CMlFrame);
foreach(Control in Frame_Maps.Controls) Control.Hide();
declare Label_RecordCount = (Frame_Panel_MapGroup.GetFirstChild("LABEL_RECORDCOUNT") as CMlLabel);
declare Label_FinishPercent = (Frame_Panel_Map.GetFirstChild("LABEL_FINISHPERCENT") as CMlLabel);
if(IsInHistory) {
Label_RecordCount.Hide();
if(IsCompareMode()) {
declare CampaignId = GetCampaignIdFromIndex(SelectedCampaign);
// Later maybe show the group maps
}
else {
for(J, 0, TrackerHistoryMaps[I].count-1) {
declare MapInfo = TrackerHistoryMaps[I][J];
declare CampaignId = TrackerHistoryCampaigns[SelectedCampaign];
if(Frame_Maps.Controls.existskey(J)) {
declare Frame = (Frame_Maps.Controls[J] as CMlFrame);
(Frame.GetFirstChild("QUAD_THUMBNAIL") as CMlQuad).ChangeImageUrl("file://Thumbnails/MapUid/"^MapInfo.map_uid);
(Frame.GetFirstChild("LABEL_MAP") as CMlLabel).Value = MapInfo.name;
Frame.Show();
}
}
}
}
else {
declare MapGroup = DataFileMgr.Campaigns[SelectedCampaign].MapGroups[I];
declare Count = 0;
for(J, 0, MapGroup.MapInfos.count-1) {
declare MapInfo = MapGroup.MapInfos[J];
declare CampaignId = DataFileMgr.Campaigns[SelectedCampaign].CampaignId;
if(RecordCount.existskey(CampaignId)
&& RecordCount[CampaignId].existskey(MapInfo.MapUid)) {
Count += RecordCount[CampaignId][MapInfo.MapUid];
}
if(Frame_Maps.Controls.existskey(J)) {
declare Frame = (Frame_Maps.Controls[J] as CMlFrame);
(Frame.GetFirstChild("QUAD_THUMBNAIL") as CMlQuad).ChangeImageUrl("file://Thumbnails/MapUid/"^MapInfo.MapUid);
(Frame.GetFirstChild("LABEL_MAP") as CMlLabel).Value = MapInfo.Name;
Frame.Show();
}
}
if(Count == 0) {
Label_RecordCount.Value = "$oNo records$o driven";
}
else {
Label_RecordCount.Value = "$o" ^ Count ^ " total records$o driven";
}
Label_RecordCount.Show();
}
Frame_Panel_MapGroup.Show();
***
***UpdatePanelMap***
***
Label_Panel_Name.Value = "Map";
declare Label_Map = (Frame_Panel_Map.GetFirstChild("LABEL_MAP") as CMlLabel);
declare Label_Author = (Frame_Panel_Map.GetFirstChild("LABEL_AUTHOR") as CMlLabel);
declare Entry_MapUid = (Frame_Panel_Map.GetFirstChild("ENTRY_MAPUID") as CMlEntry);
declare Label_RecordBy = (Frame_Panel_Map.GetFirstChild("LABEL_RECORDBY") as CMlLabel);
declare Label_FinishPercent = (Frame_Panel_Map.GetFirstChild("LABEL_FINISHPERCENT") as CMlLabel);
declare Label_RecordCount = (Frame_Panel_Map.GetFirstChild("LABEL_RECORDCOUNT") as CMlLabel);
declare Quad_Button_WR_SaveReplay = (Frame_Panel_Map.GetFirstChild("QUAD_BUTTON_WR_SAVEREPLAY") as CMlQuad);
declare Label_Button_WR_SaveReplay = (Frame_Panel_Map.GetFirstChild("LABEL_BUTTON_WR_SAVEREPLAY") as CMlLabel);
if(IsInHistory) {
if(IsCompareMode()) {
declare Campaign = GetCampaignIdFromIndex(SelectedCampaign);
declare Index = -1;
declare Counter = -1;
foreach(Group in TrackerCompareResult[Campaign]) {
Counter += 1;
if(Group.count > 0) Index += 1;
if(SelectedMapGroup == Index) break;
}
if(Counter >= 0) {
declare Index2 = -1;
declare Counter2 = -1;
foreach(Map in TrackerCompareResult[Campaign][Counter]) {
Counter2 += 1;
if(Map.map_uid != "") Index2 += 1;
if(I == Index2) break;
}
declare Map = TrackerCompareResult[Campaign][Counter][Counter2];
Label_Map.Value = Map.name;
Label_Author.Value = TextLib::GetTranslatedText("by")^" "^Map.author_nickname;
Entry_MapUid.Value = Map.map_uid;
}
}
else {
declare MapInfo = TrackerHistoryMaps[SelectedMapGroup][I];
Label_Map.Value = MapInfo.name;
Label_Author.Value = TextLib::GetTranslatedText("by")^" "^MapInfo.author_nickname;
Entry_MapUid.Value = MapInfo.map_uid;
}
Label_FinishPercent.Hide();
Label_RecordCount.Hide();
Label_Button_WR_SaveReplay.Value = "";
}
else {
declare MapInfo = DataFileMgr.Campaigns[SelectedCampaign].MapGroups[SelectedMapGroup].MapInfos[I];
Label_Map.Value = MapInfo.Name;
Label_Author.Value = TextLib::GetTranslatedText("by")^" "^MapInfo.AuthorNickName;
Entry_MapUid.Value = MapInfo.MapUid;
Label_Button_WR_SaveReplay.Value = "";
Quad_Button_WR_SaveReplay.Style = "";
Label_Button_WR_SaveReplay.TextColor = <.7,.7,.7>;
if(RecordCount.existskey(DataFileMgr.Campaigns[SelectedCampaign].CampaignId)
&& RecordCount[DataFileMgr.Campaigns[SelectedCampaign].CampaignId].existskey(MapInfo.MapUid)) {
declare RecordCount = RecordCount[DataFileMgr.Campaigns[SelectedCampaign].CampaignId][MapInfo.MapUid];
if(RecordCount == 0) {
Label_FinishPercent.Hide();
Label_RecordCount.Value = "$oNo records$o driven";
Label_RecordBy.Value = "No record";
}
else {
declare Percent = 0.;
declare CampaignPlayerCount = ScoreMgr.CampaignLeaderBoard_GetPlayerCount(DataFileMgr.Campaigns[SelectedCampaign].CampaignId, LeaderboardZone, True);
if(CampaignPlayerCount > 0)
Percent = RecordCount/MathLib::ToReal(CampaignPlayerCount);
if(Percent > 1)
Label_FinishPercent.Value = "Finished by $oall$o players";
else
Label_FinishPercent.Value = "Finished by $o"^TextLib::FormatReal(Percent*100, 3, True, True)^"%$o of players";
Label_FinishPercent.Show();
Label_RecordCount.Value = "$o" ^ RecordCount ^ " records$o driven";
declare Task = TaskRecords[DataFileMgr.Campaigns[SelectedCampaign].CampaignId][MapInfo.MapUid];
if(Task.HasSucceeded) {
declare Record <=> Task.LeaderBoardInfo[0];
Label_RecordBy.Value = TimeToTextWithMilli(Record.Score) ^ " "^TextLib::GetTranslatedText("by")^" " ^ Record.DisplayName;
if(TaskGhosts.count == 0) {
if(Record.ReplayUrl != "" && Record.FileName != "") {
TaskGhosts.add(DataFileMgr.Ghost_Download(Record.FileName, Record.ReplayUrl));
TaskGhostsCompletion.add(False);
}
else if(Record.Login == LocalUser.Login && Record.Score == ScoreMgr.Map_GetRecord(NullId, MapInfo.MapUid, DataFileMgr.Campaigns[SelectedCampaign].ScoreContext)) {
TaskGhosts.add(ScoreMgr.Map_GetRecordGhost(NullId, MapInfo.MapUid, DataFileMgr.Campaigns[SelectedCampaign].ScoreContext));
TaskGhostsCompletion.add(False);
}
else {
TaskGhosts.add(Null);
TaskGhostsCompletion.add(True);
}
}
Label_Button_WR_SaveReplay.Value = " " ^ TextLib::GetTranslatedText("Downloading data...");
if(TaskGhosts[0] != Null && TaskGhosts[0].HasSucceeded) {
Label_Button_WR_SaveReplay.Value = " " ^ TextLib::GetTranslatedText("Save replay");
if(CurrentMap != Null && CurrentMap.MapInfo.MapUid == MapInfo.MapUid) {
Quad_Button_WR_SaveReplay.Style = "Bgs1";
Label_Button_WR_SaveReplay.TextColor = <1.,1.,1.>;
}
}
}
}
declare Skillpoints = MathLib::NearestInteger((RecordCount-1)*100./1.);
if(RecordCount == 0) Skillpoints = 0;
Label_RecordCount.DataAttributeSet("tooltip", "This map has a value of $o$0f0"^Skillpoints^"$o$fff skillpoints");
}
else
Label_RecordCount.Value = "$o(?) records$o driven";
Label_RecordCount.Show();
}
Frame_Panel_Map.Show();
***
***UpdatePanelOnlineRecord***
***
Label_Panel_Name.Value = "Online record";
declare Label_Record = (Frame_Panel_OnlineRecord.GetFirstChild("LABEL_RECORD") as CMlLabel);
declare Label_Nickname = (Frame_Panel_OnlineRecord.GetFirstChild("LABEL_NICKNAME") as CMlLabel);
declare Quad_Button_SaveReplay = (Frame_Panel_OnlineRecord.GetFirstChild("QUAD_BUTTON_SAVEREPLAY") as CMlQuad);
declare Label_Button_SaveReplay = (Frame_Panel_OnlineRecord.GetFirstChild("LABEL_BUTTON_SAVEREPLAY") as CMlLabel);
if(IsInHistory) {
if(IsCompareMode()) {
declare Campaign = GetCampaignIdFromIndex(SelectedCampaign);
declare Index = -1;
declare Counter = -1;
foreach(Group in TrackerCompareResult[Campaign]) {
Counter += 1;
if(Group.count > 0) Index += 1;
if(SelectedMapGroup == Index) break;
}
if(Counter >= 0) {
declare Index2 = -1;
declare Counter2 = -1;
foreach(Map in TrackerCompareResult[Campaign][Counter]) {
Counter2 += 1;
if(Map.map_uid != "") Index2 += 1;
if(SelectedMapInfo == Index2) break;
}
declare MapInfo = TrackerCompareResult[Campaign][Counter][Counter2];
declare Record = MapInfo.records[I];
Label_Record.Value = TimeToTextWithMilli(Record.score);
Label_Nickname.Value = Record.nickname;
if(Record.replay_url != "" && Record.file_name != "") {
Label_Button_SaveReplay.TextColor = <1.,1.,1.>;
Quad_Button_SaveReplay.Show();
if(CurrentMap == Null || CurrentMap.MapInfo.MapUid != MapInfo.map_uid) {
Label_Button_SaveReplay.TextColor = <.7,.7,.7>;
Quad_Button_SaveReplay.Style = "";
}
else {
Quad_Button_SaveReplay.Style = "Bgs1";
}
}
else {
Label_Button_SaveReplay.TextColor = <.7,.7,.7>;
Quad_Button_SaveReplay.Hide();
}
(Frame_Panel_OnlineRecord.GetFirstChild("LABEL_MAP") as CMlLabel).Value = MapInfo.name;
}
}
else {
declare MapInfo = TrackerHistoryMaps[SelectedMapGroup][SelectedMapInfo];
declare Record = TrackerHistoryRecords[MapInfo.map_uid][I];
Label_Record.Value = TimeToTextWithMilli(Record.score);
Label_Nickname.Value = Record.nickname;
if(Record.replay_url != "" && Record.file_name != "") {
Label_Button_SaveReplay.TextColor = <1.,1.,1.>;
Quad_Button_SaveReplay.Show();
if(CurrentMap == Null || CurrentMap.MapInfo.MapUid != MapInfo.map_uid) {
Label_Button_SaveReplay.TextColor = <.7,.7,.7>;
Quad_Button_SaveReplay.Style = "";
}
else {
Quad_Button_SaveReplay.Style = "Bgs1";
}
}
else {
Label_Button_SaveReplay.TextColor = <.7,.7,.7>;
Quad_Button_SaveReplay.Hide();
}
(Frame_Panel_OnlineRecord.GetFirstChild("LABEL_MAP") as CMlLabel).Value = MapInfo.name;
}
}
else {
declare MapInfo = DataFileMgr.Campaigns[SelectedCampaign].MapGroups[SelectedMapGroup].MapInfos[SelectedMapInfo];
if(TaskRecords.existskey(DataFileMgr.Campaigns[SelectedCampaign].CampaignId)) {
declare Task = TaskRecords[DataFileMgr.Campaigns[SelectedCampaign].CampaignId][MapInfo.MapUid];
if(Task.HasSucceeded && (Task.LeaderBoardInfo.existskey(I) || TaskRecordsAdditional.LeaderBoardInfo.existskey(I-10))) {
declare CNaturalLeaderBoardInfo Record;
if(Task.LeaderBoardInfo.existskey(I)) Record <=> Task.LeaderBoardInfo[I];
else if(TaskRecordsAdditional.LeaderBoardInfo.existskey(I-10)) Record <=> TaskRecordsAdditional.LeaderBoardInfo[I-10];
Label_Record.Value = TimeToTextWithMilli(Record.Score);
Label_Nickname.Value = Record.DisplayName;
declare RecordCount = RecordCount[DataFileMgr.Campaigns[SelectedCampaign].CampaignId][MapInfo.MapUid];
declare Ties = 0;
declare Skillpoints = 0;
if(TitleFolderLevel == "Online record") {
if(Items[I].SPRank != 0)
Skillpoints = MathLib::NearestInteger((RecordCount-Items[I].SPRank)*100./MathLib::ToReal(Items[I].SPRank));
Label_Record.DataAttributeSet("tooltip", "This record has a value of $o$0f0"^Skillpoints^"$o$fff skillpoints");
}
else Label_Record.DataAttributeSet("tooltip", "");
if((Record.ReplayUrl != "" && Record.FileName != "")
|| Record.Login == LocalUser.Login && Record.Score == ScoreMgr.Map_GetRecord(NullId, MapInfo.MapUid, DataFileMgr.Campaigns[SelectedCampaign].ScoreContext)) {
Label_Button_SaveReplay.TextColor = <1.,1.,1.>;
Quad_Button_SaveReplay.Show();
if(CurrentMap == Null || CurrentMap.MapInfo.MapUid != MapInfo.MapUid) {
Label_Button_SaveReplay.TextColor = <.7,.7,.7>;
Quad_Button_SaveReplay.Style = "";
}
else {
Quad_Button_SaveReplay.Style = "Bgs1";
}
}
else {
Label_Button_SaveReplay.TextColor = <.7,.7,.7>;
Quad_Button_SaveReplay.Hide();
}
}
else {
Label_Record.Value = TimeToTextWithMilli(-1);
Label_Nickname.Value = "nobody";
}
}
else {
Label_Record.Value = TimeToTextWithMilli(-1);
Label_Nickname.Value = "nobody";
}
(Frame_Panel_OnlineRecord.GetFirstChild("LABEL_MAP") as CMlLabel).Value = MapInfo.Name;
}
Frame_Panel_OnlineRecord.Show();
***
***UpdatePanelCheckpoint***
***
Label_Panel_Name.Value = "Checkpoint";
declare Label_Checkpoint = (Frame_Panel_Checkpoint.GetFirstChild("LABEL_CHECKPOINT") as CMlLabel);
declare Frame_Checkpoints = (Frame_Panel_Checkpoint.GetFirstChild("FRAME_CHECKPOINTS") as CMlFrame);
declare Integer[Text][] Checkpoints;
declare CurrentCP = -1;
for(L, 0, TaskGhosts.count-1) {
declare Task = TaskGhosts[L];
if(Task != Null && Task.HasSucceeded) {
for(J, 0, Task.Ghost.Result.Checkpoints.count-1) {
if(Checkpoints.count == 0)
for(K, 1, Task.Ghost.Result.Checkpoints.count)
Checkpoints.add([]);
Checkpoints[J][Task.Ghost.Nickname] = Task.Ghost.Result.Checkpoints[J];
if(L == SelectedRecord && J == I) CurrentCP = Task.Ghost.Result.Checkpoints[J];
}
}
else {
}
}
declare NeededCheckpoints = Checkpoints[I].sort();
declare Counter = 0;
declare Offset = 0;
declare PreviousTime = -1;
foreach(Name => Time in NeededCheckpoints) {
if(Time == PreviousTime) Offset+=1;
PreviousTime = Time;
declare Rank = Counter+1-Offset;
declare ColorSelect = "";
if(CurrentCP == Time) ColorSelect = "$8BF";
if(Frame_Checkpoints.Controls.existskey(Counter)) {
declare Label = (Frame_Checkpoints.Controls[Counter] as CMlLabel);
Label.Value = ColorSelect^TextLib::FormatInteger(Rank, 2) ^ ")$o " ^ TimeToTextWithMilli(Time) ^ " $o"^TextLib::GetTranslatedText("by")^" " ^ Name;
Label.Show();
if(_Animate) {
AnimMgr.Flush(Label);
Label.Opacity = 0.;
AnimMgr.Add(Label, "<label opacity=\"1\"/>", Now+Counter*20, 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
}
Counter += 1;
}
for(J, Counter, Frame_Checkpoints.Controls.count-1) {
Frame_Checkpoints.Controls[J].Hide();
}
Label_Checkpoint.Value = TimeToTextWithMilli(CurrentCP);
if(_Animate) {
Label_Checkpoint.Opacity = 0.;
AnimMgr.Add(Label_Checkpoint, "<label opacity=\"1\"/>", 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
Frame_Panel_Checkpoint.Show();
***
***UpdatePanelHistory***
***
Label_Panel_Name.Value = "Timestamp";
***
***UpdatePanelSaveReplay***
***
Label_Panel_Name.Value = "Save replay";
***
Void ClearGhosts() {
foreach(Task in TaskGhosts) {
if(Task == Null) continue;
if(Task.IsProcessing) Task.Cancel();
DataFileMgr.TaskResult_Release(Task.Id);
}
TaskGhosts.clear();
TaskGhostsCompletion.clear();
}
Void UpdatePanel(Boolean _Animate) {
declare SomethingSelected = False;
declare Label_Panel_Name = (Page.GetFirstChild("LABEL_PANEL_NAME") as CMlLabel);
declare Frame_Panel_OnlineRecord = (Page.GetFirstChild("FRAME_PANEL_ONLINERECORD") as CMlFrame);
declare Frame_Panel_Checkpoint = (Page.GetFirstChild("FRAME_PANEL_CHECKPOINT") as CMlFrame);
declare Frame_Panel_Map = (Page.GetFirstChild("FRAME_PANEL_MAP") as CMlFrame);
declare Frame_Panel_MapGroup = (Page.GetFirstChild("FRAME_PANEL_MAPGROUP") as CMlFrame);
declare Frame_Panel_Campaign = (Page.GetFirstChild("FRAME_PANEL_CAMPAIGN") as CMlFrame);
declare Frame_Panel_MostWorldRecords = (Page.GetFirstChild("FRAME_PANEL_MOSTWORLDRECORDS") as CMlFrame);
declare Quad_Panel_Loading = (Page.GetFirstChild("QUAD_PANEL_LOADING") as CMlQuad);
Frame_Panel_OnlineRecord.Hide();
Frame_Panel_Checkpoint.Hide();
Frame_Panel_Map.Hide();
Frame_Panel_MapGroup.Hide();
Frame_Panel_Campaign.Hide();
Frame_Panel_MostWorldRecords.Hide();
Quad_Panel_Loading.Hide();
for(I, 0, Items.count-1) {
declare Item = Items[I];
if(Item.Selected) {
SomethingSelected = True;
switch(TitleFolderLevel) {
case "Title": {
Label_Panel_Name.Value = "";
}
case "Campaign": {
+++UpdatePanelCampaign+++
}
case "Most world records": {
+++UpdatePanelMostWorldRecords+++
}
case "Most skillpoints": {
+++UpdatePanelMostSkillpoints+++
}
case "Map group": {
+++UpdatePanelMapGroup+++
}
case "Map info": {
+++UpdatePanelMap+++
}
case "Online record": {
+++UpdatePanelOnlineRecord+++
}
case "Checkpoint": {
+++UpdatePanelCheckpoint+++
}
case "History": {
+++UpdatePanelHistory+++
}
case "Save replay": {
+++UpdatePanelSaveReplay+++
}
case "Open save replay": {
+++UpdatePanelSaveReplay+++
}
}
}
}
if(!SomethingSelected) { // If no item selected
switch(TitleFolderLevel) {
case "Title": { // and is in space
Label_Panel_Name.Value = "";
}
case "Campaign": { // and is in title folder or in history
if(IsInHistory)
+++UpdatePanelHistory+++
else
Label_Panel_Name.Value = "";
}
case "Most world records": {
declare I = SelectedCampaign;
+++UpdatePanelCampaign+++
}
case "Most world records list": {
declare I = SelectedMostWorldRecords;
//+++UpdatePanelMostWorldRecords+++
}
case "Most skillpoints list": {
declare I = SelectedMostSkillpoints;
//+++UpdatePanelMostWorldRecords+++
}
case "Most skillpoints": {
declare I = SelectedCampaign;
+++UpdatePanelCampaign+++
}
case "Map group": { // and is in campaign folder
declare I = SelectedCampaign;
+++UpdatePanelCampaign+++
}
case "Map info": { // and is in map group folder
declare I = SelectedMapGroup;
+++UpdatePanelMapGroup+++
}
case "Online record": { // and is in map info folder
declare I = SelectedMapInfo;
+++UpdatePanelMap+++
}
case "Checkpoint": { // and is in online record folder
declare I = SelectedRecord;
+++UpdatePanelOnlineRecord+++
}
case "History": {
Label_Panel_Name.Value = "";
}
case "Save replay": {
+++UpdatePanelSaveReplay+++
}
case "Open save replay": {
+++UpdatePanelSaveReplay+++
}
}
}
}
Void UpdateTitleFolder(Boolean _Animate, Boolean _AnimateInner, Boolean _AnimatePanel) {
declare Frame_List = (Page.GetFirstChild("FRAME_LIST") as CMlFrame);
declare Frame_Outer_List = (Page.GetFirstChild("FRAME_OUTER_LIST") as CMlFrame);
declare Quad_List_Scrollbar = (Page.GetFirstChild("QUAD_LIST_SCROLLBAR") as CMlQuad);
declare Quad_List_Scrollable = (Page.GetFirstChild("QUAD_LIST_SCROLLABLE") as CMlQuad);
declare Offset = MathLib::NearestInteger(Frame_Outer_List.ScrollOffset.Y/10);
declare VisibleRatio = 12.;
if(Items.count > 0)
VisibleRatio = 12./(Items.count+1);
// Adjust selector positions and fake scrolling
Frame_List.RelativePosition_V3 = -Frame_Outer_List.ScrollOffset;
//
if(Items.count+IsInFolder > 12) {
Frame_Outer_List.ScrollMax = <0.,(Items.count-1+IsInFolder)*10-110.>;
if(Frame_Outer_List.ScrollMax.Y > 0)
Quad_List_Scrollbar.RelativePosition_V3.Y = -(Frame_Outer_List.ScrollOffset.Y/Frame_Outer_List.ScrollMax.Y)*(Quad_List_Scrollable.Size.Y-Quad_List_Scrollbar.Size.Y);
Quad_List_Scrollbar.Size.Y = Quad_List_Scrollable.Size.Y*VisibleRatio;
Quad_List_Scrollbar.Show();
}
else {
Frame_Outer_List.ScrollMax = <0.,0.>;
Quad_List_Scrollbar.Hide();
}
if(TitleFolderLevel == "") {
Frame_List.Hide();
}
else if(TitleFolderLevel == "Open save replay") {
Frame_List.Hide();
}
else {
Frame_List.Show();
if(TitleFolderLevel == "Title" || (TitleFolderLevel == "History" && (LoadedTitle == Null || SelectedTitle != 0))
|| (TitleFolderLevel == "Save replay" && ReplayList != Null && ReplayList.Path == ""))
IsInFolder = 0;
for(I,0,Frame_List.Controls.count-1) {
declare Control = Frame_List.Controls[I];
declare Frame = (Control as CMlFrame);
declare Quad_ButtonBg = (Frame.GetFirstChild("QUAD_BUTTONBG") as CMlQuad);
declare Quad_Selector = (Frame.GetFirstChild("QUAD_SELECTOR") as CMlQuad);
declare Frame_Content = (Frame.GetFirstChild("FRAME_CONTENT") as CMlFrame);
declare Label_Item = (Frame_Content.GetFirstChild("LABEL_ITEM") as CMlLabel);
declare Label_WR = (Frame_Content.GetFirstChild("LABEL_WR") as CMlLabel);
declare Label_WR_Holder = (Frame_Content.GetFirstChild("LABEL_WR_HOLDER") as CMlLabel);
declare Label_Context = (Frame_Content.GetFirstChild("LABEL_CONTEXT") as CMlLabel);
declare Quad_Thumbnail = (Frame_Content.GetFirstChild("QUAD_THUMBNAIL") as CMlQuad);
declare Quad_Loading = (Frame.GetFirstChild("QUAD_LOADING") as CMlQuad);
declare Quad_Medal_Bronze = (Frame_Content.GetFirstChild("QUAD_MEDAL_BRONZE") as CMlQuad);
declare Quad_Medal_Silver = (Frame_Content.GetFirstChild("QUAD_MEDAL_SILVER") as CMlQuad);
declare Quad_Medal_Gold = (Frame_Content.GetFirstChild("QUAD_MEDAL_GOLD") as CMlQuad);
declare Quad_Medal_Author = (Frame_Content.GetFirstChild("QUAD_MEDAL_AUTHOR") as CMlQuad);
Quad_Loading.Hide();
Quad_Medal_Bronze.Hide();
Quad_Medal_Silver.Hide();
Quad_Medal_Gold.Hide();
Quad_Medal_Author.Hide();
if(_Animate) {
AnimMgr.Flush(Quad_ButtonBg);
AnimMgr.Flush(Quad_Selector);
AnimMgr.Flush(Label_Item);
Quad_ButtonBg.Opacity = 0.;
Quad_Selector.Opacity = 0.;
Label_Item.Opacity = 0.;
AnimMgr.Add(Quad_ButtonBg, "<quad opacity=\".25\"/>", Now+I*50, 200, CAnimManager::EAnimManagerEasing::QuadOut);
AnimMgr.Add(Quad_Selector, "<quad opacity=\".5\"/>", Now+I*50, 200, CAnimManager::EAnimManagerEasing::QuadOut);
AnimMgr.Add(Label_Item, "<label opacity=\"1\"/>", Now+I*50, 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
if((I+Offset == 0 && TitleFolderLevel != "Title" && TitleFolderLevel != "History" && TitleFolderLevel != "Save replay")
|| (I+Offset == 0 && TitleFolderLevel == "History" && LoadedTitle != Null && SelectedTitle == 0)
|| (I+Offset == 0 && TitleFolderLevel == "Save replay" && (ReplayList == Null || ReplayList.Path != ""))) {
IsInFolder = 1;
Frame.Show();
Label_Item.Value = " ...";
Quad_Thumbnail.ChangeImageUrl("");
Label_Context.Hide();
Label_WR.Hide();
Label_WR_Holder.Hide();
Quad_Loading.Hide();
Quad_Selector.ModulateColor = <.533,.733,1.>;
}
else {
declare Index = I-IsInFolder+Offset;
if(Items.existskey(Index)) {
declare Item = Items[Index];
if(Item.Selected)
Quad_Selector.StyleSelected = True;
else
Quad_Selector.StyleSelected = False;
Frame.Show();
switch(TitleFolderLevel) {
case "Title": {
Label_Item.Value = Item.Content;
Quad_Thumbnail.ChangeImageUrl("");
Label_Context.Hide();
Label_WR.Hide();
Label_WR_Holder.Hide();
Quad_Loading.Hide();
switch(Index) {
case 0: {
Quad_Selector.ModulateColor = <.533,.733,1.>;
}
case 1: {
Quad_Selector.ModulateColor = <.533,.733,1.>;
}
case 2: {
Quad_Selector.ModulateColor = <.533,.733,1.>;
}
case 3: {
if(Page.GetFirstChild("LABEL_TRACKER_URLWARNING").Visible || Page.GetFirstChild("FRAME_TRACKER_SUGGESTION").Visible)
Quad_Selector.ModulateColor = <1.,.2,.2>;
else
Quad_Selector.ModulateColor = <.533,.733,1.>;
}
}
}
case "Campaign": {
Label_Item.Value = Item.Content;
Label_Context.Value = Item.Context;
Quad_Thumbnail.ChangeImageUrl("");
Label_Context.Show();
if(_Animate) {
AnimMgr.Flush(Label_Context);
Label_Context.Opacity = 0.;
AnimMgr.Add(Label_Context, "<label opacity=\"1\"/>", Now+I*50, 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
Label_WR.Hide();
Label_WR_Holder.Hide();
if(CampaignListType == "MostSkillpoints") {
Quad_Loading.Show();
if(TaskSkillpoints.existskey(DataFileMgr.Campaigns[Index].CampaignId)) {
declare Task = TaskSkillpoints[DataFileMgr.Campaigns[Index].CampaignId];
if(Task.HasSucceeded) {
if(Task.LeaderBoardInfo.count > 0 && Task.LeaderBoardInfo[0].Score >= 0) {
Quad_Loading.Hide();
Quad_Selector.ModulateColor = <.533,.733,1.>;
}
else {
Quad_Loading.Hide();
Quad_Selector.ModulateColor = <1.,.2,.2>;
}
}
else {
if(Task.IsProcessing) {
Quad_Loading.Show();
if(_Animate) {
AnimMgr.Flush(Quad_Loading);
Quad_Loading.Opacity = 0.;
AnimMgr.Add(Quad_Loading, "<quad opacity=\"1\"/>", Now+I*50, 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
}
Quad_Selector.ModulateColor = <1.,.2,.2>;
}
}
else {
Quad_Loading.Hide();
Quad_Selector.ModulateColor = <1.,.2,.2>;
}
}
else {
Quad_Loading.Hide();
}
Quad_Selector.ModulateColor = <.533,.733,1.>;
}
case "Most world records": {
Label_Item.Value = Item.Content;
Label_WR.Value = Item.WRCount^"";
Quad_Thumbnail.ChangeImageUrl("");
Label_WR.Show();
Label_WR_Holder.Hide();
Label_Context.Hide();
if(_Animate && _AnimateInner) {
AnimMgr.Flush(Label_WR);
Label_WR.Opacity = 0.;
AnimMgr.Add(Label_WR, "<label opacity=\"1\"/>", Now+I*50, 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
}
case "Most world records list": {
Label_Item.Value = Item.Content;
Quad_Thumbnail.ChangeImageUrl(Item.Image);
Label_WR.Value = Item.WR;
Label_WR_Holder.Value = "$0f0"^ToNicerNumber(Item.Skillpoints);
Label_WR.Show();
Label_WR_Holder.Show();
Label_Context.Hide();
if(_Animate) {
AnimMgr.Flush(Quad_Thumbnail);
Quad_Thumbnail.Opacity = 0.;
AnimMgr.Add(Quad_Thumbnail, "<quad opacity=\".75\"/>", Now+I*50, 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
if(_Animate && _AnimateInner) {
AnimMgr.Flush(Label_WR);
AnimMgr.Flush(Label_WR_Holder);
Label_WR.Opacity = 0.;
AnimMgr.Add(Label_WR, "<label opacity=\"1\"/>", Now+I*50, 200, CAnimManager::EAnimManagerEasing::QuadOut);
Label_WR_Holder.Opacity = 0.;
AnimMgr.Add(Label_WR_Holder, "<label opacity=\"1\"/>", Now+I*50, 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
}
case "Most skillpoints list": {
Label_Item.Value = Item.Content;
Quad_Thumbnail.ChangeImageUrl(Item.Image);
Label_WR.Value = "$0f0"^ToNicerNumber(Item.Skillpoints);
Label_WR.Show();
Label_WR_Holder.Hide();
Label_Context.Hide();
if(_Animate) {
AnimMgr.Flush(Quad_Thumbnail);
Quad_Thumbnail.Opacity = 0.;
AnimMgr.Add(Quad_Thumbnail, "<quad opacity=\".75\"/>", Now+I*50, 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
if(_Animate && _AnimateInner) {
AnimMgr.Flush(Label_WR);
AnimMgr.Flush(Label_WR_Holder);
Label_WR.Opacity = 0.;
AnimMgr.Add(Label_WR, "<label opacity=\"1\"/>", Now+I*50, 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
}
case "Most skillpoints": {
Label_Item.Value = Item.Content;
Label_WR.Value = "$0f0"^ToNicerNumber(Item.Skillpoints);
Quad_Thumbnail.ChangeImageUrl("");
Label_WR.Show();
Label_WR_Holder.Hide();
Label_Context.Hide();
}
case "Map group": {
Label_Item.Value = Item.Content;
Quad_Thumbnail.ChangeImageUrl("");
Label_Context.Hide();
Label_WR.Hide();
Label_WR_Holder.Hide();
Quad_Loading.Hide();
Quad_Selector.ModulateColor = <.533,.733,1.>;
}
case "Map info": {
Label_Item.Value = Item.Content;
Quad_Thumbnail.ChangeImageUrl(Item.Image);
if(_Animate) {
AnimMgr.Flush(Quad_Thumbnail);
Quad_Thumbnail.Opacity = 0.;
AnimMgr.Add(Quad_Thumbnail, "<quad opacity=\".75\"/>", Now+I*50, 200, CAnimManager::EAnimManagerEasing::QuadOut);
Quad_Medal_Bronze.Opacity = 0.;
Quad_Medal_Silver.Opacity = 0.;
Quad_Medal_Gold.Opacity = 0.;
Quad_Medal_Author.Opacity = 0.;
AnimMgr.Add(Quad_Medal_Bronze, "<quad opacity=\".9\"/>", Now+I*50, 200, CAnimManager::EAnimManagerEasing::QuadOut);
AnimMgr.Add(Quad_Medal_Silver, "<quad opacity=\".9\"/>", Now+I*50, 200, CAnimManager::EAnimManagerEasing::QuadOut);
AnimMgr.Add(Quad_Medal_Gold, "<quad opacity=\".9\"/>", Now+I*50, 200, CAnimManager::EAnimManagerEasing::QuadOut);
AnimMgr.Add(Quad_Medal_Author, "<quad opacity=\".9\"/>", Now+I*50, 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
Label_Context.Hide();
if(IsInHistory) {
if(IsCompareMode()) {
Quad_Loading.Hide();
declare ChangeTime = Item.WR;
declare ChangeHolder = Item.WRHolder;
if(_Animate && _AnimateInner) {
Label_WR.Opacity = 0.;
Label_WR_Holder.Opacity = 0.;
AnimMgr.Add(Label_WR, "<label opacity=\"1\"/>", Now+I*50, 200, CAnimManager::EAnimManagerEasing::QuadOut);
AnimMgr.Add(Label_WR_Holder, "<label opacity=\"1\"/>", Now+I*50, 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
else if(_AnimateInner) {
if(Label_WR.Value != ChangeTime) {
AnimMgr.Flush(Label_WR);
Label_WR.Opacity = 0.;
AnimMgr.Add(Label_WR, "<label opacity=\"1\"/>", 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
if(Label_WR_Holder.Value != ChangeHolder) {
AnimMgr.Flush(Label_WR_Holder);
Label_WR_Holder.Opacity = 0.;
AnimMgr.Add(Label_WR_Holder, "<label opacity=\"1\"/>", 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
}
Label_WR.Value = ChangeTime;
Label_WR_Holder.Value = ChangeHolder;
Label_WR.Show();
Label_WR_Holder.Show();
Quad_Selector.ModulateColor = <.533,.733,1.>;
}
else {
if(TrackerHistoryRecords.existskey(Item.MapUid)) {
declare Records = TrackerHistoryRecords[Item.MapUid];
if(Records.count > 0 && Records[0].score >= 0) {
declare WorldRecord = Records[0];
declare ChangeTime = TimeToTextWithMilli(WorldRecord.score);
declare ChangeHolder = WorldRecord.nickname;
if(_Animate && _AnimateInner) {
Label_WR.Opacity = 0.;
Label_WR_Holder.Opacity = 0.;
AnimMgr.Add(Label_WR, "<label opacity=\"1\"/>", Now+I*50, 200, CAnimManager::EAnimManagerEasing::QuadOut);
AnimMgr.Add(Label_WR_Holder, "<label opacity=\"1\"/>", Now+I*50, 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
else if(_AnimateInner) {
if(Label_WR.Value != ChangeTime) {
AnimMgr.Flush(Label_WR);
Label_WR.Opacity = 0.;
AnimMgr.Add(Label_WR, "<label opacity=\"1\"/>", 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
if(Label_WR_Holder.Value != ChangeHolder) {
AnimMgr.Flush(Label_WR_Holder);
Label_WR_Holder.Opacity = 0.;
AnimMgr.Add(Label_WR_Holder, "<label opacity=\"1\"/>", 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
}
Label_WR.Value = ChangeTime;
Label_WR_Holder.Value = ChangeHolder;
Label_WR.Show();
Label_WR_Holder.Show();
}
else {
Quad_Loading.Hide();
Label_WR.Hide();
Label_WR_Holder.Hide();
Quad_Selector.ModulateColor = <1.,.2,.2>;
}
}
else {
Quad_Loading.Hide();
Label_WR.Hide();
Label_WR_Holder.Hide();
Quad_Selector.ModulateColor = <1.,.2,.2>;
}
}
}
else {
if(LeaderboardType == "WR" || CampaignListType == "MostSkillpoints" || CampaignListType == "MostWorldRecords") {
if(TaskRecords.existskey(DataFileMgr.Campaigns[SelectedCampaign].CampaignId)) {
declare Task = TaskRecords[DataFileMgr.Campaigns[SelectedCampaign].CampaignId][Item.MapUid];
if(Task.HasSucceeded) {
if(Task.LeaderBoardInfo.count > 0 && Task.LeaderBoardInfo[0].Score >= 0) {
declare ChangeTime = TimeToTextWithMilli(Task.LeaderBoardInfo[0].Score);
declare ChangeHolder = Task.LeaderBoardInfo[0].DisplayName;
if(_Animate && _AnimateInner) {
Label_WR.Opacity = 0.;
Label_WR_Holder.Opacity = 0.;
AnimMgr.Add(Label_WR, "<label opacity=\"1\"/>", Now+I*50, 200, CAnimManager::EAnimManagerEasing::QuadOut);
AnimMgr.Add(Label_WR_Holder, "<label opacity=\"1\"/>", Now+I*50, 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
else if(_AnimateInner) {
if(Label_WR.Value != ChangeTime) {
AnimMgr.Flush(Label_WR);
Label_WR.Opacity = 0.;
AnimMgr.Add(Label_WR, "<label opacity=\"1\"/>", 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
if(Label_WR_Holder.Value != ChangeHolder) {
AnimMgr.Flush(Label_WR_Holder);
Label_WR_Holder.Opacity = 0.;
AnimMgr.Add(Label_WR_Holder, "<label opacity=\"1\"/>", 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
}
Label_WR.Value = ChangeTime;
Label_WR_Holder.Value = ChangeHolder;
Label_WR.Show();
Label_WR_Holder.Show();
Quad_Loading.Hide();
Quad_Selector.ModulateColor = <.533,.733,1.>;
}
else {
Quad_Loading.Hide();
Label_WR.Hide();
Label_WR_Holder.Hide();
Quad_Selector.ModulateColor = <1.,.2,.2>;
}
}
else {
if(Task.IsProcessing) {
Quad_Loading.Show();
if(_Animate) {
AnimMgr.Flush(Quad_Loading);
Quad_Loading.Opacity = 0.;
AnimMgr.Add(Quad_Loading, "<quad opacity=\"1\"/>", Now+I*50, 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
}
Label_WR.Hide();
Label_WR_Holder.Hide();
Quad_Selector.ModulateColor = <1.,.2,.2>;
}
}
else {
Quad_Loading.Hide();
Label_WR.Hide();
Label_WR_Holder.Hide();
Quad_Selector.ModulateColor = <1.,.2,.2>;
}
}
else if(LeaderboardType == "PB") {
Quad_Medal_Bronze.Substyle = "MedalSlot";
Quad_Medal_Silver.Substyle = "MedalSlot";
Quad_Medal_Gold.Substyle = "MedalSlot";
Quad_Medal_Author.Substyle = "MedalSlot";
if(Item.PB != -1 && Item.Medals.count == 4) {
if(Item.PB <= Item.Medals[0])
Quad_Medal_Author.Substyle = "MedalNadeo";
if(Item.PB <= Item.Medals[1])
Quad_Medal_Gold.Substyle = "MedalGold";
if(Item.PB <= Item.Medals[2])
Quad_Medal_Silver.Substyle = "MedalSilver";
if(Item.PB <= Item.Medals[3])
Quad_Medal_Bronze.Substyle = "MedalBronze";
}
Quad_Medal_Bronze.Show();
Quad_Medal_Silver.Show();
Quad_Medal_Gold.Show();
Quad_Medal_Author.Show();
Quad_Loading.Hide();
if(Item.PB == -1)
Label_WR.Value = "-:--.---";
else
Label_WR.Value = TimeToTextWithMilli(Item.PB);
Label_WR.Show();
Label_WR_Holder.Hide();
if(_Animate && _AnimateInner) {
Label_WR.Opacity = 0.;
Label_WR_Holder.Opacity = 0.;
AnimMgr.Add(Label_WR, "<label opacity=\"1\"/>", Now+I*50, 200, CAnimManager::EAnimManagerEasing::QuadOut);
AnimMgr.Add(Label_WR_Holder, "<label opacity=\"1\"/>", Now+I*50, 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
}
}
}
case "Online record": {
Label_Item.Value = Item.Content;
Quad_Thumbnail.ChangeImageUrl("");
Label_WR.Hide();
Label_WR_Holder.Hide();
if(TaskGhosts.existskey(Index)) {
declare Task = TaskGhosts[Index];
if(Task != Null) {
if(Task.IsProcessing) {
Quad_Selector.ModulateColor = <1.,.2,.2>;
Quad_Loading.Show();
if(_Animate) {
AnimMgr.Flush(Quad_Loading);
Quad_Loading.Opacity = 0.;
AnimMgr.Add(Quad_Loading, "<quad opacity=\"1\"/>", Now+I*50, 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
Label_Context.Value = "";
Label_Context.Hide();
}
else if(Task.HasSucceeded) {
Quad_Selector.ModulateColor = <.533,.733,1.>;
Quad_Loading.Hide();
declare ChangeText = "GHOST AVAILABLE ";
if(_AnimateInner && Label_Context.Value != ChangeText) {
Label_Context.Opacity = 0.;
if(_Animate)
AnimMgr.Add(Label_Context, "<label opacity=\"1\"/>", Now+I*50, 200, CAnimManager::EAnimManagerEasing::QuadOut);
else
AnimMgr.Add(Label_Context, "<label opacity=\"1\"/>", 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
Label_Context.Value = ChangeText;
Label_Context.Show();
}
else {
Label_Context.Value = "$f00GHOST FAILED ";
Quad_Selector.ModulateColor = <1.,.2,.2>;
Quad_Loading.Hide();
Label_Context.Hide();
}
}
else {
Quad_Selector.ModulateColor = <1.,.2,.2>;
Quad_Loading.Hide();
Label_Context.Value = "$f00GHOST NOT AVAILABLE ";
Label_Context.Show();
}
}
else {
Quad_Selector.ModulateColor = <1.,.2,.2>;
Quad_Loading.Hide();
Label_Context.Hide();
}
}
case "Checkpoint": {
Label_Item.Value = Item.Content;
Quad_Thumbnail.ChangeImageUrl("");
Label_Context.Hide();
Label_WR.Hide();
Label_WR_Holder.Hide();
Quad_Loading.Hide();
Quad_Selector.ModulateColor = <.533,.733,1.>;
}
case "History": {
Label_Item.Value = Item.Content;
Quad_Thumbnail.ChangeImageUrl("");
Label_Context.Hide();
Label_WR.Hide();
Label_WR_Holder.Hide();
Quad_Loading.Hide();
Quad_Selector.ModulateColor = <.533,.733,1.>;
}
case "Save replay": {
Label_Item.Value = Item.Content;
Label_Context.Value = Item.Context;
Quad_Thumbnail.ChangeImageUrl("");
Label_Context.Show();
if(_Animate) {
AnimMgr.Flush(Label_Context);
Label_Context.Opacity = 0.;
AnimMgr.Add(Label_Context, "<label opacity=\"1\"/>", Now+I*50, 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
Label_WR.Hide();
Label_WR_Holder.Hide();
Quad_Loading.Hide();
Quad_Selector.ModulateColor = <.533,.733,1.>;
}
}
}
else {
Frame.Hide();
}
}
}
}
(Page.GetFirstChild("FRAME_REPLAYSAVE") as CMlFrame).Hide();
switch(TitleFolderLevel) {
case "Title": {
((Page.GetFirstChild("FRAME_BOTTOM") as CMlFrame).GetFirstChild("LABEL_FOLDER_LEVEL") as CMlLabel).Value = "What leaderboards do you want to see?";
}
case "Campaign": {
((Page.GetFirstChild("FRAME_BOTTOM") as CMlFrame).GetFirstChild("LABEL_FOLDER_LEVEL") as CMlLabel).Value = "Select a campaign...";
}
case "Most world records": {
((Page.GetFirstChild("FRAME_BOTTOM") as CMlFrame).GetFirstChild("LABEL_FOLDER_LEVEL") as CMlLabel).Value = "Select a player...";
}
case "Most world records list": {
((Page.GetFirstChild("FRAME_BOTTOM") as CMlFrame).GetFirstChild("LABEL_FOLDER_LEVEL") as CMlLabel).Value = "Select a map...";
}
case "Most skillpoints": {
((Page.GetFirstChild("FRAME_BOTTOM") as CMlFrame).GetFirstChild("LABEL_FOLDER_LEVEL") as CMlLabel).Value = "Select a player...";
}
case "Most skillpoints list": {
((Page.GetFirstChild("FRAME_BOTTOM") as CMlFrame).GetFirstChild("LABEL_FOLDER_LEVEL") as CMlLabel).Value = "Select a map...";
}
case "Map group": {
((Page.GetFirstChild("FRAME_BOTTOM") as CMlFrame).GetFirstChild("LABEL_FOLDER_LEVEL") as CMlLabel).Value = "Select a map group...";
}
case "Map info": {
((Page.GetFirstChild("FRAME_BOTTOM") as CMlFrame).GetFirstChild("LABEL_FOLDER_LEVEL") as CMlLabel).Value = "Select a map...";
}
case "Online record": {
((Page.GetFirstChild("FRAME_BOTTOM") as CMlFrame).GetFirstChild("LABEL_FOLDER_LEVEL") as CMlLabel).Value = "Select an online record...";
}
case "Checkpoint": {
((Page.GetFirstChild("FRAME_BOTTOM") as CMlFrame).GetFirstChild("LABEL_FOLDER_LEVEL") as CMlLabel).Value = "Rank the checkpoint...";
}
case "History": {
((Page.GetFirstChild("FRAME_BOTTOM") as CMlFrame).GetFirstChild("LABEL_FOLDER_LEVEL") as CMlLabel).Value = "Select a timestamp...";
}
case "Save replay": {
((Page.GetFirstChild("FRAME_BOTTOM") as CMlFrame).GetFirstChild("LABEL_FOLDER_LEVEL") as CMlLabel).Value = "";
(Page.GetFirstChild("FRAME_REPLAYSAVE") as CMlFrame).Show();
// Show text box
}
case "Open save replay": {
((Page.GetFirstChild("FRAME_BOTTOM") as CMlFrame).GetFirstChild("LABEL_FOLDER_LEVEL") as CMlLabel).Value = "Loading replays...";
}
}
if(LoadedTitle == Null && Items.count == 0)
((Page.GetFirstChild("FRAME_BOTTOM") as CMlFrame).GetFirstChild("LABEL_FOLDER_LEVEL") as CMlLabel).Value = "";
UpdatePanel(_AnimatePanel);
if(CurrentMap == Null && !IsInHistory && (TitleFolderLevel == "Online record" || TitleFolderLevel == "Map info")) {
(Page.GetFirstChild("LABEL_BUTTON_PLAYMAP") as CMlLabel).Value = "Go to map";
(Page.GetFirstChild("QUAD_BUTTON_PLAYMAP") as CMlQuad).ModulateColor = ColorLib::HexToRgb("444");
if(TitleFolderLevel == "Map info") {
for(I, 0, Items.count-1) {
if(Items[I].Selected) {
declare MapInfo = DataFileMgr.Campaigns[SelectedCampaign].MapGroups[SelectedMapGroup].MapInfos[I];
if(MapInfo.Unlocked) {
(Page.GetFirstChild("QUAD_BUTTON_PLAYMAP") as CMlQuad).ModulateColor = ColorLib::HexToRgb("048");
(Page.GetFirstChild("LABEL_BUTTON_PLAYMAP") as CMlLabel).Value = "Go to map";
}
else (Page.GetFirstChild("LABEL_BUTTON_PLAYMAP") as CMlLabel).Value = "$ff0🔒$g " ^ TextLib::GetTranslatedText("Go to map");
break;
}
}
}
else {
declare MapInfo = DataFileMgr.Campaigns[SelectedCampaign].MapGroups[SelectedMapGroup].MapInfos[SelectedMapInfo];
if(MapInfo.Unlocked) {
(Page.GetFirstChild("QUAD_BUTTON_PLAYMAP") as CMlQuad).ModulateColor = ColorLib::HexToRgb("048");
(Page.GetFirstChild("LABEL_BUTTON_PLAYMAP") as CMlLabel).Value = "Go to map";
}
else (Page.GetFirstChild("LABEL_BUTTON_PLAYMAP") as CMlLabel).Value = "$ff0🔒$g " ^ TextLib::GetTranslatedText("Go to map");
}
Page.GetFirstChild("FRAME_BUTTON_PLAYMAP").Show();
}
else
Page.GetFirstChild("FRAME_BUTTON_PLAYMAP").Hide();
}
Void UpdateTitleFolder(Boolean _Animate, Boolean _AnimateInner) {
UpdateTitleFolder(_Animate, _AnimateInner, False);
}
Void UpdateTitleFolder() {
UpdateTitleFolder(False, False, False);
}
Text[] SortTrackerTitles() {
declare Text[] SortedTitles;
foreach(T in TrackerTitles) {
if(LoadedTitle != Null && T == LoadedTitle.TitleId)
SortedTitles.addfirst(T);
else
SortedTitles.add(T);
}
return SortedTitles;
}
Void UpdateTitleSection() {
declare Frame_Titles = (Page.GetFirstChild("FRAME_TITLES") as CMlFrame);
declare SortedTitles = SortTrackerTitles();
if(SortedTitles.count > 0)
Page.GetFirstChild("FRAME_NOTITLE").Hide();
else
Page.GetFirstChild("FRAME_NOTITLE").Show();
declare Offset = 0;
declare CurrentTitleOffset = 0;
for(I,0,Frame_Titles.Controls.count-1) {
declare Frame = (Frame_Titles.Controls[I] as CMlFrame);
declare Quad_Card = (Frame.GetFirstChild("QUAD_CARD") as CMlQuad);
declare Quad_Select = (Frame.GetFirstChild("QUAD_SELECT") as CMlQuad);
declare Label_TitleId = (Frame.GetFirstChild("LABEL_TITLEID") as CMlLabel);
if(SortedTitles.existskey(I+Offset)) {
declare Title = SortedTitles[I+Offset];
if(OnlineTitleInfo.existskey(Title) && OnlineTitleInfo[Title].card_url != "") {
Quad_Card.ChangeImageUrl(OnlineTitleInfo[Title].card_url);
Label_TitleId.Hide();
//AnimMgr.Add(Quad_Card, "<quad opacity=\"1\"/>", 500, CAnimManager::EAnimManagerEasing::QuadOut);
}
else {
Quad_Card.ChangeImageUrl("");
Label_TitleId.Value = Title;
Label_TitleId.Show();
}
if(I+Offset == SelectedTitle) {
Quad_Select.StyleSelected = True;
declare Quad_Background = (Page.GetFirstChild("QUAD_BACKGROUND") as CMlQuad);
if(OnlineTitleInfo.existskey(Title)) {
if(Quad_Background.ImageUrl != OnlineTitleInfo[Title].background_url) {
Quad_Background.ChangeImageUrl(OnlineTitleInfo[Title].background_url);
Quad_Background.Opacity = 0.;
AnimMgr.Flush(Quad_Background);
AnimMgr.Add(Quad_Background, "<quad opacity=\".3\"/>",500, CAnimManager::EAnimManagerEasing::QuadOut);
}
}
else {
Quad_Background.ChangeImageUrl("");
}
}
else {
Quad_Select.StyleSelected = False;
}
Frame.Show();
}
else {
Frame.Hide();
}
}
UpdateTitleFolder();
}
Void ChangeToTitleLevel(Text _TitleId) {
TitleFolderLevel = "Title";
IsInHistory = False;
DisableCompareMode();
(Page.GetFirstChild("LABEL_DATADATE") as CMlLabel).Hide();
if(OnlineTitleInfo.existskey(_TitleId) && OnlineTitleInfo[_TitleId].name != "")
(Page.GetFirstChild("LABEL_TITLE") as CMlLabel).Value = OnlineTitleInfo[_TitleId].name;
else if(_TitleId == LoadedTitle.TitleId)
(Page.GetFirstChild("LABEL_TITLE") as CMlLabel).Value = LoadedTitle.Name;
else
(Page.GetFirstChild("LABEL_TITLE") as CMlLabel).Value = _TitleId;
Items.clear();
if(_TitleId == LoadedTitle.TitleId) {
declare SItem ItemCurrent;
ItemCurrent.Content = " Current leaderboards";
Items.add(ItemCurrent);
}
declare SItem ItemMostWorldRecords;
ItemMostWorldRecords.Content = " Most world records";
Items.add(ItemMostWorldRecords);
declare SItem ItemMostSkillpoints;
ItemMostSkillpoints.Content = " Most skillpoints";
Items.add(ItemMostSkillpoints);
declare SItem ItemHistory;
ItemHistory.Content = " Leaderboard history";
Items.add(ItemHistory);
SelectedCampaign = -1;
UpdateTitleFolder(True, True);
}
Void ChangeToHistoryLevel(Text _TitleId) {
TitleFolderLevel = "History";
IsInHistory = True;
(Page.GetFirstChild("LABEL_DATADATE") as CMlLabel).Hide();
if(OnlineTitleInfo.existskey(_TitleId))
(Page.GetFirstChild("LABEL_TITLE") as CMlLabel).Value = OnlineTitleInfo[_TitleId].name;
else if(LoadedTitle != Null && _TitleId == LoadedTitle.TitleId)
(Page.GetFirstChild("LABEL_TITLE") as CMlLabel).Value = LoadedTitle.Name;
else
(Page.GetFirstChild("LABEL_TITLE") as CMlLabel).Value = _TitleId;
Items.clear();
if(TrackerTimestamps.existskey(_TitleId)) {
foreach(Timestamp in TrackerTimestamps[_TitleId]) {
declare SItem Item;
Item.Content = " "^TimeLib::FormatDate(Timestamp, TimeLib::EDateFormats::DateShort)^" "^TimeLib::FormatDate(Timestamp, TimeLib::EDateFormats::Time);
Item.Timestamp = Timestamp;
Items.add(Item);
}
}
SelectedCampaign = -1;
UpdateTitleFolder(True, True);
}
Void ChangeToMostWorldRecordsLevel(Integer _Index) {
declare Frame_Outer_List = (Page.GetFirstChild("FRAME_OUTER_LIST") as CMlFrame);
Frame_Outer_List.ScrollOffset.Y = 0.;
TitleFolderLevel = "Most world records";
SelectedCampaign = _Index;
Items.clear();
if(IsInHistory) {
}
else {
if(TaskRecords.existskey(DataFileMgr.Campaigns[_Index].CampaignId)) {
declare Integer[Text] MostWorldRecords;
declare Text[Text] Nicknames;
foreach(MapUid => Task in TaskRecords[DataFileMgr.Campaigns[_Index].CampaignId]) {
if(Task.HasSucceeded) {
if(Task.LeaderBoardInfo.count > 0 && Task.LeaderBoardInfo[0].Score >= 0) {
declare WR <=> Task.LeaderBoardInfo[0];
Nicknames[WR.Login] = WR.DisplayName;
if(MostWorldRecords.existskey(WR.Login))
MostWorldRecords[WR.Login] += 1;
else
MostWorldRecords[WR.Login] = 1;
}
}
}
declare Selected = -1;
for(I, 0, Items.count-1)
if(Items[I].Selected)
Selected = I;
declare PreviousAmount = 0;
declare Offset = 0;
declare Counter = 0;
foreach(Name => Amount in MostWorldRecords.sortreverse()) {
if(Amount == PreviousAmount)
Offset += 1;
else
Offset = 0;
PreviousAmount = Amount;
declare SItem Item;
Item.Content = (Counter+1-Offset)^") " ^ Nicknames[Name];
Item.WRCount = Amount;
Item.WRHolder = Nicknames[Name];
Item.WRHolderLogin = Name;
if(Counter == Selected) Item.Selected = True;
Items.add(Item);
Counter += 1;
}
}
else {
}
}
UpdateTitleFolder(True, True);
}
Void ChangeToMostWorldRecordsListLevel(Integer _Index) {
declare Frame_Outer_List = (Page.GetFirstChild("FRAME_OUTER_LIST") as CMlFrame);
Frame_Outer_List.ScrollOffset.Y = 0.;
TitleFolderLevel = "Most world records list";
SelectedMostWorldRecords = _Index;
Items.clear();
if(IsInHistory) {
}
else {
if(TaskRecords.existskey(DataFileMgr.Campaigns[SelectedCampaign].CampaignId)) {
declare CTaskResult_NaturalLeaderBoardInfoList[Text] MostWorldRecords;
declare Text[Text] Nicknames;
foreach(MapUid => Task in TaskRecords[DataFileMgr.Campaigns[SelectedCampaign].CampaignId]) {
if(Task.HasSucceeded) {
if(Task.LeaderBoardInfo.count > 0 && Task.LeaderBoardInfo[0].Score >= 0) {
declare WR <=> Task.LeaderBoardInfo[0];
foreach(MapUid => Task in SortedMostWorldRecords) {
if(WR.Login == Task.LeaderBoardInfo[0].Login) {
MostWorldRecords[MapUid] = Task;
}
}
}
}
}
declare Integer[Text] MapSorts;
foreach(MapUid => Task in MostWorldRecords) {
MapSorts[MapUid] = RecordCount[DataFileMgr.Campaigns[SelectedCampaign].CampaignId][MapUid];
}
MapSorts = MapSorts.sortreverse();
SortedMostWorldRecords.clear();
foreach(MapUid => Count in MapSorts) {
SortedMostWorldRecords[MapUid] = MostWorldRecords[MapUid];
}
MostWorldRecords.clear();
declare CMapInfo[Text] MapInfos;
foreach(MapUid => Count in MapSorts) {
foreach(MapGroup in DataFileMgr.Campaigns[SelectedCampaign].MapGroups) {
foreach(MapInfo in MapGroup.MapInfos) {
if(MapInfo.MapUid == MapUid) {
MapInfos[MapUid] <=> MapInfo;
}
}
}
}
declare Selected = -1;
for(I, 0, Items.count-1)
if(Items[I].Selected)
Selected = I;
declare Counter = 0;
declare Offset = 0;
foreach(MapUid => Task in SortedMostWorldRecords) {
declare Rank = Counter+1-Offset;
declare SItem Item;
Item.Content = "$s" ^ (Counter+1-Offset)^")$s " ^ MapInfos[MapUid].Name;
Item.WR = TimeToTextWithMilli(Task.LeaderBoardInfo[0].Score);
Item.Skillpoints = MathLib::NearestInteger((MapSorts[MapUid]-1)*100./1.);
Item.Image = "file://Thumbnails/MapUid/"^MapInfos[MapUid].MapUid;
Item.MapUid = MapUid;
if(Counter == Selected) Item.Selected = True;
Items.add(Item);
Counter += 1;
}
}
else {
}
}
UpdateTitleFolder(True, True);
}
Void ChangeToMostSkillpointsLevel(Integer _Index, Boolean _DontAnimateInner) {
Items.clear();
if(IsInHistory) {
}
else {
if(TaskSkillpoints.existskey(DataFileMgr.Campaigns[_Index].CampaignId)) {
declare Task = TaskSkillpoints[DataFileMgr.Campaigns[_Index].CampaignId];
if(Task.HasSucceeded) {
if(Task.LeaderBoardInfo.count > 0 && Task.LeaderBoardInfo[0].Score >= 0) {
declare Selected = -1;
if(_DontAnimateInner)
for(I, 0, Items.count-1)
if(Items[I].Selected)
Selected = I;
Items.clear();
TitleFolderLevel = "Most skillpoints";
SelectedCampaign = _Index;
declare CNaturalLeaderBoardInfo[] AllPlayers;
foreach(Player in Task.LeaderBoardInfo)
AllPlayers.add(Player);
if(TaskSkillpointsAdditional == Null)
TaskSkillpointsAdditional = ScoreMgr.CampaignLeaderBoard_GetPlayerList(NullId, DataFileMgr.Campaigns[_Index].CampaignId, LeaderboardZone, True, 10, 90);
else if(TaskSkillpointsAdditional != Null && TaskSkillpointsAdditional.HasSucceeded)
foreach(Player in TaskSkillpointsAdditional.LeaderBoardInfo)
AllPlayers.add(Player);
declare PreviousScore = -2;
declare Offset = 0;
declare Counter = 0;
foreach(Player in AllPlayers) {
if(Player.Score == PreviousScore)
Offset += 1;
else
Offset = 0;
PreviousScore = Player.Score;
declare NumTies = -1;
foreach(P in AllPlayers)
if(Player.Score == P.Score)
NumTies += 1;
declare SItem Item;
Item.Content = (Player.Rank-Offset)^") " ^ Player.DisplayName;
Item.WRHolder = Player.DisplayName;
Item.WRHolderLogin = Player.Login;
Item.Skillpoints = Player.Score;
if(Counter == Selected) Item.Selected = True;
Items.add(Item);
Counter += 1;
}
//declare SItem Item;
//Item.Content = "$aaaLoad 100 more (coming soon)";
//Items.add(Item);
}
else {
// No records
}
}
else {
}
}
else {
}
}
UpdateTitleFolder(False, True);
}
Void ChangeToMostSkillpointsLevel(Integer _Index) {
ChangeToMostSkillpointsLevel(_Index, False);
}
Void ChangeToMostSkillpointsListLevel(Integer _Index) {
declare Frame_Outer_List = (Page.GetFirstChild("FRAME_OUTER_LIST") as CMlFrame);
Frame_Outer_List.ScrollOffset.Y = 0.;
TitleFolderLevel = "Most skillpoints list";
SelectedMostSkillpoints = _Index;
Items.clear();
if(IsInHistory) {
}
else {
declare Selected = -1;
for(I, 0, Items.count-1)
if(Items[I].Selected)
Selected = I;
declare Offset = 0;
declare Counter = 0;
foreach(I => Record in SortedMostSkillpoints) {
declare SItem Item;
Item.Content = "$s" ^ (Counter+1-Offset)^")$s " ^ Record.MapName;
Item.Skillpoints = Record.SkillPoints;
Item.Image = "file://Thumbnails/MapUid/"^Record.MapUid;
Item.MapUid = Record.MapUid;
if(Counter == Selected) Item.Selected = True;
Items.add(Item);
Counter += 1;
}
}
UpdateTitleFolder(True, True);
}
Void ChangeToCampaignLevel(Integer _Index) {
TitleFolderLevel = "Campaign";
declare Title = SortTrackerTitles()[SelectedTitle];
if(SelectedTitle == 0 && !IsInHistory)
(Page.GetFirstChild("LABEL_DATADATE") as CMlLabel).Value = TimeLib::FormatDate(CurrentTitleTimestamp, TimeLib::EDateFormats::DateShort) ^ " " ^ TimeLib::FormatDate(CurrentTitleTimestamp, TimeLib::EDateFormats::Time);
else {
CurrentTitleTimestamp = TrackerTimestamps[Title][SelectedTimestamp];
(Page.GetFirstChild("LABEL_DATADATE") as CMlLabel).Value = TimeLib::FormatDate(CurrentTitleTimestamp, TimeLib::EDateFormats::DateShort) ^ " " ^ TimeLib::FormatDate(CurrentTitleTimestamp, TimeLib::EDateFormats::Time);
}
//(Page.GetFirstChild("LABEL_DATADATE") as CMlLabel).Show();
Items.clear();
if(IsInHistory) {
if(IsCompareMode()) {
foreach(Campaign => Groups in TrackerCompareResult) {
declare SItem Item;
Item.Content = " "^Campaign;
Items.add(Item);
}
}
else {
foreach(Campaign in TrackerHistoryCampaigns) {
declare SItem Item;
Item.Content = " "^Campaign;
Items.add(Item);
}
}
}
else if(_Index == 0 && LoadedTitle != Null) {
foreach(Campaign in DataFileMgr.Campaigns) {
declare SItem Item;
Item.Content = " "^Campaign.CampaignId;
if(Campaign.ScoreContext != "")
Item.Context = "SCORE CONTEXT: $o"^Campaign.ScoreContext;
Items.add(Item);
}
}
else {
// idk some magic
}
if(CampaignListType == "MostSkillpoints") {
TaskSkillpointsAdditionalCompleted = False;
if(TaskSkillpointsAdditional != Null) {
ScoreMgr.TaskResult_Release(TaskSkillpointsAdditional.Id);
TaskSkillpointsAdditional = Null;
}
TaskSkillpointsListDone = False;
if(TaskSkillpointsList != Null) {
ScoreMgr.TaskResult_Release(TaskSkillpointsList.Id);
TaskSkillpointsList = Null;
}
}
if(SelectedCampaign != -1)
Items[SelectedCampaign].Selected = True;
SelectedMapGroup = -1;
UpdateTitleFolder(True, True);
}
Void ChangeToMapGroupLevel(Integer _Index) {
TitleFolderLevel = "Map group";
SelectedCampaign = _Index;
declare Title = SortTrackerTitles()[SelectedTitle];
declare Names = ["White", "Green", "Blue", "Red", "Black"];
declare Titles = ["TMCanyon@nadeo", "TMStadium@nadeo", "TMValley@nadeo", "TMLagoon@nadeo", "Platform@nadeolive",
"StarTrackCanyon@arkes910", "StarTrackStadium@arkes910", "StarTrackValley@arkes910", "StarTrackLagoon@arkes910",
"TM2U_Island@adamkooo", "TrackMania_2_United@adamkooo", "TM2UF@adamkooo",
"Nadeo_Envimix@bigbang1112", "Reunited@bigbang1112"];
Items.clear();
if(IsInHistory) {
if(IsCompareMode()) {
declare Campaign = GetCampaignIdFromIndex(SelectedCampaign);
for(I, 0, TrackerCompareResult[Campaign].count-1) {
declare Group = TrackerCompareResult[Campaign][I];
declare Counter = 0;
foreach(Map in Group) if(Map.map_uid == "") Counter += 1;
if(Counter == Group.count) {
}
else {
declare SItem Item;
if(Titles.exists(Title)) {
Item.Content = " "^TextLib::GetTranslatedText(Names[I]);
}
else
Item.Content = " "^I;
Items.add(Item);
}
}
}
else {
for(I, 0, TrackerHistoryMaps.count-1) {
declare SItem Item;
if(Titles.exists(Title)) {
Item.Content = " "^TextLib::GetTranslatedText(Names[I]);
}
else
Item.Content = " "^I;
Items.add(Item);
}
}
}
else {
declare Counter = 0;
foreach(Group in DataFileMgr.Campaigns[_Index].MapGroups) {
declare SItem Item;
if(Titles.exists(Title)) {
Item.Content = " "^TextLib::GetTranslatedText(Names[Counter]);
}
else
Item.Content = " "^Counter;
Items.add(Item);
Counter += 1;
}
}
if(SelectedMapGroup != -1)
Items[SelectedMapGroup].Selected = True;
SelectedMapInfo = -1;
UpdateTitleFolder(True, True);
}
Void ChangeToMapInfoLevel(Integer _Index) {
TitleFolderLevel = "Map info";
SelectedMapGroup = _Index;
ClearGhosts();
Items.clear();
if(IsInHistory) {
if(IsCompareMode()) {
declare Campaign = GetCampaignIdFromIndex(SelectedCampaign);
declare Index = -1;
declare Counter = -1;
foreach(Group in TrackerCompareResult[Campaign]) {
Counter += 1;
if(Group.count > 0) Index += 1;
if(SelectedMapGroup == Index) break;
}
if(Counter >= 0) {
declare MapGroup = TrackerCompareResult[Campaign][Counter];
for(I, 0, MapGroup.count-1) {
declare Map = TrackerCompareResult[Campaign][Counter][I];
declare SItem Item;
Item.Content = " "^Map.name;
Item.Image = "file://Thumbnails/MapUid/"^Map.map_uid;
if(Map.records.count > 0) {
if(Map.records[0].rank == 1) {
Item.WR = TimeToTextWithMilli(Map.records[0].score);
Item.WRHolder = Map.records[0].nickname;
}
}
Items.add(Item);
}
}
}
else {
foreach(Map in TrackerHistoryMaps[_Index]) {
declare SItem Item;
Item.Content = " "^Map.name;
Item.Image = "file://Thumbnails/MapUid/"^Map.map_uid;
Item.MapUid = Map.map_uid;
Items.add(Item);
}
}
}
else {
foreach(Info in DataFileMgr.Campaigns[SelectedCampaign].MapGroups[_Index].MapInfos) {
declare SItem Item;
Item.Content = " "^Info.Name;
if(!Info.Unlocked) Item.Content ^= " $ff0🔒";
Item.Image = "file://Thumbnails/MapUid/"^Info.MapUid;
Item.MapUid = Info.MapUid;
Item.Medals = [Info.TMObjective_AuthorTime, Info.TMObjective_GoldTime, Info.TMObjective_SilverTime, Info.TMObjective_BronzeTime];
Item.PB = ScoreMgr.Map_GetRecord(NullId, Info.MapUid, DataFileMgr.Campaigns[SelectedCampaign].ScoreContext);
Items.add(Item);
}
}
TaskRecordsAdditionalCompleted = False;
if(TaskRecordsAdditional != Null) {
ScoreMgr.TaskResult_Release(TaskRecordsAdditional.Id);
TaskRecordsAdditional = Null;
}
if(SelectedMapInfo != -1)
Items[SelectedMapInfo].Selected = True;
SelectedRecord = -1;
UpdateTitleFolder(True, True);
}
Void ChangeToOnlineRecordLevel(Integer _Index, Boolean _DontAnimateInner) {
SelectedMapInfo = _Index;
if(IsInHistory) {
if(IsCompareMode()) {
declare Campaign = GetCampaignIdFromIndex(SelectedCampaign);
declare Index = -1;
declare Counter = -1;
foreach(Group in TrackerCompareResult[Campaign]) {
Counter += 1;
if(Group.count > 0) Index += 1;
if(SelectedMapGroup == Index) break;
}
if(Counter >= 0) {
declare Index2 = -1;
declare Counter2 = -1;
foreach(Map in TrackerCompareResult[Campaign][Counter]) {
Counter2 += 1;
if(Map.map_uid != "") Index2 += 1;
if(SelectedMapInfo == Index2) break;
}
declare Map = TrackerCompareResult[Campaign][Counter][Counter2];
if(Counter2 >= 0) {
ClearGhosts();
Items.clear();
TitleFolderLevel = "Online record";
declare PreviousScore = -2;
declare Offset = 0;
foreach(Record in Map.records) {
if(Record.score == PreviousScore)
Offset += 1;
PreviousScore = Record.score;
declare SItem Item;
Item.Content = (Record.rank-Offset)^") "^TimeToTextWithMilli(Record.score) ^ " "^TextLib::GetTranslatedText("by")^" " ^ Record.nickname;
Items.add(Item);
if(Record.replay_url != "" && Record.file_name != "") {
TaskGhosts.add(DataFileMgr.Ghost_Download(Record.file_name, Record.replay_url));
TaskGhostsCompletion.add(False);
}
else {
TaskGhosts.add(Null);
TaskGhostsCompletion.add(True);
}
}
}
}
}
else {
declare MapInfo = TrackerHistoryMaps[SelectedMapGroup][_Index];
if(TrackerHistoryRecords.existskey(MapInfo.map_uid)) {
declare Records = TrackerHistoryRecords[MapInfo.map_uid];
ClearGhosts();
if(Records.count > 0 && Records[0].score >= 0) {
Items.clear();
TitleFolderLevel = "Online record";
declare PreviousScore = -2;
declare Offset = 0;
foreach(Record in Records) {
if(Record.score == PreviousScore)
Offset += 1;
PreviousScore = Record.score;
declare SItem Item;
Item.Content = (Record.rank-Offset)^") "^TimeToTextWithMilli(Record.score) ^ " "^TextLib::GetTranslatedText("by")^" " ^ Record.nickname;
Items.add(Item);
if(Record.replay_url != "" && Record.file_name != "") {
TaskGhosts.add(DataFileMgr.Ghost_Download(Record.file_name, Record.replay_url));
TaskGhostsCompletion.add(False);
}
else {
TaskGhosts.add(Null);
TaskGhostsCompletion.add(True);
}
}
}
}
}
}
else {
declare MapInfo = DataFileMgr.Campaigns[SelectedCampaign].MapGroups[SelectedMapGroup].MapInfos[SelectedMapInfo];
if(TaskRecords.existskey(DataFileMgr.Campaigns[SelectedCampaign].CampaignId)) {
declare Task = TaskRecords[DataFileMgr.Campaigns[SelectedCampaign].CampaignId][MapInfo.MapUid];
if(Task.HasSucceeded) {
ClearGhosts();
if(Task.LeaderBoardInfo.count > 0 && Task.LeaderBoardInfo[0].Score >= 0) {
declare Selected = -1;
if(_DontAnimateInner)
for(I, 0, Items.count-1)
if(Items[I].Selected)
Selected = I;
Items.clear();
TitleFolderLevel = "Online record";
declare PreviousScore = -2;
declare Offset = 0;
declare CNaturalLeaderBoardInfo[] AllRecords;
foreach(Record in Task.LeaderBoardInfo)
AllRecords.add(Record);
if(TaskRecordsAdditional == Null && RecordCount[DataFileMgr.Campaigns[SelectedCampaign].CampaignId][MapInfo.MapUid] > 10)
TaskRecordsAdditional = ScoreMgr.MapLeaderBoard_GetPlayerList(NullId, MapInfo.MapUid, DataFileMgr.Campaigns[SelectedCampaign].ScoreContext, LeaderboardZone, 10, 90);
else if(TaskRecordsAdditional != Null && TaskRecordsAdditional.HasSucceeded)
foreach(Record in TaskRecordsAdditional.LeaderBoardInfo)
AllRecords.add(Record);
declare Counter = 0;
foreach(Record in AllRecords) {
if(Record.Score == PreviousScore)
Offset += 1;
else
Offset = 0;
PreviousScore = Record.Score;
declare NumTies = -1;
foreach(Rec in AllRecords)
if(Record.Score == Rec.Score)
NumTies += 1;
declare SItem Item;
Item.SPRank = Record.Rank-Offset+NumTies;
Item.Content = (Record.Rank-Offset)^") "^TimeToTextWithMilli(Record.Score) ^ " "^TextLib::GetTranslatedText("by")^" " ^ Record.DisplayName;
if(Counter == Selected) Item.Selected = True;
Items.add(Item);
if(Record.ReplayUrl != "" && Record.FileName != "") {
TaskGhosts.add(DataFileMgr.Ghost_Download(Record.FileName, Record.ReplayUrl));
TaskGhostsCompletion.add(False);
}
else if(Record.Login == LocalUser.Login && Record.Score == ScoreMgr.Map_GetRecord(NullId, MapInfo.MapUid, DataFileMgr.Campaigns[SelectedCampaign].ScoreContext)) {
TaskGhosts.add(ScoreMgr.Map_GetRecordGhost(NullId, MapInfo.MapUid, DataFileMgr.Campaigns[SelectedCampaign].ScoreContext));
TaskGhostsCompletion.add(False);
}
else {
TaskGhosts.add(Null);
TaskGhostsCompletion.add(True);
}
Counter += 1;
}
//declare SItem Item;
//Item.Content = "$aaaLoad 100 more (coming soon)";
//Items.add(Item);
}
else {
// No records
}
}
else {
}
}
else {
}
}
if(SelectedRecord != -1 && Items.count > SelectedRecord)
Items[SelectedRecord].Selected = True;
UpdateTitleFolder(False, !_DontAnimateInner);
}
Void ChangeToOnlineRecordLevel(Integer _Index) {
ChangeToOnlineRecordLevel(_Index, False);
}
Void ChangeToCheckpointLevel(Integer _Index) {
SelectedRecord = _Index;
if(TaskGhosts.existskey(_Index)) {
declare Task = TaskGhosts[_Index];
if(Task != Null && Task.HasSucceeded) {
Items.clear();
TitleFolderLevel = "Checkpoint";
for(I, 0, Task.Ghost.Result.Checkpoints.count-1) {
declare Checkpoint = Task.Ghost.Result.Checkpoints[I];
declare SItem Item;
if(I == Task.Ghost.Result.Checkpoints.count-1)
Item.Content = "🏁 "^TimeToTextWithMilli(Checkpoint);
else
Item.Content = "🕑 "^TimeToTextWithMilli(Checkpoint);
Items.add(Item);
}
UpdateTitleFolder(True, True);
}
else {
UpdateTitleFolder(False, True); // Not successful
}
}
else {
UpdateTitleFolder(False, True);
}
}
Integer CheckRecordLoadingCompletion() {
declare CompletedCount = 0;
foreach(Context => MapTasks in TaskRecords) {
foreach(Map => Task in MapTasks) {
if(TaskRecordsCompletion.existskey(Context) && TaskRecordsCompletion[Context].existskey(Map)) {
if(!Task.IsProcessing && !TaskRecordsCompletion[Context][Map]) {
TaskRecordsCompletion[Context][Map] = True;
}
else if(!Task.IsProcessing) CompletedCount += 1;
}
}
}
return CompletedCount;
}
Integer CheckSkillpointsLoadingCompletion() {
declare CompletedCount = 0;
foreach(CampaignId => Task in TaskSkillpoints) {
if(TaskSkillpointsCompletion.existskey(CampaignId)) {
if(!Task.IsProcessing && !TaskSkillpointsCompletion[CampaignId]) {
UpdateTitleFolder(False, True);
TaskSkillpointsCompletion[CampaignId] = True;
}
else if(!Task.IsProcessing) CompletedCount += 1;
}
}
return CompletedCount;
}
Void CheckGhostDownloadingCompletion() {
for(I, 0, TaskGhosts.count-1) {
declare Task = TaskGhosts[I];
if(Task != Null && !Task.IsProcessing && !TaskGhostsCompletion[I]) {
UpdateTitleFolder(False, True);
TaskGhostsCompletion[I] = True;
}
}
}
declare CHttpRequest RequestTitleInfo;
Boolean CheckCurrentMap(CMap _Map) {
if(_Map == Null || _Map.MapInfo.MapUid != PreviousMapUid) {
CurrentMap <=> _Map;
if(_Map != Null)
PreviousMapUid = _Map.MapInfo.MapUid;
}
if(_Map != Null && _Map.MapInfo.MapUid != "" && TitleFolderLevel != "Title" && TitleFolderLevel != "History" && !IsInHistory
&& TitleFolderLevel != "Save replay" && TitleFolderLevel != "Open save replay") {
Page.GetFirstChild("FRAME_BUTTON_FINDMAP").Show();
return True;
}
else
Page.GetFirstChild("FRAME_BUTTON_FINDMAP").Hide();
return False;
}
Void SaveReplay(Text _FileName, CGhost _Ghost) { // unused yet
TitleFolderLevel = "Save replay";
if(ReplayList == Null)
ReplayList = DataFileMgr.Replay_GetGameList("", False);
else
ReplayList = DataFileMgr.Replay_GetGameList(ReplayList.Path, False);
declare Frame_SaveReplay = (Page.GetFirstChild("FRAME_SAVEREPLAY") as CMlFrame);
(Frame_SaveReplay.GetFirstChild("LABEL_SAVEREPLAY_FILE") as CMlLabel).Value = _FileName;
Frame_SaveReplay.Show();
}
declare CHttpRequest RequestMXTrack;
declare Text TrackMXLink;
Void UpdateCopyWindow() {
declare A = SelectedMapInfo;
if(A == -1 || TitleFolderLevel == "Map info")
for(I, 0, Items.count-1)
if(Items[I].Selected)
A = I;
declare I = -1;
if(TitleFolderLevel == "Checkpoint")
I = SelectedRecord;
else if(TitleFolderLevel == "Online record") {
for(J, 0, Items.count-1)
if(Items[J].Selected)
I = J;
}
else {
I = 0;
}
declare Title = SortTrackerTitles()[SelectedTitle];
declare CCampaign Campaign;
declare CMapInfo MapInfo;
declare CTaskResult_NaturalLeaderBoardInfoList Task;
declare Text HistoryCampaign;
declare STrackerHistoryMap HistoryMapInfo;
declare STrackerHistoryRecord HistoryRecord;
if(IsInHistory) {
HistoryCampaign = TrackerHistoryCampaigns[SelectedCampaign];
HistoryMapInfo = TrackerHistoryMaps[SelectedMapGroup][A];
HistoryRecord = TrackerHistoryRecords[HistoryMapInfo.map_uid][I];
}
else {
Campaign = DataFileMgr.Campaigns[SelectedCampaign];
MapInfo = Campaign.MapGroups[SelectedMapGroup].MapInfos[A];
if(I < 10) Task = TaskRecords[Campaign.CampaignId][MapInfo.MapUid];
else {
Task = TaskRecordsAdditional;
I -= 10;
}
}
declare ColorSelected = ColorLib::HexToRgb("48B");
declare ColorNotSelected = ColorLib::HexToRgb("444");
declare Label_Format_VeryShort = (Page.GetFirstChild("LABEL_FORMAT_VERYSHORT") as CMlLabel);
declare Label_Format_Short = (Page.GetFirstChild("LABEL_FORMAT_SHORT") as CMlLabel);
declare Label_Format_Balanced = (Page.GetFirstChild("LABEL_FORMAT_BALANCED") as CMlLabel);
declare Label_Format_Detailed = (Page.GetFirstChild("LABEL_FORMAT_DETAILED") as CMlLabel);
declare Label_Format_TMReport = (Page.GetFirstChild("LABEL_FORMAT_TMREPORT") as CMlLabel);
declare Label_Format_Envimix = (Page.GetFirstChild("LABEL_FORMAT_ENVIMIX") as CMlLabel);
declare persistent Text PERSISTENT_LEADERBOARDS_COPYFORMAT for LocalUser;
declare Output = "";
declare Text Map;
if(IsInHistory) Map = TextLib::StripFormatting(HistoryMapInfo.name);
else Map = TextLib::StripFormatting(MapInfo.Name);
declare Env = "";
if(Title == "TMCanyon@nadeo"
|| Title == "TMStadium@nadeo"
|| Title == "TMValley@nadeo"
|| Title == "TMLagoon@nadeo") {
if(IsInHistory) Env = HistoryMapInfo.collection_name^" ";
else Env = MapInfo.CollectionName^" ";
}
switch(PERSISTENT_LEADERBOARDS_COPYFORMAT) {
case "Very short": {
Label_Format_VeryShort.TextColor = ColorSelected;
Label_Format_Short.TextColor = ColorNotSelected;
Label_Format_Balanced.TextColor = ColorNotSelected;
Label_Format_Detailed.TextColor = ColorNotSelected;
Label_Format_TMReport.TextColor = ColorNotSelected;
Label_Format_Envimix.TextColor = ColorNotSelected;
}
case "Short": {
Label_Format_VeryShort.TextColor = ColorNotSelected;
Label_Format_Short.TextColor = ColorSelected;
Label_Format_Balanced.TextColor = ColorNotSelected;
Label_Format_Detailed.TextColor = ColorNotSelected;
Label_Format_TMReport.TextColor = ColorNotSelected;
Label_Format_Envimix.TextColor = ColorNotSelected;
}
case "Balanced": {
Label_Format_VeryShort.TextColor = ColorNotSelected;
Label_Format_Short.TextColor = ColorNotSelected;
Label_Format_Balanced.TextColor = ColorSelected;
Label_Format_Detailed.TextColor = ColorNotSelected;
Label_Format_TMReport.TextColor = ColorNotSelected;
Label_Format_Envimix.TextColor = ColorNotSelected;
}
case "Detailed": {
Label_Format_VeryShort.TextColor = ColorNotSelected;
Label_Format_Short.TextColor = ColorNotSelected;
Label_Format_Balanced.TextColor = ColorNotSelected;
Label_Format_Detailed.TextColor = ColorSelected;
Label_Format_TMReport.TextColor = ColorNotSelected;
Label_Format_Envimix.TextColor = ColorNotSelected;
}
case "Trackmania Report": {
Label_Format_VeryShort.TextColor = ColorNotSelected;
Label_Format_Short.TextColor = ColorNotSelected;
Label_Format_Balanced.TextColor = ColorNotSelected;
Label_Format_Detailed.TextColor = ColorNotSelected;
Label_Format_TMReport.TextColor = ColorSelected;
Label_Format_Envimix.TextColor = ColorNotSelected;
}
case "Envimix": {
Label_Format_VeryShort.TextColor = ColorNotSelected;
Label_Format_Short.TextColor = ColorNotSelected;
Label_Format_Balanced.TextColor = ColorNotSelected;
Label_Format_Detailed.TextColor = ColorNotSelected;
Label_Format_TMReport.TextColor = ColorNotSelected;
Label_Format_Envimix.TextColor = ColorSelected;
}
}
if((Task != Null && Task.HasSucceeded && I != -1) || HistoryCampaign != "") {
declare Text Time;
declare Text Nickname;
if(IsInHistory) {
Time = TimeToTextWithMilli(HistoryRecord.score);
Nickname = TextLib::StripFormatting(HistoryRecord.nickname);
}
else {
Time = TimeToTextWithMilli(Task.LeaderBoardInfo[I].Score);
Nickname = TextLib::StripFormatting(Task.LeaderBoardInfo[I].DisplayName);
}
switch(PERSISTENT_LEADERBOARDS_COPYFORMAT) {
case "Very short": {
Output = Time^" by "^Nickname^" on "^Env^Map;
}
case "Short": {
if(TrackMXLink == "")
Output = Env^Map^"\n"^Time^" by "^Nickname;
else
Output = Env^Map^"\n"^Time^" by "^Nickname^"\nMX: "^TrackMXLink;
}
case "Balanced": {
if(TrackMXLink == "")
Output = "Map: "^Map^"\n"^"Time: "^Time^" by "^Nickname^"\nTitle: "^Title;
else
Output = "Map: "^Map^"\n"^"Time: "^Time^" by "^Nickname^"\nMX: "^TrackMXLink^"\nTitle: "^Title;
}
case "Detailed": {
if(TrackMXLink == "")
Output = "Map: "^Map^"\nEnvironment: "^MapInfo.CollectionName^"\nTime: "^Time^" by "^Nickname^"\nTitle: "^Title;
else
Output = "Map: "^Map^"\nEnvironment: "^MapInfo.CollectionName^"\nTime: "^Time^" by "^Nickname^"\nMX: "^TrackMXLink^"\nTitle: "^Title;
}
case "Trackmania Report": {
if(TrackMXLink == "")
Output = ":Maniaplanet: **"^Env^Map^"**\nTime: "^Time^"\nBy: **"^Nickname^"**\n"^TimeLib::FormatDate(CurrentTitleTimestamp, TimeLib::EDateFormats::DateShort);
else
Output = ":Maniaplanet: **"^Env^Map^"**\nTime: "^Time^"\nBy: **"^Nickname^"**\nMX: <"^TrackMXLink^">\n"^TimeLib::FormatDate(CurrentTitleTimestamp, TimeLib::EDateFormats::DateShort);
}
case "Envimix": { // Balanced with car presented like score context
if(TrackMXLink == "")
Output = "Map: "^Map^" with "^Campaign.ScoreContext^"\n"^"Time: "^Time^" by "^Nickname^"\nTitle: "^Title;
else
Output = "Map: "^Map^" with "^Campaign.ScoreContext^"\n"^"Time: "^Time^" by "^Nickname^"\nMX: "^TrackMXLink^"\nTitle: "^Title;
}
}
}
(Page.GetFirstChild("TEXTEDIT_COPY") as CMlTextEdit).Value = Output;
}
Void PrepareThisTitle() {
RequestTitleInfo = Http.CreateGet("https://maniaplanet.com/webservices/titles/"^LoadedTitle.TitleId);
TrackerTitles.add(LoadedTitle.TitleId);
UpdateTitleSection();
ChangeToTitleLevel(LoadedTitle.TitleId);
StartLoadingRecords();
}
Void ShowTooltip(Text _Text) {
declare Frame_Tooltip = (Page.GetFirstChild("FRAME_TOOLTIP") as CMlFrame);
declare Label_Text = (Frame_Tooltip.GetFirstChild("LABEL_TEXT") as CMlLabel);
declare Quad_Tooltip = (Frame_Tooltip.GetFirstChild("QUAD_TOOLTIP") as CMlQuad);
Label_Text.Size.X = Label_Text.ComputeWidth(_Text);
Quad_Tooltip.Size.X = Label_Text.ComputeWidth(_Text)+4;
Label_Text.Value = _Text;
Frame_Tooltip.Show();
}
Void HideTooltip() {
(Page.GetFirstChild("FRAME_TOOLTIP") as CMlFrame).Hide();
}
Void MoveTooltip() {
declare Frame_Tooltip = (Page.GetFirstChild("FRAME_TOOLTIP") as CMlFrame);
if(Frame_Tooltip.Visible) {
declare Quad_Tooltip = (Frame_Tooltip.GetFirstChild("QUAD_TOOLTIP") as CMlQuad);
if(MouseX + Quad_Tooltip.Size.X > 160)
Frame_Tooltip.RelativePosition_V3 = <160-Quad_Tooltip.Size.X, MouseY>;
else
Frame_Tooltip.RelativePosition_V3 = <MouseX, MouseY>;
}
}
declare CHttpRequest RequestPing;
declare CHttpRequest RequestGetTitles;
declare CHttpRequest RequestGetTimestamps;
declare CHttpRequest RequestGetRecords;
declare CHttpRequest RequestSendTitle;
declare CHttpRequest[] RequestSendCampaigns;
declare CHttpRequest[] RequestSendRecords;
Text GetTrackerUrl() {
declare persistent Text PERSISTENT_LEADERBOARDS_TRACKER_URL for LocalUser;
declare Value = PERSISTENT_LEADERBOARDS_TRACKER_URL;
if(TextLib::EndsWith("/", Value)) Value = TextLib::SubText(Value, 0, TextLib::Length(Value)-1);
return Value;
}
Boolean ReadyToRequestTracker(Text _TrackerUrl) {
return _TrackerUrl != "" && Http.IsValidUrl(_TrackerUrl);
}
Void SendCampaignsToTracker() { // Should be called only if loaded title
declare Text Leaderboards_SecretKey for LocalUser;
foreach(Campaign in DataFileMgr.Campaigns) {
declare STrackerCampaign Camp;
Camp.SecretKey = Leaderboards_SecretKey;
Camp.CampaignId = Campaign.CampaignId;
Camp.TitleId = LoadedTitle.TitleId;
Camp.Timestamp = CurrentTitleTimestamp;
Camp.PlayerCount = ScoreMgr.CampaignLeaderBoard_GetPlayerCount(Campaign.CampaignId, "World", True);
foreach(Group in Campaign.MapGroups) {
declare STrackerMapInfo[Text] Gro;
foreach(Map in Group.MapInfos) {
declare STrackerMapInfo M;
M.MapUid = Map.MapUid;
M.Comments = Map.Comments;
M.CopperPrice = Map.CopperPrice;
M.CollectionName = Map.CollectionName;
M.AuthorLogin = Map.AuthorLogin;
M.AuthorNickName = Map.AuthorNickName;
M.AuthorZonePath = Map.AuthorZonePath;
M.MapType = Map.MapType;
M.IsPlayable = Map.IsPlayable;
M.TMObjective_AuthorTime = Map.TMObjective_AuthorTime;
M.TMObjective_GoldTime = Map.TMObjective_GoldTime;
M.TMObjective_SilverTime = Map.TMObjective_SilverTime;
M.TMObjective_BronzeTime = Map.TMObjective_BronzeTime;
M.TMObjective_NbLaps = Map.TMObjective_NbLaps;
M.TMObjective_IsLapRace = Map.TMObjective_IsLapRace;
M.Name = Map.Name;
M.RecordCount = ScoreMgr.MapLeaderBoard_GetPlayerCount(Map.MapUid, Campaign.ScoreContext, "World");
Gro[Map.MapUid] = M;
}
Camp.Maps.add(Gro);
}
RequestSendCampaigns.add(Http.CreatePost(GetTrackerUrl() ^ "/sendcampaign.php", Camp.tojson()));
}
while(RequestSendCampaigns.count > 0) {
for(I, 0, RequestSendCampaigns.count-1) {
if(RequestSendCampaigns.existskey(I)) {
if(RequestSendCampaigns[I].IsCompleted) {
Http.Destroy(RequestSendCampaigns[I]);
RequestSendCampaigns.removekey(I);
}
}
}
yield;
}
}
declare Text RequestTrackerCommand;
declare Text RequestTrackerCompareTimestamp1;
declare Text RequestTrackerCompareTimestamp2;
Void SendRecordsToTracker() {
declare Text Leaderboards_SecretKey for LocalUser;
foreach(Campaign => Maps in TaskRecords) {
declare STrackerCampaignRecords Recs;
Recs.SecretKey = Leaderboards_SecretKey;
Recs.CampaignId = Campaign;
Recs.TitleId = LoadedTitle.TitleId;
Recs.Timestamp = CurrentTitleTimestamp;
foreach(Uid => LBRecords in Maps) {
declare STrackerRecord[] Records;
foreach(Info in LBRecords.LeaderBoardInfo) {
declare STrackerRecord Rec;
Rec.Rank = Info.Rank;
Rec.Login = Info.Login;
Rec.Nickname = Info.DisplayName;
Rec.Score = Info.Score;
Rec.ReplayUrl = Info.ReplayUrl;
Rec.FileName = Info.FileName;
Records.add(Rec);
}
Recs.Records[Uid] = Records;
}
RequestSendRecords.add(Http.CreatePost(GetTrackerUrl() ^ "/sendrecords.php", Recs.tojson()));
}
while(RequestSendRecords.count > 0) {
for(I, 0, RequestSendRecords.count-1) {
if(RequestSendRecords.existskey(I)) {
if(RequestSendRecords[I].IsCompleted) {
Http.Destroy(RequestSendRecords[I]);
RequestSendRecords.removekey(I);
}
}
}
yield;
}
}
main() {
declare BlockedTitles = ["TM2U_Island@adamkooo"];
while(LoadedTitle != Null && BlockedTitles.exists(LoadedTitle.TitleId)) {
Page.GetFirstChild("LABEL_BLOCKED").Show();
yield;
}
declare AuthClientId = "44cb53cd3f";
declare AuthUri = TextLib::URLEncode("https://bigbang1112.eu/projects/leaderboards/authorize.php");
declare AuthScopes = TextLib::URLEncode("basic");
declare Boolean Leaderboards_Authorized for LocalUser;
declare Text Leaderboards_SecretKey for LocalUser;
declare MemberRequest = Http.CreateGet("https://bigbang1112.eu/projects/leaderboards/member.php?"^LocalUser.Login);
wait(MemberRequest.IsCompleted);
if(MemberRequest.StatusCode == 200) {
declare SMember Member;
declare Json = Member.fromjson(MemberRequest.Result);
if(Member.Exists) {
if(!Leaderboards_Authorized) {
OpenLink("https://www.maniaplanet.com/login/oauth2/authorize?response_type=code&client_id="^AuthClientId^"&scope="^AuthScopes^"&state="^State^"&redirect_uri="^AuthUri, ::LinkType::ManialinkBrowser);
return;
}
}
}
EnableMenuNavigation(True, True, Page.GetFirstChild("CANCEL"), 30);
Page.GetClassChildren("LOADING", Page.MainFrame, True);
+++ChangeZoneInit+++
declare Frame_Welcome = (Page.GetFirstChild("FRAME_WELCOME") as CMlFrame);
declare Frame_Menu = (Page.GetFirstChild("FRAME_MENU") as CMlFrame);
declare Frame_NobodyCares = (Page.GetFirstChild("FRAME_NOBODYCARES") as CMlFrame);
declare Frame_List = (Page.GetFirstChild("FRAME_LIST") as CMlFrame);
declare Frame_Titles = (Page.GetFirstChild("FRAME_TITLES") as CMlFrame);
declare Frame_SaveReplay = (Page.GetFirstChild("FRAME_SAVEREPLAY") as CMlFrame);
declare Frame_Tracker_Suggestion = (Page.GetFirstChild("FRAME_TRACKER_SUGGESTION") as CMlFrame);
declare Frame_Outer_List = (Page.GetFirstChild("FRAME_OUTER_LIST") as CMlFrame);
Frame_Outer_List.ScrollActive = True;
Frame_Outer_List.ScrollMax = <0.,0.>;
Frame_Outer_List.ScrollMin = <0.,0.>;
Frame_Outer_List.ScrollGridSnap = True;
Frame_Outer_List.ScrollGrid = <0.,10.>;
Frame_Outer_List.ScrollOffset = <0.,0.>;
declare Quad_List_Scrollbar = (Page.GetFirstChild("QUAD_LIST_SCROLLBAR") as CMlQuad);
declare Quad_List_Scrollable = (Page.GetFirstChild("QUAD_LIST_SCROLLABLE") as CMlQuad);
SelectedCampaign = -1;
SelectedMapGroup = -1;
SelectedMapInfo = -1;
SelectedRecord = -1;
declare persistent Text PERSISTENT_LEADERBOARDS_TRACKER_URL for LocalUser;
declare Entry_Tracker_Url = (Page.GetFirstChild("ENTRY_TRACKER_URL") as CMlEntry);
Entry_Tracker_Url.Value = PERSISTENT_LEADERBOARDS_TRACKER_URL;
declare persistent Text PERSISTENT_LEADERBOARDS_COPYFORMAT for LocalUser;
if(PERSISTENT_LEADERBOARDS_COPYFORMAT == "")
PERSISTENT_LEADERBOARDS_COPYFORMAT = "Balanced";
if(Leaderboards_Authorized) {
Page.GetFirstChild("FRAME_TRACKER_DISABLED").Hide();
Page.GetFirstChild("FRAME_TRACKER_ENABLED").Show();
declare TrackerUrl = GetTrackerUrl();
if(ReadyToRequestTracker(TrackerUrl)) {
RequestPing = Http.CreatePost(TrackerUrl ^ "/ping.php", Leaderboards_SecretKey);
}
}
LeaderboardType = "WR";
LeaderboardZone = "World";
Animate = True;
if(Animate) {
if(Leaderboards_Authorized) {
Frame_Welcome.RelativePosition_V3.X = -320.;
Frame_Menu.RelativePosition_V3.X = 0.;
AnimMgr.Add(Frame_Menu, "<frame pos=\"0 0\"/>", Now + 100, 1000, CAnimManager::EAnimManagerEasing::QuadOut);
}
else {
Frame_Menu.RelativePosition_V3.Y = 0.;
AnimMgr.Add(Frame_Welcome, "<frame pos=\"0 80\"/>", Now + 100, 1000, CAnimManager::EAnimManagerEasing::QuadOut);
}
AnimMgr.Add(Frame_NobodyCares, "<frame pos=\"0 -75\"/>", Now + 500, 500, CAnimManager::EAnimManagerEasing::QuadOut);
}
(Page.GetFirstChild("LABEL_LOGIN") as CMlLabel).Value = LocalUser.Login;
(Page.GetFirstChild("LABEL_NICKNAME") as CMlLabel).Value = LocalUser.Name;
(Page.GetFirstChild("LABEL_ZONE") as CMlLabel).Value = TextLib::Replace(LocalUser.ZonePath, "|", " | ");
State = String(8, 16);
declare Text PreviousTitle;
if(LoadedTitle != Null) {
PreviousTitle = LoadedTitle.TitleId;
PrepareThisTitle();
}
while(True) {
yield;
+++ChangeZoneLoopBeforeEvent+++
foreach(Event in PendingEvents) {
switch(Event.Type) {
case CMlScriptEvent::Type::MouseClick: {
switch(Event.ControlId) {
case "QUAD_SELECTOR": {
declare Offset = MathLib::NearestInteger(Frame_Outer_List.ScrollOffset.Y/10);
declare Index = TextLib::ToInteger(Event.Control.Parent.DataAttributeGet("index"))-IsInFolder+Offset;
declare Quad_Selector = (Event.Control as CMlQuad);
declare FirstQuadSelector = ((Frame_List.Controls[0] as CMlFrame).GetFirstChild("QUAD_SELECTOR") as CMlQuad);
if(Index == -1 || Items[Index].Selected) {
if(Index != -1)
Items[Index].Selected = False;
switch(TitleFolderLevel) {
case "Title": {
if(Index == 0 || Index == 1 || Index == 2) {
if(Index == 0) CampaignListType = "Leaderboards";
else if(Index == 1) CampaignListType = "MostWorldRecords";
else if(Index == 2) CampaignListType = "MostSkillpoints";
ChangeToCampaignLevel(SelectedTitle);
}
else if(Index == 3) {
if((Event.Control as CMlQuad).ModulateColor != <1.,.2,.2>) { // even more stupid solution
ChangeToHistoryLevel(SortTrackerTitles()[SelectedTitle]);
if(Quad_Selector.ModulateColor != <1.,.2,.2>) // stupid solution
HideTooltip();
}
}
FirstQuadSelector.StyleSelected = False;
}
case "Most world records": {
if(Index == -1) {
if(Quad_Selector.StyleSelected) ChangeToCampaignLevel(SelectedTitle);
}
else {
if(IsInHistory) {
}
else {
ChangeToMostWorldRecordsListLevel(Index);
}
}
}
case "Most world records list": {
if(Index == -1) {
if(Quad_Selector.StyleSelected) ChangeToMostWorldRecordsLevel(SelectedCampaign);
}
else {
if(Quad_Selector.StyleSelected) {
declare MapUid = Items[Index].MapUid;
if(MapUid != "") {
if(IsInHistory) {
}
else {
for(I, 0, DataFileMgr.Campaigns.count-1) {
declare Campaign = DataFileMgr.Campaigns[I];
for(J, 0, Campaign.MapGroups.count-1) {
declare MapGroup = Campaign.MapGroups[J];
for(K, 0, MapGroup.MapInfos.count-1) {
declare MapInfo = MapGroup.MapInfos[K];
if(MapInfo.MapUid == MapUid) {
SelectedCampaign = I;
SelectedMapGroup = J;
TaskRecordsAdditionalCompleted = False;
if(TaskRecordsAdditional != Null) {
ScoreMgr.TaskResult_Release(TaskRecordsAdditional.Id);
TaskRecordsAdditional = Null;
}
ChangeToOnlineRecordLevel(K);
}
}
}
}
}
}
}
}
}
case "Most skillpoints": {
if(Index == -1) {
if(Quad_Selector.StyleSelected) ChangeToCampaignLevel(SelectedTitle);
}
else {
if(IsInHistory) {
}
else if(TaskSkillpointsList.HasSucceeded) {
ChangeToMostSkillpointsListLevel(Index);
}
}
}
case "Most skillpoints list": {
if(Index == -1) {
if(Quad_Selector.StyleSelected) ChangeToMostSkillpointsLevel(SelectedCampaign);
}
else {
if(Quad_Selector.StyleSelected) {
declare MapUid = Items[Index].MapUid;
if(MapUid != "") {
if(IsInHistory) {
}
else {
for(I, 0, DataFileMgr.Campaigns.count-1) {
declare Campaign = DataFileMgr.Campaigns[I];
for(J, 0, Campaign.MapGroups.count-1) {
declare MapGroup = Campaign.MapGroups[J];
for(K, 0, MapGroup.MapInfos.count-1) {
declare MapInfo = MapGroup.MapInfos[K];
if(MapInfo.MapUid == MapUid) {
SelectedCampaign = I;
SelectedMapGroup = J;
TaskRecordsAdditionalCompleted = False;
if(TaskRecordsAdditional != Null) {
ScoreMgr.TaskResult_Release(TaskRecordsAdditional.Id);
TaskRecordsAdditional = Null;
}
ChangeToOnlineRecordLevel(K);
}
}
}
}
}
}
}
}
}
case "Campaign": {
if(Index == -1) {
if(Quad_Selector.StyleSelected) {
if(LoadedTitle != Null && SelectedTitle == 0) {
if(IsInHistory)
ChangeToHistoryLevel(SortTrackerTitles()[SelectedTitle]);
else
ChangeToTitleLevel(SortTrackerTitles()[SelectedTitle]);
}
else ChangeToHistoryLevel(SortTrackerTitles()[SelectedTitle]);
}
}
else {
if(IsInHistory) {
SelectedCampaign = Index;
if(IsCompareMode()) {
ChangeToMapGroupLevel(Index);
}
else {
Event.Control.Parent.GetFirstChild("QUAD_LOADING").Show(); // Doesnt appear
RequestTrackerCommand = "GetMaps";
}
}
else {
switch(CampaignListType) {
case "Leaderboards": { ChangeToMapGroupLevel(Index); }
case "MostWorldRecords": { ChangeToMostWorldRecordsLevel(Index); }
case "MostSkillpoints": { ChangeToMostSkillpointsLevel(Index); }
}
}
}
}
case "Map group": {
if(Index == -1) {
if(Quad_Selector.StyleSelected) ChangeToCampaignLevel(SelectedTitle);
}
else {
if(IsInHistory) {
SelectedMapGroup = Index;
if(IsCompareMode()) {
ChangeToMapInfoLevel(Index);
}
else {
Event.Control.Parent.GetFirstChild("QUAD_LOADING").Show(); // Doesnt appear
RequestTrackerCommand = "GetRecords";
}
}
else
ChangeToMapInfoLevel(Index);
}
}
case "Map info": {
if(Index == -1) {
if(Quad_Selector.StyleSelected) ChangeToMapGroupLevel(SelectedCampaign);
}
else
ChangeToOnlineRecordLevel(Index);
}
case "Online record": {
if(Index == -1) {
if(Quad_Selector.StyleSelected) ChangeToMapInfoLevel(SelectedMapGroup);
}
else
ChangeToCheckpointLevel(Index);
}
case "Checkpoint": {
if(Index == -1 && Quad_Selector.StyleSelected)
ChangeToOnlineRecordLevel(SelectedMapInfo);
}
case "History": {
if(Index == -1) {
if(Quad_Selector.StyleSelected) ChangeToTitleLevel(SortTrackerTitles()[SelectedTitle]);
}
else if(!IsCompareMode()) {
SelectedTimestamp = Index;
Event.Control.Parent.GetFirstChild("QUAD_LOADING").Show();
RequestTrackerCommand = "GetCampaigns";
}
}
case "Save replay": {
if(Index == -1) {
if(Quad_Selector.StyleSelected) {
declare ParentPath = ReplayList.ParentPath;
DataFileMgr.TaskResult_Release(ReplayList.Id);
ReplayList = DataFileMgr.Replay_GetGameList(ParentPath, False);
TitleFolderLevel = "Open save replay";
UpdateTitleFolder(True, True, True);
}
}
else {
if(Quad_Selector.StyleSelected) {
if(Index < ReplayList.SubFolders.count) {
declare Folder = ReplayList.SubFolders[Index];
DataFileMgr.TaskResult_Release(ReplayList.Id);
ReplayList = DataFileMgr.Replay_GetGameList(Folder, False);
TitleFolderLevel = "Open save replay";
UpdateTitleFolder(True, True, True);
}
else {
}
}
else {
if(Index >= ReplayList.SubFolders.count) {
declare NewIndex = Index - ReplayList.SubFolders.count;
declare Replay = ReplayList.ReplayInfos[NewIndex];
}
}
}
}
}
if(Index == -1) {
if(Quad_Selector.StyleSelected)
Quad_Selector.StyleSelected = False;
else
Quad_Selector.StyleSelected = True;
}
}
else {
if(IsCompareMode() && TitleFolderLevel == "History") {
for(I, 0, Items.count-1) {
if(Items[I].Selected) {
RequestTrackerCommand = "Compare";
RequestTrackerCompareTimestamp1 = Items[I].Timestamp;
RequestTrackerCompareTimestamp2 = Items[Index].Timestamp;
}
}
}
if(TitleFolderLevel == "Map info") ClearGhosts();
if(TitleFolderLevel == "Most skillpoints") {
TaskSkillpointsListDone = False;
if(TaskSkillpointsList != Null) {
ScoreMgr.TaskResult_Release(TaskSkillpointsList.Id);
TaskSkillpointsList = Null;
}
}
if(TitleFolderLevel == "Save replay" && Index != -1 && Index >= ReplayList.SubFolders.count) {
declare I = Index - ReplayList.SubFolders.count;
declare Replay <=> ReplayList.ReplayInfos[I];
(Page.GetFirstChild("ENTRY_REPLAY") as CMlEntry).SetText(Replay.Name, False);
}
else {
for(I, 0, Items.count-1)
Items[I].Selected = False;
Items[Index].Selected = True;
FirstQuadSelector.StyleSelected = False;
}
}
UpdateTitleFolder(False, False, Index != -1);
}
case "QUAD_LIST_SCROLLBAR": {
ListHoldScrollbar = True;
ListHoldScrollbarPos = MouseY-Event.Control.RelativePosition_V3.Y;
}
case "QUAD_LIST_SCROLLABLE": {
Quad_List_Scrollbar.RelativePosition_V3.Y += MouseY-Quad_List_Scrollbar.AbsolutePosition_V3.Y+Quad_List_Scrollbar.Size.Y/2;
ListHoldScrollbar = True;
ListHoldScrollbarPos = MouseY-Quad_List_Scrollbar.RelativePosition_V3.Y;
}
case "QUAD_BUTTON_VIEWCAMPAIGN": {
for(I, 0, Items.count-1) {
if(Items[I].Selected) {
ChangeToMapGroupLevel(I);
break;
}
}
}
case "QUAD_BUTTON_VIEWMAPS": {
for(I, 0, Items.count-1) {
if(Items[I].Selected) {
ChangeToMapInfoLevel(I);
break;
}
}
}
case "QUAD_BUTTON_VIEWLEADERBOARD": {
for(I, 0, Items.count-1) {
if(Items[I].Selected) {
ChangeToOnlineRecordLevel(I);
break;
}
}
}
case "QUAD_BUTTON_VIEWCHECKPOINTS": {
for(I, 0, Items.count-1) {
if(Items[I].Selected) {
ChangeToCheckpointLevel(I);
break;
}
}
}
case "QUAD_BUTTON_JOIN": {
OpenLink("https://www.maniaplanet.com/login/oauth2/authorize?response_type=code&client_id="^AuthClientId^"&scope="^AuthScopes^"&state="^State^"&redirect_uri="^AuthUri, ::LinkType::ManialinkBrowser);
}
case "QUAD_BUTTON_ANONYMOUS": {
AnimMgr.Add(Frame_Welcome, "<frame pos=\"-320 80\"/>", 1000, CAnimManager::EAnimManagerEasing::QuadOut);
AnimMgr.Add(Frame_Menu, "<frame pos=\"0 0\"/>", 1000, CAnimManager::EAnimManagerEasing::QuadOut);
}
case "LABEL_COMEBACK": {
AnimMgr.Add(Frame_Welcome, "<frame pos=\"0 80\"/>", 1000, CAnimManager::EAnimManagerEasing::QuadOut);
AnimMgr.Add(Frame_Menu, "<frame pos=\"320 0\"/>", 1000, CAnimManager::EAnimManagerEasing::QuadOut);
}
case "QUAD_BUTTON_SAVEREPLAY": {
declare I = -1;
if(TitleFolderLevel == "Checkpoint")
I = SelectedRecord;
else
for(J, 0, Items.count-1)
if(Items[J].Selected)
I = J;
if(I == -1) continue;
declare MapInfo = DataFileMgr.Campaigns[SelectedCampaign].MapGroups[SelectedMapGroup].MapInfos[SelectedMapInfo];
if(CurrentMap != Null && CurrentMap.MapInfo.MapUid == MapInfo.MapUid) {
/*declare TaskRecord = TaskRecords[DataFileMgr.Campaigns[SelectedCampaign].CampaignId][MapInfo.MapUid];
declare TaskGhost = TaskGhosts[I];
if(TaskGhost != Null && TaskGhost.HasSucceeded) {
SaveReplayFile = TaskRecord.LeaderBoardInfo[I].FileName;
SaveReplayGhost = TaskGhost.Ghost;
declare Frame_SaveReplay = (Page.GetFirstChild("FRAME_SAVEREPLAY") as CMlFrame);
(Frame_SaveReplay.GetFirstChild("LABEL_SAVEREPLAY_FILE") as CMlLabel).Value = SaveReplayFile;
Frame_SaveReplay.Show();
}*/
declare TaskGhost = TaskGhosts[I];
if(TaskGhost != Null && TaskGhost.HasSucceeded) {
SaveReplayOrigin = "Online record";
SaveReplayGhost = TaskGhost.Ghost;
Items.clear();
ReplayList = DataFileMgr.Replay_GetGameList("Replays", False);
TitleFolderLevel = "Open save replay";
UpdateTitleFolder(True, True, True);
declare CNaturalLeaderBoardInfo Line;
if(TaskRecords[DataFileMgr.Campaigns[SelectedCampaign].CampaignId][MapInfo.MapUid].LeaderBoardInfo.existskey(I))
Line <=> TaskRecords[DataFileMgr.Campaigns[SelectedCampaign].CampaignId][MapInfo.MapUid].LeaderBoardInfo[I];
else if(TaskRecordsAdditional.LeaderBoardInfo.existskey(I-10)) Line <=> TaskRecordsAdditional.LeaderBoardInfo[I-10];
declare ReplayFile = Line.FileName;
if(ReplayFile == "")
ReplayFile = MapInfo.Name ^ "_" ^ Line.Login ^ "_(" ^ TimeToTextWithMilli(Line.Score, True) ^ ")";
declare Folders = TextLib::Split("\\", ReplayFile);
ReplayFile = Folders[Folders.count-1];
if(TextLib::EndsWith(".replay.gbx", ReplayFile, True, False))
ReplayFile = TextLib::SubText(ReplayFile, 0, TextLib::Length(ReplayFile) - TextLib::Length(".replay.gbx"));
(Page.GetFirstChild("ENTRY_REPLAY") as CMlEntry).SetText(ReplayFile, False);
}
}
else { // TEST
}
}
case "QUAD_BUTTON_SAVEREPLAY_YES": {
if(SaveReplayTask == Null && CurrentMap != Null)
SaveReplayTask = DataFileMgr.Replay_Save(SaveReplayFile, CurrentMap, SaveReplayGhost);
}
case "QUAD_BUTTON_SAVEREPLAY_NO": {
Frame_SaveReplay.Hide();
}
case "QUAD_BUTTON_FINDMAP": {
if(CurrentMap != Null) {
if(IsInHistory) {
}
else {
for(I, 0, DataFileMgr.Campaigns.count-1) {
declare Campaign = DataFileMgr.Campaigns[I];
for(J, 0, Campaign.MapGroups.count-1) {
declare MapGroup = Campaign.MapGroups[J];
for(K, 0, MapGroup.MapInfos.count-1) {
declare MapInfo = MapGroup.MapInfos[K];
if(MapInfo.MapUid == CurrentMap.MapInfo.MapUid && (SelectedMapInfo != K || TitleFolderLevel != "Online record")) {
SelectedCampaign = I;
SelectedMapGroup = J;
TaskRecordsAdditionalCompleted = False;
if(TaskRecordsAdditional != Null) {
ScoreMgr.TaskResult_Release(TaskRecordsAdditional.Id);
TaskRecordsAdditional = Null;
}
ChangeToOnlineRecordLevel(K);
}
}
}
}
}
}
}
case "QUAD_BUTTON_COPY": {
if(IsInHistory && IsCompareMode()) continue; // for now
if(RequestMXTrack != Null) {
Http.Destroy(RequestMXTrack);
RequestMXTrack = Null;
}
TrackMXLink = "";
for(I, 0, Items.count-1) {
if(Items[I].Selected) {
declare J = 0;
if(TitleFolderLevel == "Map info")
J = I;
else if(TitleFolderLevel == "Online record")
J = SelectedMapInfo;
if(IsInHistory) {
declare MapInfo = TrackerHistoryMaps[SelectedMapGroup][J];
RequestMXTrack = Http.CreateGet("https://api.mania-exchange.com/tm/maps/"^MapInfo.map_uid, True);
}
else {
declare MapInfo = DataFileMgr.Campaigns[SelectedCampaign].MapGroups[SelectedMapGroup].MapInfos[J];
RequestMXTrack = Http.CreateGet("https://api.mania-exchange.com/tm/maps/"^MapInfo.MapUid, True);
}
break;
}
}
Page.GetFirstChild("QUAD_MX_LOADING").Show();
(Page.GetFirstChild("QUAD_BUTTON_MX") as CMlQuad).ModulateColor = ColorLib::HexToRgb("444");
(Page.GetFirstChild("FRAME_COPY") as CMlFrame).Show();
UpdateCopyWindow();
}
case "QUAD_BUTTON_COPY_EXIT": {
(Page.GetFirstChild("FRAME_COPY") as CMlFrame).Hide();
}
case "QUAD_BUTTON_COPYCLIPBOARD": {
System.ClipboardSet((Page.GetFirstChild("TEXTEDIT_COPY") as CMlTextEdit).Value);
(Page.GetFirstChild("FRAME_COPY") as CMlFrame).Hide();
}
case "LABEL_FORMAT_VERYSHORT": {
declare persistent Text PERSISTENT_LEADERBOARDS_COPYFORMAT for LocalUser;
PERSISTENT_LEADERBOARDS_COPYFORMAT = "Very short";
UpdateCopyWindow();
}
case "LABEL_FORMAT_SHORT": {
declare persistent Text PERSISTENT_LEADERBOARDS_COPYFORMAT for LocalUser;
PERSISTENT_LEADERBOARDS_COPYFORMAT = "Short";
UpdateCopyWindow();
}
case "LABEL_FORMAT_BALANCED": {
declare persistent Text PERSISTENT_LEADERBOARDS_COPYFORMAT for LocalUser;
PERSISTENT_LEADERBOARDS_COPYFORMAT = "Balanced";
UpdateCopyWindow();
}
case "LABEL_FORMAT_DETAILED": {
declare persistent Text PERSISTENT_LEADERBOARDS_COPYFORMAT for LocalUser;
PERSISTENT_LEADERBOARDS_COPYFORMAT = "Detailed";
UpdateCopyWindow();
}
case "LABEL_FORMAT_TMREPORT": {
declare persistent Text PERSISTENT_LEADERBOARDS_COPYFORMAT for LocalUser;
PERSISTENT_LEADERBOARDS_COPYFORMAT = "Trackmania Report";
UpdateCopyWindow();
}
case "LABEL_FORMAT_ENVIMIX": {
declare persistent Text PERSISTENT_LEADERBOARDS_COPYFORMAT for LocalUser;
PERSISTENT_LEADERBOARDS_COPYFORMAT = "Envimix";
UpdateCopyWindow();
}
case "QUAD_BUTTON_MX": {
if(TrackMXLink != "")
OpenLink(TrackMXLink, ::LinkType::ExternalBrowser);
}
case "QUAD_BUTTON_SECRETKEY": {
System.ClipboardSet(Leaderboards_SecretKey);
}
case "QUAD_SELECT": {
declare Index = TextLib::ToInteger(Event.Control.Parent.DataAttributeGet("index"));
SelectedTitle = Index;
if(LoadedTitle != Null && Index == 0)
ChangeToTitleLevel(SortTrackerTitles()[SelectedTitle]);
else
ChangeToHistoryLevel(SortTrackerTitles()[SelectedTitle]);
UpdateTitleSection();
}
case "QUAD_BUTTON_COMPARE": {
if(IsCompareMode())
(Page.GetFirstChild("QUAD_BUTTON_COMPARE") as CMlQuad).ModulateColor = ColorLib::HexToRgb("444");
else
(Page.GetFirstChild("QUAD_BUTTON_COMPARE") as CMlQuad).ModulateColor = ColorLib::HexToRgb("048");
}
case "QUAD_BUTTON_PLAYMAP": {
if((Page.GetFirstChild("QUAD_BUTTON_PLAYMAP") as CMlQuad).ModulateColor == ColorLib::HexToRgb("048")) {
if(TitleFolderLevel == "Map info") {
for(I, 0, Items.count-1) {
if(Items[I].Selected) {
declare MapInfo = DataFileMgr.Campaigns[SelectedCampaign].MapGroups[SelectedMapGroup].MapInfos[I];
OpenLink("#campaign="^MapInfo.Name^"@"^LoadedTitle.TitleId, ::LinkType::ManialinkBrowser);
// OpenLink("maniaplanet://#campaign=#"^(SelectedMapGroup+1)^","^(I+1)^"@"^LoadedTitle.TitleId, ::LinkType::ManialinkBrowser);
// doesnt work for multiple campaigns
break;
}
}
}
else {
declare MapInfo = DataFileMgr.Campaigns[SelectedCampaign].MapGroups[SelectedMapGroup].MapInfos[SelectedMapInfo];
OpenLink("#campaign="^MapInfo.Name^"@"^LoadedTitle.TitleId, ::LinkType::ManialinkBrowser);
//OpenLink("maniaplanet://#campaign=#"^(SelectedMapGroup+1)^","^(SelectedMapInfo+1)^"@"^LoadedTitle.TitleId, ::LinkType::ManialinkBrowser);
// doesnt work for multiple campaigns
}
}
}
case "QUAD_REPLAY_BACK": {
if(TitleFolderLevel == "Save replay") {
if(SaveReplayOrigin == "Online record")
ChangeToOnlineRecordLevel(SelectedMapInfo);
else if(SaveReplayOrigin == "Map info")
ChangeToMapInfoLevel(SelectedMapGroup);
}
}
case "QUAD_REPLAY_SAVE": {
if(TitleFolderLevel == "Save replay") {
if(SaveReplayTask == Null && CurrentMap != Null)
SaveReplayTask = DataFileMgr.Replay_Save(ReplayList.Path ^ (Page.GetFirstChild("ENTRY_REPLAY") as CMlEntry).Value, CurrentMap, SaveReplayGhost);
}
}
case "QUAD_BUTTON_WR_SAVEREPLAY": {
declare I = -1;
if(TitleFolderLevel == "Online record")
I = SelectedMapInfo;
else
for(J, 0, Items.count-1)
if(Items[J].Selected)
I = J;
if(I == -1) continue;
declare MapInfo = DataFileMgr.Campaigns[SelectedCampaign].MapGroups[SelectedMapGroup].MapInfos[I];
if(CurrentMap != Null && CurrentMap.MapInfo.MapUid == MapInfo.MapUid && TaskGhosts.count > 0) {
declare TaskGhost = TaskGhosts[0];
if(TaskGhost != Null && TaskGhost.HasSucceeded) {
SaveReplayOrigin = "Map info";
SaveReplayGhost = TaskGhost.Ghost;
Items.clear();
ReplayList = DataFileMgr.Replay_GetGameList("Replays", False);
TitleFolderLevel = "Open save replay";
UpdateTitleFolder(True, True, True);
declare Line <=> TaskRecords[DataFileMgr.Campaigns[SelectedCampaign].CampaignId][MapInfo.MapUid].LeaderBoardInfo[0];
declare ReplayFile = Line.FileName;
if(ReplayFile == "")
ReplayFile = MapInfo.Name ^ "_" ^ Line.Login ^ "_(" ^ TimeToTextWithMilli(Line.Score, True) ^ ")";
declare Folders = TextLib::Split("\\", ReplayFile);
ReplayFile = Folders[Folders.count-1];
if(TextLib::EndsWith(".replay.gbx", ReplayFile, True, False))
ReplayFile = TextLib::SubText(ReplayFile, 0, TextLib::Length(ReplayFile) - TextLib::Length(".replay.gbx"));
(Page.GetFirstChild("ENTRY_REPLAY") as CMlEntry).SetText(ReplayFile, False);
}
}
else {
}
}
case "LABEL_WORLDRECORD": {
declare MapUid = Event.Control.DataAttributeGet("mapuid");
if(MapUid != "") {
if(IsInHistory) {
}
else {
for(I, 0, DataFileMgr.Campaigns.count-1) {
declare Campaign = DataFileMgr.Campaigns[I];
for(J, 0, Campaign.MapGroups.count-1) {
declare MapGroup = Campaign.MapGroups[J];
for(K, 0, MapGroup.MapInfos.count-1) {
declare MapInfo = MapGroup.MapInfos[K];
if(MapInfo.MapUid == MapUid) {
SelectedCampaign = I;
SelectedMapGroup = J;
TaskRecordsAdditionalCompleted = False;
if(TaskRecordsAdditional != Null) {
ScoreMgr.TaskResult_Release(TaskRecordsAdditional.Id);
TaskRecordsAdditional = Null;
}
ChangeToOnlineRecordLevel(K);
}
}
}
}
}
}
}
case "LABEL_TYPE_WR": {
if(LeaderboardType != "WR") {
(Page.GetFirstChild("LABEL_TYPE_WR") as CMlLabel).TextColor = ColorLib::HexToRgb("3AF");
(Page.GetFirstChild("LABEL_TYPE_PB") as CMlLabel).TextColor = ColorLib::HexToRgb("FFF");
LeaderboardType = "WR";
ShowTooltip("World Record mode - leaderboards more adapted to world records");
UpdateTitleFolder(False, True);
}
}
case "LABEL_TYPE_PB": {
if(LeaderboardType != "PB") {
(Page.GetFirstChild("LABEL_TYPE_WR") as CMlLabel).TextColor = ColorLib::HexToRgb("FFF");
(Page.GetFirstChild("LABEL_TYPE_PB") as CMlLabel).TextColor = ColorLib::HexToRgb("3AF");
LeaderboardType = "PB";
ShowTooltip("Personal Best mode - leaderboards more adapted to your records");
UpdateTitleFolder(False, True);
}
}
case "QUAD_BUTTON_ZONE": {
AnimMgr.Add(Frame_Menu, "<frame pos=\"0 250\"/>", 1000, CAnimManager::EAnimManagerEasing::QuadOut);
AnimMgr.Add(Frame_NobodyCares, "<frame pos=\"0 -105\"/>", 1000, CAnimManager::EAnimManagerEasing::QuadOut);
Frame_ChangeZone.RelativeScale = 0.;
AnimMgr.Add(Frame_ChangeZone, "<frame scale=\"1\" hidden=\"0\"/>", 500, CAnimManager::EAnimManagerEasing::QuadOut);
Frame_ChangeZone.Show();
if(EntireZoneList.count == 0)
RequestZones = Http.CreateGet("https://maniaplanet.com/webservices/zones", True);
else {
declare Zone = LeaderboardZone;
declare Zones = TextLib::Split("|", Zone);
declare Text[] ZoneBuild;
for(I, 0, Zones.count - 1) {
ZoneBuild.add(Zones[I]);
if(!ExpandedZones.exists(TextLib::Join("|", ZoneBuild)))
ExpandedZones.add(TextLib::Join("|", ZoneBuild));
}
+++UpdateShownZones+++
SelectedZone = Zone;
Frame_ChangeZone_Scroll.DataAttributeSet("count", ShownZones.count^"");
Frame_ChangeZone_Scroll.ScrollMax.Y = MathLib::Max(0., (ShownZones.count - 12) * 10.);
+++UpdateChangeZoneScroll+++
foreach(I => Z in ShownZones) {
if(Z == Zone) {
UpdateAutoScroll = (I-5)*10.;
break;
}
}
}
}
case "QUAD_CHANGEZONE_CHANGE": {
AnimMgr.Add(Frame_ChangeZone, "<frame scale=\"0\" hidden=\"1\"/>", 500, CAnimManager::EAnimManagerEasing::QuadOut);
AnimMgr.Add(Frame_Menu, "<frame pos=\"0 0\"/>", 1000, CAnimManager::EAnimManagerEasing::QuadOut);
AnimMgr.Add(Frame_NobodyCares, "<frame pos=\"0 -75\"/>", 1000, CAnimManager::EAnimManagerEasing::QuadOut);
}
case "QUAD_CHANGEZONE_BACK": {
AnimMgr.Add(Frame_ChangeZone, "<frame scale=\"0\" hidden=\"1\"/>", 500, CAnimManager::EAnimManagerEasing::QuadOut);
AnimMgr.Add(Frame_Menu, "<frame pos=\"0 0\"/>", 1000, CAnimManager::EAnimManagerEasing::QuadOut);
AnimMgr.Add(Frame_NobodyCares, "<frame pos=\"0 -75\"/>", 1000, CAnimManager::EAnimManagerEasing::QuadOut);
}
case "QUAD_BUTTON_EXIT": {
////BrowserQuit();
}
case "CANCEL": {
Frame_Outer_List.ScrollOffset.Y = 0.;
if(Frame_ChangeZone.Visible && Frame_ChangeZone.RelativeScale == 1.) {
AnimMgr.Add(Frame_ChangeZone, "<frame scale=\"0\" hidden=\"1\"/>", 500, CAnimManager::EAnimManagerEasing::QuadOut);
AnimMgr.Add(Frame_Menu, "<frame pos=\"0 0\"/>", 1000, CAnimManager::EAnimManagerEasing::QuadOut);
AnimMgr.Add(Frame_NobodyCares, "<frame pos=\"0 -75\"/>", 1000, CAnimManager::EAnimManagerEasing::QuadOut);
}
else {
switch(TitleFolderLevel) {
case "Title": {
////BrowserQuit();
}
case "Campaign": {
if(LoadedTitle != Null && SelectedTitle == 0) {
if(IsInHistory)
ChangeToHistoryLevel(SortTrackerTitles()[SelectedTitle]);
else
ChangeToTitleLevel(SortTrackerTitles()[SelectedTitle]);
}
else ChangeToHistoryLevel(SortTrackerTitles()[SelectedTitle]);
}
case "Most world records": {
ChangeToCampaignLevel(SelectedTitle);
}
case "Most skillpoints": {
ChangeToCampaignLevel(SelectedTitle);
}
case "Most world records list": {
ChangeToMostWorldRecordsLevel(SelectedCampaign);
}
case "Most skillpoints list": {
ChangeToMostSkillpointsLevel(SelectedCampaign);
}
case "Map group": {
ChangeToCampaignLevel(SelectedTitle);
}
case "Map info": {
ChangeToMapGroupLevel(SelectedCampaign);
}
case "Online record": {
ChangeToMapInfoLevel(SelectedMapGroup);
}
case "Checkpoint": {
ChangeToOnlineRecordLevel(SelectedMapInfo);
}
case "History": {
ChangeToTitleLevel(SortTrackerTitles()[SelectedTitle]);
}
case "Save replay": {
declare ParentPath = ReplayList.ParentPath;
DataFileMgr.TaskResult_Release(ReplayList.Id);
ReplayList = DataFileMgr.Replay_GetGameList(ParentPath, False);
TitleFolderLevel = "Open save replay";
UpdateTitleFolder(True, True, True);
}
}
}
}
}
}
case CMlScriptEvent::Type::MouseOver: {
switch(Event.ControlId) {
case "QUAD_LIST_SCROLLBAR": {
if(!ListHoldScrollbar)
AnimMgr.Add(Event.Control, "<quad opacity=\"1\"/>", 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
case "QUAD_BUTTON_FINDMAP": {
if(CurrentMap != Null) {
foreach(Campaign in DataFileMgr.Campaigns) {
foreach(MapGroup in Campaign.MapGroups) {
foreach(MapInfo in MapGroup.MapInfos) {
if(MapInfo.MapUid == CurrentMap.MapInfo.MapUid) {
ShowTooltip(MapInfo.Name);
}
}
}
}
}
}
case "QUAD_BUTTON_PLAYMAP": {
if(TitleFolderLevel == "Map info") {
for(I, 0, Items.count-1) {
if(Items[I].Selected) {
declare MapInfo = DataFileMgr.Campaigns[SelectedCampaign].MapGroups[SelectedMapGroup].MapInfos[I];
if(!MapInfo.Unlocked) ShowTooltip(TextLib::Compose("%1 is not yet unlocked.", MapInfo.Name));
break;
}
}
}
else {
declare MapInfo = DataFileMgr.Campaigns[SelectedCampaign].MapGroups[SelectedMapGroup].MapInfos[SelectedMapInfo];
}
}
case "QUAD_BUTTON_SAVEREPLAY": {
declare Text MapName;
declare Text MapUid;
if(IsInHistory) {
if(IsCompareMode()) {
}
else {
declare MapInfo = TrackerHistoryMaps[SelectedMapGroup][SelectedMapInfo];
MapName = MapInfo.name;
MapUid = MapInfo.map_uid;
}
}
else {
declare MapInfo = DataFileMgr.Campaigns[SelectedCampaign].MapGroups[SelectedMapGroup].MapInfos[SelectedMapInfo];
MapName = MapInfo.Name;
MapUid = MapInfo.MapUid;
}
if(CurrentMap == Null || CurrentMap.MapInfo.MapUid != MapUid)
ShowTooltip("You have to visit "^MapName^"$z to save the replay.");
}
case "QUAD_BUTTON_VIEWCAMPAIGN": {
ShowTooltip("Alternatively, you can click on the selected campaign");
}
case "QUAD_BUTTON_VIEWMAPS": {
ShowTooltip("Alternatively, you can click on the selected map group");
}
case "QUAD_BUTTON_VIEWLEADERBOARD": {
ShowTooltip("Alternatively, you can click on the selected map");
}
case "QUAD_BUTTON_VIEWCHECKPOINTS": {
ShowTooltip("Alternatively, you can click on the selected record");
}
case "ENTRY_MAPUID": {
ShowTooltip("This map's UID");
}
case "QUAD_SELECT": {
if(Event.Control.Parent.Parent.ControlId == "FRAME_TITLES" && Event.Control.Parent.DataAttributeGet("index") == "0" && LoadedTitle != Null)
ShowTooltip("Currently loaded title");
}
case "QUAD_SELECTOR": {
if(TitleFolderLevel == "Title" && Event.Control.Parent.DataAttributeGet("index") == "3" && (Event.Control as CMlQuad).ModulateColor == <1.,.2,.2>)
ShowTooltip("Setup a leaderboard tracker to see the leaderboard history");
}
case "QUAD_BUTTON_GENERATEKEY": {
ShowTooltip("Currently you can't generate a new key. I'm working on it though^^");
}
case "LABEL_RECORDCOUNT": {
if(Event.Control.Parent.ControlId == "FRAME_PANEL_MAP") {
ShowTooltip(Event.Control.DataAttributeGet("tooltip"));
}
}
case "QUAD_BUTTON_COMPARE": {
ShowTooltip("Note: still has bugs");
}
case "LABEL_RECORD": {
if(Event.Control.DataAttributeGet("tooltip") != "")
ShowTooltip(Event.Control.DataAttributeGet("tooltip"));
}
case "QUAD_BUTTON_WR_SAVEREPLAY": {
declare MapName = "$aaa(unknown)";
declare Text MapUid;
if(IsInHistory) {
}
else {
if(TitleFolderLevel == "Map info") {
for(I, 0, Items.count-1) {
if(Items[I].Selected) {
declare MapInfo = DataFileMgr.Campaigns[SelectedCampaign].MapGroups[SelectedMapGroup].MapInfos[I];
MapName = MapInfo.Name;
MapUid = MapInfo.MapUid;
break;
}
}
}
else if(TitleFolderLevel == "Online record") {
declare MapInfo = DataFileMgr.Campaigns[SelectedCampaign].MapGroups[SelectedMapGroup].MapInfos[SelectedMapInfo];
MapName = MapInfo.Name;
MapUid = MapInfo.MapUid;
}
}
if(CurrentMap == Null || CurrentMap.MapInfo.MapUid != MapUid)
ShowTooltip("You have to visit "^MapName^"$z to save the replay.");
}
case "LABEL_WORLDRECORD": {
declare Index = TextLib::ToInteger(Event.Control.DataAttributeGet("index"));
if(TitleFolderLevel == "Most skillpoints") {
declare Timestamp = Event.Control.DataAttributeGet("timestamp");
ShowTooltip("Driven on $o" ^ TimeLib::FormatDate(Timestamp, TimeLib::EDateFormats::DateShort)^" "^TimeLib::FormatDate(Timestamp, TimeLib::EDateFormats::Time) ^ "$o and is $o" ^ TimeLib::FormatDelta(TimeLib::GetCurrent(), Timestamp, TimeLib::EDurationFormats::Full) ^ "$o old");
}
else if(TitleFolderLevel == "Most world records") {
declare Counter = 0;
foreach(MapUid => Task in SortedMostWorldRecords) {
if(Counter == Index) {
declare Count = RecordCount[DataFileMgr.Campaigns[SelectedCampaign].CampaignId][MapUid];
if(Count == 0 || Count == 1)
ShowTooltip("Beats $o0$o records and worths $0f0$o0$o$fff skillpoints");
else if(Count == 2)
ShowTooltip("Beats $o1$o record and worths $0f0$o100$o$fff skillpoints");
else
ShowTooltip("Beats $o" ^ (Count-1) ^ "$o records and worths $0f0$o" ^ MathLib::NearestInteger((Count-1)*100./1.) ^ "$o$fff skillpoints");
}
Counter += 1;
}
}
}
case "LABEL_TYPE_WR": {
if(LeaderboardType == "WR") {
ShowTooltip("World Record mode - leaderboards more adapted to world records");
}
else if(LeaderboardType == "PB") {
ShowTooltip("Switch to World Record leaderboard mode - more adapted to world records");
}
}
case "LABEL_TYPE_PB": {
if(LeaderboardType == "WR") {
ShowTooltip("Switch to Personal Best leaderboard mode - more adapted to your records");
}
else if(LeaderboardType == "PB") {
ShowTooltip("Personal Best mode - leaderboards more adapted to your records");
}
}
}
}
case CMlScriptEvent::Type::MouseOut: {
switch(Event.ControlId) {
case "QUAD_LIST_SCROLLBAR": {
if(!ListHoldScrollbar)
AnimMgr.Add(Event.Control, "<quad opacity=\"0.75\"/>", 200, CAnimManager::EAnimManagerEasing::QuadOut);
}
case "QUAD_BUTTON_SAVEREPLAY": {
HideTooltip();
}
case "QUAD_BUTTON_VIEWCAMPAIGN": {
HideTooltip();
}
case "QUAD_BUTTON_VIEWMAPS": {
HideTooltip();
}
case "QUAD_BUTTON_VIEWLEADERBOARD": {
HideTooltip();
}
case "QUAD_BUTTON_VIEWCHECKPOINTS": {
HideTooltip();
}
case "ENTRY_MAPUID": {
HideTooltip();
}
case "QUAD_SELECT": {
if(Event.Control.Parent.Parent.ControlId == "FRAME_TITLES" && Event.Control.Parent.DataAttributeGet("index") == "0")
HideTooltip();
}
case "QUAD_SELECTOR": {
if(TitleFolderLevel == "Title" && Event.Control.Parent.DataAttributeGet("index") == "3")
HideTooltip();
}
case "QUAD_BUTTON_GENERATEKEY": {
HideTooltip();
}
case "QUAD_BUTTON_FINDMAP": {
HideTooltip();
}
case "LABEL_RECORDCOUNT": {
HideTooltip();
}
case "QUAD_BUTTON_COMPARE": {
HideTooltip();
}
case "LABEL_RECORD": {
HideTooltip();
}
case "QUAD_BUTTON_PLAYMAP": {
HideTooltip();
}
case "QUAD_BUTTON_WR_SAVEREPLAY": {
HideTooltip();
}
case "LABEL_WORLDRECORD": {
HideTooltip();
}
case "LABEL_TYPE_WR": {
HideTooltip();
}
case "LABEL_TYPE_PB": {
HideTooltip();
}
}
}
case CMlScriptEvent::Type::EntrySubmit: {
switch(Event.ControlId) {
case "ENTRY_TRACKER_URL": {
declare Value = Entry_Tracker_Url.Value;
if(TextLib::Length(Value) > 128)
Value = TextLib::SubText(Value, 0, 128);
PERSISTENT_LEADERBOARDS_TRACKER_URL = Value;
declare TrackerUrl = GetTrackerUrl();
if(ReadyToRequestTracker(TrackerUrl)) {
if(RequestPing != Null) {
Http.Destroy(RequestPing);
RequestPing = Null;
}
RequestPing = Http.CreatePost(TrackerUrl ^ "/ping.php", Leaderboards_SecretKey);
Page.GetFirstChild("LABEL_TRACKER_URLWARNING").Hide();
Frame_Tracker_Suggestion.Hide();
}
else {
if(TrackerUrl == "") {
Page.GetFirstChild("LABEL_TRACKER_URLWARNING").Hide();
}
else {
Page.GetFirstChild("LABEL_TRACKER_URLWARNING").Show();
}
if(LoadedTitle == Null) {
Items.clear();
(Page.GetFirstChild("LABEL_TITLE") as CMlLabel).Value = "";
TitleFolderLevel = "History";
UpdateTitleFolder();
}
else {
SelectedTitle = 0;
ChangeToTitleLevel(LoadedTitle.TitleId);
}
Frame_Tracker_Suggestion.Show();
TrackerTitles.clear();
if(LoadedTitle != Null) TrackerTitles.add(LoadedTitle.TitleId);
UpdateTitleSection();
}
}
}
}
}
+++ChangeZoneEvent+++
}
+++ChangeZoneLoop+++
if(RequestTrackerCommand != "") {
switch (RequestTrackerCommand) {
case "GetCampaigns": {
declare TitleId = SortTrackerTitles()[SelectedTitle];
declare STrackerGetCampaignsAttributes Attributes;
Attributes.SecretKey = Leaderboards_SecretKey;
Attributes.TitleId = TitleId;
Attributes.Timestamp = TrackerTimestamps[TitleId][SelectedTimestamp];
declare Request = Http.CreatePost(GetTrackerUrl() ^ "/getcampaigns.php", Attributes.tojson());
wait(Request.IsCompleted);
if(Request.StatusCode == 200) {
declare Json = TrackerHistoryCampaigns.fromjson(Request.Result);
ChangeToCampaignLevel(SelectedTitle);
}
}
case "GetMaps": {
declare TitleId = SortTrackerTitles()[SelectedTitle];
declare STrackerGetMapsAttributes Attributes;
Attributes.SecretKey = Leaderboards_SecretKey;
Attributes.TitleId = TitleId;
Attributes.Timestamp = TrackerTimestamps[TitleId][SelectedTimestamp];
Attributes.Campaign = TrackerHistoryCampaigns[SelectedCampaign];
declare Request = Http.CreatePost(GetTrackerUrl() ^ "/getmaps.php", Attributes.tojson());
wait(Request.IsCompleted);
if(Request.StatusCode == 200) {
declare Json = TrackerHistoryMaps.fromjson(Request.Result);
ChangeToMapGroupLevel(SelectedCampaign);
}
}
case "GetRecords": {
declare TitleId = SortTrackerTitles()[SelectedTitle];
declare STrackerGetRecordsAttributes Attributes;
Attributes.SecretKey = Leaderboards_SecretKey;
Attributes.TitleId = TitleId;
Attributes.Timestamp = TrackerTimestamps[TitleId][SelectedTimestamp];
Attributes.Campaign = TrackerHistoryCampaigns[SelectedCampaign];
Attributes.MapGroup = SelectedMapGroup;
declare Request = Http.CreatePost(GetTrackerUrl() ^ "/getrecords.php", Attributes.tojson());
wait(Request.IsCompleted);
if(Request.StatusCode == 200) {
declare Json = TrackerHistoryRecords.fromjson(Request.Result);
ChangeToMapInfoLevel(SelectedMapGroup);
}
}
case "Compare": {
declare TitleId = SortTrackerTitles()[SelectedTitle];
declare STrackerCompareAttributes Attributes;
Attributes.SecretKey = Leaderboards_SecretKey;
Attributes.TitleId = TitleId;
Attributes.Timestamp1 = RequestTrackerCompareTimestamp1;
Attributes.Timestamp2 = RequestTrackerCompareTimestamp2;
declare Request = Http.CreatePost(GetTrackerUrl() ^ "/compare2.php", Attributes.tojson());
wait(Request.IsCompleted);
if(Request.StatusCode == 200) {
declare Json = TrackerCompareResult.fromjson(Request.Result);
ChangeToCampaignLevel(SelectedTitle);
}
else {
log("error");
}
}
default: {}
}
RequestTrackerCommand = "";
}
if(RequestMXTrack != Null && RequestMXTrack.IsCompleted) {
if(RequestMXTrack.StatusCode == 200) {
declare SMXTrack[] Track;
declare Json = Track.fromjson(RequestMXTrack.Result);
if(Track.count > 0) {
TrackMXLink = "https://tm.mania-exchange.com/s/tr/"^Track[0].TrackID;
(Page.GetFirstChild("QUAD_BUTTON_MX") as CMlQuad).ModulateColor = ColorLib::HexToRgb("048");
}
else
TrackMXLink = "";
}
else
TrackMXLink = "";
Page.GetFirstChild("QUAD_MX_LOADING").Hide();
UpdateCopyWindow();
Http.Destroy(RequestMXTrack);
RequestMXTrack = Null;
}
if(RequestSendTitle != Null && RequestSendTitle.IsCompleted) {
if(RequestSendTitle.StatusCode == 200) {
declare TrackerUrl = GetTrackerUrl();
if(ReadyToRequestTracker(TrackerUrl))
RequestGetTitles = Http.CreatePost(TrackerUrl ^ "/gettitles.php", Leaderboards_SecretKey);
}
Http.Destroy(RequestSendTitle);
RequestSendTitle = Null;
}
if(RequestGetTitles != Null && RequestGetTitles.IsCompleted) {
declare Json = TrackerTitles.fromjson(RequestGetTitles.Result);
declare TrackerUrl = GetTrackerUrl();
if(ReadyToRequestTracker(TrackerUrl))
RequestGetTimestamps = Http.CreatePost(TrackerUrl ^ "/gettimestamps.php", Leaderboards_SecretKey);
UpdateTitleSection();
Http.Destroy(RequestGetTitles);
RequestGetTitles = Null;
}
if(RequestGetTimestamps != Null) {
if(RequestGetTimestamps.IsCompleted) {
if(RequestGetTimestamps.StatusCode == 200) {
declare Json = TrackerTimestamps.fromjson(RequestGetTimestamps.Result);
if(LoadedTitle == Null) ChangeToHistoryLevel(SortTrackerTitles()[SelectedTitle]);
}
Http.Destroy(RequestGetTimestamps);
RequestGetTimestamps = Null;
}
}
foreach(Title in TrackerTitles) {
if(!OnlineTitleInfo.existskey(Title)) {
if(RequestOnlineTitleInfo.existskey(Title)) {
declare TitleRequest <=> RequestOnlineTitleInfo[Title];
if(TitleRequest.IsCompleted) {
if(TitleRequest.StatusCode == 200) {
declare STitleInfo Info;
declare Json = Info.fromjson(TitleRequest.Result);
OnlineTitleInfo[Title] = Info;
UpdateTitleSection();
}
Http.Destroy(TitleRequest);
RequestOnlineTitleInfo.removekey(Title);
}
}
else if(Http.SlotsAvailable > 0) {
RequestOnlineTitleInfo[Title] = Http.CreateGet("https://maniaplanet.com/webservices/titles/"^Title);
}
}
}
if(RequestPing != Null && RequestPing.IsCompleted) {
if(RequestPing.StatusCode == 200) {
Frame_Tracker_Suggestion.Hide();
declare TrackerUrl = GetTrackerUrl();
if(ReadyToRequestTracker(TrackerUrl)) {
if(RequestSendTitle != Null) {
Http.Destroy(RequestSendTitle);
RequestSendTitle = Null;
}
if(LoadedTitle == Null) {
RequestGetTitles = Http.CreatePost(TrackerUrl ^ "/gettitles.php", Leaderboards_SecretKey);
}
else {
declare STrackerTitle TTitle;
TTitle.Timestamp = CurrentTitleTimestamp;
TTitle.TitleId = LoadedTitle.TitleId;
TTitle.AuthorLogin = LoadedTitle.AuthorLogin;
TTitle.AuthorName = LoadedTitle.AuthorName;
TTitle.Name = LoadedTitle.Name;
TTitle.Desc = LoadedTitle.Desc;
TTitle.InfoUrl = LoadedTitle.InfoUrl;
TTitle.DownloadUrl = LoadedTitle.DownloadUrl;
TTitle.TitleVersion = LoadedTitle.TitleVersion;
TTitle.MakerTitleId = LoadedTitle.MakerTitleId;
TTitle.BaseTitleId = LoadedTitle.BaseTitleId;
TTitle.SecretKey = Leaderboards_SecretKey;
RequestSendTitle = Http.CreatePost(TrackerUrl ^ "/sendtitle.php", TTitle.tojson());
SendCampaignsToTracker();
if(CheckRecordLoadingCompletion() == TotalRequests)
SendRecordsToTracker();
}
Frame_Tracker_Suggestion.Hide();
Page.GetFirstChild("LABEL_TRACKER_URLWARNING").Hide();
}
else {
Frame_Tracker_Suggestion.Show();
Page.GetFirstChild("LABEL_TRACKER_URLWARNING").Show();
TrackerTitles.clear();
if(LoadedTitle != Null) {
TrackerTitles.add(LoadedTitle.TitleId);
SelectedTitle = 0;
ChangeToTitleLevel(LoadedTitle.TitleId);
}
UpdateTitleSection();
}
}
else {
Frame_Tracker_Suggestion.Show();
Page.GetFirstChild("LABEL_TRACKER_URLWARNING").Show();
TrackerTitles.clear();
if(LoadedTitle == Null) {
Items.clear();
(Page.GetFirstChild("LABEL_TITLE") as CMlLabel).Value = "";
TitleFolderLevel = "History";
UpdateTitleFolder();
}
else {
TrackerTitles.add(LoadedTitle.TitleId);
SelectedTitle = 0;
ChangeToTitleLevel(LoadedTitle.TitleId);
}
UpdateTitleSection();
}
Http.Destroy(RequestPing);
RequestPing = Null;
}
if(ListHoldScrollbar && MouseLeftButton) {
Quad_List_Scrollbar.RelativePosition_V3.Y = MathLib::Clamp(MouseY-ListHoldScrollbarPos,-Quad_List_Scrollable.Size.Y+Quad_List_Scrollbar.Size.Y,0.);
Frame_Outer_List.ScrollOffset.Y = MathLib::NearestInteger(((MouseY-ListHoldScrollbarPos)/(Quad_List_Scrollable.Size.Y-Quad_List_Scrollbar.Size.Y)*-Frame_Outer_List.ScrollMax.Y)/10.)*10.;
Quad_List_Scrollbar.Opacity = 1.;
UpdateTitleFolder();
}
else {
if(ListOldScroll != Frame_Outer_List.ScrollOffset) {
UpdateTitleFolder();
declare Difference = ListOldScroll - Frame_Outer_List.ScrollOffset;
Quad_List_Scrollbar.Opacity = 1.;
AnimMgr.Add(Quad_List_Scrollbar, "<quad opacity=\"0.75\"/>", 200, CAnimManager::EAnimManagerEasing::QuadOut);
ListOldScroll = Frame_Outer_List.ScrollOffset;
}
if(ListHoldScrollbar)
AnimMgr.Add(Quad_List_Scrollbar, "<quad opacity=\"0.75\"/>", 200, CAnimManager::EAnimManagerEasing::QuadOut);
ListHoldScrollbar = False;
}
foreach(Control in Page.GetClassChildren_Result) {
if(Control.Visible) Control.RelativeRotation += Period*.2;
}
if(StartRecordRequesting) {
declare CompletedCount = CheckRecordLoadingCompletion();
if(CompletedCount == TotalRequests) {
UpdateTitleFolder(False, True);
if(TitleFolderLevel == "Most world records")
ChangeToMostWorldRecordsLevel(SelectedCampaign);
else if(TitleFolderLevel == "Most world records list")
ChangeToMostWorldRecordsListLevel(SelectedMostWorldRecords);
(Frame_Titles.Controls[0] as CMlFrame).GetFirstChild("FRAME_LOADING").Hide();
if(Leaderboards_Authorized) {
declare TrackerUrl = GetTrackerUrl();
if(ReadyToRequestTracker(TrackerUrl)) {
if(Http.SlotsAvailable >= TaskRecords.count) {
SendRecordsToTracker();
StartRecordRequesting = False;
}
}
else {
if(TrackerUrl == "") {
Frame_Tracker_Suggestion.Show();
Page.GetFirstChild("LABEL_TRACKER_URLWARNING").Hide();
}
else {
Frame_Tracker_Suggestion.Show();
Page.GetFirstChild("LABEL_TRACKER_URLWARNING").Show();
}
TrackerTitles.clear();
TrackerTitles.add(LoadedTitle.TitleId);
UpdateTitleSection();
StartRecordRequesting = False;
}
}
else
StartRecordRequesting = False;
}
else {
(Frame_Titles.Controls[0] as CMlFrame).GetFirstChild("FRAME_LOADING").Show();
((Frame_Titles.Controls[0] as CMlFrame).GetFirstChild("GAUGE_LOADING") as CMlGauge).Ratio = MathLib::ToReal(CompletedCount)/TotalRequests;
((Frame_Titles.Controls[0] as CMlFrame).GetFirstChild("QUAD_LOADING_BLINK") as CMlQuad).Opacity = (MathLib::Sin(Now/100.)+1)/2.*.25;
}
declare SPCompletedCount = CheckSkillpointsLoadingCompletion();
}
if(TaskGhosts.count > 0) {
CheckGhostDownloadingCompletion();
}
if(TaskRecordsAdditional != Null) {
if(TaskRecordsAdditional.HasSucceeded && !TaskRecordsAdditionalCompleted) {
if(TitleFolderLevel == "Online record")
ChangeToOnlineRecordLevel(SelectedMapInfo, True);
TaskRecordsAdditionalCompleted = True;
}
}
if(TaskSkillpointsAdditional != Null) {
if(TaskSkillpointsAdditional.HasSucceeded && !TaskSkillpointsAdditionalCompleted) {
if(TitleFolderLevel == "Most skillpoints")
ChangeToMostSkillpointsLevel(SelectedCampaign, True);
TaskSkillpointsAdditionalCompleted = True;
}
}
if(TaskSkillpointsList != Null) {
if(TaskSkillpointsList.HasSucceeded && !TaskSkillpointsListDone) {
if(TitleFolderLevel == "Most skillpoints") {
for(I, 0, Items.count-1) {
if(Items[I].Selected) {
declare Label_Panel_Name = (Page.GetFirstChild("LABEL_PANEL_NAME") as CMlLabel);
declare Frame_Panel_MostWorldRecords = (Page.GetFirstChild("FRAME_PANEL_MOSTWORLDRECORDS") as CMlFrame);
declare Quad_Panel_Loading = (Page.GetFirstChild("QUAD_PANEL_LOADING") as CMlQuad);
declare _Animate = True;
+++UpdatePanelMostSkillpoints+++
break;
}
}
}
TaskSkillpointsListDone = True;
}
}
if(LoadedTitle != Null && LoadedTitle.TitleId != PreviousTitle)
PrepareThisTitle();
////IsOnCurrentMap = CheckCurrentMap(CurMap);
if(MouseMiddleButton != PreviousMouseRight) {
if(MouseMiddleButton) {
for(I, 0, Items.count-1)
Items[I].Selected = False;
UpdateTitleFolder();
}
PreviousMouseRight = MouseMiddleButton;
}
if(SaveReplayTask != Null) {
if(!SaveReplayTask.IsProcessing) {
Frame_SaveReplay.Hide();
if(SaveReplayTask.HasSucceeded) {
if(SaveReplayOrigin == "Online record")
ChangeToOnlineRecordLevel(SelectedMapInfo);
else if(SaveReplayOrigin == "Map info")
ChangeToMapInfoLevel(SelectedMapGroup);
}
DataFileMgr.TaskResult_Release(SaveReplayTask.Id);
SaveReplayTask = Null;
}
}
if(TitleFolderLevel == "Open save replay") {
if(ReplayList != Null) {
if(!ReplayList.IsProcessing) {
if(ReplayList.HasSucceeded) {
Items.clear();
foreach(Folder in ReplayList.SubFolders) {
declare Folders = TextLib::Split("\\", Folder);
declare SItem Item;
Item.Content = " " ^ Folders[Folders.count-1];
Item.Folder = Folder;
Items.add(Item);
}
foreach(Replay in ReplayList.ReplayInfos) {
declare SItem Item;
if(Replay.Name == "") {
Item.Content = "🎥 $aaa(unnamed)";
}
else {
Item.Content = "🎥 " ^ Replay.Name;
}
Item.MapUid = Replay.MapUid;
Items.add(Item);
}
TitleFolderLevel = "Save replay";
UpdateTitleFolder(True, True);
}
}
}
}
if(TitleFolderLevel == "History")
Page.GetFirstChild("FRAME_BUTTON_COMPARE").Show();
else
Page.GetFirstChild("FRAME_BUTTON_COMPARE").Hide();
if(IsInHistory && IsCompareMode() && TitleFolderLevel != "History")
Page.GetFirstChild("LABEL_COMPAREMODE").Show();
else
Page.GetFirstChild("LABEL_COMPAREMODE").Hide();
MoveTooltip();
Frame_Outer_List.ScrollOffset.Y = MathLib::NearestInteger(Frame_Outer_List.ScrollOffset.Y/10)*10.;
}
}
]]></script>
</manialink>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment