diff --git a/audio/card/female/yiyi.mp3 b/audio/card/female/yiyi.mp3 index 3cf8a69d7..8e9baa328 100644 Binary files a/audio/card/female/yiyi.mp3 and b/audio/card/female/yiyi.mp3 differ diff --git a/audio/die/jiakui.mp3 b/audio/die/jiakui.mp3 new file mode 100644 index 000000000..b790bf471 Binary files /dev/null and b/audio/die/jiakui.mp3 differ diff --git a/audio/die/re_gaoshun.mp3 b/audio/die/re_gaoshun.mp3 new file mode 100644 index 000000000..824fb480f Binary files /dev/null and b/audio/die/re_gaoshun.mp3 differ diff --git a/audio/die/re_wuguotai.mp3 b/audio/die/re_wuguotai.mp3 new file mode 100644 index 000000000..1537647bc Binary files /dev/null and b/audio/die/re_wuguotai.mp3 differ diff --git a/audio/die/re_xusheng.mp3 b/audio/die/re_xusheng.mp3 new file mode 100644 index 000000000..757df9f88 Binary files /dev/null and b/audio/die/re_xusheng.mp3 differ diff --git a/audio/die/zhangyì.mp3 b/audio/die/zhangyì.mp3 new file mode 100644 index 000000000..a6145b16b Binary files /dev/null and b/audio/die/zhangyì.mp3 differ diff --git a/audio/skill/buyi_re_wuguotai1.mp3 b/audio/skill/buyi_re_wuguotai1.mp3 new file mode 100644 index 000000000..d4409f59a Binary files /dev/null and b/audio/skill/buyi_re_wuguotai1.mp3 differ diff --git a/audio/skill/buyi_re_wuguotai2.mp3 b/audio/skill/buyi_re_wuguotai2.mp3 new file mode 100644 index 000000000..229058cda Binary files /dev/null and b/audio/skill/buyi_re_wuguotai2.mp3 differ diff --git a/audio/skill/reganlu1.mp3 b/audio/skill/reganlu1.mp3 new file mode 100644 index 000000000..54458b285 Binary files /dev/null and b/audio/skill/reganlu1.mp3 differ diff --git a/audio/skill/reganlu2.mp3 b/audio/skill/reganlu2.mp3 new file mode 100644 index 000000000..812025e8f Binary files /dev/null and b/audio/skill/reganlu2.mp3 differ diff --git a/audio/skill/rejinjiu1.mp3 b/audio/skill/rejinjiu1.mp3 new file mode 100644 index 000000000..4e05d2990 Binary files /dev/null and b/audio/skill/rejinjiu1.mp3 differ diff --git a/audio/skill/rejinjiu2.mp3 b/audio/skill/rejinjiu2.mp3 new file mode 100644 index 000000000..1ef3bd863 Binary files /dev/null and b/audio/skill/rejinjiu2.mp3 differ diff --git a/audio/skill/repojun1.mp3 b/audio/skill/repojun1.mp3 new file mode 100644 index 000000000..7d3b557dd Binary files /dev/null and b/audio/skill/repojun1.mp3 differ diff --git a/audio/skill/repojun2.mp3 b/audio/skill/repojun2.mp3 new file mode 100644 index 000000000..6f9633a2c Binary files /dev/null and b/audio/skill/repojun2.mp3 differ diff --git a/audio/skill/rexianzhen1.mp3 b/audio/skill/rexianzhen1.mp3 new file mode 100644 index 000000000..04378c727 Binary files /dev/null and b/audio/skill/rexianzhen1.mp3 differ diff --git a/audio/skill/rexianzhen2.mp3 b/audio/skill/rexianzhen2.mp3 new file mode 100644 index 000000000..f7164b4b1 Binary files /dev/null and b/audio/skill/rexianzhen2.mp3 differ diff --git a/audio/skill/wanlan1.mp3 b/audio/skill/wanlan1.mp3 new file mode 100644 index 000000000..d1d5f70c3 Binary files /dev/null and b/audio/skill/wanlan1.mp3 differ diff --git a/audio/skill/wanlan2.mp3 b/audio/skill/wanlan2.mp3 new file mode 100644 index 000000000..54451a50b Binary files /dev/null and b/audio/skill/wanlan2.mp3 differ diff --git a/audio/skill/zhiyi1.mp3 b/audio/skill/zhiyi1.mp3 new file mode 100644 index 000000000..88ff27517 Binary files /dev/null and b/audio/skill/zhiyi1.mp3 differ diff --git a/audio/skill/zhiyi2.mp3 b/audio/skill/zhiyi2.mp3 new file mode 100644 index 000000000..0b1aba42d Binary files /dev/null and b/audio/skill/zhiyi2.mp3 differ diff --git a/audio/skill/zhongzuo1.mp3 b/audio/skill/zhongzuo1.mp3 new file mode 100644 index 000000000..b54a37e93 Binary files /dev/null and b/audio/skill/zhongzuo1.mp3 differ diff --git a/audio/skill/zhongzuo2.mp3 b/audio/skill/zhongzuo2.mp3 new file mode 100644 index 000000000..6f10bbe88 Binary files /dev/null and b/audio/skill/zhongzuo2.mp3 differ diff --git a/card/extra.js b/card/extra.js index 57fc2e532..9d8655b2c 100644 --- a/card/extra.js +++ b/card/extra.js @@ -118,7 +118,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ if(player.getActCount()+1>=player.actcount) return 0; } var shas=player.getCards('h','sha'); - if(shas.length>1&&player.getCardUsable('sha')>1){ + if(shas.length>1&&(player.getCardUsable('sha')>1||player.countCards('h','zhuge'))){ return 0; } var card; @@ -742,6 +742,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ if(!trigger.baseDamage) trigger.baseDamage=1; trigger.baseDamage+=player.storage.jiu; trigger.jiu=true; + trigger.jiu_add=player.storage.jiu; game.addVideo('jiuNode',player,false); game.broadcastAll(function(player){ player.removeSkill('jiu'); diff --git a/card/huanlekapai.js b/card/huanlekapai.js index f2428bd4a..9ce578dcd 100644 --- a/card/huanlekapai.js +++ b/card/huanlekapai.js @@ -39,7 +39,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ enable:true, fullskin:true, outrange:{ - global:1, + global:2, }, filterTarget:lib.filter.notMe, content:function (){ diff --git a/card/standard.js b/card/standard.js index 4c45f76e3..9964019bf 100644 --- a/card/standard.js +++ b/card/standard.js @@ -1586,6 +1586,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){ trigger:{player:'useCardToPlayered'}, audio:true, logTarget:'target', + check:function(event,player){ + if(get.attitude(player,event.target)>0) return true; + return target.countCards('h')==0||!target.hasSkillTag('noh'); + }, filter:function(event,player){ if(event.card.name!='sha') return false; if(player.sex=='male'&&event.target.sex=='female') return true; diff --git a/card/zhenfa.js b/card/zhenfa.js index 18c8fc20d..501d878ac 100644 --- a/card/zhenfa.js +++ b/card/zhenfa.js @@ -1,441 +1,442 @@ -'use strict'; -game.import('card',function(lib,game,ui,get,ai,_status){ - return { - name:'zhenfa', - card:{ - pozhenjue:{ - type:'zhenfa', - chongzhu:true, - enable:true, - notarget:true, - content:function(){ - var targets=game.filterPlayer(); - var n=targets.length; - while(n--){ - game.swapSeat(targets.randomGet(),targets.randomGet()); - } - }, - mode:['guozhan'], - ai:{ - order:8, - result:{ - player:1, - }, - } - }, - changshezhen:{ - type:'zhenfa', - chongzhu:true, - enable:function(card,player){ - if(player.inline()) return true; - if(player.identity=='unknown'||player.identity=='ye') return false; - return game.hasPlayer(function(current){ - return current!=player&¤t.isFriendOf(player); - }); - }, - notarget:true, - content:function(){ - if(player.inline()){ - var targets=game.filterPlayer(function(current){ - return player.inline(current); - }); - player.line(targets); - game.asyncDraw(targets); - } - else if(player.getNext()){ - var list=game.filterPlayer(function(current){ - return current!=player&¤t.isFriendOf(player); - }); - if(list.length){ - list.sort(function(a,b){ - return get.distance(player,a,'absolute')-get.distance(player,b,'absolute'); - }); - player.line(list[0]); - game.swapSeat(list[0],player.getNext(),true,true); - } - } - }, - mode:['guozhan'], - ai:{ - order:6.5, - result:{ - player:1, - }, - tag:{ - draw:1 - } - } - }, - tianfuzhen:{ - type:'zhenfa', - chongzhu:true, - enable:function(){ - return game.hasPlayer(function(current){ - return current.isMajor(); - }); - }, - filterTarget:function(card,player,target){ - return target.isMajor()&&target.countCards('he')>0; - }, - selectTarget:-1, - content:function(){ - target.chooseToDiscard('he',true).delay=false; - }, - mode:['guozhan'], - ai:{ - order:7, - result:{ - target:-1, - }, - tag:{ - discard:1 - } - } - }, - dizaizhen:{ - type:'zhenfa', - chongzhu:true, - enable:function(){ - return game.hasPlayer(function(current){ - return current.isNotMajor(); - }); - }, - filterTarget:function(card,player,target){ - return target.isNotMajor(); - }, - selectTarget:-1, - content:function(){ - target.draw(false); - target.$draw(); - }, - mode:['guozhan'], - ai:{ - order:7, - result:{ - target:1, - }, - tag:{ - draw:1 - } - } - }, - fengyangzhen:{ - type:'zhenfa', - chongzhu:true, - enable:true, - filterTarget:function(card,player,target){ - return target.sieged(); - }, - selectTarget:-1, - content:function(){ - target.addTempSkill('feiying',{player:'damageAfter'}); - target.popup('feiying'); - game.log(target,'获得了技能','【飞影】'); - }, - mode:['guozhan'], - ai:{ - order:7, - result:{ - target:2, - }, - } - }, - yunchuizhen:{ - type:'zhenfa', - chongzhu:true, - enable:true, - filterTarget:function(card,player,target){ - return target.siege(); - }, - selectTarget:-1, - content:function(){ - target.addTempSkill('wushuang',{source:'damageAfter'}); - target.popup('wushuang'); - game.log(target,'获得了技能','【无双】'); - }, - mode:['guozhan'], - ai:{ - order:7, - result:{ - target:2, - }, - } - }, - qixingzhen:{ - type:'zhenfa', - chongzhu:true, - enable:function(card,player){ - return player.siege()||player.sieged(); - }, - filterTarget:function(card,player,target){ - return target==player; - }, - selectTarget:-1, - content:function(){ - 'step 0' - event.targets=game.filterPlayer(function(current){ - return current.siege(player); - }); - 'step 1' - if(event.targets.length){ - var current=event.targets.shift(); - player.line(current,'green'); - player.discardPlayerCard(current,true); - event.redo(); - } - 'step 2' - var list=game.filterPlayer(function(current){ - return current.sieged(player); - }); - if(list.length){ - player.useCard({name:'sha'},list,false); - } - }, - mode:['guozhan'], - ai:{ - order:7, - result:{ - target:1, - }, - } - }, - shepanzhen:{ - type:'zhenfa', - chongzhu:true, - enable:function(card,player){ - if(player.identity=='unknown'||player.identity=='ye') return false; - if(get.population(player.identity)<=1) return false; - return game.hasPlayer(function(current){ - return current!=player&¤t.identity==player.identity&&!player.inline(current); - }); - }, - notarget:true, - content:function(){ - var targets=game.filterPlayer(function(current){ - return current.identity==player.identity; - }); - targets.sortBySeat(); - for(var i=1;i0){ - return 6-get.value(card); - } - return 0; - }; - "step 1" - if(result.bool){ - player.useCard({name:'sha'},result.cards,target,false); - } - "step 2" - if(target==player.next) event.player2=player.next.next; - else event.player2=player.previous.previous; - event.player2.chooseCard('将一张非基本牌当作杀对'+get.translation(target)+'使用','he',function(card){ - return get.type(card)!='basic'; - }).ai=function(card){ - if(get.effect(target,{name:'sha'},event.player2,event.player2)>0){ - return 6-get.value(card); - } - return 0; - }; - "step 3" - if(result.bool){ - event.player2.useCard({name:'sha'},result.cards,target,false); - } - }, - mode:['guozhan'], - ai:{ - order:7, - result:{ - target:-2, - }, - } - }, - niaoxiangzhen:{ - type:'zhenfa', - chongzhu:true, - enable:true, - filterTarget:function(card,player,target){ - if(player.identity==target.identity) return false; - if(target.identity=='unknown'||target.identity=='ye') return false; - return target.identity==target.next.identity||target.identity==target.previous.identity - }, - selectTarget:-1, - content:function(){ - "step 0" - var next=target.chooseToRespond({name:'shan'}); - next.ai=function(card){ - if(get.damageEffect(target,player,target)>=0) return 0; - return 1; - }; - next.autochoose=lib.filter.autoRespondShan; - "step 1" - if(result.bool==false){ - target.damage(); - } - }, - ai:{ - basic:{ - order:9, - useful:1 - }, - result:{ - target:-1.5, - }, - tag:{ - respond:1, - respondShan:1, - damage:1, - } - }, - mode:['guozhan'], - }, - }, - skill:{ - - }, - translate:{ - zhenfa:'阵法', - changshezhen:'长蛇阵', - pozhenjue:'破阵决', - tianfuzhen:'天覆阵', - dizaizhen:'地载阵', - fengyangzhen:'风扬阵', - yunchuizhen:'云垂阵', - qixingzhen:'七星阵', - shepanzhen:'蛇蟠阵', - shepanzhen_bg:'列', - yunchuizhen_bg:'垂', - longfeizhen:'龙飞阵', - huyizhen:'虎翼阵', - niaoxiangzhen:'鸟翔阵', - niaoxiangzhen_info:'令所有非你阵营的队列的角色今次打出一张闪,或者受到一点伤害', - qixingzhen_info:'弃置所有围攻你的角色各一张牌,然后视为对所有你围攻的角色使用一张不计入出杀次数的杀', - // longfeizhen_info:'弃置围攻你的角色各一张牌,然后摸一张牌', - // qixingzhen_info:'令我方所有角色进入围攻状态', - // shepanzhen_info:'令我方所有角色进入队列状态', - // yunchuizhen_info:'令所有围攻角色获得技能【无双】,直到其首次造成伤害', - // fengyangzhen_info:'令所有被围攻角色获得技能【飞影】,直到其首次受到伤害', - dizaizhen_info:'所有小势力角色摸一张牌', - changshezhen_info:'若你处于队列中,与你同一队列的所有角色摸一张牌,否则将与你逆时针距离最近的同势力角色移至你下家', - // pozhenjue_info:'将所有角色的顺序随机重排', - tianfuzhen_info:'所有大势力角色弃置一张牌' - }, - list:[ - ["diamond",1,'changshezhen'], - ["club",1,'changshezhen'], - // ["spade",1,'changshezhen'], - // ["heart",1,'changshezhen'], - - ["diamond",2,'tianfuzhen'], - // ["club",2,'tianfuzhen'], - ["spade",2,'tianfuzhen'], - ["heart",2,'tianfuzhen'], - - ["diamond",3,'dizaizhen'], - // ["club",3,'dizaizhen'], - ["spade",3,'dizaizhen'], - ["heart",3,'dizaizhen'], - - // ["diamond",4,'fengyangzhen'], - // ["club",4,'fengyangzhen'], - // ["spade",4,'fengyangzhen'], - // ["heart",4,'fengyangzhen'], - - // ["diamond",5,'zhonghuangzhen'], - // ["club",5,'zhonghuangzhen'], - // ["spade",5,'zhonghuangzhen'], - // ["heart",5,'zhonghuangzhen'], - - // ["diamond",6,'huyizhen'], - // ["club",6,'huyizhen'], - // ["spade",6,'huyizhen'], - // ["heart",6,'huyizhen'], - - ["diamond",7,'qixingzhen'], - ["club",7,'qixingzhen'], - ["spade",7,'qixingzhen'], - // ["heart",7,'qixingzhen'], - - // ["diamond",8,'shepanzhen'], - // ["club",8,'shepanzhen'], - // ["spade",8,'shepanzhen'], - // ["heart",8,'shepanzhen'], - - // ["diamond",9,'longfeizhen'], - // ["club",9,'longfeizhen'], - // ["spade",9,'longfeizhen'], - // ["heart",9,'longfeizhen'], - - ["diamond",11,'niaoxiangzhen'], - // ["club",11,'niaoxiangzhen'], - ["spade",11,'niaoxiangzhen'], - ["heart",11,'niaoxiangzhen'], - - // ["diamond",12,'yunchuizhen'], - // ["club",12,'yunchuizhen'], - // ["spade",12,'yunchuizhen'], - // ["heart",12,'yunchuizhen'], - - // ["diamond",13,'pozhenjue'], - // ["club",13,'pozhenjue'], - // ["spade",13,'pozhenjue'], - //["heart",13,'pozhenjue'], - ], - }; -}); +'use strict'; +game.import('card',function(lib,game,ui,get,ai,_status){ + return { + name:'zhenfa', + card:{ + pozhenjue:{ + type:'zhenfa', + chongzhu:true, + enable:true, + notarget:true, + content:function(){ + var targets=game.filterPlayer(); + var n=targets.length; + while(n--){ + game.swapSeat(targets.randomGet(),targets.randomGet()); + } + }, + mode:['guozhan'], + ai:{ + order:8, + result:{ + player:1, + }, + } + }, + changshezhen:{ + type:'zhenfa', + chongzhu:true, + enable:function(card,player){ + if(player.inline()) return true; + if(player.identity=='unknown'||player.identity=='ye') return false; + return game.hasPlayer(function(current){ + return current!=player&¤t.isFriendOf(player); + }); + }, + notarget:true, + content:function(){ + if(player.inline()){ + var targets=game.filterPlayer(function(current){ + return player.inline(current); + }); + player.line(targets); + game.asyncDraw(targets); + } + else if(player.getNext()){ + var list=game.filterPlayer(function(current){ + return current!=player&¤t.isFriendOf(player); + }); + if(list.length){ + list.sort(function(a,b){ + return get.distance(player,a,'absolute')-get.distance(player,b,'absolute'); + }); + player.line(list[0]); + game.swapSeat(list[0],player.getNext(),true,true); + } + } + }, + mode:['guozhan'], + ai:{ + order:6.5, + result:{ + player:1, + }, + tag:{ + draw:1 + } + } + }, + tianfuzhen:{ + type:'zhenfa', + chongzhu:true, + enable:function(){ + return game.hasPlayer(function(current){ + return current.isMajor(); + }); + }, + filterTarget:function(card,player,target){ + return target.isMajor()&&target.countCards('he')>0; + }, + selectTarget:-1, + content:function(){ + target.chooseToDiscard('he',true).delay=false; + }, + mode:['guozhan'], + ai:{ + order:7, + result:{ + target:-1, + }, + tag:{ + discard:1 + } + } + }, + dizaizhen:{ + type:'zhenfa', + chongzhu:true, + enable:function(){ + return game.hasPlayer(function(current){ + return current.isNotMajor(); + }); + }, + filterTarget:function(card,player,target){ + return target.isNotMajor(); + }, + selectTarget:-1, + content:function(){ + target.draw(false); + target.$draw(); + }, + mode:['guozhan'], + ai:{ + order:7, + result:{ + target:1, + }, + tag:{ + draw:1 + } + } + }, + fengyangzhen:{ + type:'zhenfa', + chongzhu:true, + enable:true, + filterTarget:function(card,player,target){ + return target.sieged(); + }, + selectTarget:-1, + content:function(){ + target.addTempSkill('feiying',{player:'damageAfter'}); + target.popup('feiying'); + game.log(target,'获得了技能','【飞影】'); + }, + mode:['guozhan'], + ai:{ + order:7, + result:{ + target:2, + }, + } + }, + yunchuizhen:{ + type:'zhenfa', + chongzhu:true, + enable:true, + filterTarget:function(card,player,target){ + return target.siege(); + }, + selectTarget:-1, + content:function(){ + target.addTempSkill('wushuang',{source:'damageAfter'}); + target.popup('wushuang'); + game.log(target,'获得了技能','【无双】'); + }, + mode:['guozhan'], + ai:{ + order:7, + result:{ + target:2, + }, + } + }, + qixingzhen:{ + type:'zhenfa', + chongzhu:true, + enable:function(card,player){ + return player.siege()||player.sieged(); + }, + filterTarget:function(card,player,target){ + return target==player; + }, + selectTarget:-1, + content:function(){ + 'step 0' + event.targets=game.filterPlayer(function(current){ + return current.siege(player); + }); + 'step 1' + if(event.targets.length){ + var current=event.targets.shift(); + player.line(current,'green'); + player.discardPlayerCard(current,true); + event.redo(); + } + 'step 2' + var card={name:'sha',isCard:true}; + var list=game.filterPlayer(function(current){ + return current.siege(player)&&player.canUse(card,current); + }); + if(list.length){ + player.useCard(card,list,false); + } + }, + mode:['guozhan'], + ai:{ + order:7, + result:{ + target:1, + }, + } + }, + shepanzhen:{ + type:'zhenfa', + chongzhu:true, + enable:function(card,player){ + if(player.identity=='unknown'||player.identity=='ye') return false; + if(get.population(player.identity)<=1) return false; + return game.hasPlayer(function(current){ + return current!=player&¤t.identity==player.identity&&!player.inline(current); + }); + }, + notarget:true, + content:function(){ + var targets=game.filterPlayer(function(current){ + return current.identity==player.identity; + }); + targets.sortBySeat(); + for(var i=1;i0){ + return 6-get.value(card); + } + return 0; + }; + "step 1" + if(result.bool){ + player.useCard({name:'sha'},result.cards,target,false); + } + "step 2" + if(target==player.next) event.player2=player.next.next; + else event.player2=player.previous.previous; + event.player2.chooseCard('将一张非基本牌当作杀对'+get.translation(target)+'使用','he',function(card){ + return get.type(card)!='basic'; + }).ai=function(card){ + if(get.effect(target,{name:'sha'},event.player2,event.player2)>0){ + return 6-get.value(card); + } + return 0; + }; + "step 3" + if(result.bool){ + event.player2.useCard({name:'sha'},result.cards,target,false); + } + }, + mode:['guozhan'], + ai:{ + order:7, + result:{ + target:-2, + }, + } + }, + niaoxiangzhen:{ + type:'zhenfa', + chongzhu:true, + enable:true, + filterTarget:function(card,player,target){ + if(player.identity==target.identity) return false; + if(target.identity=='unknown'||target.identity=='ye') return false; + return target.identity==target.next.identity||target.identity==target.previous.identity + }, + selectTarget:-1, + content:function(){ + "step 0" + var next=target.chooseToRespond({name:'shan'}); + next.ai=function(card){ + if(get.damageEffect(target,player,target)>=0) return 0; + return 1; + }; + next.autochoose=lib.filter.autoRespondShan; + "step 1" + if(result.bool==false){ + target.damage(); + } + }, + ai:{ + basic:{ + order:9, + useful:1 + }, + result:{ + target:-1.5, + }, + tag:{ + respond:1, + respondShan:1, + damage:1, + } + }, + mode:['guozhan'], + }, + }, + skill:{ + + }, + translate:{ + zhenfa:'阵法', + changshezhen:'长蛇阵', + pozhenjue:'破阵决', + tianfuzhen:'天覆阵', + dizaizhen:'地载阵', + fengyangzhen:'风扬阵', + yunchuizhen:'云垂阵', + qixingzhen:'七星阵', + shepanzhen:'蛇蟠阵', + shepanzhen_bg:'列', + yunchuizhen_bg:'垂', + longfeizhen:'龙飞阵', + huyizhen:'虎翼阵', + niaoxiangzhen:'鸟翔阵', + niaoxiangzhen_info:'令所有非你阵营的队列的角色今次打出一张闪,或者受到一点伤害', + qixingzhen_info:'弃置所有围攻你的角色各一张牌,然后视为对所有你围攻的角色使用一张不计入出杀次数的杀', + // longfeizhen_info:'弃置围攻你的角色各一张牌,然后摸一张牌', + // qixingzhen_info:'令我方所有角色进入围攻状态', + // shepanzhen_info:'令我方所有角色进入队列状态', + // yunchuizhen_info:'令所有围攻角色获得技能【无双】,直到其首次造成伤害', + // fengyangzhen_info:'令所有被围攻角色获得技能【飞影】,直到其首次受到伤害', + dizaizhen_info:'所有小势力角色摸一张牌', + changshezhen_info:'若你处于队列中,与你同一队列的所有角色摸一张牌,否则将与你逆时针距离最近的同势力角色移至你下家', + // pozhenjue_info:'将所有角色的顺序随机重排', + tianfuzhen_info:'所有大势力角色弃置一张牌' + }, + list:[ + ["diamond",1,'changshezhen'], + ["club",1,'changshezhen'], + // ["spade",1,'changshezhen'], + // ["heart",1,'changshezhen'], + + ["diamond",2,'tianfuzhen'], + // ["club",2,'tianfuzhen'], + ["spade",2,'tianfuzhen'], + ["heart",2,'tianfuzhen'], + + ["diamond",3,'dizaizhen'], + // ["club",3,'dizaizhen'], + ["spade",3,'dizaizhen'], + ["heart",3,'dizaizhen'], + + // ["diamond",4,'fengyangzhen'], + // ["club",4,'fengyangzhen'], + // ["spade",4,'fengyangzhen'], + // ["heart",4,'fengyangzhen'], + + // ["diamond",5,'zhonghuangzhen'], + // ["club",5,'zhonghuangzhen'], + // ["spade",5,'zhonghuangzhen'], + // ["heart",5,'zhonghuangzhen'], + + // ["diamond",6,'huyizhen'], + // ["club",6,'huyizhen'], + // ["spade",6,'huyizhen'], + // ["heart",6,'huyizhen'], + + ["diamond",7,'qixingzhen'], + ["club",7,'qixingzhen'], + ["spade",7,'qixingzhen'], + // ["heart",7,'qixingzhen'], + + // ["diamond",8,'shepanzhen'], + // ["club",8,'shepanzhen'], + // ["spade",8,'shepanzhen'], + // ["heart",8,'shepanzhen'], + + // ["diamond",9,'longfeizhen'], + // ["club",9,'longfeizhen'], + // ["spade",9,'longfeizhen'], + // ["heart",9,'longfeizhen'], + + ["diamond",11,'niaoxiangzhen'], + // ["club",11,'niaoxiangzhen'], + ["spade",11,'niaoxiangzhen'], + ["heart",11,'niaoxiangzhen'], + + // ["diamond",12,'yunchuizhen'], + // ["club",12,'yunchuizhen'], + // ["spade",12,'yunchuizhen'], + // ["heart",12,'yunchuizhen'], + + // ["diamond",13,'pozhenjue'], + // ["club",13,'pozhenjue'], + // ["spade",13,'pozhenjue'], + //["heart",13,'pozhenjue'], + ], + }; +}); diff --git a/character/diy.js b/character/diy.js index c1c77c053..e814863bd 100755 --- a/character/diy.js +++ b/character/diy.js @@ -4035,8 +4035,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.bool){ player.logSkill('nsdufu',result.targets); trigger.source=result.targets[0]; - trigger.untrigger(); - trigger.trigger('damageBefore'); } } }, diff --git a/character/extra.js b/character/extra.js index 4f10abece..3467c0136 100755 --- a/character/extra.js +++ b/character/extra.js @@ -1622,7 +1622,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'phaseDrawBegin2'}, //priority:-5, filter:function(event,player){ - return player.hp0; - }); - for(var i=0;i0; - })){ - choice='shatang'; - } - if(!choice){ - for(var i=0;i=0) return false; - if(current.hp==1&&eff<0) return true; - if(get.attitude(player,current)<0&&get.attitude(player,current.getNext()<0)&&get.attitude(player,current.getPrevious())<0){ - return true; - } - return false; - })){ - choice='shenhuofeiya'; - } - player.chooseVCardButton('选择一张牌视为使用之',['liufengsan','shujinsan','shenhuofeiya']).set('ai',function(button){ - if(button.link[2]==_status.event.choice) return 2; - return Math.random(); - }).set('choice',choice).set('filterButton',function(button){ - return _status.event.player.hasUseTarget(button.link[2]); - }); - 'step 1' - player.chooseUseTarget(true,result.links[0][2]); - }, - ai:{ - order:5, - result:{ - player:1 - } - } - }, - yanjiadan_club:{ - type:'jiguan', - cardcolor:'club', - fullskin:true, - derivation:'gjqt_xieyi', - enable:true, - notarget:true, - content:function(){ - 'step 0' - var choice='liutouge'; - player.chooseVCardButton('选择一张牌视为使用之',['bingpotong','liutouge','mianlijinzhen']).set('ai',function(button){ - if(button.link[2]==_status.event.choice) return 2; - return Math.random(); - }).set('choice',choice).set('filterButton',function(button){ - return _status.event.player.hasUseTarget(button.link[2]); - }); - 'step 1' - player.chooseUseTarget(true,result.links[0][2]); - }, - ai:{ - order:5, - result:{ - player:1 - } - } - }, - yanjiadan_spade:{ - type:'jiguan', - cardcolor:'spade', - fullskin:true, - derivation:'gjqt_xieyi', - enable:true, - notarget:true, - content:function(){ - 'step 0' - var choice=null; - if(player.getUseValue('longxugou')>0){ - choice='longxugou'; - } - else if(player.getUseValue('qiankunbiao')>0){ - choice='qiankunbiao'; - } - else if(player.getUseValue('feibiao')>0){ - choice='qiankunbiao'; - } - player.chooseVCardButton('选择一张牌视为使用之',['feibiao','qiankunbiao','longxugou']).set('ai',function(button){ - if(button.link[2]==_status.event.choice) return 2; - return Math.random(); - }).set('choice',choice).set('filterButton',function(button){ - return _status.event.player.hasUseTarget(button.link[2]); - }); - 'step 1' - player.chooseUseTarget(true,result.links[0][2]); - }, - ai:{ - order:5, - result:{ - player:function(player){ - if(player.getUseValue('feibiao')>0) return 1; - if(player.getUseValue('qiankunbiao')>0) return 1; - if(player.getUseValue('longxugou')>0) return 1; - return 0; - } - } - } - } - }, - skill:{ - qingshu:{ - ai:{ - threaten:1.4 - }, - trigger:{player:'phaseEnd'}, - direct:true, - filter:function(event,player){ - for(var i=0;iplayer.storage.yunyou.length; - }, - delay:0, - content:function(){ - var list=get.inpile('land'); - for(var i=0;iplayer.storage.lingyan.length/13) return false; - return get.cardPile2(event.card.name)?true:false; - }, - content:function(){ - var card=get.cardPile2(trigger.card.name); - if(card){ - player.gain(card,'gain2'); - } - } - }, - tongtian:{ - trigger:{player:['useCardAfter','respondAfter']}, - forced:true, - filter:function(event,player){ - var name=event.card.name; - var enemies=player.getEnemies(); - for(var i=0;i0) { - player.markSkill('yange'); - } - }, - filter:function(event,player){ - return player.storage.yange>0; - }, - content:function(){ - 'step 0' - player.chooseTarget(function(card,player,target){ - return player!=target; - },get.prompt2('yange')).set('pskill',trigger.skill).set('ai',function(target){ - if(_status.event.pskill) return 0; - var player=_status.event.player; - var nh=player.countCards('h'); - var nh2=target.countCards('h'); - var num=nh2-nh; - if(player.hp==1){ - return num; - } - if(get.threaten(target)>=1.5){ - if(num<2) return 0; - } - else{ - if(num<3) return 0; - } - return num+Math.sqrt(get.threaten(target)); - }); - 'step 1' - if(result.bool){ - player.storage.yange--; - if(player.storage.yange<=0){ - player.unmarkSkill('yange'); - } - else{ - player.updateMarks(); - } - var target=result.targets[0]; - player.logSkill('yange',target); - var clone=function(pos){ - var cloned=[]; - var cards=target.getCards(pos); - for(var i=0;i0){ - if(target.isTurnedOver()) return 2.5; - if(target.hp==1){ - if(nh==0) return 2; - if(nh==1) return 0.9; - if(ui.selected.targets.length) return 0.3; - } - else if(target.hp==2){ - if(nh==0) return 1.5; - if(nh==1) return 0.5; - if(ui.selected.targets.length) return 0.2; - } - else if(target.hp==3){ - if(nh==0) return 0.4; - if(nh==1) return 0.35; - if(ui.selected.targets.length) return 0.1; - } - if(!target.needsToDiscard(2)) return 0.2; - if(ui.selected.targets.length||!player.needsToDiscard(2)) return 0.05; - } - return 0; - }); - 'step 1' - if(result.bool){ - player.logSkill('lianjing',result.targets); - player.insertEvent('lianjing',lib.skill.lianjing.content_phase); - player.storage.lianjing_targets=result.targets.slice(0); - // player.storage.lianjing--; - // if(player.storage.lianjing<=0){ - // player.unmarkSkill('lianjing'); - // } - game.delay(); - } - }, - content_phase:function(){ - 'step 0' - event.list=[player].concat(player.storage.lianjing_targets); - event.exlist=[]; - event.list.sortBySeat(); - delete player.storage.lianjing_targets; - for(var i=0;i0; - })){ - if(player.hp>1||!player.isTurnedOver()){ - goon=true; - } - } - player.chooseTarget(get.prompt('cihong'),function(card,playe,target){ - return player.canUse('sha',target,false); - }).set('ai',function(target){ - if(!_status.event.goon) return false; - var player=_status.event.player; - if(get.attitude(player,target)>=0) return false; - if(target.hp>3) return false; - return get.effect(target,{name:'sha'},player,player); - }).set('goon',goon); - 'step 1' - if(result.bool){ - event.target=result.targets[0]; - player.logSkill('cihong',event.target); - } - else{ - event.finish(); - } - 'step 2' - if(event.target.isAlive()&&player.countCards('he',{color:'red'})){ - player.chooseToDiscard('he',{color:'red'},'是否弃置一张红色牌视为对'+get.translation(event.target)+'使用一张杀?').set('ai',function(card){ - return 8-get.value(card); - }) - } - else{ - event.goto(4); - } - 'step 3' - if(result.bool){ - player.useCard({name:'sha'},event.target); - } - 'step 4' - if(event.target.isAlive()){ - player.chooseBool('是否失去一点体力并视为对'+get.translation(event.target)+'使用一张杀?').set('choice', - player.hp>event.target.hp&&player.hp>1&&event.target.hp>0 - ); - } - else{ - event.finish(); - } - 'step 5' - if(result.bool){ - player.loseHp(); - player.useCard({name:'sha'},event.target); - } - 'step 6' - if(event.target.isAlive()&&!player.isTurnedOver()){ - player.chooseBool('是将武将牌翻至背面并视为对'+get.translation(event.target)+'使用一张杀?').set('choice', - event.target.hp==1 - ); - } - else{ - event.finish(); - } - 'step 7' - if(result.bool){ - player.turnOver(true); - player.useCard({name:'sha'},event.target); - } - }, - ai:{ - threaten:1.5 - } - }, - zhenying:{ - trigger:{player:['useCard','respond']}, - forced:true, - filter:function(event,player){ - if(get.is.converted(event)) return false; - if(event.card.zhenying_link) return false; - if(get.color(event.card)!='black') return false; - if(['delay','equip'].contains(get.type(event.card))) return false; - return true; - }, - content:function(){ - var fake=game.createCard(trigger.card); - fake.zhenying_link=true; - player.gain(fake,'draw')._triggered=null; - fake.classList.add('glow'); - fake._destroy='zhenying'; - fake._modUseful=function(){return 0.1}; - fake._modValue=function(){return 0.1}; - }, - group:['zhenying_discard','zhenying_lose'], - subSkill:{ - discard:{ - trigger:{player:['useCardAfter','respondAfter']}, - forced:true, - filter:function(event,player){ - if(get.is.converted(event)) return false; - if(!player.countCards('he')) return false; - if(event.card.zhenying_link) return true; - return false; - }, - popup:false, - content:function(){ - player.chooseToDiscard('he',true); - } - }, - lose:{ - trigger:{global:'phaseAfter'}, - silent:true, - content:function(){ - var hs=player.getCards('h',function(card){ - return card.zhenying_link?true:false; - }); - if(hs.length){ - player.lose(hs)._triggered=null; - } - } - } - } - }, - lingnu:{ - trigger:{source:'damageEnd'}, - forced:true, - init:function(player){ - player.storage.lingnu={}; - }, - ai:{ - threaten:1.3 - }, - filter:function(event,player){ - var num=0; - for(var i in player.storage.lingnu){ - num++; - if(num>=3) return false; - } - return event.num>0; - }, - content:function(){ - var check=function(list){ - for(var i=0;i=3) break; - if(list.length){ - var skill=list.randomGet(); - player.addAdditionalSkill('lingnu',skill,true); - player.storage.lingnu[skill]=3; - player.popup(skill); - game.log(player,'获得了技能','【'+get.translation(skill)+'】'); - player.markSkill('lingnu'); - num++; - } - } - }, - intro:{ - content:function(storage){ - var str='
    '; - for(var i in storage){ - str+='
  • '+get.translation(i)+':剩余'+storage[i]+'回合'; - } - str+='
' - return str; - }, - markcount:function(storage){ - var num=0; - for(var i in storage){ - num++; - } - return num; - } - }, - group:'lingnu_remove', - subSkill:{ - remove:{ - trigger:{player:'phaseAfter'}, - silent:true, - content:function(){ - var clear=true; - for(var i in player.storage.lingnu){ - player.storage.lingnu[i]--; - if(player.storage.lingnu[i]<=0){ - delete player.storage.lingnu[i]; - player.removeAdditionalSkill('lingnu',i); - } - else{ - clear=false; - } - } - if(clear){ - player.unmarkSkill('lingnu'); - } - else{ - player.updateMarks(); - } - } - } - } - }, - zuiji:{ - enable:'phaseUse', - filterCard:true, - position:'he', - viewAs:{name:'jiu'}, - viewAsFilter:function(player){ - if(!player.countCards('he')) return false; - }, - prompt:'将一张手牌或装备牌当酒使用', - check:function(card){ - return 5-get.value(card); - }, - ai:{ - threaten:1.2 - } - }, - manwu:{ - trigger:{global:'phaseEnd'}, - check:function(event,player){ - return get.attitude(player,event.player)>0; - }, - filter:function(event,player){ - return event.player.isMinHandcard(); - }, - logTarget:'player', - content:function(){ - trigger.player.draw(); - }, - ai:{ - expose:0.1 - } - }, - xfanghua:{ - trigger:{target:'useCardToBegin'}, - priority:-1, - filter:function(event,player){ - return get.color(event.card)=='red'&&player.isDamaged(); - }, - frequent:true, - content:function(){ - player.recover(); - }, - ai:{ - effect:{ - target:function(card,player,target,current){ - if(get.color(card)=='red'&&target.isDamaged()) return [1,1]; - } - } - } - }, - duhun:{ - enable:'chooseToUse', - filter:function(event,player){ - if(event.type!='dying') return false; - if(player!=event.dying) return false; - if(player.maxHp<=1) return false; - if(player.countCards('h')==0) return false; - return true; - }, - // alter:true, - filterTarget:function(card,player,target){ - return target!=player&&target.countCards('h')>0&&target.hp>0&&target.hp<=player.maxHp; - }, - content:function(){ - 'step 0' - player.chooseToCompare(target); - 'step 1' - if(!result.bool){ - player.die(); - event.finish(); - } - else{ - event.num=target.hp-player.hp; - player.loseMaxHp(); - } - 'step 2' - player.changeHp(event.num); - if(get.is.altered('duhun')){ - event.finish(); - } - 'step 3' - event.target.changeHp(-event.num); - 'step 4' - if(event.target.hp<=0){ - event.target.dying({source:player}); - } - }, - ai:{ - order:1, - skillTagFilter:function(player){ - if(player.maxHp<=1) return false; - if(player.hp>0) return false; - if(player.countCards('h')==0) return false; - }, - save:true, - result:{ - target:-1, - player:1 - }, - threaten:2 - }, - }, - yunyin:{ - trigger:{player:'phaseEnd'}, - direct:true, - subSkill:{ - count:{ - trigger:{player:'useCard'}, - silent:true, - filter:function(event,player){ - return _status.currentPhase==player; - }, - content:function(){ - if(!player.storage.yunyin){ - player.storage.yunyin=[]; - } - var suit=get.suit(trigger.card); - if(suit){ - player.storage.yunyin.add(suit); - } - } - }, - set:{ - trigger:{player:'phaseAfter'}, - silent:true, - content:function(){ - delete player.storage.yunyin; - } - } - }, - filter:function(event,player){ - if(!player.storage.yunyin) return true; - var hs=player.getCards('h'); - for(var i=0;i0){ - taoyuan++; - } - else if(eff1<0){ - taoyuan--; - } - if(eff2>0){ - nanman++; - } - else if(eff2<0){ - nanman--; - } - } - player.chooseButton(dialog).ai=function(button){ - var name=button.link[2]; - if(Math.max(taoyuan,nanman)>1){ - if(taoyuan>nanman) return name=='taoyuan'?1:0; - return name=='nanman'?1:0; - } - if(player.countCards('h')=2){ - return name=='wuzhong'?1:0; - } - if(player.hp=2) return true; - } - } - }, - filterCard:function(card){ - if(ui.selected.cards.length&&card.name==ui.selected.cards[0].name) return false; - var info=get.info(card); - return info.type=='equip'&&!info.nomod&&!info.unique&&lib.inpile.contains(card.name); - }, - selectCard:2, - position:'he', - check:function(card){ - return get.value(card); - }, - content:function(){ - var name=cards[0].name+'_'+cards[1].name; - var info1=get.info(cards[0]),info2=get.info(cards[1]); - if(!lib.card[name]){ - var info={ - enable:true, - type:'equip', - subtype:get.subtype(cards[0]), - vanish:true, - cardimage:info1.cardimage||cards[0].name, - filterTarget:function(card,player,target){ - return target==player; - }, - selectTarget:-1, - modTarget:true, - content:lib.element.content.equipCard, - legend:true, - source:[cards[0].name,cards[1].name], - onEquip:[], - onLose:[], - skills:[], - distance:{}, - ai:{ - order:8.9, - equipValue:10, - useful:2.5, - value:function(card,player){ - var value=0; - var info=get.info(card); - var current=player.getEquip(info.subtype); - if(current&&card!=current){ - value=get.value(current,player); - } - var equipValue=info.ai.equipValue||info.ai.basic.equipValue; - if(typeof equipValue=='function') return equipValue(card,player)-value; - return equipValue-value; - }, - result:{ - target:function(player,target){ - return get.equipResult(player,target,name); - } - } - } - } - for(var i in info1.distance){ - info.distance[i]=info1.distance[i]; - } - for(var i in info2.distance){ - if(typeof info.distance[i]=='number'){ - info.distance[i]+=info2.distance[i]; - } - else{ - info.distance[i]=info2.distance[i]; - } - } - if(info1.skills){ - info.skills=info.skills.concat(info1.skills); - } - if(info2.skills){ - info.skills=info.skills.concat(info2.skills); - } - if(info1.onEquip){ - if(Array.isArray(info1.onEquip)){ - info.onEquip=info.onEquip.concat(info1.onEquip); - } - else{ - info.onEquip.push(info1.onEquip); - } - } - if(info2.onEquip){ - if(Array.isArray(info2.onEquip)){ - info.onEquip=info.onEquip.concat(info2.onEquip); - } - else{ - info.onEquip.push(info2.onEquip); - } - } - if(info1.onLose){ - if(Array.isArray(info1.onLose)){ - info.onLose=info.onLose.concat(info1.onLose); - } - else{ - info.onLose.push(info1.onLose); - } - } - if(info2.onLose){ - if(Array.isArray(info2.onLose)){ - info.onLose=info.onLose.concat(info2.onLose); - } - else{ - info.onLose.push(info2.onLose); - } - } - if(info.onEquip.length==0) delete info.onEquip; - if(info.onLose.length==0) delete info.onLose; - lib.card[name]=info; - lib.translate[name]=get.translation(cards[0].name,'skill')+get.translation(cards[1].name,'skill'); - var str=lib.translate[cards[0].name+'_info']; - if(str[str.length-1]=='.'||str[str.length-1]=='。'){ - str=str.slice(0,str.length-1); - } - lib.translate[name+'_info']=str+';'+lib.translate[cards[1].name+'_info']; - try{ - game.addVideo('newcard',null,{ - name:name, - translate:lib.translate[name], - info:lib.translate[name+'_info'], - card:cards[0].name, - legend:true, - }); - } - catch(e){ - console.log(e); - } - } - player.gain(game.createCard({name:name,suit:cards[0].suit,number:cards[0].number}),'gain2'); - }, - ai:{ - order:9.5, - result:{ - player:1 - } - } - }, - meiying:{ - global:'meiying2', - globalSilent:true, - trigger:{global:'phaseEnd'}, - filter:function(event,player){ - return event.player!=player&&!event.player.tempSkills.meiying3&&event.player.isAlive()&&player.countCards('he',{color:'red'})>0; - }, - direct:true, - content:function(){ - "step 0" - var next=player.chooseToDiscard('he','魅影:是否弃置一张红色牌视为对'+get.translation(trigger.player)+'使用一张杀?'); - next.logSkill=['meiying',trigger.player]; - var eff=get.effect(trigger.player,{name:'sha'},player,player); - next.ai=function(card){ - if(eff>0){ - return 7-get.value(card); - } - return 0; - } - "step 1" - if(result.bool){ - player.useCard({name:'sha'},trigger.player).animate=false; - } - }, - ai:{ - expose:0.1 - } - }, - meiying2:{ - trigger:{player:'useCard'}, - filter:function(event,player){ - return _status.currentPhase==player&&event.targets&&(event.targets.length>1||event.targets[0]!=player); - }, - forced:true, - popup:false, - content:function(){ - player.addTempSkill('meiying3'); - } - }, - meiying3:{}, - jianwu:{ - trigger:{player:'shaBegin'}, - forced:true, - filter:function(event,player){ - return get.distance(event.target,player,'attack')>1; - }, - content:function(){ - trigger.directHit=true; - } - }, - zuizhan:{ - trigger:{player:'useCard'}, - popup:false, - filter:function(event,player){ - if(event.card.name!='sha') return false; - return game.hasPlayer(function(current){ - return (event.targets.contains(current)==false&¤t!=player&& - lib.filter.targetEnabled(event.card,player,current)) - }); - }, - content:function(){ - var list=game.filterPlayer(function(current){ - return (trigger.targets.contains(current)==false&¤t!=player&& - lib.filter.targetEnabled(trigger.card,player,current)) - }); - if(list.length){ - event.target=list.randomGet(); - player.line(event.target,'green'); - game.log(event.target,'被追加为额外目标'); - trigger.targets.push(event.target); - player.draw(); - } - } - }, - xidie:{ - trigger:{player:'phaseBegin'}, - direct:true, - filter:function(event,player){ - return player.countCards('h')>player.hp; - }, - content:function(){ - "step 0" - var next=player.chooseToDiscard(get.prompt('xidie'),[1,Math.min(3,player.countCards('h')-player.hp)]); - next.ai=function(card){ - return 6-get.value(card); - } - next.logSkill='xidie'; - "step 1" - if(result.bool){ - player.storage.xidie=result.cards.length; - } - }, - group:'xidie2' - }, - xidie2:{ - trigger:{player:'phaseEnd'}, - forced:true, - filter:function(event,player){ - return player.storage.xidie>0; - }, - content:function(){ - player.draw(player.storage.xidie); - player.storage.xidie=0; - } - }, - meihu:{ - trigger:{player:'damageEnd'}, - check:function(event,player){ - return get.attitude(player,event.source)<4; - }, - filter:function(event,player){ - return event.source&&event.source!=player&&event.source.countCards('h')>0; - }, - logTarget:'source', - content:function(){ - "step 0" - trigger.source.chooseCard('交给'+get.translation(player)+'一张手牌',true).ai=function(card){ - return -get.value(card); - }; - "step 1" - if(result.bool){ - player.gain(result.cards[0],trigger.source); - trigger.source.$give(1,player); - } - }, - ai:{ - maixie_defend:true, - effect:{ - target:function(card,player,target){ - if(get.tag(card,'damage')){ - if(player.hasSkillTag('jueqing',false,target)) return [1,-1.5]; - return [1,0,0,-0.5]; - } - } - } - } - }, - xlqianhuan:{ - trigger:{player:'phaseAfter'}, - check:function(event,player){ - return player.hp==1||player.isTurnedOver(); - }, - filter:function(event,player){ - return player.hp1||player.countCards('h',{color:'black'})>1; - }, - direct:true, - content:function(){ - "step 0" - var next=player.chooseToDiscard(get.prompt('fumo',trigger.source),2,function(card){ - if(get.damageEffect(trigger.source,player,player,'thunder')<=0) return 0; - if(ui.selected.cards.length){ - return get.color(card)==get.color(ui.selected.cards[0]); - } - return player.countCards('h',{color:get.color(card)})>1; - }).set('complexCard',true); - next.ai=function(card){ - if(get.damageEffect(trigger.source,player,player,'thunder')>0){ - return 8-get.value(card); - } - return 0; - }; - next.logSkill=['fumo',trigger.source,'thunder']; - "step 1" - if(result.bool){ - trigger.source.damage('thunder'); - } - }, - ai:{ - maixie_defend:true, - threaten:0.8 - } - }, - fanyin:{ - trigger:{player:'phaseEnd'}, - direct:true, - content:function(){ - "step 0" - player.chooseTarget(get.prompt('fanyin'),function(card,player,target){ - // if(player==target) return false; - if(target.isLinked()) return true; - if(target.isTurnedOver()) return true; - if(target.countCards('j')) return true; - if(target.isMinHp()&&target.isDamaged()) return true; - return false; - }).ai=function(target){ - var num=0; - var att=get.attitude(player,target); - if(att>0){ - if(target.isMinHp()){ - num+=5; - } - if(target.isTurnedOver()){ - num+=5; - } - if(target.countCards('j')){ - num+=2; - } - if(target.isLinked()){ - num++; - } - if(num>0){ - return num+att; - } - } - return num; - } - "step 1" - if(result.bool){ - event.target=result.targets[0]; - player.logSkill('fanyin',event.target); - } - else{ - event.finish(); - } - "step 2" - if(event.target.isLinked()){ - event.target.link(); - } - "step 3" - if(event.target.isTurnedOver()){ - event.target.turnOver(); - } - "step 4" - var cards=event.target.getCards('j'); - if(cards.length){ - event.target.discard(cards); - } - "step 5" - if(event.target.isMinHp()){ - event.target.recover(); - } - }, - ai:{ - expose:0.2, - threaten:1.3 - } - }, - mingkong:{ - trigger:{player:'damageBegin'}, - forced:true, - filter:function(event,player){ - return player.countCards('h')==0&&event.num>=1; - }, - content:function(){ - if(trigger.num>=1){ - trigger.num--; - } - if(trigger.source){ - trigger.source.storage.mingkong=true; - trigger.source.addTempSkill('mingkong2'); - } - }, - ai:{ - effect:{ - target:function(card,player,target){ - if(get.tag(card,'damage')&&target.countCards('h')==0){ - if(player.hasSkillTag('jueqing',false,target)) return; - return 0.1; - } - } - } - }, - }, - mingkong2:{ - trigger:{source:['damageEnd','damageZero']}, - forced:true, - popup:false, - audio:false, - vanish:true, - filter:function(event,player){ - return player.storage.mingkong?true:false; - }, - content:function(){ - player.draw(); - player.storage.mingkong=false; - player.removeSkill('mingkong2'); - } - }, - yuehua:{ - trigger:{player:['useCardAfter','respondAfter','discardAfter']}, - frequent:true, - filter:function(event,player){ - if(player==_status.currentPhase) return false; - if(event.cards){ - for(var i=0;i0; - }, - direct:true, - priority:-5, - content:function(){ - "step 0" - var next=player.chooseToDiscard(get.prompt('qinglan',trigger.player),'he'); - next.logSkill=['qinglan',trigger.player]; - next.ai=function(card){ - if(trigger.num>1||!trigger.source){ - if(get.attitude(player,trigger.player)>0){ - return 9-get.value(card); - } - return -1; - } - else if(get.attitude(player,trigger.player)>0){ - if(trigger.player.hp==1){ - return 8-get.value(card); - } - if(trigger.source.hp==trigger.source.maxHp){ - return 6-get.value(card); - } - } - else if(get.attitude(player,trigger.source)>0&& - trigger.source.hp1){ - if(get.color(card)=='red') return 5-get.value(card); - } - return -1; - } - "step 1" - if(result.bool){ - trigger.cancel(); - if(trigger.source){ - trigger.source.recover(); - } - } - else{ - event.finish(); - } - "step 2" - if(trigger.source){ - trigger.source.draw(); - } - }, - ai:{ - expose:0.1 - } - }, - fanshi:{ - trigger:{player:'phaseDiscardAfter'}, - forced:true, - filter:function(event,player){ - return player.getStat('damage')>0; - }, - check:function(event,player){ - return player.hp==player.maxHp; - }, - content:function(){ - "step 0" - player.loseHp(); - "step 1" - player.draw(); - } - }, - xuelu:{ - unique:true, - trigger:{player:'phaseEnd'}, - direct:true, - filter:function(event,player){ - return player.maxHp>player.hp&&player.countCards('he',{color:'red'})>0; - }, - // alter:true, - content:function(){ - "step 0" - player.chooseCardTarget({ - position:'he', - filterTarget:function(card,player,target){ - return player!=target; - }, - filterCard:function(card,player){ - return get.color(card)=='red'&&lib.filter.cardDiscardable(card,player); - }, - ai1:function(card){ - return 9-get.value(card); - }, - ai2:function(target){ - return get.damageEffect(target,player,player,'fire'); - }, - prompt:get.prompt('xuelu') - }); - "step 1" - if(result.bool){ - event.target=result.targets[0]; - player.logSkill('xuelu',event.target,'fire'); - if(get.is.altered('xuelu')){ - event.num=1; - } - else{ - event.num=Math.min(2,Math.ceil((player.maxHp-player.hp)/2)); - } - player.discard(result.cards); - } - else{ - event.finish(); - } - "step 2" - if(event.target){ - event.target.damage(event.num,'fire'); - } - }, - ai:{ - maixie:true, - expose:0.2, - threaten:function(player,target){ - if(target.hp==1) return 3; - if(target.hp==2) return 1.5; - return 0.5; - }, - effect:{ - target:function(card,player,target){ - if(!target.hasFriend()) return; - if(get.tag(card,'damage')){ - if(target.hp==target.maxHp) return [0,1]; - } - if(get.tag(card,'recover')&&player.hp>=player.maxHp-1) return [0,0]; - } - } - } - }, - xiuhua_old:{ - changeSeat:true, - trigger:{player:'shaHit'}, - filter:function(event,player){ - return event.target!=player.previous; - }, - content:function(){ - game.swapSeat(trigger.target,player,true,true); - } - }, - shahun:{ - enable:'chooseToUse', - skillAnimation:true, - animationColor:'fire', - derivation:'juejing', - // alter:true, - filter:function(event,player){ - return !player.storage.shahun&&player.hp<=0; - }, - content:function(){ - "step 0" - var cards=player.getCards('hej'); - player.discard(cards); - "step 1" - if(player.isLinked()) player.link(); - "step 2" - if(player.isTurnedOver()) player.turnOver(); - "step 3" - player.draw(3); - "step 4" - player.recover(1-player.hp); - player.removeSkill('fanshi'); - player.addSkill('juejing'); - player.storage.shahun=2; - player.markSkill('shahun'); - game.addVideo('storage',player,['shahun',player.storage.shahun]); - }, - group:'shahun2', - intro:{ - content:'turn' - }, - ai:{ - save:true, - skillTagFilter:function(player){ - if(player.storage.shahun) return false; - if(player.hp>0) return false; - }, - result:{ - player:3 - } - } - }, - shahun2:{ - trigger:{player:'phaseAfter'}, - forced:true, - filter:function(event,player){ - return player.storage.shahun?true:false; - }, - content:function(){ - if(player.storage.shahun>1){ - player.storage.shahun--; - game.addVideo('storage',player,['shahun',player.storage.shahun]); - } - else{ - player.die(); - } - } - }, - yanjia_old:{ - enable:'chooseToUse', - filter:function(event,player){ - return player.countCards('he',{type:'equip'})>0; - }, - filterCard:function(card){ - return get.type(card)=='equip'; - }, - position:'he', - viewAs:{name:'wuzhong'}, - prompt:'将一张装备牌当无中生有使用', - check:function(card){ - var player=_status.currentPhase; - if(player.countCards('he',{subtype:get.subtype(card)})>1){ - return 11-get.equipValue(card); - } - if(player.countCards('h')0&&player.storage.xuanning!=3; - }, - filterCard:function(card){ - return get.type(card)=='basic'; - }, - check:function(card){ - return 7-get.useful(card); - }, - content:function(){ - player.storage.xuanning=3; - player.markSkill('xuanning'); - game.addVideo('storage',player,['xuanning',player.storage.xuanning]); - }, - ai:{ - result:{ - player:function(player){ - var num=player.countCards('h'); - if(num>player.hp+1) return 1; - if(player.storage.xuanning>=2) return 0; - if(num>player.hp) return 1 - if(player.storage.xuanning>=1) return 0; - return 1; - }, - }, - order:5 - } - }, - xuanning2:{ - trigger:{player:'damageEnd'}, - forced:true, - filter:function(event,player){ - if(player.storage.xuanning){ - return (event.source&&event.source.countCards('he')>0); - } - return false; - }, - logTarget:'source', - content:function(){ - var he=trigger.source.getCards('he'); - if(he.length){ - trigger.source.discard(he.randomGet()); - } - player.storage.xuanning--; - if(!player.storage.xuanning){ - player.unmarkSkill('xuanning'); - } - game.addVideo('storage',player,['xuanning',player.storage.xuanning]); - }, - ai:{ - maixie_defend:true, - } - }, - liuguang:{ - trigger:{player:'phaseBegin'}, - direct:true, - filter:function(event,player){ - if(player.storage.xuanning) return true; - return false; - }, - content:function(){ - "step 0" - player.chooseTarget(function(card,player,target){ - return player!=target; - },get.prompt('liuguang'),[1,3]).ai=function(target){ - return get.damageEffect(target,player,player); - } - "step 1" - if(result.bool){ - player.storage.xuanning--; - if(!player.storage.xuanning){ - player.unmarkSkill('xuanning'); - } - event.targets=result.targets.slice(0); - event.targets.sort(lib.sort.seat); - player.logSkill('liuguang',result.targets); - game.addVideo('storage',player,['xuanning',player.storage.xuanning]); - } - else{ - event.finish(); - } - "step 2" - if(event.targets.length){ - var target=event.targets.shift(); - var next=target.chooseToDiscard('流光:弃置一张牌或受到一点伤害','he'); - next.ai=function(card){ - if(get.damageEffect(_status.event.player,player,_status.event.player)>=0) return -1; - if(_status.event.player.hp==1) return 9-get.value(card); - return 8-get.value(card); - }; - next.autochoose=function(){ - return this.player.countCards('he')==0; - }; - event.current=target; - } - else{ - event.finish(); - } - "step 3" - if(result.bool&&result.cards&&result.cards.length){ - event.goto(2); - } - else{ - event.current.damage(); - } - }, - ai:{ - expose:0.2, - threaten:1.3 - } - }, - yangming:{ - enable:'phaseUse', - filter:function(event,player){ - if(player.storage.yangming2>0) return false; - return player.countCards('h',{color:'red'})>0; - }, - filterCard:function(card){ - return get.color(card)=='red'; - }, - content:function(){ - player.storage.yangming2=2; - player.addSkill('yangming2'); - game.addVideo('storage',player,['yangming2',player.storage.yangming2]); - }, - check:function(card){ - return 6-get.value(card); - }, - ai:{ - result:{ - player:function(player){ - if(player.countCards('h')<=player.hp&&player.hp==player.maxHp){ - return 0; - } - return 1; - } - }, - order:6, - threaten:1.3 - } - }, - yangming2:{ - trigger:{player:'phaseUseEnd'}, - direct:true, - mark:true, - content:function(){ - "step 0" - player.storage.yangming2--; - game.addVideo('storage',player,['yangming2',player.storage.yangming2]); - if(player.storage.yangming2>0){ - event.finish(); - } - else{ - player.removeSkill('yangming2'); - var num=game.countPlayer(function(current){ - return get.distance(player,current)<=1&¤t.isDamaged(); - }); - if(num==0){ - event.finish(); - } - else{ - player.chooseTarget(function(card,player,target){ - return get.distance(player,target)<=1&&target.hp1) return false; - if(target.hp>2) return false; - if(get.attitude(player,target)>=0) return false; - return get.damageEffect(target,player,player,'fire'); - } - } - } - }, - jiehuo_old:{ - unique:true, - forbid:['infinity'], - skillAnimation:true, - animationColor:'fire', - init:function(player){ - player.storage.jiehuo=false; - }, - enable:'phaseUse', - filter:function(event,player){ - //if(player.maxHp<=1) return false; - return !player.storage.jiehuo - }, - intro:{ - content:'limited' - }, - // mark:true, - line:'fire', - filterTarget:function(card,player,target){ - return player!=target; - }, - selectTarget:-1, - content:function(){ - if(!player.storage.jiehuo2){ - player.storage.jiehuo2=player.maxHp; - player.addSkill('jiehuo2'); - } - player.storage.jiehuo=true; - target.damage(Math.min(target.hp,player.storage.jiehuo2),'fire'); - } - }, - jiehuo2:{ - trigger:{player:'phaseUseEnd'}, - forced:true, - popup:false, - content:function(){ - player.die(); - } - }, - yuling:{ - unique:true, - locked:true, - group:['yuling1','yuling2','yuling3','yuling4','yuling5','yuling6'], - intro:{ - content:'time' - }, - // alter:true, - ai:{ - noh:true, - threaten:0.8, - effect:{ - target:function(card,player,target){ - if(card.name=='bingliang') return 0; - if(card.name=='lebu') return 1.5; - if(card.name=='guohe'){ - if(!target.countCards('e')) return 0; - return 0.5; - } - if(card.name=='liuxinghuoyu') return 0; - } - } - } - }, - yuling1:{ - trigger:{player:['phaseDrawBefore','phaseDiscardBefore']}, - priority:10, - forced:true, - popup:false, - check:function(){ - return false; - }, - content:function(){ - trigger.cancel(); - } - }, - yuling2:{ - trigger:{player:['loseEnd','drawEnd'],global:'gameDrawAfter'}, - check:function(event,player){ - return player.countCards('h')<2; - }, - priority:10, - forced:true, - filter:function(event,player){ - return player.countCards('h')<5; - }, - content:function(){ - player.draw(5-player.countCards('h')); - } - }, - yuling3:{ - trigger:{player:'gainEnd'}, - priority:10, - forced:true, - filter:function(event,player){ - return player.countCards('h')>5; - }, - check:function(event,player){ - return player.countCards('h')<2; - }, - content:function(){ - player.chooseToDiscard(true,player.countCards('h')-5); - } - }, - yuling4:{ - mod:{ - cardEnabled:function(card,player){ - if(_status.currentPhase!=player) return; - var num=2; - if(get.is.altered('yuling')) num=1; - if(player.countUsed()>=player.maxHp+num) return false; - } - } - }, - yuling5:{ - trigger:{player:['useCardAfter','phaseBegin']}, - silent:true, - content:function(){ - player.storage.yuling=player.maxHp+2-player.countUsed(); - } - }, - yuling6:{ - trigger:{player:'phaseAfter'}, - silent:true, - content:function(){ - delete player.storage.yuling; - } - }, - }, - translate:{ - gjqt_bailitusu:'百里屠苏', - gjqt_fengqingxue:'风晴雪', - gjqt_fanglansheng:'方兰生', - gjqt_xiangling:'襄铃', - gjqt_yinqianshang:'尹千觞', - gjqt_hongyu:'红玉', - gjqt_ouyangshaogong:'欧阳少恭', - gjqt_xunfang:'巽芳', - - gjqt_yuewuyi:'乐无异', - gjqt_wenrenyu:'闻人羽', - gjqt_xiayize:'夏夷则', - gjqt_aruan:'阿阮', - gjqt_xieyi:'谢衣', - gjqt_yanjiaxieyi:'偃甲谢衣', - gjqt_chuqi:'初七', - - gjqt_beiluo:'北洛', - gjqt_yunwuyue:'云无月', - gjqt_cenying:'岑缨', - - yunyou:'云游', - yunyou_info:'每两轮限一次,出牌阶段,你可以发现一张地图牌本局未使用过的地图牌并使用之', - xuanzhen:'玄阵', - // xuanzhen_bg:'阵', - xuanzhen_info:'每轮限一次,当你成为一名其他角色的卡牌惟一目标时,你可以发现一张牌代替此牌', - qingshu:'青书', - qingshu_info:'结束阶段,你可以令一名角色永久获得一个你使用过且不是当前地图的地图牌效果(每个地图最多发动一次)', - yanjiadan_heart:'偃甲蛋', - yanjiadan_heart_info:'可以当作紫阳丹、玉女元参或沙棠使用', - yanjiadan_diamond:'偃甲蛋', - yanjiadan_diamond_info:'可以当作流风散、舒筋散或神火飞鸦使用', - yanjiadan_club:'偃甲蛋', - yanjiadan_club_info:'可以当作天女散花、六骰格或锦里针使用', - yanjiadan_spade:'偃甲蛋', - yanjiadan_spade_info:'可以当作飞镖、乾坤镖或龙须钩使用', - lingyan:'灵偃', - lingyan_bg:'偃', - lingyan_info:'出牌阶段限一次,你可以将一张点数与武将牌上的牌均不同的手牌置于武将牌上,然后获得与其花色对应的一枚偃甲蛋', - xunjian:'寻剑', - xunjian_info:'锁定技,每当你使用或打出一张牌,若牌堆中有同名牌,你有X的机率获得之,X为你的“灵偃”牌数/13', - xunjian_old_info:'觉醒技,结束阶段,若你武将牌上有13张牌,你失去技能灵偃并获得技能通天', - tongtian:'通天', - tongtian_info:'锁定技,在你使用或打出一张牌后,若敌方角色手中有同名牌,你随机获得其中一张', - xianju:'仙居', - xianju_info:'锁定技,奇数游戏轮次开始时,你获得潜行直到下一轮开始;偶数游戏轮次开始时,你随机获得一张机关牌', - xuanci:'旋刺', - xuanci_info:'出牌阶段限一次,你可以将一张梅花牌当作飞镖使用;锁定技,你使用飞镖无距离限制,你使用飞镖后对目标结算后视为对目标使用一张杀', - humeng:'湖梦', - humeng_sub:'偃甲谢衣', - humeng_info:'觉醒技,当你使用过4种不同的偃甲蛋后,你获得替身偃甲谢衣;觉醒技,当你进入濒死状态时,你弃置所有牌,摸四张牌,变身为初七并激活偃甲谢衣', - yange:'魇歌', - yange_info:'游戏开始时,你获得数量等于敌方角色数的“魇”标记;准备阶段开始时,你可以移去一枚“魇”标记并变为一名其他存活角色的复制,此回合结束后你变回原角色', - woxue:'卧雪', - woxue_info:'每当你于回合外使用或打出一张牌,你可以视为对当前回合角色使用【白霜】', - lingnu:'灵怒', - lingnu_info:'锁定技,每当你造成一点伤害,你随机获得一个与杀相关的技能,技能在你行动3回合后消失(同一时间最多拥有3个以此法获得的技能)', - zhenying:'振影', - zhenying_info:'每当你使用或打出一张非转化的黑色牌(装备或延时锦囊牌除外),你可以获得一张此牌的“替身”;你使用或打出“替身”牌后需弃置一张牌(没有则不弃);当前回合结束后,“替身”牌消失', - cihong:'刺鸿', - cihong_bg:'鸿', - cihong_info:'每三轮限一次,结束阶段,你可以指定一名其他角色并可以依次选择:1. 弃置一张红色牌;2. 失去一点体力;3. 将武将牌翻至背面;每选择一项,视为对目标使用一张杀', - lianjing:'莲境', - lianjing_info:'每两轮限一次,回合结束后,你可以选择至多2名其他角色,将其他角色移出游戏,然后你与所选的角色依次进行一个回合', - zuiji:'醉饮', - zuiji_info:'出牌阶段,你可以将一张手牌或装备牌当作酒使用', - manwu:'曼舞', - manwu_info:'在一名角色的结束阶段,若其手牌数为全场最少或之一,你可以令其摸一张牌', - xfanghua:'芳华', - xfanghua_info:'在你成为红色牌的目标后,你可以回复一点体力', - yunyin:'云音', - yunyin_info:'结束阶段,你可以弃置一张与本回合使用过的卡牌花色均不相同的手牌,视为使用一张基本牌或普通锦囊牌', - shishui:'逝水', - shishui_info:'锁定技,每当你使用一张红色牌,你令目标流失一点体力', - duhun:'渡魂', - duhun_info:'濒死阶段,你可以与一名体力值不超过你的体力上限的角色拼点,若你赢,你失去一点体力上限并与该角色交换体力值;若你没赢,你立即死亡', - duhun_info_alter:'濒死阶段,你可以与一名体力值不超过你的体力上限的角色拼点,若你赢,你失去一点体力上限并将体力值回复至与该角色相同;若你没赢,你立即死亡', - chizhen:'驰阵', - chizhen_info:'出牌阶段开始时,你可以摸X张牌并弃置X张牌,若你弃置了杀,可以视为使用一张决斗(X为你已损失的体力值且至少为1)', - xidie:'戏蝶', - xidie2:'戏蝶', - xidie_info:'准备阶段,若你的手牌数大于体力值,可以弃置至多X张牌,并于结束阶段摸等量的牌,X为你的体力值与手牌数之差且不超过3', - meihu:'魅狐', - meihu2:'魅狐', - meihu_info:'当你受到伤害后,可令伤害来源交给你一张手牌', - jianwu:'剑舞', - jianwu_info:'锁定技,攻击范围不含你的角色无法闪避你的杀', - meiying:'魅影', - meiying_info:'一名其他角色的回合结束时,若其未于此回合内使用过指定另一名角色为目标的牌,你可以弃置一张红色牌视为对其使用一张杀', - zuizhan:'乱斩', - zuizhan_info:'每当你使用一张杀,可以摸一张牌,然后此杀随机增加一个额外目标', - xlqianhuan:'千幻', - xlqianhuan_info:'回合结束后,若你已受伤,你可以回复一点体力并将武将牌翻面。若你的武将牌背面朝上,你不能使用卡牌,也不能成为卡牌的目标', - fumo:'伏魔', - fumo_info:'每当你受到一次伤害,可以弃置两张颜色相同的手牌并对伤害来源造成一点雷电伤害', - fanyin:'梵音', - fanyin_info:'结束阶段,你可以令一名角色复原武将牌并移除判定区内的牌;若其体力值是全场最少的之一,其回复一点体力', - mingkong:'明空', - mingkong_info:'锁定技,若你没有手牌,你受到的伤害-1,然后伤害来源摸一张牌', - qinglan:'晴岚', - qinglan_info:'每当有一名角色即将受到属性伤害,你可以弃置一张牌令其防止此伤害,然后伤害来源摸一张牌并回复一点体力', - yuehua:'月华', - yuehua_info:'每当你于回合外使用、打出或弃置红色牌,你可以摸一张牌', - xuelu:'血戮', - xuelu_info:'结束阶段,若你已受伤,你可以弃置一张红色牌并对一名其他角色造成一点火焰伤害;若你已损失体力值不少于3,改为造成两点火焰伤害', - xuelu_info_alter:'结束阶段,若你已受伤,你可以弃置一张红色牌并对一名其他角色造成一点火焰伤害', - fanshi:'反噬', - fanshi_info:'锁定技,弃牌阶段结束时,若你本回合内造成过伤害,你流失一点体力并摸一张牌', - shahun:'煞魂', - shahun2:'煞魂', - shahun_info:'限定技,濒死阶段,你可以复原武将牌,弃置所有牌并摸三张牌,然后将体力回复至1;若如此做,你失去技能【反噬】,获得技能【绝境】,并于两回合后立即死亡', - shahun_info_alter:'限定技,濒死阶段,你可以复原武将牌,弃置所有牌并摸三张牌,然后将体力回复至1;若如此做,你失去技能【反噬】,获得技能【绝境】,并于两回合后立即死亡', - - yanjia:'偃甲', - yanjia_info:'出牌阶段,你可以将两张非特殊装备牌合成为一张强化装备', - xiuhua:'袖花', - xiuhua_info:'每当一件其他角色的装备因被替换或弃置进入弃牌堆,你可以获得之', - liuying:'流影', - liuying_info:'每当你使用一张杀结算完毕后,你可以指定一名本回合未成为过你的杀的目标的角色,并亮出牌堆顶的一张牌,若为黑色,你对该角色使用一张杀', - boyun:'拨云', - boyun1:'拨云', - boyun2:'拨云', - boyun_info:'在你的回合内,你可以弃置一张装备牌,并展示牌堆顶的一张牌,若其为装备牌,你须将其交给任意一张角色并对其造成一点伤害,否则你摸一张牌', - jizhan:'疾战', - jizhan_info:'出牌阶段限一次,你可以将移动到任意一名角色的前一位,视为对其使用了一张不计入出杀次数的杀', - qianjun:'千军', - qianjun_info:'每当你使用一张杀,你可以弃置一张牌,令距离目标1以内的所有角色成为额外目标', - xuanning:'玄凝', - xuanning1:'玄凝', - xuanning2:'玄凝', - liuguang:'流光', - yangming:'养命', - yangming2:'养命', - xuanning_info:'出牌阶段,你可以弃置一基本牌,获得至多3个玄凝标记。当你受到伤害时,你失去一枚玄凝标记,伤害来源随机弃置一张牌', - liuguang_info:'准备阶段,若你有玄凝标记,你可以弃置一枚玄凝标记,选择至多三名角色依次令其选择一项:弃置一张牌,或受到一点伤害,并终止流光结算', - yangming_info:'出牌阶段,你可以弃置一张红色牌,并在下个出牌阶段结束时令距离1以内的任意名角色回复一点体力,在此之前不可再次发动', - zhaolu:'朝露', - jiehuo:'劫火', - yuling:'御灵', - yuling1:'御灵', - yuling2:'御灵', - yuling3:'御灵', - yuling4:'御灵', - zhaolu_info:'锁定技,每隔X回合,你流失一点体力上限,每当你受到一点伤害或有人死亡,视为减少两个回合,X为现存角色数且至多为5', - jiehuo_info:'限定技,出牌阶段,你可以对一名其他角色造成两点火焰伤害,然后死亡', - yuling_info:'锁定技,你没有摸牌和弃牌阶段,你的手牌数始终为5,你在一个出牌阶段最多使用X+2张牌,X为你的体力上限', - yuling_info_alter:'锁定技,你没有摸牌和弃牌阶段,你的手牌数始终为5,你在一个出牌阶段最多使用X+1张牌,X为你的体力上限', - }, - }; -}); +'use strict'; +game.import('character',function(lib,game,ui,get,ai,_status){ + return { + name:'gujian', + character:{ + gjqt_bailitusu:['male','shu',4,['xuelu','fanshi','shahun']], + gjqt_fengqingxue:['female','wu',3,['qinglan','yuehua','swd_wuxie']], + gjqt_xiangling:['female','wu',3,['xlqianhuan','meihu','xidie']], + gjqt_fanglansheng:['male','wu',3,['fanyin','mingkong','fumo']], + gjqt_yinqianshang:['male','qun',4,['zuiji','zuizhan']], + gjqt_hongyu:['female','shu',4,['jianwu','meiying']], + + gjqt_yuewuyi:['male','wei',4,['yanjia','xiuhua','liuying']], + gjqt_wenrenyu:['female','shu',4,['chizhen','dangping']], + gjqt_xiayize:['male','qun',3,['xuanning','liuguang','yangming']], + gjqt_aruan:['female','wu',3,['zhaolu','jiehuo','yuling']], + + gjqt_xunfang:['female','shu',3,['manwu','xfanghua']], + gjqt_ouyangshaogong:['male','shu',3,['yunyin','shishui','duhun']], + + gjqt_xieyi:['male','qun',3,['lingyan','xunjian','humeng']], + gjqt_yanjiaxieyi:['male','qun',2,['xianju'],['unseen']], + gjqt_chuqi:['male','qun',2,['xuanci'],['unseen']], + + // gjqt_xuange:['male','qun',4,['zhenlu','zhuixing']], + gjqt_beiluo:['male','qun',4,['lingnu','zhenying','cihong']], + gjqt_yunwuyue:['female','wei',3,['yange','woxue','lianjing']], + gjqt_cenying:['female','shu',3,['yunyou','xuanzhen','qingshu']], + // gjqt_changliu:['male','qun',4,['xiange']], + // gjqt_fenglishuang:['female','wei',3,[]], + // gjqt_nishang:[], + }, + characterIntro:{ + gjqt_bailitusu:'原名韩云溪,太子长琴半身。幼时经历灭族之灾,本来已死去,但因体内被封进了太子长琴一半魂魄而得以死而复生。身怀凶剑焚寂的煞气,在某次煞气发作中被紫胤真人所救,后拜入昆仑山天墉城,以“屠绝鬼气,苏醒人魂”之意更名为“百里屠苏”。', + gjqt_fengqingxue:'来自幽暗无边的地界,大哥为幽都娲皇神殿“十巫”之一的巫咸——风广陌。奉命寻兄而来到人间,邂逅百里屠苏,陷入了焚寂的宿命纠葛。后与百里屠苏相知相爱。终局,百里屠苏化为永世无法轮回的荒魂,她为寻找重生之法,放弃自己的轮回,换取下长久的寿命,在人间执着不悔地寻觅了九百年。最后,与重生后的屠苏回到桃花谷相守。', + gjqt_xiangling:'青丘之国国主九尾天狐与人界女子所生,半人半妖。由南疆紫榕林榕爷爷抚养,在山林间无拘无束长大,娇俏可爱。后来下江南寻找生母,却被抓进翻云寨,偶然被百里屠苏相救,为报答救命之恩,便一直跟随百里屠苏。在漫漫征途中成长起来,变得成熟懂事。得知方兰生对自己的感情,十分矛盾,后来终于错过。最后结局,启程前往青丘之国。', + gjqt_fanglansheng:'家住琴川的一介书生,家境殷实,母亲在家常住庵堂,吃斋念佛,父亲虽是琴川附近某间寺庙的住持,但却比商人还会敛财。跟随父亲学过降妖除鬼的佛家法术,并以此自傲。梦想能找一个娇小可爱,温柔美丽的女子共渡此生。对襄铃一见钟情。', + gjqt_yinqianshang:'原名风广陌,是幽都“十巫”之一的巫咸。奉女娲之命前往乌蒙灵谷增强焚寂封印。但因为欧阳少恭与雷严的争夺关系,他受到焚寂之力力量冲击,失去记忆,后为欧阳少恭所救。尹千觞为了报恩,跟随在百里屠苏等人身边监视。在这个过程中,他慢慢恢复过往的记忆。后为阻止欧阳少恭,随众人前往蓬莱决战。最后,对曾给予他一次重生的欧阳少恭以死相陪,一起归于火海。', + gjqt_hongyu:'上古庆枫族族人,紫胤真人的剑灵,宿体为古剑·红玉。在百里屠苏离开昆仑山天墉城后,奉命随行保护。终局之后,她依然回到了天墉城,陪伴在紫胤真人身边。', + + gjqt_yuewuyi:'成长于长安富商家庭。其养父曾是战功显赫的将军,退隐后从商,很快就富甲一方;其养母是精擅偃术的南疆天玄教偃女族传人,待无异一如己出般疼爱有加;无异的生父是捐毒大将兀火罗,亡母是一名中原女子,因此他具有一半胡人的血统。', + gjqt_wenrenyu:'出身于百草谷“天罡”部队。从小在军中生活的她见惯生死,拥有超越其年龄的沉着果敢,头脑冷静严谨,洞察力敏锐,性格大方爽快。', + gjqt_xiayize:'本为当朝圣元帝三子李焱,天资聪颖,勤奋好学,于道术一途颇具天赋。幼时体弱,因身世原因被太华山的诀微长老清和真人带走,从此过上了道家清修的生活。', + gjqt_aruan:'千年前,昭明崩裂损毁,剑心为神农所得,其将剑心植入用辟邪之骨所造之人,是为巫山神女。神女爱慕司幽,却始终得不到司幽回应,心绪起伏加速灵力散逸,不久后死去,司幽自责不已,失去踪迹。神女死后,剑心碎片落地生根,吸纳灵气变为露草,露草渐渐化为人形,形貌与巫山神女一样,而且保留了她零散的记忆,阿阮正是这些露草中的一个。当阿阮灵气耗尽就会重新变为露草,并失去人时的记忆,直到重新吸纳足够的灵力才能恢复人形。', + + gjqt_xunfang:'蓬莱国公主,美丽善良,为欧阳少恭前世妻子,太子长琴转世后,巽芳为寻找丈夫来到中原。蓬莱人寿命虽长却终有极限,终究躲不过容颜老去。当巽芳找到分离多年后的少恭时,自惭形秽,不愿相认,她希望少恭心中的自己永远都是青春貌美,于是化名“寂桐”守护在其身旁。', + gjqt_ouyangshaogong:'前身为太子长琴,今生只有一半仙灵,另一半仙灵被铸进焚寂之中,成为焚寂剑灵。他在漫长时光中经历太多悲欢离合,渐渐迷失自我。后与蓬莱国公主巽芳相爱,度过一段美好时光。之后蓬莱毁于天灾,他误以为巽芳已死,便不再压抑内心的疯狂与憎恨,为逆天改命不惜一切。', + + gjqt_xieyi:'偃术大师,流月城大祭司沈夜之徒。于偃术一途冠绝古今,其制造的偃甲精妙绝伦,为世人所称颂。男主角乐无异对其十分崇拜。曾任流月城破军祭司,精通偃术和法术,在一百年前寻找神剑昭明的西域之行中被沈夜捉拿回流月城,毁去记忆仅靠偃甲和蛊虫心脏跳动,并更名为初七,最终在巫山为抢救昭明剑心、保护乐无异被埋在坍塌的神女墓下。他以自己为原型制作,并放入自己部分记忆的偃甲人谢衣曾收乐无异为徒。', + + gjqt_beiluo:'身负辟邪王族之血的大妖,辟邪先王玄戈的孪生兄弟。北洛幼时流落人界,从此便在那里长大。他对自己的血脉并无认同之感,常年抑制妖力,希望以“人”的身份留在人间。后因先王玄戈的逝世,即位为辟邪王', + gjqt_yunwuyue:'本体是一只魇兽,该族喜独居,以人的梦境为食,以精神力为长,被称为“最接近魔的妖族”。云无月幼时居住在有熊城旁的白梦泽,自幼便与轩辕黄帝的大将缙云结识,对缙云有着一种依赖和仰慕,深受缙云的影响,对人族以及其他生灵有感情,不忍看到眼前的生灵遭到痛苦,会加以援手。', + gjqt_cenying:'出身于一个颇有底蕴的大家族,性格开朗随和、温柔坚韧、心如琉璃。岑缨受到开明长辈的影响,自小多思善学,年纪不大却已经加入了博物学会,有时跟随师长在外游历,探寻更广阔的天地。', + }, + card:{ + yanjiadan_heart:{ + type:'jiguan', + cardcolor:'heart', + fullskin:true, + derivation:'gjqt_xieyi', + enable:true, + notarget:true, + content:function(){ + 'step 0' + var choice=null; + var targets=game.filterPlayer(function(current){ + return get.attitude(player,current)>0; + }); + for(var i=0;i0; + })){ + choice='shatang'; + } + if(!choice){ + for(var i=0;i=0) return false; + if(current.hp==1&&eff<0) return true; + if(get.attitude(player,current)<0&&get.attitude(player,current.getNext()<0)&&get.attitude(player,current.getPrevious())<0){ + return true; + } + return false; + })){ + choice='shenhuofeiya'; + } + player.chooseVCardButton('选择一张牌视为使用之',['liufengsan','shujinsan','shenhuofeiya']).set('ai',function(button){ + if(button.link[2]==_status.event.choice) return 2; + return Math.random(); + }).set('choice',choice).set('filterButton',function(button){ + return _status.event.player.hasUseTarget(button.link[2]); + }); + 'step 1' + player.chooseUseTarget(true,result.links[0][2]); + }, + ai:{ + order:5, + result:{ + player:1 + } + } + }, + yanjiadan_club:{ + type:'jiguan', + cardcolor:'club', + fullskin:true, + derivation:'gjqt_xieyi', + enable:true, + notarget:true, + content:function(){ + 'step 0' + var choice='liutouge'; + player.chooseVCardButton('选择一张牌视为使用之',['bingpotong','liutouge','mianlijinzhen']).set('ai',function(button){ + if(button.link[2]==_status.event.choice) return 2; + return Math.random(); + }).set('choice',choice).set('filterButton',function(button){ + return _status.event.player.hasUseTarget(button.link[2]); + }); + 'step 1' + player.chooseUseTarget(true,result.links[0][2]); + }, + ai:{ + order:5, + result:{ + player:1 + } + } + }, + yanjiadan_spade:{ + type:'jiguan', + cardcolor:'spade', + fullskin:true, + derivation:'gjqt_xieyi', + enable:true, + notarget:true, + content:function(){ + 'step 0' + var choice=null; + if(player.getUseValue('longxugou')>0){ + choice='longxugou'; + } + else if(player.getUseValue('qiankunbiao')>0){ + choice='qiankunbiao'; + } + else if(player.getUseValue('feibiao')>0){ + choice='qiankunbiao'; + } + player.chooseVCardButton('选择一张牌视为使用之',['feibiao','qiankunbiao','longxugou']).set('ai',function(button){ + if(button.link[2]==_status.event.choice) return 2; + return Math.random(); + }).set('choice',choice).set('filterButton',function(button){ + return _status.event.player.hasUseTarget(button.link[2]); + }); + 'step 1' + player.chooseUseTarget(true,result.links[0][2]); + }, + ai:{ + order:5, + result:{ + player:function(player){ + if(player.getUseValue('feibiao')>0) return 1; + if(player.getUseValue('qiankunbiao')>0) return 1; + if(player.getUseValue('longxugou')>0) return 1; + return 0; + } + } + } + } + }, + skill:{ + qingshu:{ + ai:{ + threaten:1.4 + }, + trigger:{player:'phaseEnd'}, + direct:true, + filter:function(event,player){ + for(var i=0;iplayer.storage.yunyou.length; + }, + delay:0, + content:function(){ + var list=get.inpile('land'); + for(var i=0;iplayer.storage.lingyan.length/13) return false; + return get.cardPile2(event.card.name)?true:false; + }, + content:function(){ + var card=get.cardPile2(trigger.card.name); + if(card){ + player.gain(card,'gain2'); + } + } + }, + tongtian:{ + trigger:{player:['useCardAfter','respondAfter']}, + forced:true, + filter:function(event,player){ + var name=event.card.name; + var enemies=player.getEnemies(); + for(var i=0;i0) { + player.markSkill('yange'); + } + }, + filter:function(event,player){ + return player.storage.yange>0; + }, + content:function(){ + 'step 0' + player.chooseTarget(function(card,player,target){ + return player!=target; + },get.prompt2('yange')).set('pskill',trigger.skill).set('ai',function(target){ + if(_status.event.pskill) return 0; + var player=_status.event.player; + var nh=player.countCards('h'); + var nh2=target.countCards('h'); + var num=nh2-nh; + if(player.hp==1){ + return num; + } + if(get.threaten(target)>=1.5){ + if(num<2) return 0; + } + else{ + if(num<3) return 0; + } + return num+Math.sqrt(get.threaten(target)); + }); + 'step 1' + if(result.bool){ + player.storage.yange--; + if(player.storage.yange<=0){ + player.unmarkSkill('yange'); + } + else{ + player.updateMarks(); + } + var target=result.targets[0]; + player.logSkill('yange',target); + var clone=function(pos){ + var cloned=[]; + var cards=target.getCards(pos); + for(var i=0;i0){ + if(target.isTurnedOver()) return 2.5; + if(target.hp==1){ + if(nh==0) return 2; + if(nh==1) return 0.9; + if(ui.selected.targets.length) return 0.3; + } + else if(target.hp==2){ + if(nh==0) return 1.5; + if(nh==1) return 0.5; + if(ui.selected.targets.length) return 0.2; + } + else if(target.hp==3){ + if(nh==0) return 0.4; + if(nh==1) return 0.35; + if(ui.selected.targets.length) return 0.1; + } + if(!target.needsToDiscard(2)) return 0.2; + if(ui.selected.targets.length||!player.needsToDiscard(2)) return 0.05; + } + return 0; + }); + 'step 1' + if(result.bool){ + player.logSkill('lianjing',result.targets); + player.insertEvent('lianjing',lib.skill.lianjing.content_phase); + player.storage.lianjing_targets=result.targets.slice(0); + // player.storage.lianjing--; + // if(player.storage.lianjing<=0){ + // player.unmarkSkill('lianjing'); + // } + game.delay(); + } + }, + content_phase:function(){ + 'step 0' + event.list=[player].concat(player.storage.lianjing_targets); + event.exlist=[]; + event.list.sortBySeat(); + delete player.storage.lianjing_targets; + for(var i=0;i0; + })){ + if(player.hp>1||!player.isTurnedOver()){ + goon=true; + } + } + player.chooseTarget(get.prompt('cihong'),function(card,playe,target){ + return player.canUse('sha',target,false); + }).set('ai',function(target){ + if(!_status.event.goon) return false; + var player=_status.event.player; + if(get.attitude(player,target)>=0) return false; + if(target.hp>3) return false; + return get.effect(target,{name:'sha'},player,player); + }).set('goon',goon); + 'step 1' + if(result.bool){ + event.target=result.targets[0]; + player.logSkill('cihong',event.target); + } + else{ + event.finish(); + } + 'step 2' + if(event.target.isAlive()&&player.countCards('he',{color:'red'})){ + player.chooseToDiscard('he',{color:'red'},'是否弃置一张红色牌视为对'+get.translation(event.target)+'使用一张杀?').set('ai',function(card){ + return 8-get.value(card); + }) + } + else{ + event.goto(4); + } + 'step 3' + if(result.bool){ + player.useCard({name:'sha'},event.target); + } + 'step 4' + if(event.target.isAlive()){ + player.chooseBool('是否失去一点体力并视为对'+get.translation(event.target)+'使用一张杀?').set('choice', + player.hp>event.target.hp&&player.hp>1&&event.target.hp>0 + ); + } + else{ + event.finish(); + } + 'step 5' + if(result.bool){ + player.loseHp(); + player.useCard({name:'sha'},event.target); + } + 'step 6' + if(event.target.isAlive()&&!player.isTurnedOver()){ + player.chooseBool('是将武将牌翻至背面并视为对'+get.translation(event.target)+'使用一张杀?').set('choice', + event.target.hp==1 + ); + } + else{ + event.finish(); + } + 'step 7' + if(result.bool){ + player.turnOver(true); + player.useCard({name:'sha'},event.target); + } + }, + ai:{ + threaten:1.5 + } + }, + zhenying:{ + trigger:{player:['useCard','respond']}, + forced:true, + filter:function(event,player){ + if(get.is.converted(event)) return false; + if(event.card.zhenying_link) return false; + if(get.color(event.card)!='black') return false; + if(['delay','equip'].contains(get.type(event.card))) return false; + return true; + }, + content:function(){ + var fake=game.createCard(trigger.card); + fake.zhenying_link=true; + player.gain(fake,'draw')._triggered=null; + fake.classList.add('glow'); + fake._destroy='zhenying'; + fake._modUseful=function(){return 0.1}; + fake._modValue=function(){return 0.1}; + }, + group:['zhenying_discard','zhenying_lose'], + subSkill:{ + discard:{ + trigger:{player:['useCardAfter','respondAfter']}, + forced:true, + filter:function(event,player){ + if(get.is.converted(event)) return false; + if(!player.countCards('he')) return false; + if(event.card.zhenying_link) return true; + return false; + }, + popup:false, + content:function(){ + player.chooseToDiscard('he',true); + } + }, + lose:{ + trigger:{global:'phaseAfter'}, + silent:true, + content:function(){ + var hs=player.getCards('h',function(card){ + return card.zhenying_link?true:false; + }); + if(hs.length){ + player.lose(hs)._triggered=null; + } + } + } + } + }, + lingnu:{ + trigger:{source:'damageEnd'}, + forced:true, + init:function(player){ + player.storage.lingnu={}; + }, + ai:{ + threaten:1.3 + }, + filter:function(event,player){ + var num=0; + for(var i in player.storage.lingnu){ + num++; + if(num>=3) return false; + } + return event.num>0; + }, + content:function(){ + var check=function(list){ + for(var i=0;i=3) break; + if(list.length){ + var skill=list.randomGet(); + player.addAdditionalSkill('lingnu',skill,true); + player.storage.lingnu[skill]=3; + player.popup(skill); + game.log(player,'获得了技能','【'+get.translation(skill)+'】'); + player.markSkill('lingnu'); + num++; + } + } + }, + intro:{ + content:function(storage){ + var str='
    '; + for(var i in storage){ + str+='
  • '+get.translation(i)+':剩余'+storage[i]+'回合'; + } + str+='
' + return str; + }, + markcount:function(storage){ + var num=0; + for(var i in storage){ + num++; + } + return num; + } + }, + group:'lingnu_remove', + subSkill:{ + remove:{ + trigger:{player:'phaseAfter'}, + silent:true, + content:function(){ + var clear=true; + for(var i in player.storage.lingnu){ + player.storage.lingnu[i]--; + if(player.storage.lingnu[i]<=0){ + delete player.storage.lingnu[i]; + player.removeAdditionalSkill('lingnu',i); + } + else{ + clear=false; + } + } + if(clear){ + player.unmarkSkill('lingnu'); + } + else{ + player.updateMarks(); + } + } + } + } + }, + zuiji:{ + enable:'phaseUse', + filterCard:true, + position:'he', + viewAs:{name:'jiu'}, + viewAsFilter:function(player){ + if(!player.countCards('he')) return false; + }, + prompt:'将一张手牌或装备牌当酒使用', + check:function(card){ + return 5-get.value(card); + }, + ai:{ + threaten:1.2 + } + }, + manwu:{ + trigger:{global:'phaseEnd'}, + check:function(event,player){ + return get.attitude(player,event.player)>0; + }, + filter:function(event,player){ + return event.player.isMinHandcard(); + }, + logTarget:'player', + content:function(){ + trigger.player.draw(); + }, + ai:{ + expose:0.1 + } + }, + xfanghua:{ + trigger:{target:'useCardToBegin'}, + priority:-1, + filter:function(event,player){ + return get.color(event.card)=='red'&&player.isDamaged(); + }, + frequent:true, + content:function(){ + player.recover(); + }, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(get.color(card)=='red'&&target.isDamaged()) return [1,1]; + } + } + } + }, + duhun:{ + enable:'chooseToUse', + filter:function(event,player){ + if(event.type!='dying') return false; + if(player!=event.dying) return false; + if(player.maxHp<=1) return false; + if(player.countCards('h')==0) return false; + return true; + }, + // alter:true, + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('h')>0&&target.hp>0&&target.hp<=player.maxHp; + }, + content:function(){ + 'step 0' + player.chooseToCompare(target); + 'step 1' + if(!result.bool){ + player.die(); + event.finish(); + } + else{ + event.num=target.hp-player.hp; + player.loseMaxHp(); + } + 'step 2' + player.changeHp(event.num); + if(get.is.altered('duhun')){ + event.finish(); + } + 'step 3' + event.target.changeHp(-event.num); + 'step 4' + if(event.target.hp<=0){ + event.target.dying({source:player}); + } + }, + ai:{ + order:1, + skillTagFilter:function(player){ + if(player.maxHp<=1) return false; + if(player.hp>0) return false; + if(player.countCards('h')==0) return false; + }, + save:true, + result:{ + target:-1, + player:1 + }, + threaten:2 + }, + }, + yunyin:{ + trigger:{player:'phaseEnd'}, + direct:true, + subSkill:{ + count:{ + trigger:{player:'useCard'}, + silent:true, + filter:function(event,player){ + return _status.currentPhase==player; + }, + content:function(){ + if(!player.storage.yunyin){ + player.storage.yunyin=[]; + } + var suit=get.suit(trigger.card); + if(suit){ + player.storage.yunyin.add(suit); + } + } + }, + set:{ + trigger:{player:'phaseAfter'}, + silent:true, + content:function(){ + delete player.storage.yunyin; + } + } + }, + filter:function(event,player){ + if(!player.storage.yunyin) return true; + var hs=player.getCards('h'); + for(var i=0;i0){ + taoyuan++; + } + else if(eff1<0){ + taoyuan--; + } + if(eff2>0){ + nanman++; + } + else if(eff2<0){ + nanman--; + } + } + player.chooseButton(dialog).ai=function(button){ + var name=button.link[2]; + if(Math.max(taoyuan,nanman)>1){ + if(taoyuan>nanman) return name=='taoyuan'?1:0; + return name=='nanman'?1:0; + } + if(player.countCards('h')=2){ + return name=='wuzhong'?1:0; + } + if(player.hp=2) return true; + } + } + }, + filterCard:function(card){ + if(ui.selected.cards.length&&card.name==ui.selected.cards[0].name) return false; + var info=get.info(card); + return info.type=='equip'&&!info.nomod&&!info.unique&&lib.inpile.contains(card.name); + }, + selectCard:2, + position:'he', + check:function(card){ + return get.value(card); + }, + content:function(){ + var name=cards[0].name+'_'+cards[1].name; + var info1=get.info(cards[0]),info2=get.info(cards[1]); + if(!lib.card[name]){ + var info={ + enable:true, + type:'equip', + subtype:get.subtype(cards[0]), + vanish:true, + cardimage:info1.cardimage||cards[0].name, + filterTarget:function(card,player,target){ + return target==player; + }, + selectTarget:-1, + modTarget:true, + content:lib.element.content.equipCard, + legend:true, + source:[cards[0].name,cards[1].name], + onEquip:[], + onLose:[], + skills:[], + distance:{}, + ai:{ + order:8.9, + equipValue:10, + useful:2.5, + value:function(card,player){ + var value=0; + var info=get.info(card); + var current=player.getEquip(info.subtype); + if(current&&card!=current){ + value=get.value(current,player); + } + var equipValue=info.ai.equipValue||info.ai.basic.equipValue; + if(typeof equipValue=='function') return equipValue(card,player)-value; + return equipValue-value; + }, + result:{ + target:function(player,target){ + return get.equipResult(player,target,name); + } + } + } + } + for(var i in info1.distance){ + info.distance[i]=info1.distance[i]; + } + for(var i in info2.distance){ + if(typeof info.distance[i]=='number'){ + info.distance[i]+=info2.distance[i]; + } + else{ + info.distance[i]=info2.distance[i]; + } + } + if(info1.skills){ + info.skills=info.skills.concat(info1.skills); + } + if(info2.skills){ + info.skills=info.skills.concat(info2.skills); + } + if(info1.onEquip){ + if(Array.isArray(info1.onEquip)){ + info.onEquip=info.onEquip.concat(info1.onEquip); + } + else{ + info.onEquip.push(info1.onEquip); + } + } + if(info2.onEquip){ + if(Array.isArray(info2.onEquip)){ + info.onEquip=info.onEquip.concat(info2.onEquip); + } + else{ + info.onEquip.push(info2.onEquip); + } + } + if(info1.onLose){ + if(Array.isArray(info1.onLose)){ + info.onLose=info.onLose.concat(info1.onLose); + } + else{ + info.onLose.push(info1.onLose); + } + } + if(info2.onLose){ + if(Array.isArray(info2.onLose)){ + info.onLose=info.onLose.concat(info2.onLose); + } + else{ + info.onLose.push(info2.onLose); + } + } + if(info.onEquip.length==0) delete info.onEquip; + if(info.onLose.length==0) delete info.onLose; + lib.card[name]=info; + lib.translate[name]=get.translation(cards[0].name,'skill')+get.translation(cards[1].name,'skill'); + var str=lib.translate[cards[0].name+'_info']; + if(str[str.length-1]=='.'||str[str.length-1]=='。'){ + str=str.slice(0,str.length-1); + } + lib.translate[name+'_info']=str+';'+lib.translate[cards[1].name+'_info']; + try{ + game.addVideo('newcard',null,{ + name:name, + translate:lib.translate[name], + info:lib.translate[name+'_info'], + card:cards[0].name, + legend:true, + }); + } + catch(e){ + console.log(e); + } + } + player.gain(game.createCard({name:name,suit:cards[0].suit,number:cards[0].number}),'gain2'); + }, + ai:{ + order:9.5, + result:{ + player:1 + } + } + }, + meiying:{ + global:'meiying2', + globalSilent:true, + trigger:{global:'phaseEnd'}, + filter:function(event,player){ + return event.player!=player&&!event.player.tempSkills.meiying3&&event.player.isAlive()&&player.countCards('he',{color:'red'})>0; + }, + direct:true, + content:function(){ + "step 0" + var next=player.chooseToDiscard('he','魅影:是否弃置一张红色牌视为对'+get.translation(trigger.player)+'使用一张杀?'); + next.logSkill=['meiying',trigger.player]; + var eff=get.effect(trigger.player,{name:'sha'},player,player); + next.ai=function(card){ + if(eff>0){ + return 7-get.value(card); + } + return 0; + } + "step 1" + if(result.bool){ + player.useCard({name:'sha'},trigger.player).animate=false; + } + }, + ai:{ + expose:0.1 + } + }, + meiying2:{ + trigger:{player:'useCard'}, + filter:function(event,player){ + return _status.currentPhase==player&&event.targets&&(event.targets.length>1||event.targets[0]!=player); + }, + forced:true, + popup:false, + content:function(){ + player.addTempSkill('meiying3'); + } + }, + meiying3:{}, + jianwu:{ + trigger:{player:'shaBegin'}, + forced:true, + filter:function(event,player){ + return get.distance(event.target,player,'attack')>1; + }, + content:function(){ + trigger.directHit=true; + } + }, + zuizhan:{ + trigger:{player:'useCard'}, + popup:false, + filter:function(event,player){ + if(event.card.name!='sha') return false; + return game.hasPlayer(function(current){ + return (event.targets.contains(current)==false&¤t!=player&& + lib.filter.targetEnabled(event.card,player,current)) + }); + }, + content:function(){ + var list=game.filterPlayer(function(current){ + return (trigger.targets.contains(current)==false&¤t!=player&& + lib.filter.targetEnabled(trigger.card,player,current)) + }); + if(list.length){ + event.target=list.randomGet(); + player.line(event.target,'green'); + game.log(event.target,'被追加为额外目标'); + trigger.targets.push(event.target); + player.draw(); + } + } + }, + xidie:{ + trigger:{player:'phaseBegin'}, + direct:true, + filter:function(event,player){ + return player.countCards('h')>player.hp; + }, + content:function(){ + "step 0" + var next=player.chooseToDiscard(get.prompt('xidie'),[1,Math.min(3,player.countCards('h')-player.hp)]); + next.ai=function(card){ + return 6-get.value(card); + } + next.logSkill='xidie'; + "step 1" + if(result.bool){ + player.storage.xidie=result.cards.length; + } + }, + group:'xidie2' + }, + xidie2:{ + trigger:{player:'phaseEnd'}, + forced:true, + filter:function(event,player){ + return player.storage.xidie>0; + }, + content:function(){ + player.draw(player.storage.xidie); + player.storage.xidie=0; + } + }, + meihu:{ + trigger:{player:'damageEnd'}, + check:function(event,player){ + return get.attitude(player,event.source)<4; + }, + filter:function(event,player){ + return event.source&&event.source!=player&&event.source.countCards('h')>0; + }, + logTarget:'source', + content:function(){ + "step 0" + trigger.source.chooseCard('交给'+get.translation(player)+'一张手牌',true).ai=function(card){ + return -get.value(card); + }; + "step 1" + if(result.bool){ + player.gain(result.cards[0],trigger.source); + trigger.source.$give(1,player); + } + }, + ai:{ + maixie_defend:true, + effect:{ + target:function(card,player,target){ + if(get.tag(card,'damage')){ + if(player.hasSkillTag('jueqing',false,target)) return [1,-1.5]; + return [1,0,0,-0.5]; + } + } + } + } + }, + xlqianhuan:{ + trigger:{player:'phaseAfter'}, + check:function(event,player){ + return player.hp==1||player.isTurnedOver(); + }, + filter:function(event,player){ + return player.hp1||player.countCards('h',{color:'black'})>1; + }, + direct:true, + content:function(){ + "step 0" + var next=player.chooseToDiscard(get.prompt('fumo',trigger.source),2,function(card){ + if(get.damageEffect(trigger.source,player,player,'thunder')<=0) return 0; + if(ui.selected.cards.length){ + return get.color(card)==get.color(ui.selected.cards[0]); + } + return player.countCards('h',{color:get.color(card)})>1; + }).set('complexCard',true); + next.ai=function(card){ + if(get.damageEffect(trigger.source,player,player,'thunder')>0){ + return 8-get.value(card); + } + return 0; + }; + next.logSkill=['fumo',trigger.source,'thunder']; + "step 1" + if(result.bool){ + trigger.source.damage('thunder'); + } + }, + ai:{ + maixie_defend:true, + threaten:0.8 + } + }, + fanyin:{ + trigger:{player:'phaseEnd'}, + direct:true, + content:function(){ + "step 0" + player.chooseTarget(get.prompt('fanyin'),function(card,player,target){ + // if(player==target) return false; + if(target.isLinked()) return true; + if(target.isTurnedOver()) return true; + if(target.countCards('j')) return true; + if(target.isMinHp()&&target.isDamaged()) return true; + return false; + }).ai=function(target){ + var num=0; + var att=get.attitude(player,target); + if(att>0){ + if(target.isMinHp()){ + num+=5; + } + if(target.isTurnedOver()){ + num+=5; + } + if(target.countCards('j')){ + num+=2; + } + if(target.isLinked()){ + num++; + } + if(num>0){ + return num+att; + } + } + return num; + } + "step 1" + if(result.bool){ + event.target=result.targets[0]; + player.logSkill('fanyin',event.target); + } + else{ + event.finish(); + } + "step 2" + if(event.target.isLinked()){ + event.target.link(); + } + "step 3" + if(event.target.isTurnedOver()){ + event.target.turnOver(); + } + "step 4" + var cards=event.target.getCards('j'); + if(cards.length){ + event.target.discard(cards); + } + "step 5" + if(event.target.isMinHp()){ + event.target.recover(); + } + }, + ai:{ + expose:0.2, + threaten:1.3 + } + }, + mingkong:{ + trigger:{player:'damageBegin'}, + forced:true, + filter:function(event,player){ + return player.countCards('h')==0&&event.num>=1; + }, + content:function(){ + if(trigger.num>=1){ + trigger.num--; + } + if(trigger.source){ + trigger.source.storage.mingkong=true; + trigger.source.addTempSkill('mingkong2'); + } + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(get.tag(card,'damage')&&target.countCards('h')==0){ + if(player.hasSkillTag('jueqing',false,target)) return; + return 0.1; + } + } + } + }, + }, + mingkong2:{ + trigger:{source:['damageEnd','damageZero']}, + forced:true, + popup:false, + audio:false, + vanish:true, + filter:function(event,player){ + return player.storage.mingkong?true:false; + }, + content:function(){ + player.draw(); + player.storage.mingkong=false; + player.removeSkill('mingkong2'); + } + }, + yuehua:{ + trigger:{player:['useCardAfter','respondAfter','discardAfter']}, + frequent:true, + filter:function(event,player){ + if(player==_status.currentPhase) return false; + if(event.cards){ + for(var i=0;i0; + }, + direct:true, + priority:-5, + content:function(){ + "step 0" + var next=player.chooseToDiscard(get.prompt('qinglan',trigger.player),'he'); + next.logSkill=['qinglan',trigger.player]; + next.ai=function(card){ + if(trigger.num>1||!trigger.source){ + if(get.attitude(player,trigger.player)>0){ + return 9-get.value(card); + } + return -1; + } + else if(get.attitude(player,trigger.player)>0){ + if(trigger.player.hp==1){ + return 8-get.value(card); + } + if(trigger.source.hp==trigger.source.maxHp){ + return 6-get.value(card); + } + } + else if(get.attitude(player,trigger.source)>0&& + trigger.source.hp1){ + if(get.color(card)=='red') return 5-get.value(card); + } + return -1; + } + "step 1" + if(result.bool){ + trigger.cancel(); + if(trigger.source){ + trigger.source.recover(); + } + } + else{ + event.finish(); + } + "step 2" + if(trigger.source){ + trigger.source.draw(); + } + }, + ai:{ + expose:0.1 + } + }, + fanshi:{ + trigger:{player:'phaseDiscardAfter'}, + forced:true, + filter:function(event,player){ + return player.getStat('damage')>0; + }, + check:function(event,player){ + return player.hp==player.maxHp; + }, + content:function(){ + "step 0" + player.loseHp(); + "step 1" + player.draw(); + } + }, + xuelu:{ + unique:true, + trigger:{player:'phaseEnd'}, + direct:true, + filter:function(event,player){ + return player.maxHp>player.hp&&player.countCards('he',{color:'red'})>0; + }, + // alter:true, + content:function(){ + "step 0" + player.chooseCardTarget({ + position:'he', + filterTarget:function(card,player,target){ + return player!=target; + }, + filterCard:function(card,player){ + return get.color(card)=='red'&&lib.filter.cardDiscardable(card,player); + }, + ai1:function(card){ + return 9-get.value(card); + }, + ai2:function(target){ + return get.damageEffect(target,player,player,'fire'); + }, + prompt:get.prompt('xuelu') + }); + "step 1" + if(result.bool){ + event.target=result.targets[0]; + player.logSkill('xuelu',event.target,'fire'); + if(get.is.altered('xuelu')){ + event.num=1; + } + else{ + event.num=Math.min(2,Math.ceil((player.maxHp-player.hp)/2)); + } + player.discard(result.cards); + } + else{ + event.finish(); + } + "step 2" + if(event.target){ + event.target.damage(event.num,'fire'); + } + }, + ai:{ + maixie:true, + expose:0.2, + threaten:function(player,target){ + if(target.hp==1) return 3; + if(target.hp==2) return 1.5; + return 0.5; + }, + effect:{ + target:function(card,player,target){ + if(!target.hasFriend()) return; + if(get.tag(card,'damage')){ + if(target.hp==target.maxHp) return [0,1]; + } + if(get.tag(card,'recover')&&player.hp>=player.maxHp-1) return [0,0]; + } + } + } + }, + xiuhua_old:{ + changeSeat:true, + trigger:{player:'shaHit'}, + filter:function(event,player){ + return event.target!=player.previous; + }, + content:function(){ + game.swapSeat(trigger.target,player,true,true); + } + }, + shahun:{ + enable:'chooseToUse', + skillAnimation:true, + animationColor:'fire', + derivation:'juejing', + // alter:true, + filter:function(event,player){ + return !player.storage.shahun&&player.hp<=0; + }, + content:function(){ + "step 0" + var cards=player.getCards('hej'); + player.discard(cards); + "step 1" + if(player.isLinked()) player.link(); + "step 2" + if(player.isTurnedOver()) player.turnOver(); + "step 3" + player.draw(3); + "step 4" + player.recover(1-player.hp); + player.removeSkill('fanshi'); + player.addSkill('juejing'); + player.storage.shahun=2; + player.markSkill('shahun'); + game.addVideo('storage',player,['shahun',player.storage.shahun]); + }, + group:'shahun2', + intro:{ + content:'turn' + }, + ai:{ + save:true, + skillTagFilter:function(player){ + if(player.storage.shahun) return false; + if(player.hp>0) return false; + }, + result:{ + player:3 + } + } + }, + shahun2:{ + trigger:{player:'phaseAfter'}, + forced:true, + filter:function(event,player){ + return player.storage.shahun?true:false; + }, + content:function(){ + if(player.storage.shahun>1){ + player.storage.shahun--; + game.addVideo('storage',player,['shahun',player.storage.shahun]); + } + else{ + player.die(); + } + } + }, + yanjia_old:{ + enable:'chooseToUse', + filter:function(event,player){ + return player.countCards('he',{type:'equip'})>0; + }, + filterCard:function(card){ + return get.type(card)=='equip'; + }, + position:'he', + viewAs:{name:'wuzhong'}, + prompt:'将一张装备牌当无中生有使用', + check:function(card){ + var player=_status.currentPhase; + if(player.countCards('he',{subtype:get.subtype(card)})>1){ + return 11-get.equipValue(card); + } + if(player.countCards('h')0&&player.storage.xuanning!=3; + }, + filterCard:function(card){ + return get.type(card)=='basic'; + }, + check:function(card){ + return 7-get.useful(card); + }, + content:function(){ + player.storage.xuanning=3; + player.markSkill('xuanning'); + game.addVideo('storage',player,['xuanning',player.storage.xuanning]); + }, + ai:{ + result:{ + player:function(player){ + var num=player.countCards('h'); + if(num>player.hp+1) return 1; + if(player.storage.xuanning>=2) return 0; + if(num>player.hp) return 1 + if(player.storage.xuanning>=1) return 0; + return 1; + }, + }, + order:5 + } + }, + xuanning2:{ + trigger:{player:'damageEnd'}, + forced:true, + filter:function(event,player){ + if(player.storage.xuanning){ + return (event.source&&event.source.countCards('he')>0); + } + return false; + }, + logTarget:'source', + content:function(){ + var he=trigger.source.getCards('he'); + if(he.length){ + trigger.source.discard(he.randomGet()); + } + player.storage.xuanning--; + if(!player.storage.xuanning){ + player.unmarkSkill('xuanning'); + } + game.addVideo('storage',player,['xuanning',player.storage.xuanning]); + }, + ai:{ + maixie_defend:true, + } + }, + liuguang:{ + trigger:{player:'phaseBegin'}, + direct:true, + filter:function(event,player){ + if(player.storage.xuanning) return true; + return false; + }, + content:function(){ + "step 0" + player.chooseTarget(function(card,player,target){ + return player!=target; + },get.prompt('liuguang'),[1,3]).ai=function(target){ + return get.damageEffect(target,player,player); + } + "step 1" + if(result.bool){ + player.storage.xuanning--; + if(!player.storage.xuanning){ + player.unmarkSkill('xuanning'); + } + event.targets=result.targets.slice(0); + event.targets.sort(lib.sort.seat); + player.logSkill('liuguang',result.targets); + game.addVideo('storage',player,['xuanning',player.storage.xuanning]); + } + else{ + event.finish(); + } + "step 2" + if(event.targets.length){ + var target=event.targets.shift(); + var next=target.chooseToDiscard('流光:弃置一张牌或受到一点伤害','he'); + next.ai=function(card){ + if(get.damageEffect(_status.event.player,player,_status.event.player)>=0) return -1; + if(_status.event.player.hp==1) return 9-get.value(card); + return 8-get.value(card); + }; + next.autochoose=function(){ + return this.player.countCards('he')==0; + }; + event.current=target; + } + else{ + event.finish(); + } + "step 3" + if(result.bool&&result.cards&&result.cards.length){ + event.goto(2); + } + else{ + event.current.damage(); + } + }, + ai:{ + expose:0.2, + threaten:1.3 + } + }, + yangming:{ + enable:'phaseUse', + filter:function(event,player){ + if(player.storage.yangming2>0) return false; + return player.countCards('h',{color:'red'})>0; + }, + filterCard:function(card){ + return get.color(card)=='red'; + }, + content:function(){ + player.storage.yangming2=2; + player.addSkill('yangming2'); + game.addVideo('storage',player,['yangming2',player.storage.yangming2]); + }, + check:function(card){ + return 6-get.value(card); + }, + ai:{ + result:{ + player:function(player){ + if(player.countCards('h')<=player.hp&&player.hp==player.maxHp){ + return 0; + } + return 1; + } + }, + order:6, + threaten:1.3 + } + }, + yangming2:{ + trigger:{player:'phaseUseEnd'}, + direct:true, + mark:true, + content:function(){ + "step 0" + player.storage.yangming2--; + game.addVideo('storage',player,['yangming2',player.storage.yangming2]); + if(player.storage.yangming2>0){ + event.finish(); + } + else{ + player.removeSkill('yangming2'); + var num=game.countPlayer(function(current){ + return get.distance(player,current)<=1&¤t.isDamaged(); + }); + if(num==0){ + event.finish(); + } + else{ + player.chooseTarget(function(card,player,target){ + return get.distance(player,target)<=1&&target.hp1) return false; + if(target.hp>2) return false; + if(get.attitude(player,target)>=0) return false; + return get.damageEffect(target,player,player,'fire'); + } + } + } + }, + jiehuo_old:{ + unique:true, + forbid:['infinity'], + skillAnimation:true, + animationColor:'fire', + init:function(player){ + player.storage.jiehuo=false; + }, + enable:'phaseUse', + filter:function(event,player){ + //if(player.maxHp<=1) return false; + return !player.storage.jiehuo + }, + intro:{ + content:'limited' + }, + // mark:true, + line:'fire', + filterTarget:function(card,player,target){ + return player!=target; + }, + selectTarget:-1, + content:function(){ + if(!player.storage.jiehuo2){ + player.storage.jiehuo2=player.maxHp; + player.addSkill('jiehuo2'); + } + player.storage.jiehuo=true; + target.damage(Math.min(target.hp,player.storage.jiehuo2),'fire'); + } + }, + jiehuo2:{ + trigger:{player:'phaseUseEnd'}, + forced:true, + popup:false, + content:function(){ + player.die(); + } + }, + yuling:{ + unique:true, + locked:true, + group:['yuling1','yuling2','yuling3','yuling4','yuling5','yuling6'], + intro:{ + content:'time' + }, + // alter:true, + ai:{ + noh:true, + threaten:0.8, + effect:{ + target:function(card,player,target){ + if(card.name=='bingliang') return 0; + if(card.name=='lebu') return 1.5; + if(card.name=='guohe'){ + if(!target.countCards('e')) return 0; + return 0.5; + } + if(card.name=='liuxinghuoyu') return 0; + } + } + } + }, + yuling1:{ + trigger:{player:['phaseDrawBefore','phaseDiscardBefore']}, + priority:10, + forced:true, + popup:false, + check:function(){ + return false; + }, + content:function(){ + trigger.cancel(); + } + }, + yuling2:{ + trigger:{player:['loseEnd','drawEnd'],global:'gameDrawAfter'}, + check:function(event,player){ + return player.countCards('h')<2; + }, + priority:10, + forced:true, + filter:function(event,player){ + return player.countCards('h')<5; + }, + content:function(){ + player.draw(5-player.countCards('h')); + } + }, + yuling3:{ + trigger:{player:'gainEnd'}, + priority:10, + forced:true, + filter:function(event,player){ + return player.countCards('h')>5; + }, + check:function(event,player){ + return player.countCards('h')<2; + }, + content:function(){ + player.chooseToDiscard(true,player.countCards('h')-5); + } + }, + yuling4:{ + mod:{ + cardEnabled:function(card,player){ + if(_status.currentPhase!=player) return; + var num=2; + if(get.is.altered('yuling')) num=1; + if(player.countUsed()>=player.maxHp+num) return false; + } + } + }, + yuling5:{ + trigger:{player:['useCardAfter','phaseBegin']}, + silent:true, + content:function(){ + player.storage.yuling=player.maxHp+2-player.countUsed(); + } + }, + yuling6:{ + trigger:{player:'phaseAfter'}, + silent:true, + content:function(){ + delete player.storage.yuling; + } + }, + }, + translate:{ + gjqt_bailitusu:'百里屠苏', + gjqt_fengqingxue:'风晴雪', + gjqt_fanglansheng:'方兰生', + gjqt_xiangling:'襄铃', + gjqt_yinqianshang:'尹千觞', + gjqt_hongyu:'红玉', + gjqt_ouyangshaogong:'欧阳少恭', + gjqt_xunfang:'巽芳', + + gjqt_yuewuyi:'乐无异', + gjqt_wenrenyu:'闻人羽', + gjqt_xiayize:'夏夷则', + gjqt_aruan:'阿阮', + gjqt_xieyi:'谢衣', + gjqt_yanjiaxieyi:'偃甲谢衣', + gjqt_chuqi:'初七', + + gjqt_beiluo:'北洛', + gjqt_yunwuyue:'云无月', + gjqt_cenying:'岑缨', + + yunyou:'云游', + yunyou_info:'每两轮限一次,出牌阶段,你可以发现一张地图牌本局未使用过的地图牌并使用之', + xuanzhen:'玄阵', + // xuanzhen_bg:'阵', + xuanzhen_info:'每轮限一次,当你成为一名其他角色的卡牌惟一目标时,你可以发现一张牌代替此牌', + qingshu:'青书', + qingshu_info:'结束阶段,你可以令一名角色永久获得一个你使用过且不是当前地图的地图牌效果(每个地图最多发动一次)', + yanjiadan_heart:'偃甲蛋', + yanjiadan_heart_info:'可以当作紫阳丹、玉女元参或沙棠使用', + yanjiadan_diamond:'偃甲蛋', + yanjiadan_diamond_info:'可以当作流风散、舒筋散或神火飞鸦使用', + yanjiadan_club:'偃甲蛋', + yanjiadan_club_info:'可以当作天女散花、六骰格或锦里针使用', + yanjiadan_spade:'偃甲蛋', + yanjiadan_spade_info:'可以当作飞镖、乾坤镖或龙须钩使用', + lingyan:'灵偃', + lingyan_bg:'偃', + lingyan_info:'出牌阶段限一次,你可以将一张点数与武将牌上的牌均不同的手牌置于武将牌上,然后获得与其花色对应的一枚偃甲蛋', + xunjian:'寻剑', + xunjian_info:'锁定技,每当你使用或打出一张牌,若牌堆中有同名牌,你有X的机率获得之,X为你的“灵偃”牌数/13', + xunjian_old_info:'觉醒技,结束阶段,若你武将牌上有13张牌,你失去技能灵偃并获得技能通天', + tongtian:'通天', + tongtian_info:'锁定技,在你使用或打出一张牌后,若敌方角色手中有同名牌,你随机获得其中一张', + xianju:'仙居', + xianju_info:'锁定技,奇数游戏轮次开始时,你获得潜行直到下一轮开始;偶数游戏轮次开始时,你随机获得一张机关牌', + xuanci:'旋刺', + xuanci_info:'出牌阶段限一次,你可以将一张梅花牌当作飞镖使用;锁定技,你使用飞镖无距离限制,你使用飞镖后对目标结算后视为对目标使用一张杀', + humeng:'湖梦', + humeng_sub:'偃甲谢衣', + humeng_info:'觉醒技,当你使用过4种不同的偃甲蛋后,你获得替身偃甲谢衣;觉醒技,当你进入濒死状态时,你弃置所有牌,摸四张牌,变身为初七并激活偃甲谢衣', + yange:'魇歌', + yange_info:'游戏开始时,你获得数量等于敌方角色数的“魇”标记;准备阶段开始时,你可以移去一枚“魇”标记并变为一名其他存活角色的复制,此回合结束后你变回原角色', + woxue:'卧雪', + woxue_info:'每当你于回合外使用或打出一张牌,你可以视为对当前回合角色使用【白霜】', + lingnu:'灵怒', + lingnu_info:'锁定技,每当你造成一点伤害,你随机获得一个与杀相关的技能,技能在你行动3回合后消失(同一时间最多拥有3个以此法获得的技能)', + zhenying:'振影', + zhenying_info:'每当你使用或打出一张非转化的黑色牌(装备或延时锦囊牌除外),你可以获得一张此牌的“替身”;你使用或打出“替身”牌后需弃置一张牌(没有则不弃);当前回合结束后,“替身”牌消失', + cihong:'刺鸿', + cihong_bg:'鸿', + cihong_info:'每三轮限一次,结束阶段,你可以指定一名其他角色并可以依次选择:1. 弃置一张红色牌;2. 失去一点体力;3. 将武将牌翻至背面;每选择一项,视为对目标使用一张杀', + lianjing:'莲境', + lianjing_info:'每两轮限一次,回合结束后,你可以选择至多2名其他角色,将其他角色移出游戏,然后你与所选的角色依次进行一个回合', + zuiji:'醉饮', + zuiji_info:'出牌阶段,你可以将一张手牌或装备牌当作酒使用', + manwu:'曼舞', + manwu_info:'在一名角色的结束阶段,若其手牌数为全场最少或之一,你可以令其摸一张牌', + xfanghua:'芳华', + xfanghua_info:'在你成为红色牌的目标后,你可以回复一点体力', + yunyin:'云音', + yunyin_info:'结束阶段,你可以弃置一张与本回合使用过的卡牌花色均不相同的手牌,视为使用一张基本牌或普通锦囊牌', + shishui:'逝水', + shishui_info:'锁定技,每当你使用一张红色牌,你令目标流失一点体力', + duhun:'渡魂', + duhun_info:'濒死阶段,你可以与一名体力值不超过你的体力上限的角色拼点,若你赢,你失去一点体力上限并与该角色交换体力值;若你没赢,你立即死亡', + duhun_info_alter:'濒死阶段,你可以与一名体力值不超过你的体力上限的角色拼点,若你赢,你失去一点体力上限并将体力值回复至与该角色相同;若你没赢,你立即死亡', + chizhen:'驰阵', + chizhen_info:'出牌阶段开始时,你可以摸X张牌并弃置X张牌,若你弃置了杀,可以视为使用一张决斗(X为你已损失的体力值且至少为1)', + xidie:'戏蝶', + xidie2:'戏蝶', + xidie_info:'准备阶段,若你的手牌数大于体力值,可以弃置至多X张牌,并于结束阶段摸等量的牌,X为你的体力值与手牌数之差且不超过3', + meihu:'魅狐', + meihu2:'魅狐', + meihu_info:'当你受到伤害后,可令伤害来源交给你一张手牌', + jianwu:'剑舞', + jianwu_info:'锁定技,攻击范围不含你的角色无法闪避你的杀', + meiying:'魅影', + meiying_info:'一名其他角色的回合结束时,若其未于此回合内使用过指定另一名角色为目标的牌,你可以弃置一张红色牌视为对其使用一张杀', + zuizhan:'乱斩', + zuizhan_info:'每当你使用一张杀,可以摸一张牌,然后此杀随机增加一个额外目标', + xlqianhuan:'千幻', + xlqianhuan_info:'回合结束后,若你已受伤,你可以回复一点体力并将武将牌翻面。若你的武将牌背面朝上,你不能使用卡牌,也不能成为卡牌的目标', + fumo:'伏魔', + fumo_info:'每当你受到一次伤害,可以弃置两张颜色相同的手牌并对伤害来源造成一点雷电伤害', + fanyin:'梵音', + fanyin_info:'结束阶段,你可以令一名角色复原武将牌并移除判定区内的牌;若其体力值是全场最少的之一,其回复一点体力', + mingkong:'明空', + mingkong_info:'锁定技,若你没有手牌,你受到的伤害-1,然后伤害来源摸一张牌', + qinglan:'晴岚', + qinglan_info:'每当有一名角色即将受到属性伤害,你可以弃置一张牌令其防止此伤害,然后伤害来源摸一张牌并回复一点体力', + yuehua:'月华', + yuehua_info:'每当你于回合外使用、打出或弃置红色牌,你可以摸一张牌', + xuelu:'血戮', + xuelu_info:'结束阶段,若你已受伤,你可以弃置一张红色牌并对一名其他角色造成一点火焰伤害;若你已损失体力值不少于3,改为造成两点火焰伤害', + xuelu_info_alter:'结束阶段,若你已受伤,你可以弃置一张红色牌并对一名其他角色造成一点火焰伤害', + fanshi:'反噬', + fanshi_info:'锁定技,弃牌阶段结束时,若你本回合内造成过伤害,你流失一点体力并摸一张牌', + shahun:'煞魂', + shahun2:'煞魂', + shahun_info:'限定技,濒死阶段,你可以复原武将牌,弃置所有牌并摸三张牌,然后将体力回复至1;若如此做,你失去技能【反噬】,获得技能【绝境】,并于两回合后立即死亡', + shahun_info_alter:'限定技,濒死阶段,你可以复原武将牌,弃置所有牌并摸三张牌,然后将体力回复至1;若如此做,你失去技能【反噬】,获得技能【绝境】,并于两回合后立即死亡', + + yanjia:'偃甲', + yanjia_info:'出牌阶段,你可以将两张非特殊装备牌合成为一张强化装备', + xiuhua:'袖花', + xiuhua_info:'每当一件其他角色的装备因被替换或弃置进入弃牌堆,你可以获得之', + liuying:'流影', + liuying_info:'每当你使用一张杀结算完毕后,你可以指定一名本回合未成为过你的杀的目标的角色,并亮出牌堆顶的一张牌,若为黑色,你对该角色使用一张杀', + boyun:'拨云', + boyun1:'拨云', + boyun2:'拨云', + boyun_info:'在你的回合内,你可以弃置一张装备牌,并展示牌堆顶的一张牌,若其为装备牌,你须将其交给任意一张角色并对其造成一点伤害,否则你摸一张牌', + jizhan:'疾战', + jizhan_info:'出牌阶段限一次,你可以将移动到任意一名角色的前一位,视为对其使用了一张不计入出杀次数的杀', + qianjun:'千军', + qianjun_info:'每当你使用一张杀,你可以弃置一张牌,令距离目标1以内的所有角色成为额外目标', + xuanning:'玄凝', + xuanning1:'玄凝', + xuanning2:'玄凝', + liuguang:'流光', + yangming:'养命', + yangming2:'养命', + xuanning_info:'出牌阶段,你可以弃置一基本牌,获得至多3个玄凝标记。当你受到伤害时,你失去一枚玄凝标记,伤害来源随机弃置一张牌', + liuguang_info:'准备阶段,若你有玄凝标记,你可以弃置一枚玄凝标记,选择至多三名角色依次令其选择一项:弃置一张牌,或受到一点伤害,并终止流光结算', + yangming_info:'出牌阶段,你可以弃置一张红色牌,并在下个出牌阶段结束时令距离1以内的任意名角色回复一点体力,在此之前不可再次发动', + zhaolu:'朝露', + jiehuo:'劫火', + yuling:'御灵', + yuling1:'御灵', + yuling2:'御灵', + yuling3:'御灵', + yuling4:'御灵', + zhaolu_info:'锁定技,每隔X回合,你流失一点体力上限,每当你受到一点伤害或有人死亡,视为减少两个回合,X为现存角色数且至多为5', + jiehuo_info:'限定技,出牌阶段,你可以对一名其他角色造成两点火焰伤害,然后死亡', + yuling_info:'锁定技,你没有摸牌和弃牌阶段,你的手牌数始终为5,你在一个出牌阶段最多使用X+2张牌,X为你的体力上限', + yuling_info_alter:'锁定技,你没有摸牌和弃牌阶段,你的手牌数始终为5,你在一个出牌阶段最多使用X+1张牌,X为你的体力上限', + }, + }; +}); diff --git a/character/hearth.js b/character/hearth.js index 377e6238b..fcdf5c034 100644 --- a/character/hearth.js +++ b/character/hearth.js @@ -476,7 +476,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, oldhuanjue:{ - trigger:{global:'useCard'}, + trigger:{global:'useCard1'}, usable:1, filter:function(event,player){ if(event.targets.length!=1) return false; @@ -536,9 +536,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.card=card; game.log(player,'将',trigger.card,'变为',card); // if(!event.isMine()) game.delayx(); - trigger.untrigger(); - trigger.card=card; + trigger.card=get.autoViewAs(card); trigger.cards=[card]; + game.cardsGotoOrdering(card).relatedEvent=trigger; } else{ event.finish(); @@ -552,8 +552,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.line(trigger.player,'green'); } game.delayx(0.5); - 'step 3' - trigger.trigger('useCard'); }, ai:{ threaten:0.1 @@ -7204,7 +7202,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, huanjue:{ - trigger:{player:'useCard'}, + trigger:{player:'useCard1'}, frequent:true, filter:function(event,player){ if(event._huanjue) return false; @@ -7288,9 +7286,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.card=card; game.log(player,'将',trigger.card,'变为',card); // if(!event.isMine()) game.delayx(); - trigger.untrigger(); - trigger.card=card; + trigger.card=get.autoViewAs(card); trigger.cards=[card]; + game.cardsGotoOrdering(card).relatedEvent=trigger; trigger._huanjue=true; } else{ @@ -7313,7 +7311,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else{ stat[trigger.card.name]++; } - trigger.trigger('useCard'); }, draw:function(){ player.draw(); @@ -7397,10 +7394,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ); event.card=card; game.log(player,'将',trigger.card,'变为',card); - // if(!event.isMine()) game.delayx(); - trigger.untrigger(); - trigger.card=card; + trigger.card=get.autoViewAs(card); trigger.cards=[card]; + game.cardsGotoOrdering(card); } else{ event.finish(); @@ -7415,7 +7411,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } game.delayx(0.5); 'step 3' - trigger.trigger('useCard'); trigger.insertAfter(lib.skill.huanjue.draw,{player:trigger.player}); }, draw:function(){ diff --git a/character/mobile.js b/character/mobile.js index bd246aa36..3f62b3665 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -6,12 +6,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ connect:true, characterSort:{ mobile:{ - mobile_default:["miheng","taoqian","liuzan","lingcao","sunru","lifeng","zhuling","liuye","zhaotongzhaoguang","majun","simazhao","wangyuanji","pangdegong","shenpei","hujinding"], + mobile_default:["miheng","taoqian","liuzan","lingcao","sunru","lifeng","zhuling","liuye","zhaotongzhaoguang","majun","simazhao","wangyuanji","pangdegong","shenpei","hujinding","zhangyì","jiakui"], mobile_others:["re_jikang","old_bulianshi","old_yuanshu","re_wangyun","re_baosanniang","re_weiwenzhugezhi","re_zhanggong","re_xugong","xin_yuanshao","re_liushan"], mobile_sunben:["re_sunben"], }, }, character:{ + zhangyì:['male','shu',4,['zhiyi']], + jiakui:['male','wei',3,['zhongzuo','wanlan']], re_jikang:["male","wei",3,["new_qingxian","new_juexiang"]], old_bulianshi:['female','wu',3,['anxu','zhuiyi']], miheng:['male','qun',3,['kuangcai','shejian']], @@ -44,6 +46,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_sunben:['male','wu',4,['jiang','rehunzi','zhiba'],['zhu']], }, characterIntro:{ + zhangyì:'张翼(?-264年),字伯恭,益州犍为郡武阳县人。三国时期蜀汉将领。历任梓潼、广汉、蜀郡三郡太守,出任庲降都督,后随诸葛亮和姜维北伐,官至左车骑将军,领冀州刺史。初封关内侯,进爵都亭侯。蜀汉灭亡后,魏将钟会密谋造反,成都大乱,张翼亦为乱兵所杀。张翼是蜀汉第三任庲降都督,由于执法严厉,不得南夷欢心。在北伐上,张翼认为国小民疲,不应滥用武力,是蜀汉朝廷当时极少敢当朝和姜维争辩北伐问题的大臣。', + jiakui:'贾逵(174年—228年),本名贾衢,字梁道,河东襄陵人(今山西临汾县)。汉末三国时期魏国名臣,西晋开国功臣贾充父亲。初为并州郡吏,迁渑池县令,拜弘农太守,历仕曹操、曹丕、曹叡三世,是曹魏政权中具有军政才干的人物,终其一生为魏国统一事业作出卓越贡献。担任豫州刺史期间,兴修水利,凿通运河二百余里,时称“贾侯渠”,便利民生。随同曹丕伐吴,进封阳里亭侯,加号建威将军。石亭之战,率军救出曹休。太和二年,去世,赠本官,谥号为肃,《唐会要》将其尊为魏晋八君子之一。', shenpei:'审配(?-204年),字正南,魏郡阴安(今河北清丰北)人。为人正直, 袁绍领冀州,审配被委以腹心之任,并总幕府。河北平定,袁绍以审配、逢纪统军事,审配恃其强盛,力主与曹操决战。曾率领弓弩手大破曹军于官渡。官渡战败,审配二子被俘,反因此受谮见疑,幸得逢纪力保。袁绍病死,审配等矫诏立袁尚为嗣,导致兄弟相争,被曹操各个击破。曹操围邺,审配死守数月,终城破被擒,拒不投降,慷慨受死。', hujinding:'胡金定,女,传说中关羽之妻。关索之母,配偶关羽,出处《花关索传》和元代《三国志评话》民间传说人物。', }, @@ -86,7 +90,102 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, characterFilter:{}, skill:{ - + zhongzuo:{ + audio:2, + trigger:{global:'phaseEnd'}, + direct:true, + filter:function(event,player){ + return player.getHistory('damage').length>0||player.getHistory('sourceDamage').length>0; + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('zhongzuo'),'令一名角色摸两张牌。若其已受伤,则你摸一张牌。').set('ai',function(target){ + if(target.hasSkillTag('nogain')&&target!=_status.currentPhase) return target.isDamaged()?0:1; + var att=get.attitude(_status.event.player,target); + if(target.isDamaged()) att=att*1.2; + return att; + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('zhongzuo',target); + target.draw(2); + if(target.isDamaged()) player.draw(); + } + }, + }, + wanlan:{ + audio:2, + trigger:{global:'dying'}, + check:function(){return false}, + limited:true, + unique:true, + filter:function(event,player){ + return event.player.hp<=0&&player.countCards('h')>0; + }, + skillAnimation:true, + animationColor:'thunder', + logTarget:'player', + content:function(){ + 'step 0' + player.awakenSkill('wanlan'); + player.discard(player.getCards('h')); + 'step 1' + var num=1-trigger.player.hp; + if(num) trigger.player.recover(num); + 'step 2' + if(_status.currentPhase&&_status.currentPhase.isAlive()) _status.currentPhase.damage(); + }, + }, + zhiyi:{ + audio:2, + trigger:{player:['useCard','respond']}, + forced:true, + filter:function(event,player){ + if(get.type(event.card)!='basic') return false; + var history=player.getHistory('useCard',function(evt){ + return get.type(evt.card)=='basic'; + }).concat(player.getHistory('respond',function(evt){ + return get.type(evt.card)=='basic'; + })); + return history.length==1&&history[0]==event; + }, + content:function(){ + 'step 0' + var info=get.info(trigger.card); + if(!info||!info.enable) event._result={index:0}; + else{ + var evt=trigger; + if(evt.respondTo&&evt.getParent('useCard').name=='useCard') evt=evt.getParent('useCard'); + event.evt=evt; + player.chooseControl().set('prompt','执义:请选择一项').set('choiceList',[ + '摸一张牌', + '于'+get.translation(evt.card)+'的使用结算结束之后视为使用一张'+get.translation({name:trigger.card.name,nature:trigger.card.nature,isCard:true}), + ]).set('ai',function(){return _status.event.choice}).set('choice',function(){ + var card={name:trigger.card.name,nature:trigger.card.nature,isCard:true}; + if(card.name=='sha'){ + if(player.getUseValue(card)>0) return 1; + } + else if(card.name=='tao'){ + var hp=player.maxHp-player.hp; + if(trigger.targets.contains(player)) hp--; + return hp>0?1:0; + } + return 0; + }()); + } + 'step 1' + if(result.index==0){ + player.draw(); + } + else{ + var next=player.chooseUseTarget({name:trigger.card.name,nature:trigger.card.nature},false); + _status.event.next.remove(next); + event.evt.after.push(next); + next.logSkill='zhiyi'; + } + }, + }, //表演测试 qiaosi_map:{charlotte:true}, qiaosi:{ @@ -1685,6 +1784,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, translate:{ + zhangyì:'张翼', + jiakui:'贾逵', + zhiyi:'执义', + zhiyi_info:'锁定技,当你于一回合内使用或打出第一张基本牌时,你选择一项:1.摸一张牌。2.于此牌A(若此牌是因响应牌B而使用或打出的,则改为牌B)的使用或打出流程结算完成后,视为使用一张与此牌名称和属性相同的卡牌。', + zhongzuo:'忠佐', + zhongzuo_info:'一名角色的回合结束时,若你于此回合内造成或受到过伤害,则你可以令一名角色摸两张牌。若该角色已受伤,则你摸一张牌。', + wanlan:'挽澜', + wanlan_info:'限定技,当一名角色进入濒死状态时,你可以弃置所有手牌并令其回复体力至1点,然后对当前回合角色造成1点伤害。', re_jikang:"手杀嵇康", old_bulianshi:'手杀步练师', old_caochun:'旧曹纯', diff --git a/character/mtg.js b/character/mtg.js index 171fa76c2..0dc27c9aa 100644 --- a/character/mtg.js +++ b/character/mtg.js @@ -158,9 +158,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ trigger.target=player.storage.mhuanyi_target[0]; - trigger.untrigger(); - trigger.trigger('useCardToBefore'); - trigger.trigger(trigger.card.name+'Before'); player.removeSkill('mhuanyi_target'); } }, diff --git a/character/old.js b/character/old.js index 6ce30ba2c..0478c27e0 100755 --- a/character/old.js +++ b/character/old.js @@ -80,10 +80,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, old_fuhun:{ audio:'fuhun', - trigger:{player:'phaseDrawBefore'}, + trigger:{player:'phaseDrawBegin1'}, + filter:function(event,player){ + return !event.numFixed; + }, content:function(){ 'step 0' - trigger.cancel(); + trigger.changeToZero(); 'step 1' var cards=get.cards(2); event.cards=cards; diff --git a/character/refresh.js b/character/refresh.js index 4206b8700..b9ff98db0 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -9,10 +9,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ refresh_huo:["re_sp_zhugeliang","re_xunyu","re_dianwei","re_yanwen","re_pangtong","ol_yuanshao","re_pangde"], refresh_lin:['re_zhurong','re_menghuo','re_dongzhuo','re_sunjian','re_caopi','re_xuhuang'], refresh_shan:['re_dengai','re_jiangwei','re_caiwenji','ol_liushan','re_zhangzhang','re_zuoci','re_sunce'], + refresh_yijiang:['re_xusheng','re_wuguotai','re_gaoshun'], }, }, connect:true, character:{ + re_xusheng:['male','wu',4,['repojun']], + re_wuguotai:['male','wu',3,['reganlu','buyi']], + re_gaoshun:['male','qun',4,['rexianzhen','rejinjiu']], re_caocao:['male','wei',4,['new_rejianxiong','hujia'],['zhu']], re_simayi:['male','wei',3,['refankui','reguicai']], re_guojia:['male','wei',3,['tiandu','new_reyiji']], @@ -88,6 +92,282 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sunben:['zhouyu','taishici','daqiao'], }, skill:{ + rexianzhen:{ + audio:2, + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return player.canCompare(target); + }, + filter:function(event,player){ + return player.countCards('h')>0; + }, + content:function(){ + "step 0" + player.chooseToCompare(target); + "step 1" + if(result.player&&(result.player.name=='sha'||player.hasSkill('rejinjiu')&&result.player.name=='jiu')) player.addTempSkill('rexianzhen4'); + if(result.bool){ + player.storage[event.name]=target; + player.addTempSkill(event.name+2); + } + else{ + player.addTempSkill(event.name+3); + } + }, + ai:{ + order:function(name,player){ + var cards=player.getCards('h'); + if(player.countCards('h','sha')==0){ + return 1; + } + for(var i=0;i11&&get.value(cards[i])<7){ + return 9; + } + } + return get.order({name:'sha'})-1; + }, + result:{ + player:function(player){ + if(player.countCards('h','sha')>0) return 0; + var num=player.countCards('h'); + if(num>player.hp) return 0; + if(num==1) return -2; + if(num==2) return -1; + return -0.7; + }, + target:function(player,target){ + var num=target.countCards('h'); + if(num==1) return -1; + if(num==2) return -0.7; + return -0.5 + }, + }, + threaten:1.3 + } + }, + rexianzhen2:{ + charlotte:true, + mod:{ + targetInRange:function(card,player,target){ + if(target==player.storage.rexianzhen) return true; + }, + cardUsable:function(card,player,num){ + if(card.name=='sha'&&typeof num=='number') return num+100; + }, + playerEnabled:function(card,player,target){ + if(card.name=='sha'&&player.storage.rexianzhen!=target&&!ui.selected.targets.contains(player.storage.rexianzhen)){ + var num=player.getCardUsable(card)-100; + if(num<=0) return false; + } + } + }, + ai:{ + unequip:true, + skillTagFilter:function(player,tag,arg){ + if(arg.target!=player.storage.rexianzhen) return false; + }, + } + }, + rexianzhen3:{ + charlotte:true, + mod:{ + cardEnabled:function(card){if(card.name=='sha') return false} + } + }, + rexianzhen4:{ + mod:{ + ignoredHandcard:function(card,player){ + if(get.name(card)=='sha'){ + return true; + } + }, + cardDiscardable:function(card,player,name){ + if(name=='phaseDiscard'&&get.name(card)=='sha'){ + return false; + } + }, + }, + }, + rejinjiu:{ + mod:{ + cardname:function(card,player){ + if(card.name=='jiu') return 'sha'; + }, + }, + ai:{ + skillTagFilter:function(player){ + if(!player.countCards('h','jiu')) return false; + }, + respondSha:true, + }, + audio:2, + trigger:{player:['useCard1','respond']}, + firstDo:true, + forced:true, + filter:function(event,player){ + return event.card.name=='sha'&&!event.skill&& + event.cards.length==1&&event.cards[0].name=='jiu'; + }, + content:function(){}, + group:'rejinjiu2', + global:'rejinjiu3', + }, + rejinjiu3:{ + mod:{ + cardEnabled:function(card,player){ + if(card.name=='jiu'&&_status.currentPhase&&_status.currentPhase!=player&&_status.currentPhase.hasSkill('rejinjiu')) return false; + }, + cardSavable:function(card,player){ + if(card.name=='jiu'&&_status.currentPhase&&_status.currentPhase!=player&&_status.currentPhase.hasSkill('rejinjiu')) return false; + }, + }, + }, + rejinjiu2:{ + audio:'rejinjiu', + forced:true, + trigger:{player:'damageBegin3'}, + filter:function(event,player){ + return event.getParent(2).jiu==true; + }, + content:function(){ + trigger.num-=trigger.getParent(2).jiu_add; + }, + }, + repojun:{ + audio:2, + trigger:{player:'useCardToPlayered'}, + direct:true, + filter:function(event,player){ + return event.card.name=='sha'&&event.target.hp>0&&event.target.countCards('he')>0; + }, + content:function(){ + 'step 0' + var next=player.choosePlayerCard(trigger.target,'he',[1,Math.min(trigger.target.hp,trigger.target.countCards('he'))],get.prompt('xinpojun',trigger.target)); + next.set('ai',function(button){ + if(!_status.event.goon) return 0; + var val=get.value(button.link); + if(button.link==_status.event.target.getEquip(2)) return 2*(val+3); + return val; + }); + next.set('goon',get.attitude(player,trigger.target)<=0); + next.set('forceAuto',true); + 'step 1' + if(result.bool){ + var target=trigger.target; + player.logSkill('repojun',trigger.target); + target.addSkill('repojun2'); + target.storage.repojun2.addArray(result.cards); + target.lose(result.cards,ui.special,'toStorage'); + game.log(target,'失去了'+get.cnNumber(result.cards.length)+'张牌'); + target.markSkill('repojun2'); + } + }, + ai:{ + unequip_ai:true, + skillTagFilter:function(player,tag,arg){ + if(arg&&arg.name=='sha'&&arg.target.getEquip(2)) return true; + return false; + } + }, + group:'repojun3', + }, + repojun3:{ + audio:'repojun', + trigger:{source:'damageBegin1'}, + forced:true, + locked:false, + logTarget:'player', + filter:function(event,player){ + var target=event.player; + return event.getParent().name=='sha'&&player.countCards('h')>=target.countCards('h')&&player.countCards('e')>=target.countCards('e'); + }, + content:function(){ + trigger.num++; + }, + }, + repojun2:{ + init:function(player,skill){ + if(!player.storage[skill]) player.storage[skill]=[]; + }, + trigger:{global:'phaseEnd'}, + forced:true, + popup:false, + charlotte:true, + filter:function(event,player){ + return player.storage.repojun2&&player.storage.repojun2.length>0; + }, + content:function(){ + player.removeSkill('repojun2'); + game.log(player,'收回了'+get.cnNumber(player.gain(player.storage.repojun2,'draw','fromStorage').cards.length)+'张〖破军〗牌'); + }, + intro:{ + onunmark:'throw', + content:'cardCount', + }, + }, + reganlu:{ + enable:'phaseUse', + usable:1, + audio:2, + selectTarget:2, + delay:0, + filterTarget:function(card,player,target){ + if(target.isMin()) return false; + if(ui.selected.targets.length==0) return true; + if(ui.selected.targets[0].countCards('e')==0&&target.countCards('e')==0) return false; + return target==player||ui.selected.targets[0]==player||Math.abs(ui.selected.targets[0].countCards('e')-target.countCards('e'))<=player.maxHp-player.hp; + }, + multitarget:true, + multiline:true, + content:function(){ + targets[0].swapEquip(targets[1]); + }, + ai:{ + order:10, + threaten:function(player,target){ + return 0.8*Math.max(1+target.maxHp-target.hp); + }, + result:{ + target:function(player,target){ + var list1=[]; + var list2=[]; + var num=player.maxHp-player.hp; + var players=game.filterPlayer(); + for(var i=0;i0) list1.push(players[i]); + else if(get.attitude(player,players[i])<0) list2.push(players[i]); + } + list1.sort(function(a,b){ + return a.countCards('e')-b.countCards('e'); + }); + list2.sort(function(a,b){ + return b.countCards('e')-a.countCards('e'); + }); + var delta; + for(var i=0;i3) return true; return false; }, + filter:function(event,player){ + return !event.numFixed; + }, content:function (){ "step 0" - trigger.cancel(null,null,'notrigger'); + trigger.changeToZero(); event.cards=get.cards(2); event.videoId=lib.status.videoId++; game.broadcastAll(function(player,id,cards){ @@ -1662,7 +1945,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ direct:true, //priority:-10, filter:function (event){ - return event.num>0; + return event.num>0&&!event.numFixed; }, content:function (){ "step 0" @@ -1814,6 +2097,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, forced:true, locked:false, + filter:function(event,player){ + return !event.numFixed; + }, content:function (){ "step 0" var cards=get.cards(3); @@ -1836,7 +2122,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(cards.length) player.gain(cards,'gain2'); //game.cardsDiscard(cards2); player.addTempSkill('reluoyi2',{player:'phaseBefore'}); - trigger.cancel(null,null,'notrigger'); + trigger.changeToZero(); } //else game.cardsDiscard(cards); }, @@ -3313,6 +3599,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audioname:['heqi','sunce','gexuan','re_sunben','re_sunce'], trigger:{player:'phaseDrawBegin2'}, forced:true, + filter:function(event,player){ + return !event.numFixed; + }, content:function(){ trigger.num++; }, @@ -4552,11 +4841,28 @@ game.import('character',function(lib,game,ui,get,ai,_status){ rehuashen_info:'游戏开始后,你随机获得三张未加入游戏的武将牌,选一张置于你面前并声明该武将牌的一项技能,你拥有该技能且同时将性别和势力属性变成与该武将相同直到该化身被替换。你的每个准备阶段和结束后,你可以选择一项:①弃置至多两张未展示的化身牌并重新获得等量化身牌;②更换所展示的化身牌或技能。(你不可声明限定技、觉醒技或主公技)。', rexinsheng:'新生', rexinsheng_info:'当你受到1点伤害后,你可以获得一张新的化身牌。', + re_wuguotai:'界吴国太', + re_gaoshun:'界高顺', + re_xusheng:'界徐盛', + reganlu:'甘露', + reganlu_info:'出牌阶段限一次,你可以选择装备区牌数之差不小于X的两名角色或包含你在内的两名角色,然后交换这两名角色装备区内的牌。', + repojun:'破军', + repojun2:'破军', + repojun3:'破军', + repojun_info:'当你于使用【杀】指定目标后,你可以将其的至多X张牌置于其武将牌上,然后其于当前回合结束时获得这些牌。当你因执行【杀】的效果而对一名角色造成伤害时,若该角色的手牌数和装备区内的牌数均不大于你,则此伤害+1。', + rexianzhen:'陷阵', + rexianzhen_info:'出牌阶段限一次,你可以和一名其他角色拼点。若你赢,你本回合内对其使用牌没有次数和距离限制。若你没赢,你本回合内不能使用【杀】。若你以此法失去的拼点牌为【杀】,则你的【杀】不计入本回合的手牌上限。', + rejinjiu:'禁酒', + rejinjiu_info:'锁定技,你的【酒】均视为【杀】。其他角色不能于你的回合内使用【酒】。当你受到酒【杀】的伤害时,你令此伤害-X(X为影响过此【杀】的伤害值的【酒】的数量)', + rejinjiu2:'禁酒', + rejinjiu3:'禁酒', + refresh_standard:'界限突破·标', refresh_feng:'界限突破·风', refresh_huo:'界限突破·火', refresh_lin:'界限突破·林', refresh_shan:'界限突破·山', + refresh_yijiang:'界限突破·将', }, }; }); diff --git a/character/shenhua.js b/character/shenhua.js index 782f71fb1..88c968e4b 100755 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -272,11 +272,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return { card:links[0], filterCard:true, + position:'h', filterTarget:function(card,player,target){ return target.countDiscardableCards(player,'ej')>0; }, delay:false, - audio:'drlt_zhengrong', + audio:'drlt_qingce', content:lib.skill.qingce.contentx, ai:{ result:{ @@ -293,7 +294,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, prompt:function(links,player){ - return '选择弃置一张牌,获得'+get.translation(links[0])+'并弃置一名角色装备区或判定区内的一张牌'; + return '选择弃置一手张牌,获得'+get.translation(links[0])+'并弃置一名角色装备区或判定区内的一张牌'; }, }, contentx:function(){ @@ -793,6 +794,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player:'phaseDrawBegin2' }, forced:true, + filter:function(event,player){ + return !event.numFixed; + }, content:function(){ trigger.num=game.countGroup(); }, @@ -1130,8 +1134,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function (){ 'step 0' player.chooseCard(get.prompt2('kongsheng'),'he',[1,player.countCards('he')]).set('ai',function(card){ - if(card.name=='shan'||card.name=='du'||!player.hasUseTarget(card)) return 1; - return 5-get.value(card); + if(get.position(card)=='e') return 1-get.value(card); + if(card.name=='shan'||card.name=='du'||!player.hasValueTarget(card)) return 1; + return 4-get.value(card); }); 'step 1' if(result.bool){ @@ -1146,7 +1151,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, }, + kongsheng_ai:{ai:{reverseOrder:true}}, "kongsheng2":{ + audio:'kongsheng', marktext:"箜", intro:{ content:"cards", @@ -1167,26 +1174,33 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return player.storage.kongsheng2!=undefined&&player.storage.kongsheng2.length>0; }, forced:true, - popup:false, content:function (){ 'step 0' - player.logSkill('kongsheng'); + player.addTempSkill('kongsheng_ai','kongsheng2After'); event.list=[]; for(var i=0;i2||get.attitude(player,event.player)>0) return true; for(var i=0;i3) return true; return false; }, + filter:function(event,player){ + return !event.numFixed; + }, content:function(){ "step 0" player.judge(ui.special); @@ -5432,7 +5452,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(null,null,'notrigger'); + trigger.changeToZero(); } }, shuangxiong2:{ @@ -5512,7 +5532,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ forced:true, firstDo:true, filter:function(event,player){ - return player.hasZhuSkill('xueyi')&&player.countCards('h')>player.hp; + return player.hasZhuSkill('xueyi')&&game.hasPlayer(function(current){ + return current!=player&¤t.group=='qun'; + })&&player.countCards('h')>player.hp; }, content:function(){}, mod:{ @@ -5900,16 +5922,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "step 1" if(result.bool){ player.logSkill(event.name,result.targets); - trigger.untrigger(); trigger.player=result.targets[0]; trigger.player.addSkill('tianxiang2'); player.discard(result.cards[0]); } - else{ - event.finish(); - } - "step 2" - trigger.trigger('damageBegin3'); }, ai:{ maixie_defend:true, @@ -6125,7 +6141,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "step 1" if(result.bool){ player.logSkill(event.name,result.targets); - trigger.untrigger(); trigger.player=result.targets[0]; trigger.player.addSkill('xintianxiang2'); trigger.player.storage.xintianxiang=player; @@ -6134,8 +6149,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else{ event.finish(); } - "step 2" - trigger.trigger('damageBefore'); }, ai:{ maixie_defend:true, diff --git a/character/sp.js b/character/sp.js index 78bd3a9be..3a23212a0 100755 --- a/character/sp.js +++ b/character/sp.js @@ -523,7 +523,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, "rewrite_bagua":{ derivation:"majun", - cardimage:"bagua", + //cardimage:"bagua", fullskin:true, type:"equip", subtype:"equip2", @@ -537,7 +537,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "rewrite_baiyin":{ derivation:"majun", fullskin:true, - cardimage:"baiyin", + //cardimage:"baiyin", type:"equip", subtype:"equip2", filterLose:function(card,player){ @@ -566,7 +566,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, "rewrite_lanyinjia":{ derivation:"majun", - cardimage:"lanyinjia", + //cardimage:"lanyinjia", fullskin:true, type:"equip", subtype:"equip2", @@ -580,7 +580,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, "rewrite_renwang":{ derivation:"majun", - cardimage:"renwang", + //cardimage:"renwang", fullskin:true, type:"equip", subtype:"equip2", @@ -593,7 +593,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, "rewrite_tengjia":{ derivation:"majun", - cardimage:"tengjia", + //cardimage:"tengjia", fullskin:true, type:"equip", subtype:"equip2", @@ -620,7 +620,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, "rewrite_zhuge":{ derivation:"majun", - cardimage:"zhuge", + //cardimage:"zhuge", distance:{ attackFrom:-2, }, @@ -1446,9 +1446,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sibian:{ audio:2, trigger:{player:'phaseDrawBegin1'}, + filter:function(event,player){ + return !event.numFixed; + }, content:function(){ 'step 0' - trigger.cancel(null,null,'notrigger'); + trigger.changeToZero(); event.cards=get.cards(4); game.cardsGotoOrdering(event.cards); player.showCards(event.cards); @@ -1577,77 +1580,45 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xpchijie:{ audio:2, trigger:{ - target:'useCardToTargeted' + player:'damageEnd', }, filter:function(event,player){ - return event.player!=player; - }, - usable:1, - content:function(){ - player.addTempSkill('xpchijie2'); - player.storage.xpchijie2=trigger.card; + if(player.hasSkill('xpchijie4')||!event.card) return false; + var evt=event.getParent('useCard'); + return evt.card==event.card&&evt.player!=player; }, check:function(event,player){ - if(get.tag(event.card,'respondSha')){ - if(player.countCards('h',{name:'sha'})==0){ - return false; - } + var evt=event.getParent('useCard'); + var targets=evt.targets.slice(evt.num+1); + var num=0; + for(var i=0;i0; + return num<-1; }, + content:function(){ + player.addTempSkill('xpchijie4'); + var evt=trigger.getParent('useCard'); + evt.excluded.addArray(evt.targets); + }, + group:'xpchijie2', }, xpchijie2:{ - charlotte:true, - trigger:{ - global:['useCardAfter','damage'], - }, - onremove:true, - forced:true, - silent:true, - popup:false, + trigger:{global:'useCardAfter'}, + audio:'xpchijie', filter:function(event,player){ - return event.card==player.storage.xpchijie2; + return event.targets.contains(player)&&!player.hasSkill('xpchijie4')&&event.cards.filterInD().length>0&&!game.hasPlayer2(function(current){ + return current.getHistory('damage',function(evt){ + return evt.card==event.card; + }).length>0; + }); }, - content:function(){ - if(trigger.name=='damage') player.addTempSkill(player==trigger.player?'xpchijie3':'xpchijie4'); - else{ - if(!player.hasSkill('xpchijie4')&&!player.hasSkill('xpchijie3')){ - var cards=[]; - var cs=trigger.cards; - for(var i=0;i0; }, content:function(){ - trigger.cancel(); + player.addTempSkill('xpchijie4'); + player.gain(trigger.cards.filterInD(),'log','gain2'); }, }, xpchijie4:{}, @@ -1671,8 +1642,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, forced:true, onremove:true, - filter:function(event,player){ - return lib.skill.yinju2.logTarget(event)==player.storage.yinju2; + filter:function(event,player,name){ + if(name=='useCardToPlayered'){ + if(!event.isFirstTarget) return false; + var type=get.type(event.card); + if(type=='equip') return true; + var bool=event.targets.contains(player.storage.yinju2); + return type=='delay'?!bool:bool; + } + return event.player==player.storage.yinju2; }, logTarget:function(event){ return event[event.name=='damage'?'player':'target']; @@ -3219,7 +3197,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return current!=player&¤t.countGainableCards(player,'e')>0; }).ai=function(target){ var num=get.attitude(_status.event.player,target); - if(target.isDamaged()&&target.getEquip('baiyin')&&att>0) return 2*num + if(target.isDamaged()&&target.getEquip('baiyin')&&num>0) return 2*num return -num; }; 'step 1' @@ -5365,6 +5343,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, xinfenyue:{ enable:'phaseUse', + audio:'fenyue', filter:function(event,player){ var num=game.players.length-player.getFriends(true).length; if((player.getStat().skill.xinfenyue||0)>=num) return false; @@ -5415,6 +5394,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, fenyue:{ + audio:2, enable:'phaseUse', filter:function(event,player){ if(!player.countCards('h')) return false; @@ -6730,9 +6710,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:'yongsi1', trigger:{player:'phaseDrawBegin1'}, forced:true, + filter:function(event,player){ + return !event.numFixed; + }, content:function(){ player.draw(game.countGroup()); - trigger.cancel(null,null,'notrigger'); + trigger.changeToZero(); } }, xinyongsi2:{ @@ -7128,10 +7111,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ forced:true, popup:false, content:function(){ - trigger.untrigger(); trigger.player=player.storage.shichou_target; trigger.player.addSkill('shichou4'); - trigger.trigger('damageBegin3'); player.logSkill('shichou2',player.storage.shichou_target); game.delay(0.5); }, @@ -7183,8 +7164,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, zhaolie:{ - trigger:{player:'phaseDrawBegin1'}, + trigger:{player:'phaseDrawBegin2'}, direct:true, + filter:function(event,player){ + return !event.numFixed; + }, content:function(){ 'step 0' player.chooseTarget(get.prompt2('zhaolie'),function(card,player,target){ @@ -7800,9 +7784,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(get.value(hs[i])<=6){ switch(hs[i].number){ case 13:return -1; - case 12:if(player.storage.gushe+num<=8) return -1;break; - case 11:if(player.storage.gushe+num<=7) return -1;break; - default:if(hs[i].number>5&&player.storage.gushe+num<=6) return -1; + case 12:if(player.countMark('gushe')+num<=8) return -1;break; + case 11:if(player.countMark('gushe')+num<=7) return -1;break; + default:if(hs[i].number>5&&player.countMark('gushe')+num<=6) return -1; } } } @@ -7933,7 +7917,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(player.storage.shefu2&&player.storage.shefu2.contains(button.link[2])) return false; return true; }).set('ai',function(button){ - var rand=_status.event.rand*2; + var rand=_status.event.rand; switch(button.link[2]){ case 'sha':return 5+rand[1]; case 'tao':return 4+rand[2]; @@ -7943,10 +7927,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ case 'shunshou':return 3+rand[6]; case 'nanman':return 2+rand[7]; case 'wanjian':return 2+rand[8]; - default:return rand[9]; + default:return rand[0]; } }).set('rand',[Math.random(),Math.random(),Math.random(),Math.random(), - Math.random(),Math.random(),Math.random(),Math.random()],Math.random()); + Math.random(),Math.random(),Math.random(),Math.random(),Math.random()]); 'step 1' if(result.bool){ player.storage.shefu2.push(result.links[0][2]); @@ -8516,7 +8500,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ trigger.num++; - } + }, + ai:{presha:true}, }, jiqiao:{ audio:2, @@ -8915,6 +8900,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, trigger:{player:'phaseDrawBegin1'}, forced:true, + filter:function(event,player){ + return !event.numFixed; + }, check:function(event,player){ var num=game.countPlayer(function(target){ return target.hp==player.hp; @@ -8927,7 +8915,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return num>=3; }, content:function(){ - trigger.cancel(null,null,'notrigger'); + trigger.changeToZero(); var num=game.countPlayer(function(target){ return target.hp==player.hp; }); @@ -9869,7 +9857,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return player.countCards('h')-player.countCards('h',{type:'equip'})<=player.hp; }, filter:function(event,player){ - if(player.storage.tunchu&&player.storage.tunchu.length) return false; + if(!event.numFixed||player.storage.tunchu&&player.storage.tunchu.length) return false; return true; }, content:function(){ @@ -10328,6 +10316,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, trigger:{player:'phaseDrawBegin2'}, frequent:true, + filter:function(event,player){ + return !event.numFixed; + }, content:function(){ trigger.num+=1+Math.floor(player.countCards('e')/2); } @@ -10705,7 +10696,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var evt2=event.getParent('phaseUse'); if(evt2.player!=player) return false; return player.getHistory('useCard',function(evt){ - return ['sha','juedou'].contains(evt.card.name)&&evt.getParent('phaseUse')==2; + return ['sha','juedou'].contains(evt.card.name)&&evt.getParent('phaseUse')==evt2; }).indexOf(event)==0; }, direct:true, @@ -10788,7 +10779,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return nai>=2; }, filter:function(event,player){ - return game.hasPlayer(function(current){ + return !event.numFixed&&game.hasPlayer(function(current){ return current!=player&&get.distance(current,player)<=1; }); }, @@ -10804,7 +10795,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(null,null,'notrigger'); + trigger.changeToZero(); }, mod:{ globalTo:function(from,to,distance){ @@ -10915,8 +10906,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); return '残蚀:是否改为摸'+get.cnNumber(num)+'张牌?'; }, + filter:function(event,player){ + return !event.numFixed; + }, content:function(){ - trigger.cancel(null,null,'notrigger'); + trigger.changeToZero(); var num=game.countPlayer(function(current){ if(player.hasZhuSkill('guiming')&¤t.group=='wu'&¤t!=player) return true; return current.isDamaged(); @@ -12365,7 +12359,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, trigger:{player:'phaseDrawBegin1'}, filter:function(event,player){ - return player.hp==1||player.countCards('h')==0; + return !event.numFixed&&(player.hp==1||player.countCards('h')==0); }, check:function(event,player){ var num=game.countPlayer(function(current){ @@ -12385,7 +12379,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ targets.sort(lib.sort.seat); event.targets=targets; event.num=0; - trigger.cancel(null,null,'notrigger'); + trigger.changeToZero(); player.line(targets,'green'); "step 1" if(num0; + }, content:function(){ "step 0" var check; @@ -13276,15 +13273,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var judge=event.judge(event.player.judging[0]); for(var i=0;ijudge) return true; + if(_status.currentPhase!=player&&judge2==judge&&get.color(cards[i])=='red'&&get.useful(cards[i])<5) return true; } return false; }, content:function(){ "step 0" var target=trigger.player; - player.line(target,'green'); var judge=trigger.judge(target.judging[0]); var attitude=get.attitude(target,player); target.choosePlayerCard('请选择代替判定的牌','he','visible',true,player).set('ai',function(button){ @@ -13498,6 +13494,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, trigger:{player:'phaseDrawBegin2'}, forced:true, + filter:function(event,player){ + return !event.numFixed; + }, content:function(){ trigger.num+=game.countGroup(); } @@ -14375,9 +14374,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ pyzhuren:'铸刃', pyzhuren_info:'出牌阶段限一次,你可以弃置一张手牌。根据此牌的花色点数,你有一定概率打造成功并获得一张武器牌(若打造失败或武器已有则改为摸一张【杀】,花色决定武器名称,点数决定成功率)。此武器牌进入弃牌堆时,将其移出游戏。', pyzhuren_destroy:'铸刃', - pyzhuren_heart:'红锻枪', + pyzhuren_heart:'红缎枪', pyzhuren_heart_info:'每回合限一次,当你使用【杀】造成伤害后,你可以进行判定,若结果为红色,你回复1点体力。', - pyzhuren_diamond:'裂淬刀', + pyzhuren_diamond:'烈淬刀', pyzhuren_diamond_info:'当你使用【杀】对目标角色造成伤害时,你可以弃置一张【杀】或武器牌,令此伤害+1。', pyzhuren_club:'水波剑', pyzhuren_club_info:'当你于出牌阶段使用第一张牌时,若此牌是普通锦囊牌或【杀】,则你可以为此牌增加一个目标。', @@ -14396,10 +14395,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ lskuizhu:'馈珠', lskuizhu_info:'出牌阶段结束时,你可以选择体力值为全场最多的一名其他角色,将手牌摸至与该角色相同(最多摸至五张),然后该角色观看你的手牌,弃置任意张手牌并从观看的牌中获得等量的牌。若其获得的牌大于一张,则你选择一项:移去一个“珠”;或令其对其攻击范围内的一名角色造成1点伤害。', xpchijie:'持节', - xpchijie_info:'每回合限一次,当你成为其他角色使用牌的目标后,你可以获得如下效果:当此牌对其他角色造成伤害时,若此牌已对你造成过伤害,则你防止此伤害;当此牌使用结算完成时,若此牌未造成过伤害,则你可以获得此牌对应的所有实体牌。', - xpchijie3:'持节', + xpchijie_info:'每回合限一次。①当你受到其他角色使用的牌造成的伤害时,你可以令此牌对所有目标无效。②其他角色使用的牌结算完成时,若你是此牌的目标之一且此牌未造成过伤害,则你可以获得此牌对应的所有实体牌。', + xpchijie2:'持节', yinju:'引裾', - yinju_info:'限定技,出牌阶段,你可以选择一名其他角色。若如此做,当你对此角色使用牌时,你摸一张牌;当你即将对其造成伤害时,防止此伤害,然后其回复等量的体力。', + yinju_info:'限定技,出牌阶段,你可以选择一名其他角色。若如此做,当你于此阶段内使用装备牌指定目标或使用延时锦囊牌指定除其外的其他角色为目标或使用其他牌指定其为目标时,你摸一张牌;当你即将对其造成伤害时,防止此伤害,然后其回复等量的体力。', yinju2:'引裾', mouzhu:'谋诛', mouzhu_info:'出牌阶段限一次,你可以令一名有牌的其他角色交给你一张牌。然后若你的手牌数大于其,其选择视为对你使用一张【杀】或【决斗】。', diff --git a/character/standard.js b/character/standard.js index d0a59cdf7..c1328cc5f 100755 --- a/character/standard.js +++ b/character/standard.js @@ -308,6 +308,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, trigger:{player:'phaseDrawBegin1'}, direct:true, + filter:function(event,player){ + return !event.numFixed; + }, content:function(){ "step 0" var check; @@ -327,7 +330,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.bool){ player.logSkill('tuxi',result.targets); player.gainMultiple(result.targets); - trigger.cancel(null,null,'notrigger'); + trigger.changeToZero(); } else{ event.finish(); @@ -350,6 +353,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return get.attitude(player,current)<0&&player.canUse('sha',current); }); }, + filter:function(event,player){ + return !event.numFixed&&event.num>0; + }, content:function(){ player.addTempSkill('luoyi2','phaseJieshuBegin'); trigger.num--; @@ -1812,6 +1818,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audioname:['sp_lvmeng'], trigger:{player:'phaseDrawBegin2'}, frequent:true, + filter:function(event,player){ + return !event.numFixed; + }, content:function(){ trigger.num++; }, diff --git a/character/swd.js b/character/swd.js index 59270d276..e61e14494 100644 --- a/character/swd.js +++ b/character/swd.js @@ -2754,9 +2754,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "step 1" if(result.bool){ trigger.target=player; - trigger.untrigger(); - trigger.trigger('useCardToBefore'); - trigger.trigger('shaBefore'); player.addSkill('hzhenwei2'); game.delay(); } diff --git a/character/tw.js b/character/tw.js index e21fa971d..6ab45182c 100644 --- a/character/tw.js +++ b/character/tw.js @@ -2,7 +2,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return { name:'tw', - connect:false, + connect:true, characterSort:{ tw:{ tw_mobile:['tw_beimihu','nashime'], @@ -26,7 +26,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, card:{ }, - characterFilter:{}, + characterFilter:{ + nashime:function(mode){ + return mode!='guozhan'; + }, + tw_xiahouba:function(mode){ + return mode!='guozhan'; + }, + }, skill:{ twrangyi:{ audio:2, @@ -392,7 +399,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' var choiceList=['令一名其他角色与你各摸一张牌','令自己下个出牌阶段可以多发动一次【外使】']; - if(lib.skill.chijie.filter({},player)) choiceList.push('将自己的势力变更为场上存在的一个其他势力'); + if(lib.skill.chijie.filter&&lib.skill.chijie.filter({},player)) choiceList.push('将自己的势力变更为场上存在的一个其他势力'); player.chooseControl('cancel2').set('prompt',get.prompt('renshe')).set('choiceList',choiceList).set('ai',function(){ if(game.hasPlayer(function(current){ return get.attitude(player,current)>0||current.hasSkillTag('nogain'); diff --git a/character/xinghuoliaoyuan.js b/character/xinghuoliaoyuan.js index 8c271b9c1..8072dd0a8 100755 --- a/character/xinghuoliaoyuan.js +++ b/character/xinghuoliaoyuan.js @@ -955,6 +955,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.give(event.card,result.targets[0],true); } }, + locked:false, + mod:{ + aiOrder:function(player,card,num){ + if(player.isPhaseUsing()&&(!player.storage.counttrigger||!player.storage.counttrigger.xinfu_lianpian||!player.storage.counttrigger.xinfu_lianpian<3)){ + var evt=player.getLastUsed(); + if(evt&&evt.targets&&evt.targets.length&&evt.isPhaseUsing()&&game.hasPlayer(function(current){ + return evt.targets.contains(current)&&player.canUse(card,current)&&get.effect(current,card,player,player)>0; + })){ + return num+10; + } + } + }, + }, + ai:{ + effect:{ + player:function(card,player,target){ + var evt=player.getLastUsed(); + if(evt&&evt.targets.contains(target)&&(!player.storage.counttrigger||!player.storage.counttrigger.xinfu_lianpian||!player.storage.counttrigger.xinfu_lianpian<3)&&player.isPhaseUsing()) return [1.5,0]; + } + }, + }, }, "xinfu_lingren":{ usable:1, @@ -4890,7 +4911,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, filter:function (event,player){ if(!player.storage.xinfu_zhaoxin.length) return false; - return player.inRange(event.player); + return player==event.player||player.inRange(event.player); }, direct:true, content:function (){ @@ -5438,7 +5459,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "xinfu_daigong":"怠攻", "xinfu_daigong_info":"每回合限一次。当你受到伤害时,你可以展示所有手牌,然后令伤害来源选择一项:交给你一张与你所有手牌花色均不相同的一张牌,或防止此伤害。", "xinfu_zhaoxin":"昭心", - "xinfu_zhaoxin_info":"出牌阶段限一次,你可以将任意张手牌置于武将牌上并摸等量的牌,称之为「望」(你至多拥有三张「望」)。你攻击范围内的一名其他角色的摸牌阶段结束后,其可以获得一张由你选择的「望」,然后你可以对其造成1点伤害。", + "xinfu_zhaoxin_info":"出牌阶段限一次,你可以将任意张手牌置于武将牌上并摸等量的牌,称之为「望」(你至多拥有三张「望」)。你或你攻击范围内的一名其他角色的摸牌阶段结束后,其可以获得一张由你选择的「望」,然后你可以对其造成1点伤害。", "zhaoxin_give":"昭心", "zhaoxin_give_info":"", "xinfu_qianchong":"谦冲", diff --git a/character/yijiang.js b/character/yijiang.js index 3a664f326..903b171c5 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -1085,17 +1085,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){ direct:true, content:function(){ 'step 0' + var choiceList=[ + '手牌上限-1且发动【忠鉴】时可以多展示对方的一张牌' + ]; + if(!trigger.numFixed){ + choiceList.push('摸牌阶段多摸两张牌,然后本回合内不能发动【忠鉴】'); + if(trigger.num>0){ + choiceList.unshift('摸牌阶段少摸一张牌,发动【忠鉴】时可以多展示自己的一张牌直到回合结束'); + event.first=true; + } + } var next=player.chooseControl('cancel2'); - next.set('choiceList',[ - '摸牌阶段少摸一张牌,发动【忠鉴】时可以多展示自己的一张牌直到回合结束', - '手牌上限-1且发动【忠鉴】时可以多展示对方的一张牌', - '摸牌阶段多摸两张牌,然后本回合内不能发动【忠鉴】', - ]); + next.set('choiceList',choiceList); next.set('prompt',get.prompt('xincaishi')); next.set('ai',function(){return 2}); 'step 1' if(result.control!='cancel2'){ player.logSkill('xincaishi'); + if(!event.first) result.index++; trigger.num+=(result.index>1?2:(result.index-1)); player.addTempSkill('xincaishi_'+result.index); } @@ -1676,7 +1683,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }, - group:'pindi_clear', + //group:'pindi_clear', check:function(card){ var num=_status.event.player.getStat('skill').pindi||0; return 6+num-get.value(card); @@ -1693,12 +1700,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.storage.pindi_target.push(target); player.storage.pindi_type.push(get.type2(cards[0])); event.num=player.getStat('skill').pindi; - player.chooseControlList([ - '令'+get.translation(target)+'摸'+get.cnNumber(event.num)+'张牌', - '令'+get.translation(target)+'弃置'+get.cnNumber(event.num)+'张牌' - ],function(){ - return _status.event.choice; - }).set('choice',get.attitude(player,target)>0?0:1); + var evt=_status.event.getParent('phase'); + if(evt&&evt.name=='phase'&&!evt.pindi){ + var next=game.createEvent('rerende_clear'); + _status.event.next.remove(next); + evt.after.push(next); + evt.pindi=true; + next.player=player; + next.setContent(lib.skill.pindi_clear.content); + } + player.syncStorage(); + if(target.countCards('he')==0) event._result={index:0}; + else{ + player.chooseControlList([ + '令'+get.translation(target)+'摸'+get.cnNumber(event.num)+'张牌', + '令'+get.translation(target)+'弃置'+get.cnNumber(event.num)+'张牌' + ],function(){ + return _status.event.choice; + }).set('choice',get.attitude(player,target)>0?0:1); + } 'step 1' if(result.index==0){ target.draw(event.num); @@ -1717,7 +1737,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ result:{ target:function(player,target){ var att=get.attitude(player,target); - var num=player.getStat('skill').pindi+1; + var num=(player.getStat('skill').pindi||0)+1; if(att<=0&&target.countCards('he')0&&event.card.name=='sha'&& - _status.currentPhase==event.player&&event.parent.parent.parent.name=='phaseUse'; + return event.card.name=='sha'&&player.countCards('he')>0&&event.player.isPhaseUsing(); }, content:function(){ 'step 0' @@ -7064,8 +7086,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, ai:{ - expose:0.2 - } + unequip_ai:true, + skillTagFilter:function(player,tag,arg){ + if(arg&&arg.name=='sha'&&arg.target.getEquip(2)) return true; + return false; + } + }, }, xinpojun2:{ trigger:{global:'phaseEnd'}, @@ -8864,6 +8890,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, trigger:{player:'phaseDrawBegin1'}, direct:true, + filter:function(event,player){ + return !event.numFixed; + }, content:function(){ "step 0" player.chooseTarget(get.prompt2('xinxuanhuo'),function(card,player,target){ @@ -8880,7 +8909,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); "step 1" if(result.bool){ - trigger.cancel(null,null,'notrigger'); + trigger.changeToZero(); player.logSkill('xinxuanhuo',result.targets); event.target=result.targets[0]; event.target.draw(2); @@ -9418,6 +9447,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, jiushi:{ + audio:'jiushi1', group:['jiushi1','jiushi2','jiushi3'], }, jiushi1:{ @@ -9518,7 +9548,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, jiushi3:{ - audio:2, + audio:'jiushi1', trigger:{player:'damageEnd'}, check:function(event,player){ return player.isTurnedOver(); @@ -9548,10 +9578,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ check:function(event,player){ return player.countCards('h')<=player.maxHp||player.skipList.contains('phaseUse'); }, + filter:function(event,player){ + return !event.numFixed; + }, content:function(){ trigger.num+=game.countGroup(); player.addTempSkill('zishou2'); - }, ai:{ threaten:1.5 @@ -9828,6 +9860,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, trigger:{player:'phaseDrawBegin2'}, direct:true, + filter:function(event,player){ + return !event.numFixed; + }, content:function(){ "step 0" player.chooseControl('jiangchi_less','jiangchi_more','cancel2',function(){ @@ -10157,6 +10192,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{global:'dying'}, //priority:6, audio:2, + audioname:['re_wuguotai'], filter:function(event,player){ return event.player.hp<=0&&event.player.countCards('h')>0; }, diff --git a/game/asset.js b/game/asset.js index fbf8d7ab1..8876a2e6a 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - '1.9.98.2.3', + '1.9.98.3', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -543,6 +543,11 @@ window.noname_asset_list=[ 'audio/die/tw_beimihu.mp3', 'audio/die/yuantanyuanshang.mp3', 'audio/die/shenpei.mp3', + 'audio/die/re_gaoshun.mp3', + 'audio/die/re_wuguotai.mp3', + 'audio/die/re_xusheng.mp3', + 'audio/die/zhangyì.mp3', + 'audio/die/jiakui.mp3', 'audio/skill/anguo1.mp3', 'audio/skill/anguo2.mp3', @@ -2338,6 +2343,22 @@ window.noname_asset_list=[ 'audio/skill/reyingzi_re_sunce2.mp3', 'audio/skill/yinghun_re_sunce1.mp3', 'audio/skill/yinghun_re_sunce2.mp3', + 'audio/skill/buyi_re_wuguotai2.mp3', + 'audio/skill/reganlu1.mp3', + 'audio/skill/reganlu2.mp3', + 'audio/skill/rejinjiu1.mp3', + 'audio/skill/rejinjiu2.mp3', + 'audio/skill/repojun1.mp3', + 'audio/skill/repojun2.mp3', + 'audio/skill/rexianzhen1.mp3', + 'audio/skill/rexianzhen2.mp3', + 'audio/skill/wanlan1.mp3', + 'audio/skill/wanlan2.mp3', + 'audio/skill/zhiyi1.mp3', + 'audio/skill/zhiyi2.mp3', + 'audio/skill/zhongzuo1.mp3', + 'audio/skill/zhongzuo2.mp3', + 'audio/skill/buyi_re_wuguotai1.mp3', 'font/huangcao.ttf', 'font/shousha.ttf', @@ -2813,6 +2834,12 @@ window.noname_asset_list=[ 'image/character/re_sunce.jpg', 'image/character/ol_maliang.jpg', 'image/character/ns_zhangwei.jpg', + 'image/character/jiakui.jpg', + 'image/character/re_gaoshun.jpg', + 'image/character/re_wuguotai.jpg', + 'image/character/re_xusheng.jpg', + 'image/character/zhangyì.jpg', + 'image/character/gz_wuguotai.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', diff --git a/game/game.js b/game/game.js index b432890fa..8bc1db411 100644 --- a/game/game.js +++ b/game/game.js @@ -58,6 +58,10 @@ guojia_emotion:20, zhenji_emotion:20, }, + animate:{ + skill:{}, + card:{}, + }, arenaReady:[], onfree:[], inpile:[], @@ -2566,6 +2570,39 @@ } } }, + cardtempname:{ + name:'视为卡牌名称显示', + intro:'显示强制视为类卡牌(如武魂)等名称的显示方式', + init:'default', + unfrequent:true, + item:{ + default:'纵向', + horizon:'横向', + off:'禁用', + }, + onclick:function(item){ + game.saveConfig('cardtempname',item); + if(!game.me||!game.me.getCards) return; + var hs=game.me.getCards('h'); + for(var i=0;idistance-range2) return false; + if(outrange[i]>distance-range2+1) return false; } else{ var distance=get.distance(player,target,i)+extra; @@ -30300,6 +30353,21 @@ var selectableCards=false; if(range[0]!=range[1]||range[0]>1) auto=false; for(i=0;i主公BOSSAI禁选
',newCharacter); var addSkill=ui.create.div('.add_skill','添加技能
',newCharacter); var list=[]; @@ -49816,7 +49884,7 @@ uiintro.add('
'+get.translation(node.skill,'skill')+'
'); uiintro._place_text=uiintro.add('
'+get.translation(node.skill,'info')+'
'); } - if(node.targets&&node.targets.length){ + if(node.targets&&get.itemtype(node.targets)=='players'){ uiintro.add('
目标
'); uiintro.addSmall(node.targets); } diff --git a/game/update.js b/game/update.js index f1a38127c..ba2fb9210 100644 --- a/game/update.js +++ b/game/update.js @@ -1,40 +1,44 @@ window.noname_update={ - version:'1.9.98.2.4', - update:'1.9.98.2.3', + version:'1.9.98.3', + update:'1.9.98.2.4', changeLog:[ - 'bug修复', + '贾逵,张翼,界一将成名', + '特效接口(只有接口,没有特效)', + 'bug修复', ], files:[ - //'card/extra.js', - //'card/huanlekapai.js', + 'card/extra.js', + 'card/huanlekapai.js', //'card/sp.js', 'card/standard.js', //'card/swd.js', //'card/mtg.js', //'card/guozhan.js', //'card/gwent.js', + 'card/zhenfa.js', //'card/zhulu.js', - //'character/diy.js', + 'character/diy.js', 'character/extra.js', //'character/hearth.js', - //'character/gujian.js', + 'character/gujian.js', //'character/gwent.js', - //'character/mobile.js', - //'character/mtg.js', - //'character/old.js', + 'character/hearth.js', + 'character/mobile.js', + 'character/mtg.js', + 'character/old.js', 'character/refresh.js', 'character/shenhua.js', 'character/sp.js', - //'character/tw.js', + 'character/tw.js', 'character/standard.js', 'character/swd.js', //'character/xianjian.js', 'character/xinghuoliaoyuan.js', - //'character/yijiang.js', + 'character/yijiang.js', //'character/yxs.js', //'extension/boss/extension.js', //'layout/default/layout.css', - 'layout/nova/layout.css', + //'layout/nova/layout.css', //'mode/identity.js', //'mode/doudizhu.js', 'mode/guozhan.js', @@ -50,6 +54,6 @@ window.noname_update={ //'game/config.js', //'game/package.js', //'game/asset.js', - 'game/source.js', + //'game/source.js', ] }; diff --git a/image/character/gz_wuguotai.jpg b/image/character/gz_wuguotai.jpg index 764b295ae..817a88eef 100644 Binary files a/image/character/gz_wuguotai.jpg and b/image/character/gz_wuguotai.jpg differ diff --git a/image/character/jiakui.jpg b/image/character/jiakui.jpg new file mode 100644 index 000000000..0f42e7031 Binary files /dev/null and b/image/character/jiakui.jpg differ diff --git a/image/character/re_gaoshun.jpg b/image/character/re_gaoshun.jpg new file mode 100644 index 000000000..2c2467972 Binary files /dev/null and b/image/character/re_gaoshun.jpg differ diff --git a/image/character/re_wuguotai.jpg b/image/character/re_wuguotai.jpg new file mode 100644 index 000000000..817a88eef Binary files /dev/null and b/image/character/re_wuguotai.jpg differ diff --git a/image/character/re_xusheng.jpg b/image/character/re_xusheng.jpg new file mode 100644 index 000000000..20ef26616 Binary files /dev/null and b/image/character/re_xusheng.jpg differ diff --git a/image/character/zhangyì.jpg b/image/character/zhangyì.jpg new file mode 100644 index 000000000..effabee17 Binary files /dev/null and b/image/character/zhangyì.jpg differ diff --git a/mode/boss.js b/mode/boss.js index 1826885d6..d48ab2853 100644 --- a/mode/boss.js +++ b/mode/boss.js @@ -7408,7 +7408,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ unique:true, filter:function(event){ var type=get.type(event.card,'trick'); - return type!='basic'&&event.cards[0]&&event.cards[0]==event.card; + return type!='basic'&&event.card.isCard; }, content:function(){ var cards=get.cards(); diff --git a/mode/guozhan.js b/mode/guozhan.js index 40d52a4fe..6f500e091 100644 --- a/mode/guozhan.js +++ b/mode/guozhan.js @@ -1383,8 +1383,13 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ filterTarget:function(card,player,target){ return target!=player&&target.identity!='unknown'; }, - ai1:function(card){return 7-get.value(card)}, - //ai2:function(card,player,target){} + ai1:function(card){return 5-get.value(card)}, + ai2:function(target){ + var player=_status.event.player; + var att=get.attitude(player,target); + if(att>0) return 0; + return -(att-1)/target.countCards('h'); + } }).set('forced',true); 'step 2' event.target=result.targets[0]; @@ -1504,10 +1509,9 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ junling4_eff:{ mod:{ - cardEnabled:function(card){if(get.position(card)=='h') return false}, - cardUsable:function(card){if(get.position(card)=='h') return false}, - cardRespondable:function(card){if(get.position(card)=='h') return false}, - cardSavable:function(card){if(get.position(card)=='h') return false}, + cardEnabled2:function(card){ + if(get.position(card)=='h') return false + }, }, mark:true, marktext:'令', @@ -3476,6 +3480,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ if(player.identity=='ye') return true; return target.identity!=player.identity; }, + check:function(card){ + if(card.name=='tao') return 0; + return 5-get.value(card); + }, selectCard:[1,3], prepare:'give', discard:false, @@ -3494,6 +3502,11 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, result:{ player:function(player,target){ + var huoshao=false; + for(var i=0;i