package Ġworld . greg s . void ps . world . interact . entity . player . com bat . magic Ċ Ċ import Ġworld . greg s . void ps . engine . client . message Ċ import Ġworld . greg s . void ps . engine . entity . character . contain . inventory Ċ import Ġworld . greg s . void ps . engine . entity . character . player . Player Ċ import Ġworld . greg s . void ps . engine . entity . character . player . skill . Level . has Ċ import Ġworld . greg s . void ps . engine . entity . character . player . skill . Skill Ċ import Ġworld . greg s . void ps . engine . entity . definition . Interface Definitions Ċ import Ġworld . greg s . void ps . engine . entity . definition . Item Definitions Ċ import Ġworld . greg s . void ps . engine . entity . definition . getComponent OrNull Ċ import Ġworld . greg s . void ps . engine . entity . item . Equip Slot Ċ import Ġworld . greg s . void ps . engine . entity . item . Item Ċ import Ġworld . greg s . void ps . engine . entity . item . equ ipped Ċ import Ġworld . greg s . void ps . engine . utility . inject Ċ import Ġworld . greg s . void ps . world . interact . entity . com bat . spell Book Ċ Ċ object ĠRun es Ġ{ ĊĠĠĠ Ġprivate Ġval Ġdefinitions : ĠInterface Definitions Ġby Ġinject () ĊĠĠĠ Ġprivate Ġval Ġitem Defs : ĠItem Definitions Ġby Ġinject () ĊĊĠĠĠ Ġfun Ġhas Spell Requirements ( player : ĠPlayer , Ġspell : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcomponent Ġ= Ġdefinitions . get ( player . spell Book ). getComponent OrNull ( spell ) Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġarray Ġ= Ġcomponent . an Object Array 4 7 5 8 Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġmagic Level Ġ= Ġarray [ 5 ] Ġas ĠInt ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! player . has ( Skill . Magic , Ġmagic Level , Ġmessage Ġ= Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġmutable ListOf < Item >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 8 .. 1 4 Ġstep Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġarray [ i ] Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġarray [ i Ġ+ Ġ 1 ] Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Ġ== Ġ- 1 Ġ|| Ġamount Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! has Run es ( player , Ġid , Ġamount , Ġitems )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . message (" You Ġdo Ġnot Ġhave Ġthe Ġrequired Ġitems Ġto Ġcast Ġthis Ġspell .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( rune Ġin Ġitems ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rune . name . endsWith ("_ staff ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstaff Ġ= Ġplayer . equ ipped ( Equip Slot . Weapon ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstaff . charge Ġ= Ġ( staff . charge Ġ- Ġrun e . amount ). coerce At Least ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . inventory . remove ( rune . name , Ġrun e . amount ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhas Run es ( player : ĠPlayer , Ġid : ĠInt , Ġamount : ĠInt , Ġitems : ĠMutable List < Item >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġitem Defs . getName ( id ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( has Infinite Run es Equ ipped ( player , Ġname , ĠE quip Slot . Weapon )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( has Infinite Run es Equ ipped ( player , Ġname , ĠE quip Slot . Shield )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( name . endsWith ("_ staff ") Ġ&& Ġplayer . equ ipped ( Equip Slot . Weapon ). name Ġ== Ġname ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġremaining Ġ= Ġamount ĊĠĠĠĠĠĠĠ Ġvar Ġfound Ġ= Ġplayer . inventory . getCount ( name ). toInt () ĊĠĠĠĠĠĠĠ Ġif Ġ( found Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( Item ( name , Ġremaining . coerce At Most ( found ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremaining Ġ-= Ġfound ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( remaining Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġhas Weapon Charge (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstaff Ġ= Ġplayer . equ ipped ( Equip Slot . Weapon ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( staff . charge Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( Item ( staff . name , Ġremaining . coerce At Most ( staff . charge ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining Ġ-= Ġstaff . charge ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( remaining Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( name Ġ== Ġ" nature _ rune " Ġ&& Ġplayer . equ ipped ( Equip Slot . Weapon ). name Ġ== Ġ" nature _ staff " Ġ&& Ġhas Weapon Charge ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( name Ġ== Ġ" law _ rune " Ġ&& Ġplayer . equ ipped ( Equip Slot . Weapon ). name Ġ== Ġ" law _ staff " Ġ&& Ġhas Weapon Charge ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcombinations Ġ= Ġitem Defs . get ( id ). get OrNull (" combin ation ") Ġas ? ĠArrayList < String > ĊĠĠĠĠĠĠĠ Ġif Ġ( combin ations Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( combin ation Ġin Ġcombinations ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfound Ġ= Ġplayer . inventory . getCount ( combin ation ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( found Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( Item ( name , Ġremaining . coerce At Most ( found ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining Ġ-= Ġfound ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( remaining Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġremaining Ġ<= Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhas Infinite Run es Equ ipped ( player : ĠPlayer , Ġname : ĠString , Ġslot : ĠE quip Slot ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrun es Ġ= Ġplayer . equ ipped ( slot ). def . get OrNull (" infinite ") Ġas ? ĠArrayList < String > ĊĠĠĠĠĠĠĠ Ġif Ġ( run es Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( rune Ġin Ġrun es ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name Ġ== Ġrun e ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} Ċ }