Пример #1
0
# -*- coding: utf-8 -*-
from __future__ import absolute_import

# -- stdlib --
# -- third party --
# -- own --
from thb import thbkof
from thb.ui.ui_meta.common import gen_metafunc

# -- code --
__metaclass__ = gen_metafunc(thbkof)


class THBattleKOF:
    name = u'KOF模式'
    logo = 'thb-modelogo-kof'
    description = (
        u'|R游戏人数|r:2人\n'
        u'\n'
        u'|R选将模式|r:选将按照1-2-2-2-2-1来选择。\n'
        u'\n'
        u'|R游戏过程|r:选好角色后,将会翻开第一个角色进行对决,其他角色为隐藏。当有一方角色被击坠后,需弃置所有的牌(手牌、装备牌、判定区的牌),然后选择下一个出场的角色,并摸4张牌。\n'
        u'\n'
        u'|R胜利条件|r:当其中一方3名角色被击坠时,判对方胜出')

    params_disp = {}

    def ui_class():
        from thb.ui.view import THBattleKOFUI
        return THBattleKOFUI
Пример #2
0
# -*- coding: utf-8 -*-

# -- stdlib --
import random

# -- third party --
# -- own --
from thb import characters
from thb.ui.ui_meta.common import card_desc, gen_metafunc, passive_clickable
from thb.ui.ui_meta.common import passive_is_action_valid

# -- code --
__metaclass__ = gen_metafunc(characters.shinmyoumaru)


class MiracleMallet:
    # Skill
    name = u'万宝槌'
    description = u'当一名角色的判定牌生效前,你可以用一张点数大于此牌的牌替换之。'

    clickable = passive_clickable
    is_action_valid = passive_is_action_valid


class MiracleMalletAction:
    def effect_string(act):
        return u'|G【%s】|r将|G【%s】|r的判定结果改为%s。' % (act.source.ui_meta.name,
                                                 act.target.ui_meta.name,
                                                 card_desc(act.card))

    def sound_effect(act):
Пример #3
0
# -*- coding: utf-8 -*-

# -- stdlib --
import random

# -- third party --
# -- own --
from thb import actions, cards, characters
from thb.actions import ttags
from thb.ui.ui_meta.common import build_handcard, gen_metafunc, my_turn


# -- code --
__metaclass__ = gen_metafunc(characters.nitori)


class Dismantle:
    # Skill
    name = u'拆解'
    description = u'出牌阶段限一次,你可以|B重铸|r一名其他角色装备区里的一张装备牌,然后该角色摸一张牌。'

    def clickable(g):
        if ttags(g.me)['dismantle']:
            return False

        return my_turn()

    def is_action_valid(g, cl, tl):
        if cl[0].associated_cards:
            return (False, u'请不要选择牌!')
Пример #4
0
# -*- coding: utf-8 -*-
from __future__ import absolute_import

# -- stdlib --
# -- third party --
# -- own --
from thb import characters
from thb.ui.ui_meta.common import gen_metafunc, passive_clickable, passive_is_action_valid


# -- code --
__metaclass__ = gen_metafunc(characters.akari)


class AkariSkill:
    # Skill
    name = u'阿卡林'
    description = u'消失在画面里的能力。在开局之前没有人知道这是谁。'

    clickable = passive_clickable
    is_action_valid = passive_is_action_valid


class Akari:
    # Character
    name        = u'随机角色'
    title       = u'会是谁呢'

    port_image  = u'thb-portrait-akari'
Пример #5
0
# -*- coding: utf-8 -*-
from __future__ import absolute_import, division, print_function, unicode_literals

# -- stdlib --
import random

# -- third party --
# -- own --
from thb import characters
from thb.actions import ttags
from thb.ui.ui_meta.common import card_desc, gen_metafunc, my_turn, passive_clickable
from thb.ui.ui_meta.common import passive_is_action_valid


# -- code --
__metaclass__ = gen_metafunc(characters.keine)


class Devour:
    # Skill
    name = '噬史'
    description = (
        '一名角色的出牌阶段开始时,你可以弃置一张基本牌或装备牌,并根据其颜色发动相应效果:\n'
        '|B|R>> |r若为红色,你记录该角色当前的体力值\n'
        '|B|R>> |r若为黑色,你记录该角色当前的手牌数\n'
        '该角色的出牌阶段结束时,将其恢复至本回合记录时的状态。'
    )
    clickable = passive_clickable
    is_action_valid = passive_is_action_valid

Пример #6
0
# -*- coding: utf-8 -*-

# -- stdlib --
# -- third party --
# -- own --
from thb import actions, characters
from thb.ui.ui_meta.common import gen_metafunc, passive_clickable, passive_is_action_valid

# -- code --
__metaclass__ = gen_metafunc(characters.daiyousei)


class Daiyousei:
    # Character
    name = u'大妖精'
    title = u'全身萌点的保姆'
    illustrator = u'渚FUN'
    cv = u'简翎'

    port_image = u'thb-portrait-daiyousei'
    figure_image = u'thb-figure-daiyousei'
    miss_sound_effect = u'thb-cv-daiyousei_miss'


class DaiyouseiKOF:
    # Character
    name = u'大妖精'
    title = u'全身萌点的保姆'
    illustrator = u'渚FUN'
    cv = u'简翎'
Пример #7
0
# -*- coding: utf-8 -*-

# -- stdlib --
# -- third party --
# -- own --
from thb import actions, characters
from thb.ui.ui_meta.common import gen_metafunc, limit1_skill_used, passive_clickable
from thb.ui.ui_meta.common import passive_is_action_valid

# -- code --
__metaclass__ = gen_metafunc(characters.rumia)


class Darkness:
    # Skill
    name = u'黑暗'
    description = (
        u'出牌阶段限一次,你可以弃置一张牌并指定一名其他角色,令其选择一项:\n'
        u'|B|R>> |r对其攻击范围内另一名你指定的其他角色使用一张|G弹幕|r。\n'
        u'|B|R>> |r受到你造成的1点伤害。'
    )

    custom_ray = True

    def clickable(game):
        try:
            if limit1_skill_used('darkness_tag'):
                return False
            act = game.action_stack[-1]
            if isinstance(act, actions.ActionStage):
                return True
Пример #8
0
# -*- coding: utf-8 -*-

# -- stdlib --
# -- third party --
# -- own --
from thb import characters
from thb.ui.ui_meta.common import gen_metafunc, passive_clickable, passive_is_action_valid


# -- code --
__metaclass__ = gen_metafunc(characters.mima20150705)


class Mima20150705:
    # Character
    name        = u'魅魔'
    title       = u'魔闪的修罗'
    designer    = u'蝶之羽风暂留此'

    port_image        = u'thb-portrait-mima20150705'


class Tianyi:
    # Skill
    name = u'天仪'
    description = (
        u'你的回合内限一次,一张符卡生效前,你可以使其无效,视为你对该符卡指定的所有目标依次使用一张弹幕。\n'
        u'|B|R>> |r以此法使用的弹幕不受“一回合使用一次”的限制。'
    )

    clickable = passive_clickable
Пример #9
0
# -*- coding: utf-8 -*-

# -- stdlib --
# -- third party --
# -- own --
from thb import actions, cards, characters
from thb.ui.ui_meta.common import gen_metafunc
from utils import BatchList

# -- code --
__metaclass__ = gen_metafunc(characters.chen)


class FlyingSkanda:
    # Skill
    name = u'飞翔韦驮天'
    description = (
        u'出牌阶段限一次,你使用|G弹幕|r或单体符卡时,可以额外指定一个目标。\n'
        u'|B|R>> |r在线版本中,不能以此法使用|G人形操控|r'
    )

    def clickable(game):
        me = game.me
        if me.tags['flying_skanda'] >= me.tags['turn_count']: return False
        try:
            act = game.action_stack[-1]
            if isinstance(act, actions.ActionStage) and act.target is me:
                return True
        except IndexError:
            pass
        return False
Пример #10
0
# -*- coding: utf-8 -*-
# -- stdlib --
import random

# -- third party --
# -- own --
from thb import characters
from thb.ui.ui_meta.common import card_desc, gen_metafunc, passive_clickable
from thb.ui.ui_meta.common import passive_is_action_valid

# -- code --
__metaclass__ = gen_metafunc(characters.shikieiki)


class Trial:
    # Skill
    name = u'审判'
    description = u'每当一名角色的判定牌生效前,你可以打出一张牌代替之。'

    clickable = passive_clickable
    is_action_valid = passive_is_action_valid


class TrialAction:
    def effect_string(act):
        return u'幻想乡各地巫女妖怪纷纷表示坚决拥护|G【%s】|r将|G【%s】|r的判定结果修改为%s的有关决定!' % (
            act.source.ui_meta.name,
            act.target.ui_meta.name,
            card_desc(act.card)
        )
Пример #11
0
# -*- coding: utf-8 -*-

# -- stdlib --
# -- third party --
# -- own --
from thb import characters
from thb.ui.ui_meta.common import gen_metafunc, passive_clickable, passive_is_action_valid

# -- code --
__metaclass__ = gen_metafunc(characters.sp_flandre)


class SpFlandre:
    # Character
    name        = u'SP芙兰朵露'
    title       = u'玩坏你哦'
    illustrator = u'Vivicat@幻想梦斗符'
    cv          = u'shourei小N'

    port_image        = u'thb-portrait-sp_flandre'
    figure_image      = u'thb-figure-sp_flandre'
    miss_sound_effect = u'thb-cv-spflandre_miss'


class DestructionImpulse:
    # Skill
    name = u'破坏冲动'
    description = u'|B锁定技|r,结束阶段开始时,若你本回合没有造成过伤害,你失去1点残机并对距离最近的一名其他角色造成1点伤害。'

    clickable = passive_clickable
    is_action_valid = passive_is_action_valid
Пример #12
0
# -*- coding: utf-8 -*-

# -- stdlib --
import random

# -- third party --
# -- own --
from thb import characters
from thb.ui.ui_meta.common import gen_metafunc, meta_property, passive_clickable
from thb.ui.ui_meta.common import passive_is_action_valid

# -- code --
__metaclass__ = gen_metafunc(characters.kaguya)


class Kaguya:
    # Character
    name        = u'蓬莱山辉夜'
    title       = u'永远的公主殿下'
    illustrator = u'噗呼噗呼@星の妄想乡'
    cv          = u'shourei小N'

    port_image        = u'thb-portrait-kaguya'
    figure_image      = u'thb-figure-kaguya'
    miss_sound_effect = u'thb-cv-kaguya_miss'


class Dilemma:
    # Skill
    name = u'难题'
    description = u'每当一名角色令你回复1点残机后,你可以令其摸一张牌;每当你受到一次伤害后,你可以令伤害来源选择一项:|B|R>> |r交给你一张方块牌,|B|R>> |r失去1点残机。'
Пример #13
0
# -*- coding: utf-8 -*-

# -- stdlib --
# -- third party --
# -- own --
from thb import characters
from thb.actions import ttags
from thb.ui.ui_meta.common import card_desc, gen_metafunc, my_turn, passive_clickable
from thb.ui.ui_meta.common import passive_is_action_valid

# -- code --
__metaclass__ = gen_metafunc(characters.cirno)


class PerfectFreeze:
    # Skill
    name = u'完美冻结'
    description = u'每当你使用|G弹幕|r或|G弹幕战|r对其他角色造成伤害时,你可以防止此次伤害,并令该角色弃置一张牌,若其弃置的不为装备区的牌,其失去1点残机。'

    clickable = passive_clickable
    is_action_valid = passive_is_action_valid


class CirnoDropCards:
    def effect_string(act):
        return u'|G【%s】|r弃置了|G【%s】|r的%s。' % (
            act.source.ui_meta.name,
            act.target.ui_meta.name,
            card_desc(act.cards),
        )
Пример #14
0
# -*- coding: utf-8 -*-
from __future__ import absolute_import

# -- stdlib --
# -- third party --
# -- own --
from thb import thb3v3
from thb.ui.ui_meta.common import gen_metafunc


# -- code --
__metaclass__ = gen_metafunc(thb3v3)


class THBattle:
    name = u'3v3模式'
    logo = 'thb-modelogo-3v3'
    description = (
        u'|R游戏人数|r:6人\n'
        u'\n'
        u'阵营分为|!B博丽|r和|!O守矢|r,每个阵营3名玩家,交错入座。\n'
        u'由ROLL点最高的人开始,按照顺时针1-2-2-1的方式选将。\n'
        u'选将完成由ROLL点最高的玩家开始行动。\n'
        u'ROLL点最高的玩家开局摸3张牌,其余玩家开局摸4张牌。\n'
        u'\n'
        u'|R胜利条件|r:击坠所有对方阵营玩家。'
    )
    params_disp = {
        'random_seat': {
            'desc': u'随机座位阵营',
            'options': [
Пример #15
0
# -*- coding: utf-8 -*-

# -- stdlib --
# -- third party --
# -- own --
from thb import cards as thbcards, characters
from thb.ui.ui_meta.common import card_desc, gen_metafunc, passive_clickable
from thb.ui.ui_meta.common import passive_is_action_valid


# -- code --
__metaclass__ = gen_metafunc(characters.kyouko)


class Kyouko:
    # Character
    name        = u'幽谷响子'
    title       = u'诵经的山彦'
    illustrator = u'月见'
    designer    = u'蝶之羽风暂留此'
    cv          = u'小羽'

    port_image        = u'thb-portrait-kyouko'
    figure_image      = u'thb-figure-kyouko'
    miss_sound_effect = u'thb-cv-kyouko_miss'


class Echo:
    # Skill
    name = u'回响'
    description = u'每当你受到一次伤害后,你可以获得对你造成伤害的牌,若此牌为|G弹幕|r,你可以改为令一名其他角色获得之。'
Пример #16
0
# -*- coding: utf-8 -*-

# -- stdlib --
# -- third party --
# -- own --
from thb import characters
from thb.ui.ui_meta.common import gen_metafunc, limit1_skill_used, my_turn

# -- code --
__metaclass__ = gen_metafunc(characters.marisa)


class Marisa:
    # Character
    name        = u'雾雨魔理沙'
    title       = u'绝非普通的强盗少女'
    illustrator = u'霏茶'
    cv          = u'君寻'

    port_image        = u'thb-portrait-marisa'
    figure_image      = u'thb-figure-marisa'
    miss_sound_effect = u'thb-cv-marisa_miss'


class Daze:
    name = u'打贼'

    def effect_string(act):
        # for LaunchCard.ui_meta.effect_string
        return u'|G【%s】|r喊道:“打贼啦!”向|G【%s】|r使用了|G弹幕|r。' % (
            act.source.ui_meta.name,
Пример #17
0
# -*- coding: utf-8 -*-

# -- stdlib --
# -- third party --
# -- own --
from thb import cards as thbcards, characters
from thb.ui.ui_meta.common import card_desc, gen_metafunc, passive_clickable
from thb.ui.ui_meta.common import passive_is_action_valid


# -- code --
__metaclass__ = gen_metafunc(characters.kyouko)


class Kyouko:
    # Character
    name        = u'幽谷响子'
    title       = u'诵经的山彦'
    illustrator = u'月见'
    designer    = u'蝶之羽风暂留此'
    cv          = u'小羽'

    port_image        = u'thb-portrait-kyouko'
    figure_image      = u'thb-figure-kyouko'
    miss_sound_effect = u'thb-cv-kyouko_miss'


class Echo:
    # Skill
    name = u'回响'
    description = u'每当你受到一次伤害后,你可以获得对你造成伤害的牌,若此牌为|G弹幕|r,你可以改为令一名其他角色获得之。'
Пример #18
0
# -*- coding: utf-8 -*-
from __future__ import absolute_import

# -- stdlib --
import random

# -- third party --
# -- own --
from thb import characters
from thb.actions import ttags
from thb.ui.ui_meta.common import gen_metafunc, my_turn, passive_clickable, passive_is_action_valid

# -- code --
__metaclass__ = gen_metafunc(characters.sanae)


class Sanae:
    # Character
    name = u'东风谷早苗'
    title = u'常识满满的现人神'
    illustrator = u'小D@星の妄想乡'
    cv = u'VV'

    port_image = u'thb-portrait-sanae'
    figure_image = u'thb-figure-sanae'
    miss_sound_effect = u'thb-cv-sanae_miss'


class SanaeKOF:
    # Character
    name = u'东风谷早苗'
Пример #19
0
# -*- coding: utf-8 -*-

# -- stdlib --
# -- third party --
# -- own --
from thb import cards, characters
from thb.ui.ui_meta.common import card_desc, gen_metafunc, limit1_skill_used, my_turn
from thb.ui.ui_meta.common import passive_clickable, passive_is_action_valid

# -- code --
__metaclass__ = gen_metafunc(characters.kokoro)


class Kokoro:
    # Character
    name = u'秦心'
    title = u'表情丰富的扑克脸'
    illustrator = u'Takibi'
    cv = u'小羽/VV'

    port_image = u'thb-portrait-kokoro'
    figure_image = u'thb-figure-kokoro'
    miss_sound_effect = u'thb-cv-kokoro_miss'


class KokoroKOF:
    # Character
    name = u'秦心'
    title = u'表情丰富的扑克脸'
    illustrator = u'Takibi'
    cv = u'小羽/VV'
Пример #20
0
# -*- coding: utf-8 -*-

# -- stdlib --
# -- third party --
# -- own --
from thb import characters
from thb.actions import ttags
from thb.ui.ui_meta.common import card_desc, gen_metafunc, my_turn, passive_clickable
from thb.ui.ui_meta.common import passive_is_action_valid

# -- code --
__metaclass__ = gen_metafunc(characters.cirno)


class PerfectFreeze:
    # Skill
    name = u'完美冻结'
    description = u'每当你使用|G弹幕|r或|G弹幕战|r对其他角色造成伤害时,你可以防止此次伤害,并令该角色弃置一张牌,若其弃置的不为装备区的牌,其失去1点体力。'

    clickable = passive_clickable
    is_action_valid = passive_is_action_valid


class CirnoDropCards:
    def effect_string(act):
        return u'|G【%s】|r弃置了|G【%s】|r的%s。' % (
            act.source.ui_meta.name,
            act.target.ui_meta.name,
            card_desc(act.cards),
        )
Пример #21
0
# -*- coding: utf-8 -*-

# -- stdlib --
# -- third party --
# -- own --
from thb import cards, characters
from thb.ui.ui_meta.common import gen_metafunc, my_turn

# -- code --
__metaclass__ = gen_metafunc(characters.parsee)


class Parsee:
    # Character
    name        = u'水桥帕露西'
    title       = u'地壳下的嫉妒心'
    illustrator = u'和茶'
    cv          = u'小羽'

    port_image        = u'thb-portrait-parsee'
    figure_image      = u'thb-figure-parsee'
    miss_sound_effect = u'thb-cv-parsee_miss'


class Envy:
    # Skill
    name = u'嫉妒'
    description = u'你可以将一张黑色牌当|G城管执法|r使用;每当距离1的其他角色的方块牌被你使用的|G城管执法|r弃置而置入弃牌堆后,你可以获得之。'

    def clickable(game):
        me = game.me
Пример #22
0
# -*- coding: utf-8 -*-

# -- stdlib --
import random

# -- third party --
# -- own --
from thb import characters
from thb.ui.ui_meta.common import gen_metafunc, passive_clickable, passive_is_action_valid

# -- code --
__metaclass__ = gen_metafunc(characters.patchouli)


class Library:
    # Skill
    name = u'图书'
    description = u'|B锁定技|r,每当你使用非延时符卡时,你摸一张牌;你使用符卡无距离限制。'

    clickable = passive_clickable
    is_action_valid = passive_is_action_valid


class LibraryDrawCards:
    def effect_string(act):
        return u'|G【%s】|r发动了|G图书|r技能,摸1张牌。' % (act.source.ui_meta.name, )

    def sound_effect(act):
        return random.choice([
            'thb-cv-patchouli_library1',
            'thb-cv-patchouli_library2',
Пример #23
0
# -*- coding: utf-8 -*-

# -- stdlib --
# -- third party --
# -- own --
from thb import cards, characters
from thb.ui.ui_meta.common import build_handcard, gen_metafunc, my_turn, passive_clickable
from thb.ui.ui_meta.common import passive_is_action_valid

# -- code --
__metaclass__ = gen_metafunc(characters.yuuka)


class ReversedScales:
    # Skill
    name = u'逆鳞'
    description = u'每当你成为其他角色使用的单体符卡效果目标时,你可以将其视为|G弹幕战|r效果;你的回合外,你可以将一张手牌当做|G弹幕|r使用或打出。'

    def clickable(game):
        me = game.me
        if my_turn():
            return False

        if not (me.cards or me.showncards):
            return False

        try:
            act = game.action_stack[-1]
            return act.cond([build_handcard(cards.AttackCard)])
        except:
            pass
Пример #24
0
# -*- coding: utf-8 -*-

# -- stdlib --
# -- third party --
# -- own --
from thb import actions, cards, characters
from thb.ui.ui_meta.common import gen_metafunc
from utils import BatchList

# -- code --
__metaclass__ = gen_metafunc(characters.chen)


class FlyingSkanda:
    # Skill
    name = u'飞翔韦驮天'
    description = (
        u'出牌阶段限一次,你使用|G弹幕|r或单体符卡时,可以额外指定一个目标。\n'
        u'|B|R>> |r在线版本中,不能以此法使用|G人形操控|r'
    )

    def clickable(game):
        me = game.me
        if me.tags['flying_skanda'] >= me.tags['turn_count']: return False
        try:
            act = game.action_stack[-1]
            if isinstance(act, actions.ActionStage) and act.target is me:
                return True
        except IndexError:
            pass
        return False
Пример #25
0
# -*- coding: utf-8 -*-

# -- stdlib --
# -- third party --
# -- own --
from thb import characters
from thb.ui.ui_meta.common import card_desc, gen_metafunc, passive_clickable
from thb.ui.ui_meta.common import passive_is_action_valid
from utils import BatchList


# -- code --
__metaclass__ = gen_metafunc(characters.shizuha)


class AutumnWindEffect:
    def effect_string(act):
        return u'|G秋风|r带走了|G【%s】|r的%s。' % (
            act.target.ui_meta.name,
            card_desc(act.card),
        )


class AutumnWindAction:

    def effect_string_before(act):
        tl = BatchList(act.target_list)
        return u'当|G秋风|r吹起,|G【%s】|r连牌都拿不住的时候,才回想起,妈妈说的对,要穿秋裤。' % (
            u'】|r、|G【'.join(tl.ui_meta.name),
        )
Пример #26
0
# -*- coding: utf-8 -*-

# -- stdlib --
import random

# -- third party --
# -- own --
from thb import actions, cards, characters
from thb.actions import ttags
from thb.ui.ui_meta.common import build_handcard, gen_metafunc, my_turn

# -- code --
__metaclass__ = gen_metafunc(characters.nitori)


class Dismantle:
    # Skill
    name = u'拆解'
    description = u'出牌阶段限一次,你可以|B重铸|r一名其他角色装备区里的一张装备牌,然后该角色摸一张牌。'

    def clickable(g):
        if ttags(g.me)['dismantle']:
            return False

        return my_turn()

    def is_action_valid(g, cl, tl):
        if cl[0].associated_cards:
            return (False, u'请不要选择牌!')

        if not len(tl):
Пример #27
0
# -*- coding: utf-8 -*-

# -- stdlib --
# -- third party --
# -- own --
from thb import characters
from thb.ui.ui_meta.common import gen_metafunc, passive_clickable, passive_is_action_valid

# -- code --
__metaclass__ = gen_metafunc(characters.mokou)


class Mokou:
    # Character
    name        = u'藤原妹红'
    title       = u'FFF团资深团员'
    illustrator = u'六仔OwO'
    cv          = u'小羽'

    port_image        = u'thb-portrait-mokou'
    figure_image      = u'thb-figure-mokou'
    miss_sound_effect = u'thb-cv-mokou_miss'


class Ashes:
    # Skill
    name = u'浴火'
    description = u'结束阶段开始时,你可以失去1点体力,然后摸两张牌。'

    clickable = passive_clickable
    is_action_valid = passive_is_action_valid
Пример #28
0
# -*- coding: utf-8 -*-

# -- stdlib --
import random

# -- third party --
# -- own --
from thb import characters
from thb.ui.ui_meta.common import gen_metafunc, passive_is_action_valid, passive_clickable

# -- code --

__metaclass__ = gen_metafunc(characters.reisen)


class Reisen:
    # Character
    name        = u'铃仙'
    title       = u'永琳的首席药品品尝官'
    illustrator = u'镜_Area@幻想梦斗符'
    cv          = u'小羽'

    port_image        = u'thb-portrait-reisen'
    figure_image      = u'thb-figure-reisen'
    miss_sound_effect = u'thb-cv-reisen_miss'


class ReisenKOF:
    # Character
    name        = u'铃仙'
    title       = u'永琳的首席药品品尝官'
Пример #29
0
# -*- coding: utf-8 -*-
from __future__ import absolute_import

# -- stdlib --
# -- third party --
# -- own --
from thb import thbnewbie
from thb.ui.ui_meta.common import gen_metafunc

# -- code --
__metaclass__ = gen_metafunc(thbnewbie)


class THBattleNewbie:
    name = u'琪露诺的完美THB教室'
    logo = 'thb-modelogo-newbie'
    params_disp = {}
    description = (u'|R游戏人数|r:1人+1NPC。\n'
                   u'\n'
                   u'|G游戏目标|r:让琪露诺带你飞。\n'
                   u'\n'
                   u'|G胜利条件|r:完整地完成教学,不掉线。\n'
                   u'\n').strip()

    def ui_class():
        from thb.ui.view import THBattleNewbieUI
        return THBattleNewbieUI

    T = thbnewbie.Identity.TYPE
    identity_table = {
        T.HIDDEN: u'?',
Пример #30
0
# -*- coding: utf-8 -*-

# -- stdlib --
# -- third party --
# -- own --
from thb import characters
from thb.actions import ttags
from thb.ui.ui_meta.common import gen_metafunc, my_turn, passive_clickable
from thb.ui.ui_meta.common import passive_is_action_valid

# -- code --
__metaclass__ = gen_metafunc(characters.satori20150804)


class MindReadLimit:
    target_independent = True
    shootdown_message = u'【读心】你不能使用明牌区的黑色牌'


class MindRead:
    name = u'读心'
    description = u'出牌阶段限一次,你可以将一名角色的一张手牌置于明牌区,且该角色当前回合内无法使用明牌区的黑色牌。'

    def clickable(game):
        me = game.me
        return my_turn() and not ttags(me)['mind_read']

    def is_action_valid(g, cl, tl):
        if len(tl) != 1:
            return (False, u'请选择读心对象…')
Пример #31
0
# -*- coding: utf-8 -*-

# -- stdlib --
# -- third party --
# -- own --
from thb import actions, cards, characters
from thb.ui.ui_meta.common import gen_metafunc, passive_clickable, passive_is_action_valid

# -- code --
__metaclass__ = gen_metafunc(characters.kogasa)


class Jolly:
    # Skill
    name = u'愉快'
    description = u'|B锁定技|r,摸牌阶段摸牌后,你令一名角色摸一张牌。'

    clickable = passive_clickable
    is_action_valid = passive_is_action_valid


class JollyDrawCard:
    def effect_string(act):
        return u'|G【%s】|r高兴地让|G【%s】|r摸了%d张牌~' % (
            act.source.ui_meta.name,
            act.target.ui_meta.name,
            act.amount,
        )

    def sound_effect(act):
        return 'thb-cv-kogasa_jolly'
Пример #32
0
# -*- coding: utf-8 -*-

# -- stdlib --
# -- third party --
# -- own --
from thb import characters
from thb.ui.ui_meta.common import gen_metafunc, passive_clickable, passive_is_action_valid

# -- code --
__metaclass__ = gen_metafunc(characters.tewi)


class Luck:
    # Skill
    name = u'幸运'
    description = u'|B锁定技|r,每当你失去最后的手牌时,你摸两张牌。'

    clickable = passive_clickable
    is_action_valid = passive_is_action_valid


class LuckDrawCards:
    def effect_string(act):
        return u'|G【%s】|r觉得手上没有牌就输了,于是又摸了2张牌。' % (act.source.ui_meta.name, )

    def sound_effect(act):
        return 'thb-cv-tewi_lucky'


class Tewi:
    # Character
Пример #33
0
# -*- coding: utf-8 -*-

# -- stdlib --
# -- third party --
# -- own --
from thb import characters
from thb.ui.ui_meta.common import gen_metafunc, passive_clickable, passive_is_action_valid

# -- code --
__metaclass__ = gen_metafunc(characters.tewi)


class Luck:
    # Skill
    name = u'幸运'
    description = u'|B锁定技|r,每当你失去最后的手牌时,你摸两张牌。'

    clickable = passive_clickable
    is_action_valid = passive_is_action_valid


class LuckDrawCards:
    def effect_string(act):
        return u'|G【%s】|r觉得手上没有牌就输了,于是又摸了2张牌。' % (
            act.source.ui_meta.name,
        )

    def sound_effect(act):
        return 'thb-cv-tewi_lucky'

Пример #34
0
# -*- coding: utf-8 -*-

# -- stdlib --
import time

# -- third party --
# -- own --
from thb import actions, characters
from thb.ui.ui_meta.common import gen_metafunc, passive_clickable, passive_is_action_valid

# -- code --
__metaclass__ = gen_metafunc(characters.rinnosuke)


class Netoru:
    # Skill
    name = u'寝取'
    description = u'出牌阶段限一次,你可以弃置两张手牌并指定一名已受伤的其他角色,你与其各回复1点残机'

    def clickable(game):
        me = game.me
        try:
            if me.tags['netoru_tag'] >= me.tags['turn_count']:
                return False
            act = game.action_stack[-1]
            if isinstance(act, actions.ActionStage):
                return True
        except IndexError:
            pass
        return False
Пример #35
0
# -*- coding: utf-8 -*-
from __future__ import absolute_import

# -- stdlib --
# -- third party --
# -- own --
from thb import cards, thbidentity
from thb.actions import ttags
from thb.ui.ui_meta.common import card_desc, gen_metafunc, my_turn, passive_clickable
from thb.ui.ui_meta.common import passive_is_action_valid


# -- code --
__metaclass__ = gen_metafunc(thbidentity)


class THBattleIdentity:
    name = u'8人身份场'
    logo = 'thb-modelogo-8id'
    description = (
        u'|R游戏人数|r:8人\n'
        u'\n'
        u'|R身份分配|r:1|!RBOSS|r、2|!O道中|r、1|!G黑幕|r、4|!B城管|r\n'
        u'\n'
        u'|!RBOSS|r:|!RBOSS|r的体力上限+1。游戏开局时展示身份,并获得BOSS技。胜利条件为击坠所有|!B城管|r以及|!G黑幕|r。\n'
        u'\n'
        u'|!O道中|r:胜利条件为击坠所有|!B城管|r以及|!G黑幕|r。\n'
        u'\n'
        u'|!B城管|r:胜利条件为击坠|!RBOSS|r。当|!B城管|r被击坠时,击坠者摸3张牌。\n'
        u'\n'
        u'|!G黑幕|r:胜利条件为在|!B城管|r全部被击坠的状况下击坠|!RBOSS|r。\n'
Пример #36
0
# -*- coding: utf-8 -*-
from __future__ import absolute_import

# -- stdlib --
from collections import OrderedDict

# -- third party --
# -- own --
from thb import thb2v2
from thb.ui.ui_meta.common import gen_metafunc


# -- code --
__metaclass__ = gen_metafunc(thb2v2)


class THBattle2v2:
    name = u'2v2模式'
    logo = 'thb-modelogo-2v2'
    description = (
        u'|R游戏人数|r:4人\n'
        u'\n'
        u'|G座次|r:\n'
        u'创建房间时可选固定阵容或随机阵容。\n'
        u'Roll点,由点数最高的玩家为1号位,然后对面点数最大的为2号位,按1-2-2-1的顺序逆时针行动。\n'
        u'\n'
        u'|G选将|r:\n'
        u'从角色堆里选出20名角色,由1号位开始,每人选择Ban掉其中一个角色。\n'
        u'每人随机从剩下的卡牌中获得4张角色卡作为备选(其中一张为阿卡林)\n'
        u'玩家可以选择其中一名角色进行游戏\n'
        u'\n'
Пример #37
0
# -*- coding: utf-8 -*-

# -- stdlib --
# -- third party --
# -- own --
from thb import characters
from thb.ui.ui_meta.common import gen_metafunc, passive_clickable
from thb.ui.ui_meta.common import passive_is_action_valid

# -- code --
__metaclass__ = gen_metafunc(characters.medicine)


class Medicine:
    # Character
    name        = u'梅蒂欣'
    title       = u'小小的甜蜜毒药'
    illustrator = u'和茶'
    cv          = u'VV'

    port_image        = u'thb-portrait-medicine'
    figure_image      = u'thb-figure-medicine'
    miss_sound_effect = u'thb-cv-medicine_miss'

    notes = u'|RKOF不平衡角色|r'


class Ciguatera:
    # Skill
    name = u'神经之毒'
    description = u'一名角色准备阶段开始时,你可以弃置一张黑色牌,令其失去1点残机并获得“喝醉”状态。'
Пример #38
0
# -*- coding: utf-8 -*-
from __future__ import absolute_import, division, print_function, unicode_literals

# -- stdlib --
import random

# -- third party --
# -- own --
from thb import characters
from thb.actions import ttags
from thb.ui.ui_meta.common import card_desc, gen_metafunc, my_turn, passive_clickable
from thb.ui.ui_meta.common import passive_is_action_valid

# -- code --
__metaclass__ = gen_metafunc(characters.keine)


class Teach:
    # Skill
    name = '授业'
    description = ('出牌阶段限一次,你可以重铸一张牌,然后将一张牌交给一名其它角色,其选择一项:'
                   '|B|R>> |r使用一张牌,|B|R>> |r重铸一张牌。')

    def clickable(g):
        return my_turn() and not ttags(g.me)['teach_used']

    def is_action_valid(g, cl, tl):
        cards = cl[0].associated_cards

        if not cards or len(cards) != 1:
            return False, '请选择一张牌(重铸)'
Пример #39
0
# -*- coding: utf-8 -*-

# -- stdlib --
import random

# -- third party --
# -- own --
from thb import characters
from thb.ui.ui_meta.common import G, card_desc, gen_metafunc, passive_clickable
from thb.ui.ui_meta.common import passive_is_action_valid


# -- code --
__metaclass__ = gen_metafunc(characters.alice)


class Alice:
    # Character
    name        = u'爱丽丝'
    title       = u'七色的人偶使'
    illustrator = u'霏茶'
    cv          = u'小舞'

    port_image        = 'thb-portrait-alice'
    figure_image      = 'thb-figure-alice'
    miss_sound_effect = 'thb-cv-alice_miss'


class LittleLegion:
    # Skill
    name = u'小小军势'
Пример #40
0
# -*- coding: utf-8 -*-

# -- stdlib --
# -- third party --
# -- own --
from thb import actions, cards, characters
from thb.ui.ui_meta.common import gen_metafunc, limit1_skill_used

# -- code --
__metaclass__ = gen_metafunc(characters.eirin)


class FirstAid:
    # Skill
    name = u"急救"
    description = u"你可以将一张红色牌当|G麻薯|r对濒死角色使用。"

    def clickable(game):
        try:
            act = game.action_stack[-1]
        except IndexError:
            return False

        if isinstance(act, cards.AskForHeal):
            return True

        return False

    def is_complete(g, cl):
        skill = cl[0]
        acards = skill.associated_cards
Пример #41
0
# -- stdlib --
from functools import wraps
import logging

# -- third party --
# -- own --
from game.autoenv import Game
from thb import actions as thbactions, cards as thbcards, inputlets
from thb.ui.ui_meta.common import gen_metafunc

# -- code --
log = logging.getLogger('Inputlets UI Meta')

# -----BEGIN INPUTLETS UI META-----
__metaclass__ = gen_metafunc(inputlets)


class ActionDisplayResult(Exception):
    __slots__ = (
        'valid',
        'prompt',
        'pl_selecting',
        'pl_disabled',
        'pl_selected',
    )

    def __init__(self, valid, prompt, pl_selecting, pl_disabled, pl_selected):
        Exception.__init__(self)
        self.valid = valid
        self.prompt = prompt
Пример #42
0
# -*- coding: utf-8 -*-

# -- stdlib --
# -- third party --
# -- own --
from thb import actions, cards, characters
from thb.ui.ui_meta.common import build_handcard, gen_metafunc, passive_clickable
from thb.ui.ui_meta.common import passive_is_action_valid

# -- code --
__metaclass__ = gen_metafunc(characters.meirin)


class RiverBehind:
    # Skill
    name = u'背水'
    description = (
        u'|B觉醒技|r,准备阶段开始时,若你残机数为全场最低或之一且不大于2时,你减1点残机上限并获得技能|R太极|r。\n'
        u'|B|R>> |b太极|r:你可将|G弹幕|r当|G擦弹|r,|G擦弹|r当|G弹幕|r使用或打出。')

    clickable = passive_clickable
    is_action_valid = passive_is_action_valid


class Taichi:
    # Skill
    name = u'太极'
    description = u'你可将|G弹幕|r当|G擦弹|r,|G擦弹|r当|G弹幕|r使用或打出。'

    def clickable(game):
        try:
Пример #43
0
# -*- coding: utf-8 -*-
from __future__ import absolute_import

# -- stdlib --
import random

# -- third party --
# -- own --
from thb import characters
from thb.ui.ui_meta.common import gen_metafunc, passive_clickable, passive_is_action_valid

# -- code --
__metaclass__ = gen_metafunc(characters.momiji)


class Momiji:
    # Character
    name = u'犬走椛'
    title = u'山中的千里眼'
    illustrator = u'和茶'
    cv = u'简翎'

    port_image = 'thb-portrait-momiji'
    figure_image = 'thb-figure-momiji'
    miss_sound_effect = 'thb-cv-momiji_miss'


class Sentry:
    # Skill
    name = u'哨戒'
    description = u'你攻击范围内的一名其它角色的出牌阶段开始时,你可以对其使用一张|G弹幕|r。'
Пример #44
0
# -*- coding: utf-8 -*-
from __future__ import absolute_import

# -- stdlib --
import random

# -- third party --
# -- own --
from thb import actions, cards, characters
from thb.ui.ui_meta.common import card_desc, gen_metafunc, limit1_skill_used, passive_clickable
from thb.ui.ui_meta.common import passive_is_action_valid

# -- code --
__metaclass__ = gen_metafunc(characters.reimu)


class Flight:
    # Skill
    name = u'飞行'
    clickable = passive_clickable
    is_action_valid = passive_is_action_valid


class SpiritualAttack:
    name = u'灵击'

    def clickable(g):
        me = g.me

        if not (me.cards or me.showncards): return False
Пример #45
0
# -*- coding: utf-8 -*-

# -- stdlib --
# -- third party --
# -- own --
from thb import characters
from thb.ui.ui_meta.common import gen_metafunc, passive_clickable
from thb.ui.ui_meta.common import passive_is_action_valid

# -- code --
__metaclass__ = gen_metafunc(characters.medicine)


class Medicine:
    # Character
    name = u'梅蒂欣'
    title = u'小小的甜蜜毒药'
    illustrator = u'和茶'
    cv = u'VV'

    port_image = u'thb-portrait-medicine'
    figure_image = u'thb-figure-medicine'
    miss_sound_effect = u'thb-cv-medicine_miss'

    notes = u'|RKOF不平衡角色|r'


class Ciguatera:
    # Skill
    name = u'神经之毒'
    description = u'一名角色准备阶段开始时,你可以弃置一张黑色牌,令其失去1点残机并获得“喝醉”状态。'
Пример #46
0
# -*- coding: utf-8 -*-

# -- stdlib --
# -- third party --
# -- own --
from thb import cards, characters
from thb.ui.ui_meta.common import gen_metafunc, passive_clickable, passive_is_action_valid

# -- code --
__metaclass__ = gen_metafunc(characters.nazrin)


class Nazrin:
    # Character
    name = u'纳兹琳'
    title = u'探宝的小小大将'
    illustrator = u'月见'
    cv = u'小羽'

    port_image = u'thb-portrait-nazrin'
    figure_image = u'thb-figure-nazrin'
    miss_sound_effect = u'thb-cv-nazrin_miss'


class NazrinKOF:
    # Character
    name = u'纳兹琳'
    title = u'探宝的小小大将'
    illustrator = u'月见'
    cv = u'小羽'
Пример #47
0
# -*- coding: utf-8 -*-

# -- stdlib --
# -- third party --
# -- own --
from thb import actions, cards
from thb.actions import ttags
from thb.ui.ui_meta.common import G, gen_metafunc

# -- code --
__metaclass__ = gen_metafunc(cards)


class AttackCard:
    # action_stage meta
    image = 'thb-card-attack'
    name = u'弹幕'
    description = (
        u'|R弹幕|r\n\n'
        u'出牌阶段,消耗1点干劲,对你攻击范围内的一名其他角色使用,对该角色造成1点伤害。\n'
        u'|B|R>> |r默认情况下,你的攻击范围是1。\n'
        u'|B|R>> |r干劲在出牌阶段开始时恢复成1点。\n'
        u'\n'
        u'|DB(画师:霏茶,CV:VV)|r'
    )

    def is_action_valid(g, cl, target_list):
        if not target_list:
            return (False, u'请选择弹幕的目标')

        return (True, u'来一发!')
Пример #48
0
# -*- coding: utf-8 -*-

# -- stdlib --
# -- third party --
# -- own --
from thb import characters
from thb.ui.ui_meta.common import gen_metafunc, passive_clickable, passive_is_action_valid

# -- code --
__metaclass__ = gen_metafunc(characters.flandre)


class Flandre:
    # Character
    name        = u'芙兰朵露'
    title       = u'恶魔之妹'
    illustrator = u'月见'
    cv          = u'shourei小N'

    port_image        = u'thb-portrait-flandre'
    figure_image      = u'thb-figure-flandre'
    miss_sound_effect = u'thb-cv-flandre_miss'


class CriticalStrike:
    # Skill
    name = u'狂咲'
    description = (
        u'摸牌阶段,你可以少摸一张牌,若如此做,你获得以下效果直到回合结束:\n'
        u'|B|R>> |r当你没有干劲时,你可以对本阶段内没有成为过|G弹幕|r目标的其他角色使用|G弹幕|r。\n'
        u'|B|R>> |r你为伤害来源的|G弹幕|r和|G弹幕战|r造成的伤害+1。'
Пример #49
0
# -*- coding: utf-8 -*-

# -- stdlib --
# -- third party --
# -- own --
from thb import cards
from thb.ui.ui_meta.common import gen_metafunc

# -- code --
__metaclass__ = gen_metafunc(cards)


class CardList:
    lookup = {
        'cards': u'手牌区',
        'showncards': u'明牌区',
        'equips': u'装备区',
        'fatetell': u'判定区',
        'faiths': u'信仰',

        # for skills
        'yukari_dimension': u'隙间',
        'meirin_qiliao': u'气',
        'momiji_sentry_cl': u'哨戒',
    }


class HiddenCard:
    # action_stage meta
    image = 'thb-card-hidden'
    name = u'隐藏卡片'
Пример #50
0
# -*- coding: utf-8 -*-
from __future__ import absolute_import

# -- stdlib --
# -- third party --
# -- own --
from thb import thb3v3
from thb.ui.ui_meta.common import gen_metafunc

# -- code --
__metaclass__ = gen_metafunc(thb3v3)


class THBattle:
    name = u'3v3模式'
    logo = 'thb-modelogo-3v3'
    description = (u'|R游戏人数|r:6人。\n'
                   u'\n'
                   u'阵营分为|!B博丽|r和|!O守矢|r,每个阵营3名玩家,交错入座。\n'
                   u'由ROLL点最高的玩家开始,按照顺时针1-2-2-1的方式,从20个角色中进行公开、排他的选择。\n'
                   u'角色选择完成后,由ROLL点最高的玩家开始行动。\n'
                   u'ROLL点最高的玩家开局摸3张牌,其余玩家开局摸4张牌。\n'
                   u'\n'
                   u'|R胜利条件|r:击坠对方阵营所有角色。')
    params_disp = {
        'random_seat': {
            'desc': u'随机座位阵营',
            'options': [
                (u'固定', False),
                (u'随机', True),
            ],
Пример #51
0
# -*- coding: utf-8 -*-

# -- stdlib --
# -- third party --
# -- own --
from thb import actions, characters
from thb.ui.ui_meta.common import card_desc, gen_metafunc, passive_clickable
from thb.ui.ui_meta.common import passive_is_action_valid

# -- code --
__metaclass__ = gen_metafunc(characters.kanako)


class Kanako:
    # Character
    name = u'八坂神奈子'
    title = u'山丘与湖泊的化身'
    illustrator = u'和茶'
    cv = u'北斗夜/VV'

    port_image = u'thb-portrait-kanako'
    figure_image = u'thb-figure-kanako'
    miss_sound_effect = u'thb-cv-kanako_miss'

    notes = u'|RKOF模式不可用|r'


class KanakoKOF:
    # Character
    name = u'八坂神奈子'
    title = u'山丘与湖泊的化身'
Пример #52
0
# -*- coding: utf-8 -*-

# -- stdlib --
# -- third party --
# -- own --
from thb import characters
from thb.ui.ui_meta.common import gen_metafunc, limit1_skill_used, my_turn

# -- code --
__metaclass__ = gen_metafunc(characters.marisa)


class Marisa:
    # Character
    name = u'雾雨魔理沙'
    title = u'绝非普通的强盗少女'
    illustrator = u'霏茶'
    cv = u'君寻'

    port_image = u'thb-portrait-marisa'
    figure_image = u'thb-figure-marisa'
    miss_sound_effect = u'thb-cv-marisa_miss'


class Daze:
    name = u'打贼'

    def effect_string(act):
        # for LaunchCard.ui_meta.effect_string
        return u'|G【%s】|r喊道:“打贼啦!”向|G【%s】|r使用了|G弹幕|r。' % (
            act.source.ui_meta.name,
Пример #53
0
# -*- coding: utf-8 -*-
from __future__ import absolute_import

# -- stdlib --
import random

# -- third party --
# -- own --
from thb import characters
from thb.ui.ui_meta.common import gen_metafunc, my_turn, passive_clickable, passive_is_action_valid


# -- code --
__metaclass__ = gen_metafunc(characters.remilia)


class SpearTheGungnir:
    # Skill
    name = u'神枪'
    description = (
        u'满足下列条件之一时,你可以令你的|G弹幕|r不能被响应:\n'
        u'|B|R>> |r目标角色的体力值 大于 你的体力值。\n'
        u'|B|R>> |r目标角色的手牌数 小于 你的手牌数。'
    )
    clickable = passive_clickable
    is_action_valid = passive_is_action_valid


class SpearTheGungnirAction:
    def effect_string(act):
        return u'|G【%s】|r举起右手,将|G弹幕|r汇聚成一把命运之矛,向|G【%s】|r掷去!' % (
Пример #54
0
# -*- coding: utf-8 -*-
from __future__ import absolute_import, division, print_function, unicode_literals

# -- stdlib --
import random

# -- third party --
# -- own --
from thb import characters
from thb.actions import ttags
from thb.ui.ui_meta.common import gen_metafunc, my_turn, passive_clickable, passive_is_action_valid


# -- code --
__metaclass__ = gen_metafunc(characters.yuyuko)


class Yuyuko:
    # Character
    name        = '西行寺幽幽子'
    title       = '幽冥阁楼的吃货少女'
    illustrator = '和茶'
    cv          = 'VV'

    port_image        = 'thb-portrait-yuyuko'
    figure_image      = 'thb-figure-yuyuko'
    miss_sound_effect = 'thb-cv-yuyuko_miss'

    notes = u'|RKOF不平衡角色'

Пример #55
0
# -*- coding: utf-8 -*-

# -- stdlib --
# -- third party --
# -- own --
from thb import actions, characters
from thb.ui.ui_meta.common import gen_metafunc, passive_clickable, passive_is_action_valid

# -- code --
__metaclass__ = gen_metafunc(characters.daiyousei)


class Daiyousei:
    # Character
    name        = u'大妖精'
    title       = u'全身萌点的保姆'
    illustrator = u'渚FUN'
    cv          = u'简翎'

    port_image        = u'thb-portrait-daiyousei'
    figure_image      = u'thb-figure-daiyousei'
    miss_sound_effect = u'thb-cv-daiyousei_miss'


class DaiyouseiKOF:
    # Character
    name        = u'大妖精'
    title       = u'全身萌点的保姆'
    illustrator = u'渚FUN'
    cv          = u'简翎'
Пример #56
0
# -*- coding: utf-8 -*-
from __future__ import absolute_import

# -- stdlib --
# -- third party --
# -- own --
from thb import thbfaith
from thb.ui.ui_meta.common import gen_metafunc


# -- code --
__metaclass__ = gen_metafunc(thbfaith)


class THBattleFaith:
    name = u'信仰争夺战'
    logo = 'thb-modelogo-faith'
    description = (
        u'|R游戏人数|r:6人。\n'
        u'\n'
        u'|G游戏开始|r:游戏开始时,随机向在场玩家分配6张身份牌:3|!B博丽|r,3|!O守矢|r,双方对立。若出现同一方阵营座次连续三人的情况,则第三人须与下一名座次的玩家交换身份牌。\n'
        u'\n'
        u'|G角色选择|r:共发给每人4张角色牌,其中一张为暗置。每名玩家选择其中一张作为出场角色,再选择一张作为备用角色(不得查看暗置角色牌)。每方阵营将三张备用角色牌置于一旁作为备用角色。\n'
        u'\n'
        u'|G游戏开始|r:游戏开始时,所有角色摸4张牌,此时除首先行动的玩家均可以进行一次弃置4张牌并重新摸4张牌的操作。\n'
        u'\n'
        u'|G角色更新|r:当一名角色被击坠时,弃置该角色全部区域内的所有牌。从剩余的备用角色中选择一名作为出场角色并明示之,之后摸4张牌。此时该角色可以弃置全部的4张牌并重新摸4张牌。击坠不执行任何奖惩。\n'
        u'\n'
        u'|G胜负条件|r:当一方累计被击坠角色数到达三名,或投降时,该方判负。'
    )
    params_disp = {
Пример #57
0
# -*- coding: utf-8 -*-

# -- stdlib --
import random

# -- third party --
# -- own --
from thb import characters
from thb.ui.ui_meta.common import gen_metafunc, passive_clickable, passive_is_action_valid

# -- code --
__metaclass__ = gen_metafunc(characters.patchouli)


class Library:
    # Skill
    name = u'图书'
    description = u'|B锁定技|r,每当你使用非延时符卡时,你摸一张牌;你使用符卡无距离限制。'

    clickable = passive_clickable
    is_action_valid = passive_is_action_valid


class LibraryDrawCards:
    def effect_string(act):
        return u'|G【%s】|r发动了|G图书|r技能,摸1张牌。' % (
            act.source.ui_meta.name,
        )

    def sound_effect(act):
        return random.choice([