Coverage for thb/meta/characters/keine.py : 64%
Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1# -*- coding: utf-8 -*-
2from __future__ import annotations
4# -- stdlib --
5import random
7# -- third party --
8# -- own --
9from thb import characters
10from thb.actions import ttags
11from thb.meta.common import ui_meta
14# -- code --
15@ui_meta(characters.keine.Teach)
16class Teach:
17 # Skill
18 name = '授业'
19 description = (
20 '出牌阶段限一次,你可以重铸一张牌,然后将一张牌交给一名其它角色,其选择一项:'
21 '|B|R>> |r使用一张牌,|B|R>> |r重铸一张牌。'
22 )
24 def clickable(self):
25 return self.my_turn() and not ttags(self.me)['teach_used']
27 def is_action_valid(self, sk, tl):
28 cards = sk.associated_cards
30 if not cards or len(cards) != 1:
31 return False, '请选择一张牌(重铸)'
33 if not tl or len(tl) != 1:
34 return False, '请选择一个目标'
36 return True, '发动「授业」'
38 def effect_string(self, act):
39 return '“是这样的|G【%s】|r”,|G【%s】|r说道,“两个1相加是不等于⑨的。即使是两个⑥也不行。不不,天才来算也不行。”' % (
40 act.target.ui_meta.name,
41 act.source.ui_meta.name,
42 )
44 def sound_effect(self, act):
45 return random.choice([
46 'thb-cv-keine_teach1',
47 'thb-cv-keine_teach2',
48 ])
51@ui_meta(characters.keine.TeachAction)
52class TeachAction:
53 # choose_card
54 def choose_card_text(self, g, act, cards):
55 if act.cond(cards):
56 return (True, '给出这张牌')
57 else:
58 return (False, '请选择你要给出的牌')
60 def target(self, pl):
61 if not pl:
62 return (False, '请选择1名玩家')
64 return (True, '传道授业!')
67@ui_meta(characters.keine.TeachTargetEffect)
68class TeachTargetEffect:
69 # choose_option
70 choose_option_buttons = (('重铸一张牌', 'reforge'), ('使用卡牌', 'action'))
71 choose_option_prompt = '授业:请选择你的行动'
74@ui_meta(characters.keine.TeachTargetReforgeAction)
75class TeachTargetReforgeAction:
76 # choose_card
77 def choose_card_text(self, g, act, cards):
78 if act.cond(cards):
79 return (True, '重铸这张牌')
80 else:
81 return (False, '请选择一张牌重铸')
83 def target(self, pl):
84 if not pl:
85 return (False, '请选择1名玩家')
87 return (True, '传道授业!')
90@ui_meta(characters.keine.KeineGuard)
91class KeineGuard:
92 # Skill
93 name = '守护'
94 description = (
95 '|B限定技|r,出牌阶段开始时,你可以失去一点体力上限,令一名其它已受伤角色回复一点体力。之后,若其体力仍然是全场最低的,则你与其获得技能|R决意|r。\n'
96 '|B|R>> |b决意|r:当你受到伤害时,若同样拥有|R决意|r的另一名角色的体力值比你高,则伤害改为由该角色承受。同样拥有|R决意|r的另一名角色于你的回合内摸牌/回复体力时,你摸相同数量的牌/回复相同的体力。'
97 )
100class KeineGuardAction:
101 def effect_string_before(act):
102 return '“我绝对不会让你们碰到|G【%s】|r 一根手指的!”|G【%s】|r冲着所有人喊道。' % (
103 act.target.ui_meta.name,
104 act.source.ui_meta.name,
105 )
107 def sound_effect_before(self, act):
108 return random.choice([
109 'thb-cv-keine_guard_awake',
110 ])
113class KeineGuardHandler:
115 def target(self, pl):
116 if not pl:
117 return (False, u'守护:请选择1名其他角色(或不发动)')
119 p = pl[0]
120 if p.life >= p.maxlife:
121 return False, u'目标角色没有受伤'
123 return True, u'我的CP由我来守护!'
126class Devoted:
127 # Skill
128 name = u'决意'
129 description = (
130 '当你受到伤害时,若同样拥有|R决意|r的另一名角色的体力值比你高,则伤害改为由该角色承受。同样拥有|R决意|r的另一名角色于你的回合内摸牌/回复体力时,你摸相同数量的牌/回复相同的体力。'
131 )
134class DevotedHeal:
135 def effect_string(act):
136 return '|G【%s】|r分享了回复效果(|G决意|r),|G【%s】|r回复了%s点体力。' % (
137 act.source.ui_meta.name,
138 act.target.ui_meta.name,
139 act.amount,
140 )
143class DevotedDrawCards:
144 def effect_string(act):
145 return '|G【%s】|r分享了摸牌效果(|G决意|r),|G【%s】|r摸了%s张牌。' % (
146 act.source.ui_meta.name,
147 act.target.ui_meta.name,
148 act.amount,
149 )
152class DevotedAction:
153 def effect_string(act):
154 return '|G【%s】|r的伤害由|G【%s】|r承受了(|G决意|r)。' % (
155 act.source.ui_meta.name,
156 act.target.ui_meta.name,
157 )
160class Keine:
161 # Character
162 name = '上白泽慧音'
163 title = '人间之里的守护者'
164 illustrator = '和茶'
165 cv = '银子'
167 port_image = 'thb-portrait-keine'
168 figure_image = 'thb-figure-keine'
169 miss_sound_effect = 'thb-cv-keine_miss'
171 notes = '|RKOF不平衡角色|r'