def oninit(self, adv): super().oninit(adv) from core.advbase import Event, SingleActionBuff Event('dragon_end').listener(self.shift_end_trickery) self.trickery = 15 self.threshold = 25 self.trickery_buff = SingleActionBuff('d_trickery_buff', 1.80, 1, 's', 'buff', end_proc=self.check_trickery) self.check_trickery() if adv.condition('always connect hits'): self.dmg_proc_o = adv.dmg_proc self.thit = 0 def dmg_proc(name, amount): n_thit = adv.hits // self.threshold if n_thit > self.thit: self.add_trickery(n_thit - self.thit) self.thit = n_thit self.dmg_proc_o(name, amount) adv.dmg_proc = dmg_proc
class Siren(DragonBase): ele = 'water' att = 125 a = [('s', 0.9), ('a', 0.2)] dragonform = { 'act': 'c3 s', 'dx1.dmg': 2.30, 'dx1.startup': 26 / 60.0, # c1 frames 'dx1.hit': 1, 'dx2.dmg': 2.53, 'dx2.startup': 38 / 60.0, # c2 frames 'dx2.hit': 1, 'dx3.dmg': 4.03, 'dx3.startup': 38 / 60.0, # c3 frames 'dx3.recovery': 49 / 60.0, # recovery 'dx3.hit': 1, 'ds.recovery': 178 / 60, # skill frames 'ds.hit': -1, 'dodge.startup': 42 / 60, # dodge frames } def oninit(self, adv): super().oninit(adv) from core.advbase import SingleActionBuff self.ds_buff = SingleActionBuff('d_sd_buff', 0.40, 1, 's', 'buff') def ds_proc(self): dmg = self.adv.dmg_make('ds', 5.00, 's') self.ds_buff.on(1) return dmg
class Vayu(DragonBase): ele = 'wind' att = 127 a = [('s', 0.9), ('a', 0.2)] dragonform = { 'act': 'c3 s', 'dx1.dmg': 2.08, 'dx1.startup': (16+19) / 60.0, # c1 frames 'dx1.hit': 2, 'dx2.dmg': 2.26, 'dx2.startup': 34 / 60.0, # c2 frames 'dx2.hit': 1, 'dx3.dmg': 3.69, 'dx3.startup': 79 / 60.0, # c3 frames 'dx3.recovery': 80 / 60.0, # dodge frames, real recovery 80 'dx3.hit': 1, 'ds.recovery': 100 / 60, # skill frames 'ds.hit': 1, } def oninit(self, adv): super().oninit(adv) from core.advbase import SingleActionBuff self.ds_buff = SingleActionBuff('d_sd_buff',0.40,1,'s','buff') def ds_proc(self): dmg = self.adv.dmg_make('ds',8.96,'s') self.ds_buff.on(1) return dmg
class Konohana_Sakuya(DragonBase): ele = 'flame' att = 121 a = [('s', 0.9), ('a', 0.2)] dragonform = { 'act': 'c3-s', 'dx1.dmg': 2.08, 'dx1.startup': 25 / 60.0, # c1 frames 'dx2.startup': 40 / 60.0, # c2 frames 'dx1.hit': 1, 'dx2.dmg': 2.29, 'dx3.startup': 48 / 60.0, # c3 frames 'dx2.hit': 1, 'dx3.dmg': 3.99, 'dx3.recovery': 69 / 60.0, # recovery 'dx3.hit': 3, 'ds.recovery': 167 / 60, # skill frames 'ds.hit': -1, } def oninit(self, adv): super().oninit(adv) from core.advbase import SingleActionBuff self.ds_buff = SingleActionBuff('d_sd_buff', 0.40, 1, 's', 'buff') def ds_proc(self): dmg = self.adv.dmg_make('ds', 6.60, 's') self.ds_buff.on(1) return dmg
class Gala_Cat_Sith(DragonBase): ele = 'shadow' att = 128 a = [] dragonform = { 'act': 'c3 s', 'dx1.dmg': 3.00, 'dx1.startup': 18 / 60.0, # c1 frames 'dx1.hit': 1, 'dx2.dmg': 3.60, 'dx2.startup': 55 / 60.0, # c2 frames 'dx2.hit': 1, 'dx3.dmg': 4.50, 'dx3.startup': 43 / 60.0, # c3 frames 'dx3.recovery': 56 / 60.0, # recovery 'dx3.hit': 1, 'ds.dmg': 7.744, 'ds.recovery': 90 / 60, 'ds.hit': 32, } def oninit(self, adv): super().oninit(adv) from core.advbase import Event, SingleActionBuff Event('dragon_end').listener(self.shift_end_trickery) self.trickery = 15 self.threshold = 25 self.trickery_buff = SingleActionBuff('d_trickery_buff', 1.80, 1,'s', 'buff', end_proc=self.check_trickery) self.check_trickery() if adv.condition('always connect hits'): self.dmg_proc_o = adv.dmg_proc self.thit = 0 def dmg_proc(name, amount): n_thit = adv.hits // self.threshold if n_thit > self.thit: self.add_trickery(n_thit-self.thit) self.thit = n_thit self.dmg_proc_o(name, amount) adv.dmg_proc = dmg_proc def add_trickery(self, t): from core.log import log log('debug', 'trickery', f'+{t}', self.trickery, self.adv.hits) self.trickery = min(self.trickery+t, 15) self.check_trickery() def check_trickery(self, e=None): from core.log import log if self.trickery > 0 and not self.trickery_buff.get(): self.trickery -= 1 log('debug', 'trickery', 'consume', self.trickery) self.trickery_buff.on() def shift_end_trickery(self, e): self.add_trickery(8)
class Chelsea(adv.chelsea.Chelsea): comment = 'roll fs; only use s1 3 times to proc RO at' conf = adv.chelsea.Chelsea.conf.copy() conf['slots.d'] = Dreadking_Rathalos() conf['slots.a'] = The_Lurker_in_the_Woods() + Dear_Diary() conf['acl'] = """ `s3,not self.s3_buff `s2,fsc `s1,fsc and self.hp < 30 and self.ro_charges > 0 `dodge, fsc `fs """ coab = ['Blade', 'Grace', 'Hunter_Berserker'] def init(self): self.slots.c.coabs['Hunter_Berserker'] = [None, 'sword'] def prerun(self): super().prerun() self.ro_charges = 3 if isinstance(self.slots.a.a2, Dear_Diary) else 0 self.zerk_chain = None if 'Hunter_Berserker' in self.coab_list: self.zerk_chain = SingleActionBuff('zerk_chain', 0.20, 1, 'fs', 'buff') def dmg_before(self, name): hpold = self.hp super().dmg_before(name) if self.ro_charges > 0 and hpold > 30 and self.hp < 30: Selfbuff('resilient_offense', 0.10, -1).on() self.comment += ' {}s'.format(round(now())) self.ro_charges -= 1 if self.hp < 100 and self.zerk_chain is not None: self.zerk_chain.on()
def prerun(self): super().prerun() self.ro_charges = 3 if isinstance(self.slots.a.a2, Dear_Diary) else 0 self.zerk_chain = None if 'Hunter_Berserker' in self.coab_list: self.zerk_chain = SingleActionBuff('zerk_chain', 0.20, 1, 'fs', 'buff')
def oninit(self, adv): super().oninit(adv) from core.advbase import Event, SingleActionBuff Event('dragon_end').listener(self.shift_end_trickery) self.max_trickery = 14 # 1 trickery is in the buff at all times self.adv.trickery = self.max_trickery self.threshold = 25 self.trickery_buff = SingleActionBuff('d_trickery_buff', 1.80, 1,'s', 'buff').on() self.check_trickery() if adv.condition('always connect hits'): add_combo_o = adv.add_combo thit = 0 def add_combo(name='#'): self.add_combo_o(name) n_thit = adv.hits // self.threshold if n_thit > self.thit: add_trickery(1) thit = n_thit else: n_thit = 0 self.check_trickery() adv.add_combo = add_combo
def oninit(self, adv): super().oninit(adv) from core.advbase import SingleActionBuff self.ds_buff = SingleActionBuff('d_sd_buff', 0.40, 1, 's', 'buff')
class Gala_Cat_Sith(DragonBase): ele = 'shadow' att = 128 a = [] dragonform = { 'act': 'c3-s', 'dx1.dmg': 3.00, 'dx1.startup': 18 / 60.0, # c1 frames 'dx1.hit': 1, 'dx2.dmg': 3.60, 'dx2.startup': 55 / 60.0, # c2 frames 'dx2.hit': 1, 'dx3.dmg': 4.50, 'dx3.startup': 43 / 60.0, # c3 frames 'dx3.recovery': 56 / 60.0, # recovery 'dx3.hit': 1, 'ds.dmg': 7.744, 'ds.recovery': 90 / 60, 'ds.hit': 32, } def oninit(self, adv): super().oninit(adv) from core.advbase import Event, SingleActionBuff Event('dragon_end').listener(self.shift_end_trickery) self.max_trickery = 14 # 1 trickery is in the buff at all times self.adv.trickery = self.max_trickery self.threshold = 25 self.trickery_buff = SingleActionBuff('d_trickery_buff', 1.80, 1,'s', 'buff').on() self.check_trickery() if adv.condition('always connect hits'): add_combo_o = adv.add_combo thit = 0 def add_combo(name='#'): self.add_combo_o(name) n_thit = adv.hits // self.threshold if n_thit > self.thit: add_trickery(1) thit = n_thit else: n_thit = 0 self.check_trickery() adv.add_combo = add_combo def add_trickery(self, t): from core.log import log log('debug', 'trickery', f'+{t}', self.adv.trickery, self.adv.hits) self.adv.trickery = min(self.adv.trickery+t, self.max_trickery) def check_trickery(self, e=None): from core.log import log if self.adv.trickery > 0 and not self.trickery_buff.get(): self.adv.trickery -= 1 log('debug', 'trickery', 'consume', self.adv.trickery) self.trickery_buff.on() def shift_end_trickery(self, e): if not self.adv.dragonform.is_dragondrive: self.add_trickery(8)