Source code for VegansDeluxe.rebuild.Weapons.Molot

from VegansDeluxe.core import AttachedAction, RegisterWeapon
from VegansDeluxe.core import Enemies, Distance
from VegansDeluxe.core import Entity
from VegansDeluxe.core import MeleeAttack
from VegansDeluxe.core import Session
from VegansDeluxe.core.Translator.LocalizedString import ls
from VegansDeluxe.core.Weapons.Weapon import MeleeWeapon


[docs]@RegisterWeapon class Molot(MeleeWeapon): id = 'molot' name = ls("rebuild.weapon.molot.name") description = ls("rebuild.weapon.molot.description") cubes = 3 accuracy_bonus = 2 energy_cost = 2 damage_bonus = 0 def __init__(self, session_id: str, entity_id: str): super().__init__(session_id, entity_id) self.cooldown_turn = 0 self.strike = False
[docs]@AttachedAction(Molot) class MolotAttack(MeleeAttack): def __init__(self, session: Session, source: Entity, weapon: Molot): super().__init__(session, source, weapon) self.weapon: Molot = weapon
[docs] def energy_bonus(self, source): return (source.max_energy - source.energy) // 2
[docs] def calculate_damage(self, source, target): if not self.weapon.strike: damage = super().calculate_damage(source, target) else: damage = self.cubes + self.dmgbonus if not damage: return damage return damage + self.energy_bonus(source)
[docs]@AttachedAction(Molot) class TrueStrike(MeleeAttack): id = 'true_strike' name = ls("rebuild.weapon.molot.action.name") target_type = Enemies(distance=Distance.NEARBY_ONLY) priority = -3 @property def hidden(self) -> bool: return self.session.turn < self.weapon.cooldown_turn or self.source.energy < 4
[docs] def energy_bonus(self, source): return (source.max_energy - source.energy) // 2
[docs] def calculate_damage(self, source, target): damage = self.weapon.cubes + self.weapon.damage_bonus if not super().calculate_damage(source, target): return damage return damage + self.energy_bonus(source)
[docs] async def func(self, source, target): self.weapon.cooldown_turn = self.session.turn + 6 source.energy -= 4 await self.attack(source, target, pay_energy=False)