def handle(self, evt_type, act): if evt_type == 'action_after' and isinstance(act, Damage): g = Game.getgame() src, tgt = act.source, act.target if not (src and src.has_skill(Disarm)): return act if tgt.dead: return act pact = g.action_stack[-1] pcard = getattr(pact, 'associated_card', None) if not pcard: return act if not pcard.is_card(AttackCard) and not (pcard.is_card(DuelCard) and pact.source is src): return act if not user_input([src], ChooseOptionInputlet(self, (False, True))): return act cl = list(tgt.cards) + list(tgt.showncards) g.process_action(ShowCards(tgt, cl, [src])) if g.SERVER_SIDE: l = [bool(c.is_card(AttackCard) or 'spellcard' in c.category) for c in cl] else: l = [False for c in cl] l = sync_primitive(l, g.players) cl = list(itertools.compress(cl, l)) g.process_action(DisarmHideAction(src, tgt, cl)) elif evt_type == 'action_after' and isinstance(act, FinalizeStage): tgt = act.target g = Game.getgame() g.process_action(DisarmReturningAction(tgt, tgt)) return act
def apply_action(self): tgt = self.target g = Game.getgame() n = 1 + tgt.maxlife - tgt.life cards = g.deck.getcards(n) tgt.reveal(cards) putback, acquire = user_input([tgt], self.inputlet_cls(self, cards), timeout=20) for c in acquire: c.detach() assert not putback or set(putback) == set(g.deck.getcards( len(putback))) deck = g.deck.cards for i, c in enumerate(putback): deck[i] = c assert not putback or putback == g.deck.getcards(len(putback)) if acquire: g.process_action(ShowCards(tgt, acquire)) migrate_cards(acquire, tgt.cards) self.acquire = acquire return True
def apply_action(self): src, tgt = self.source, self.target g = Game.getgame() c = user_input([src], ChoosePeerCardInputlet(self, tgt, ['cards', 'showncards', 'equips'])) c = c or random_choose_card([tgt.cards, tgt.showncards, tgt.equips]) g.players.reveal(c) g.process_action(DropCards(src, tgt, [c])) action = 'draw' if tgt.life < tgt.maxlife: action = user_input([tgt], ChooseOptionInputlet(self, ('heal', 'draw'))) or 'draw' if action == 'heal': g.process_action(EirinHeal(src, tgt)) else: g.deck.getcards(3) g.deck.cards.rotate(3) cl = g.deck.getcards(3) g.process_action(ShowCards(tgt, cl)) drop = [c for c in cl if 'basic' in c.category] get = [c for c in cl if c not in drop] if get: migrate_cards(get, tgt.cards) if drop: migrate_cards(drop, g.deck.droppedcards) ttags(src)['sky_silk'] = True return True
def apply_action(self): src = self.source tgt = self.target draw = DrawCards(src, self.amount) g = Game.getgame() g.process_action(draw) g.process_action(ShowCards(src, draw.cards)) if [c for c in draw.cards if c.suit != Card.CLUB]: # any non-club tgt.tags['melancholy_tag'] = g.turn_count self.effective = True else: self.effective = False return True
def apply_action(self): src, tgt = self.source, self.target g = Game.getgame() g.process_action(DrawCards(tgt, 2)) cl = user_choose_cards(self, tgt, ('cards', 'showncards', 'equips')) c = cl[0] if cl else random_choose_card([tgt.cards, tgt.showncards, tgt.equips]) if not c: return False g.players.reveal(c) g.process_action(ShowCards(tgt, [c])) migrate_cards([c], src.cards) if c.suit == Card.HEART: g.process_action(DrawCards(src, 1)) self.card = c return True