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, g, 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, g, 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 

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 ) 

106 

107 def sound_effect_before(self, act): 

108 return random.choice([ 

109 'thb-cv-keine_guard_awake', 

110 ]) 

111 

112 

113class KeineGuardHandler: 

114 

115 def target(self, pl): 

116 if not pl: 

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

118 

119 p = pl[0] 

120 if p.life >= p.maxlife: 

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

122 

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

124 

125 

126class Devoted: 

127 # Skill 

128 name = u'决意' 

129 description = ( 

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

131 ) 

132 

133 

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 ) 

141 

142 

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 ) 

150 

151 

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 ) 

158 

159 

160class Keine: 

161 # Character 

162 name = '上白泽慧音' 

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

164 illustrator = '和茶' 

165 cv = '银子' 

166 

167 port_image = 'thb-portrait-keine' 

168 figure_image = 'thb-figure-keine' 

169 miss_sound_effect = 'thb-cv-keine_miss' 

170 

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