Last active
November 29, 2023 23:22
-
-
Save BigBang1112/5b0983e40cb406847a6f86861a05e92d to your computer and use it in GitHub Desktop.
Manialink for simple leaderboard data extraction
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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