Source code for VegansDeluxe.rebuild.Weapons.Watergun

from VegansDeluxe.core import After
from VegansDeluxe.core import Allies
from VegansDeluxe.core import AttachedAction, RegisterWeapon
from VegansDeluxe.core import AttackGameEvent
from VegansDeluxe.core import DecisiveWeaponAction, RangedAttack
from VegansDeluxe.core import Entity
from VegansDeluxe.core import EventContext
from VegansDeluxe.core import PreDamagesGameEvent
from VegansDeluxe.core import Session
from VegansDeluxe.core.Weapons.Weapon import RangedWeapon
from VegansDeluxe.rebuild import Aflame


[docs]@RegisterWeapon class WaterGun(RangedWeapon): id = 'watergun' name = 'Водомет' description = 'Дальний бой, урон 1-3. Способность: создаёт водяной щит вокруг цели, из-за чего та не ' \ 'может загореться три хода, восстанавливает 2 энергии в ход и получает +1 урона.' cubes = 3 accuracy_bonus = 1 energy_cost = 3 damage_bonus = 0 def __init__(self, session_id: str, entity_id: str): super().__init__(session_id, entity_id) self.cooldown_turn = 0
[docs]@AttachedAction(WaterGun) class PistolAttack(RangedAttack): pass
[docs]@AttachedAction(WaterGun) class CreateWaterShield(DecisiveWeaponAction): id = 'watershield' name = 'Водяной щит' target_type = Allies() def __init__(self, session: Session, source: Entity, weapon: WaterGun): super().__init__(session, source, weapon) self.weapon: WaterGun = weapon @property def hidden(self) -> bool: return self.session.turn < self.weapon.cooldown_turn
[docs] async def func(self, source, target): @After(self.session.id, 0, event=PreDamagesGameEvent, repeats=3) def _(context: EventContext[PreDamagesGameEvent]): aflame = self.source.get_state(Aflame) aflame.extinguished = True aflame.flame = 0 self.session.say(f'🔋|{self.source.name} получает 2 энергии.') self.source.energy += 2 if self.session.turn >= self.weapon.cooldown_turn: self.active = False self.session.say(f'💨|Водяной щит {self.source.name} испарился!') @After(self.session.id, 0, event=AttackGameEvent, repeats=3) def _(context: EventContext[AttackGameEvent]): if context.event.source != self.source: return if context.event.damage: context.event.damage += 1 self.weapon.cooldown_turn = self.session.turn + 5 self.session.say(f'💧|{source.name} создаёт водяной щит вокруг {target.name}.')