/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 0 - 2 0 2 1 , ĠNull Non ame Ċ Ġ* ĠKotlin Ġconverted Ġand Ġmodified Ġby ĠV en om = N hel v Ċ Ġ* ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠRedistribution Ġand Ġuse Ġin Ġsource Ġand Ġbinary Ġforms , Ġwith Ġor Ġwithout Ċ Ġ* Ġmodification , Ġare Ġpermitted Ġprovided Ġthat Ġthe Ġfollowing Ġconditions Ġare Ġmet : Ċ Ġ* ĠĠĠĠ Ġ* ĠRedistributions Ġof Ġsource Ġcode Ġmust Ġretain Ġthe Ġabove Ġcopyright Ċ Ġ* ĠĠĠĠĠĠ Ġnotice , Ġthis Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer . Ċ Ġ* ĠĠĠĠ Ġ* ĠRedistributions Ġin Ġbinary Ġform Ġmust Ġreproduce Ġthe Ġabove Ġcopyright Ċ Ġ* ĠĠĠĠĠĠ Ġnotice , Ġthis Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer Ġin Ġthe Ċ Ġ* ĠĠĠĠĠĠ Ġdocumentation Ġand / or Ġother Ġmaterials Ġprovided Ġwith Ġthe Ġdistribution . Ċ Ġ* ĠĠĠĠ Ġ* ĠNeither Ġthe Ġname Ġof ĠNull Non ame Ġnor Ġthe Ġnames Ġof Ġits Ċ Ġ* ĠĠĠĠĠĠ Ġcontributors Ġmay Ġbe Ġused Ġto Ġendorse Ġor Ġpromote Ġproducts Ġderived Ġfrom Ċ Ġ* ĠĠĠĠĠĠ Ġthis Ġsoftware Ġwithout Ġspecific Ġprior Ġwritten Ġpermission . Ċ Ġ* Ċ Ġ* ĠTHIS ĠSOFTWARE ĠIS ĠPROVIDED ĠBY ĠTHE ĠCOPYRIGHT ĠHOLDERS ĠAND ĠCONTRIBUTORS Ġ" AS ĠIS " Ċ Ġ* ĠAND ĠANY ĠEXPRESS ĠOR ĠIMPLIED ĠWARRANTIES , ĠINCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠTHE Ċ Ġ* ĠIMPLIED ĠWARRANTIES ĠOF ĠMERCHANTABILITY ĠAND ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE Ċ Ġ* ĠARE ĠDISCLAIMED . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠCOPYRIGHT ĠOWNER ĠOR ĠCONTRIBUTORS ĠBE Ċ Ġ* ĠLIABLE ĠFOR ĠANY ĠDIRECT , ĠINDIRECT , ĠINCIDENTAL , ĠSPECIAL , ĠEXEMPLARY , ĠOR Ċ Ġ* ĠCONSEQUENTIAL ĠDAMAGES Ġ( INCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠPROCUREMENT ĠOF Ċ Ġ* ĠSUBSTITUTE ĠGOODS ĠOR ĠSERVICES ; ĠLOSS ĠOF ĠUSE , ĠDATA , ĠOR ĠPROFITS ; ĠOR ĠBUSINESS Ċ Ġ* ĠINTERRUPTION ) ĠHOWEVER ĠCAUSED ĠAND ĠON ĠANY ĠTHEORY ĠOF ĠLIABILITY , ĠWHETHER ĠIN Ċ Ġ* ĠCONTRACT , ĠSTRICT ĠLIABILITY , ĠOR ĠTORT Ġ( INCLUDING ĠNEGLIGENCE ĠOR ĠOTHERWISE ) Ċ Ġ* ĠARISING ĠIN ĠANY ĠWAY ĠOUT ĠOF ĠTHE ĠUSE ĠOF ĠTHIS ĠSOFTWARE , ĠEVEN ĠIF ĠADVISED ĠOF ĠTHE Ċ Ġ* ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ*/ Ċ Ċ package Ġmu . nu . null po . game . net Ċ Ċ import Ġmu . nu . null po . game . component . Statistics Ċ import Ġmu . nu . null po . util . Custom Properties Ċ import Ġjava . io . Serializable Ċ import Ġjava . util . Collections Ċ import Ġjava . util . LinkedList Ċ Ċ /** ĠSingle Ġplayer Ġmode Ġrecord Ġ*/ Ċ class ĠNet SP Record : Serializable Ġ{ ĊĊ ĉ /** ĠPlayer ĠName Ġ*/ Ċ ĉ var Ġstr Player Name Ġ= Ġ"" ĊĊ ĉ /** ĠGame ĠMode ĠName Ġ*/ Ċ ĉ var Ġstr Mode Name Ġ= Ġ"" ĊĊ ĉ /** ĠRule ĠName Ġ*/ Ċ ĉ var Ġstr Rule Name Ġ= Ġ"" ĊĊ ĉ /** ĠMain ĠStats Ġ*/ Ċ ĉ var Ġstats : Statistics ? Ġ= Ġnull ĊĊ ĉ /** ĠList Ġof Ġcustom Ġstats Ġ( Each ĠString Ġis ĠNAME ; VALUE Ġformat ) Ġ*/ Ċ ĉ var Ġlist Custom Stats : LinkedList < String > Ġ= ĠLinkedList () ĊĊ ĉ /** ĠRe play Ġdata Ġ( Compressed ) Ġ*/ Ċ ĉ var Ġstr Replay Prop Ġ= Ġ"" ĊĊ ĉ /** ĠTime Ġstamp Ġ( GMT ) Ġ*/ Ċ ĉ var Ġstr TimeStamp Ġ= Ġ"" ĊĊ ĉ /** ĠGame ĠType ĠID Ġ*/ Ċ ĉ var Ġgame Type Ġ= Ġ 0 ĊĊ ĉ /** ĠGame ĠStyle ĠID Ġ*/ Ċ ĉ var Ġstyle Ġ= Ġ 0 ĊĊ ĉ /** ĠRe play Ġdata Ġas ĠCustom Properties Ġthat Ġcontains Ġreplay Ġdata Ġ*/ Ċ ĉ var Ġreplay Prop : Custom Properties Ċĉ ĉ get () Ġ{ Ċĉĉ ĉ val Ġstr Encode Ġ= ĠNet Util . de compress String ( str Replay Prop ) Ċĉĉ ĉ val Ġp Ġ= ĠCustom Properties () Ċĉĉ ĉ p . decode ( str Encode ) Ċĉĉ ĉ return Ġp Ċĉ ĉ } Ċĉ ĉ set ( p ) Ġ{ Ċĉĉ ĉ val Ġstr Encode Ġ= Ġp . encode (" Null po Min o ĠNet ĠSingle ĠPlayer ĠRe play Ġ($ str Player Name )") Ċĉĉ ĉ str Replay Prop Ġ= ĠNet Util . compress String ( str Encode ) Ċĉ ĉ } ĊĊ ĉ /** ĠDefault ĠConstructor Ġ*/ Ċ ĉ constructor () Ġ{ Ċĉ ĉ reset () Ċ ĉ } ĊĊ ĉ /** ĠCopy ĠConstructor Ċĉ Ġ* Ġ@ param Ġs ĠSource Ċĉ Ġ*/ Ċ ĉ constructor ( s : Net SP Record ) Ġ{ Ċĉ ĉ copy ( s ) Ċ ĉ } ĊĊ ĉ /** ĠConstructor Ġthat Ġimports Ġdata Ġfrom Ġa ĠString ĠArray Ċĉ Ġ* Ġ@ param Ġs ĠString ĠArray Ġ( String [ 6 ]) Ċĉ Ġ*/ Ċ ĉ constructor ( s : Array < String >) Ġ{ Ċĉ ĉ import String Array ( s ) Ċ ĉ } ĊĊ ĉ /** ĠConstructor Ġthat Ġimports Ġdata Ġfrom Ġa ĠString Ċĉ Ġ* Ġ@ param Ġs ĠString Ġ( Split Ġby Ġ;) Ċĉ Ġ*/ Ċ ĉ constructor ( s : String ) Ġ{ Ċĉ ĉ import String ( s ) Ċ ĉ } ĊĊ ĉ /** ĠInitialization Ġ*/ Ċ ĉ fun Ġreset () Ġ{ Ċĉ ĉ str Player Name Ġ= Ġ"" Ċĉ ĉ str Mode Name Ġ= Ġ"" Ċĉ ĉ str Rule Name Ġ= Ġ"" Ċĉ ĉ stats Ġ= Ġnull Ċĉ ĉ list Custom Stats Ġ= ĠLinkedList () Ċĉ ĉ str Replay Prop Ġ= Ġ"" Ċĉ ĉ str TimeStamp Ġ= Ġ"" Ċĉ ĉ game Type Ġ= Ġ 0 Ċĉ ĉ style Ġ= Ġ 0 Ċ ĉ } ĊĊ ĉ /** ĠCopy Ġfrom Ġother ĠNet SP Record Ċĉ Ġ* Ġ@ param Ġs ĠSource Ċĉ Ġ*/ Ċ ĉ fun Ġcopy ( s : Net SP Record ) Ġ{ Ċĉ ĉ str Player Name Ġ= Ġs . str Player Name Ċĉ ĉ str Mode Name Ġ= Ġs . str Mode Name Ċĉ ĉ str Rule Name Ġ= Ġs . str Rule Name ĊĊĉ ĉ stats Ġ= ĠStatistics ( s . stats ) ĊĊĉ ĉ list Custom Stats Ġ= ĠLinkedList ( s . list Custom Stats ) ĊĊĉ ĉ str Replay Prop Ġ= Ġs . str Replay Prop Ċĉ ĉ str TimeStamp Ġ= Ġs . str TimeStamp Ċĉ ĉ game Type Ġ= Ġs . game Type Ċĉ ĉ style Ġ= Ġs . style Ċ ĉ } ĊĊ ĉ /** ĠExport Ġcustom Ġstats Ġto Ġa ĠString Ċĉ Ġ* Ġ@ return ĠString Ġ( Split Ġby Ġ, ) Ċĉ Ġ*/ Ċ ĉ fun Ġexport Custom Stats (): String Ġ{ Ċĉ ĉ if ( list Custom Stats . isNotEmpty ()) Ġ{ Ċĉĉ ĉ val Ġstr Result Ġ= ĠStringBuilder () Ċĉĉ ĉ for ( i Ġin Ġlist Custom Stats . indices ) Ġ{ Ċĉĉĉ ĉ if ( i > 0 ) Ġstr Result . append (",") Ċĉĉĉ ĉ str Result . append ( list Custom Stats [ i ]) Ċĉĉ ĉ } Ċĉĉ ĉ return Ġ"$ str Result " Ċĉ ĉ } Ċĉ ĉ return Ġ"" Ċ ĉ } ĊĊ ĉ /** ĠImport Ġcustom Ġstats Ġfrom Ġa ĠString Ċĉ Ġ* Ġ@ param Ġs ĠString Ġ( Split Ġby Ġ, ) Ċĉ Ġ*/ Ċ ĉ fun Ġimport Custom Stats ( s : String ?) Ġ{ Ċĉ ĉ list Custom Stats . clear () Ċĉ ĉ if ( s == null || s . isEmpty ()) Ġreturn ĊĊĉ ĉ val Ġarray Ġ= Ġs . split ("," . to Regex ()). drop Last While Ġ{ it . isEmpty ()}. to Typed Array () Ċĉ ĉ Collections . addAll ( list Custom Stats , Ġ* array ) Ċ ĉ } ĊĊ ĉ /** ĠExport Ġto Ġa ĠString ĠArray Ċĉ Ġ* Ġ@ return ĠString ĠArray Ġ( String [ 9 ]) Ċĉ Ġ*/ Ċ ĉ fun Ġexport String Array (): Array < String > Ġ= ĠarrayOf ( Ċĉ ĉ Net Util . url Encode ( str Player Name ), ĠNet Util . url Encode ( str Mode Name ), ĠNet Util . url Encode ( str Rule Name ), Ċĉ ĉ if ( stats == null ) Ġ"" Ġelse ĠNet Util . compress String ( stats !!. export String ()), Ċĉ ĉ if ( list Custom Stats . isEmpty ()) Ġ"" Ġelse ĠNet Util . compress String ( export Custom Stats ()), Ġstr Replay Prop , Ġ"$ game Type ", Ċĉ ĉ "$ style ", Ġstr TimeStamp ) ĊĊ ĉ /** ĠExport Ġto Ġa ĠString Ċĉ Ġ* Ġ@ return ĠString Ġ( Split Ġby Ġ;) Ċĉ Ġ*/ Ċ ĉ fun Ġexport String (): String Ġ{ Ċĉ ĉ val Ġarray Ġ= Ġexport String Array () Ċĉ ĉ val Ġresult Ġ= ĠStringBuilder () ĊĊĉ ĉ for ( i Ġin Ġarray . indices ) Ġ{ Ċĉĉ ĉ if ( i > 0 ) Ġresult . append ("; ") Ċĉĉ ĉ result . append ( array [ i ]) Ċĉ ĉ } ĊĊĉ ĉ return Ġ"$ result " Ċ ĉ } ĊĊ ĉ /** ĠImport Ġfrom Ġa ĠString ĠArray Ċĉ Ġ* Ġ@ param Ġs ĠString ĠArray Ġ( String [ 9 ]) Ċĉ Ġ*/ Ċ ĉ fun Ġimport String Array ( s : Array < String >) Ġ{ Ċĉ ĉ str Player Name Ġ= ĠNet Util . url Decode ( s [ 0 ]) Ċĉ ĉ str Mode Name Ġ= ĠNet Util . url Decode ( s [ 1 ]) Ċĉ ĉ str Rule Name Ġ= ĠNet Util . url Decode ( s [ 2 ]) Ċĉ ĉ stats Ġ= Ġif ( s [ 3 ]. isEmpty ()) Ġnull Ġelse ĠStatistics ( Net Util . de compress String ( s [ 3 ])) Ċĉ ĉ if ( s [ 4 ]. isEmpty ()) Ġlist Custom Stats Ġ= ĠLinkedList () Ċĉ ĉ else Ġimport Custom Stats ( Net Util . de compress String ( s [ 4 ])) Ċĉ ĉ str Replay Prop Ġ= Ġs [ 5 ] Ċĉ ĉ game Type Ġ= Ġs [ 6 ]. toInt () Ċĉ ĉ style Ġ= Ġs [ 7 ]. toInt () Ċĉ ĉ str TimeStamp Ġ= Ġif ( s . size > 8 ) Ġs [ 8 ] Ġelse Ġ"" Ċ ĉ } ĊĊ ĉ /** ĠImport Ġfrom Ġa ĠString Ċĉ Ġ* Ġ@ param Ġs ĠString Ġ( Split Ġby Ġ;) Ċĉ Ġ*/ Ċ ĉ fun Ġimport String ( s : String ) Ġ{ Ċĉ ĉ import String Array ( s . split ("; ". to Regex ()). drop Last While Ġ{ it . isEmpty ()}. to Typed Array ()) Ċ ĉ } ĊĊ ĉ /** ĠCompare Ġto Ġother ĠNet SP Record Ċĉ Ġ* Ġ@ param Ġtype ĠRank ing ĠType Ċĉ Ġ* Ġ@ param Ġr 2 ĠThe Ġother ĠNet SP Record Ċĉ Ġ* Ġ@ return Ġ` true ` Ġif Ġthis Ġthis Ġrecord Ġis Ġbetter Ġthan Ġr 2 Ċĉ Ġ*/ Ċ ĉ fun Ġcompare ( type : Int , Ġr 2 : Net SP Record ): Boolean Ġ= Ġcompare Records ( type , Ġthis , Ġr 2 ) ĊĊ ĉ /** ĠSet ĠString Ġvalue Ġof Ġspecific Ġcustom Ġstat Ċĉ Ġ* Ġ@ param Ġname ĠCustom Ġstat Ġname Ċĉ Ġ* Ġ@ param Ġvalue ĠValue Ċĉ Ġ*/ Ċ ĉ fun Ġset Custom Stat ( name : String , Ġvalue : String ) Ġ{ Ċĉ ĉ for ( i Ġin Ġlist Custom Stats . indices ) Ġ{ Ċĉĉ ĉ val Ġstr Temp Ġ= Ġlist Custom Stats [ i ] Ċĉĉ ĉ val Ġstr Array Ġ= Ġstr Temp . split ("; ". to Regex ()). drop Last While Ġ{ it . isEmpty ()}. to Typed Array () ĊĊĉĉ ĉ if ( str Array [ 0 ]== name ) Ġ{ Ċĉĉĉ ĉ list Custom Stats [ i ] Ġ= Ġ"$ name ;$ value " Ċĉĉĉ ĉ return Ċĉĉ ĉ } Ċĉ ĉ } Ċĉ ĉ list Custom Stats . add ("$ name ;$ value ") Ċ ĉ } ĊĊ ĉ /** ĠGet ĠString Ġvalue Ġof Ġspecific Ġcustom Ġstat Ċĉ Ġ* Ġ@ param Ġname ĠCustom Ġstat Ġname Ċĉ Ġ* Ġ@ return ĠValue Ġ( null Ġif Ġnot Ġfound ) Ċĉ Ġ*/ Ċ ĉ fun Ġget Custom Stat ( name : String ): String ? Ġ{ Ċĉ ĉ for ( str Temp Ġin Ġlist Custom Stats ) Ġ{ Ċĉĉ ĉ val Ġstr Array Ġ= Ġstr Temp . split ("; ". to Regex ()). drop Last While Ġ{ it . isEmpty ()}. to Typed Array () ĊĊĉĉ ĉ if ( str Array [ 0 ]== name ) Ġreturn Ġstr Array [ 1 ] Ċĉ ĉ } Ċĉ ĉ return Ġnull Ċ ĉ } ĊĊ ĉ /** ĠGet ĠString Ġvalue Ġof Ġspecific Ġcustom Ġstat Ċĉ Ġ* Ġ@ param Ġname ĠCustom Ġstat Ġname Ċĉ Ġ* Ġ@ param Ġstr Default ĠDefault Ġvalue Ġ( used Ġwhen Ġthe Ġname Ġis Ġnot Ġfound ) Ċĉ Ġ* Ġ@ return ĠValue Ġ( str Default Ġif Ġnot Ġfound ) Ċĉ Ġ*/ Ċ ĉ fun Ġget Custom Stat ( name : String , Ġstr Default : String ): String Ġ{ Ċĉ ĉ val Ġstr Result Ġ= Ġget Custom Stat ( name ) Ċĉ ĉ return Ġstr Result Ġ?: Ġstr Default Ċ ĉ } ĊĊ ĉ /** ĠGet Ġa Ġshort ĠString Ġof Ġstats Ġof Ġthe Ġrecord Ġ( used Ġby ĠNet Server ) Ċĉ Ġ* Ġ@ param Ġtype ĠRank ing ĠType Ċĉ Ġ* Ġ@ return ĠShort ĠString Ġof Ġstats Ġof Ġthe Ġrecord Ċĉ Ġ*/ Ċ ĉ fun Ġget Stat Row ( type : Int ): String Ġ{ Ċĉ ĉ var Ġstr Row Ġ= Ġ"" Ċĉ ĉ stats ?. also Ġ{ Ċĉĉ ĉ if ( type != RAN K ING TYPE _ GENERIC _ SCORE ) Ġ{ Ċĉĉĉ ĉ when ( type ) Ġ{ Ċĉĉĉĉ ĉ RAN K ING TYPE _ GENERIC _ TIME Ġ-> Ġ{ Ċĉĉĉĉĉ ĉ str Row Ġ+= Ġ"${ it . time }, ${ it . total Piece Locked }, ${ it . pp s }" Ċĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ RAN K ING TYPE _ SC OR ER ACE Ġ-> Ġ{ Ċĉĉĉĉĉ ĉ str Row Ġ+= Ġ"${ it . time }, ${ it . lines }, ${ it . spl }" Ċĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ RAN K ING TYPE _ DIG R ACE Ġ-> Ġ{ Ċĉĉĉĉĉ ĉ str Row Ġ+= Ġ"${ it . time }, ${ it . lines }, ${ it . total Piece Locked }" Ċĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ RAN K ING TYPE _ UL TRA Ġ-> Ġ{ Ċĉĉĉĉĉ ĉ str Row Ġ+= Ġ"${ it . score }, ${ it . lines }, ${ it . total Piece Locked }" Ċĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ RAN K ING TYPE _ COMB OR ACE Ġ-> Ġ{ Ċĉĉĉĉĉ ĉ str Row Ġ+= Ġ"${ it . max Combo }, ${ it . time }, ${ it . pp s }" Ċĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ RAN K ING TYPE _ DIG CH ALL EN GE Ġ-> Ġ{ Ċĉĉĉĉĉ ĉ str Row Ġ+= Ġ"${ it . score }, ${ it . lines }, ${ it . time }" Ċĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ RAN K ING TYPE _ TIME ATT ACK Ġ-> Ġ{ Ċĉĉĉĉĉ ĉ str Row Ġ+= Ġ"${ it . lines }, ${ it . time }, ${ it . pp s }, ${ it . roll clear }" Ċĉĉĉĉ ĉ } Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉ ĉ str Row Ġ+= Ġ"${ it . score }, ${ it . lines }, ${ it . time }" Ċĉĉ ĉ } Ċĉ ĉ } Ċĉ ĉ return Ġstr Row Ċ ĉ } ĊĊ ĉ comp anion Ġobject Ġ{ Ċĉ ĉ /** ĠserialVersionUID Ġfor ĠSerialize Ġ*/ Ċĉ ĉ private Ġconst Ġval ĠserialVersionUID Ġ= Ġ 1 L ĊĊĉ ĉ /** ĠRank ing Ġtype Ġconstants Ġ*/ Ċĉ ĉ const Ġval ĠR ANK ING TYPE _ GENERIC _ SCORE Ġ= Ġ 0 Ċĉ ĉ const Ġval ĠR ANK ING TYPE _ GENERIC _ TIME Ġ= Ġ 1 Ċĉ ĉ const Ġval ĠR ANK ING TYPE _ SC OR ER ACE Ġ= Ġ 2 Ċĉ ĉ const Ġval ĠR ANK ING TYPE _ DIG R ACE Ġ= Ġ 3 Ċĉ ĉ const Ġval ĠR ANK ING TYPE _ UL TRA Ġ= Ġ 4 Ċĉ ĉ const Ġval ĠR ANK ING TYPE _ COMB OR ACE Ġ= Ġ 5 Ċĉ ĉ const Ġval ĠR ANK ING TYPE _ DIG CH ALL EN GE Ġ= Ġ 6 Ċĉ ĉ const Ġval ĠR ANK ING TYPE _ TIME ATT ACK Ġ= Ġ 7 ĊĊĉ ĉ /** ĠCompare Ġ 2 Ġrecords Ċĉĉ Ġ* Ġ@ param Ġtype ĠRank ing ĠType Ċĉĉ Ġ* Ġ@ param Ġr 1 ĠRecord Ġ 1 Ċĉĉ Ġ* Ġ@ param Ġr 2 ĠRecord Ġ 2 Ċĉĉ Ġ* Ġ@ return Ġ` true ` Ġif Ġr 1 Ġis Ġbetter Ġthan Ġr 2 Ċĉĉ Ġ*/ Ċĉ ĉ fun Ġcompare Records ( type : Int , Ġr 1 : Net SP Record , Ġr 2 : Net SP Record ): Boolean Ġ{ Ċĉĉ ĉ val Ġs 1 Ġ= Ġr 1 . stats Ċĉĉ ĉ val Ġs 2 Ġ= Ġr 2 . stats ĊĊĉĉ ĉ when ( type ) Ġ{ Ċĉĉĉ ĉ RAN K ING TYPE _ GENERIC _ SCORE Ġ-> Ġ{ Ċĉĉĉĉ ĉ return Ġif ( s 1 !!. score > s 2 !!. score ) Ċĉĉĉĉĉ ĉ true Ċĉĉĉĉ ĉ else Ġif ( s 1 . score == s 2 . score && s 1 . lines > s 2 . lines ) Ċĉĉĉĉĉ ĉ true Ċĉĉĉĉ ĉ else Ċĉĉĉĉĉ ĉ s 1 . score == s 2 . score && s 1 . lines == s 2 . lines && s 1 . time < s 2 . time Ċĉĉĉ ĉ } Ċĉĉĉ ĉ RAN K ING TYPE _ GENERIC _ TIME Ġ-> Ġ{ Ċĉĉĉĉ ĉ return Ġif ( s 1 !!. time < s 2 !!. time ) Ċĉĉĉĉĉ ĉ true Ċĉĉĉĉ ĉ else Ġif ( s 1 . time == s 2 . time && s 1 . total Piece Locked < s 2 . total Piece Locked ) Ċĉĉĉĉĉ ĉ true Ċĉĉĉĉ ĉ else Ċĉĉĉĉĉ ĉ s 1 . time == s 2 . time && s 1 . total Piece Locked == s 2 . total Piece Locked && s 1 . pp s > s 2 . pp s Ċĉĉĉ ĉ } Ċĉĉĉ ĉ RAN K ING TYPE _ SC OR ER ACE Ġ-> Ġ{ Ċĉĉĉĉ ĉ return Ġif ( s 1 !!. time < s 2 !!. time ) Ċĉĉĉĉĉ ĉ true Ċĉĉĉĉ ĉ else Ġif ( s 1 . time == s 2 . time && s 1 . lines < s 2 . lines ) Ċĉĉĉĉĉ ĉ true Ċĉĉĉĉ ĉ else Ċĉĉĉĉĉ ĉ s 1 . time == s 2 . time && s 1 . lines == s 2 . lines && s 1 . spl > s 2 . spl Ċĉĉĉ ĉ } Ċĉĉĉ ĉ RAN K ING TYPE _ DIG R ACE Ġ-> Ġ{ Ċĉĉĉĉ ĉ return Ġif ( s 1 !!. time < s 2 !!. time ) Ċĉĉĉĉĉ ĉ true Ċĉĉĉĉ ĉ else Ġif ( s 1 . time == s 2 . time && s 1 . lines < s 2 . lines ) Ċĉĉĉĉĉ ĉ true Ċĉĉĉĉ ĉ else Ċĉĉĉĉĉ ĉ s 1 . time == s 2 . time && s 1 . lines == s 2 . lines && s 1 . total Piece Locked < s 2 . total Piece Locked Ċĉĉĉ ĉ } Ċĉĉĉ ĉ RAN K ING TYPE _ UL TRA Ġ-> Ġ{ Ċĉĉĉĉ ĉ return Ġif ( s 1 !!. score > s 2 !!. score ) Ċĉĉĉĉĉ ĉ true Ċĉĉĉĉ ĉ else Ġif ( s 1 . score == s 2 . score && s 1 . lines > s 2 . lines ) Ċĉĉĉĉĉ ĉ true Ċĉĉĉĉ ĉ else Ċĉĉĉĉĉ ĉ s 1 . score == s 2 . score && s 1 . lines == s 2 . lines && s 1 . total Piece Locked < s 2 . total Piece Locked Ċĉĉĉ ĉ } Ċĉĉĉ ĉ RAN K ING TYPE _ COMB OR ACE Ġ-> Ġ{ Ċĉĉĉĉ ĉ return Ġif ( s 1 !!. max Combo > s 2 !!. max Combo ) Ċĉĉĉĉĉ ĉ true Ċĉĉĉĉ ĉ else Ġif ( s 1 . max Combo == s 2 . max Combo && s 1 . time < s 2 . time ) Ċĉĉĉĉĉ ĉ true Ċĉĉĉĉ ĉ else Ċĉĉĉĉĉ ĉ s 1 . max Combo == s 2 . max Combo && s 1 . time == s 2 . time && s 1 . pp s > s 2 . pp s Ċĉĉĉ ĉ } Ċĉĉĉ ĉ RAN K ING TYPE _ DIG CH ALL EN GE Ġ-> Ġ{ Ċĉĉĉĉ ĉ return Ġif ( s 1 !!. score > s 2 !!. score ) Ċĉĉĉĉĉ ĉ true Ċĉĉĉĉ ĉ else Ġif ( s 1 . score == s 2 . score && s 1 . lines > s 2 . lines ) Ċĉĉĉĉĉ ĉ true Ċĉĉĉĉ ĉ else Ċĉĉĉĉĉ ĉ s 1 . score == s 2 . score && s 1 . lines == s 2 . lines && s 1 . time > s 2 . time Ċĉĉĉ ĉ } Ċĉĉĉ ĉ RAN K ING TYPE _ TIME ATT ACK Ġ-> Ġ{ Ċĉĉĉĉ ĉ // ĠCap Ġthe Ġline Ġcount Ġat Ġ 1 5 0 Ġor Ġ 2 0 0 Ċĉĉĉĉ ĉ val Ġmax Lines Ġ= Ġif ( r 1 . game Type >= 5 ) Ġ 2 0 0 Ġelse Ġ 1 5 0 Ċĉĉĉĉ ĉ val Ġl 1 Ġ= Ġmin Of ( s 1 !!. lines , Ġmax Lines ) Ċĉĉĉĉ ĉ val Ġl 2 Ġ= Ġmin Of ( s 2 !!. lines , Ġmax Lines ) ĊĊĉĉĉĉ ĉ return Ġif ( s 1 . roll clear > s 2 . roll clear ) Ċĉĉĉĉĉ ĉ true Ċĉĉĉĉ ĉ else Ġif ( s 1 . roll clear == s 2 . roll clear && l 1 > l 2 ) Ċĉĉĉĉĉ ĉ true Ċĉĉĉĉ ĉ else Ġif ( s 1 . roll clear == s 2 . roll clear && l 1 == l 2 && s 1 . time < s 2 . time ) Ċĉĉĉĉĉ ĉ true Ċĉĉĉĉ ĉ else Ċĉĉĉĉĉ ĉ s 1 . roll clear == s 2 . roll clear && l 1 == l 2 && s 1 . time == s 2 . time && s 1 . pp s > s 2 . pp s Ċĉĉĉ ĉ } Ċĉĉĉ ĉ else Ġ-> Ġreturn Ġfalse Ċĉĉ ĉ } ĊĊĉ ĉ } Ċ ĉ } Ċ } Ċ