You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.3 KiB
59 lines
1.3 KiB
from dataclasses import dataclass
|
|
|
|
from enums import Counter, Element, Affinity, MissType
|
|
from jsonable import JsonableDataclassArgs
|
|
from model import Effect, Target, Action
|
|
|
|
|
|
@dataclass(**JsonableDataclassArgs)
|
|
class OpportunityEffect(Effect):
|
|
target: Target
|
|
opportunity_text: str
|
|
|
|
|
|
@dataclass(**JsonableDataclassArgs)
|
|
class SubActionEffect(Effect):
|
|
action: Action
|
|
trigger_text: str
|
|
|
|
|
|
@dataclass(**JsonableDataclassArgs)
|
|
class DamageEffect(Effect):
|
|
target: Target | None
|
|
attribute: Counter
|
|
damage: int
|
|
old_value: int
|
|
new_value: int
|
|
max_value: int | None
|
|
element: Element
|
|
affinity: Affinity
|
|
piercing: bool
|
|
|
|
|
|
@dataclass(**JsonableDataclassArgs)
|
|
class StatusEffect(Effect):
|
|
target: Target
|
|
old_status: str | None
|
|
new_status: str | None
|
|
|
|
def __post_init__(self):
|
|
if self.old_status is None and self.new_status is None:
|
|
raise ValueError("At least one of old_status or new_status must be non-None")
|
|
|
|
|
|
@dataclass(**JsonableDataclassArgs)
|
|
class FPBonusEffect(Effect):
|
|
rerolls: int
|
|
bond_bonus: int
|
|
|
|
|
|
@dataclass(**JsonableDataclassArgs)
|
|
class MissEffect(Effect):
|
|
miss_type: MissType
|
|
target: Target
|
|
|
|
|
|
@dataclass(**JsonableDataclassArgs)
|
|
class GeneralEffect(Effect):
|
|
text: str
|
|
target: Target
|
|
|