From 2fee38e20b8404620829e4f2717e18c5d23aebdd Mon Sep 17 00:00:00 2001 From: Spmario233 Date: Wed, 1 Jan 2020 22:36:18 +0800 Subject: [PATCH] v1.9.96.8 --- character/extra.js | 24 +- character/refresh.js | 50 ++-- character/shenhua.js | 119 ++++---- character/sp.js | 192 ++++-------- character/standard.js | 15 +- character/xinghuoliaoyuan.js | 547 ++++++++++------------------------- character/yijiang.js | 153 +++------- 7 files changed, 337 insertions(+), 763 deletions(-) diff --git a/character/extra.js b/character/extra.js index 5a4a99433..00e306183 100755 --- a/character/extra.js +++ b/character/extra.js @@ -444,18 +444,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mark:true, marktext:'暴', unique:true, - init:function(player){ - player.storage.baonu=2; - player.markSkill('baonu'); - player.syncStorage('baonu'); + init:function(player,skill){ + if(!player.storage[skill]) player.storage[skill]=0; + }, + trigger:{ + source:'damageSource', + player:['damageEnd','enterGame'], + global:'gameDrawAfter', }, - trigger:{source:'damageSource',player:'damageEnd'}, forced:true, filter:function(event){ - return event.num>0; + return event.name!='damage'||event.num>0; }, content:function(){ - player.storage.baonu+=trigger.num; + player.storage.baonu+=trigger.name=='damage'?trigger.num:2; player.markSkill('baonu'); player.syncStorage('baonu'); }, @@ -1587,14 +1589,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, audio:true, - trigger:{player:'phaseDrawBegin'}, + trigger:{player:'phaseDrawBegin2'}, //priority:-5, filter:function(event,player){ return player.hp=4; + var history=player.getHistory('useCard'); + var suits=[]; + for(var i=0;i0&&get.attitude(player,current)>2); })>1&&get.color(card)=='black'&&player.countCards('h',{color:'red'})>0) return 3-get.value(card); @@ -2589,7 +2583,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ },*/ retuxi:{ audio:2, - trigger:{player:'phaseDrawBefore'}, + trigger:{player:'phaseDrawBegin2'}, direct:true, filter:function(event){ return event.num>0; @@ -2699,7 +2693,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, reluoyi:{ audio:2, - trigger:{player:'phaseDrawBegin'}, + trigger:{player:'phaseDrawBegin1'}, check:function(event,player){ if(player.countCards('h','sha')) return true; return Math.random()<0.5; @@ -2707,7 +2701,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ "step 0" player.addTempSkill('reluoyi2',{player:'phaseBefore'}); - trigger.cancel(); + trigger.cancel(null,null,'notrigger'); "step 1" event.cards=get.cards(3); player.showCards(event.cards,'裸衣'); @@ -2862,7 +2856,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ reyingzi:{ audio:2, audioname:['heqi','sunce'], - trigger:{player:'phaseDrawBegin'}, + trigger:{player:'phaseDrawBegin2'}, forced:true, content:function(){ trigger.num++; @@ -3802,7 +3796,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, xunxun:{ audio:2, - trigger:{player:'phaseDrawBefore'}, + trigger:{player:'phaseDrawBegin1'}, //check:function(event,player){ // return !player.hasSkill('reyiji2'); //}, diff --git a/character/shenhua.js b/character/shenhua.js index d45113f91..7233b600d 100755 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -601,7 +601,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ '1':{ audio:["yongsi1",2], trigger:{ - player:'phaseDrawBegin' + player:'phaseDrawBegin2' }, forced:true, content:function(){ @@ -1518,79 +1518,60 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, "nzry_shicai":{ audio:"nzry_shicai_2", - group:["nzry_shicai_1","nzry_shicai_2","nzry_shicai_3"], ai:{ + reverseOrder:true, + skillTagFilter:function(player){ + if(player.getHistory('useCard').length) return false; + }, effect:{ target:function(card,player,target){ - if(get.type(card)=='equip'&&(!player.storage.nzry_shicai||!player.storage.nzry_shicai.contains('equip'))&&get.equipResult(player,target,card.name)<=0) return [1,3]; + if(get.type(card)=='equip'&&(!player.getHistory('useCard').length)&&get.equipResult(player,target,card.name)<=0) return [1,3]; }, }, threaten:2.4, }, subSkill:{ - "1":{ - trigger:{ - global:'phaseBefore', - player:'useCard1', - }, - forced:true, - popup:false, - content:function(){ - if(!player.storage.nzry_shicai||event.triggername=='phaseBefore') player.storage.nzry_shicai=[]; - if(event.triggername=='useCard1'&&!player.storage.nzry_shicai.contains(get.type(trigger.card))){ - trigger.nzry_shicai=true; - player.storage.nzry_shicai.push(get.type(trigger.card)); - } - }, - }, "2":{ audio:2, - prompt2:"当你使用牌指定目标时,若此牌与你本回合使用的牌类型均不同(包括装备牌),则你可以将此牌置于牌堆顶,然后摸一张牌", - trigger:{ - player:['useCardAfter'], - target:'useCardToTargeted', - }, - filter:function (event,player,name){ - if(!event.nzry_shicai&&!event.getParent().nzry_shicai) return false; - if(name=='useCardToTargeted'&&('equip'!=get.type(event.card)||event.player!=player)) return false; - if(name=='useCardAfter'&&['equip','delay'].contains(get.type(event.card))) return false; - return event.cards.filterInD().length>0; - }, - check:function (event,player){ - if(get.type(event.card)=='equip'){ - return get.equipResult(player,player,event.card.name)<=0; - } - return true; - }, - content:function(){ - "step 0" - //player.storage.nzry_shicai.push(get.type(trigger.card,'trick')); - for(var i=0;iplayer.hp) return true; if(player.countCards('h')>3) return true; @@ -5254,7 +5233,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.$gain2(result.card); player.addTempSkill('shuangxiong2'); player.storage.shuangxiong=get.color(result.card); - trigger.cancel(); + trigger.cancel(null,null,'notrigger'); } }, shuangxiong2:{ diff --git a/character/sp.js b/character/sp.js index df54bcc9c..970744e7c 100755 --- a/character/sp.js +++ b/character/sp.js @@ -948,7 +948,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'useCard2'}, direct:true, filter:function(event,player){ - if(player.countUsed()>=1) return false; + if(player.countUsed(null,true)>1) return false; if(event.card.name!='sha'&&get.type(event.card)!='trick') return false; var info=get.info(event.card); if(info.allowMultiple==false) return false; @@ -1050,10 +1050,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, sibian:{ audio:2, - trigger:{player:'phaseDrawBefore'}, + trigger:{player:'phaseDrawBegin1'}, content:function(){ 'step 0' - trigger.cancel(); + trigger.cancel(null,null,'notrigger'); event.cards=get.cards(4); game.cardsGotoOrdering(event.cards); player.showCards(event.cards); @@ -2644,28 +2644,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, gzjili:{ - subSkill:{ - count:{ - trigger:{player:['useCard','respond']}, - silent:true, - priority:1, - content:function(){ - player.storage.gzjili++; - } - }, - init:{ - trigger:{global:'phaseBefore'}, - silent:true, - content:function(){ - player.storage.gzjili=0; - } - } - }, - group:['gzjili_count','gzjili_init'], trigger:{player:['useCard','respond']}, frequent:true, filter:function(event,player){ - return player.storage.gzjili==player.getAttackRange(); + return player.getHistory('useCard').length+player.getHistory('respond').length==player.getAttackRange(); }, audio:2, content:function(){ @@ -3572,46 +3554,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, sptunjiang:{ audio:2, - trigger:{player:'phaseUseBegin'}, - silent:true, - locked:false, - subfrequent:['end'], - content:function(){ - player.addTempSkill('sptunjiang_count'); - player.addTempSkill('sptunjiang_end'); + trigger:{player:'phaseJieshuBegin'}, + frequent:true, + filter:function(event,player){ + if(player.getHistory('skipped').contains('phaseUse')) return false; + return player.getHistory('useCard',function(evt){ + if(evt.targets&&evt.targets.length&&evt.isPhaseUsing()){ + var targets=evt.targets.slice(0); + while(targets.contains(player)) targets.remove(player); + return targets.length>0; + } + return false; + }).length==0; + }, + content:function(){ + player.draw(game.countGroup()); }, - subSkill:{ - count:{ - trigger:{player:'useCardAfter'}, - silent:true, - filter:function(event,player){ - if(event.targets){ - for(var i=0;i=3; }, content:function(){ - trigger.cancel(); + trigger.cancel(null,null,'notrigger'); var num=game.countPlayer(function(target){ return target.hp==player.hp; }); @@ -9371,7 +9330,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, tunchu:{ audio:2, - trigger:{player:'phaseDrawBegin'}, + trigger:{player:'phaseDrawBegin2'}, check:function(event,player){ return player.countCards('h')-player.countCards('h',{type:'equip'})<=player.hp; }, @@ -9740,43 +9699,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){ frequent:true, //usable:3, filter:function(event,player){ - if(!event.cards||event.cards.length!=1) return false; - if(_status.currentPhase!=player) return false; - if(!player.storage.fenyin) return false; - return get.color(player.storage.fenyin)!=get.color(event.cards[0]); + var evt=player.getLastUsed(1); + if(!evt) return false; + var color1=get.color(evt.card); + var color2=get.color(event.card); + return color1&&color2&&color1!='none'&&color2!='none'&&color1!=color2; }, content:function(){ player.draw(); }, - intro:{ - content:'card' - }, - group:['fenyin2','fenyin3'] - }, - fenyin3:{ - trigger:{player:'useCard'}, - priority:-1, - silent:true, - filter:function(event,player){ - if(!event.cards||event.cards.length!=1) return false; - if(_status.currentPhase!=player) return false; - return true; - }, - content:function(){ - player.storage.fenyin=trigger.cards[0]; - } - }, - fenyin2:{ - trigger:{player:'phaseBefore'}, - silent:true, - priority:10, - content:function(){ - player.storage.fenyin=null; - } }, dujin:{ audio:2, - trigger:{player:'phaseDrawBegin'}, + trigger:{player:'phaseDrawBegin2'}, frequent:true, content:function(){ trigger.num+=1+Math.floor(player.countCards('e')/2); @@ -9905,21 +9840,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, mozhi:{ audio:2, - intro:{ - content:'cards' - }, - init:function(player){ - player.storage.mozhi=[]; - }, trigger:{player:'phaseJieshuBegin'}, direct:true, filter:function(event,player){ - return player.storage.mozhi.length>0&&player.countCards('h')>0; + return player.getHistory('useCard',function(evt){ + return evt.isPhaseUsing()&&['basic','trick'].contains(get.type(evt.card)); + }).length>0&&player.countCards('h')>0; }, content:function(){ - if(player.storage.mozhi.length&&player.countCards('h')){ - var card=player.storage.mozhi.shift(); - card={name:card.name,nature:card.nature,suit:card.suit,number:card.number}; + "step 0" + event.history=player.getHistory('useCard',function(evt){ + return evt.isPhaseUsing()&&['basic','trick'].contains(get.type(evt.card)); + }) + "step 1" + if(event.history.length&&player.countCards('h')){ + var card=event.history.shift().card; + card={name:card.name,nature:card.nature}; if(lib.filter.cardEnabled(card)){ if(game.hasPlayer(function(current){ return player.canUse(card,current); @@ -9938,10 +9874,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ next.backup('mozhix'); } } - event.redo(); } + "step 2" + if(result.bool) event.goto(1); }, - group:['mozhi2','mozhi3'] }, mozhix:{ filterCard:function(card){ @@ -9950,28 +9886,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ selectCard:1, popname:true, }, - mozhi2:{ - trigger:{player:'phaseAfter'}, - silent:true, - content:function(){ - player.storage.mozhi.length=0; - player.unmarkSkill('mozhi'); - } - }, - mozhi3:{ - trigger:{player:'useCard'}, - silent:true, - filter:function(event,player){ - if(_status.currentPhase!=player) return false; - if(event.parent.parent.name!='phaseUse') return false; - var type=get.type(event.card); - return player.storage.mozhi.length<2&&(type=='basic'||type=='trick'); - }, - content:function(){ - player.storage.mozhi.add(trigger.card); - if(player.hasSkill('mozhi')) player.markSkill('mozhi'); - } - }, chenqing2:{}, ranshang:{ audio:2, @@ -10208,7 +10122,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ fengpo3:{}, biluan:{ audio:2, - trigger:{player:'phaseDrawBefore'}, + trigger:{player:'phaseDrawBegin1'}, mark:true, unique:true, intro:{ @@ -10267,7 +10181,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.storage.biluan+=ng.length; player.markSkill('biluan'); game.addVideo('storage',player,['biluan',player.storage.biluan]); - trigger.cancel(); + trigger.cancel(null,null,'notrigger'); }, mod:{ globalTo:function(from,to,distance){ @@ -10345,7 +10259,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, canshi:{ audio:2, - trigger:{player:'phaseDrawBefore'}, + trigger:{player:'phaseDrawBegin1'}, check:function(event,player){ var num=game.countPlayer(function(current){ if(player.hasZhuSkill('guiming')&¤t.group=='wu') return true; @@ -10361,7 +10275,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return '残蚀:是否改为摸'+get.cnNumber(num)+'张牌?'; }, content:function(){ - trigger.cancel(); + trigger.cancel(null,null,'notrigger'); var num=game.countPlayer(function(current){ if(player.hasZhuSkill('guiming')&¤t.group=='wu'&¤t!=player) return true; return current.isDamaged(); @@ -11826,7 +11740,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, hengzheng:{ audio:2, - trigger:{player:'phaseDrawBefore'}, + trigger:{player:'phaseDrawBegin1'}, filter:function(event,player){ return player.hp==1||player.countCards('h')==0; }, @@ -11848,7 +11762,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ targets.sort(lib.sort.seat); event.targets=targets; event.num=0; - trigger.cancel(); + trigger.cancel(null,null,'notrigger'); player.line(targets,'green'); "step 1" if(num1; - })) return false; - }, filterTarget:function (card,player,target){ - return target.storage.sidao&&target.storage.sidao>1; + return lib.filter.filterTarget.apply(this,arguments); }, prompt:"将一张手牌当顺手牵羊使用", - check:function (card){return 4-get.value(card)}, - ai:{ - wuxie:function (target,card,player,viewer){ - if(get.attitude(viewer,player)>0&&get.attitude(viewer,target)>0){ - return 0; - } - }, - basic:{ - order:7.5, - useful:4, - value:9, - }, - result:{ - target:function (player,target){ - if(get.attitude(player,target)<=0) return (target.countCards('he')>0)?-1.5:1.5; - var js=target.getCards('j'); - if(js.length){ - var jj=js[0].viewAs?{name:js[0].viewAs}:js[0]; - if(jj.name=='shunshou') return 3; - if(js.length==1&&get.effect(target,jj,target,player)>=0){ - return -1.5; - } - return 3; - } - return -1.5; - }, - player:function (player,target){ - if(get.attitude(player,target)<0&&!target.countCards('he')){ - return 0; - } - if(get.attitude(player,target)>1){ - var js=target.getCards('j'); - if(js.length){ - var jj=js[0].viewAs?{name:js[0].viewAs}:js[0]; - if(jj.name=='shunshou') return 1; - if(js.length==1&&get.effect(target,jj,target,player)>=0){ - return 0; - } - return 1; - } - return 0; - } - return 1; - }, - }, - tag:{ - loseCard:1, - gain:1, - }, - }, + check:function (card){return 7-get.value(card)}, + onuse:function(links,player){player.addTempSkill('xinfu_sidaoy')}, }, + xinfu_sidaoy:{}, "tanbei_effect1":{ }, "tanbei_effect2":{ @@ -816,7 +747,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, audio:2, trigger:{ - player:"phaseDrawBefore", + player:"phaseDrawBegin1", }, //priority:10, content:function (){ @@ -979,70 +910,42 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, "xinfu_lianpian":{ audio:2, - subSkill:{ - refrain:{ - forced:true, - silent:true, - popup:false, - trigger:{ - global:["phaseBefore","phaseAfter"], - }, - content:function (){ - player.storage.xinfu_lianpian=[]; - player.storage.xinfu_lianpian_number=0; - }, - }, - }, - group:["xinfu_lianpian_refrain"], + usable:3, trigger:{ - player:"useCard", + player:"useCardToPlayered", }, - forced:true, - popup:false, + frequent:true, filter:function (event,player){ - return _status.currentPhase==player&&player.storage.xinfu_lianpian_number<3; + if(!event.targets||!event.targets.length|| + event.getParent().triggeredTargets3.length>1||!event.isPhaseUsing()) return false; + var evt=player.getLastUsed(1); + if(!evt||!evt.targets||!evt.targets.length||!evt.isPhaseUsing()) return false; + for(var i=0;i1||event.ablers[0]!=player)){ + var ablers=player.getLastUsed(1).targets.slice(0); + for(var i=0;i0; + return player.storage.xinfu_falu&&player.storage.xinfu_falu>0; }, content:function (){ 'step 0' @@ -2084,7 +2010,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(player.storage.xinfu_falu_map[i]==true) num++; } player.storage.xinfu_falu=num; - player.markSkill('xinfu_falu'); + player[num?'markSkill':'unmarkSkill']('xinfu_falu'); event.num=0; event.togain=[]; 'step 1' @@ -2169,7 +2095,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(player.storage.xinfu_falu_map[i]==true) num++; } player.storage.xinfu_falu=num; - player.markSkill('xinfu_falu'); + player[num?'markSkill':'unmarkSkill']('xinfu_falu'); player.logSkill('xinfu_zhenyi',trigger.player); player.line(trigger.player); player.popup(result.control); @@ -2212,7 +2138,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(player.storage.xinfu_falu_map[i]==true) num++; } player.storage.xinfu_falu=num; - player.markSkill('xinfu_falu'); + player[num?'markSkill':'unmarkSkill']('xinfu_falu'); }, ai:{ skillTagFilter:function (player){ @@ -2245,7 +2171,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(player.storage.xinfu_falu_map[i]==true) num++; } player.storage.xinfu_falu=num; - player.markSkill('xinfu_falu'); + player[num?'markSkill':'unmarkSkill']('xinfu_falu'); player.judge(function(card){ if(get.color(card)=='black') return 4; return -1; @@ -3223,17 +3149,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{ global:"phaseUseEnd", }, - init:function (player){ - player.storage.guanwei={num:0,suit:[]}; - }, filter:function (event,player){ - if(player.storage.guanwei&&player.storage.guanwei.suit.length==1&&player.storage.guanwei.num>1) return true; - return false; + var history=event.player.getHistory('useCard',function(evt){ + return evt.getParent('phaseUse')==event; + }); + var num=0; + var suit=false; + for(var i=0;i1; }, direct:true, content:function (){ 'step 0' - player.chooseToDiscard('he',get.prompt2('xinfu_guanwei')).set('ai',function(card){ + player.chooseToDiscard('he',get.prompt('xinfu_guanwei',trigger.player),'弃置一张牌,令其摸两张牌并进行一个额外的出牌阶段。').set('ai',function(card){ if(get.attitude(_status.event.player,_status.currentPhase)<1) return 0; return 9-get.value(card); }).set('logSkill','xinfu_guanwei'); @@ -3259,39 +3193,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 3' trigger.player.phaseUse(); }, - group:["xinfu_guanwei_count","xinfu_guanwei_clear"], - subSkill:{ - count:{ - trigger:{ - global:"useCard", - }, - filter:function (event,player){ - return event.player.isPhaseUsing(); - }, - silent:true, - content:function (){ - if(!player.storage.guanwei.suit.contains(get.suit(trigger.card))){ - player.storage.guanwei.suit.push(get.suit(trigger.card)); - } - player.storage.guanwei.num++; - }, - sub:true, - forced:true, - popup:false, - }, - clear:{ - trigger:{ - global:"phaseAfter", - }, - silent:true, - content:function (){ - player.storage.guanwei={num:0,suit:[]}; - }, - sub:true, - forced:true, - popup:false, - }, - }, }, "xinfu_gongqing":{ audio:true, @@ -3543,33 +3444,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){ intro:{ content:"单调递增", }, - init:function (player){ - player.storage.guanchao=0; - }, - onremove:function (player){ - delete player.storage.guanchao; - }, trigger:{ player:"useCard", }, - silent:true, + audio:"xinfu_guanchao", forced:true, - popup:false, filter:function (event,player){ - return get.number(event.card)&&player.storage.guanchao!=14; + var history=player.getHistory('useCard',function(evt){ + return evt.isPhaseUsing(); + }); + if(history.length<2) return false; + var num=get.number(history[0].card); + if(!num) return false; + for(var i=1;inum2){ - player.logSkill('xinfu_guanchao'); - player.draw(); - player.storage.guanchao=num1; - } - else if(num2==0){ - player.storage.guanchao=num1; - } - else player.storage.guanchao=14; + player.draw(); }, sub:true, }, @@ -3588,24 +3483,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{ player:"useCard", }, - silent:true, + audio:"xinfu_guanchao", forced:true, - popup:false, filter:function (event,player){ - return get.number(event.card)&&player.storage.guanchao!=14; + var history=player.getHistory('useCard',function(evt){ + return evt.isPhaseUsing(); + }); + if(history.length<2) return false; + var num=get.number(history[0].card); + if(!num) return false; + for(var i=1;i=num) return false; + num=num2; + } + return true; }, content:function (){ - var num1=get.number(trigger.card); - var num2=player.storage.guanchao; - if(num2!=0&&num11.令你随机获得其区域内的一张牌,本回合内你不能对其使用牌。
2.令你此回合内对其使用牌没有次数与距离限制。", "xinfu_sidao":"伺盗", + xinfu_sidaox:'伺盗', "xinfu_sidao_info":"出牌阶段限一次,当你对一名其他角色连续使用两张牌后,你可以将一张手牌当做【顺手牵羊】对其使用。", "tanbei_effect1":"贪狈", "tanbei_effect1_info":"", diff --git a/character/yijiang.js b/character/yijiang.js index 7e38d5463..36466c036 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -195,25 +195,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xindanshou:{ audio:'danshou', trigger:{ - global:['phaseJieshuBegin','phaseBefore'], + global:'phaseJieshuBegin', target:'useCardToTargeted', }, - forced:true, - popup:false, + direct:true, filter:function(event,player,name){ - return name=='phaseBefore'|| - ((name=='phaseJieshuBegin'&&event.player!=player&&player.countCards('he')>=event.player.countCards('h'))|| - (event.targets&&event.targets.contains(player))) + return ((name=='phaseJieshuBegin'&&event.player!=player&&player.countCards('he')>=event.player.countCards('h'))|| + (event.targets&&event.targets.contains(player)&&['basic','trick'].contains(get.type(event.card,'trick')))) &&!player.hasSkill('xindanshou_as'); }, content:function(){ 'step 0' - if(event.triggername=='phaseBefore'){ - player.storage.xindanshou=0; - event.finish(); - return; - } - else if(event.triggername=='phaseJieshuBegin'){ + if(event.triggername=='phaseJieshuBegin'){ var num=trigger.player.countCards('h'); if(num>0) player.chooseToDiscard(get.prompt('xindanshou',trigger.player),num,'弃置'+get.cnNumber(num)+'张牌并对'+get.translation(trigger.player)+'造成1点伤害','he').set('logSkill',['xindanshou',trigger.player]).set('ai',function(card){ if(get.damageEffect(_status.event.getTrigger().player,_status.event.player,_status.event.player)>0) return 6-get.value(card); @@ -224,13 +217,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }; } else{ - if(!['basic','trick'].contains(get.type(trigger.card,'trick'))){ - event.finish(); - return; - }; - if(!player.storage.xindanshou) player.storage.xindanshou=0; - player.storage.xindanshou++; - player.chooseBool(get.prompt('xindanshou')+'(可摸'+get.cnNumber(player.storage.xindanshou)+'张牌)',get.translation('xindanshou_info')); + var num=0; + for(var i=0;i0) return false; return game.hasPlayer(function(current){ return get.attitude(player,current)<0&¤t.hp==1&&get.damageEffect(current,player,player)>0; }); @@ -1527,7 +1522,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, check:function(event,player){ if(!player.needsToDiscard()||(player.countCards('e')&&player.isMaxEquip())) return true; - if(player.storage.pingkou) return false; + if(player.getHistory('skipped').length>0) return false; return game.hasPlayer(function(current){ return get.attitude(player,current)<0&¤t.hp==1&&get.damageEffect(current,player,player)>0; }); @@ -1555,39 +1550,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, pingkou:{ audio:2, - group:['pingkou_init','pingkou_count'], - subSkill:{ - init:{ - trigger:{player:'phaseBefore'}, - silent:true, - content:function(){ - player.storage.pingkou=0; - } - }, - count:{ - trigger:{player:[ - 'phaseZhunbeiCancelled','phaseZhunbeiSkipped', - 'phaseJudgeCancelled','phaseJudgeSkipped', - 'phaseDrawCancelled','phaseDrawSkipped', - 'phaseUseCancelled','phaseUseSkipped', - 'phaseDiscardCancelled','phaseDiscardSkipped', - 'phaseJieshuCancelled','phaseJieshuCancelled' - ]}, - silent:true, - content:function(){ - player.storage.pingkou++; - console.log(event.triggername,trigger.name) - } - } - }, trigger:{player:'phaseEnd'}, direct:true, filter:function(event,player){ - return player.storage.pingkou>0; + return player.getHistory('skipped').length>0; }, content:function(){ 'step 0' - player.chooseTarget([1,player.storage.pingkou],get.prompt2('pingkou'),function(card,player,target){ + player.chooseTarget([1,player.getHistory('skipped').length],get.prompt2('pingkou'),function(card,player,target){ return target!=player; }).set('ai',function(target){ var player=_status.event.player; @@ -3068,7 +3038,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, subSkill:{ draw:{ - trigger:{player:'phaseDrawBegin'}, + trigger:{player:'phaseDrawBegin2'}, forced:true, popup:false, onremove:true, @@ -3802,12 +3772,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ direct:true, filter:function(event,player){ if(!player.countCards('he')) return false; - if(!event.source||!event.source.isIn()) return false; + if(!event.source||event.source==player||!event.source.isIn()) return false; if(player.storage.huisheng.contains(event.source)) return false; return true; }, init:function(player){ - player.storage.huisheng=[]; + if(player.storage.huisheng) player.storage.huisheng=[]; }, content:function(){ 'step 0' @@ -4541,7 +4511,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, duliang2:{ - trigger:{player:'phaseDrawBefore'}, + trigger:{player:'phaseDrawBegin'}, forced:true, mark:true, audio:false, @@ -8271,11 +8241,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, qieting:{ audio:2, - global:'qieting2', - globalSilent:true, trigger:{global:'phaseEnd'}, filter:function(event,player){ - return event.player!=player&&!event.player.tempSkills.qieting3&&event.player.isAlive(); + if(event.player==player||!event.player.isAlive()) return false; + var history=event.player.getHistory('useCard'); + for(var i=0;i1||event.targets[0]!=player); - }, - forced:true, - popup:false, - content:function(){ - player.addTempSkill('qieting3'); - } - }, - qieting3:{}, oldzhuikong:{ audio:'zhuikong', inherit:'zhuikong', @@ -8778,7 +8742,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, xinxuanhuo:{ audio:2, - trigger:{player:'phaseDrawBegin'}, + trigger:{player:'phaseDrawBegin1'}, direct:true, content:function(){ "step 0" @@ -8796,7 +8760,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); "step 1" if(result.bool){ - trigger.cancel(); + trigger.cancel(null,null,'notrigger'); player.logSkill('xinxuanhuo',result.targets); event.target=result.targets[0]; event.target.draw(2); @@ -9456,7 +9420,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, zishou:{ audio:2, - trigger:{player:'phaseDrawBegin'}, + trigger:{player:'phaseDrawBegin2'}, check:function(event,player){ return player.countCards('h')<=player.maxHp||player.skipList.contains('phaseUse'); }, @@ -9735,7 +9699,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, jiangchi:{ audio:2, - trigger:{player:'phaseDrawBegin'}, + trigger:{player:'phaseDrawBegin2'}, direct:true, content:function(){ "step 0" @@ -10143,7 +10107,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'phaseUseEnd'}, frequent:true, filter:function(event,player){ - return player.countUsed()>=player.hp; + return player.countUsed(null,true)>=player.hp; }, content:function(){ player.draw(2); @@ -10154,7 +10118,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'phaseJieshuBegin'}, frequent:true, filter:function(event,player){ - return player.countUsed()>=player.hp; + return player.countUsed(null,true)>=player.hp; }, content:function(){ player.draw(2); @@ -10610,44 +10574,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'useCard'}, frequent:true, filter:function(event,player){ - if(event.jianyinged) return false; - if(!event.cards||event.cards.length!=1) return false; + var evt=player.getLastUsed(1); + if(!evt||!evt.card) return false; if(!player.isPhaseUsing()) return false; - if(!player.storage.jianying) return false; - return get.suit(player.storage.jianying)==get.suit(event.cards[0])|| - player.storage.jianying.number==event.cards[0].number; + var evt2=evt.getParent('phaseUse'); + if(!evt2||evt2.name!='phaseUse'||evt2.player!=player) return false; + return get.suit(evt.card)&&get.suit(evt.card)==get.suit(event.card)|| + evt.card.number&&evt.card.number==event.card.number; }, content:function(){ player.draw(); }, - intro:{ - content:'card' - }, - group:['jianying2','jianying3'] - }, - jianying3:{ - trigger:{player:'useCard'}, - priority:-1, - silent:true, - filter:function(event,player){ - if(!event.cards||event.cards.length!=1) return false; - if(_status.currentPhase!=player) return false; - return true; - }, - content:function(){ - player.storage.jianying={ - suit:get.suit(trigger.card), - number:trigger.card.number, - }; - trigger.jianyinged=true; - } - }, - jianying2:{ - trigger:{player:'phaseAfter'}, - silent:true, - content:function(){ - player.storage.jianying=null; - } }, zzhenggong:{ trigger:{player:'damageEnd'},