Coverage for thb/meta/characters/keine.py : 76%
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, act, cards):
55 if act.cond(cards): 55 ↛ 58line 55 didn't jump to line 58, because the condition on line 55 was never false
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, act, cards):
78 if act.cond(cards): 78 ↛ 81line 78 didn't jump to line 81, because the condition on line 78 was never false
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 )
100@ui_meta(characters.keine.KeineGuardAction)
101class KeineGuardAction:
102 def effect_string_before(self, act):
103 return '“我绝对不会让你们碰到|G【%s】|r 一根手指的!”|G【%s】|r冲着所有人喊道。' % (
104 act.target.ui_meta.name,
105 act.source.ui_meta.name,
106 )
108 def sound_effect_before(self, act):
109 return random.choice([
110 'thb-cv-keine_guard_awake',
111 ])
114@ui_meta(characters.keine.KeineGuardHandler)
115class KeineGuardHandler:
117 def target(self, pl):
118 if not pl:
119 return (False, u'守护:请选择1名其他角色(或不发动)')
121 p = pl[0]
122 if p.life >= p.maxlife:
123 return False, u'目标角色没有受伤'
125 return True, u'我的CP由我来守护!'
128@ui_meta(characters.keine.Devoted)
129class Devoted:
130 # Skill
131 name = u'决意'
132 description = (
133 '当你受到伤害时,若同样拥有|R决意|r的另一名角色的体力值比你高,则伤害改为由该角色承受。同样拥有|R决意|r的另一名角色于你的回合内摸牌/回复体力时,你摸相同数量的牌/回复相同的体力。'
134 )
137@ui_meta(characters.keine.DevotedHeal)
138class DevotedHeal:
139 def effect_string(self, act):
140 return '|G【%s】|r分享了回复效果(|G决意|r),|G【%s】|r回复了%s点体力。' % (
141 act.source.ui_meta.name,
142 act.target.ui_meta.name,
143 act.amount,
144 )
147@ui_meta(characters.keine.DevotedDrawCards)
148class DevotedDrawCards:
149 def effect_string(self, act):
150 return '|G【%s】|r分享了摸牌效果(|G决意|r),|G【%s】|r摸了%s张牌。' % (
151 act.source.ui_meta.name,
152 act.target.ui_meta.name,
153 act.amount,
154 )
157@ui_meta(characters.keine.DevotedAction)
158class DevotedAction:
159 def effect_string(self, act):
160 return '|G【%s】|r的伤害由|G【%s】|r承受了(|G决意|r)。' % (
161 act.source.ui_meta.name,
162 act.target.ui_meta.name,
163 )
166@ui_meta(characters.keine.Keine)
167class Keine:
168 # Character
169 name = '上白泽慧音'
170 title = '人间之里的守护者'
171 illustrator = '和茶'
172 cv = '银子'
174 port_image = 'thb-portrait-keine'
175 figure_image = 'thb-figure-keine'
176 miss_sound_effect = 'thb-cv-keine_miss'
178 notes = '|RKOF不平衡角色|r'