Spaces:
Runtime error
Runtime error
File size: 3,750 Bytes
025687f 2452398 025687f 5825182 025687f 2f63a42 b76daae a2a5d31 f0b1638 025687f 5825182 025687f 2f63a42 025687f 2452398 3393f9d 2452398 a2a5d31 ef62e40 5825182 a2a5d31 5825182 6e6388e a2a5d31 6e6388e a2a5d31 6e6388e a2a5d31 5825182 a2a5d31 6e6388e a2a5d31 6e6388e a2a5d31 5825182 a2a5d31 5825182 6e6388e a2a5d31 6e6388e a2a5d31 6e6388e a2a5d31 6e6388e a2a5d31 6e6388e a2a5d31 |
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 |
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
stackable: 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 value(self, values):
if isinstance(values, list):
value = values[self.buff_level - 1]
else:
value = values
if self.stackable:
return value * self.buff_stack
else:
return value
def add_all(self, attribute: Attribute, skill: Skill):
for attr, values in self.gain_attributes.items():
setattr(attribute, attr, getattr(attribute, attr) + self.value(values))
for attr, values in self.gain_skills.get(skill.skill_id, {}).items():
setattr(skill, attr, getattr(skill, attr) + self.value(values))
def add_dot(self, attribute: Attribute, skill: Skill, snapshot: bool = True):
for attr, values 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.value(values))
elif not snapshot and all(snapshot_attr not in attr for snapshot_attr in self.SNAPSHOT_ATTRS):
setattr(attribute, attr, getattr(attribute, attr) + self.value(values))
for attr, values 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.value(values))
elif not snapshot and all(snapshot_attr not in attr for snapshot_attr in self.SNAPSHOT_ATTRS):
setattr(skill, attr, getattr(skill, attr) + self.value(values))
def sub_all(self, attribute: Attribute, skill: Skill):
for attr, values in self.gain_attributes.items():
setattr(attribute, attr, getattr(attribute, attr) - self.value(values))
for attr, values in self.gain_skills.get(skill.skill_id, {}).items():
setattr(skill, attr, getattr(skill, attr) - self.value(values))
def sub_dot(self, attribute: Attribute, skill: Skill, snapshot: bool = True):
for attr, values 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.value(values))
elif not snapshot and all(snapshot_attr not in attr for snapshot_attr in self.SNAPSHOT_ATTRS):
setattr(attribute, attr, getattr(attribute, attr) - self.value(values))
for attr, values 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.value(values))
elif not snapshot and all(snapshot_attr not in attr for snapshot_attr in self.SNAPSHOT_ATTRS):
setattr(skill, attr, getattr(skill, attr) - self.value(values))
|