def handle(self, evt_type, act): if evt_type != 'action_before': return act if not isinstance(act, InstantSpellCardAction): return act if isinstance(act, Reject): # HACK return act if ForEach.is_group_effect(act): return act src = act.source tgt = act.target if not src or tgt is src: return act if not tgt.has_skill(ReversedScales): return act if not user_input([tgt], ChooseOptionInputlet(self, (False, True))): return act g = Game.getgame() g.process_action(ReversedScalesAction(tgt, act)) return act
def handle(self, evt_type, act): if evt_type == 'action_before' and isinstance(act, BaseAttack): pact = ForEach.get_actual_action(act) or act if getattr(pact, 'in_wine', False): act.damage += 1 elif evt_type == 'post_choose_target': act, tl = arg = act from ..cards import AttackCard if act.card.is_card(AttackCard): src = act.source if src.tags['wine']: Game.getgame().process_action(SoberUp(src, src)) act.card_action.in_wine = True return arg elif evt_type == 'action_apply' and isinstance(act, PlayerTurn): src = act.target if src.tags['wine']: Game.getgame().process_action(SoberUp(src, src)) elif evt_type == 'action_before' and isinstance(act, Damage): if act.cancelled: return act if act.amount < 1: return act tgt = act.target if act.amount >= tgt.life and tgt.tags['wine']: g = Game.getgame() g.process_action(WineRevive(act)) return act
def is_valid(self): try: cards = ForEach.get_actual_action(self).cards except: return False if self.target.dead: return False return bool([c for c in cards if c.detached])
def handle(self, evt_type, act): if evt_type == 'action_after' and isinstance(act, Damage): g = Game.getgame() pact = g.action_stack[-1] src, tgt = act.source, act.target if ForEach.is_group_effect(pact): return act if src is tgt: return act self.process(src, tgt) self.process(tgt, src) return act
def apply_action(self): pact = ForEach.get_actual_action(self) cards = pact.cards cards_avail = [c for c in cards if c.detached] if not cards_avail: return False tgt = self.target card = user_input( [tgt], ChooseIndividualCardInputlet(self, cards_avail), trans=pact.trans, ) or random_choose_card([cards_avail]) migrate_cards([card], tgt.cards) pact.trans.notify('harvest_choose', card) self.card = card return True
def handle(self, evt_type, act): if evt_type == 'action_before' and ForEach.is_group_effect(act): tgt = act.target if not tgt.has_skill(Heterodoxy): return act g = Game.getgame() for a in reversed(g.action_stack): if isinstance(a, HeterodoxyAction): break else: return act if not user_input([tgt], ChooseOptionInputlet(self, (False, True))): return act act.cancelled = True g.process_action(HeterodoxySkipAction(tgt, tgt)) return act
def handle(self, evt_type, act): if evt_type == "action_before" and ForEach.is_group_effect(act): tgt = act.target if not tgt.has_skill(Heterodoxy): return act g = Game.getgame() for a in reversed(g.action_stack): if isinstance(a, HeterodoxyAction): break else: return act if not user_input([tgt], ChooseOptionInputlet(self, (False, True))): return act act.cancelled = True g.process_action(HeterodoxySkipAction(tgt, tgt)) return act