コード例 #1
0
ファイル: remilia.py プロジェクト: yuansanjin/thbattle
    def handle(self, evt_type, act):
        if evt_type == 'action_shootdown' and isinstance(act, LaunchCard):
            if act.bypass_check: return act
            c = act.card
            if not c.is_card(AttackCard): return act

            src, tgt = act.source, act.target
            if not src.tags['scarlet_mist'] == 'nerf':
                return act

            dist = LaunchCard.calc_raw_distance(src, DummyCard())
            if dist[tgt] > 1:
                raise ScarletMistAttackLimit

        elif evt_type == 'post_calcdistance':
            src, c, dist = act

            if not c.is_card(AttackCard):
                return act

            if src.tags['scarlet_mist'] != 'buff':
                return act

            for k in dist:
                dist[k] = 0

        elif evt_type == 'action_after' and isinstance(act, Damage):
            src = act.source
            if not (src and src.tags['scarlet_mist'] == 'buff'): return act
            if src.life >= src.maxlife: return act

            g = Game.getgame()
            pact = g.action_stack[-1]
            if not isinstance(pact, Attack): return act
            if not pact.associated_card: return act

            g.process_action(Heal(src, src, act.amount))

        elif evt_type == 'action_apply' and isinstance(act, PrepareStage):
            tgt = act.target
            if not tgt.has_skill(ScarletMist): return act
            if not tgt.tags['scarlet_mist']: return act
            g = Game.getgame()
            g.process_action(ScarletMistEndAction(None, None))

        return act
コード例 #2
0
ファイル: remilia.py プロジェクト: feisuzhu/thbattle
    def handle(self, evt_type, act):
        if evt_type == 'action_shootdown' and isinstance(act, LaunchCard):
            if act.bypass_check: return act
            c = act.card
            if not c.is_card(AttackCard): return act

            src, tgt  = act.source, act.target
            if not src.tags['scarlet_mist'] == 'nerf':
                return act

            dist = LaunchCard.calc_raw_distance(src, DummyCard())
            if dist[tgt] > 1:
                raise ScarletMistAttackLimit

        elif evt_type == 'post_calcdistance':
            src, c, dist = act

            if not c.is_card(AttackCard):
                return act

            if src.tags['scarlet_mist'] != 'buff':
                return act

            for k in dist:
                dist[k] = 0

        elif evt_type == 'action_after' and isinstance(act, Damage):
            src = act.source
            if not (src and src.tags['scarlet_mist'] == 'buff'): return act
            if src.life >= src.maxlife: return act

            g = Game.getgame()
            pact = g.action_stack[-1]
            if not isinstance(pact, Attack): return act
            if not pact.associated_card: return act

            g.process_action(Heal(src, src, act.amount))

        elif evt_type == 'action_apply' and isinstance(act, PrepareStage):
            tgt = act.target
            if not tgt.has_skill(ScarletMist): return act
            if not tgt.tags['scarlet_mist']: return act
            g = Game.getgame()
            g.process_action(ScarletMistEndAction(None, None))

        return act
コード例 #3
0
ファイル: kanako.py プロジェクト: zzkklep/thbattle
    def target(g, p, tl):
        l = g.players.rotate_to(p)
        del l[0]

        dists = LaunchCard.calc_raw_distance(p, AttackCard())
        return ([t for t in l if not t.dead and dists[t] <= 1], True)