def test_callback_event_handlers(): def create_graph(): X = core.BuffSkill('X', 200, 300, cooltime=500).wrap(core.BuffSkillWrapper) Y = core.DamageSkill('Y', 200, 50, 5).wrap(core.DamageSkillWrapper) A = core.DamageSkill('A', 200, 50, 5).wrap(core.DamageSkillWrapper) B = core.DamageSkill('B', 200, 50, 5).wrap(core.DamageSkillWrapper) C = core.DamageSkill('C', 200, 50, 5).wrap(core.DamageSkillWrapper) X.onEventElapsed(A, 370) X.onEventEnd(B) Y.onEventElapsed(C, 380) return Y, [X, Y] base_element, all_elements, collection = generate_graph_safely( create_graph) X, Y = all_elements graph = policy.StorageLinkedGraph(base_element, collection.get_storage(), accessible_elements=all_elements) graph.build(AbstractCharacter()) scheduler = policy.AdvancedGraphScheduler( graph, policy.TypebaseFetchingPolicy( [core.BuffSkillWrapper, core.DamageSkillWrapper]), rules.RuleSet()) analytics = core.Analytics() simulator = core.Simulator(scheduler, AbstractCharacter(), analytics) simulator.start_simulation(1500) answer = [(x['time'], x['sname']) for x in analytics.get_results()] reference = [ (0, 'X'), (200, 'Y'), (300, 'B'), (370, 'A'), (400, 'Y'), (580, 'C'), (600, 'X'), (780, 'C'), (800, 'Y'), (900, 'B'), (970, 'A'), (1000, 'Y'), (1180, 'C'), (1200, 'X'), (1380, 'C'), (1400, 'Y'), (1500, 'B'), ] for ans, ref in zip(answer, reference): assert int(ans[0]) == int(ref[0]) assert ans[1] == ref[1]
def burst10(args): preset = get_preset(args.id) gen: JobGenerator = jobMap[preset.job].JobGenerator() target, weapon_stat = TemplateGenerator().get_template_and_weapon_stat( gen, str(args.ulevel), args.cdr) v_builder = core.AlwaysMaximumVBuilder() graph = gen.package( target, v_builder, options=preset.options, ulevel=args.ulevel, weaponstat=weapon_stat, ability_grade=Ability_grade(4, 1), ) sche = policy.AdvancedGraphScheduler( graph, policy.ListedFetchingPolicy( skill_ids=gen.get_skill_rotation_10sec(graph)), [rules.UniquenessRule()], ) analytics = core.StatAnalytics() control = core.Simulator(sche, target, analytics) control.start_simulation(args.time * 1000) start, end, dpm, loss = analytics.get_peak(10000) print(preset.job, f"{dpm:,.3f}") return analytics.get_log()
def burst10(args): preset = get_preset(args.id) template = get_template_generator("high_standard")().get_template( args.ulevel) target: ItemedCharacter = template(weaponList[preset.job], args.cdr) gen: JobGenerator = jobMap[preset.job].JobGenerator() v_builder = core.AlwaysMaximumVBuilder() graph = gen.package( target, v_builder, options=preset.options, ulevel=args.ulevel, weaponstat=[4, 9], ability_grade=Ability_grade(4, 1), ) sche = policy.AdvancedGraphScheduler( graph, policy.ListedFetchingPolicy( skill_ids=gen.get_skill_rotation_10sec(graph)), [rules.UniquenessRule()], ) analytics = core.StatAnalytics() control = core.Simulator(sche, target, analytics) control.start_simulation(args.time * 1000) start, end, dpm, loss = analytics.get_peak(10000) print(dpm) return analytics.get_log()
def dpm(args): preset = get_preset(args.id) gen: JobGenerator = jobMap[preset.job].JobGenerator() target, weapon_stat = TemplateGenerator().get_template_and_weapon_stat( gen, str(args.ulevel), args.cdr) v_builder = core.AlwaysMaximumVBuilder() graph = gen.package( target, v_builder, options=preset.options, ulevel=args.ulevel, weaponstat=weapon_stat, ability_grade=Ability_grade(4, 1), ) sche = policy.AdvancedGraphScheduler( graph, policy.TypebaseFetchingPolicy(priority_list=[ core.BuffSkillWrapper, core.SummonSkillWrapper, core.DamageSkillWrapper, ]), [rules.UniquenessRule()] + gen.get_predefined_rules(rules.RuleSet.BASE), ) analytics = core.StatAnalytics() control = core.Simulator(sche, target, analytics) control.start_simulation(args.time * 1000) dpm = analytics.get_dpm() print(preset.job, f"{dpm:,.3f}") return analytics.get_log()
def test_callback_operation(): class CallbackTestDamageSkillWrapper(core.DamageSkillWrapper): def _init__(self, skill): super(CallbackTestDamageSkillWrapper, self).__init__(skill) self.callback_for_result = [] def _use(self, skill_modifier): result = super(CallbackTestDamageSkillWrapper, self)._use(skill_modifier) result.callbacks = self.callback_for_result return result def create_graph(): X = core.DamageSkill('X', 200, 50, 5, cooltime=500).wrap(CallbackTestDamageSkillWrapper) Y = core.DamageSkill('Y', 200, 50, 5).wrap(CallbackTestDamageSkillWrapper) A = core.DamageSkill('A', 200, 50, 5).wrap(core.DamageSkillWrapper) B = core.DamageSkill('B', 200, 50, 5).wrap(core.DamageSkillWrapper) C = core.DamageSkill('C', 200, 50, 5).wrap(core.DamageSkillWrapper) X.callback_for_result = [ core.Callback.from_graph_element(A, core.SkillModifier(), 320), core.Callback.from_graph_element(B, core.SkillModifier(), 390) ] Y.callback_for_result = [ core.Callback.from_graph_element(C, core.SkillModifier(), 390) ] return Y, [X, Y] base_element, all_elements, collection = generate_graph_safely( create_graph) X, Y = all_elements graph = policy.StorageLinkedGraph(base_element, collection.get_storage(), accessible_elements=all_elements) graph.build(AbstractCharacter()) scheduler = policy.AdvancedGraphScheduler( graph, policy.TypebaseFetchingPolicy([core.DamageSkillWrapper]), rules.RuleSet()) analytics = core.Analytics() simulator = core.Simulator(scheduler, AbstractCharacter(), analytics) simulator.start_simulation(1500) answer = [(x['time'], x['sname']) for x in analytics.get_results()] reference = [(0, 'X'), (200, 'Y'), (320, 'A'), (390, 'B'), (400, 'Y'), (590, 'C'), (600, 'X'), (790, 'C'), (800, 'Y'), (920, 'A'), (990, 'B'), (1000, 'Y'), (1190, 'C'), (1200, 'X'), (1390, 'C'), (1400, 'Y')] for ans, ref in zip(answer, reference): assert ans[0] == ref[0] assert ans[1] == ref[1]