def handle(self, evt_type, act): if evt_type != 'action_after': return act if not isinstance(act, LaunchCard): return act g = Game.getgame() card = act.card if not card: return act if 'basic' not in card.category: return act if card.color != Card.RED: return act if card.is_card(VirtualCard): rawcards = VirtualCard.unwrap([card]) else: rawcards = [card] if not all(c.resides_in is None or c.resides_in.type == 'droppedcard' for c in rawcards): return act tgt = act.source self.target = tgt # for ui if tgt.dead: return act for p in g.players: if p.dead or p is tgt: continue if not p.has_skill(ImperishableNight): continue if p is g.current_player: continue if not user_input([p], ChooseOptionInputlet(self, (False, True))): continue cards = user_choose_cards(self, p, ('cards', 'showncards', 'equips')) if cards: g.players.reveal(cards) skill = skill_wrap(p, [ImperishableNight], cards, {}) assert skill_check(skill) # should not fail g.deck.register_vcard(skill) rst = g.process_action(LaunchCard(p, [tgt], skill)) assert rst return act
def handle(self, evt_type, act): if evt_type != 'action_after': return act if not isinstance(act, LaunchCard): return act g = Game.getgame() card = act.card if not card: return act if 'basic' not in card.category: return act if card.color != Card.RED: return act if card.is_card(VirtualCard): rawcards = VirtualCard.unwrap([card]) else: rawcards = [card] if not all( c.resides_in is None or c.resides_in.type == 'droppedcard' for c in rawcards ): return act tgt = act.source self.target = tgt # for ui if tgt.dead: return act for p in g.players: if p.dead or p is tgt: continue if not p.has_skill(ImperishableNight): continue if p is g.current_player: continue if not user_input([p], ChooseOptionInputlet(self, (False, True))): continue cards = user_choose_cards(self, p, ('cards', 'showncards', 'equips')) if cards: g.players.reveal(cards) skill = skill_wrap(p, [ImperishableNight], cards, {}) assert skill_check(skill) # should not fail g.deck.register_vcard(skill) rst = g.process_action(LaunchCard(p, [tgt], skill)) assert rst return act
def pasv_handle_card_selection(g, ilet, cards): if not ilet.categories: return [], '' g = Game.getgame() if cards: walk_wrapped(cards, True) from thb.cards import Skill if cards[0].is_card(Skill) and not thbactions.skill_check(cards[0]): raise ActionDisplayResult(False, u'您不能这样出牌', False, [], []) c = ilet.initiator.cond(cards) c1, text = ilet.initiator.ui_meta.choose_card_text(g, ilet.initiator, cards) assert c == c1, 'cond = %s, meta = %s' % (c, c1) if not c: raise ActionDisplayResult(False, text, False, [], []) return cards, text