package Ġcom . gather ing hall stud ios . m hw or l dd atabase . features . workshop Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroidx . lifecycle . Android ViewModel Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġcom . gather ing hall stud ios . m hw or l dd atabase . AppSettings Ċ import Ġcom . gather ing hall stud ios . m hw or l dd atabase . R Ċ import Ġcom . gather ing hall stud ios . m hw or l dd atabase . data . App Database Ċ import Ġcom . gather ing hall stud ios . m hw or l dd atabase . data . M HW Database Ċ import Ġcom . gather ing hall stud ios . m hw or l dd atabase . data . models .* Ċ import Ġcom . gather ing hall stud ios . m hw or l dd atabase . data . types . DataType Ċ import Ġkotlinx . coroutines .* Ċ Ċ class ĠUser Equipment Set ViewModel ( application : ĠApplication ) Ġ: ĠAndroid ViewModel ( application ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġapp Dao Ġ= ĠApp Database . get AppData Base ( application ) !!. user Equipment Set Dao () ĊĠĠĠ Ġprivate Ġval Ġdecoration Dao Ġ= ĠM HW Database . get Database ( application ). decoration Dao () ĊĠĠĠ Ġprivate Ġval Ġchar m Dao Ġ= ĠM HW Database . get Database ( application ). charm Dao () ĊĠĠĠ Ġprivate Ġval Ġweapon Dao Ġ= ĠM HW Database . get Database ( application ). weapon Dao () ĊĠĠĠ Ġprivate Ġval Ġarm or Dao Ġ= ĠM HW Database . get Database ( application ). armor Dao () ĊĠĠĠ Ġprivate Ġval Ġtool Dao Ġ= ĠM HW Database . get Database ( application ). tool Dao () ĊĊĊĠĠĠ Ġprivate Ġvar Ġ_ active User Equipment Set Ġ= ĠMutable LiveData < User Equipment Set >() ĊĠĠĠ Ġprivate Ġvar Ġ_ user Equipment Sets Ġ= ĠMutable LiveData < Mutable List < User Equipment Set >>() ĊĊĊĠĠĠ Ġval Ġactive User Equipment Set : ĠLive Data < User Equipment Set > Ġ= Ġ_ active User Equipment Set ĊĠĠĠ Ġval Ġuser Equipment Sets : ĠLive Data < Mutable List < User Equipment Set >> Ġ= Ġ_ user Equipment Sets ĊĠĠĠ Ġvar Ġactive User Equipment : ĠUser Equipment ? Ġ= Ġnull Ġ// ĠThe Ġuser Equipment Ġmodel Ġbeing Ġedited Ġvia Ġarm or / weapon / charm / decoration Ġselector ĊĊĠĠĠ Ġ// Keep s Ġtrack Ġof Ġthe Ġstate Ġof Ġequipment Ġcards Ġon Ġthe Ġarm or Ġset Ġedit Ġfragment ĊĠĠĠ Ġprivate Ġvar Ġ_ armor Set Card States Ġ= Ġmutable Map Of ( 0 Ġto Ġfalse , Ġ 1 Ġto Ġfalse , Ġ 2 Ġto Ġfalse , Ġ 3 Ġto Ġfalse , Ġ 4 Ġto Ġfalse , Ġ 5 Ġto Ġfalse , Ġ 6 Ġto Ġfalse , Ġ 7 Ġto Ġfalse , Ġ 8 Ġto Ġfalse ) ĊĠĠĠ Ġval Ġarm or Set Card States : ĠMap < Int , ĠBoolean > Ġ= Ġ_ armor Set Card States ĊĊĠĠĠ Ġfun Ġupdate Card State ( card Index : ĠInt , Ġstate : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ armor Set Card States [ card Index ] Ġ= Ġstate ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset Card States () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ(( key , Ġ_) Ġin Ġ_ armor Set Card States ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ armor Set Card States [ key ] Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Active User Equipment Set ( id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġset Ġ= Ġasync Ġ{ Ġget Equipment Set ( id ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ active User Equipment Set . value Ġ= Ġset . await () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Decoration For Equipment ( decoration Id : ĠInt , Ġtarget Data Id : ĠInt , Ġtarget Slot Number : ĠInt , Ġtype : ĠDataType , Ġuser Equipment SetId : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdeferred Result Ġ= ĠGlobal Scope . async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Dao . delete User Equipment Decoration ( user Equipment SetId , Ġtarget Data Id , Ġtype , Ġdecoration Id , Ġtarget Slot Number ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġequipment Set Ids Ġ= Ġapp Dao . load User Equipment Set Ids ( user Equipment SetId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconvert Equipment SetId To Equipment Set ( equipment Set Ids ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ active User Equipment Set . value Ġ= Ġdeferred Result . await () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Equipment Set ( user Equipment SetId : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Dao . delete User Equipment Set ( user Equipment SetId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Dao . delete User Equipment Set Equipment ( user Equipment SetId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Dao . delete User Equipment Set Decor ations ( user Equipment SetId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrename Equipment Set ( name : ĠString , Ġuser Equipment SetId : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Dao . rename User Equipment Set ( name , Ġuser Equipment SetId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ active User Equipment Set . value Ġ= Ġget Equipment Set ( user Equipment SetId ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete User Equipment ( user Equipment Id : ĠInt , Ġuser Equipment SetId : ĠInt , Ġtype : ĠDataType ) Ġ{ ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Dao . delete User Equipment Equipment ( user Equipment Id , Ġtype , Ġuser Equipment SetId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Dao . delete User Equipment Decor ations ( user Equipment SetId , Ġuser Equipment Id , Ġtype ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ active User Equipment Set . value Ġ= Ġget Equipment Set ( user Equipment SetId ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠ ĠCreates Ġa Ġnew Ġequipment Ġset Ġand Ġsets Ġthat Ġas Ġthe Ġactive Ġequipment Ġset ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcreate Equipment Set (): ĠUser Equipment Set Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġset Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Id Ġ= Ġapp Dao . createUser Equipment Set ( getApplication < Application >(). resources . getString ( R . string . user _ equipment _ set _ new _ set )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconvert Equipment SetId To Equipment Set ( app Dao . load User Equipment Set Ids ( new Id . toInt ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ active User Equipment Set . value Ġ= Ġset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Equipment Set ( user Equipment Set : ĠUser Equipment Set ) Ġ{ ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Dao . delete User Equipment Set ( user Equipment Set . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Dao . delete User Equipment Set Equipment ( user Equipment Set . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Dao . delete User Equipment Set Decor ations ( user Equipment Set . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Equipment Sets () Ġ{ ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġequipment Set Ids Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Dao . load User Equipment Set Ids () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġequipment Sets Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeferred Ġ= Ġequipment Set Ids . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconvert Equipment SetId To Equipment Set ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeferred . map Ġ{ Ġit . await () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ user Equipment Sets . value Ġ= Ġequipment Sets . to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Equipment Set ( equipment SetId : ĠInt ): ĠUser Equipment Set Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġequipment Set Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġequipment Set Ids Ġ= Ġapp Dao . load User Equipment Set Ids ( equipment SetId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconvert Equipment SetId To Equipment Set ( equipment Set Ids ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġequipment Set ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconvert Equipment SetId To Equipment Set ( user Equipment Set Ids : ĠUser Equipment Set Ids ): ĠUser Equipment Set Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser Equipment Ġ= Ġmutable ListOf < User Equipment >() ĊĠĠĠĠĠĠĠ Ġuser Equipment Set Ids . equipment Ids . forEach Ġ{ Ġuser Equipment Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( user Equipment Id . dataType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDataType . ARM OR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdecor ations Ġ= Ġuser Equipment Id . decoration Ids . map Ġ{ Ġdecoration Ids Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Decoration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġequipment SetId Ġ= Ġuser Equipment Set Ids . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecoration Ġ= Ġdecoration Dao . load Decoration Sync ( AppSettings . data Locale , Ġdecoration Ids . decoration Id ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġslot Number Ġ= Ġdecoration Ids . slot Number ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. sorted With ( compare By ( User Decoration :: slot Number )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Equipment . add ( User Armor Piece ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġequipment SetId Ġ= Ġuser Equipment Set Ids . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarm or Ġ= Ġarm or Dao . load Armor Full Sync ( AppSettings . data Locale , Ġuser Equipment Id . data Id ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecor ations Ġ= Ġdecor ations )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDataType . WE AP ON Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdecor ations Ġ= Ġuser Equipment Id . decoration Ids . map Ġ{ Ġdecoration Ids Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Decoration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġequipment SetId Ġ= Ġuser Equipment Set Ids . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecoration Ġ= Ġdecoration Dao . load Decoration Sync ( AppSettings . data Locale , Ġdecoration Ids . decoration Id ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġslot Number Ġ= Ġdecoration Ids . slot Number ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Equipment . add ( User Weapon ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġequipment SetId Ġ= Ġuser Equipment Set Ids . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweapon Ġ= Ġweapon Dao . load Weapon Full Sync ( AppSettings . data Locale , Ġuser Equipment Id . data Id ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecor ations Ġ= Ġdecor ations )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDataType . CHAR M Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Equipment . add ( User Char m ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġequipment SetId Ġ= Ġuser Equipment Set Ids . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchar m Ġ= Ġchar m Dao . load Char m Full Sync ( AppSettings . data Locale , Ġuser Equipment Id . data Id ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDataType . TOOL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdecor ations Ġ= Ġuser Equipment Id . decoration Ids . map Ġ{ Ġdecoration Ids Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Decoration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġequipment SetId Ġ= Ġuser Equipment Set Ids . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecoration Ġ= Ġdecoration Dao . load Decoration Sync ( AppSettings . data Locale , Ġdecoration Ids . decoration Id ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġslot Number Ġ= Ġdecoration Ids . slot Number ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. sorted With ( compare By ( User Decoration :: slot Number )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Equipment . add ( User Tool ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġequipment SetId Ġ= Ġuser Equipment Set Ids . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtool Ġ= Ġtool Dao . load Tool Sync ( AppSettings . data Locale , Ġuser Equipment Id . data Id ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecor ations Ġ= Ġdecor ations , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠorderId Ġ= Ġuser Equipment Id . orderId )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ// Should n 't Ġhappen , Ġso Ġignore ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġset Ġ= ĠUser Equipment Set ( user Equipment Set Ids . id , Ġuser Equipment Set Ids . name , Ġuser Equipment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset . defense _ base Ġ= Ġcalculate Def ense Base ( user Equipment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset . defense _ max Ġ= Ġcalculate Def ense Max ( user Equipment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset . defense _ augment _ max Ġ= Ġcalculate Def ense Aug Max ( user Equipment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset . fire Def ense Ġ= Ġcalculate Fire Def ense ( user Equipment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset . water Def ense Ġ= Ġcalculate Water Def ense ( user Equipment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset . th under Def ense Ġ= Ġcalculate Th under Def ense ( user Equipment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset . ice Def ense Ġ= Ġcalculate Ice Def ense ( user Equipment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset . dragon Def ense Ġ= Ġcalculate Dragon Def ense ( user Equipment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset . set Bon uses Ġ= Ġcalculate Set Bon uses ( user Equipment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset . skills Ġ= Ġcalculate Skill Levels ( user Equipment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset . set Bon uses . map Ġ{ Ġit . value . map NotNull Ġ{ Ġitr Ġ-> Ġitr . skill Tree . unlock s _ id Ġ} Ġ}. flatten (). toSet ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset . max R arity Ġ= Ġcalculate Max R arity ( user Equipment ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ĊĠĠĠĠĠĠĠ Ġ} () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Max R arity ( user Equipment : ĠList < User Equipment >): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmax R arity Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġuser Equipment . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġr arity Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . type ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDataType . ARM OR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarm or Ġ= Ġit Ġas ĠUser Armor Piece ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr arity Ġ= Ġarm or . armor . armor . r arity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDataType . WE AP ON Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġweapon Ġ= Ġit Ġas ĠUser Weapon ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr arity Ġ= Ġweapon . weapon . weapon . r arity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDataType . CHAR M Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchar m Ġ= Ġit Ġas ĠUser Char m ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr arity Ġ= Ġchar m . charm . charm . r arity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax R arity Ġ= Ġif Ġ( r arity Ġ> Ġmax R arity ) Ġr arity Ġelse Ġmax R arity ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmax R arity ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Set Bon uses ( user Equipment : ĠList < User Equipment >): ĠMutable Map < String , ĠList < Armor Set Bonus >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġset Bon uses Ġ= Ġmutable Map Of < String , ĠMutable List < Armor Set Bonus >>() ĊĠĠĠĠĠĠĠ Ġval Ġset Bon uses Present Ġ= Ġmutable Map Of < String , ĠMutable List < Armor Set Bonus >>() ĊĠĠĠĠĠĠĠ Ġuser Equipment . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . type () Ġ== ĠDataType . ARM OR Ġ-> Ġ( it Ġas ĠUser Armor Piece ). armor . set Bon uses . forEach Ġ{ Ġset Bonus Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( set Bon uses Present [" ${ set Bonus . id }-${ set Bonus . required }" ]. isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Bon uses Present [" ${ set Bonus . id }-${ set Bonus . required } "] Ġ= Ġmutable ListOf ( set Bonus ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Bon uses Present [" ${ set Bonus . id }-${ set Bonus . required } "] ?. add ( set Bonus ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . type () Ġ== ĠDataType . WE AP ON Ġ-> Ġ( it Ġas ĠUser Weapon ). weapon . set Bonus . forEach Ġ{ Ġset Bonus Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( set Bon uses Present [" ${ set Bonus . id }-${ set Bonus . required }" ]. isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Bon uses Present [" ${ set Bonus . id }-${ set Bonus . required } "] Ġ= Ġmutable ListOf ( set Bonus ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Bon uses Present [" ${ set Bonus . id }-${ set Bonus . required } "] ?. add ( set Bonus ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Set ĠB onus Ġbreak points Ġare Ġat Ġ 2 - pieces , Ġ 3 - pieces , Ġand Ġ 4 - pieces ĊĠĠĠĠĠĠĠ Ġset Bon uses Present . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . value . size Ġ>= Ġit . value . first (). required ĊĠĠĠĠĠĠĠ Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( set Bon uses [ it . value . first (). name ]. isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Bon uses [ it . value . first (). name !! ] Ġ= Ġmutable ListOf ( it . value . first ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Bon uses [ it . value . first (). name !! ]?. add ( it . value . first ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġset Bon uses . map Values Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . value . toList () ĊĠĠĠĠĠĠĠ Ġ}. to Mutable Map () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Def ense Base ( user Equipment : ĠList < User Equipment >): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġuser Equipment . sum By Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . type () Ġ== ĠDataType . ARM OR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( item Ġas ĠUser Armor Piece ). armor . armor . defense _ base ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( item . type () Ġ== ĠDataType . WE AP ON ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( item Ġas ĠUser Weapon ). weapon . weapon . defense ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Def ense Max ( user Equipment : ĠList < User Equipment >): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġuser Equipment . sum By Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . type () Ġ== ĠDataType . ARM OR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( item Ġas ĠUser Armor Piece ). armor . armor . defense _ max ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( item . type () Ġ== ĠDataType . WE AP ON ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( item Ġas ĠUser Weapon ). weapon . weapon . defense ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Def ense Aug Max ( user Equipment : ĠList < User Equipment >): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġuser Equipment . sum By Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . type () Ġ== ĠDataType . ARM OR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( item Ġas ĠUser Armor Piece ). armor . armor . defense _ augment _ max ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( item . type () Ġ== ĠDataType . WE AP ON ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( item Ġas ĠUser Weapon ). weapon . weapon . defense ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Fire Def ense ( user Equipment : ĠList < User Equipment >): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġuser Equipment . sum By Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . type () Ġ== ĠDataType . ARM OR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( item Ġas ĠUser Armor Piece ). armor . armor . fire ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Water Def ense ( user Equipment : ĠList < User Equipment >): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġuser Equipment . sum By Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . type () Ġ== ĠDataType . ARM OR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( item Ġas ĠUser Armor Piece ). armor . armor . water ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Th under Def ense ( user Equipment : ĠList < User Equipment >): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġuser Equipment . sum By Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . type () Ġ== ĠDataType . ARM OR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( item Ġas ĠUser Armor Piece ). armor . armor . th under ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Ice Def ense ( user Equipment : ĠList < User Equipment >): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġuser Equipment . sum By Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . type () Ġ== ĠDataType . ARM OR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( item Ġas ĠUser Armor Piece ). armor . armor . ice ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Dragon Def ense ( user Equipment : ĠList < User Equipment >): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġuser Equipment . sum By Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . type () Ġ== ĠDataType . ARM OR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( item Ġas ĠUser Armor Piece ). armor . armor . dragon ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Skill Levels ( user Equipment : ĠList < User Equipment >, Ġun locked Skills From Set Bon uses : ĠSet < Int >): ĠList < Skill Level > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprovided Skills Ġ= Ġmutable ListOf < Skill Level >() ĊĠĠĠĠĠĠĠ Ġuser Equipment . forEach Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( item . type ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDataType . ARM OR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( item Ġas ĠUser Armor Piece ). decor ations . forEach Ġ{ Ġuser Decoration Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovided Skills . addAll ( user Decoration . decoration . get Skill Levels ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovided Skills . addAll ( item . armor . skills ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDataType . WE AP ON Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( item Ġas ĠUser Weapon ). decor ations . forEach Ġ{ Ġuser Decoration Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovided Skills . addAll ( user Decoration . decoration . get Skill Levels ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovided Skills . addAll ( item . weapon . skills ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDataType . CHAR M Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovided Skills . addAll (( item Ġas ĠUser Char m ). charm . skills ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDataType . TOOL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( item Ġas ĠUser Tool ). decor ations . forEach Ġ{ Ġuser Decoration Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovided Skills . addAll ( user Decoration . decoration . get Skill Levels ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġun locked Skills Ġ= Ġprovided Skills . filter Ġ{ Ġit . skill Tree . unlock s _ id Ġ!= Ġnull Ġ}. map Ġ{ Ġit . skill Tree . unlock s _ id Ġ}. to Mutable Set () ĊĠĠĠĠĠĠĠ Ġun locked Skills . addAll ( unlocked Skills From Set Bon uses ) ĊĠĠĠĠĠĠĠ Ġval Ġskill Levels Ġ= Ġmutable Map Of < Int , ĠSkill Level >() ĊĊĠĠĠĠĠĠĠ Ġprovided Skills . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( skill Levels . containsKey ( it . skill Tree . id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlevel : ĠInt ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Det ermine Ġwhether Ġthe Ġskill Ġhas Ġbeen Ġun locked , Ġand Ġset Ġthe Ġskill Ġlevel Ġappropriately ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . skill Tree . secret Ġ> Ġ 0 Ġ&& Ġun locked Skills . contains ( it . skill Tree . id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlevel Ġ= Ġadd Skill Levels ( skill Levels [ it . skill Tree . id ] !!. level , Ġit . level , Ġit . skill Tree . max _ level ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( it . skill Tree . secret Ġ> Ġ 0 Ġ&& Ġ! unlocked Skills . contains ( it . skill Tree . id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlevel Ġ= Ġadd Skill Levels ( skill Levels [ it . skill Tree . id ] !!. level , Ġit . level , Ġit . skill Tree . locked Max Level ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlevel Ġ= Ġadd Skill Levels ( skill Levels [ it . skill Tree . id ] !!. level , Ġit . level , Ġit . skill Tree . max _ level ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġskill Level Ġ= ĠSkill Level ( level ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġskill Level . skill Tree Ġ= Ġit . skill Tree ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġskill Levels [ it . skill Tree . id ] Ġ= Ġskill Level ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġskill Levels [ it . skill Tree . id ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġskill Levels . map Ġ{ Ġit . value Ġ}. to Mutable List () ĊĠĠĠĠĠĠĠ Ġlist . sort With ( compare By Descending < Skill Level > Ġ{ Ġit . level Ġ}. then By Ġ{ Ġit . skill Tree . id Ġ}) ĊĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Skill Levels ( a : ĠInt , Ġb : ĠInt , Ġmax : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( a Ġ+ Ġb Ġ> Ġmax ) Ġmax Ġelse Ġa Ġ+ Ġb ĊĠĠĠ Ġ} Ċ } Ċ