Hide keyboard shortcuts

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 

3 

4# -- stdlib -- 

5import random 

6 

7# -- third party -- 

8# -- own -- 

9from thb import characters 

10from thb.actions import ttags 

11from thb.meta.common import ui_meta 

12 

13 

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 ) 

23 

24 def clickable(self): 

25 return self.my_turn() and not ttags(self.me)['teach_used'] 

26 

27 def is_action_valid(self, sk, tl): 

28 cards = sk.associated_cards 

29 

30 if not cards or len(cards) != 1: 

31 return False, '请选择一张牌(重铸)' 

32 

33 if not tl or len(tl) != 1: 

34 return False, '请选择一个目标' 

35 

36 return True, '发动「授业」' 

37 

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 ) 

43 

44 def sound_effect(self, act): 

45 return random.choice([ 

46 'thb-cv-keine_teach1', 

47 'thb-cv-keine_teach2', 

48 ]) 

49 

50 

51@ui_meta(characters.keine.TeachAction) 

52class TeachAction: 

53 # choose_card 

54 def choose_card_text(self, act, cards): 

55 if act.cond(cards): 

56 return (True, '给出这张牌') 

57 else: 

58 return (False, '请选择你要给出的牌') 

59 

60 def target(self, pl): 

61 if not pl: 

62 return (False, '请选择1名玩家') 

63 

64 return (True, '传道授业!') 

65 

66 

67@ui_meta(characters.keine.TeachTargetEffect) 

68class TeachTargetEffect: 

69 # choose_option 

70 choose_option_buttons = (('重铸一张牌', 'reforge'), ('使用卡牌', 'action')) 

71 choose_option_prompt = '授业:请选择你的行动' 

72 

73 

74@ui_meta(characters.keine.TeachTargetReforgeAction) 

75class TeachTargetReforgeAction: 

76 # choose_card 

77 def choose_card_text(self, act, cards): 

78 if act.cond(cards): 

79 return (True, '重铸这张牌') 

80 else: 

81 return (False, '请选择一张牌重铸') 

82 

83 def target(self, pl): 

84 if not pl: 

85 return (False, '请选择1名玩家') 

86 

87 return (True, '传道授业!') 

88 

89 

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 ) 

98 

99 

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 ) 

107 

108 def sound_effect_before(self, act): 

109 return random.choice([ 

110 'thb-cv-keine_guard_awake', 

111 ]) 

112 

113 

114@ui_meta(characters.keine.KeineGuardHandler) 

115class KeineGuardHandler: 

116 

117 def target(self, pl): 

118 if not pl: 

119 return (False, u'守护:请选择1名其他角色(或不发动)') 

120 

121 p = pl[0] 

122 if p.life >= p.maxlife: 

123 return False, u'目标角色没有受伤' 

124 

125 return True, u'我的CP由我来守护!' 

126 

127 

128@ui_meta(characters.keine.Devoted) 

129class Devoted: 

130 # Skill 

131 name = u'决意' 

132 description = ( 

133 '当你受到伤害时,若同样拥有|R决意|r的另一名角色的体力值比你高,则伤害改为由该角色承受。同样拥有|R决意|r的另一名角色于你的回合内摸牌/回复体力时,你摸相同数量的牌/回复相同的体力。' 

134 ) 

135 

136 

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 ) 

145 

146 

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 ) 

155 

156 

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 ) 

164 

165 

166@ui_meta(characters.keine.Keine) 

167class Keine: 

168 # Character 

169 name = '上白泽慧音' 

170 title = '人间之里的守护者' 

171 illustrator = '和茶' 

172 cv = '银子' 

173 

174 port_image = 'thb-portrait-keine' 

175 figure_image = 'thb-figure-keine' 

176 miss_sound_effect = 'thb-cv-keine_miss' 

177 

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