@@ -2,6 +2,173 @@ import { lib, game, ui, get, ai, _status } from "../../noname.js";
22
33/** @type { importCharacterConfig['skill'] } */
44const skills = {
5+ //渭南神马超
6+ wn_qiangshu : {
7+ trigger : {
8+ source : "damageBegin1" ,
9+ } ,
10+ filter ( event , player ) {
11+ if ( ! event . card || ! [ "sha" , "juedou" ] . includes ( event . card . name ) ) {
12+ return false ;
13+ }
14+ const num = player . getAttackRange ( ) - 1 ;
15+ return num > 0 && player . countCards ( "he" ) >= num ;
16+ } ,
17+ async cost ( event , trigger , player ) {
18+ const num = player . getAttackRange ( ) - 1 ;
19+ event . result = await player
20+ . chooseToDiscard ( "he" , get . prompt2 ( event . skill ) , num )
21+ . set ( "chooseonly" , true )
22+ . set ( "ai" , card => {
23+ const trigger = get . event ( ) . getTrigger ( ) ,
24+ player = get . player ( ) ;
25+ if ( get . damageEffect ( trigger . player , trigger . source , player ) <= 0 ) {
26+ return 0 ;
27+ }
28+ return 7 - get . value ( card ) ;
29+ } )
30+ . forResult ( ) ;
31+ event . result . targets = [ trigger . player ] ;
32+ } ,
33+ async content ( event , trigger , player ) {
34+ await player . discard ( event . cards ) ;
35+ trigger . num += event . cards . length ;
36+ } ,
37+ } ,
38+ wn_yuma : {
39+ trigger : {
40+ global : [ "loseAfter" , "loseAsyncAfter" , "cardsDiscardAfter" , "equipAfter" ] ,
41+ } ,
42+ usable : 1 ,
43+ filter ( event , player ) {
44+ if ( ! event . getd || ! event . getl ) {
45+ return false ;
46+ }
47+ let cards = event . getd ( ) ;
48+ return cards . some ( card => {
49+ if ( get . position ( card ) != "d" || get . type ( card ) != "equip" ) {
50+ return false ;
51+ }
52+ if ( card . willBeDestroyed ( "discardPile" , get . owner ( card ) , event ) ) {
53+ return false ;
54+ }
55+ return game . hasPlayer ( current => {
56+ return current . canEquip ( card , true ) ;
57+ } ) ;
58+ } ) ;
59+ } ,
60+ async cost ( event , trigger , player ) {
61+ const cards = trigger . getd ( ) . filter ( card => {
62+ if ( get . position ( card ) != "d" || get . type ( card ) != "equip" ) {
63+ return false ;
64+ }
65+ if ( card . willBeDestroyed ( "discardPile" , get . owner ( card ) , trigger ) ) {
66+ return false ;
67+ }
68+ return true ;
69+ } ) ;
70+ const { result : { bool, targets, links } } = await player
71+ . chooseButtonTarget ( {
72+ createDialog : [ get . prompt2 ( event . skill ) , cards ] ,
73+ filterTarget ( card , player , target ) {
74+ const buttons = ui . selected . buttons ;
75+ if ( ! buttons . length ) {
76+ return false ;
77+ }
78+ return target . canEquip ( buttons [ 0 ] . link , true ) ;
79+ } ,
80+ ai1 ( button ) {
81+ return 20 - get . value ( button . link ) ;
82+ } ,
83+ ai2 ( target ) {
84+ const player = get . player ( ) ;
85+ const card = ui . selected . buttons [ 0 ] ?. link ;
86+ if ( ! target . countCards ( "h" ) ) {
87+ return get . value ( card , target ) * get . attitude ( player , target ) ;
88+ }
89+ return ( get . value ( card , target ) - target . countCards ( "h" ) ) * get . attitude ( player , target ) ;
90+ } ,
91+ } ) ;
92+ event . result = {
93+ bool : bool ,
94+ targets : targets ,
95+ cards : links ,
96+ } ;
97+ } ,
98+ async content ( event , trigger , player ) {
99+ const { targets : [ target ] , cards : [ card ] } = event ;
100+ target . $gain2 ( card ) ;
101+ await game . delay ( ) ;
102+ await target . equip ( card ) ;
103+ const num = target . countCards ( "h" ) ;
104+ if ( num > 0 && target != player ) {
105+ await player . gainPlayerCard ( target , true , "h" , num ) ;
106+ }
107+ } ,
108+ } ,
109+ //渭南神许褚
110+ wn_zhuanzhan : {
111+ trigger : {
112+ global : "phaseZhunbeiBegin" ,
113+ } ,
114+ filter ( event , player ) {
115+ if ( event . player == player || ! player . hasEnabledSlot ( ) ) {
116+ return false ;
117+ }
118+ const card = new lib . element . VCard ( { name : "juedou" } ) ;
119+ return player . canUse ( card , event . player ) ;
120+ } ,
121+ async cost ( event , trigger , player ) {
122+ let list = [ ] ;
123+ for ( let i = 1 ; i <= 5 ; i ++ ) {
124+ const slot = `equip${ i } ` ;
125+ if ( player . hasEnabledSlot ( slot ) ) {
126+ list . push ( "equip" + i ) ;
127+ }
128+ }
129+ list . push ( "cancel2" ) ;
130+ let bool = "cancel2" ;
131+ const card = new lib . element . VCard ( { name : "juedou" } ) ;
132+ if ( get . effect ( trigger . player , card , player , player ) > 0 ) {
133+ bool = list . filter ( i => i != "cancel2" ) . randomGet ( ) ;
134+ }
135+ const result = await player
136+ . chooseControl ( list )
137+ . set ( "prompt" , get . prompt2 ( event . skill ) )
138+ . set ( "ai" , ( ) => get . event ( "bool" ) )
139+ . set ( "bool" , bool )
140+ . forResult ( ) ;
141+ event . result = {
142+ bool : result . control != "cancel2" ,
143+ targets : [ trigger . player ] ,
144+ cost_data : result . control ,
145+ } ;
146+ } ,
147+ async content ( event , trigger , player ) {
148+ const slot = event . cost_data ;
149+ await player . disableEquip ( [ slot ] ) ;
150+ const card = new lib . element . VCard ( { name : "juedou" } ) ;
151+ if ( player . canUse ( card , trigger . player ) ) {
152+ await player . useCard ( card , trigger . player ) ;
153+ }
154+ } ,
155+ } ,
156+ wn_huwei : {
157+ trigger : {
158+ player : "phaseDrawBegin2" ,
159+ } ,
160+ forced : true ,
161+ filter ( event , player ) {
162+ let list = Array . from ( { length : 13 } ) . map ( ( _ , i ) => "equip" + parseFloat ( i + 1 ) ) ;
163+ list = list . filter ( i => player . hasDisabledSlot ( i ) ) ;
164+ return ! event . numFixed && list . length ;
165+ } ,
166+ async content ( event , trigger , player ) {
167+ let list = Array . from ( { length : 13 } ) . map ( ( _ , i ) => "equip" + parseFloat ( i + 1 ) ) ;
168+ let num = list . reduce ( ( sum , slot ) => sum + player . countDisabledSlot ( slot ) , 0 ) ;
169+ trigger . num += num ;
170+ } ,
171+ } ,
5172 //汉末神王允
6173 caanchao : {
7174 trigger : {
0 commit comments