Source code for tuxemon.technique.effects.healing

# SPDX-License-Identifier: GPL-3.0
# Copyright (c) 2014-2023 William Edwards <shadowapex@gmail.com>, Benjamin Bean <superman2k5@gmail.com>
from __future__ import annotations

from dataclasses import dataclass
from typing import TYPE_CHECKING

from tuxemon.technique.techeffect import TechEffect, TechEffectResult

if TYPE_CHECKING:
    from tuxemon.monster import Monster
    from tuxemon.technique.technique import Technique


[docs]class HealingEffectResult(TechEffectResult): pass
[docs]@dataclass class HealingEffect(TechEffect): """ Healing is based on healing power. Healing power indicates that the technique heals its user an amount equal to the damage done by a reliable technique of the same power. """ name = "healing" objective: str
[docs] def apply( self, tech: Technique, user: Monster, target: Monster ) -> HealingEffectResult: done: bool = False mon: Monster heal: int = 0 player = self.session.player value = float(player.game_variables["random_tech_hit"]) hit = tech.accuracy >= value # define user or target if self.objective == "user": mon = user elif self.objective == "target": mon = target else: raise ValueError(f"{self.objective} must be user or target") # check healing power if isinstance(tech.healing_power, int): heal = (7 + mon.level) * tech.healing_power diff = mon.hp - mon.current_hp if hit: tech.hit = True tech.advance_counter_success() if diff > 0: if heal >= diff: mon.current_hp = mon.hp else: mon.current_hp += heal done = True else: tech.hit = False return {"success": done}