@@ -2,6 +2,206 @@ import { lib, game, ui, get, ai, _status } from "../../noname.js";
22
33/** @type { importCharacterConfig['skill'] } */
44const skills = {
5+ bingling : {
6+ trigger : { player : [ "useCardToPlayer" ] } ,
7+ filter ( event , player ) {
8+ return get . name ( event . card ) == "sha" && event . target . countDiscardableCards ( "he" ) >= 2 ;
9+ } ,
10+ logTarget : "target" ,
11+ async cost ( event , trigger , player ) {
12+ const target = trigger . target ;
13+ event . result = await player . discardPlayerCard ( target , "hej" , get . prompt2 ( "bingling" ) , 2 ) . set ( "chooseonly" , true ) . forResult ( ) ;
14+ } ,
15+ async content ( event , trigger , player ) {
16+ const next = trigger . target . discard ( event . cards ) ;
17+ next . set ( "discarder" , player ) ;
18+ await next ;
19+ if ( event . cards . length > 1 ) {
20+ const card = event . cards [ 0 ] ,
21+ cardx = event . cards [ 1 ] ;
22+ let num = 0 ;
23+ if ( get . type2 ( card , false ) == get . type2 ( cardx , false ) ) {
24+ await player . gain ( event . cards , "gain2" ) ;
25+ num ++ ;
26+ }
27+ if ( get . suit ( card , false ) == get . suit ( cardx , false ) ) {
28+ await player . recover ( ) ;
29+ num ++ ;
30+ }
31+ if ( get . cardNameLength ( card , false ) == get . cardNameLength ( cardx , false ) ) {
32+ await player . draw ( get . cardNameLength ( card ) ) ;
33+ num ++ ;
34+ }
35+ if ( get . number ( card , false ) == get . number ( cardx , false ) ) {
36+ await trigger . target . loseHp ( trigger . target . getHp ( ) ) ;
37+ num ++ ;
38+ }
39+ if ( num == 0 ) {
40+ await player . damage ( 1 , "fire" , "nosource" ) ;
41+ }
42+ }
43+ } ,
44+ } ,
45+ renjia : {
46+ trigger : {
47+ player : [ "damageBegin3" , "damageAfter" ] ,
48+ source : [ "damageSource" ] ,
49+ } ,
50+ forced : true ,
51+ filter ( event , player , triggername ) {
52+ if ( triggername == "damageBegin3" ) {
53+ if ( ! event . hasNature ( ) ) {
54+ return player . getRoundHistory ( "damage" , evt => ! evt . hasNature ( ) ) . indexOf ( event ) < 2 ;
55+ }
56+ return event . hasNature ( "fire" ) ;
57+ }
58+ return event . hasNatrue ( ) ;
59+ } ,
60+ async content ( event , trigger , player ) {
61+ if ( event . triggername == "damageBegin3" ) {
62+ if ( trigger . hasNature ( "fire" ) ) {
63+ trigger . num ++ ;
64+ } else {
65+ trigger . num -- ;
66+ }
67+ } else if ( trigger . hasNature ( ) ) {
68+ await player . draw ( ) ;
69+ }
70+ } ,
71+ group : [ "renjia_gain" ] ,
72+ subSkill : {
73+ gain : {
74+ trigger : { player : [ "expandEquipBegin" , "enableEquipBegin" ] } ,
75+ forced : true ,
76+ init ( player , skill ) {
77+ player . disableEquip ( 2 ) ;
78+ } ,
79+ onremove ( player , skill ) {
80+ player . enableEquip ( 2 ) ;
81+ } ,
82+ filter ( event , player ) {
83+ return event . slots . includes ( "equip2" ) ;
84+ } ,
85+ async content ( event , trigger , player ) {
86+ trigger . slots . remove ( "equip2" ) ;
87+ if ( trigger . slots . length == 0 ) {
88+ trigger . cancel ( ) ;
89+ }
90+ } ,
91+ } ,
92+ } ,
93+ ai : {
94+ effect : {
95+ target ( card , player , target ) {
96+ if ( get . tag ( card , "fireDamage" ) ) {
97+ return [ 1 , 0 , 1 , - 3 ] ;
98+ }
99+ if ( ! get . natureList ( card ) . length && target . getRoundHistory ( "damage" , evt => evt . hasNature ( ) ) . length < 2 ) {
100+ return [ 1 , - 1 ] ;
101+ }
102+ } ,
103+ } ,
104+ } ,
105+ } ,
106+ yj_yanyu : {
107+ enable : [ "phaseUse" ] ,
108+ limited : true ,
109+ lose : false ,
110+ discard : false ,
111+ selectCard : 2 ,
112+ check ( card ) {
113+ if ( ui . selected . cards . some ( cardx => get . suit ( cardx ) == get . suit ( card ) ) ) {
114+ return 0 ;
115+ }
116+ return 1 ;
117+ } ,
118+ filterCard : ( ) => true ,
119+ filter ( event , player ) {
120+ return player . countCards ( "h" ) >= 2 ;
121+ } ,
122+ filterTarget ( card , player , target ) {
123+ return target != player ;
124+ } ,
125+ async content ( event , trigger , player ) {
126+ player . awakenSkill ( event . name ) ;
127+ await player . showCards ( event . cards ) ;
128+ const card = get . cardPile2 ( "tengjia" ) ,
129+ suits = event . cards . map ( card => get . suit ( card ) ) ;
130+ if ( card && event . targets [ 0 ] . canEquip ( "tengjia" , true ) ) {
131+ await event . targets [ 0 ] . equip ( card ) ;
132+ } else {
133+ player . popup ( "杯具" ) ;
134+ }
135+ player . addSkill ( "yj_yanyu_use" ) ;
136+ const targets = game . filterPlayer ( curr => curr != event . targets [ 0 ] ) ;
137+ targets . forEach ( curr => {
138+ curr . markAuto ( "yj_yanyu_fire" , suits ) ;
139+ const list = curr . getStorage ( "yj_yanyu_source" ) ;
140+ list . add ( player ) ;
141+ curr . setStorage ( "yj_yanyu_source" , list ) ;
142+ curr . addSkill ( "yj_yanyu_fire" ) ;
143+ } ) ;
144+ } ,
145+ subSkill : {
146+ use : {
147+ forced : true ,
148+ charlotte : true ,
149+ trigger : { global : [ "useCardAfter" ] } ,
150+ filter ( event , player ) {
151+ if ( ! event . player . getStorage ( "yj_yanyu_source" ) . includes ( player ) ) {
152+ return false ;
153+ }
154+ const suits = event . cards . map ( card => get . suit ( card , false ) ) ;
155+ return event . player . getStorage ( "yj_yanyu_fire" ) . some ( suit => suits . includes ( suit ) ) && [ "basic" , "trick" , "equip" ] . includes ( get . type2 ( event . card , false ) ) ;
156+ } ,
157+ async content ( event , trigger , player ) {
158+ await player . draw ( ) ;
159+ } ,
160+ } ,
161+ fire : {
162+ marktext : "焰" ,
163+ charlotte : true ,
164+ intro : {
165+ name : "焰狱" ,
166+ mark ( dialog , storage , player ) {
167+ const str = get . translation ( storage ) . split ( "、" ) ,
168+ sources = get . translation ( player . getStorage ( "yj_yanyu_source" ) ) . split ( "、" ) ;
169+ dialog . addText ( `${ str } 花色的手牌遵循:基本牌:火杀,锦囊牌:火攻,装备牌:铁索连环且使用后${ sources } 摸一张牌` ) ;
170+ } ,
171+ } ,
172+ mod : {
173+ cardname ( card , player , name ) {
174+ const suits = player . getStorage ( "yj_yanyu_fire" ) ,
175+ suit = get . suit ( card ) ;
176+ if ( ! suits . includes ( suit ) ) {
177+ return ;
178+ }
179+ if ( get . type ( name , null , false ) == "basic" ) {
180+ return "sha" ;
181+ } else if ( get . type2 ( name , false ) == "trick" ) {
182+ return "huogong" ;
183+ } else if ( get . type ( name , null , false ) == "equip" ) {
184+ return "tiesuo" ;
185+ }
186+ } ,
187+ cardnature ( card , player ) {
188+ const suits = player . getStorage ( "yj_yanyu_fire" ) ,
189+ suit = get . suit ( card , false ) ;
190+ if ( suits . includes ( suit ) && get . type ( card , null , false ) == "basic" ) {
191+ return "fire" ;
192+ }
193+ } ,
194+ } ,
195+ } ,
196+ } ,
197+ ai : {
198+ order : 10 ,
199+ result : {
200+ player : 1 ,
201+ target : - 1 ,
202+ } ,
203+ } ,
204+ } ,
5205 biancai : {
6206 trigger : {
7207 global : [ "phaseBegin" ] ,
@@ -214,7 +414,10 @@ const skills = {
214414 game . initCharacterList ( ) ;
215415 }
216416 _status . characterlist . map ( character => {
217- const names = get . characterSurname ( character ) . map ( info => info . join ( "" ) ) . concat ( [ get . rawName ( character ) ] ) ,
417+ const names = get
418+ . characterSurname ( character )
419+ . map ( info => info . join ( "" ) )
420+ . concat ( [ get . rawName ( character ) ] ) ,
218421 skills = get . character ( character , 3 ) ;
219422 names . forEach ( name => {
220423 if ( bingzhuSkill [ name ] ) {
@@ -275,10 +478,12 @@ const skills = {
275478 }
276479 }
277480 if ( target != player ) {
278- await player . draw ( target . getSkills ( null , false , false ) . filter ( skill => {
279- const info = get . info ( skill ) ;
280- return info && ! info . charlotte && get . skillInfoTranslation ( skill , target ) . length ;
281- } ) . length ) ;
481+ await player . draw (
482+ target . getSkills ( null , false , false ) . filter ( skill => {
483+ const info = get . info ( skill ) ;
484+ return info && ! info . charlotte && get . skillInfoTranslation ( skill , target ) . length ;
485+ } ) . length
486+ ) ;
282487 }
283488 } ,
284489 } ,
0 commit comments