File size: 3,915 Bytes
ef62e40
2f63a42
 
ef62e40
2f63a42
 
ef62e40
2f63a42
 
 
 
 
 
a05a2de
 
 
 
 
 
 
 
 
55f0dce
 
 
 
 
 
 
 
 
 
c255694
 
 
 
 
 
 
 
 
 
ef62e40
 
 
 
2f63a42
ef62e40
 
 
2f63a42
 
a05a2de
 
 
 
 
 
 
 
 
 
 
 
 
 
ef62e40
 
 
 
2f63a42
ef62e40
 
 
f0b1638
 
4079f21
 
 
 
 
 
 
 
 
 
55f0dce
 
 
 
c255694
 
 
 
f0b1638
2f63a42
f0b1638
 
 
2f63a42
4079f21
 
 
 
a05a2de
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
from typing import List, Dict

from base.gain import Gain
from base.skill import Skill


class RecipeGain(Gain):
    def __init__(self, gain_name: str, skill_ids: List[int], value: int):
        super().__init__(gain_name)
        self.skill_ids = skill_ids
        self.value = value


class DoubleRecipeGain(Gain):
    def __init__(self, gain_name, attack_skill_ids, damage_skill_ids, attack_value, damage_value):
        super().__init__(gain_name)
        self.attack_skill_ids = attack_skill_ids
        self.damage_skill_ids = damage_skill_ids
        self.attack_value = attack_value
        self.damage_value = damage_value


class IntervalRecipe(RecipeGain):
    def add_skills(self, skills: Dict[int, Skill]):
        for skill_id in self.skill_ids:
            skills[skill_id].interval += self.value

    def sub_skills(self, skills: Dict[int, Skill]):
        for skill_id in self.skill_ids:
            skills[skill_id].interval -= self.value


class AttackPowerRecipe(RecipeGain):
    def add_skills(self, skills: Dict[int, Skill]):
        for skill_id in self.skill_ids:
            skills[skill_id].attack_power_cof_gain *= self.value

    def sub_skills(self, skills: Dict[int, Skill]):
        for skill_id in self.skill_ids:
            skills[skill_id].attack_power_cof_gain /= self.value


class DamageAdditionRecipe(RecipeGain):
    def add_skills(self, skills: Dict[int, Skill]):
        for skill_id in self.skill_ids:
            skills[skill_id].skill_damage_addition += self.value

    def sub_skills(self, skills: Dict[int, Skill]):
        for skill_id in self.skill_ids:
            skills[skill_id].skill_damage_addition -= self.value


class DoubleAdditionRecipe(DoubleRecipeGain):
    def add_skills(self, skills: Dict[int, Skill]):
        for skill_id in self.attack_skill_ids:
            skills[skill_id].attack_power_cof_gain *= self.attack_value
        for skill_id in self.damage_skill_ids:
            skills[skill_id].skill_damage_addition += self.damage_value

    def sub_skills(self, skills: Dict[int, Skill]):
        for skill_id in self.attack_skill_ids:
            skills[skill_id].attack_power_cof_gain /= self.attack_value
        for skill_id in self.damage_skill_ids:
            skills[skill_id].skill_damage_addition /= self.damage_value


class CriticalStrikeRecipe(RecipeGain):
    def add_skills(self, skills: Dict[int, Skill]):
        for skill_id in self.skill_ids:
            skills[skill_id].skill_critical_strike += self.value

    def sub_skills(self, skills: Dict[int, Skill]):
        for skill_id in self.skill_ids:
            skills[skill_id].skill_critical_strike -= self.value


class PveAdditionRecipe(RecipeGain):
    def add_skills(self, skills: Dict[int, Skill]):
        for skill_id in self.skill_ids:
            skills[skill_id].skill_pve_addition += self.value

    def sub_skills(self, skills: Dict[int, Skill]):
        for skill_id in self.skill_ids:
            skills[skill_id].skill_pve_addition -= self.value


def interval_recipe(skill_ids, value, name="减少运功时间"):
    return IntervalRecipe(name, skill_ids, value)


def attack_power_recipe(skill_ids, value, name="系数增加"):
    return AttackPowerRecipe(name, skill_ids, value)


def damage_addition_recipe(skill_ids, value, name="伤害增加"):
    return DamageAdditionRecipe(name, skill_ids, value)


def critical_strike_recipe(skill_ids, value, name="会心增加"):
    return CriticalStrikeRecipe(name, skill_ids, value)


def pve_addition_recipe(skill_ids, value, name="非侠伤害增加"):
    return PveAdditionRecipe(name, skill_ids, value)


def double_addition_recipe(
        attack_power_skill_ids, damage_addition_skill_ids, attack_power_value, damage_addition_value, name="伤害增加"
):
    return DoubleAdditionRecipe(
        name, attack_power_skill_ids, damage_addition_skill_ids, attack_power_value, damage_addition_value
    )