From 356159759363df5a590a549684391e9b404464b5 Mon Sep 17 00:00:00 2001 From: copcap Date: Sun, 12 Nov 2023 16:15:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=BAmoveCard=E5=92=8CcanMoveCard=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=9B=B4=E5=A4=9A=E5=8F=82=E6=95=B0=EF=BC=8C=E7=94=A8?= =?UTF-8?q?=E4=BA=8E=E9=83=A8=E5=88=86=E7=A7=BB=E5=8A=A8=E5=9C=BA=E4=B8=8A?= =?UTF-8?q?=E7=9A=84=E7=89=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/game.js | 66 +++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 55 insertions(+), 11 deletions(-) diff --git a/game/game.js b/game/game.js index 74b86486a..362b24aa8 100644 --- a/game/game.js +++ b/game/game.js @@ -18230,29 +18230,32 @@ }, moveCard:function(){ 'step 0' - if(!player.canMoveCard(null,event.nojudge)){ + if(!player.canMoveCard(null,event.nojudge,event.sourceTargets,event.aimTargets,event.filter)){ event.finish(); return; } var next=player.chooseTarget(2,function(card,player,target){ + var filterCard=get.event('filter'); if(ui.selected.targets.length){ + if(!get.event('aimTargets').includes(target)) return false; var from=ui.selected.targets[0]; - var js=from.getCards('j'); + var js=from.getCards('j',filterCard); for(var i=0;i0; + return target.countCards(range,filterCard)>0; } }); next.set('nojudge',event.nojudge||false); @@ -18308,6 +18311,9 @@ next.set('multitarget',true); next.set('targetprompt',_status.event.targetprompt||['被移走','移动目标']); next.set('prompt',event.prompt||'移动场上的一张牌'); + next.set('filter',event.filter); + next.set('sourceTargets',event.sourceTargets||game.filterPlayer()); + next.set('aimTargets',event.aimTargets||game.filterPlayer()); if(event.prompt2) next.set('prompt2',event.prompt2); if(event.forced) next.set('forced',true); 'step 1' @@ -18338,6 +18344,7 @@ } },targets[0]).set('nojudge',event.nojudge||false).set('targets0',targets[0]).set('targets1',targets[1]).set('filterButton',function(button){ var targets1=_status.event.targets1; + if(!get.event('filter')(button.link)) return false; if(get.position(button.link)=='j'){ if(_status.event.nojudge) return false; return targets1.canAddJudge(button.link); @@ -18345,7 +18352,7 @@ else{ return targets1.canEquip(button.link); } - }); + }).set('filter',event.filter); } else{ event.finish(); @@ -24875,13 +24882,33 @@ } } canMoveCard(withatt,nojudge){ - var player=this; - return game.hasPlayer(function(current){ - var att=get.sgn(get.attitude(player,current)); + const player=this; + const args=Array.from(arguments).slice(2); + let sourceTargets,aimTargets,filterCard; + args.forEach(arg=>{ + if(get.itemtype(arg)=='players'){ + if(!sourceTargets) sourceTargets=arg; + else if(!aimTargets) aimTargets=arg; + } + else if(get.itemtype(arg)=='player'){ + if(!sourceTargets) sourceTargets=[arg]; + else if(!aimTargets) aimTargets=[arg]; + } + else if(typeof arg=='function'){ + filterCard=arg; + } + else if(typeof arg=='object'&&arg){ + filterCard=get.filter(arg); + } + }); + if(!sourceTargets) sourceTargets=game.filterPlayer(); + if(!aimTargets) aimTargets=game.filterPlayer(); + return sourceTargets.some(current=>{ + const att=get.sgn(get.attitude(player,current)); if(!withatt||att!=0){ - var es=current.getCards('e'); + var es=current.getCards('e',filterCard); for(var i=0;i{ if(withatt){ if(get.sgn(get.value(es[i],current))!=-att) return false; var att2=get.sgn(get.attitude(player,current2)); @@ -24894,7 +24921,7 @@ } } if(!nojudge&&(!withatt||att>0)){ - var js=current.getCards('j'); + var js=current.getCards('j',filterCard); for(var i=0;i