package Ġcharacter . classes . h unter . abilities Ċ Ċ import Ġcharacter . Ability Ċ import Ġcharacter . Proc Ċ import Ġcharacter . classes . h unter . t alent s . E fficiency Ċ import Ġcharacter . classes . h unter . t alent s . Impro ved Arc ane Shot Ċ import Ġcharacter . classes . h unter . t alent s . The Be ast Within Ċ import Ġdata . Constants Ċ import Ġmechan ics . General Ċ import Ġmechan ics . Range d Ċ import Ġsim . Event Ċ import Ġsim . Event Result Ċ import Ġsim . EventType Ċ import Ġsim . Sim Participant Ċ import Ġkotlin . random . Random Ċ Ċ class ĠArc ane Shot Ġ: ĠAbility () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġname Ġ= Ġ" Arc ane ĠShot " ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġicon Ġ= Ġ" ability _ imp aling bolt . jpg " ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġval Ġid : ĠInt Ġ= Ġ 2 7 0 1 9 ĊĠĠĠ Ġoverride Ġval Ġname : ĠString Ġ= ĠComp anion . name ĊĠĠĠ Ġoverride Ġval Ġicon : ĠString Ġ= ĠComp anion . icon ĊĠĠĠ Ġoverride Ġfun Ġgcd Ms ( sp : ĠSim Participant ): ĠInt Ġ= Ġsp . physical G cd (). toInt () ĊĊĠĠĠ Ġval Ġbase Cd Ġ= Ġ 6 0 0 0 ĊĠĠĠ Ġoverride Ġfun Ġcool down Ms ( sp : ĠSim Participant ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimp Arc ane R anks Ġ= Ġsp . character . klass . t alent s [ Impro ved Arc ane Shot . name ]?. current Rank Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠ Ġreturn Ġbase Cd Ġ- Ġ( 1 0 0 0 Ġ* Ġimp Arc ane R anks ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġbase Cost Ġ= Ġ 2 3 0 . 0 ĊĠĠĠ Ġoverride Ġfun Ġresource Cost ( sp : ĠSim Participant ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġefficiency Ġ= Ġsp . character . klass . t alent s [ E fficiency . name ] Ġas ĠE fficiency ? ĊĠĠĠĠĠĠĠ Ġval Ġeff Discount Ġ= Ġefficiency ?. shot Man a Cost Reduction () Ġ?: Ġ 0 . 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġtb w Discount Ġ= Ġif ( sp . buff s [ The Be ast Within . name ] Ġ!= Ġnull ) Ġ{ Ġ 0 . 2 Ġ} Ġelse Ġ 0 . 0 ĊĊĠĠĠĠĠĠĠ Ġreturn ĠGeneral . resource Cost Reduction ( base Cost , ĠlistOf ( eff Discount , Ġtb w Discount )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġflat Bonus D mg Ġ= Ġ 2 7 3 . 0 ĊĠĠĠ Ġoverride Ġfun Ġcast ( sp : ĠSim Participant ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġsp . character . gear . range d Tot em Li br am ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠSpell power Ġdoesn 't Ġaffect Ġthis Ġanymore Ġright ? ĊĠĠĠĠĠĠĠ Ġ// ĠAm mo Ġdoes Ġnot Ġaffect Ġthis Ġshot ĊĠĠĠĠĠĠĠ Ġval Ġdamage Ġ= ĠRandom . next Double ( item . min D mg , Ġitem . max D mg ) Ġ+ Ġflat Bonus D mg Ġ+ Ġ( sp . range d Attack Power () Ġ* Ġ 0 . 1 5 ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠRange d . attack Roll ( sp , Ġdamage , Ġitem ) ĊĊĠĠĠĠĠĠĠ Ġval Ġevent Ġ= ĠEvent ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠeventType Ġ= ĠEventType . DA MAGE , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdamage Type Ġ= ĠConstants . Damage Type . AR CAN E , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġability Ġ= Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġresult . first , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġresult . second , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġsp . log Event ( event ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠProc Ġanything Ġthat Ġcan Ġproc Ġoff Ġa Ġyellow Ġhit ĊĠĠĠĠĠĠĠ Ġval Ġtrigger Types Ġ= Ġwhen ( result . second ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Result . HIT Ġ-> ĠlistOf ( Proc . Trigger . RAN GED _ YELLOW _ HIT , ĠProc . Trigger . PHYSICAL _ DA MAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Result . CR IT Ġ-> ĠlistOf ( Proc . Trigger . RAN GED _ YELLOW _ CR IT , ĠProc . Trigger . PHYSICAL _ DA MAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Result . MIS S Ġ-> ĠlistOf ( Proc . Trigger . RAN GED _ MIS S ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Result . BLOCK Ġ-> ĠlistOf ( Proc . Trigger . RAN GED _ YELLOW _ HIT , ĠProc . Trigger . PHYSICAL _ DA MAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Result . BLOCK ED _ CR IT Ġ-> ĠlistOf ( Proc . Trigger . RAN GED _ YELLOW _ CR IT , ĠProc . Trigger . PHYSICAL _ DA MAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( trigger Types Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsp . fire Proc ( listOf ( Proc . Trigger . H UN TER _ CAST _ AR CAN E _ SHOT ) Ġ+ Ġtrigger Types , ĠlistOf ( item ), Ġthis , Ġevent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ