Use a try/catch to check for the presence of actor/target.fighter in MeleeAction
This commit is contained in:
parent
99838cbd00
commit
46af8863b1
1 changed files with 18 additions and 21 deletions
|
@ -199,29 +199,26 @@ class MeleeAction(MoveAction):
|
||||||
self.target = target
|
self.target = target
|
||||||
|
|
||||||
def perform(self, engine: 'Engine') -> ActionResult:
|
def perform(self, engine: 'Engine') -> ActionResult:
|
||||||
if not self.target:
|
try:
|
||||||
|
damage = self.actor.fighter.attack_power - self.target.fighter.defense
|
||||||
|
if damage > 0 and self.target:
|
||||||
|
log.ACTIONS.debug('%s attacks %s for %d damage!', self.actor, self.target, damage)
|
||||||
|
self.target.fighter.hit_points -= damage
|
||||||
|
|
||||||
|
if self.actor == engine.hero:
|
||||||
|
engine.message_log.add_message(f'You attack the {self.target.name} for {damage} damage!', fg=(127, 255, 127))
|
||||||
|
elif self.target == engine.hero:
|
||||||
|
engine.message_log.add_message(f'The {self.actor.name} attacks you for {damage} damage!', fg=(255, 127, 127))
|
||||||
|
else:
|
||||||
|
log.ACTIONS.debug('%s attacks %s but does no damage!', self.actor, self.target)
|
||||||
|
|
||||||
|
if self.target.fighter.is_dead:
|
||||||
|
log.ACTIONS.info('%s is dead!', self.target)
|
||||||
|
return ActionResult(self, alternate=DieAction(self.target))
|
||||||
|
except AttributeError:
|
||||||
return self.failure()
|
return self.failure()
|
||||||
|
|
||||||
if not self.actor.fighter or not self.target.fighter:
|
|
||||||
return self.failure()
|
|
||||||
|
|
||||||
damage = self.actor.fighter.attack_power - self.target.fighter.defense
|
|
||||||
if damage > 0 and self.target:
|
|
||||||
log.ACTIONS.debug('%s attacks %s for %d damage!', self.actor, self.target, damage)
|
|
||||||
self.target.fighter.hit_points -= damage
|
|
||||||
|
|
||||||
if self.actor == engine.hero:
|
|
||||||
engine.message_log.add_message(f'You attack the {self.target.name} for {damage} damage!', fg=(127, 255, 127))
|
|
||||||
elif self.target == engine.hero:
|
|
||||||
engine.message_log.add_message(f'The {self.actor.name} attacks you for {damage} damage!', fg=(255, 127, 127))
|
|
||||||
else:
|
else:
|
||||||
log.ACTIONS.debug('%s attacks %s but does no damage!', self.actor, self.target)
|
return self.success()
|
||||||
|
|
||||||
if self.target.fighter.is_dead:
|
|
||||||
log.ACTIONS.info('%s is dead!', self.target)
|
|
||||||
return ActionResult(self, alternate=DieAction(self.target))
|
|
||||||
|
|
||||||
return self.success()
|
|
||||||
|
|
||||||
class WaitAction(Action):
|
class WaitAction(Action):
|
||||||
'''Wait a turn'''
|
'''Wait a turn'''
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue