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