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]
Exemplo n.º 2
0
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()
Exemplo n.º 3
0
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()
Exemplo n.º 4
0
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()
Exemplo n.º 5
0
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]