コード例 #1
0
ファイル: kaguya.py プロジェクト: GavinHill/thbattle
    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
コード例 #2
0
ファイル: kaguya.py プロジェクト: feisuzhu/thbattle
    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
コード例 #3
0
ファイル: inputlets.py プロジェクト: feisuzhu/thbattle
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
コード例 #4
0
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