package Ġworld . greg s . void ps . engine . entity . item . drop Ċ Ċ import Ġkotlin . random . Random Ċ Ċ /** Ċ Ġ* ĠDist ribut es Ġa Ġcollection Ġof Ġitems Ġto Ġa ward Ġfor Ġa Ġmonster Ġkill . Ċ Ġ* Ġ[ Item Drop ]' s Ġare Ġselected Ġbased Ġon Ġa Ġsingle Ġ[ random ] Ġroll Ġbetween Ġ 0 Ġand Ġ[ roll ] Ċ Ġ* ĠGo ing Ġdown Ġthe Ġ[ dro ps ] Ġlist Ġif Ġthe Ġaccumulated Ġ[ Item Drop . chance ] Ġexceeds Ġthe Ġ[ roll ] Ġthen Ġthat Ġitem Ġis Ġa warded . Ċ Ġ* Ċ Ġ* Ġ@ param Ġtype ĠThe Ġselection Ġstrategy ; ĠAll Ġ- ĠEvery Ġtop - level Ġdrop Ġis Ġrolled , ĠFirst Ġ- ĠOnly Ġthe Ġfirst Ġre warded Ġitem Ġis Ġreturned Ċ Ġ* Ġ@ param Ġroll ĠThe Ġmaximum Ġroll Ġ( exclusive ) Ċ Ġ* Ġ@ param Ġdrops ĠA Ġlist Ġof Ġ[ Item Drop ]' s Ġand Ġnested Ġ[ Drop Table ]' s Ċ Ġ*/ Ċ data Ġclass ĠDrop Table ( ĊĠĠĠ Ġval Ġtype : ĠTable Type , ĊĠĠĠ Ġval Ġroll : ĠInt , ĊĠĠĠ Ġval Ġdrops : ĠList < Drop > Ċ ) Ġ: ĠDrop Ġ{ ĊĊĠĠĠ Ġfun Ġrole ( maximum Roll : ĠInt Ġ= Ġ- 1 , Ġlist : ĠMutable List < Item Drop > Ġ= Ġmutable ListOf ()): ĠMutable List < Item Drop > Ġ{ ĊĠĠĠĠĠĠĠ Ġcollect ( list , Ġmaximum Roll , Ġrandom ( maximum Roll )) ĊĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrandom ( maximum : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRandom . nextInt ( 0 , Ġif Ġ( roll Ġ<= Ġ 0 Ġ&& Ġmaximum Ġ!= Ġ- 1 ) Ġmaximum Ġelse Ġroll ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcollect ( list : ĠMutable List < Item Drop >, Ġvalue : ĠInt , Ġroll : ĠInt Ġ= Ġrandom ( value )): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( drop Ġin Ġdrops ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( drop Ġis ĠDrop Table ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( drop . collect ( list , Ġvalue ) Ġ&& Ġtype Ġ== ĠTable Type . First ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( drop Ġis ĠItem Drop ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠTable Type . All ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( drop ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount Ġ+= Ġdrop . chance ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( roll Ġ< Ġcount ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( drop ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtype Ġ== ĠTable Type . All ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġtype : ĠTable Type Ġ= ĠTable Type . First ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġroll : ĠInt ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġchance : ĠInt Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdrops Ġ= Ġmutable ListOf < Drop >() ĊĊĠĠĠĠĠĠĠ Ġfun Ġadd Drop ( drop : ĠDrop ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . dro ps . add ( drop ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġwith Roll ( total : ĠInt ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . roll Ġ= Ġtotal ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġwith Type ( type : ĠTable Type ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . type Ġ= Ġtype ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġwith Chance ( chance : ĠInt ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . chance Ġ= Ġchance ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild (): ĠDrop Table Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( roll Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal Ġ= Ġdrops . sum Of Ġ{ Ġif Ġ( it Ġis ĠItem Drop ) Ġit . chance Ġelse Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( total Ġ<= Ġroll !! ) Ġ{ Ġ" Ch ances Ġ$ total Ġcannot Ġexceed Ġroll Ġ$ roll ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDrop Table ( type , Ġroll Ġ?: Ġ 1 , Ġdrops ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }