Spaces:
Runtime error
Runtime error
File size: 3,881 Bytes
025687f 2452398 025687f 5825182 025687f 2f63a42 b76daae f0b1638 025687f 5825182 025687f 2f63a42 025687f 2452398 3393f9d 2452398 ef62e40 5825182 ef62e40 5825182 ef62e40 5825182 6e6388e 5825182 6e6388e 5825182 6e6388e 5825182 ef62e40 5825182 ef62e40 5825182 6e6388e 5825182 6e6388e 5825182 6e6388e |
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 |
from dataclasses import dataclass
from typing import Dict, List, Union
from base.attribute import Attribute
from base.skill import Skill
ATTR_DICT = Dict[str, Union[List[int], int]]
@dataclass
class Buff:
buff_id: int
buff_name: str
buff_level: int = 0
buff_stack: int = 1
activate: bool = True
gain_skills: Dict[int, ATTR_DICT] = None
gain_attributes: ATTR_DICT = None
SNAPSHOT_ATTRS = ["attack_power", "critical_strike", "critical_power", "strain", "damage_addition"]
def __post_init__(self):
if self.gain_skills is None:
self.gain_skills = {}
if self.gain_attributes is None:
self.gain_attributes = {}
@property
def display_name(self):
return f"{self.buff_name}#{self.buff_id}-{self.buff_level}-{self.buff_stack}"
def level_value(self, value):
if isinstance(value, list):
return value[self.buff_level - 1]
else:
return value
def add_all(self, attribute: Attribute, skill: Skill):
for attr, value in self.gain_attributes.items():
setattr(attribute, attr, getattr(attribute, attr) + self.level_value(value) * self.buff_stack)
for attr, value in self.gain_skills.get(skill.skill_id, {}).items():
setattr(skill, attr, getattr(skill, attr) + self.level_value(value) * self.buff_stack)
def add_dot(self, attribute: Attribute, skill: Skill, snapshot: bool = True):
for attr, value in self.gain_attributes.items():
if snapshot and any(snapshot_attr in attr for snapshot_attr in self.SNAPSHOT_ATTRS):
setattr(attribute, attr, getattr(attribute, attr) + self.level_value(value) * self.buff_stack)
elif not snapshot and all(snapshot_attr not in attr for snapshot_attr in self.SNAPSHOT_ATTRS):
setattr(attribute, attr, getattr(attribute, attr) + self.level_value(value) * self.buff_stack)
for attr, value in self.gain_skills.get(skill.skill_id, {}).items():
if snapshot and any(snapshot_attr in attr for snapshot_attr in self.SNAPSHOT_ATTRS):
setattr(skill, attr, getattr(skill, attr) + self.level_value(value) * self.buff_stack)
elif not snapshot and all(snapshot_attr not in attr for snapshot_attr in self.SNAPSHOT_ATTRS):
setattr(skill, attr, getattr(skill, attr) + self.level_value(value) * self.buff_stack)
def sub_all(self, attribute: Attribute, skill: Skill):
for attr, value in self.gain_attributes.items():
setattr(attribute, attr, getattr(attribute, attr) - self.level_value(value) * self.buff_stack)
for attr, value in self.gain_skills.get(skill.skill_id, {}).items():
setattr(skill, attr, getattr(skill, attr) - self.level_value(value) * self.buff_stack)
def sub_dot(self, attribute: Attribute, skill: Skill, snapshot: bool = True):
for attr, value in self.gain_attributes.items():
if snapshot and any(snapshot_attr in attr for snapshot_attr in self.SNAPSHOT_ATTRS):
setattr(attribute, attr, getattr(attribute, attr) - self.level_value(value) * self.buff_stack)
elif not snapshot and all(snapshot_attr not in attr for snapshot_attr in self.SNAPSHOT_ATTRS):
setattr(attribute, attr, getattr(attribute, attr) - self.level_value(value) * self.buff_stack)
for attr, value in self.gain_skills.get(skill.skill_id, {}).items():
if snapshot and any(snapshot_attr in attr for snapshot_attr in self.SNAPSHOT_ATTRS):
setattr(skill, attr, getattr(skill, attr) - self.level_value(value) * self.buff_stack)
elif not snapshot and all(snapshot_attr not in attr for snapshot_attr in self.SNAPSHOT_ATTRS):
setattr(skill, attr, getattr(skill, attr) - self.level_value(value) * self.buff_stack)
|