diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 000000000..4bff91aa8 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,15 @@ +{ + "extends": "eslint:recommended", + "env": { + "browser": true, + "node": true, + "es6": true, + "worker": true + }, + "rules": { + "no-console": 0, + "no-unused-vars": 0, + "no-undef": 0, + "no-redeclare": 0 + } +} \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..554a8f377 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db \ No newline at end of file diff --git a/card/extra.js b/card/extra.js index e4de2d2c4..1c3e5e74d 100644 --- a/card/extra.js +++ b/card/extra.js @@ -460,9 +460,9 @@ game.import('card',function(lib,game,ui,get,ai,_status){ if(player.hasSkillTag('unequip',false,card)) return; if(card.name=='nanman'||card.name=='wanjian') return 'zerotarget'; if(card.name=='sha'){ - var equip1=player.getEquip(1); - if(equip1&&equip1.name=='zhuque') return 2; - if(equip1&&equip1.name=='qinggang') return 1; + var equip1=player.getEquip(1); + if(equip1&&equip1.name=='zhuque') return 2; + if(equip1&&equip1.name=='qinggang') return 1; if(!card.nature) return 'zerotarget'; } } diff --git a/card/gujian.js b/card/gujian.js index 5e4187ad1..23b554e12 100644 --- a/card/gujian.js +++ b/card/gujian.js @@ -2,478 +2,478 @@ game.import('card',function(lib,game,ui,get,ai,_status){ return { name:'gujian', - card:{ - luyugeng:{ - fullskin:true, - type:'food', - enable:true, - filterTarget:function(card,player,target){ - return !target.hasSkill('luyugeng'); - }, - //range:{global:1}, - content:function(){ - target.$gain2(cards); - target.storage.luyugeng=card; - target.storage.luyugeng_markcount=2; - target.addSkill('luyugeng'); - }, - ai:{ - order:2, - value:4, - result:{ - target:1 - } - } - }, - jinlianzhu:{ - type:'trick', + card:{ + luyugeng:{ fullskin:true, - filterTarget:true, + type:'food', + enable:true, + filterTarget:function(card,player,target){ + return !target.hasSkill('luyugeng'); + }, + //range:{global:1}, + content:function(){ + target.$gain2(cards); + target.storage.luyugeng=card; + target.storage.luyugeng_markcount=2; + target.addSkill('luyugeng'); + }, + ai:{ + order:2, + value:4, + result:{ + target:1 + } + } + }, + jinlianzhu:{ + type:'trick', + fullskin:true, + filterTarget:true, global:'g_jinlianzhu', - content:function(){ - var evt=event.getParent(3)._trigger; - evt.cancel() - if(evt.source){ - evt.source.draw(); - } - }, - ai:{ - order:1, - value:[5,1], - useful:[6,1], - result:{ - target:function(player,target){ - var evt=_status.event.getTrigger(); - var eff=get.damageEffect(target,evt.source,target,evt.nature); - if(eff>0) return -1; - if(eff<0) return 2; - return 0; - } - } - } - }, - chunbing:{ - fullskin:true, - type:'food', - enable:true, - filterTarget:function(card,player,target){ - return !target.hasSkill('chunbing'); - }, - //range:{global:1}, - content:function(){ - target.$gain2(cards); - target.storage.chunbing=card; - target.storage.chunbing_markcount=5; - target.addSkill('chunbing'); - }, - ai:{ - order:2, - value:4, - result:{ - target:function(player,target){ - var num=target.needsToDiscard(); - if(num){ - if(target==player&&num>1){ - return num; - } - return Math.sqrt(num); - } - return 0; - } - } - } - }, - gudonggeng:{ - fullskin:true, - type:'food', - enable:true, - filterTarget:function(card,player,target){ - return !target.hasSkill('gudonggeng'); - }, - //range:{global:1}, - content:function(){ - target.$gain2(cards); - target.storage.gudonggeng=card; - target.storage.gudonggeng_markcount=3; - target.addSkill('gudonggeng'); - }, - ai:{ - order:2, - value:4, - result:{ - target:function(player,target){ - if(player==target&&!player.hasShan()) return 2; - return 1/Math.max(1,target.hp); - } - } - } - }, - liyutang:{ - fullskin:true, - type:'food', - enable:true, - filterTarget:function(card,player,target){ - return !target.hasSkill('liyutang'); - }, - //range:{global:1}, - content:function(){ - target.$gain2(cards); - target.storage.liyutang=card; - target.storage.liyutang_markcount=2; - target.addSkill('liyutang'); - }, - ai:{ - order:2, - value:4, - result:{ - target:function(player,target){ - if(player==target&&target.isMinHp()) return 2; - if(target.isMinHp()) return 1.5; - return 1/Math.max(1,target.hp); - } - } - } - }, - mizhilianou:{ - fullskin:true, - type:'food', - enable:true, - filterTarget:function(card,player,target){ - return !target.hasSkill('mizhilianou'); - }, - //range:{global:1}, - content:function(){ - target.$gain2(cards); - target.storage.mizhilianou=card; - target.storage.mizhilianou_markcount=4; - target.addSkill('mizhilianou'); - }, - ai:{ - order:2, - value:4, - result:{ - target:function(player,target){ - if(target==player){ - if(target.countCards('he',{suit:'heart'})){ - if(target.isDamaged()) return 1.5; - } - else{ - return 0.2; - } - } - else if(target.isDamaged()){ - return 1; - } - return 0.5; - } - } - } - }, - xiajiao:{ - fullskin:true, - type:'food', - enable:true, - filterTarget:function(card,player,target){ - return !target.hasSkill('xiajiao'); - }, - //range:{global:1}, - content:function(){ - target.$gain2(cards); - target.storage.xiajiao=card; - target.storage.xiajiao_markcount=3; - target.addSkill('xiajiao'); - target.addTempSkill('xiajiao3'); - }, - ai:{ - order:2, - value:5, - result:{ - target:1 - } - } - }, - tanhuadong:{ - fullskin:true, - type:'food', - enable:true, - filterTarget:function(card,player,target){ - return !target.hasSkill('tanhuadong'); - }, - //range:{global:1}, - content:function(){ - target.$gain2(cards); - target.storage.tanhuadong=card; - target.storage.tanhuadong_markcount=3; - target.addSkill('tanhuadong'); - }, - ai:{ - order:2, - value:5, - result:{ - target:1 - } - } - }, - mapodoufu:{ - fullskin:true, - type:'food', - enable:true, - filterTarget:function(card,player,target){ - return !target.hasSkill('mapodoufu'); - }, - //range:{global:1}, - content:function(){ - target.$gain2(cards); - target.storage.mapodoufu=card; - target.storage.mapodoufu_markcount=2; - target.addSkill('mapodoufu'); - }, - ai:{ - order:2, - value:5, - result:{ - target:function(player,target){ - return player==target?2:1; - } - } - } - }, - qingtuan:{ - fullskin:true, - type:'food', - enable:true, - filterTarget:function(card,player,target){ - return !target.hasSkill('qingtuan'); - }, - //range:{global:1}, - content:function(){ - target.$gain2(cards); - target.storage.qingtuan=card; - target.storage.qingtuan_markcount=2; - target.addSkill('qingtuan'); - }, - ai:{ - order:4, - value:4, - result:{ - target:function(player,target){ - if(target==player){ - if(target.hasSha()) return 2; - } - else{ - var nh=target.countCards('h'); - if(nh>=3) return 1; - if(target.hasSha()) return 1; - if(nh&&Math.random()<0.5) return 1; - } - return player.needsToDiscard()?0.2:0; - } - } - } - }, - yougeng:{ - fullskin:true, - type:'food', - enable:true, - filterTarget:function(card,player,target){ - return !target.hasSkill('yougeng'); - }, - //range:{global:1}, - content:function(){ - target.$gain2(cards); - target.storage.yougeng=card; - target.storage.yougeng_markcount=2; - target.addSkill('yougeng'); - }, - ai:{ - order:2, - value:4, - result:{ - target:function(player,target){ - if(target.isHealthy()) return player.needsToDiscard()?0.1:0; - if(target.isMinHp()) return 1.5; - return 1/Math.max(1,target.hp); - } - } - } - }, - molicha:{ - fullskin:true, - type:'food', - enable:true, - filterTarget:function(card,player,target){ - return !target.hasSkill('molicha'); - }, - //range:{global:1}, - content:function(){ - target.$gain2(cards); - target.storage.molicha=card; - target.storage.molicha_markcount=4; - target.addSkill('molicha'); - }, - ai:{ - order:2, - value:4, - result:{ - target:1 - } - } - }, - yuanbaorou:{ - fullskin:true, - type:'food', - enable:true, - filterTarget:function(card,player,target){ - return !target.hasSkill('yuanbaorou'); - }, - //range:{global:1}, - content:function(){ - target.$gain2(cards); - target.storage.yuanbaorou=card; - target.storage.yuanbaorou_markcount=4; - target.addSkill('yuanbaorou'); - }, - ai:{ - order:2, - value:4, - result:{ - target:function(player,target){ - if(target==player){ - if(target.hasSha()) return 2; - } - else{ - var nh=target.countCards('h'); - if(nh>=3) return 1; - if(target.hasSha()) return 1; - if(nh&&Math.random()<0.5) return 1; - } - return player.needsToDiscard()?0.2:0; - } - } - } - }, - heilonglinpian:{ - fullskin:true, - type:'trick', - enable:true, + content:function(){ + var evt=event.getParent(3)._trigger; + evt.cancel() + if(evt.source){ + evt.source.draw(); + } + }, + ai:{ + order:1, + value:[5,1], + useful:[6,1], + result:{ + target:function(player,target){ + var evt=_status.event.getTrigger(); + var eff=get.damageEffect(target,evt.source,target,evt.nature); + if(eff>0) return -1; + if(eff<0) return 2; + return 0; + } + } + } + }, + chunbing:{ + fullskin:true, + type:'food', + enable:true, + filterTarget:function(card,player,target){ + return !target.hasSkill('chunbing'); + }, + //range:{global:1}, + content:function(){ + target.$gain2(cards); + target.storage.chunbing=card; + target.storage.chunbing_markcount=5; + target.addSkill('chunbing'); + }, + ai:{ + order:2, + value:4, + result:{ + target:function(player,target){ + var num=target.needsToDiscard(); + if(num){ + if(target==player&&num>1){ + return num; + } + return Math.sqrt(num); + } + return 0; + } + } + } + }, + gudonggeng:{ + fullskin:true, + type:'food', + enable:true, + filterTarget:function(card,player,target){ + return !target.hasSkill('gudonggeng'); + }, + //range:{global:1}, + content:function(){ + target.$gain2(cards); + target.storage.gudonggeng=card; + target.storage.gudonggeng_markcount=3; + target.addSkill('gudonggeng'); + }, + ai:{ + order:2, + value:4, + result:{ + target:function(player,target){ + if(player==target&&!player.hasShan()) return 2; + return 1/Math.max(1,target.hp); + } + } + } + }, + liyutang:{ + fullskin:true, + type:'food', + enable:true, + filterTarget:function(card,player,target){ + return !target.hasSkill('liyutang'); + }, + //range:{global:1}, + content:function(){ + target.$gain2(cards); + target.storage.liyutang=card; + target.storage.liyutang_markcount=2; + target.addSkill('liyutang'); + }, + ai:{ + order:2, + value:4, + result:{ + target:function(player,target){ + if(player==target&&target.isMinHp()) return 2; + if(target.isMinHp()) return 1.5; + return 1/Math.max(1,target.hp); + } + } + } + }, + mizhilianou:{ + fullskin:true, + type:'food', + enable:true, + filterTarget:function(card,player,target){ + return !target.hasSkill('mizhilianou'); + }, + //range:{global:1}, + content:function(){ + target.$gain2(cards); + target.storage.mizhilianou=card; + target.storage.mizhilianou_markcount=4; + target.addSkill('mizhilianou'); + }, + ai:{ + order:2, + value:4, + result:{ + target:function(player,target){ + if(target==player){ + if(target.countCards('he',{suit:'heart'})){ + if(target.isDamaged()) return 1.5; + } + else{ + return 0.2; + } + } + else if(target.isDamaged()){ + return 1; + } + return 0.5; + } + } + } + }, + xiajiao:{ + fullskin:true, + type:'food', + enable:true, + filterTarget:function(card,player,target){ + return !target.hasSkill('xiajiao'); + }, + //range:{global:1}, + content:function(){ + target.$gain2(cards); + target.storage.xiajiao=card; + target.storage.xiajiao_markcount=3; + target.addSkill('xiajiao'); + target.addTempSkill('xiajiao3'); + }, + ai:{ + order:2, + value:5, + result:{ + target:1 + } + } + }, + tanhuadong:{ + fullskin:true, + type:'food', + enable:true, + filterTarget:function(card,player,target){ + return !target.hasSkill('tanhuadong'); + }, + //range:{global:1}, + content:function(){ + target.$gain2(cards); + target.storage.tanhuadong=card; + target.storage.tanhuadong_markcount=3; + target.addSkill('tanhuadong'); + }, + ai:{ + order:2, + value:5, + result:{ + target:1 + } + } + }, + mapodoufu:{ + fullskin:true, + type:'food', + enable:true, + filterTarget:function(card,player,target){ + return !target.hasSkill('mapodoufu'); + }, + //range:{global:1}, + content:function(){ + target.$gain2(cards); + target.storage.mapodoufu=card; + target.storage.mapodoufu_markcount=2; + target.addSkill('mapodoufu'); + }, + ai:{ + order:2, + value:5, + result:{ + target:function(player,target){ + return player==target?2:1; + } + } + } + }, + qingtuan:{ + fullskin:true, + type:'food', + enable:true, + filterTarget:function(card,player,target){ + return !target.hasSkill('qingtuan'); + }, + //range:{global:1}, + content:function(){ + target.$gain2(cards); + target.storage.qingtuan=card; + target.storage.qingtuan_markcount=2; + target.addSkill('qingtuan'); + }, + ai:{ + order:4, + value:4, + result:{ + target:function(player,target){ + if(target==player){ + if(target.hasSha()) return 2; + } + else{ + var nh=target.countCards('h'); + if(nh>=3) return 1; + if(target.hasSha()) return 1; + if(nh&&Math.random()<0.5) return 1; + } + return player.needsToDiscard()?0.2:0; + } + } + } + }, + yougeng:{ + fullskin:true, + type:'food', + enable:true, + filterTarget:function(card,player,target){ + return !target.hasSkill('yougeng'); + }, + //range:{global:1}, + content:function(){ + target.$gain2(cards); + target.storage.yougeng=card; + target.storage.yougeng_markcount=2; + target.addSkill('yougeng'); + }, + ai:{ + order:2, + value:4, + result:{ + target:function(player,target){ + if(target.isHealthy()) return player.needsToDiscard()?0.1:0; + if(target.isMinHp()) return 1.5; + return 1/Math.max(1,target.hp); + } + } + } + }, + molicha:{ + fullskin:true, + type:'food', + enable:true, + filterTarget:function(card,player,target){ + return !target.hasSkill('molicha'); + }, + //range:{global:1}, + content:function(){ + target.$gain2(cards); + target.storage.molicha=card; + target.storage.molicha_markcount=4; + target.addSkill('molicha'); + }, + ai:{ + order:2, + value:4, + result:{ + target:1 + } + } + }, + yuanbaorou:{ + fullskin:true, + type:'food', + enable:true, + filterTarget:function(card,player,target){ + return !target.hasSkill('yuanbaorou'); + }, + //range:{global:1}, + content:function(){ + target.$gain2(cards); + target.storage.yuanbaorou=card; + target.storage.yuanbaorou_markcount=4; + target.addSkill('yuanbaorou'); + }, + ai:{ + order:2, + value:4, + result:{ + target:function(player,target){ + if(target==player){ + if(target.hasSha()) return 2; + } + else{ + var nh=target.countCards('h'); + if(nh>=3) return 1; + if(target.hasSha()) return 1; + if(nh&&Math.random()<0.5) return 1; + } + return player.needsToDiscard()?0.2:0; + } + } + } + }, + heilonglinpian:{ + fullskin:true, + type:'trick', + enable:true, toself:true, - filterTarget:function(card,player,target){ - return target==player; - }, - selectTarget:-1, - modTarget:true, - content:function(){ - target.changeHujia(); - target.addTempSkill('heilonglinpian',{player:'phaseBegin'}); - }, - ai:{ - value:[6,1], - useful:1, - order:2, - result:{ - target:1 - } - } - }, - mutoumianju:{ - fullskin:true, - type:'equip', - subtype:'equip2', - skills:['mutoumianju_skill'], - ai:{ - equipValue:4 - } - }, - yuheng:{ - fullskin:true, - type:'equip', - subtype:'equip5', - nopower:true, - nomod:true, - unique:true, - skills:['yuheng_skill'], - ai:{ - equipValue:6 - } - }, - yuheng_plus:{ - fullskin:true, - type:'equip', - subtype:'equip5', - nopower:true, - unique:true, - nomod:true, - epic:true, - cardimage:'yuheng', - skills:['yuheng_plus_skill'], - ai:{ - equipValue:7 - } - }, - yuheng_pro:{ - fullskin:true, - type:'equip', - subtype:'equip5', - nopower:true, - unique:true, - nomod:true, - legend:true, - cardimage:'yuheng', - skills:['yuheng_pro_skill'], - ai:{ - equipValue:8 - } - }, - shujinsan:{ - fullskin:true, - type:'basic', - enable:true, - filterTarget:function(card,player,target){ - return target.countCards('he')>0; - }, - content:function(){ - 'step 0' - target.chooseToDiscard('he',[1,target.countCards('he')],'弃置任意张牌并摸等量的牌').ai=function(card){ - return 6-get.value(card); - } - 'step 1' - if(result.bool){ - target.draw(result.cards.length); - } - }, - ai:{ - order:1.5, - value:[4,1], + filterTarget:function(card,player,target){ + return target==player; + }, + selectTarget:-1, + modTarget:true, + content:function(){ + target.changeHujia(); + target.addTempSkill('heilonglinpian',{player:'phaseBegin'}); + }, + ai:{ + value:[6,1], + useful:1, + order:2, + result:{ + target:1 + } + } + }, + mutoumianju:{ + fullskin:true, + type:'equip', + subtype:'equip2', + skills:['mutoumianju_skill'], + ai:{ + equipValue:4 + } + }, + yuheng:{ + fullskin:true, + type:'equip', + subtype:'equip5', + nopower:true, + nomod:true, + unique:true, + skills:['yuheng_skill'], + ai:{ + equipValue:6 + } + }, + yuheng_plus:{ + fullskin:true, + type:'equip', + subtype:'equip5', + nopower:true, + unique:true, + nomod:true, + epic:true, + cardimage:'yuheng', + skills:['yuheng_plus_skill'], + ai:{ + equipValue:7 + } + }, + yuheng_pro:{ + fullskin:true, + type:'equip', + subtype:'equip5', + nopower:true, + unique:true, + nomod:true, + legend:true, + cardimage:'yuheng', + skills:['yuheng_pro_skill'], + ai:{ + equipValue:8 + } + }, + shujinsan:{ + fullskin:true, + type:'basic', + enable:true, + filterTarget:function(card,player,target){ + return target.countCards('he')>0; + }, + content:function(){ + 'step 0' + target.chooseToDiscard('he',[1,target.countCards('he')],'弃置任意张牌并摸等量的牌').ai=function(card){ + return 6-get.value(card); + } + 'step 1' + if(result.bool){ + target.draw(result.cards.length); + } + }, + ai:{ + order:1.5, + value:[4,1], norepeat:1, - result:{ - target:function(player,target){ - if(target==player){ - var cards=player.getCards('he'); - var num=-1; - for(var i=0;i0; }, @@ -523,32 +523,32 @@ game.import('card',function(lib,game,ui,get,ai,_status){ event.finish(); return; } - var rand=Math.random()<0.5; + var rand=Math.random()<0.5; player.chooseCard('请展示一张手牌',true).set('ai',function(){ var num=0; - if(get.color(card)=='red'){ - if(rand) num-=6; - } - else{ - if(!rand) num-=6; - } - var value=get.value(card); - if(value>=8) return -100; + if(get.color(card)=='red'){ + if(rand) num-=6; + } + else{ + if(!rand) num-=6; + } + var value=get.value(card); + if(value>=8) return -100; return num-value; }).prompt2='若与'+get.translation(target)+'展示的牌相同,你弃置展示的牌,'+get.translation(target)+'失去一点体力'; "step 1" event.card1=result.cards[0]; - var rand=Math.random()<0.5; + var rand=Math.random()<0.5; target.chooseCard('请展示一张手牌',true).set('ai',function(card){ - var num=0; - if(get.color(card)=='red'){ - if(rand) num-=6; - } - else{ - if(!rand) num-=6; - } - var value=get.value(card); - if(value>=8) return -100; + var num=0; + if(get.color(card)=='red'){ + if(rand) num-=6; + } + else{ + if(!rand) num-=6; + } + var value=get.value(card); + if(value>=8) return -100; return num-value; }).prompt2='若与'+get.translation(player)+'展示的牌相同,'+get.translation(player)+'弃置展示的牌,你失去一点体力'; "step 2" @@ -571,21 +571,21 @@ game.import('card',function(lib,game,ui,get,ai,_status){ game.addVideo('deletenode',player,get.cardsInfo([clone])); } target.loseHp(); - event.finish(); + event.finish(); event.parent.cancelled=true; } else{ player.$gain2(event.card1); - target.$gain2(event.card2); - game.delay(); + target.$gain2(event.card2); + game.delay(); } ui.arena.classList.remove('thrownhighlight'); game.addVideo('thrownhighlight2'); - "step 4" - // if(cards&&cards.length){ - // player.gain(cards,'gain2'); - // target.addTempSkill('bingpotong'); - // } + "step 4" + // if(cards&&cards.length){ + // player.gain(cards,'gain2'); + // target.addTempSkill('bingpotong'); + // } }, ai:{ basic:{ @@ -617,12 +617,12 @@ game.import('card',function(lib,game,ui,get,ai,_status){ loseHp:1 } } - }, - feibiao:{ - type:'jiguan', + }, + feibiao:{ + type:'jiguan', enable:true, fullskin:true, - wuxieable:true, + wuxieable:true, filterTarget:function(card,player,target){ return get.distance(player,target)>1; }, @@ -656,560 +656,561 @@ game.import('card',function(lib,game,ui,get,ai,_status){ loseHp:1 } } - }, - qiankunbiao:{ - type:'jiguan', + }, + qiankunbiao:{ + type:'jiguan', enable:true, fullskin:true, - wuxieable:true, - filterTarget:function(card,player,target){ - return target!=player&&target.countCards('he')>0; - }, - changeTarget:function(player,targets){ - game.filterPlayer(function(current){ - return get.distance(targets[0],current,'pure')==1&¤t.countCards('he'); - },targets); + wuxieable:true, + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('he')>0; }, - content:function(){ - var he=target.getCards('he'); - if(he.length){ - target.discard(he.randomGet()).delay=false; - } - }, - contentAfter:function(){ - game.delay(0.5); - }, - ai:{ - order:7, - tag:{ - loseCard:1, - discard:1, - }, - wuxie:function(){ - return 0; - }, - result:{ - player:function(player,target){ - return game.countPlayer(function(current){ - if(current==target||(get.distance(target,current,'pure')==1&¤t.countCards('he'))){ - return -get.sgn(get.attitude(player,current)); - } - }); - } - } - } - }, - // wenhuangsan:{ - // type:'jiguan', + changeTarget:function(player,targets){ + game.filterPlayer(function(current){ + return get.distance(targets[0],current,'pure')==1&¤t.countCards('he'); + },targets); + }, + content:function(){ + var he=target.getCards('he'); + if(he.length){ + target.discard(he.randomGet()).delay=false; + } + }, + contentAfter:function(){ + game.delay(0.5); + }, + ai:{ + order:7, + tag:{ + loseCard:1, + discard:1, + }, + wuxie:function(){ + return 0; + }, + result:{ + player:function(player,target){ + return game.countPlayer(function(current){ + if(current==target||(get.distance(target,current,'pure')==1&¤t.countCards('he'))){ + return -get.sgn(get.attitude(player,current)); + } + }); + } + } + } + }, + // wenhuangsan:{ + // type:'jiguan', // enable:true, // fullskin:true, - // }, - // tuhunsha:{ - // type:'jiguan', + // }, + // tuhunsha:{ + // type:'jiguan', // enable:true, // fullskin:true, - // }, - // shenhuofeiya:{ - // type:'jiguan', + // }, + // shenhuofeiya:{ + // type:'jiguan', // enable:true, // fullskin:true, - // }, - mianlijinzhen:{ - type:'jiguan', + // }, + mianlijinzhen:{ + type:'jiguan', enable:true, fullskin:true, - filterTarget:function(card,player,target){ - return target.hp>=player.hp; - }, - content:function(){ - 'step 0' - target.draw(); - 'step 1' + filterTarget:function(card,player,target){ + return target.hp>=player.hp; + }, + content:function(){ + 'step 0' + target.draw(); + 'step 1' target.loseHp(); - }, - ai:{ - order:2, + }, + ai:{ + order:2, value:[5,1], useful:[4,1], - result:{ - target:-1.5 - }, - tag:{ - // damage:1 - } - } - }, - // longxugou:{ - // type:'jiguan', + result:{ + target:-1.5 + }, + tag:{ + // damage:1 + } + } + }, + // longxugou:{ + // type:'jiguan', // enable:true, // fullskin:true, - // }, - liutouge:{ - type:'jiguan', + // }, + liutouge:{ + type:'jiguan', enable:true, fullskin:true, - filterTarget:true, - wuxieable:true, - content:function(){ - if(player.getEnemies().contains(target)){ - target.getDebuff(); - } - else{ - target.getBuff(); - } - }, - ai:{ - order:4, - value:5, - result:{ - player:function(player,target){ - if(get.attitude(player,target)==0) return 0; - return 1; - } - } - } - }, - liufengsan:{ - type:'trick', + filterTarget:true, + wuxieable:true, + content:function(){ + if(player.getEnemies().contains(target)){ + target.getDebuff(); + } + else{ + target.getBuff(); + } + }, + ai:{ + order:4, + value:5, + result:{ + player:function(player,target){ + if(get.attitude(player,target)==0) return 0; + return 1; + } + } + } + }, + liufengsan:{ + type:'trick', enable:true, fullskin:true, - filterTarget:true, - content:function(){ - var list=[]; - for(var i=0;i<2;i++){ - list.push(game.createCard('shan')); - } - target.gain(list,'gain2'); - }, - ai:{ - order:4.5, + filterTarget:true, + content:function(){ + var list=[]; + for(var i=0;i<2;i++){ + list.push(game.createCard('shan')); + } + target.gain(list,'gain2'); + }, + ai:{ + order:4.5, value:[5,1], tag:{ - gain:1 + gain:1, + norepeat:1 }, - result:{ - target:function(player,target){ - if(target==player){ - if(!target.hasShan()) return 2; - var num=target.needsToDiscard(2); - if(num==0) return 1.5; - if(num==1) return 1; - return 0.5; - } - else{ - switch(target.countCards('h')){ - case 0:return 2; - case 1:return 1.5; - case 2:return 1; - default:return 0.5; - } - } - } - } - } - }, - shihuifen:{ - type:'trick', + result:{ + target:function(player,target){ + if(target==player){ + if(!target.hasShan()) return 2; + var num=target.needsToDiscard(2); + if(num==0) return 1.5; + if(num==1) return 1; + return 0.5; + } + else{ + switch(target.countCards('h')){ + case 0:return 2; + case 1:return 1.5; + case 2:return 1; + default:return 0.5; + } + } + } + } + } + }, + shihuifen:{ + type:'trick', fullskin:true, - filterTarget:true, + filterTarget:true, global:'g_shihuifen', - content:function(){ - 'step 0' + content:function(){ + 'step 0' var next=_status.currentPhase.chooseToRespond({name:'shan'}); - next.set('prompt2','否则本回合无法对其他角色使用卡牌'); - 'step 1' - if(!result.bool){ - _status.currentPhase.addTempSkill('shihuifen','phaseUseAfter'); - } - }, - ai:{ - order:1, - value:[5,1], - useful:[5,1], - tag:{ - respond:1, + next.set('prompt2','否则本回合无法对其他角色使用卡牌'); + 'step 1' + if(!result.bool){ + _status.currentPhase.addTempSkill('shihuifen','phaseUseAfter'); + } + }, + ai:{ + order:1, + value:[5,1], + useful:[5,1], + tag:{ + respond:1, respondShan:1, - }, - result:{ - target:function(player,target){ - if(target.countCards('h')>=3||target.needsToDiscard()) return -1.5; - return 0; - } - } - } - }, - }, - skill:{ - luyugeng:{ - mark:'card', - trigger:{player:'phaseBegin'}, - forced:true, - popup:false, - nopop:true, - intro:{ - content:function(storage,player){ - return '准备阶段,你对一名体力值全场最高的随机敌人造成一点雷属性伤害(剩余'+player.storage.luyugeng_markcount+'回合)' - } - }, - content:function(){ - var list=player.getEnemies(); - for(var i=0;i0; - }, - prompt:'将一张红桃牌当桃使用', - check:function(card){return 10-get.value(card)}, - ai:{ - skillTagFilter:function(player){ - return player.countCards('he',{suit:'heart'})>0; - }, - save:true, + }, + result:{ + target:function(player,target){ + if(target.countCards('h')>=3||target.needsToDiscard()) return -1.5; + return 0; + } + } + } + }, + }, + skill:{ + luyugeng:{ + mark:'card', + trigger:{player:'phaseBegin'}, + forced:true, + popup:false, + nopop:true, + intro:{ + content:function(storage,player){ + return '准备阶段,你对一名体力值全场最高的随机敌人造成一点雷属性伤害(剩余'+player.storage.luyugeng_markcount+'回合)' + } + }, + content:function(){ + var list=player.getEnemies(); + for(var i=0;i0; + }, + prompt:'将一张红桃牌当桃使用', + check:function(card){return 10-get.value(card)}, + ai:{ + skillTagFilter:function(player){ + return player.countCards('he',{suit:'heart'})>0; + }, + save:true, respondTao:true, - } - } - } - }, - chunbing:{ - mark:'card', - trigger:{player:'phaseAfter'}, - forced:true, - popup:false, - nopop:true, - intro:{ - content:function(storage,player){ - return '你的手牌上限+1(剩余'+player.storage.chunbing_markcount+'回合)' - } - }, - mod:{ + } + } + } + }, + chunbing:{ + mark:'card', + trigger:{player:'phaseAfter'}, + forced:true, + popup:false, + nopop:true, + intro:{ + content:function(storage,player){ + return '你的手牌上限+1(剩余'+player.storage.chunbing_markcount+'回合)' + } + }, + mod:{ maxHandcard:function(player,num){ return num+1; } }, - content:function(){ - player.storage.chunbing_markcount--; - if(player.storage.chunbing_markcount==0){ - delete player.storage.chunbing; - delete player.storage.chunbing_markcount; - player.removeSkill('chunbing'); - } - else{ - player.updateMarks(); - } - }, - }, - gudonggeng:{ - mark:'card', - trigger:{player:'phaseBegin'}, - forced:true, - popup:false, - nopop:true, - intro:{ - content:function(storage,player){ - return '当你下一次受到杀造成的伤害时,令伤害-1(剩余'+player.storage.gudonggeng_markcount+'回合)' - } - }, - content:function(){ - player.storage.gudonggeng_markcount--; - if(player.storage.gudonggeng_markcount==0){ - delete player.storage.gudonggeng; - delete player.storage.gudonggeng_markcount; - player.removeSkill('gudonggeng'); - } - else{ - player.updateMarks(); - } - }, - group:'gudonggeng_damage', - subSkill:{ - damage:{ - trigger:{player:'damageBegin'}, - filter:function(event,player){ - return event.card&&event.card.name=='sha'&&event.num>0; - }, - forced:true, - content:function(){ - trigger.num--; + content:function(){ + player.storage.chunbing_markcount--; + if(player.storage.chunbing_markcount==0){ + delete player.storage.chunbing; + delete player.storage.chunbing_markcount; + player.removeSkill('chunbing'); + } + else{ + player.updateMarks(); + } + }, + }, + gudonggeng:{ + mark:'card', + trigger:{player:'phaseBegin'}, + forced:true, + popup:false, + nopop:true, + intro:{ + content:function(storage,player){ + return '当你下一次受到杀造成的伤害时,令伤害-1(剩余'+player.storage.gudonggeng_markcount+'回合)' + } + }, + content:function(){ + player.storage.gudonggeng_markcount--; + if(player.storage.gudonggeng_markcount==0){ + delete player.storage.gudonggeng; + delete player.storage.gudonggeng_markcount; + player.removeSkill('gudonggeng'); + } + else{ + player.updateMarks(); + } + }, + group:'gudonggeng_damage', + subSkill:{ + damage:{ + trigger:{player:'damageBegin'}, + filter:function(event,player){ + return event.card&&event.card.name=='sha'&&event.num>0; + }, + forced:true, + content:function(){ + trigger.num--; delete player.storage.gudonggeng; - delete player.storage.gudonggeng_markcount; - player.removeSkill('gudonggeng'); - } - } - }, - ai:{ - effect:{ - target:function(card,player,target){ - if(card.name=='sha'&&get.attitude(player,target)<0) return 0.5; - } - } - } - }, - qingtuan:{ - mark:'card', - trigger:{player:'phaseAfter'}, - forced:true, - popup:false, - nopop:true, - intro:{ - content:function(storage,player){ - return '你在回合内使用首张杀时摸一张牌(剩余'+player.storage.qingtuan_markcount+'回合)' - } - }, - content:function(){ - player.storage.qingtuan_markcount--; - if(player.storage.qingtuan_markcount==0){ - delete player.storage.qingtuan; - delete player.storage.qingtuan_markcount; - player.removeSkill('qingtuan'); - } - else{ - player.updateMarks(); - } - }, - group:'qingtuan_draw', - subSkill:{ - draw:{ - trigger:{player:'useCard'}, - filter:function(event,player){ - return event.card.name=='sha'&&_status.currentPhase==player; - }, - usable:1, - forced:true, - content:function(){ - player.draw(); - } - } - } - }, - liyutang:{ - mark:'card', - trigger:{player:'phaseEnd'}, - forced:true, - popup:false, - nopop:true, - intro:{ - content:function(storage,player){ - return '结束阶段,若你的体力值为全场最少或之一,你获得一点护甲(剩余'+player.storage.liyutang_markcount+'回合)' - } - }, - content:function(){ - if(player.isMinHp()){ - player.logSkill('liyutang'); - player.changeHujia(); - } - player.storage.liyutang_markcount--; - if(player.storage.liyutang_markcount==0){ - delete player.storage.liyutang; - delete player.storage.liyutang_markcount; - player.removeSkill('liyutang'); - } - else{ - player.updateMarks(); - } - }, - }, - yougeng:{ - mark:'card', - trigger:{player:'phaseBegin'}, - forced:true, - popup:false, - nopop:true, - intro:{ - content:function(storage,player){ - return '准备阶段,若你的体力值为全场最少或之一,你回复一点体力(剩余'+player.storage.yougeng_markcount+'回合)' - } - }, - content:function(){ - if(player.isDamaged()&&player.isMinHp()){ - player.logSkill('yougeng'); - player.recover(); - } - player.storage.yougeng_markcount--; - if(player.storage.yougeng_markcount==0){ - delete player.storage.yougeng; - delete player.storage.yougeng_markcount; - player.removeSkill('yougeng'); - } - else{ - player.updateMarks(); - } - }, - }, - molicha:{ - mark:'card', - trigger:{player:'phaseAfter'}, - forced:true, - popup:false, - nopop:true, - intro:{ - content:function(storage,player){ - return '你不能成为其他角色的黑色牌的目标(剩余'+player.storage.molicha_markcount+'回合)' - } - }, - mod:{ + delete player.storage.gudonggeng_markcount; + player.removeSkill('gudonggeng'); + } + } + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(card.name=='sha'&&get.attitude(player,target)<0) return 0.5; + } + } + } + }, + qingtuan:{ + mark:'card', + trigger:{player:'phaseAfter'}, + forced:true, + popup:false, + nopop:true, + intro:{ + content:function(storage,player){ + return '你在回合内使用首张杀时摸一张牌(剩余'+player.storage.qingtuan_markcount+'回合)' + } + }, + content:function(){ + player.storage.qingtuan_markcount--; + if(player.storage.qingtuan_markcount==0){ + delete player.storage.qingtuan; + delete player.storage.qingtuan_markcount; + player.removeSkill('qingtuan'); + } + else{ + player.updateMarks(); + } + }, + group:'qingtuan_draw', + subSkill:{ + draw:{ + trigger:{player:'useCard'}, + filter:function(event,player){ + return event.card.name=='sha'&&_status.currentPhase==player; + }, + usable:1, + forced:true, + content:function(){ + player.draw(); + } + } + } + }, + liyutang:{ + mark:'card', + trigger:{player:'phaseEnd'}, + forced:true, + popup:false, + nopop:true, + intro:{ + content:function(storage,player){ + return '结束阶段,若你的体力值为全场最少或之一,你获得一点护甲(剩余'+player.storage.liyutang_markcount+'回合)' + } + }, + content:function(){ + if(player.isMinHp()){ + player.logSkill('liyutang'); + player.changeHujia(); + } + player.storage.liyutang_markcount--; + if(player.storage.liyutang_markcount==0){ + delete player.storage.liyutang; + delete player.storage.liyutang_markcount; + player.removeSkill('liyutang'); + } + else{ + player.updateMarks(); + } + }, + }, + yougeng:{ + mark:'card', + trigger:{player:'phaseBegin'}, + forced:true, + popup:false, + nopop:true, + intro:{ + content:function(storage,player){ + return '准备阶段,若你的体力值为全场最少或之一,你回复一点体力(剩余'+player.storage.yougeng_markcount+'回合)' + } + }, + content:function(){ + if(player.isDamaged()&&player.isMinHp()){ + player.logSkill('yougeng'); + player.recover(); + } + player.storage.yougeng_markcount--; + if(player.storage.yougeng_markcount==0){ + delete player.storage.yougeng; + delete player.storage.yougeng_markcount; + player.removeSkill('yougeng'); + } + else{ + player.updateMarks(); + } + }, + }, + molicha:{ + mark:'card', + trigger:{player:'phaseAfter'}, + forced:true, + popup:false, + nopop:true, + intro:{ + content:function(storage,player){ + return '你不能成为其他角色的黑色牌的目标(剩余'+player.storage.molicha_markcount+'回合)' + } + }, + mod:{ targetEnabled:function(card,player,target){ if(player!=target&&get.color(card)=='black'){ return false; } } }, - content:function(){ - player.storage.molicha_markcount--; - if(player.storage.molicha_markcount==0){ - delete player.storage.molicha; - delete player.storage.molicha_markcount; - player.removeSkill('molicha'); + content:function(){ + player.storage.molicha_markcount--; + if(player.storage.molicha_markcount==0){ + delete player.storage.molicha; + delete player.storage.molicha_markcount; + player.removeSkill('molicha'); player.logSkill('molicha'); - } - else{ - player.updateMarks(); - } - } - }, - yuanbaorou:{ - mark:'card', - trigger:{player:'phaseAfter'}, - forced:true, - popup:false, - nopop:true, - intro:{ - content:function(storage,player){ - return '你在出牌阶段可以额外使用一张杀(剩余'+player.storage.yuanbaorou_markcount+'回合)' - } - }, - mod:{ - cardUsable:function(card,player,num){ + } + else{ + player.updateMarks(); + } + } + }, + yuanbaorou:{ + mark:'card', + trigger:{player:'phaseAfter'}, + forced:true, + popup:false, + nopop:true, + intro:{ + content:function(storage,player){ + return '你在出牌阶段可以额外使用一张杀(剩余'+player.storage.yuanbaorou_markcount+'回合)' + } + }, + mod:{ + cardUsable:function(card,player,num){ if(card.name=='sha') return num+1; } }, - content:function(){ - player.storage.yuanbaorou_markcount--; - if(player.storage.yuanbaorou_markcount==0){ - delete player.storage.yuanbaorou; - delete player.storage.yuanbaorou_markcount; - player.removeSkill('yuanbaorou'); - } - else{ - player.updateMarks(); - } - }, - }, - tanhuadong:{ - mark:'card', - trigger:{player:'phaseEnd'}, - forced:true, - popup:false, - nopop:true, - intro:{ - content:function(storage,player){ - return '出牌阶段结束时,你摸一张牌(剩余'+player.storage.tanhuadong_markcount+'回合)' - } - }, - content:function(){ - player.storage.tanhuadong_markcount--; - if(player.storage.tanhuadong_markcount==0){ - delete player.storage.tanhuadong; - delete player.storage.tanhuadong_markcount; - player.removeSkill('tanhuadong'); - } - else{ - player.updateMarks(); - } - }, + content:function(){ + player.storage.yuanbaorou_markcount--; + if(player.storage.yuanbaorou_markcount==0){ + delete player.storage.yuanbaorou; + delete player.storage.yuanbaorou_markcount; + player.removeSkill('yuanbaorou'); + } + else{ + player.updateMarks(); + } + }, + }, + tanhuadong:{ + mark:'card', + trigger:{player:'phaseEnd'}, + forced:true, + popup:false, + nopop:true, + intro:{ + content:function(storage,player){ + return '出牌阶段结束时,你摸一张牌(剩余'+player.storage.tanhuadong_markcount+'回合)' + } + }, + content:function(){ + player.storage.tanhuadong_markcount--; + if(player.storage.tanhuadong_markcount==0){ + delete player.storage.tanhuadong; + delete player.storage.tanhuadong_markcount; + player.removeSkill('tanhuadong'); + } + else{ + player.updateMarks(); + } + }, group:'tanhuadong_draw', subSkill:{ draw:{ @@ -1220,74 +1221,74 @@ game.import('card',function(lib,game,ui,get,ai,_status){ } } } - }, - mapodoufu:{ - mark:'card', - trigger:{player:'phaseEnd'}, - forced:true, - popup:false, - nopop:true, - intro:{ - content:function(storage,player){ - return '结束阶段,你随机弃置一名随机敌人的一张随机牌(剩余'+player.storage.mapodoufu_markcount+'回合)' - } - }, - content:function(){ - var list=player.getEnemies(); - for(var i=0;i=3){ - card.init([card.suit,card.number,'yuheng_plus',card.nature]); - player.addTempSkill('yuheng_plus_temp'); - } - } - }, - ai:{ - order:9, - result:{ - player:1 - } - } - }, - yuheng_plus_temp:{}, - yuheng_plus_skill:{ + 'step 1' + var card=player.getEquip('yuheng'); + if(card){ + if(typeof card.storage.yuheng!='number'){ + card.storage.yuheng=1; + } + else{ + card.storage.yuheng++; + } + if(card.storage.yuheng>=3){ + card.init([card.suit,card.number,'yuheng_plus',card.nature]); + player.addTempSkill('yuheng_plus_temp'); + } + } + }, + ai:{ + order:9, + result:{ + player:1 + } + } + }, + yuheng_plus_temp:{}, + yuheng_plus_skill:{ enable:'phaseUse', - usable:1, + usable:1, filterCard:{color:'black'}, check:function(card){ return 8-get.value(card); }, - filter:function(event,player){ - // if(player.hasSkill('yuheng_plus_temp')) return false; + filter:function(event,player){ + // if(player.hasSkill('yuheng_plus_temp')) return false; if(!player.countCards('h',{color:'black'})) return false; var enemies=player.getEnemies(); for(var i=0;i=7){ - card.init([card.suit,card.number,'yuheng_pro',card.nature]); - } - } - }, - ai:{ - order:9, - result:{ - player:1 - } - } - }, - yuheng_pro_skill:{ + if(card){ + if(typeof card.storage.yuheng!='number'){ + card.storage.yuheng=1; + } + else{ + card.storage.yuheng++; + } + if(card.storage.yuheng>=7){ + card.init([card.suit,card.number,'yuheng_pro',card.nature]); + } + } + }, + ai:{ + order:9, + result:{ + player:1 + } + } + }, + yuheng_pro_skill:{ enable:'phaseUse', filterCard:{color:'black'}, check:function(card){ @@ -1425,7 +1426,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ } return false; }, - content:function(){ + content:function(){ var enemies=player.getEnemies(); var list=[]; for(var i=0;i=3){ - card.init([card.suit,card.number,'yuheng_plus',card.nature]); - player.addTempSkill('yuheng_plus_temp'); - } - } - }, - ai:{ - order:9, - result:{ - player:1 - } - } - }, - shihuifen:{ - mark:true, - intro:{ - content:'使用卡牌无法指定其他角色为目标' - }, - mod:{ + 'step 1' + var card=player.getEquip('yuheng'); + if(card){ + if(typeof card.storage.yuheng!='number'){ + card.storage.yuheng=1; + } + else{ + card.storage.yuheng++; + } + if(card.storage.yuheng>=3){ + card.init([card.suit,card.number,'yuheng_plus',card.nature]); + player.addTempSkill('yuheng_plus_temp'); + } + } + }, + ai:{ + order:9, + result:{ + player:1 + } + } + }, + shihuifen:{ + mark:true, + intro:{ + content:'使用卡牌无法指定其他角色为目标' + }, + mod:{ playerEnabled:function(card,player,target){ - if(player!=target) return false; - } - } - }, - g_shihuifen:{ + if(player!=target) return false; + } + } + }, + g_shihuifen:{ trigger:{global:'phaseUseBegin'}, direct:true, filter:function(event,player){ - if(event.player.hasSkill('shihuifen')) return false; + if(event.player.hasSkill('shihuifen')) return false; if(event.player==player) return false; if(!lib.filter.targetEnabled({name:'shihuifen'},player,event.player)) return false; return player.hasCard('shihuifen')||player.hasSkillTag('shihuifen'); @@ -1484,11 +1485,11 @@ game.import('card',function(lib,game,ui,get,ai,_status){ content:function(){ player.chooseToUse(get.prompt('shihuifen',trigger.player).replace(/发动/,'使用'),function(card,player){ if(card.name!='shihuifen') return false; - return lib.filter.cardEnabled(card,player,'forceEnable'); + return lib.filter.cardEnabled(card,player,'forceEnable'); },trigger.player,-1).targetRequired=true; } }, - g_jinlianzhu:{ + g_jinlianzhu:{ trigger:{global:'damageBefore'}, direct:true, filter:function(event,player){ @@ -1498,140 +1499,140 @@ game.import('card',function(lib,game,ui,get,ai,_status){ content:function(){ player.chooseToUse(get.prompt('jinlianzhu',trigger.player).replace(/发动/,'使用'),function(card,player){ if(card.name!='jinlianzhu') return false; - return lib.filter.cardEnabled(card,player,'forceEnable'); + return lib.filter.cardEnabled(card,player,'forceEnable'); },trigger.player,-1).targetRequired=true; } }, - }, - cardType:{ - food:0.3 - }, - translate:{ - jinlianzhu:'金莲珠', - jinlianzhu_info:'对一名即将受到伤害的角色使用,防止此伤害,并令伤害来源摸一张牌', - shihuifen:'石灰粉', - shihuifen_info:'在一名其他角色的出牌阶段开始时对其使用,目标需打出一张闪,否则此阶段使用卡牌无法指定其他角色为目标', - liufengsan:'流风散', - liufengsan_info:'出牌阶段对一名角色使用,目标获得两张闪', - liutouge:'六骰格', - liutouge_info:'出牌阶段对一名角色使用,若目标是敌人,对目标施加一个随机的负面效果;否则对目标施加一个随机的正面效果', - // longxugou:'龙须钩', - // longxugou_info:'龙须钩', - mianlijinzhen:'棉里针', - mianlijinzhen_info:'出牌阶段对一名体力值不小于你的角色使用,目标摸一张牌然后失去一点体力', - // shenhuofeiya:'神火飞鸦', - // shenhuofeiya_info:'神火飞鸦', - // tuhunsha:'土魂砂', - // tuhunsha_info:'土魂砂', - // wenhuangsan:'瘟癀伞', - // wenhuangsan_info:'瘟癀伞', - qiankunbiao:'乾坤镖', - qiankunbiao_info:'随机弃置一名其他角色和其相邻角色的一张牌', + }, + cardType:{ + food:0.3 + }, + translate:{ + jinlianzhu:'金莲珠', + jinlianzhu_info:'对一名即将受到伤害的角色使用,防止此伤害,并令伤害来源摸一张牌', + shihuifen:'石灰粉', + shihuifen_info:'在一名其他角色的出牌阶段开始时对其使用,目标需打出一张闪,否则此阶段使用卡牌无法指定其他角色为目标', + liufengsan:'流风散', + liufengsan_info:'出牌阶段对一名角色使用,目标获得两张闪', + liutouge:'六骰格', + liutouge_info:'出牌阶段对一名角色使用,若目标是敌人,对目标施加一个随机的负面效果;否则对目标施加一个随机的正面效果', + // longxugou:'龙须钩', + // longxugou_info:'龙须钩', + mianlijinzhen:'棉里针', + mianlijinzhen_info:'出牌阶段对一名体力值不小于你的角色使用,目标摸一张牌然后失去一点体力', + // shenhuofeiya:'神火飞鸦', + // shenhuofeiya_info:'神火飞鸦', + // tuhunsha:'土魂砂', + // tuhunsha_info:'土魂砂', + // wenhuangsan:'瘟癀伞', + // wenhuangsan_info:'瘟癀伞', + qiankunbiao:'乾坤镖', + qiankunbiao_info:'随机弃置一名其他角色和其相邻角色的一张牌', - bingpotong:'天女散花', - bingpotong_info:'出牌阶段对至多3名角色使用,你与每个目标依次同时展示一张手牌,若颜色相同,你弃置展示的手牌,目标失去一点体力并终止结算', - feibiao:'飞镖', - feibiao_info:'出牌阶段,对一名距离1以外的角色使用,令其弃置一张黑色手牌或流失一点体力', + bingpotong:'天女散花', + bingpotong_info:'出牌阶段对至多3名角色使用,你与每个目标依次同时展示一张手牌,若颜色相同,你弃置展示的手牌,目标失去一点体力并终止结算', + feibiao:'飞镖', + feibiao_info:'出牌阶段,对一名距离1以外的角色使用,令其弃置一张黑色手牌或流失一点体力', - // liuxiaxianniang:'流霞仙酿', - // liuxiaxianniang_info:'流霞仙酿', - yunvyuanshen:'玉女元参', - yunvyuanshen_skill:'玉女元参', - yunvyuanshen_info:'出牌阶段对一名角色使用,目标在下一次进入濒死状态时回复一点体力', - // ziyangdan:'紫阳丹', - // ziyangdan_info:'紫阳丹', - yuheng:'玉衡', - yuheng_plus:'玉衡', - yuheng_pro:'玉衡', - yuheng_skill:'玉衡', - yuheng_plus_skill:'玉衡', - yuheng_pro_skill:'玉衡', - yuheng_info:'出牌阶段限一次,若敌方角色有黑桃手牌,你可以弃置一张黑桃手牌,然后获得一名随机敌方角色的一张随机黑桃手牌(此牌在本局游戏中第三次和第七次发动效果后,分别自动获得一次强化)', - yuheng_plus_info:'由普通玉衡强化得到,将玉衡技能描述中的“弃置一张黑桃手牌”改为“弃置一张黑色手牌”', - yuheng_pro_info:'由普通玉衡二次强化得到,将玉横技能描述中的“弃置一张黑桃手牌”改为“弃置一张黑色手牌”,并去掉使用次数限制', - yuheng_skill_info:'出牌阶段限一次,若敌方角色有黑桃手牌,你可以弃置一张黑桃手牌,然后获得一名随机敌方角色的一张随机黑桃手牌', - yuheng_plus_skill_info:'出牌阶段限一次,若敌方角色有黑桃手牌,你可以弃置一张黑色手牌,然后获得一名随机敌方角色的一张随机黑桃手牌', - yuheng_pro_skill_info:'出牌阶段限,若敌方角色有黑桃手牌,你可以弃置一张黑色手牌,然后获得一名随机敌方角色的一张随机黑桃手牌', - shujinsan:'舒筋散', - shujinsan_info:'出牌阶段对任意角色使用,目标可弃置任意张牌,并摸等量的牌', - mutoumianju:'木头面具', - mutoumianju_info:'出牌阶段限一次,你可以将一张手牌当作杀使用', - mutoumianju_skill:'木杀', - mutoumianju_skill_info:'出牌阶段限一次,你可以将一张手牌当作杀使用', - heilonglinpian:'黑龙鳞片', - heilonglinpian_info:'出牌阶段对自己使用,获得一点护甲,直到下一回合开始,你的防御距离+1', + // liuxiaxianniang:'流霞仙酿', + // liuxiaxianniang_info:'流霞仙酿', + yunvyuanshen:'玉女元参', + yunvyuanshen_skill:'玉女元参', + yunvyuanshen_info:'出牌阶段对一名角色使用,目标在下一次进入濒死状态时回复一点体力', + // ziyangdan:'紫阳丹', + // ziyangdan_info:'紫阳丹', + yuheng:'玉衡', + yuheng_plus:'玉衡', + yuheng_pro:'玉衡', + yuheng_skill:'玉衡', + yuheng_plus_skill:'玉衡', + yuheng_pro_skill:'玉衡', + yuheng_info:'出牌阶段限一次,若敌方角色有黑桃手牌,你可以弃置一张黑桃手牌,然后获得一名随机敌方角色的一张随机黑桃手牌(此牌在本局游戏中第三次和第七次发动效果后,分别自动获得一次强化)', + yuheng_plus_info:'由普通玉衡强化得到,将玉衡技能描述中的“弃置一张黑桃手牌”改为“弃置一张黑色手牌”', + yuheng_pro_info:'由普通玉衡二次强化得到,将玉横技能描述中的“弃置一张黑桃手牌”改为“弃置一张黑色手牌”,并去掉使用次数限制', + yuheng_skill_info:'出牌阶段限一次,若敌方角色有黑桃手牌,你可以弃置一张黑桃手牌,然后获得一名随机敌方角色的一张随机黑桃手牌', + yuheng_plus_skill_info:'出牌阶段限一次,若敌方角色有黑桃手牌,你可以弃置一张黑色手牌,然后获得一名随机敌方角色的一张随机黑桃手牌', + yuheng_pro_skill_info:'出牌阶段限,若敌方角色有黑桃手牌,你可以弃置一张黑色手牌,然后获得一名随机敌方角色的一张随机黑桃手牌', + shujinsan:'舒筋散', + shujinsan_info:'出牌阶段对任意角色使用,目标可弃置任意张牌,并摸等量的牌', + mutoumianju:'木头面具', + mutoumianju_info:'出牌阶段限一次,你可以将一张手牌当作杀使用', + mutoumianju_skill:'木杀', + mutoumianju_skill_info:'出牌阶段限一次,你可以将一张手牌当作杀使用', + heilonglinpian:'黑龙鳞片', + heilonglinpian_info:'出牌阶段对自己使用,获得一点护甲,直到下一回合开始,你的防御距离+1', - food:'食物', - chunbing:'春饼', - chunbing_info:'你的手牌上限+1,持续五回合', - gudonggeng:'骨董羹', - gudonggeng_info:'当你下一次受到杀造成的伤害时,令伤害-1,持续三回合', - yougeng:'酉羹', - yougeng_info:'准备阶段,若你的体力值为全场最少或之一,你回复一点体力,持续两回合', - liyutang:'鲤鱼汤', - liyutang_info:'结束阶段,若你的体力值为全场最少或之一,你获得一点护甲,持续两回合', - mizhilianou:'蜜汁藕', - mizhilianou_info:'你可以将一张红桃牌当作桃使用,持续四回合', - xiajiao:'虾饺', - xiajiao_info:'你在摸牌阶段额外摸一张牌,并在摸牌阶段时弃置一张牌,持续三回合', - tanhuadong:'昙花冻', - tanhuadong_info:'出牌阶段结束时,你摸一张牌,持续三回合', - qingtuan:'青团', - qingtuan_info:'你在回合内使用首张杀时摸一张牌,持续两回合', - luyugeng:'鲈鱼羹', - luyugeng_info:'准备阶段,你对一名体力值全场最高的随机敌人造成一点雷属性伤害,持续两回合', - yuanbaorou:'元宝肉', - yuanbaorou_info:'你在出牌阶段可以额外使用一张杀,持续四回合', - molicha:'茉莉茶', - molicha_info:'你不能成为其他角色的黑色牌的目标,持续四回合', - mapodoufu:'麻婆豆腐', - mapodoufu_info:'结束阶段,你弃置一名随机敌人的一张随机牌,持续两回合', - }, - list:[ - ['spade',2,'tanhuadong'], - ['club',1,'molicha'], - ['club',3,'chunbing'], - ['heart',12,'yougeng'], - ['heart',8,'gudonggeng'], - ['heart',1,'liyutang'], - ['diamond',4,'mizhilianou'], - ['diamond',6,'xiajiao'], - ['spade',3,'qingtuan'], - ['club',11,'luyugeng'], - ['heart',4,'mapodoufu'], - ['spade',8,'yuanbaorou'], + food:'食物', + chunbing:'春饼', + chunbing_info:'你的手牌上限+1,持续五回合', + gudonggeng:'骨董羹', + gudonggeng_info:'当你下一次受到杀造成的伤害时,令伤害-1,持续三回合', + yougeng:'酉羹', + yougeng_info:'准备阶段,若你的体力值为全场最少或之一,你回复一点体力,持续两回合', + liyutang:'鲤鱼汤', + liyutang_info:'结束阶段,若你的体力值为全场最少或之一,你获得一点护甲,持续两回合', + mizhilianou:'蜜汁藕', + mizhilianou_info:'你可以将一张红桃牌当作桃使用,持续四回合', + xiajiao:'虾饺', + xiajiao_info:'你在摸牌阶段额外摸一张牌,并在摸牌阶段时弃置一张牌,持续三回合', + tanhuadong:'昙花冻', + tanhuadong_info:'出牌阶段结束时,你摸一张牌,持续三回合', + qingtuan:'青团', + qingtuan_info:'你在回合内使用首张杀时摸一张牌,持续两回合', + luyugeng:'鲈鱼羹', + luyugeng_info:'准备阶段,你对一名体力值全场最高的随机敌人造成一点雷属性伤害,持续两回合', + yuanbaorou:'元宝肉', + yuanbaorou_info:'你在出牌阶段可以额外使用一张杀,持续四回合', + molicha:'茉莉茶', + molicha_info:'你不能成为其他角色的黑色牌的目标,持续四回合', + mapodoufu:'麻婆豆腐', + mapodoufu_info:'结束阶段,你弃置一名随机敌人的一张随机牌,持续两回合', + }, + list:[ + ['spade',2,'tanhuadong'], + ['club',1,'molicha'], + ['club',3,'chunbing'], + ['heart',12,'yougeng'], + ['heart',8,'gudonggeng'], + ['heart',1,'liyutang'], + ['diamond',4,'mizhilianou'], + ['diamond',6,'xiajiao'], + ['spade',3,'qingtuan'], + ['club',11,'luyugeng'], + ['heart',4,'mapodoufu'], + ['spade',8,'yuanbaorou'], - ['spade',7,'yuheng'], - ['club',4,'mutoumianju'], - ['spade',2,'heilonglinpian'], - ['spade',1,'mianlijinzhen'], - ['heart',13,'yunvyuanshen'], + ['spade',7,'yuheng'], + ['club',4,'mutoumianju'], + ['spade',2,'heilonglinpian'], + ['spade',1,'mianlijinzhen'], + ['heart',13,'yunvyuanshen'], - ['club',8,'feibiao','poison'], - ['diamond',9,'feibiao','poison'], + ['club',8,'feibiao','poison'], + ['diamond',9,'feibiao','poison'], - ['spade',3,'bingpotong','poison'], + ['spade',3,'bingpotong','poison'], ['club',12,'bingpotong','poison'], - ['club',5,'shihuifen'], - ['club',1,'shihuifen'], - ['spade',13,'shihuifen'], + ['club',5,'shihuifen'], + ['club',1,'shihuifen'], + ['spade',13,'shihuifen'], - ['diamond',6,'shujinsan'], - ['spade',2,'shujinsan'], + ['diamond',6,'shujinsan'], + ['spade',2,'shujinsan'], - ['spade',9,'qiankunbiao'], - ['club',13,'qiankunbiao'], + ['spade',9,'qiankunbiao'], + ['club',13,'qiankunbiao'], - ['heart',9,'jinlianzhu'], - ['spade',7,'jinlianzhu'], + ['heart',9,'jinlianzhu'], + ['spade',7,'jinlianzhu'], - ['heart',6,'liutouge'], - ['club',6,'liutouge'], + ['heart',6,'liutouge'], + ['club',6,'liutouge'], - ['club',6,'liufengsan'], - ['club',3,'liufengsan'], + ['club',6,'liufengsan'], + ['club',3,'liufengsan'], - ] + ] }; }); diff --git a/card/guozhan.js b/card/guozhan.js index 17346b091..e7b5ed15b 100644 --- a/card/guozhan.js +++ b/card/guozhan.js @@ -11,7 +11,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ subtype:'equip1', nomod:true, nopower:true, - unique:true, + unique:true, global:'g_feilongduofeng_ai', distance:{attackFrom:-1}, skills:['feilongduofeng','feilongduofeng2'], @@ -37,7 +37,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ subtype:'equip2', nomod:true, nopower:true, - unique:true, + unique:true, global:['g_taipingyaoshu','g_taipingyaoshu_ai'], skills:['taipingyaoshu'], ai:{ diff --git a/card/gwent.js b/card/gwent.js index f4f2fd72e..9f6e27021 100644 --- a/card/gwent.js +++ b/card/gwent.js @@ -451,23 +451,23 @@ game.import('card',function(lib,game,ui,get,ai,_status){ list.push(i); } } - var players=game.players.concat(game.dead); - for(var i=0;i0){ return get.rank(button.link,true); } else{ return -get.rank(button.link,true); } - }; - 'step 1' + }; + 'step 1' event.nametarget=result.links[0]; player.chooseTarget(true,'使用'+get.translation(event.nametarget)+'替换一名角色的武将牌',function(card,player,target){ return !target.isUnseen()&&!target.isMin(); @@ -482,9 +482,9 @@ game.import('card',function(lib,game,ui,get,ai,_status){ 'step 2' var target=result.targets[0]; var hp=target.hp; - target.reinit(target.name,event.nametarget); - target.hp=Math.min(hp+1,target.maxHp); - target.update(); + target.reinit(target.name,event.nametarget); + target.hp=Math.min(hp+1,target.maxHp); + target.update(); player.line(target,'green'); 'step 3' game.triggerEnter(target); @@ -847,9 +847,9 @@ game.import('card',function(lib,game,ui,get,ai,_status){ return true; } }); - if(!list.length){ - list=[cardname]; - } + if(!list.length){ + list=[cardname]; + } hs2.push(game.createCard(list.randomGet())); } var list=get.libCard(function(info){ @@ -872,9 +872,9 @@ game.import('card',function(lib,game,ui,get,ai,_status){ return true; } }); - if(!list.length){ - list=[cardname]; - } + if(!list.length){ + list=[cardname]; + } es2.push(game.createCard(list.randomGet())); } if(es2.length){ @@ -1039,42 +1039,42 @@ game.import('card',function(lib,game,ui,get,ai,_status){ // }, content:function(){ 'step 0' - var list=[]; - for(var i in lib.card){ - if(lib.card[i].mode&&lib.card[i].mode.contains(lib.config.mode)==false) continue; + var list=[]; + for(var i in lib.card){ + if(lib.card[i].mode&&lib.card[i].mode.contains(lib.config.mode)==false) continue; if(lib.card[i].vanish) continue; - if(lib.card[i].type=='delay') list.push([cards[0].suit,cards[0].number,i]); - } - var dialog=ui.create.dialog('卜天术',[list,'vcard']); + if(lib.card[i].type=='delay') list.push([cards[0].suit,cards[0].number,i]); + } + var dialog=ui.create.dialog('卜天术',[list,'vcard']); var bing=target.countCards('h')<=1; - player.chooseButton(dialog,true,function(button){ - if(get.effect(target,{name:button.link[2]},player,player)>0){ + player.chooseButton(dialog,true,function(button){ + if(get.effect(target,{name:button.link[2]},player,player)>0){ if(button.link[2]=='bingliang'){ - if(bing) return 2; - return 0.7; - } - if(button.link[2]=='lebu'){ - return 1; - } - if(button.link[2]=='guiyoujie'){ - return 0.5; - } - if(button.link[2]=='caomu'){ - return 0.3; - } - return 0.2; - } - return 0; - }).filterButton=function(button){ - return !target.hasJudge(button.link[2]); - }; - 'step 1' + if(bing) return 2; + return 0.7; + } + if(button.link[2]=='lebu'){ + return 1; + } + if(button.link[2]=='guiyoujie'){ + return 0.5; + } + if(button.link[2]=='caomu'){ + return 0.3; + } + return 0.2; + } + return 0; + }).filterButton=function(button){ + return !target.hasJudge(button.link[2]); + }; + 'step 1' var card=game.createCard(result.links[0][2]); event.judgecard=card; target.$draw(card); game.delay(0.7); 'step 2' - target.addJudge(event.judgecard); + target.addJudge(event.judgecard); }, ai:{ value:8, @@ -1111,7 +1111,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ // game.delay(2); // }, content:function(){ - var list=[]; + var list=[]; list.push(get.cardPile2('juedou')); list.push(get.cardPile2('huogong')); list.push(get.cardPile2('nanman')); @@ -1195,11 +1195,11 @@ game.import('card',function(lib,game,ui,get,ai,_status){ // }, content:function(){ 'step 0' - var list=[]; - for(var i in lib.card){ + var list=[]; + for(var i in lib.card){ if(lib.card[i].subtype=='spell_bronze') list.push([cards[0].suit,cards[0].number,i]); - } - var dialog=ui.create.dialog('自然馈赠',[list,'vcard']); + } + var dialog=ui.create.dialog('自然馈赠',[list,'vcard']); var rand=get.rand(); var aozu=game.hasPlayer(function(current){ return player.canUse('gw_aozuzhilei',current)&¤t.hp<=3&&get.effect(current,{name:'gw_aozuzhilei'},player,player)>0; @@ -1228,7 +1228,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ var yanzi=game.hasPlayer(function(current){ return get.attitude(player,current)>0&¤t.isMinHandcard(); }); - player.chooseButton(dialog,true,function(button){ + player.chooseButton(dialog,true,function(button){ var name=button.link[2]; switch(name){ case 'gw_ciguhanshuang': @@ -1254,17 +1254,17 @@ game.import('card',function(lib,game,ui,get,ai,_status){ })){ return Math.random(); } - return 0; - }).filterButton=function(button){ + return 0; + }).filterButton=function(button){ var name=button.link[2]; if(!lib.card[name].notarget){ return game.hasPlayer(function(current){ return player.canUse(name,current); }) } - return true; - }; - 'step 1' + return true; + }; + 'step 1' player.chooseUseTarget(game.createCard(result.links[0][2],get.suit(card),get.number(card))); }, ai:{ @@ -1396,10 +1396,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){ filterTarget:function(card,player,target){ return !target.hasSkill('gw_qinpendayu'); }, - changeTarget:function(player,targets){ - game.filterPlayer(function(current){ - return get.distance(targets[0],current,'pure')==1; - },targets); + changeTarget:function(player,targets){ + game.filterPlayer(function(current){ + return get.distance(targets[0],current,'pure')==1; + },targets); }, content:function(){ target.addSkill('gw_qinpendayu'); @@ -1409,17 +1409,17 @@ game.import('card',function(lib,game,ui,get,ai,_status){ useful:[3,1], result:{ player:function(player,target){ - return game.countPlayer(function(current){ + return game.countPlayer(function(current){ if(current.hasSkill('gw_qinpendayu')) return 0; - if(current==target||(get.distance(target,current,'pure')==1)){ - var num=-get.sgn(get.attitude(player,current)); + if(current==target||(get.distance(target,current,'pure')==1)){ + var num=-get.sgn(get.attitude(player,current)); if(current.needsToDiscard()) return num; if(current.needsToDiscard(1)) return 0.7*num; if(current.needsToDiscard(2)) return 0.4*num; return 0.1*num; - } - }); - } + } + }); + } }, order:1.2, } @@ -1432,10 +1432,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){ filterTarget:function(card,player,target){ return !target.hasSkill('gw_birinongwu'); }, - changeTarget:function(player,targets){ - game.filterPlayer(function(current){ - return get.distance(targets[0],current,'pure')==1; - },targets); + changeTarget:function(player,targets){ + game.filterPlayer(function(current){ + return get.distance(targets[0],current,'pure')==1; + },targets); }, content:function(){ target.addSkill('gw_birinongwu'); @@ -1445,13 +1445,13 @@ game.import('card',function(lib,game,ui,get,ai,_status){ useful:[3,1], result:{ player:function(player,target){ - return game.countPlayer(function(current){ + return game.countPlayer(function(current){ if(current.hasSkill('gw_birinongwu')) return 0; - if(current==target||(get.distance(target,current,'pure')==1)){ - return -get.sgn(get.attitude(player,current)); - } - }); - } + if(current==target||(get.distance(target,current,'pure')==1)){ + return -get.sgn(get.attitude(player,current)); + } + }); + } }, order:1.2, } @@ -1464,10 +1464,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){ filterTarget:function(card,player,target){ return !target.hasSkill('gw_ciguhanshuang'); }, - changeTarget:function(player,targets){ - game.filterPlayer(function(current){ - return get.distance(targets[0],current,'pure')==1; - },targets); + changeTarget:function(player,targets){ + game.filterPlayer(function(current){ + return get.distance(targets[0],current,'pure')==1; + },targets); }, content:function(){ target.addSkill('gw_ciguhanshuang'); @@ -1477,13 +1477,13 @@ game.import('card',function(lib,game,ui,get,ai,_status){ useful:[3,1], result:{ player:function(player,target){ - return game.countPlayer(function(current){ + return game.countPlayer(function(current){ if(current.hasSkill('gw_ciguhanshuang')) return 0; - if(current==target||(get.distance(target,current,'pure')==1)){ - return -get.sgn(get.attitude(player,current)); - } - }); - } + if(current==target||(get.distance(target,current,'pure')==1)){ + return -get.sgn(get.attitude(player,current)); + } + }); + } }, order:1.2, } @@ -1927,20 +1927,20 @@ game.import('card',function(lib,game,ui,get,ai,_status){ gw_baobaoshu:{ mark:true, nopop:true, - intro:{ - content:'每使用一张基本牌或锦囊牌,需弃置一张牌' - }, + intro:{ + content:'每使用一张基本牌或锦囊牌,需弃置一张牌' + }, trigger:{player:'useCard'}, - forced:true, - filter:function(event,player){ - if(player.countCards('he')==0) return false; - var type=get.type(event.card,'trick'); - return type=='basic'||type=='trick'; - }, - content:function(){ - if(!event.isMine()) game.delay(0.5); - player.chooseToDiscard(true,'he'); - }, + forced:true, + filter:function(event,player){ + if(player.countCards('he')==0) return false; + var type=get.type(event.card,'trick'); + return type=='basic'||type=='trick'; + }, + content:function(){ + if(!event.isMine()) game.delay(0.5); + player.chooseToDiscard(true,'he'); + }, ai:{ weather:true, effect:{ @@ -1978,41 +1978,41 @@ game.import('card',function(lib,game,ui,get,ai,_status){ } }, gw_youer:{ - trigger:{global:'phaseEnd',player:'dieBegin'}, - forced:true, - audio:false, - mark:true, - intro:{ - content:'cards' - }, - content:function(){ - if(player.storage.gw_youer){ + trigger:{global:'phaseEnd',player:'dieBegin'}, + forced:true, + audio:false, + mark:true, + intro:{ + content:'cards' + }, + content:function(){ + if(player.storage.gw_youer){ if(trigger.name=='phase'){ player.gain(player.storage.gw_youer); } - else{ + else{ player.$throw(player.storage.gw_youer,1000); - for(var i=0;i0; - }, - content:function(){ - trigger.num--; - player.removeSkill('gw_ciguhanshuang'); - }, + intro:{ + content:'下个摸牌阶段摸牌数-1' + }, + filter:function(event){ + return event.num>0; + }, + content:function(){ + trigger.num--; + player.removeSkill('gw_ciguhanshuang'); + }, ai:{ weather:true } diff --git a/card/hearth.js b/card/hearth.js index 8993ac6b0..9dbfc476b 100644 --- a/card/hearth.js +++ b/card/hearth.js @@ -566,7 +566,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ } } } - }, + }, zhiliaobo:{ fullskin:true, enable:true, diff --git a/card/sp.js b/card/sp.js index c67fb4755..d19181c0e 100644 --- a/card/sp.js +++ b/card/sp.js @@ -294,15 +294,15 @@ game.import('card',function(lib,game,ui,get,ai,_status){ selectTarget:-1 }, shengdong:{ - fullskin:true, - enable:function(){ + fullskin:true, + enable:function(){ return game.countPlayer()>2; }, chongzhu:function(){ return game.countPlayer()<=2; }, singleCard:true, - type:'trick', + type:'trick', selectTarget:2, multitarget:true, targetprompt:['给一张牌','得两张牌'], @@ -361,19 +361,22 @@ game.import('card',function(lib,game,ui,get,ai,_status){ } } if(!ok) return 0; - if(ui.selected.targets.length==1) return 2; + if(ui.selected.targets.length==1){ + if(target.hasSkillTag('nogain')) return 0; + return 2; + } if(target.countCards('he')==0) return 0; if(player.hasFriend()) return -1; return 0; } } } - }, - zengbin:{ - fullskin:true, - enable:true, - type:'trick', - filterTarget:true, + }, + zengbin:{ + fullskin:true, + enable:true, + type:'trick', + filterTarget:true, content:function(){ 'step 0' target.draw(3); @@ -411,11 +414,11 @@ game.import('card',function(lib,game,ui,get,ai,_status){ } } } - }, - caomu:{ - fullskin:true, - enable:true, - type:'delay', + }, + caomu:{ + fullskin:true, + enable:true, + type:'delay', filterTarget:function(card,player,target){ return (lib.filter.judge(card,player,target)&&player!=target); }, @@ -460,7 +463,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ } }, } - } + } }, skill:{ lanyinjia:{ @@ -974,22 +977,22 @@ game.import('card',function(lib,game,ui,get,ai,_status){ muniu_skill_info:'出牌阶段限一次,你可以将一张手牌扣置于你装备区里的【木牛流马】下,若如此做,你可以将此装备移动到一名其他角色的装备区里;你可以将此装备牌下的牌如手牌般使用或打出。', du:'毒', du_info:'当你因使用、打出或弃置而失去此牌时,你失去一点体力', - shengdong:'声东击西', + shengdong:'声东击西', shengdong_info:'出牌阶段,对一名其他角色使用。你交给目标角色一张手牌,若如此做,其将两张牌交给另一名由你选择的其他角色(不足则全给,存活角色不超过2时可重铸)', - zengbin:'增兵减灶', - zengbin_info:'出牌阶段,对一名角色使用。目标角色摸三张牌,然后选择一项:1.弃置一张非基本牌;2.弃置两张牌', - caomu:'草木皆兵', - caomu_info:'出牌阶段,对一名其他角色使用。将【草木皆兵】放置于该角色的判定区里,若判定结果不为梅花:摸牌阶段,目标角色少摸一张牌;摸牌阶段结束时,与其距离为1的角色各摸一张牌', + zengbin:'增兵减灶', + zengbin_info:'出牌阶段,对一名角色使用。目标角色摸三张牌,然后选择一项:1.弃置一张非基本牌;2.弃置两张牌', + caomu:'草木皆兵', + caomu_info:'出牌阶段,对一名其他角色使用。将【草木皆兵】放置于该角色的判定区里,若判定结果不为梅花:摸牌阶段,目标角色少摸一张牌;摸牌阶段结束时,与其距离为1的角色各摸一张牌', }, list:[ ['spade',1,'caomu'], ['club',3,'caomu'], ['heart',12,'shengdong',], - ['club',9,'shengdong'], + ['club',9,'shengdong'], ['spade',9,'shengdong'], - ['diamond',4,'zengbin'], - ['heart',6,'zengbin'], - ['spade',7,'zengbin'], + ['diamond',4,'zengbin'], + ['heart',6,'zengbin'], + ['spade',7,'zengbin'], ['spade',3,'du'], ['spade',9,'du'], ['club',3,'du'], diff --git a/card/swd.js b/card/swd.js index 1692a9bab..70e0d04f7 100644 --- a/card/swd.js +++ b/card/swd.js @@ -556,8 +556,8 @@ game.import('card',function(lib,game,ui,get,ai,_status){ target:1 }, order:function(){ - return get.order({name:'sha'})+0.1; - }, + return get.order({name:'sha'})+0.1; + }, } }, xuejibingbao:{ @@ -733,7 +733,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ subtype:'equip5', nomod:true, nopower:true, - unique:true, + unique:true, skills:['donghuangzhong'], ai:{ equipValue:7 @@ -745,7 +745,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ subtype:'equip1', nomod:true, nopower:true, - unique:true, + unique:true, skills:['xuanyuanjian','xuanyuanjian2','xuanyuanjian3'], enable:function(card,player){ return player.hasSkill('xuanyuan')||player.hp>2; @@ -770,7 +770,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ skills:['pangufu'], nomod:true, nopower:true, - unique:true, + unique:true, distance:{attackFrom:-3}, ai:{ equipValue:8 @@ -784,7 +784,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ loseDelay:false, nomod:true, nopower:true, - unique:true, + unique:true, onEquip:function(){ player.markSkill('lianyaohu_skill'); }, @@ -804,7 +804,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ skills:['haotianta'], nomod:true, nopower:true, - unique:true, + unique:true, ai:{ equipValue:7 } @@ -816,7 +816,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ skills:['kongxin'], nomod:true, nopower:true, - unique:true, + unique:true, ai:{ equipValue:6 } @@ -828,7 +828,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ skills:['shennongding'], nomod:true, nopower:true, - unique:true, + unique:true, ai:{ equipValue:6 } @@ -840,7 +840,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ skills:['kongdongyin'], nomod:true, nopower:true, - unique:true, + unique:true, ai:{ equipValue:function(card,player){ if(player.hp==2) return 7; @@ -859,7 +859,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ skills:['kunlunjingc'], nomod:true, nopower:true, - unique:true, + unique:true, ai:{ equipValue:6 } @@ -871,7 +871,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ skills:['nvwashi'], nomod:true, nopower:true, - unique:true, + unique:true, ai:{ equipValue:5 } @@ -2545,8 +2545,8 @@ game.import('card',function(lib,game,ui,get,ai,_status){ }, ai:{ order:function(){ - return get.order({name:'sha'})+0.11; - }, + return get.order({name:'sha'})+0.11; + }, result:{ target:function(player,target){ return get.effect(target,{name:'sha'},player,target); diff --git a/character/diy.js b/character/diy.js index 4d8ca79a9..62faad230 100644 --- a/character/diy.js +++ b/character/diy.js @@ -68,14 +68,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ // ns_lisu:['male','qun',3,[]], // ns_sunhao:['male','qun',3,[]], }, - characterFilter:{ - ns_duangui:function(mode){ - return mode=='identity'&&_status.mode=='normal'; - }, + characterFilter:{ + ns_duangui:function(mode){ + return mode=='identity'&&_status.mode=='normal'; + }, diy_liuyan:function(mode){ return mode!='chess'&&mode!='tafang'; } - }, + }, characterIntro:{ diy_feishi:'字公举,生卒年不详,益州犍为郡南安县(今四川省乐山市)人。刘璋占据益州时,以费诗为绵竹县县令。刘备进攻刘璋夺取益州,费诗举城而降,后受拜督军从事,转任牂牁郡太守,再为州前部司马。', diy_liuyan:'字元海,新兴(今山西忻州北)人,匈奴族,匈奴首领冒顿单于之后[1] ,南匈奴单于于夫罗之孙,左贤王刘豹之子,母呼延氏,十六国时期前赵政权开国皇帝,304年-310年在位。', @@ -122,7 +122,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ skill:{ nsanruo:{ unique:true, - init:function(player){ + init:function(player){ if(!player.node.handcards1.cardMod){ player.node.handcards1.cardMod={}; } @@ -161,8 +161,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(_status.auto) return; if(get.position(card)!='h'||get.owner(card)!=player) return; if(get.info(card).multitarget) return; - if(card.name=='sha'||get.type(card)=='trick') range[1]=game.countPlayer(); - }, + if(card.name=='sha'||get.type(card)=='trick') range[1]=game.countPlayer(); + }, // playerEnabled:function(card,player,target,current){ // if(current==false) return; // var filter=get.info(card).modTarget; @@ -173,7 +173,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ // if(_status.auto) return; // if(get.position(card)!='h'||get.owner(card)!=player) return; // if(get.info(card).multitarget) return; - // if(card.name=='sha'||get.type(card)=='trick') return true; + // if(card.name=='sha'||get.type(card)=='trick') return true; // } }, ai:{ @@ -181,22 +181,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, nskaicheng:{ - enable:'phaseUse', + enable:'phaseUse', usable:1, - zhuSkill:true, + zhuSkill:true, unique:true, - filter:function(event,player){ - if(!player.hasZhuSkill('nskaicheng')) return false; + filter:function(event,player){ + if(!player.hasZhuSkill('nskaicheng')) return false; if(!player.hasCard(function(card){ if(get.info(card).multitarget) return false; return card.name=='sha'||get.type(card)=='trick'; })){ return false; } - return game.hasPlayer(function(current){ - return current!=player&¤t.group=='qun'; - }); - }, + return game.hasPlayer(function(current){ + return current!=player&¤t.group=='qun'; + }); + }, filterCard:function(card){ if(get.info(card).multitarget) return false; return card.name=='sha'||get.type(card)=='trick'; @@ -611,64 +611,64 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ 'step 0' - var list=player.storage.nsbaiming.slice(0); - event.skillai=function(){ - return get.max(list,get.skillRank,'item'); - }; - if(event.isMine()){ - var dialog=ui.create.dialog('forcebutton'); - dialog.add(get.prompt('nsbaiming')); - var clickItem=function(){ - _status.event._result=this.link; - dialog.close(); - game.resume(); - }; - for(var i=0;i
【'+ - translation+'】
'+lib.translate[list[i]+'_info']+'
'); - item.firstChild.addEventListener('click',clickItem); - item.firstChild.link=list[i]; - } - } - dialog.add(ui.create.div('.placeholder')); - event.switchToAuto=function(){ - event._result=event.skillai(); - dialog.close(); - game.resume(); - }; + var list=player.storage.nsbaiming.slice(0); + event.skillai=function(){ + return get.max(list,get.skillRank,'item'); + }; + if(event.isMine()){ + var dialog=ui.create.dialog('forcebutton'); + dialog.add(get.prompt('nsbaiming')); + var clickItem=function(){ + _status.event._result=this.link; + dialog.close(); + game.resume(); + }; + for(var i=0;i
【'+ + translation+'】
'+lib.translate[list[i]+'_info']+'
'); + item.firstChild.addEventListener('click',clickItem); + item.firstChild.link=list[i]; + } + } + dialog.add(ui.create.div('.placeholder')); + event.switchToAuto=function(){ + event._result=event.skillai(); + dialog.close(); + game.resume(); + }; event.confirm=ui.create.confirm('c'); event.custom.replace.confirm=function(){ event._result=null; - dialog.close(); - game.resume(); + dialog.close(); + game.resume(); }; - _status.imchoosing=true; - game.pause(); - } - else{ - event._result=event.skillai(); - } - 'step 1' - _status.imchoosing=false; + _status.imchoosing=true; + game.pause(); + } + else{ + event._result=event.skillai(); + } + 'step 1' + _status.imchoosing=false; if(event.confirm){ event.confirm.close(); } if(typeof result=='string'){ player.logSkill('nsbaiming'); var link=result; - player.addAdditionalSkill('nsbaiming',link); + player.addAdditionalSkill('nsbaiming',link); player.logSkill('nsbaiming'); - player.popup(link); - game.log(player,'获得了技能','【'+get.translation(link)+'】'); - game.delay(); + player.popup(link); + game.log(player,'获得了技能','【'+get.translation(link)+'】'); + game.delay(); player.storage.nsbaiming.remove(link); trigger.nsbaiming=true; } @@ -772,102 +772,102 @@ game.import('character',function(lib,game,ui,get,ai,_status){ subSkill:{ sha:{ mod:{ - cardEnabled:function(card,player){ - if(card.name=='sha'){ - return false; - } - }, - cardUsable:function(card,player){ - if(card.name=='sha'){ - return false; - } - }, - } + cardEnabled:function(card,player){ + if(card.name=='sha'){ + return false; + } + }, + cardUsable:function(card,player){ + if(card.name=='sha'){ + return false; + } + }, + } } } }, nswangfeng:{ - trigger:{global:'judge'}, - filter:function(event,player){ - return player.countCards('he',{color:'red'})>0; - }, - direct:true, - content:function(){ - "step 0" - player.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+ - get.translation(trigger.player.judging[0])+','+get.prompt('guidao'),'he',function(card){ - return get.color(card)=='red'; - }).set('ai',function(card){ - var trigger=_status.event.getTrigger(); - var player=_status.event.player; - var judging=_status.event.judging; - var result=trigger.judge(card)-trigger.judge(judging); - var attitude=get.attitude(player,trigger.player); - if(attitude==0||result==0) return 0; - if(attitude>0){ - return result; - } - else{ - return -result; - } - }).set('judging',trigger.player.judging[0]); - "step 1" - if(result.bool){ - player.respond(result.cards,'highlight'); - } - else{ - event.finish(); - } - "step 2" - if(result.bool){ - player.logSkill('nswangfeng'); - player.$gain2(trigger.player.judging[0]); - player.gain(trigger.player.judging[0]); - trigger.player.judging[0]=result.cards[0]; - if(!get.owner(result.cards[0],'judge')){ - trigger.position.appendChild(result.cards[0]); - } - game.log(trigger.player,'的判定牌改为',result.cards[0]); - } - "step 3" - game.delay(2); - }, - ai:{ - tag:{ - rejudge:1 - } - } - }, + trigger:{global:'judge'}, + filter:function(event,player){ + return player.countCards('he',{color:'red'})>0; + }, + direct:true, + content:function(){ + "step 0" + player.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+ + get.translation(trigger.player.judging[0])+','+get.prompt('guidao'),'he',function(card){ + return get.color(card)=='red'; + }).set('ai',function(card){ + var trigger=_status.event.getTrigger(); + var player=_status.event.player; + var judging=_status.event.judging; + var result=trigger.judge(card)-trigger.judge(judging); + var attitude=get.attitude(player,trigger.player); + if(attitude==0||result==0) return 0; + if(attitude>0){ + return result; + } + else{ + return -result; + } + }).set('judging',trigger.player.judging[0]); + "step 1" + if(result.bool){ + player.respond(result.cards,'highlight'); + } + else{ + event.finish(); + } + "step 2" + if(result.bool){ + player.logSkill('nswangfeng'); + player.$gain2(trigger.player.judging[0]); + player.gain(trigger.player.judging[0]); + trigger.player.judging[0]=result.cards[0]; + if(!get.owner(result.cards[0],'judge')){ + trigger.position.appendChild(result.cards[0]); + } + game.log(trigger.player,'的判定牌改为',result.cards[0]); + } + "step 3" + game.delay(2); + }, + ai:{ + tag:{ + rejudge:1 + } + } + }, nsfuhuo:{ - enable:'phaseUse', - usable:1, - filterCard:true, - filterTarget:function(card,player,target){ - return player!=target&&!target.hasSkill('nsfuhuo2'); - }, - prepare:'throw', - discard:false, - content:function(){ - target.$gain2(cards); - target.storage.nsfuhuo2=cards[0]; - target.addSkill('nsfuhuo2'); - target.storage.nsfuhuo3=player; - ui.special.appendChild(cards[0]); - target.syncStorage('nsfuhuo2'); - }, - check:function(card){ - return 6-get.value(card) - }, - ai:{ - expose:0.1, - order:1, - result:{ - target:function(player,target){ + enable:'phaseUse', + usable:1, + filterCard:true, + filterTarget:function(card,player,target){ + return player!=target&&!target.hasSkill('nsfuhuo2'); + }, + prepare:'throw', + discard:false, + content:function(){ + target.$gain2(cards); + target.storage.nsfuhuo2=cards[0]; + target.addSkill('nsfuhuo2'); + target.storage.nsfuhuo3=player; + ui.special.appendChild(cards[0]); + target.syncStorage('nsfuhuo2'); + }, + check:function(card){ + return 6-get.value(card) + }, + ai:{ + expose:0.1, + order:1, + result:{ + target:function(player,target){ if(target.hasSkillTag('maixie')) return 0; return -1; } - } - }, + } + }, group:['nsfuhuo_die','nsfuhuo_gain'], subSkill:{ die:{ @@ -896,19 +896,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } } - }, - nsfuhuo2:{ - trigger:{player:'respondAfter'}, - forced:true, - priority:10, - mark:'card', + }, + nsfuhuo2:{ + trigger:{player:'respondAfter'}, + forced:true, + priority:10, + mark:'card', popup:false, filter:function(event,player){ return event.card&&event.card.name=='shan'&&player.storage.nsfuhuo3&&player.storage.nsfuhuo3.isIn(); }, - content:function(){ + content:function(){ 'step 0' - player.storage.nsfuhuo3.logSkill('nsfuhuo',player); + player.storage.nsfuhuo3.logSkill('nsfuhuo',player); player.judge(function(card){ var suit=get.suit(card); if(suit=='heart'||suit=='diamond'){ @@ -929,10 +929,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else if(result.suit=='heart'){ player.damage('fire',2,source); } - }, - intro:{ - content:'card' - }, + }, + intro:{ + content:'card' + }, onremove:function(player){ player.storage.nsfuhuo2.discard(); delete player.storage.nsfuhuo2; @@ -941,15 +941,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ai:{ noShan:true } - }, + }, nshunji:{ enable:'phaseUse', - viewAs:{name:'wanjian'}, + viewAs:{name:'wanjian'}, usable:1, delay:0, selectCard:0, - group:['nshunji_damage','nshunji_draw'], - subSkill:{ + group:['nshunji_damage','nshunji_draw'], + subSkill:{ draw:{ trigger:{player:'useCard'}, silent:true, @@ -960,18 +960,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.draw(); } }, - damage:{ - trigger:{global:'damageAfter'}, - silent:true, - filter:function(event){ - return event.getParent(2).skill=='nshunji'; - }, - content:function(){ + damage:{ + trigger:{global:'damageAfter'}, + silent:true, + filter:function(event){ + return event.getParent(2).skill=='nshunji'; + }, + content:function(){ 'step 0' if(player.countCards('he')){ trigger.player.discardPlayerCard(player,'弃置'+get.translation(player)+'的一张牌,或取消并摸一张牌','he').set('boolline',true); } - else{ + else{ trigger.player.draw(); event.finish(); } @@ -979,9 +979,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(!result.bool){ trigger.player.draw(); } - } - } - } + } + } + } }, nsbaquan:{ trigger:{player:'phaseEnd'}, @@ -1144,28 +1144,28 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, nstianji:{ - trigger:{global:'dying'}, - priority:6, - unique:true, + trigger:{global:'dying'}, + priority:6, + unique:true, skillAnimation:true, animationColor:'water', - filter:function(event,player){ - return event.player.hp<=0&&event.player!=player; - }, + filter:function(event,player){ + return event.player.hp<=0&&event.player!=player; + }, logTarget:'player', check:function(event,player){ return get.attitude(player,event.player)>1; }, - content:function(){ + content:function(){ 'step 0' player.awakenSkill('nstianji'); - player.loseMaxHp(); + player.loseMaxHp(); 'step 1' trigger.player.recover(1-trigger.player.hp); 'step 2' trigger.player.gainMaxHp(); - } - }, + } + }, nsbugua:{ group:'nsbugua_use', ai:{ @@ -1387,9 +1387,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, fail:{} }, - ai:{ - threaten:1.4 - } + ai:{ + threaten:1.4 + } }, nsshijun:{ trigger:{source:'damageBegin'}, @@ -1446,9 +1446,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, nscangxi:{ - unique:true, - global:'nscangxi2', - zhuSkill:true, + unique:true, + global:'nscangxi2', + zhuSkill:true, init:function(player){ player.storage.nscangxi=0; }, @@ -1460,40 +1460,40 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return num+player.storage.nscangxi; } } - }, - nscangxi2:{ + }, + nscangxi2:{ trigger:{player:'phaseDiscardEnd'}, - filter:function(event,player){ + filter:function(event,player){ if(!event.cards||event.cards.length<=1) return false; - if(player.group!='wu') return false; - return game.hasPlayer(function(target){ - return player!=target&&target.hasZhuSkill('nscangxi',player); - }); - }, + if(player.group!='wu') return false; + return game.hasPlayer(function(target){ + return player!=target&&target.hasZhuSkill('nscangxi',player); + }); + }, direct:true, - content:function(){ - 'step 0' - var list=game.filterPlayer(function(current){ - return current!=player&¤t.hasZhuSkill('nscangxi',player); - }); + content:function(){ + 'step 0' + var list=game.filterPlayer(function(current){ + return current!=player&¤t.hasZhuSkill('nscangxi',player); + }); list.sortBySeat(); - event.list=list; - 'step 1' - if(event.list.length){ - var current=event.list.shift(); - event.current=current; - player.chooseBool(get.prompt('nscangxi',current)).set('choice',get.attitude(player,current)>0); - } - else{ - event.finish(); - } - 'step 2' - if(result.bool){ - player.logSkill('nscangxi',event.current); - player.judge(function(card){ + event.list=list; + 'step 1' + if(event.list.length){ + var current=event.list.shift(); + event.current=current; + player.chooseBool(get.prompt('nscangxi',current)).set('choice',get.attitude(player,current)>0); + } + else{ + event.finish(); + } + 'step 2' + if(result.bool){ + player.logSkill('nscangxi',event.current); + player.judge(function(card){ return _status.event.att*(get.color(card)=='black'?1:0); }).set('att',get.sgnAttitude(player,event.current)); - } + } else{ event.goto(1); } @@ -1551,8 +1551,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.current.gain(result.links,'gain2'); } event.goto(1); - } - }, + } + }, nswulie:{ trigger:{player:'phaseBegin'}, skillAnimation:true, @@ -1678,19 +1678,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, nsgongjian:{ - trigger:{player:'phaseDiscardEnd'}, - forced:true, - filter:function(event,player){ - if(event.cards&&event.cards.length>0){ - return game.hasPlayer(function(current){ + trigger:{player:'phaseDiscardEnd'}, + forced:true, + filter:function(event,player){ + if(event.cards&&event.cards.length>0){ + return game.hasPlayer(function(current){ return current.hp>player.hp; }); - } - return false; - }, - content:function(){ + } + return false; + }, + content:function(){ 'step 0' - player.chooseTarget('恭俭:将置的牌交给一名体力值大于你的角色',function(card,player,target){ + player.chooseTarget('恭俭:将置的牌交给一名体力值大于你的角色',function(card,player,target){ return target.hp>player.hp; }).set('ai',function(target){ return get.attitude(_status.event.player,target)/Math.sqrt(target.countCards('h')+1); @@ -1700,8 +1700,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.line(result.targets,'green'); result.targets[0].gain(trigger.cards,'gain2'); } - }, - }, + }, + }, nscaijian:{ enable:'phaseUse', usable:1, @@ -1746,30 +1746,30 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, nsdongcha:{ trigger:{player:'damageBefore'}, - forced:true, - priority:15, - filter:function(event,player){ + forced:true, + priority:15, + filter:function(event,player){ if(get.type(event.card,'trick')=='trick'){ if(event.getParent(2).name=='useCard'){ return event.getParent(2).targets.length==1; } return true; } - return false; - }, - content:function(){ - trigger.cancel(); - }, - ai:{ - notrick:true, - effect:{ - target:function(card,player,target,current){ - if(get.type(card)=='trick'&&get.tag(card,'damage')&&!get.tag(card,'multitarget')){ - return 'zeroplayertarget'; - } - } - } - }, + return false; + }, + content:function(){ + trigger.cancel(); + }, + ai:{ + notrick:true, + effect:{ + target:function(card,player,target,current){ + if(get.type(card)=='trick'&&get.tag(card,'damage')&&!get.tag(card,'multitarget')){ + return 'zeroplayertarget'; + } + } + } + }, group:'nsdongcha_cancel', subSkill:{ cancel:{ @@ -1784,22 +1784,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, disable:{ trigger:{target:'useCardToBefore'}, - forced:true, - priority:15, + forced:true, + priority:15, onremove:true, - filter:function(event,player){ - return (event.player==_status.currentPhase&&get.type(event.card,'trick')=='trick'); - }, - content:function(){ - trigger.cancel(); - }, - ai:{ - effect:{ - target:function(card,player,target,current){ - if(get.type(card,'trick')=='trick'&&_status.currentPhase==player) return 'zeroplayertarget'; - } - } - } + filter:function(event,player){ + return (event.player==_status.currentPhase&&get.type(event.card,'trick')=='trick'); + }, + content:function(){ + trigger.cancel(); + }, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(get.type(card,'trick')=='trick'&&_status.currentPhase==player) return 'zeroplayertarget'; + } + } + } } } }, @@ -1833,15 +1833,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, group:'nsjianxiong_damage', ai:{ - effect:{ - player:function(card,player,target){ - if(_status.currentPhase!=player) return; - if(get.tag(card,'damage')&&!player.needsToDiscard(1)&&target.hp>1){ - return 'zeroplayertarget'; - } - } - } - } + effect:{ + player:function(card,player,target){ + if(_status.currentPhase!=player) return; + if(get.tag(card,'damage')&&!player.needsToDiscard(1)&&target.hp>1){ + return 'zeroplayertarget'; + } + } + } + } }, nsxionglue:{ enable:'phaseUse', @@ -1856,20 +1856,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' var list=get.inpile('trick'); - list=list.randomGets(3); - for(var i=0;i
【'+ - translation+'】
'+lib.translate[list[i]+'_info']+'
'); - item.firstChild.addEventListener('click',clickItem); - item.firstChild.link=list[i]; - } - } - dialog.add(ui.create.div('.placeholder')); - return dialog; - }, - content:function(){ + group:'tianshu_remove', + createDialog:function(player,target,onlylist){ + var names=[]; + var list=[]; + if(target.name&&!target.isUnseen(0)) names.add(target.name); + if(target.name1&&!target.isUnseen(0)) names.add(target.name1); + if(target.name2&&!target.isUnseen(1)) names.add(target.name2); + var pss=player.getSkills(); + for(var i=0;i
【'+ + translation+'】
'+lib.translate[list[i]+'_info']+'
'); + item.firstChild.addEventListener('click',clickItem); + item.firstChild.link=list[i]; + } + } + dialog.add(ui.create.div('.placeholder')); + return dialog; + }, + content:function(){ 'step 0' player.chooseTarget(get.prompt2('nsyaowang'),function(card,player,target){ - var names=[]; - if(target.name&&!target.isUnseen(0)) names.add(target.name); - if(target.name1&&!target.isUnseen(0)) names.add(target.name1); - if(target.name2&&!target.isUnseen(1)) names.add(target.name2); - var pss=player.getSkills(); - for(var i=0;i0) return Math.random(); return 0; }); - 'step 1' + 'step 1' if(result.bool){ event.target=result.targets[0]; player.logSkill('nsyaowang',event.target); @@ -2006,26 +2006,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.finish(); } 'step 2' - event.skillai=function(list){ - return get.max(list,get.skillRank,'item'); - }; - if(event.isMine()){ - event.dialog=lib.skill.tianshu.createDialog(player,target); - event.switchToAuto=function(){ - event._result=event.skillai(event.list); - game.resume(); - }; - _status.imchoosing=true; - game.pause(); - } - else{ - event._result=event.skillai(lib.skill.nsyaowang.createDialog(player,target,true)); - } - 'step 3' - _status.imchoosing=false; - if(event.dialog){ - event.dialog.close(); - } + event.skillai=function(list){ + return get.max(list,get.skillRank,'item'); + }; + if(event.isMine()){ + event.dialog=lib.skill.tianshu.createDialog(player,target); + event.switchToAuto=function(){ + event._result=event.skillai(event.list); + game.resume(); + }; + _status.imchoosing=true; + game.pause(); + } + else{ + event._result=event.skillai(lib.skill.nsyaowang.createDialog(player,target,true)); + } + 'step 3' + _status.imchoosing=false; + if(event.dialog){ + event.dialog.close(); + } player.addTempSkill(result); player.popup(result); game.log(player,'获得了','【'+get.translation(result)+'】'); @@ -2044,13 +2044,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var list=get.gainableSkills(function(info,skill,name){ if(names.contains(name)) return false; return true; - }); + }); var skill=list.randomGet(); target.popup(skill); target.addTempSkill(skill,{player:'phaseAfter'}); game.log(target,'获得了','【'+get.translation(skill)+'】'); - } - }, + } + }, nsjianshu:{ trigger:{player:'shaBegin'}, forced:true, @@ -2068,15 +2068,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, nscangjian:{ - trigger:{source:'damageEnd'}, - direct:true, - filter:function(event){ - return event.player.isIn()&&event.player.countCards('e'); - }, - content:function(){ + trigger:{source:'damageEnd'}, + direct:true, + filter:function(event){ + return event.player.isIn()&&event.player.countCards('e'); + }, + content:function(){ player.gainPlayerCard(trigger.player,'e',get.prompt('nscangjian',trigger.player)).logSkill=['nscangjian',trigger.player]; - } - }, + } + }, nsyunxing:{ trigger:{global:'dieAfter'}, forced:true, @@ -2440,12 +2440,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, nsduijue:{ trigger:{player:'phaseUseBegin'}, - direct:true, + direct:true, filter:function(event,player){ return player.countCards('h'); }, - content:function(){ - "step 0" + content:function(){ + "step 0" var color={ black:player.countCards('h',function(card){ return get.color(card)=='red'&&get.value(card)<8; @@ -2454,7 +2454,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return get.color(card)=='black'&&get.value(card)<8; }) }; - player.chooseToDiscard(get.prompt2('nsduijue')).set('ai',function(card){ + player.chooseToDiscard(get.prompt2('nsduijue')).set('ai',function(card){ var num=_status.event.color[get.color(card)]; if(_status.event.goon&&num>=1){ return 7+num-get.value(card); @@ -2462,33 +2462,33 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }).set('goon',game.hasPlayer(function(current){ return get.effect(current,{name:'juedou'},player,player)>0; })).set('color',color).set('logSkill','nsduijue'); - "step 1" + "step 1" if(result.bool){ player.addTempSkill('nsduijue_use'); - player.storage.nsduijue_use=get.color(result.cards[0]); + player.storage.nsduijue_use=get.color(result.cards[0]); } - }, + }, subSkill:{ use:{ enable:'phaseUse', - viewAs:{name:'juedou'}, + viewAs:{name:'juedou'}, usable:2, filter:function(event,player){ return player.hasCard(function(card){ - return get.color(card)!=player.storage.nsduijue_use; - }); + return get.color(card)!=player.storage.nsduijue_use; + }); }, - filterCard:function(card,player){ - return get.color(card)!=player.storage.nsduijue_use; - }, - check:function(card){ - return 8-get.value(card); - }, - ai:{ - basic:{ - order:10 - } - } + filterCard:function(card,player){ + return get.color(card)!=player.storage.nsduijue_use; + }, + check:function(card){ + return 8-get.value(card); + }, + ai:{ + basic:{ + order:10 + } + } } } }, @@ -2512,7 +2512,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ check:function(card){return 7-get.value(card)}, ai:{ respondSha:true, - skillTagFilter:function(player,tag,arg){ + skillTagFilter:function(player,tag,arg){ if(arg!='respond') return false; if(!player.countCards('h')) return false; }, @@ -2546,8 +2546,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, mod:{ playerEnabled:function(card,player,target){ - if(player!=target&&player.storage.nsjihui_use!=target) return false; - } + if(player!=target&&player.storage.nsjihui_use!=target) return false; + } } } } @@ -2584,16 +2584,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var change=function(target){ if(target==player){ var list; - if(_status.connectMode){ - list=get.charactersOL(function(i){ - return lib.character[i][0]!='male'; - }); - } - else{ - list=get.gainableCharacters(function(info){ - return info[0]=='male'; - }); - } + if(_status.connectMode){ + list=get.charactersOL(function(i){ + return lib.character[i][0]!='male'; + }); + } + else{ + list=get.gainableCharacters(function(info){ + return info[0]=='male'; + }); + } var name=list.randomGet(); target.reinit('ns_huamulan',name,'nosmooth'); target.storage.nscongjun_show=name; @@ -2807,23 +2807,23 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ai:{ effect:{ target:function(card,player,target){ - if(get.tag(card,'damage')){ - if(!target.hasFriend()) return; + if(get.tag(card,'damage')){ + if(!target.hasFriend()) return; if(target.hp<=2) return; - if(!target.storage.nshuanxian_damage){ + if(!target.storage.nshuanxian_damage){ if(get.attitude(player,target)<0||get.tag(card,'multineg')) return [0,1]; return [1,1]; } - } - } + } + } } }, // mod:{ // globalFrom:function(from,to,distance){ - // + // // }, // globalTo:function(from,to,distance){ - // + // // } // }, // global:'nshuanxian_choose', @@ -4767,8 +4767,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ nsdufu_info:'每当你即将造成一次伤害时,你可以为此伤害重新指定伤害来源', rejizhi:'集智', rejizhi_info:'当你使用一张装备牌或锦囊牌时,你可以摸一张牌并展示之,若此牌是基本牌,你须弃置一张手牌,每回合限3次', - yiesheng:'回雪', - yiesheng_info:'出牌阶段,你可以弃置任意数量的黑色手牌,然后摸等量的牌。', + yiesheng:'回雪', + yiesheng_info:'出牌阶段,你可以弃置任意数量的黑色手牌,然后摸等量的牌。', liangji:'环计', liangji_info:'出牌阶段限一次,你可以选择一名其他角色并将一张手牌置于其武将牌上。目标角色于摸牌阶段开始时,获得此牌。若其为男性角色,则获得技能【无双】,若其为女性角色,则获得技能【离间】,直到回合结束。', jugong:'居功', diff --git a/character/extra.js b/character/extra.js index 25b0dd66e..a697ce890 100644 --- a/character/extra.js +++ b/character/extra.js @@ -117,6 +117,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ forced:true, mark:true, audio:2, + unique:true, filter:function(event){ return event.num>0; }, diff --git a/character/gujian.js b/character/gujian.js index f26723649..792d77c09 100644 --- a/character/gujian.js +++ b/character/gujian.js @@ -38,7 +38,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zuiji:{ enable:'phaseUse', filterCard:true, - position:'he', + position:'he', viewAs:{name:'jiu'}, viewAsFilter:function(player){ if(!player.countCards('he')) return false; @@ -451,7 +451,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ result:{ target:function(player,target){ return get.equipResult(player,target,name); - } + } } } } @@ -1540,8 +1540,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ gjqt_xiayize:'夏夷则', gjqt_aruan:'阿阮', - zuiji:'醉饮', - zuiji_info:'出牌阶段,你可以将一张手牌或装备牌当作酒使用', + zuiji:'醉饮', + zuiji_info:'出牌阶段,你可以将一张手牌或装备牌当作酒使用', manwu:'曼舞', manwu_info:'在一名角色的结束阶段,若其手牌数为全场最少或之一,你可以令其摸一张牌', xfanghua:'芳华', diff --git a/character/gwent.js b/character/gwent.js index 1fb92a180..dd108ad93 100644 --- a/character/gwent.js +++ b/character/gwent.js @@ -163,9 +163,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' var list=[]; - for(var i in lib.card){ + for(var i in lib.card){ if(lib.card[i].subtype=='spell_bronze') list.push(i); - } + } for(var i=0;i=3){ player.storage.gwweitu-=3; player.unmarkSkill('gwweitu'); @@ -771,7 +771,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else{ player.markSkill('gwweitu',true); } - } + } } }, ai:{ @@ -1068,8 +1068,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ // changeTarget:function(player,targets){ // if(!player.getStat('damage')){ // game.filterPlayer(function(current){ - // return get.distance(targets[0],current,'pure')==1; - // },targets); + // return get.distance(targets[0],current,'pure')==1; + // },targets); // } // }, selectTarget:function(){ @@ -1318,36 +1318,36 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, gwfusheng:{ - enable:'chooseToUse', - filter:function(event,player){ - return event.type=='dying'&&event.dying&&!event.dying.isTurnedOver(); - }, - filterTarget:function(card,player,target){ - return target==_status.event.dying; - }, - selectTarget:-1, - content:function(){ + enable:'chooseToUse', + filter:function(event,player){ + return event.type=='dying'&&event.dying&&!event.dying.isTurnedOver(); + }, + filterTarget:function(card,player,target){ + return target==_status.event.dying; + }, + selectTarget:-1, + content:function(){ target.turnOver(); - target.recover(); + target.recover(); if(player!=target){ game.asyncDraw([player,target]); } - else{ + else{ player.draw(2); } - }, - ai:{ - order:0.1, - skillTagFilter:function(player){ - if(!_status.event.dying||_status.event.dying.isTurnedOver()) return false; - }, - save:true, - result:{ - target:3 - }, - threaten:1.6 - }, - }, + }, + ai:{ + order:0.1, + skillTagFilter:function(player){ + if(!_status.event.dying||_status.event.dying.isTurnedOver()) return false; + }, + save:true, + result:{ + target:3 + }, + threaten:1.6 + }, + }, gwqinwu:{ trigger:{player:'useCard'}, filter:function(event,player){ @@ -1471,9 +1471,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return player.storage.gwjieyin.length<3; }, chooseButton:{ - dialog:function(event,player){ - return ui.create.dialog('结印',[[['','','gw_wenyi'],['','','gw_yanziyaoshui'],['','','gw_kunenfayin']],'vcard'],'hidden'); - }, + dialog:function(event,player){ + return ui.create.dialog('结印',[[['','','gw_wenyi'],['','','gw_yanziyaoshui'],['','','gw_kunenfayin']],'vcard'],'hidden'); + }, filter:function(button,player){ if(player.storage.gwjieyin.contains(button.link[2])){ return false; @@ -1516,22 +1516,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return 1; } }, - backup:function(links,player){ - return { - filterCard:function(){return false}, - selectCard:-1, - viewAs:{name:links[0][2]}, - popname:true, - onuse:function(result,player){ + backup:function(links,player){ + return { + filterCard:function(){return false}, + selectCard:-1, + viewAs:{name:links[0][2]}, + popname:true, + onuse:function(result,player){ player.logSkill('gwjieyin'); player.storage.gwjieyin.add(result.card.name); - } - } - }, - prompt:function(links,player){ - return '选择'+get.translation(links[0][2])+'的目标'; - } - }, + } + } + }, + prompt:function(links,player){ + return '选择'+get.translation(links[0][2])+'的目标'; + } + }, subSkill:{ reset:{ trigger:{player:'phaseBegin'}, @@ -1593,11 +1593,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, draw:{ trigger:{player:'phaseEnd'}, - frequent:true, + frequent:true, filter:function(event,player){ return player.storage.zhengjun.length>=1; }, - content:function(){ + content:function(){ 'step 0' if(player.storage.zhengjun.length==1){ player.draw(); @@ -1615,11 +1615,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.gain(card,'draw'); event.cards.remove(card); } - 'step 2' + 'step 2' while(event.cards.length){ ui.cardPile.insertBefore(event.cards.pop(),ui.cardPile.firstChild); } - } + } } } }, @@ -1794,58 +1794,58 @@ game.import('character',function(lib,game,ui,get,ai,_status){ forced:true, content:function(){ 'step 0' - var list=get.gainableSkills(function(info){ + var list=get.gainableSkills(function(info){ if(typeof info.enable=='string') return info.enable=='phaseUse'; if(Array.isArray(info.enable)) return info.enable.contains('phaseUse'); },player); - list.remove(player.getSkills()); - list=list.randomGets(3); - event.skillai=function(){ - return get.max(list,get.skillRank,'item'); - }; - if(event.isMine()){ - var dialog=ui.create.dialog('forcebutton'); - dialog.add('风驰:选择获得一项技能'); - var clickItem=function(){ - _status.event._result=this.link; - dialog.close(); - game.resume(); - }; - for(var i=0;i
【'+ - translation+'】
'+lib.translate[list[i]+'_info']+'
'); - item.firstChild.addEventListener('click',clickItem); - item.firstChild.link=list[i]; - } - } - dialog.add(ui.create.div('.placeholder')); - event.switchToAuto=function(){ - event._result=event.skillai(); - dialog.close(); - game.resume(); - }; - _status.imchoosing=true; - game.pause(); - } - else{ - event._result=event.skillai(); - } - 'step 1' - _status.imchoosing=false; - var link=result; - player.addTempSkill(link,'phaseUseAfter'); - player.popup(link); + list.remove(player.getSkills()); + list=list.randomGets(3); + event.skillai=function(){ + return get.max(list,get.skillRank,'item'); + }; + if(event.isMine()){ + var dialog=ui.create.dialog('forcebutton'); + dialog.add('风驰:选择获得一项技能'); + var clickItem=function(){ + _status.event._result=this.link; + dialog.close(); + game.resume(); + }; + for(var i=0;i
【'+ + translation+'】
'+lib.translate[list[i]+'_info']+'
'); + item.firstChild.addEventListener('click',clickItem); + item.firstChild.link=list[i]; + } + } + dialog.add(ui.create.div('.placeholder')); + event.switchToAuto=function(){ + event._result=event.skillai(); + dialog.close(); + game.resume(); + }; + _status.imchoosing=true; + game.pause(); + } + else{ + event._result=event.skillai(); + } + 'step 1' + _status.imchoosing=false; + var link=result; + player.addTempSkill(link,'phaseUseAfter'); + player.popup(link); player.flashAvatar('gwfengchi',link); - game.log(player,'获得了技能','【'+get.translation(link)+'】'); - game.delay(); + game.log(player,'获得了技能','【'+get.translation(link)+'】'); + game.delay(); } }, lingji:{ @@ -1892,14 +1892,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, gwjinyan:{ trigger:{player:['damageBefore']}, - forced:true, - mark:true, - filter:function(event,player){ + forced:true, + mark:true, + filter:function(event,player){ return game.roundNumber%3!=0; - }, - content:function(){ + }, + content:function(){ trigger.cancel(); - }, + }, group:['gwjinyan_gain'], subSkill:{ gain:{ @@ -1916,7 +1916,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }, - ai:{ + ai:{ threaten:function(){ if(game.roundNumber%3==0) return 1.6; return 0.8; @@ -1927,14 +1927,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ skillTagFilter:function(){ if(game.roundNumber%3==0) return false; }, - effect:{ - target:function(card,player,target){ - if(game.roundNumber%3!=0&&get.tag(card,'damage')){ + effect:{ + target:function(card,player,target){ + if(game.roundNumber%3!=0&&get.tag(card,'damage')){ return [0,0]; } - } - } - } + } + } + } }, gwshenyu:{ trigger:{player:'phaseBegin'}, @@ -1980,8 +1980,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return num*att; }; 'step 1' - if(result.bool){ - player.logSkill('gwshenyu',result.targets); + if(result.bool){ + player.logSkill('gwshenyu',result.targets); event.target=result.targets[0]; if(!event.list.length){ event.target.recover(); @@ -1999,7 +1999,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ '回复一点体力','从弃牌堆中获得一张非金法术' ]); } - } + } else{ event.finish(); } @@ -2167,20 +2167,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){ hupeng2:{ mod:{ cardDiscardable:function(card,player){ - if(card.name=='gw_dudayuanshuai2') return false; - }, - cardEnabled:function(card,player){ - if(card.name=='gw_dudayuanshuai2') return false; - }, - cardUsable:function(card,player){ - if(card.name=='gw_dudayuanshuai2') return false; - }, - cardRespondable:function(card,player){ - if(card.name=='gw_dudayuanshuai2') return false; - }, - cardSavable:function(card,player){ - if(card.name=='gw_dudayuanshuai2') return false; - }, + if(card.name=='gw_dudayuanshuai2') return false; + }, + cardEnabled:function(card,player){ + if(card.name=='gw_dudayuanshuai2') return false; + }, + cardUsable:function(card,player){ + if(card.name=='gw_dudayuanshuai2') return false; + }, + cardRespondable:function(card,player){ + if(card.name=='gw_dudayuanshuai2') return false; + }, + cardSavable:function(card,player){ + if(card.name=='gw_dudayuanshuai2') return false; + }, }, ai:{ effect:{ @@ -2363,33 +2363,33 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, yinzhang:{ - enable:'phaseUse', - usable:1, - filterCard:true, - position:'he', - check:function(card){ - return 8-get.value(card) - }, - content:function(){ - 'step 0' + enable:'phaseUse', + usable:1, + filterCard:true, + position:'he', + check:function(card){ + return 8-get.value(card) + }, + content:function(){ + 'step 0' var list=get.typeCard('spell_silver').randomGets(3); if(!list.length){ event.finish(); return; } var dialog=ui.create.dialog('选择一张加入你的手牌',[list,'vcard'],'hidden'); - player.chooseButton(dialog,true); - 'step 1' - player.gain(game.createCard(result.links[0][2]),'draw'); - }, - ai:{ - order:8, + player.chooseButton(dialog,true); + 'step 1' + player.gain(game.createCard(result.links[0][2]),'draw'); + }, + ai:{ + order:8, threaten:1.3, - result:{ - player:1 - }, - } - }, + result:{ + player:1 + }, + } + }, gwtianbian:{ trigger:{player:'phaseUseBegin'}, direct:true, @@ -2575,17 +2575,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, nuhou:{ trigger:{player:'damageEnd'}, - direct:true, - filter:function(event,player){ - return player.countCards('he')>0; - }, - content:function(){ - 'step 0' - player.chooseToDiscard(get.prompt2('nuhou'),'he').set('ai',function(card){ - return 8-get.useful(card); - }).set('logSkill','nuhou'); - 'step 1' - if(result.bool){ + direct:true, + filter:function(event,player){ + return player.countCards('he')>0; + }, + content:function(){ + 'step 0' + player.chooseToDiscard(get.prompt2('nuhou'),'he').set('ai',function(card){ + return 8-get.useful(card); + }).set('logSkill','nuhou'); + 'step 1' + if(result.bool){ var targets=player.getEnemies(); if(targets.length){ var target=targets.randomGet(); @@ -2593,10 +2593,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ target.damage(); target.randomDiscard(); } - } - }, - ai:{ - threaten:0.8, + } + }, + ai:{ + threaten:0.8, maixie:true, maixie_hp:true, maixie_defend:true, @@ -2610,7 +2610,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } } - } + } }, shewu:{ enable:'phaseUse', @@ -3892,10 +3892,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ !target.hasSkill('gw_qinpendayu')|| !target.hasSkill('gw_birinongwu'); }, - changeTarget:function(player,targets){ - game.filterPlayer(function(current){ - return get.distance(targets[0],current,'pure')==1; - },targets); + changeTarget:function(player,targets){ + game.filterPlayer(function(current){ + return get.distance(targets[0],current,'pure')==1; + },targets); }, contentAfter:function(){ var evt=_status.event.getParent('phaseUse'); @@ -4180,9 +4180,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, }, - cardType:{ - gwmaoxian:0.5 - }, + cardType:{ + gwmaoxian:0.5 + }, translate:{ gw_huoge:'霍格', gw_aisinie:'埃丝涅', diff --git a/character/hearth.js b/character/hearth.js index 329a73c63..b772c04c1 100644 --- a/character/hearth.js +++ b/character/hearth.js @@ -1,611 +1,611 @@ 'use strict'; game.import('character',function(lib,game,ui,get,ai,_status){ - return { - name:'hearth', - character:{ - hs_jaina:['female','wei',3,['huopu','aoshu','bingjia']], - hs_lrexxar:['male','shu',4,['yushou']], - hs_wuther:['male','qun',4,['fengxian','jieming']], - hs_jgarrosh:['male','shu',4,['zhanhou','qiangxi']], - hs_malfurion:['male','wu',4,['jihuo']], - hs_guldan:['male','wei',3,['moxie','fuhua','hongxi']], - hs_anduin:['male','qun',3,['shengguang','shijie','anying']], - hs_sthrall:['male','wu',4,['tuteng','guozai','zuling']], - hs_waleera:['female','shu',3,['jianren','mengun','wlianji']], + return { + name:'hearth', + character:{ + hs_jaina:['female','wei',3,['huopu','aoshu','bingjia']], + hs_lrexxar:['male','shu',4,['yushou']], + hs_wuther:['male','qun',4,['fengxian','jieming']], + hs_jgarrosh:['male','shu',4,['zhanhou','qiangxi']], + hs_malfurion:['male','wu',4,['jihuo']], + hs_guldan:['male','wei',3,['moxie','fuhua','hongxi']], + hs_anduin:['male','qun',3,['shengguang','shijie','anying']], + hs_sthrall:['male','wu',4,['tuteng','guozai','zuling']], + hs_waleera:['female','shu',3,['jianren','mengun','wlianji']], - hs_medivh:['male','wei',3,['jingxiang','zuzhou','mdzhoufu']], - hs_alleria:['female','wu',3,['fengxing','xinliegong']], - hs_magni:['male','shu',4,['zhongjia','dunji']], - hs_liadrin:['female','shu',4,['xueren']], - hs_morgl:['male','wu',3,['s_tuteng']], - hs_khadgar:['male','shu',3,['midian','fuwen','jinzhou']], - hs_tyrande:['female','wei',3,['yuelu','xingluo']], + hs_medivh:['male','wei',3,['jingxiang','zuzhou','mdzhoufu']], + hs_alleria:['female','wu',3,['fengxing','xinliegong']], + hs_magni:['male','shu',4,['zhongjia','dunji']], + hs_liadrin:['female','shu',4,['xueren']], + hs_morgl:['male','wu',3,['s_tuteng']], + hs_khadgar:['male','shu',3,['midian','fuwen','jinzhou']], + hs_tyrande:['female','wei',3,['yuelu','xingluo']], - hs_neptulon:['male','wu',4,['liechao','qingliu']], - hs_wvelen:['male','qun',3,['shengyan','xianzhi']], - hs_antonidas:['male','wei',3,['yanshu','bingshuang']], - hs_alakir:['male','wei',3,['fengnu','shengdun']], - hs_zhouzhuo:['male','qun',4,['yiwen']], - hs_yngvar:['male','qun',3,['huanwu']], - hs_bchillmaw:['male','wei',5,['hanshuang','bingshi']], - hs_malorne:['male','wu',3,['enze','chongsheng']], - hs_malygos:['male','wei',4,['malymowang']], - hs_xuefashi:['male','wei',2,['liehun','xjumo']], - hs_loatheb:['male','wu',5,['duzhang']], - hs_trueheart:['female','qun',3,['qianghuax']], - hs_sainaliusi:['male','wu',4,['chongsheng','yulu']], - hs_lrhonin:['male','wei',4,['bingyan','yufa']], - hs_bolvar:['male','wei',4,['yuanzheng','bzhuiji']], - hs_fuding:['male','wei',4,['shengdun','fbeifa']], - hs_xuanzhuanjijia:['male','shu',2,['jixuan']], - hs_ysera:['female','wu',4,['bimeng']], - hs_alextrasza:['female','shu',5,['fushi']], - hs_nozdormu:['male','qun',5,['shixu']], - hs_sapphiron:['male','wei',4,['bingdong','stuxi']], - hs_kchromaggus:['male','wei',4,['fenlie']], - hs_lreno:['male','shu',4,['tanmi']], - hs_brann:['male','shu',3,['qianghua']], - hs_finley:['male','wu',3,['maoxian']], - hs_kcthun:['male','qun',4,['luanji','xianji']], - hs_anomalus:['male','wei',4,['mobao']], - hs_blingtron:['male','shu',3,['zengli','xiubu']], - hs_yogg:['male','wu',4,['qianhou']], - hs_xialikeer:['female','shu',3,['duxin']], - hs_pyros:['female','shu',2,['pyuhuo']], - hs_kalimosi:['male','wu',4,['kqizhou']], + hs_neptulon:['male','wu',4,['liechao','qingliu']], + hs_wvelen:['male','qun',3,['shengyan','xianzhi']], + hs_antonidas:['male','wei',3,['yanshu','bingshuang']], + hs_alakir:['male','wei',3,['fengnu','shengdun']], + hs_zhouzhuo:['male','qun',4,['yiwen']], + hs_yngvar:['male','qun',3,['huanwu']], + hs_bchillmaw:['male','wei',5,['hanshuang','bingshi']], + hs_malorne:['male','wu',3,['enze','chongsheng']], + hs_malygos:['male','wei',4,['malymowang']], + hs_xuefashi:['male','wei',2,['liehun','xjumo']], + hs_loatheb:['male','wu',5,['duzhang']], + hs_trueheart:['female','qun',3,['qianghuax']], + hs_sainaliusi:['male','wu',4,['chongsheng','yulu']], + hs_lrhonin:['male','wei',4,['bingyan','yufa']], + hs_bolvar:['male','wei',4,['yuanzheng','bzhuiji']], + hs_fuding:['male','wei',4,['shengdun','fbeifa']], + hs_xuanzhuanjijia:['male','shu',2,['jixuan']], + hs_ysera:['female','wu',4,['bimeng']], + hs_alextrasza:['female','shu',5,['fushi']], + hs_nozdormu:['male','qun',5,['shixu']], + hs_sapphiron:['male','wei',4,['bingdong','stuxi']], + hs_kchromaggus:['male','wei',4,['fenlie']], + hs_lreno:['male','shu',4,['tanmi']], + hs_brann:['male','shu',3,['qianghua']], + hs_finley:['male','wu',3,['maoxian']], + hs_kcthun:['male','qun',4,['luanji','xianji']], + hs_anomalus:['male','wei',4,['mobao']], + hs_blingtron:['male','shu',3,['zengli','xiubu']], + hs_yogg:['male','wu',4,['qianhou']], + hs_xialikeer:['female','shu',3,['duxin']], + hs_pyros:['female','shu',2,['pyuhuo']], + hs_kalimosi:['male','wu',4,['kqizhou']], - hs_zhishigushu:['male','shu',4,['jiaohui']], - hs_zhanzhenggushu:['male','wei',6,['biri']], - hs_ronghejuren:['male','shu',8,['ronghuo']], - hs_shanlingjuren:['male','wu',8,['luoshi']], - hs_aedwin:['male','wu',4,['lianzhan']], - hs_mijiaojisi:['female','wu',3,['kuixin']], - hs_huzhixiannv:['female','wu',3,['jingmeng','qingliu']], - hs_totemic:['male','wu',3,['peiyu']], - hs_wujiyuansu:['male','wei',3,['hswuji']], - hs_xsylvanas:['female','qun',3,['busi','xshixin','xmojian']], - hs_siwangzhiyi:['male','qun',12,['mieshi']], - hs_bilanyoulong:['male','wei',4,['lingzhou']], - hs_jinglinglong:['male','wu',3,['moyao']], - hs_ruanniguai:['male','wu',3,['nianfu','xiaorong']], - hs_hudunren:['male','shu',2,['hhudun']], - hs_nate:['male','wu',4,['chuidiao']], - hs_jiaziruila:['male','wu',4,['hannu']], - hs_shifazhe:['male','wei',3,['shifa']], - hs_lafamu:['male','shu',4,['xieneng']], - hs_yelise:['female','wei',3,['xunbao','zhuizong']], - hs_jiawodun:['male','wu',4,['jinhua']], + hs_zhishigushu:['male','shu',4,['jiaohui']], + hs_zhanzhenggushu:['male','wei',6,['biri']], + hs_ronghejuren:['male','shu',8,['ronghuo']], + hs_shanlingjuren:['male','wu',8,['luoshi']], + hs_aedwin:['male','wu',4,['lianzhan']], + hs_mijiaojisi:['female','wu',3,['kuixin']], + hs_huzhixiannv:['female','wu',3,['jingmeng','qingliu']], + hs_totemic:['male','wu',3,['peiyu']], + hs_wujiyuansu:['male','wei',3,['hswuji']], + hs_xsylvanas:['female','qun',3,['busi','xshixin','xmojian']], + hs_siwangzhiyi:['male','qun',12,['mieshi']], + hs_bilanyoulong:['male','wei',4,['lingzhou']], + hs_jinglinglong:['male','wu',3,['moyao']], + hs_ruanniguai:['male','wu',3,['nianfu','xiaorong']], + hs_hudunren:['male','shu',2,['hhudun']], + hs_nate:['male','wu',4,['chuidiao']], + hs_jiaziruila:['male','wu',4,['hannu']], + hs_shifazhe:['male','wei',3,['shifa']], + hs_lafamu:['male','shu',4,['xieneng']], + hs_yelise:['female','wei',3,['xunbao','zhuizong']], + hs_jiawodun:['male','wu',4,['jinhua']], - hs_fandral:['male','shu',4,['nuyan','chouhuo']], - hs_hallazeal:['male','wei',4,['shengteng','yuansu']], - hs_enzoth:['male','qun',4,['mengye']], - hs_walian:['male','shu',4,['wzhanyi']], - hs_pengpeng:['male','qun',4,['yindan']], - hs_yashaji:['male','qun',4,['ysjqisha']], - // hs_wolazi:['male','wei',3,[]], + hs_fandral:['male','shu',4,['nuyan','chouhuo']], + hs_hallazeal:['male','wei',4,['shengteng','yuansu']], + hs_enzoth:['male','qun',4,['mengye']], + hs_walian:['male','shu',4,['wzhanyi']], + hs_pengpeng:['male','qun',4,['yindan']], + hs_yashaji:['male','qun',4,['ysjqisha']], + // hs_wolazi:['male','wei',3,[]], - hs_tanghangu:['male','shu',5,['zhongji']], - hs_aya:['female','wu',3,['ayuling','qingzun']], - hs_barnes:['male','shu',4,['hsnitai']], - // hs_nuogefu:['male','wei',3,[]], - hs_kazhakusi:['male','shu',3,['lianjin']], - // hs_lazi:['male','wei',3,[]], - hs_shaku:['male','wei',3,['shouji']], - hs_laxiao:['male','shu',3,['guimou','yingxi','longyi']], - // hs_xiangyaqishi:['male','wei',3,[]], - // hs_fenjie:['male','shu',3,['guimou','yingxi']], - hs_mojinbaozi:['male','wei',3,['jingcu','shengzhang']], - hs_shuiwenxuejia:['male','wu',3,['kekao']], - hs_shizugui:['male','wu',3,['szbianshen']], - hs_hemite:['male','wu',6,['zhuilie']], - hs_laila:['male','wu',3,['lieyang']], + hs_tanghangu:['male','shu',5,['zhongji']], + hs_aya:['female','wu',3,['ayuling','qingzun']], + hs_barnes:['male','shu',4,['hsnitai']], + // hs_nuogefu:['male','wei',3,[]], + hs_kazhakusi:['male','shu',3,['lianjin']], + // hs_lazi:['male','wei',3,[]], + hs_shaku:['male','wei',3,['shouji']], + hs_laxiao:['male','shu',3,['guimou','yingxi','longyi']], + // hs_xiangyaqishi:['male','wei',3,[]], + // hs_fenjie:['male','shu',3,['guimou','yingxi']], + hs_mojinbaozi:['male','wei',3,['jingcu','shengzhang']], + hs_shuiwenxuejia:['male','wu',3,['kekao']], + hs_shizugui:['male','wu',3,['szbianshen']], + hs_hemite:['male','wu',6,['zhuilie']], + hs_laila:['male','wu',3,['lieyang']], - hs_selajin:['male','shu',3,['qianfu','shimo']], - hs_bannabusi:['male','wu',14,['qingtian']], - hs_amala:['female','wu',3,['azaowu','shouwang']], - hs_yinggencao:['male','wu',3,['lieqi']], + hs_selajin:['male','shu',3,['qianfu','shimo']], + hs_bannabusi:['male','wu',14,['qingtian']], + hs_amala:['female','wu',3,['azaowu','shouwang']], + hs_yinggencao:['male','wu',3,['lieqi']], - hs_zhihuanhua:['female','wei',3,['huanjue']], - hs_shirencao:['male','wu',3,['srjici']], - hs_kaituozhe:['female','wu',3,['tansuo','yinzong']], + hs_zhihuanhua:['female','wei',3,['huanjue']], + hs_shirencao:['male','wu',3,['srjici']], + hs_kaituozhe:['female','wu',3,['tansuo','yinzong']], - hs_fachaotuteng:['male','wei',3,['xiyong']], - hs_huolituteng:['male','wei',3,['hllingxi']], - hs_manyututeng:['male','wu',3,['zhaochao']], - hs_tgolem:['male','wu',4,['xinwuyan','guozaix']], + hs_fachaotuteng:['male','wei',3,['xiyong']], + hs_huolituteng:['male','wei',3,['hllingxi']], + hs_manyututeng:['male','wu',3,['zhaochao']], + hs_tgolem:['male','wu',4,['xinwuyan','guozaix']], - hs_heifengqishi:['male','qun',4,['hstianqi']], - // hs_yuhuozhe:['male','qun',4,['hstianqi']], - // hs_wuyaowang:['male','qun',4,['hstianqi']], - // hs_aerfusi:['male','qun',4,['hstianqi']], - // hs_baiguyoulong:['male','qun',4,['hstianqi']], - hs_yangyanwageli:['female','qun',3,['hspuzhao','hsyanxin']], + hs_heifengqishi:['male','qun',4,['hstianqi']], + // hs_yuhuozhe:['male','qun',4,['hstianqi']], + // hs_wuyaowang:['male','qun',4,['hstianqi']], + // hs_aerfusi:['male','qun',4,['hstianqi']], + // hs_baiguyoulong:['male','qun',4,['hstianqi']], + hs_yangyanwageli:['female','qun',3,['hspuzhao','hsyanxin']], - hs_aiqinvyao:['famale','qun',4,['nsaiqi','nsbeiming']], - }, - characterIntro:{ - hs_jaina:'戴林·普罗德摩尔之女。 在吉安娜成年早期,她致力于阻止将引发第三次战争的天灾瘟疫传播,当战况加剧后,吉安娜获得了新部落大酋长萨尔的信任,成为团结艾泽拉斯各族携手对抗燃烧军团的关键人物。当战争结束后,吉安娜管理着塞拉摩岛,致力于促进部落与联盟间的关系。吉安娜的和平立场与性格在接任萨尔成为部落大酋长的加尔鲁什·地狱咆哮以一颗魔法炸弹夷平塞拉摩后改变了。身为肯瑞托的新领袖,她拥有让加尔鲁什为他酿成的惨剧付出血的代价的权力与决心。', - hs_lrexxar:'作为部落最伟大的英雄之一,雷克萨本是兽人与食人魔结合的产物。他从小在德拉诺的莫克纳萨氏族长大。流血冲突和以及来自部落内部的陷害慢慢消磨了雷克萨为部落而战的热情,最终导致他独自出走。雷克萨与他的新伙伴们,包括巨熊米莎,消失在艾泽拉斯世界。在第三次大战中,雷克萨结识了年轻的酋长萨尔,后者重建部落的热情令他大受启发。奥格瑞玛建成之后,部落勇士的称号也传回了他在外域(德拉诺世界的残片)的家乡。如今,雷克萨依然随时准备着为全新的部落——他真正的人民——效劳。', - hs_wuther:'乌瑟尔·光明使者是白银之手骑士团的领袖,同时也是大主教阿隆索斯·法奥之徒。当暴风城被兽人攻陷,莱恩国王遇害之后,乌瑟尔跟随法奥和安度因·洛萨同往洛丹伦王国寻求援助。鉴于艾泽拉斯战役的教训和迫在眉睫的兽人的威胁,法奥决定重建洛丹伦王国的圣教组织,并由他的学徒兼助手乌瑟尔来全权负责。这就是后世著名的“白银之手”骑士团。', - hs_jgarrosh:'前部落酋长。什出生于德拉诺的兽人家园,他的成长未曾受侵略艾泽拉斯兽人身上流淌着的恶魔之血所污染。虽然自身并未受腐化影响,但加尔鲁什始终活在身世的阴影之下。', - hs_malfurion:'在德鲁伊的守护神、半神塞纳留斯的指引下,玛法里奥·怒风千年以来一直保护着暗夜精灵不受恶魔侵扰。在上古之战中,玛法里奥与其他英雄一起,为了保护艾泽拉斯的所有生命,抵抗过可怕的燃烧军团,随后玛法里奥和其他德鲁伊在翡翠梦境中探索了数百年之久。在第三次大战中,泰兰德唤醒了玛法里奥,请他再次协助抵抗燃烧军团。玛法里奥离开暗夜精灵主城达纳苏斯,并召集他的德鲁伊同伴再次拯救艾泽拉斯,并组成了特别部队,阻止了邪恶的炎魔拉格纳罗斯的入侵。随着灭世者的死亡,彻底觉醒的玛法里奥与泰兰德终于团聚并一同支持联盟的行动。', - hs_guldan:'在兽人的家乡德拉诺,古尔丹生于影月氏族一个偏远的村庄,由于残疾,他被族人所抛弃。在村中萨满的指引下,他来到了纳格兰的元素王座,祈求元素指引他的道路,可最终,就连元素都放弃了他。但是,一股古老而可怕的黑暗势力向他伸出了“援手”——燃烧军团。得到了恶魔之力的古尔丹成为了史上第一位术士,他回到了抛弃自己的村庄,杀死了所有他曾经的族人,也“回报”了那位指引他的萨满以“感激”。现在,古尔丹是燃烧军团的先驱者,竭力使终极的毁灭降临艾泽拉斯。', - hs_anduin:'蒂芬与瓦里安·乌瑞恩之子,安度因·莱恩·乌瑞恩是暴风城的王位继承人。数年前,当他的父亲失踪后,年轻的安度因便加冕暴风城国王。但尚处年幼的他无法胜任王国事务,交由联盟中德高望重的圣骑士伯瓦尔·弗塔根公爵代为执政。当国王瓦里安回归并重掌王位后,王子开始专注于心灵和外交的修炼,环游艾泽拉斯来了解如何才能治愈饱受战争摧残的大地和灵魂。安度因心灵善良且富有同情心,不同于他父亲战士出身的莽撞,令他与德莱尼的先知维伦,甚至一些部落成员结下不解之缘。', - hs_sthrall:'“萨尔”是兽人古伊尔年轻时候的绰号,他的父母因反对古尔丹被杀,人类中士埃德拉斯·布莱克摩尔发现了襁褓中的他,并计划将他培育成自己野心计划的重要棋子;而萨尔,正是奴隶之意。古伊尔摆脱控制后踏上寻根之旅,最后从先祖的萨满信仰中寻得了智慧。他重整了部落,成为大酋长并领导他的人民在贫瘠之地上定居。萨尔领导部落通过了一连串的试炼,当死亡之翼重返人间并撕裂世界,萨尔从部落大酋长的位置退下,加入了大地之环这个强大的萨满组织,企图平息元素并阻止灭世者。萨尔选择加尔鲁什·地狱咆哮做为继任者,然而这个决定一直困扰着他,因为新任大酋长却把部落带上了内乱的歧途。', - hs_waleera:'瓦莉拉·萨古纳尔在竞技场角斗士上认识瓦里安和暗夜精灵德鲁伊布罗尔·熊皮组成"竞技场"角斗士三人组。尽管她拒绝在部落和联盟的战争中站队,这位血精灵仍然不止一次挽救过暴风城国王的性命。', - hs_medivh:'卡拉赞领主,最后的守护者。黑暗泰坦萨格拉斯在被他的母亲艾格文击败后,悄悄潜入了她的身体,并最终侵入尚未出生的麦迪文体内。随着麦迪文的成长,萨格拉斯的黑暗力量渐渐显露出来。麦迪文与古尔丹的影子议会合力,打开了连接两个世界的黑暗之门,部落军队得以大举进入艾泽拉斯。最终,得于卡德加和加罗娜的相助,洛萨率众突入卡拉赞,击败了邪恶的守护者麦迪文。', - hs_alleria:'风行者三姐妹的大姐。奥蕾莉亚·风行者的成名战始于巨魔战争中期,为了保卫家园,她击退了数之不尽的巨魔。 在第二次大战中,奎尔萨拉斯边陲地带被部落烧成了灰烬,但她和两个妹妹:希尔瓦娜斯和温蕾萨却幸存了下来。在兽人耐奥祖重新打开了德拉诺和艾泽拉斯之间的通路后,奥蕾莉亚参加了远征军,穿越传送门前往德拉诺。在远征军毁掉德拉诺端的黑暗之门之前,德拉诺开始四分五裂,选征军择了一扇新的传送门,并穿越了它,此后再无音讯。', - hs_magni:'麦格尼是历史上最著名的矮人之一,作为一个统治者,他展现出了无比的勇气和慷慨无私的品质。作为铁炉堡的统治者,麦格尼·铜须国王总是将人民的需求置于自身所求之前。因此,当大地裂变震撼、颠覆了艾泽拉斯时,麦格尼执行了一个古老的仪式,试图与大地沟通以了解这次事件的起源。但麦格尼还没找到答案,就被变成一具了无生息的钻石雕像。', - hs_liadrin:'曾是一名高等精灵牧师,现在是血骑士的领袖。莉亚德琳曾认为血精灵永远也无法偿清他们对穆鲁所犯下的错误,但维纶却使用穆鲁的精华净化了太阳之井,让太阳之井变成了一个满溢出圣光能量的巨大能量源。莉亚德琳不愿回到触及她心中伤口的奎尔萨拉斯去,独自幽居在幽魂之地中,但她却总是收到有人匿名送来(其实照顾她的正是对她恋心依旧的洛瑟玛·塞隆)的绿色魔法水晶,以缓解她同所有高等精灵一样在失去太阳之井后不能自拔的魔瘾。', - hs_morgl:'一名鳄鱼人大地之环先知。鳄鱼人自上古时代就生活于索拉查盆地,可以说是最原始的鱼人种族,他们是索拉查盆地-这个泰坦生态实验场的第一批居民之一,虽然他们的相貌的确不敢恭维,但他们却默默的守护着这片区域,守护着泰坦创世时所留下的科技成果。 然而,他们的智力仍保持于原始崇拜的地步,他们基本不在意这些泰坦科技的重要性。', - hs_khadgar:'大法师卡德加曾是守护者麦迪文手下的年轻学徒,亲身经历了前两次战争。当他发现麦迪文的计划,了解到麦迪文企图打开德拉诺传送门将受恶魔控制的兽人大军释放到艾泽拉斯之后,卡德加协助打败了他的导师。在战斗中,卡德加中了一个可怕的法术,整个人急剧地衰老。虽然身体变得年迈脆弱,但他的心智依然清醒敏锐。现在卡德加致力于联合艾泽拉斯的所有力量来对抗燃烧军团的入侵,而且要一劳永逸地解决古尔丹。', - hs_tyrande:'作为月光之下最出色的猎手,女神艾露恩的选民,泰兰德已经领导暗夜精灵奋战了数个世纪。泰兰德出生于数千年前,与玛法里奥·怒风和伊利丹·怒风一共长大。她响应了暗夜精灵的月亮女神的追随者们,艾露恩姐妹会的召唤,成为一名新手女祭司。而怒风兄弟则走上了另一条道路。但当燃烧军团降临艾泽拉斯,他们的命运又再次发生了交集。', + hs_aiqinvyao:['famale','qun',4,['nsaiqi','nsbeiming']], + }, + characterIntro:{ + hs_jaina:'戴林·普罗德摩尔之女。 在吉安娜成年早期,她致力于阻止将引发第三次战争的天灾瘟疫传播,当战况加剧后,吉安娜获得了新部落大酋长萨尔的信任,成为团结艾泽拉斯各族携手对抗燃烧军团的关键人物。当战争结束后,吉安娜管理着塞拉摩岛,致力于促进部落与联盟间的关系。吉安娜的和平立场与性格在接任萨尔成为部落大酋长的加尔鲁什·地狱咆哮以一颗魔法炸弹夷平塞拉摩后改变了。身为肯瑞托的新领袖,她拥有让加尔鲁什为他酿成的惨剧付出血的代价的权力与决心。', + hs_lrexxar:'作为部落最伟大的英雄之一,雷克萨本是兽人与食人魔结合的产物。他从小在德拉诺的莫克纳萨氏族长大。流血冲突和以及来自部落内部的陷害慢慢消磨了雷克萨为部落而战的热情,最终导致他独自出走。雷克萨与他的新伙伴们,包括巨熊米莎,消失在艾泽拉斯世界。在第三次大战中,雷克萨结识了年轻的酋长萨尔,后者重建部落的热情令他大受启发。奥格瑞玛建成之后,部落勇士的称号也传回了他在外域(德拉诺世界的残片)的家乡。如今,雷克萨依然随时准备着为全新的部落——他真正的人民——效劳。', + hs_wuther:'乌瑟尔·光明使者是白银之手骑士团的领袖,同时也是大主教阿隆索斯·法奥之徒。当暴风城被兽人攻陷,莱恩国王遇害之后,乌瑟尔跟随法奥和安度因·洛萨同往洛丹伦王国寻求援助。鉴于艾泽拉斯战役的教训和迫在眉睫的兽人的威胁,法奥决定重建洛丹伦王国的圣教组织,并由他的学徒兼助手乌瑟尔来全权负责。这就是后世著名的“白银之手”骑士团。', + hs_jgarrosh:'前部落酋长。什出生于德拉诺的兽人家园,他的成长未曾受侵略艾泽拉斯兽人身上流淌着的恶魔之血所污染。虽然自身并未受腐化影响,但加尔鲁什始终活在身世的阴影之下。', + hs_malfurion:'在德鲁伊的守护神、半神塞纳留斯的指引下,玛法里奥·怒风千年以来一直保护着暗夜精灵不受恶魔侵扰。在上古之战中,玛法里奥与其他英雄一起,为了保护艾泽拉斯的所有生命,抵抗过可怕的燃烧军团,随后玛法里奥和其他德鲁伊在翡翠梦境中探索了数百年之久。在第三次大战中,泰兰德唤醒了玛法里奥,请他再次协助抵抗燃烧军团。玛法里奥离开暗夜精灵主城达纳苏斯,并召集他的德鲁伊同伴再次拯救艾泽拉斯,并组成了特别部队,阻止了邪恶的炎魔拉格纳罗斯的入侵。随着灭世者的死亡,彻底觉醒的玛法里奥与泰兰德终于团聚并一同支持联盟的行动。', + hs_guldan:'在兽人的家乡德拉诺,古尔丹生于影月氏族一个偏远的村庄,由于残疾,他被族人所抛弃。在村中萨满的指引下,他来到了纳格兰的元素王座,祈求元素指引他的道路,可最终,就连元素都放弃了他。但是,一股古老而可怕的黑暗势力向他伸出了“援手”——燃烧军团。得到了恶魔之力的古尔丹成为了史上第一位术士,他回到了抛弃自己的村庄,杀死了所有他曾经的族人,也“回报”了那位指引他的萨满以“感激”。现在,古尔丹是燃烧军团的先驱者,竭力使终极的毁灭降临艾泽拉斯。', + hs_anduin:'蒂芬与瓦里安·乌瑞恩之子,安度因·莱恩·乌瑞恩是暴风城的王位继承人。数年前,当他的父亲失踪后,年轻的安度因便加冕暴风城国王。但尚处年幼的他无法胜任王国事务,交由联盟中德高望重的圣骑士伯瓦尔·弗塔根公爵代为执政。当国王瓦里安回归并重掌王位后,王子开始专注于心灵和外交的修炼,环游艾泽拉斯来了解如何才能治愈饱受战争摧残的大地和灵魂。安度因心灵善良且富有同情心,不同于他父亲战士出身的莽撞,令他与德莱尼的先知维伦,甚至一些部落成员结下不解之缘。', + hs_sthrall:'“萨尔”是兽人古伊尔年轻时候的绰号,他的父母因反对古尔丹被杀,人类中士埃德拉斯·布莱克摩尔发现了襁褓中的他,并计划将他培育成自己野心计划的重要棋子;而萨尔,正是奴隶之意。古伊尔摆脱控制后踏上寻根之旅,最后从先祖的萨满信仰中寻得了智慧。他重整了部落,成为大酋长并领导他的人民在贫瘠之地上定居。萨尔领导部落通过了一连串的试炼,当死亡之翼重返人间并撕裂世界,萨尔从部落大酋长的位置退下,加入了大地之环这个强大的萨满组织,企图平息元素并阻止灭世者。萨尔选择加尔鲁什·地狱咆哮做为继任者,然而这个决定一直困扰着他,因为新任大酋长却把部落带上了内乱的歧途。', + hs_waleera:'瓦莉拉·萨古纳尔在竞技场角斗士上认识瓦里安和暗夜精灵德鲁伊布罗尔·熊皮组成"竞技场"角斗士三人组。尽管她拒绝在部落和联盟的战争中站队,这位血精灵仍然不止一次挽救过暴风城国王的性命。', + hs_medivh:'卡拉赞领主,最后的守护者。黑暗泰坦萨格拉斯在被他的母亲艾格文击败后,悄悄潜入了她的身体,并最终侵入尚未出生的麦迪文体内。随着麦迪文的成长,萨格拉斯的黑暗力量渐渐显露出来。麦迪文与古尔丹的影子议会合力,打开了连接两个世界的黑暗之门,部落军队得以大举进入艾泽拉斯。最终,得于卡德加和加罗娜的相助,洛萨率众突入卡拉赞,击败了邪恶的守护者麦迪文。', + hs_alleria:'风行者三姐妹的大姐。奥蕾莉亚·风行者的成名战始于巨魔战争中期,为了保卫家园,她击退了数之不尽的巨魔。 在第二次大战中,奎尔萨拉斯边陲地带被部落烧成了灰烬,但她和两个妹妹:希尔瓦娜斯和温蕾萨却幸存了下来。在兽人耐奥祖重新打开了德拉诺和艾泽拉斯之间的通路后,奥蕾莉亚参加了远征军,穿越传送门前往德拉诺。在远征军毁掉德拉诺端的黑暗之门之前,德拉诺开始四分五裂,选征军择了一扇新的传送门,并穿越了它,此后再无音讯。', + hs_magni:'麦格尼是历史上最著名的矮人之一,作为一个统治者,他展现出了无比的勇气和慷慨无私的品质。作为铁炉堡的统治者,麦格尼·铜须国王总是将人民的需求置于自身所求之前。因此,当大地裂变震撼、颠覆了艾泽拉斯时,麦格尼执行了一个古老的仪式,试图与大地沟通以了解这次事件的起源。但麦格尼还没找到答案,就被变成一具了无生息的钻石雕像。', + hs_liadrin:'曾是一名高等精灵牧师,现在是血骑士的领袖。莉亚德琳曾认为血精灵永远也无法偿清他们对穆鲁所犯下的错误,但维纶却使用穆鲁的精华净化了太阳之井,让太阳之井变成了一个满溢出圣光能量的巨大能量源。莉亚德琳不愿回到触及她心中伤口的奎尔萨拉斯去,独自幽居在幽魂之地中,但她却总是收到有人匿名送来(其实照顾她的正是对她恋心依旧的洛瑟玛·塞隆)的绿色魔法水晶,以缓解她同所有高等精灵一样在失去太阳之井后不能自拔的魔瘾。', + hs_morgl:'一名鳄鱼人大地之环先知。鳄鱼人自上古时代就生活于索拉查盆地,可以说是最原始的鱼人种族,他们是索拉查盆地-这个泰坦生态实验场的第一批居民之一,虽然他们的相貌的确不敢恭维,但他们却默默的守护着这片区域,守护着泰坦创世时所留下的科技成果。 然而,他们的智力仍保持于原始崇拜的地步,他们基本不在意这些泰坦科技的重要性。', + hs_khadgar:'大法师卡德加曾是守护者麦迪文手下的年轻学徒,亲身经历了前两次战争。当他发现麦迪文的计划,了解到麦迪文企图打开德拉诺传送门将受恶魔控制的兽人大军释放到艾泽拉斯之后,卡德加协助打败了他的导师。在战斗中,卡德加中了一个可怕的法术,整个人急剧地衰老。虽然身体变得年迈脆弱,但他的心智依然清醒敏锐。现在卡德加致力于联合艾泽拉斯的所有力量来对抗燃烧军团的入侵,而且要一劳永逸地解决古尔丹。', + hs_tyrande:'作为月光之下最出色的猎手,女神艾露恩的选民,泰兰德已经领导暗夜精灵奋战了数个世纪。泰兰德出生于数千年前,与玛法里奥·怒风和伊利丹·怒风一共长大。她响应了暗夜精灵的月亮女神的追随者们,艾露恩姐妹会的召唤,成为一名新手女祭司。而怒风兄弟则走上了另一条道路。但当燃烧军团降临艾泽拉斯,他们的命运又再次发生了交集。', - hs_neptulon:'耐普图隆被称为"猎潮者"。他是四大元素领主之一。他和拉格纳罗斯能够联手为你提供最好的桑拿服务。', - hs_wvelen:'他被逐出他的家园。他兄弟们都变成了邪恶的主宰......但是除此之外,他好像也没有什么别的可以抱怨的了。', - hs_antonidas:'肯瑞托的首席法师,达拉然最伟大的子民,安东尼达斯在被巫妖王阿尔萨斯杀死之前,曾是吉安娜的导师。. 预言者警告他必须迁移到西方去, 但安东尼达斯没有注意。最终导致了自己和达拉然的毁灭。', - hs_alakir:'他是四大元素领主中最弱的一个。而另外三个总是会提醒他这一点。', - hs_zhouzhuo:'游学者周卓整理并分享有关潘达利亚大陆的轶事,但他最喜欢的故事,是乔伊和菲比一起外出旅行发生的事情。', - hs_yngvar:'唤雾者召来的不光有雾,还有霾。记得戴口罩。', - hs_bchillmaw:'冰喉一心想要毁掉锦标赛。至于原因,都是因为那些吵闹个不停地熊孩子们!', - hs_malorne:'玛洛恩之所以讨厌恶魔,是因为他不理解为什么这些又脏又臭的生物会长着和他一样的蹄子。', - hs_malygos:'玛里苟斯憎恨凡人使用魔法。那会让他气急败坏!', - hs_xuefashi:'他负责每年一度的血色修道院献血运动!', - hs_loatheb:'洛欧塞布原本只是头普通的沼泽兽。从它身上的变化可见矿业和农业给自然带来了多大的破坏。', - hs_trueheart:'英雄技能2.0升级版,面向所有职业。', - hs_sainaliusi:'“当它们还是种子的时候,我便认识它们了……”', - hs_lrhonin:'无主之人,无冕之王。', - hs_bolvar:'在伯瓦尔身上的冰融化之后,他受邀接受了采访。在采访中他对艾泽拉斯全球气候变暖现象表达了深深的忧虑。', - hs_fuding:'如果你还没听过《提里奥·弗丁主题曲》,那是因为它还没被谱写出来。', - hs_xuanzhuanjijia:'这个打蛋器可好用了。', - hs_ysera:'伊瑟拉统治翡翠梦境。所谓翡翠梦境,究竟只是现实世界的绿色朦胧倒影,还是其它别的什么地方?', - hs_alextrasza:'生命的缚誓者阿莱克丝塔萨给所有人带来生命和希望。除了死亡之翼。除了玛里苟斯。除了耐克鲁斯。', - hs_nozdormu:'没时间写什么背景描述了。', - hs_kchromaggus:'当两个头都无法说服对方晚餐到底吃什么的时候,它通常都会去拉面店解决问题。', - hs_lreno:'雷诺曾四次荣获由探险者协会颁发的“年度最佳服饰奖”。', - hs_brann:'自从铁炉堡的国王麦格尼华丽登场后,布莱恩也想像哥哥那样出一套英雄皮肤。', - hs_finley:'除了正常的官方用语外,他还精通14种鱼人方言。', - hs_kcthun:'克苏恩最讨厌的一张牌,就是圣骑士的奥秘“以眼还眼”。', - hs_anomalus:'阿诺玛鲁斯是由混乱的奥术能量所组成的,所以消灭它存在相当大的风险。', - hs_blingtron:'启动布林顿,让所有参加派对的人都嗨起来!', - hs_yogg:'你死期到了……死期到了……期到了……到了……了!', - hs_xialikeer:'什么!螳螂妖给你的东西你也敢喝?真是自寻死路。', - hs_zhishigushu:'去吧,把你的名字刻在树皮上。', - hs_zhanzhenggushu:'年轻的暗夜精灵们喜欢一种叫做“谁能让战争古树站起来”的游戏。如果在它起身的时候你被踩死了,你还是输了。', - hs_ronghejuren:'无数初次来到熔火之心的冒险者倒在他滚烫的脚掌之下。', - hs_shanlingjuren:'他的妈妈说,他只是骨架比较大而已。', - hs_aedwin:'他领导石匠协会重建了暴风城,而当贵族们拒绝支付工钱的时候,他将领导迪菲亚兄弟会,嗯,拆掉暴风城。', - hs_mijiaojisi:'你绝不知道谁在为这个秘密组织效劳...', - hs_huzhixiannv:'传闻她手中持的便是亚瑟王的断钢剑。', - hs_totemic:'事实证明海象人对于图腾的样式一点都不挑剔。', - hs_xsylvanas:'没有人比女王更渴望真正地死去。', - hs_siwangzhiyi:'死亡之翼原本是高贵的巨龙奈萨里奥,他发疯之后制造了艾泽拉斯的大灾变,但最终被击败。子不教,父之过?', - hs_bilanyoulong:'它们本来应该是宝蓝色或是蔚蓝色,但这几个颜色显得有点太耀眼了。', - hs_jinglinglong:'可爱至极,免疫魔法,不会在毯子上撒尿。真是完美的宠物!', - hs_nate:'纳特·帕格是艾泽拉斯最棒的钓手!他发明了自动鱼竿3000型,伸缩鱼竿3000型,以及电气自动诱捕器2099型(仍在测试中)。', - hs_jiaziruila:'祖尔法拉克队是本届巨魔世界杯的夺冠热门球队,他们的队旗上描绘着令人望而生畏的多头蛇加兹瑞拉。', - hs_lafamu:'他在搜集神器方面很有一手,只不过都是从别人的博物馆里抢来的。', - hs_yelise:'作为团队里的绘图师,伊莉斯现在最主要的工作就是拼凑出完整的“黄金猿藏宝图”。', - hs_fandral:'每当范达尔·鹿盔举起酒杯,并以“想当年我在种世界之树的时候……”为开场白在那老调重弹时,众酒客便会作鸟兽散。', - hs_hallazeal:'根据能量守恒定律,你损失的生命值最终会转移到我身上。', - hs_walian:'联盟的统治者!安杜因的父亲!同时他还喜欢玩竞技模式,场均12胜。', - hs_tanghangu:'作为污手党家族的主心骨,汉有时真想把愚钝的古扫地出门,但他没法这么做。', - hs_aya:'别看艾雅年纪轻,她可是玉莲帮的实际掌权者。看似天真活泼的少女,转眼之间就会召唤出魔像大军,将敌人统统碾碎!', - hs_kazhakusi:'暗金教在此严正声明,卡扎库斯教主并非巨龙,也从未染指过违禁药水。任何公开污蔑暗金教与卡扎库斯教主本人的言论,必将遭受法律与龙息药水的严惩。', - hs_shaku:'艾雅曾调查过沙库尔,看看他有没有私藏了什么好东西。', - hs_laxiao:'什么?身为死亡之翼的儿子,拉西奥居然不是龙牌?你似乎知道的太多了…', - }, - characterTitle:{ - hs_aiqinvyao:'#bSnonamekill' - }, - perfectPair:{ - hs_sthrall:['hs_totemic','hs_alakir','hs_neptulon','hs_yngvar'], - hs_anduin:['hs_wvelen','hs_mijiaojisi'], - hs_jaina:['hs_antonidas'], - hs_malfurion:['hs_malorne'], - }, - skill:{ - nsaiqi:{ - trigger:{player:'useCard'}, - forced:true, - init:function(player){ - player.storage.nsaiqi=[]; - }, - intro:{ - content:'cards' - }, - filter:function(event,player){ - if(ui.cardPile.firstChild&&ui.cardPile.firstChild.vanishtag.contains('nsaiqi')){ - return false; - } - return true; - }, - onremove:'lose', - content:function(){ - var cards=get.cards(3); - for(var i=0;i=9; - }, - content:function(){ - 'step 0' - player.draw(); - 'step 1' - player.chooseCardButton(player.storage.nsaiqi,true,'将顺序将牌置于牌堆顶(先选择的在上)',player.storage.nsaiqi.length); - 'step 2' - var list=result.links.slice(0); - while(list.length){ - ui.cardPile.insertBefore(list.pop(),ui.cardPile.firstChild); - } - player.storage.nsaiqi.length=0; - player.unmarkSkill('nsaiqi'); - } - }, - hsnitai:{ - trigger:{player:'phaseUseBegin'}, - forced:true, - video:function(player,data){ - var skills=data[0]; - var name=data[1]; - lib.skill.hsnitai.process(skills,name); - }, - onremove:function(player){ - player.removeSkill('hsnitai_card'); - }, - process:function(skills,name){ - var cardname='hsnitai_'+name; - lib.translate[cardname]=lib.translate[name]; - lib.translate[cardname+'_info']='出牌阶段对自己使用,获得'+get.translation(name)+'的一个技能(替换前一个以此法获得的技能,效果持续2回合)'; - lib.translate[cardname+'_append']=''; - for(var i=0;i
'+ - get.skillInfoTranslation(skills[i])+'
'; - if(i
【'+ - translation+'】
'+lib.translate[list[i]+'_info']+'
'); - item.firstChild.addEventListener('click',clickItem); - item.firstChild.link=list[i]; - } - } - dialog.add(ui.create.div('.placeholder')); - event.switchToAuto=function(){ - event._result=event.skillai(); - dialog.close(); - game.resume(); - }; - _status.imchoosing=true; - game.pause(); - } - else{ - event._result=event.skillai(); - } - 'step 1' - var skill=result; - if(!target.hasSkill(skill)){ - player.popup(skill); - target.$gain2(card); - target.removeSkill('hsnitai_card'); - target.storage.hsnitai_card=card; - target.storage.hsnitai_card_count=1; - target.storage.hsnitai_card_skill=skill; - player.syncStorage('hsnitai_card'); - player.syncStorage('hsnitai_card_skill'); - target.addAdditionalSkill('hsnitai_card',skill); - target.addSkill('hsnitai_card'); - game.log(target,'获得技能','【'+get.translation(skill)+'】'); - } - }, - ai:{ - order:function(){ - if(_status.event.player.hasSkill('hsnitai_card')) return 1; - return 9; - }, - result:{ - target:function(player,target){ - if(!player.hasSkill('hsnitai_card')||player.needsToDiscard()) return 1; - return 0; - } - } - } - }; - }, - content:function(){ - var current=game.expandSkills(player.getSkills()); - var list=get.gainableSkills(function(info,skill,name){ - if(current.contains(skill)) return false; - return lib.characterPack.hearth&&lib.characterPack.hearth[name]; - }); - if(!list.length){ - return; - } - var skill=list.randomGet(); - var source=[]; - for(var i in lib.characterPack.hearth){ - if(lib.characterPack.hearth[i][3].contains(skill)){ - source.push(i); - } - } - if(!source.length){ - return; - } - var name=source.randomGet(); - var skills=[skill]; - var nameskills=lib.characterPack.hearth[name][3] - for(var i=0;i【'+lib.translate[skill]+'】
'+ - get.skillInfoTranslation(skill)+'
'; - } - }, - trigger:{player:'phaseUseBegin'}, - priority:-10, - silent:true, - content:function(){ - if(player.storage.hsnitai_card_count>0){ - player.storage.hsnitai_card_count--; - } - else{ - player.removeSkill('hsnitai_card'); - } - } - } - } - }, - hspuzhao:{ - enable:'phaseUse', - usable:1, - filterCard:{suit:'heart'}, - position:'he', - filter:function(event,player){ - return player.countCards('he',{suit:'heart'})>0; - }, - check:function(card){ - return 7-get.value(card); - }, - content:function(){ - var targets=player.getFriends(); - if(targets.length){ - targets.push(player); - if(targets.length>3){ - targets=targets.randomGets(3); - } - targets.sortBySeat(); - player.line(targets,'green'); - for(var i=0;i=9; + }, + content:function(){ + 'step 0' + player.draw(); + 'step 1' + player.chooseCardButton(player.storage.nsaiqi,true,'将顺序将牌置于牌堆顶(先选择的在上)',player.storage.nsaiqi.length); + 'step 2' + var list=result.links.slice(0); + while(list.length){ + ui.cardPile.insertBefore(list.pop(),ui.cardPile.firstChild); + } + player.storage.nsaiqi.length=0; + player.unmarkSkill('nsaiqi'); + } + }, + hsnitai:{ + trigger:{player:'phaseUseBegin'}, + forced:true, + video:function(player,data){ + var skills=data[0]; + var name=data[1]; + lib.skill.hsnitai.process(skills,name); + }, + onremove:function(player){ + player.removeSkill('hsnitai_card'); + }, + process:function(skills,name){ + var cardname='hsnitai_'+name; + lib.translate[cardname]=lib.translate[name]; + lib.translate[cardname+'_info']='出牌阶段对自己使用,获得'+get.translation(name)+'的一个技能(替换前一个以此法获得的技能,效果持续2回合)'; + lib.translate[cardname+'_append']=''; + for(var i=0;i
'+ + get.skillInfoTranslation(skills[i])+'
'; + if(i
【'+ + translation+'】
'+lib.translate[list[i]+'_info']+'
'); + item.firstChild.addEventListener('click',clickItem); + item.firstChild.link=list[i]; + } + } + dialog.add(ui.create.div('.placeholder')); + event.switchToAuto=function(){ + event._result=event.skillai(); + dialog.close(); + game.resume(); + }; + _status.imchoosing=true; + game.pause(); + } + else{ + event._result=event.skillai(); + } + 'step 1' + var skill=result; + if(!target.hasSkill(skill)){ + player.popup(skill); + target.$gain2(card); + target.removeSkill('hsnitai_card'); + target.storage.hsnitai_card=card; + target.storage.hsnitai_card_count=1; + target.storage.hsnitai_card_skill=skill; + player.syncStorage('hsnitai_card'); + player.syncStorage('hsnitai_card_skill'); + target.addAdditionalSkill('hsnitai_card',skill); + target.addSkill('hsnitai_card'); + game.log(target,'获得技能','【'+get.translation(skill)+'】'); + } + }, + ai:{ + order:function(){ + if(_status.event.player.hasSkill('hsnitai_card')) return 1; + return 9; + }, + result:{ + target:function(player,target){ + if(!player.hasSkill('hsnitai_card')||player.needsToDiscard()) return 1; + return 0; + } + } + } + }; + }, + content:function(){ + var current=game.expandSkills(player.getSkills()); + var list=get.gainableSkills(function(info,skill,name){ + if(current.contains(skill)) return false; + return lib.characterPack.hearth&&lib.characterPack.hearth[name]; + }); + if(!list.length){ + return; + } + var skill=list.randomGet(); + var source=[]; + for(var i in lib.characterPack.hearth){ + if(lib.characterPack.hearth[i][3].contains(skill)){ + source.push(i); + } + } + if(!source.length){ + return; + } + var name=source.randomGet(); + var skills=[skill]; + var nameskills=lib.characterPack.hearth[name][3] + for(var i=0;i【'+lib.translate[skill]+'】
'+ + get.skillInfoTranslation(skill)+'
'; + } + }, + trigger:{player:'phaseUseBegin'}, + priority:-10, + silent:true, + content:function(){ + if(player.storage.hsnitai_card_count>0){ + player.storage.hsnitai_card_count--; + } + else{ + player.removeSkill('hsnitai_card'); + } + } + } + } + }, + hspuzhao:{ + enable:'phaseUse', + usable:1, + filterCard:{suit:'heart'}, + position:'he', + filter:function(event,player){ + return player.countCards('he',{suit:'heart'})>0; + }, + check:function(card){ + return 7-get.value(card); + }, + content:function(){ + var targets=player.getFriends(); + if(targets.length){ + targets.push(player); + if(targets.length>3){ + targets=targets.randomGets(3); + } + targets.sortBySeat(); + player.line(targets,'green'); + for(var i=0;i0; @@ -623,607 +623,607 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ player.changeHujia(trigger.num); } - }, - ysjqisha:{ - trigger:{source:'damageEnd',player:'damageEnd'}, - forced:true, - filter:function(event,player){ - if(event._notrigger.contains(event.player)) return false; - return (event.source!=player&&event.source.isIn())||(event.player!=player&&event.player.isIn()); - }, - content:function(){ - var target=trigger.source; - if(target==player){ - target=trigger.player; - } - var list=['ju','kuang','nu','yi','wang','hen','ao']; - for(var i=0;i0; - }, - content:function(){ - game.delay(0.5); - player.chooseToDiscard(true,'he'); - } - }, - kuang:{ - mark:true, - intro:{ - content:'锁定技,每当你使用一张牌指定惟一目标,有50%的机率指定错误的目标' - }, - trigger:{player:'useCard'}, - forced:true, - filter:function(event,player){ - return event.getRand()<0.5&&event.targets&&event.targets.length==1&&game.hasPlayer(function(current){ - return current!=event.targets[0]&&lib.filter.targetEnabled2(event.card,player,current); - }); - }, - content:function(){ - 'step 0' - game.delay(); - 'step 1' - var list=game.filterPlayer(function(current){ - return current!=trigger.targets[0]&&lib.filter.targetEnabled2(trigger.card,player,current); - }); - if(list.length){ - var target=list.randomGet(); - trigger.targets[0]=target; - player.line(target,'green'); - } - } - }, - nu:{ - mark:true, - intro:{ - content:'锁定技,你使用的卡牌造成的伤害+1;每当你使用一张牌,有65%的机率失效' - }, - forced:true, - trigger:{source:'damageBegin',player:'useCardToBefore'}, - filter:function(event,player){ - if(event.name=='damage') return event.notLink()&&(event.card?true:false); - var info=get.info(event.card); - if(info.multitarget&&event.targets&&event.targets.contains(player)) return false; - return event.getRand()<0.65; - }, - content:function(){ - if(trigger.name=='damage'){ - trigger.num++; - } - else{ - trigger.cancel(); - } - } - }, - yi:{ - mark:true, - intro:{ - content:'锁定技,你不能成为非敌方角色的卡牌目标' - }, - mod:{ - targetEnabled:function(card,player,target){ - if(!player.getEnemies().contains(target)) return false; - } - } - }, - wang:{ - mark:true, - intro:{ - content:'锁定技,你的摸牌数始终-1' - }, - priority:5, - trigger:{player:'drawBegin'}, - forced:true, - content:function(){ - trigger.num--; - } - }, - hen:{ - mark:true, - intro:{ - content:'锁定技,每当一名敌方角色回复一点体力,你失去一点体力' - }, - trigger:{global:'recoverAfter'}, - forced:true, - filter:function(event,player){ - return player.getEnemies().contains(event.player); - }, - content:function(){ - player.loseHp(); - } - }, - ao:{ - mark:true, - intro:{ - content:'锁定技,你的手牌上限-2' - }, - mod:{ - maxHandcard:function(player,num){ - return num-2; - } - } - }, - } - }, - yindan:{ - enable:'phaseUse', - filterCard:{suit:'spade'}, - check:function(card){ - return 8-get.value(card); - }, - usable:1, - filter:function(event,player){ - return player.countCards('he',{suit:'spade'}); - }, - position:'he', - content:function(){ - 'step 0' - player.loseHp(); - 'step 1' - var cards=[]; - for(var i=0;i<2;i++){ - cards.push(game.createCard('hsjixie_zhadan')); - } - player.gain(cards,'gain2'); - }, - ai:{ - order:7, - result:{ - player:function(player,target){ - if(player.hp>=3) return 1; - if(player.hp==2&&game.hasPlayer(function(current){ - return get.damageEffect(current,player,player,'fire')>0&¤t.hp==1; - })){ - return 1; - } - return 0; - } - } - } - }, - hllingxi:{ - enable:'phaseUse', - filter:function(event,player){ - return game.hasPlayer(function(target){ - return lib.skill.hllingxi.filterTarget(null,player,target); - }); - }, - filterTarget:function(card,player,target){ - return target!=player&&target.isDamaged()&&target.countCards('he')>=2; - }, - content:function(){ - 'step 0' - target.chooseToDiscard('he',2,true); - 'step 1' - target.recover(); - }, - group:'hllingxi_end', - subSkill:{ - end:{ - trigger:{player:'phaseEnd'}, - frequent:true, - filter:function(event,player){ - return player.isDamaged(); - }, - content:function(){ - player.recover(); - } - } - }, - ai:{ - order:6, - result:{ - target:function(player,target){ - var nc=target.countCards('he'); - if(target.hasSkillTag('maixie_hp')){ - if(nc>=3) return 1; - if(target.hp==1) return 1; - return 0; - } - if(nc>=4){ - if(target.hp<=2) return 1; - return 0; - } - else if(nc==3){ - if(target.hp==1) return 1; - if(target.hp>=4) return -1; - return 0; - } - else{ - if(target.hp==1) return 0; - return -1; - } - } - } - } - }, - zhaochao:{ - trigger:{player:'phaseEnd'}, - forced:true, - filter:function(event,player){ - return player.getEnemies().length>0; - }, - content:function(){ - 'step 0' - event.targets=player.getEnemies(); - player.addSkill('zhaochao2'); - player.useCard({name:'sha'},event.targets.randomRemove()); - 'step 1' - player.removeSkill('zhaochao2'); - if(player.storage.zhaochao2&&event.targets.length){ - player.useCard({name:'sha'},event.targets.randomRemove()); - delete player.storage.zhaochao2; - } - }, - ai:{ - threaten:1.7 - } - }, - zhaochao2:{ - trigger:{player:'shaMiss'}, - silent:true, - filter:function(event){ - return event.getParent(2).name=='zhaochao'; - }, - content:function(){ - player.storage.zhaochao2=true; - } - }, - xiyong:{ - trigger:{player:'phaseEnd'}, - frequent:true, - content:function(){ - 'step 0' - player.draw(); - 'step 1' - if(Array.isArray(result)&&result.length){ - var gained=result[0]; - if(lib.filter.cardEnabled(gained,target)){ - var next=player.chooseToUse(); - next.filterCard=function(card){ - return card==gained; - }; - next.prompt='是否使用'+get.translation(gained)+'?'; - } - else{ - event.finish(); - } - } + }, + subSkill:{ + ju:{ + mark:true, + intro:{ + content:'锁定技,每当你使用一张牌,需弃置一张牌' + }, + trigger:{player:'useCard'}, + forced:true, + filter:function(event,player){ + return player.countCards('he')>0; + }, + content:function(){ + game.delay(0.5); + player.chooseToDiscard(true,'he'); + } + }, + kuang:{ + mark:true, + intro:{ + content:'锁定技,每当你使用一张牌指定惟一目标,有50%的机率指定错误的目标' + }, + trigger:{player:'useCard'}, + forced:true, + filter:function(event,player){ + return event.getRand()<0.5&&event.targets&&event.targets.length==1&&game.hasPlayer(function(current){ + return current!=event.targets[0]&&lib.filter.targetEnabled2(event.card,player,current); + }); + }, + content:function(){ + 'step 0' + game.delay(); + 'step 1' + var list=game.filterPlayer(function(current){ + return current!=trigger.targets[0]&&lib.filter.targetEnabled2(trigger.card,player,current); + }); + if(list.length){ + var target=list.randomGet(); + trigger.targets[0]=target; + player.line(target,'green'); + } + } + }, + nu:{ + mark:true, + intro:{ + content:'锁定技,你使用的卡牌造成的伤害+1;每当你使用一张牌,有65%的机率失效' + }, + forced:true, + trigger:{source:'damageBegin',player:'useCardToBefore'}, + filter:function(event,player){ + if(event.name=='damage') return event.notLink()&&(event.card?true:false); + var info=get.info(event.card); + if(info.multitarget&&event.targets&&event.targets.contains(player)) return false; + return event.getRand()<0.65; + }, + content:function(){ + if(trigger.name=='damage'){ + trigger.num++; + } + else{ + trigger.cancel(); + } + } + }, + yi:{ + mark:true, + intro:{ + content:'锁定技,你不能成为非敌方角色的卡牌目标' + }, + mod:{ + targetEnabled:function(card,player,target){ + if(!player.getEnemies().contains(target)) return false; + } + } + }, + wang:{ + mark:true, + intro:{ + content:'锁定技,你的摸牌数始终-1' + }, + priority:5, + trigger:{player:'drawBegin'}, + forced:true, + content:function(){ + trigger.num--; + } + }, + hen:{ + mark:true, + intro:{ + content:'锁定技,每当一名敌方角色回复一点体力,你失去一点体力' + }, + trigger:{global:'recoverAfter'}, + forced:true, + filter:function(event,player){ + return player.getEnemies().contains(event.player); + }, + content:function(){ + player.loseHp(); + } + }, + ao:{ + mark:true, + intro:{ + content:'锁定技,你的手牌上限-2' + }, + mod:{ + maxHandcard:function(player,num){ + return num-2; + } + } + }, + } + }, + yindan:{ + enable:'phaseUse', + filterCard:{suit:'spade'}, + check:function(card){ + return 8-get.value(card); + }, + usable:1, + filter:function(event,player){ + return player.countCards('he',{suit:'spade'}); + }, + position:'he', + content:function(){ + 'step 0' + player.loseHp(); + 'step 1' + var cards=[]; + for(var i=0;i<2;i++){ + cards.push(game.createCard('hsjixie_zhadan')); + } + player.gain(cards,'gain2'); + }, + ai:{ + order:7, + result:{ + player:function(player,target){ + if(player.hp>=3) return 1; + if(player.hp==2&&game.hasPlayer(function(current){ + return get.damageEffect(current,player,player,'fire')>0&¤t.hp==1; + })){ + return 1; + } + return 0; + } + } + } + }, + hllingxi:{ + enable:'phaseUse', + filter:function(event,player){ + return game.hasPlayer(function(target){ + return lib.skill.hllingxi.filterTarget(null,player,target); + }); + }, + filterTarget:function(card,player,target){ + return target!=player&&target.isDamaged()&&target.countCards('he')>=2; + }, + content:function(){ + 'step 0' + target.chooseToDiscard('he',2,true); + 'step 1' + target.recover(); + }, + group:'hllingxi_end', + subSkill:{ + end:{ + trigger:{player:'phaseEnd'}, + frequent:true, + filter:function(event,player){ + return player.isDamaged(); + }, + content:function(){ + player.recover(); + } + } + }, + ai:{ + order:6, + result:{ + target:function(player,target){ + var nc=target.countCards('he'); + if(target.hasSkillTag('maixie_hp')){ + if(nc>=3) return 1; + if(target.hp==1) return 1; + return 0; + } + if(nc>=4){ + if(target.hp<=2) return 1; + return 0; + } + else if(nc==3){ + if(target.hp==1) return 1; + if(target.hp>=4) return -1; + return 0; + } + else{ + if(target.hp==1) return 0; + return -1; + } + } + } + } + }, + zhaochao:{ + trigger:{player:'phaseEnd'}, + forced:true, + filter:function(event,player){ + return player.getEnemies().length>0; + }, + content:function(){ + 'step 0' + event.targets=player.getEnemies(); + player.addSkill('zhaochao2'); + player.useCard({name:'sha'},event.targets.randomRemove()); + 'step 1' + player.removeSkill('zhaochao2'); + if(player.storage.zhaochao2&&event.targets.length){ + player.useCard({name:'sha'},event.targets.randomRemove()); + delete player.storage.zhaochao2; + } + }, + ai:{ + threaten:1.7 + } + }, + zhaochao2:{ + trigger:{player:'shaMiss'}, + silent:true, + filter:function(event){ + return event.getParent(2).name=='zhaochao'; + }, + content:function(){ + player.storage.zhaochao2=true; + } + }, + xiyong:{ + trigger:{player:'phaseEnd'}, + frequent:true, + content:function(){ + 'step 0' + player.draw(); + 'step 1' + if(Array.isArray(result)&&result.length){ + var gained=result[0]; + if(lib.filter.cardEnabled(gained,target)){ + var next=player.chooseToUse(); + next.filterCard=function(card){ + return card==gained; + }; + next.prompt='是否使用'+get.translation(gained)+'?'; + } + else{ + event.finish(); + } + } else{ - event.finish(); - } + event.finish(); + } 'step 2' if(result.bool){ - player.draw(); + player.draw(); } - }, - ai:{ - threaten:1.6 - } - }, - srjici:{ - trigger:{source:'damageEnd'}, - forced:true, - content:function(){ - player.draw(); - if(trigger.player&&trigger.player.isIn()&&!trigger._notrigger.contains(trigger.player)){ - trigger.player.randomDiscard(); - } - }, - ai:{ - threaten:1.4 - } - }, - yinzong:{ - trigger:{player:'loseEnd'}, - forced:true, - filter:function(event,player){ + }, + ai:{ + threaten:1.6 + } + }, + srjici:{ + trigger:{source:'damageEnd'}, + forced:true, + content:function(){ + player.draw(); + if(trigger.player&&trigger.player.isIn()&&!trigger._notrigger.contains(trigger.player)){ + trigger.player.randomDiscard(); + } + }, + ai:{ + threaten:1.4 + } + }, + yinzong:{ + trigger:{player:'loseEnd'}, + forced:true, + filter:function(event,player){ for(var i=0;i0; - })){ - switch(button.link[2]){ - case 'tao':return 5; - case 'xuejibingbao': return 4; - case 'jiu':return 3.01; - case 'sha': - if(button.link[3]=='fire') return 2.95; - else if(button.link[3]=='fire') return 2.92; - else return 2.9; - default:return 2+_status.event.getRand()*2; - } - } - return 0; - }, - backup:function(links,player){ - return { - filterCard:function(card){ - return get.type(card)=='basic'; - }, - viewAs:{name:links[0][2],nature:links[0][3]}, - popname:true, - ai1:function(card){ - return 6-get.value(card); - } - } - }, - prompt:function(links,player){ - return '将一张基本牌当作'+get.translation(links[0][3]||'')+get.translation(links[0][2])+'使用'; - } - }, - ai:{ - order:function(){ - var player=_status.event.player; - var event=_status.event; - if(event.filterCard({name:'jiu'},player,event)&&get.effect(player,{name:'jiu'})>0){ - return 3.1; - } - return 2.9; - }, - result:{ - player:1 - } - } - }, - shouwang:{ - enable:'chooseToUse', - filter:function(event,player){ - return event.type=='dying'&&event.dying&&!event.dying.hasSkill('shouwang2'); - }, - filterTarget:function(card,player,target){ - return target==_status.event.dying; - }, - selectTarget:-1, - content:function(){ - target.recover(); - target.changeHujia(); - target.addSkill('shouwang2') - }, - ai:{ - order:6, - skillTagFilter:function(player){ - if(!_status.event.dying||_status.event.dying.hasSkill('shouwang2')) return false; - }, - save:true, - result:{ - target:3 - }, - threaten:1.6 - }, - }, - shouwang2:{ - mark:true, - intro:{ - content:'已发动' - } - }, - qingtian:{ - trigger:{player:'damageBegin'}, - forced:true, - filter:function(event,player){ - return player.isMaxHp(true); - }, - check:function(){ - return false; - }, - content:function(){ - trigger.num++; - } - }, - qingtian_old:{ - trigger:{player:'recoverBefore'}, - forced:true, - filter:function(event,player){ - return player.hp>0&&event.num>0; - }, - content:function(){ - trigger.cancel(); - player.changeHujia(trigger.num); - }, - ai:{ - neg:true - } - }, - qianfu:{ - trigger:{player:'dieBefore'}, - forced:true, - filter:function(event,player){ - return !player.hasSkill('qianfu2')&&player.maxHp>0; - }, - unique:true, - content:function(){ - trigger.cancel(); - player.addSkill('qianfu2'); - player.hp=1; - player.update(); - player.discard(player.getCards('he')); - player.setAvatar('hs_selajin','hs_selajin2'); - }, - ai:{ - threaten:0.8 - } - }, - qianfu2:{ - mark:true, - intro:{ - content:'你防止非火焰伤害,不能使用或打出卡牌,并始终跳过你的回合' - }, - mod:{ + return false; + }, + content:function(){ + player.addTempSkill('qianxing',{player:'phaseBegin'}); + } + }, + tansuo:{ + enable:'phaseUse', + usable:1, + filterCard:true, + position:'he', + check:function(card){ + return 8-get.value(card) + }, + content:function(){ + if(!lib.characterPack.hearth){ + player.draw(); + return; + } + var list=[]; + for(var i=0;i0; + })){ + switch(button.link[2]){ + case 'tao':return 5; + case 'xuejibingbao': return 4; + case 'jiu':return 3.01; + case 'sha': + if(button.link[3]=='fire') return 2.95; + else if(button.link[3]=='fire') return 2.92; + else return 2.9; + default:return 2+_status.event.getRand()*2; + } + } + return 0; + }, + backup:function(links,player){ + return { + filterCard:function(card){ + return get.type(card)=='basic'; + }, + viewAs:{name:links[0][2],nature:links[0][3]}, + popname:true, + ai1:function(card){ + return 6-get.value(card); + } + } + }, + prompt:function(links,player){ + return '将一张基本牌当作'+get.translation(links[0][3]||'')+get.translation(links[0][2])+'使用'; + } + }, + ai:{ + order:function(){ + var player=_status.event.player; + var event=_status.event; + if(event.filterCard({name:'jiu'},player,event)&&get.effect(player,{name:'jiu'})>0){ + return 3.1; + } + return 2.9; + }, + result:{ + player:1 + } + } + }, + shouwang:{ + enable:'chooseToUse', + filter:function(event,player){ + return event.type=='dying'&&event.dying&&!event.dying.hasSkill('shouwang2'); + }, + filterTarget:function(card,player,target){ + return target==_status.event.dying; + }, + selectTarget:-1, + content:function(){ + target.recover(); + target.changeHujia(); + target.addSkill('shouwang2') + }, + ai:{ + order:6, + skillTagFilter:function(player){ + if(!_status.event.dying||_status.event.dying.hasSkill('shouwang2')) return false; + }, + save:true, + result:{ + target:3 + }, + threaten:1.6 + }, + }, + shouwang2:{ + mark:true, + intro:{ + content:'已发动' + } + }, + qingtian:{ + trigger:{player:'damageBegin'}, + forced:true, + filter:function(event,player){ + return player.isMaxHp(true); + }, + check:function(){ + return false; + }, + content:function(){ + trigger.num++; + } + }, + qingtian_old:{ + trigger:{player:'recoverBefore'}, + forced:true, + filter:function(event,player){ + return player.hp>0&&event.num>0; + }, + content:function(){ + trigger.cancel(); + player.changeHujia(trigger.num); + }, + ai:{ + neg:true + } + }, + qianfu:{ + trigger:{player:'dieBefore'}, + forced:true, + filter:function(event,player){ + return !player.hasSkill('qianfu2')&&player.maxHp>0; + }, + unique:true, + content:function(){ + trigger.cancel(); + player.addSkill('qianfu2'); + player.hp=1; + player.update(); + player.discard(player.getCards('he')); + player.setAvatar('hs_selajin','hs_selajin2'); + }, + ai:{ + threaten:0.8 + } + }, + qianfu2:{ + mark:true, + intro:{ + content:'你防止非火焰伤害,不能使用或打出卡牌,并始终跳过你的回合' + }, + mod:{ cardEnabled:function(card,player){ return false; }, @@ -1237,5948 +1237,5948 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return false; }, }, - group:['qianfu2_damage','qianfu2_phase','qianfu2_revive'], - subSkill:{ - damage:{ - trigger:{player:'damageBefore'}, - filter:function(event){ - if(event.nature!='fire') return true; - return false; - }, - mark:true, - forced:true, - content:function(){ - trigger.cancel(); - }, - ai:{ - nothunder:true, - nodamage:true, - effect:{ - target:function(card,player,target,current){ - if(get.tag(card,'damage')&&!get.tag(card,'fireDamage')) return [0,0]; - } - }, - }, - }, - phase:{ - trigger:{player:'phaseBefore'}, - forced:true, - popup:false, - content:function(){ - trigger.cancel(); - } - }, - revive:{ - trigger:{player:'recoverAfter'}, - forced:true, - filter:function(event,player){ - return player.hp>=3||player.isHealthy(); - }, - content:function(){ - player.removeSkill('qianfu2'); - player.draw(3); - player.setAvatar('hs_selajin','hs_selajin'); - } - } - } - }, - shimo:{ - trigger:{global:'damageAfter'}, - forced:true, - filter:function(event,player){ - return event.player!=player&&get.distance(player,event.player)<=1; - }, - content:function(){ - if(player.isDamaged()){ - player.recover(); - } - else{ - player.draw(); - } - } - }, - lieyang:{ - trigger:{player:'useCard'}, - forced:true, - usable:3, - filter:function(event,player){ - return _status.currentPhase==player&&get.type(event.card,'trick')=='trick'; - }, - content:function(){ - var list=get.inpile('trick','trick'); - player.gain(game.createCard(list.randomGet()),'draw'); - if(player.storage.counttrigger&&player.storage.counttrigger.lieyang>=3){ - player.addTempSkill('lieyang2'); - } - }, - ai:{ - threaten:1.8 - } - }, - lieyang2:{ - mod:{ - cardEnabled:function(card){if(get.type(card,'trick')=='trick') return false} - } - }, - zhuilie:{ - trigger:{player:'phaseBegin'}, - direct:true, - filter:function(event,player){ - return player.countCards('he'); - }, - content:function(){ - 'step 0' - player.chooseToDiscard('he',get.prompt('zhuilie')).set('ai',function(card){ - if(player.hp>=4||(player.hasSha()&&player.hasShan())){ - return 6-get.value(card); - } - if(player.hasSha()||player.hasShan()){ - return 3-get.value(card); - } - return 0; - }).logSkill='zhuilie'; - 'step 1' - if(result.bool){ - var list=[]; - var list2=[]; - for(var i=0;i<6&&i3){ - player.draw(); - } - } - } - }, - szbianshen:{ - trigger:{player:'phaseBefore'}, - unique:true, - skillAnimation:true, - forceunique:true, - filter:function(){ - return game.roundNumber>=3; - }, - check:function(event,player){ - return player.hp<=2; - }, - content:function(){ - 'step 0' - var list=get.gainableCharacters(function(info){ - return info[2]>=5; - }); - var players=game.players.concat(game.dead); - for(var i=0;i
【'+ - translation+'】
'+lib.translate[list[i]+'_info']+'
'); - item.firstChild.addEventListener('click',clickItem); - item.firstChild.link=list[i]; - } - } - dialog.add(ui.create.div('.placeholder')); - event.switchToAuto=function(){ - event._result=event.skillai(); - dialog.close(); - game.resume(); - }; - _status.imchoosing=true; - game.pause(); - } - else{ - event._result=event.skillai(); - } - 'step 1' - _status.imchoosing=false; - var link=result; - player.addSkill(link,true); - player.popup(link); - game.log(player,'获得了技能','【'+get.translation(link)+'】'); - game.delay(); - }, - ai:{ - effect:{ - target:function(card,player,target){ - if(get.type(card,'trick')=='trick'&&player==target) return [1,1]; - } - } - } - }, - kqizhou:{ - trigger:{player:'phaseBegin'}, - direct:true, - filter:function(event,player){ - return player.storage.kqizhou; - }, - content:function(){ - 'step 0' - delete player.storage.kqizhou; - var list=[['','','hsqizhou_feng'], - ['','','hsqizhou_shui'], - ['','','hsqizhou_huo'], - ['','','hsqizhou_tu']]; - var dialog=ui.create.dialog(get.prompt('kqizhou'),[list,'vcard'],'hidden'); - var shui=(player.hp<=1&&player.maxHp>=3); - var tu=game.hasPlayer(function(current){ - return current.hp==1&&get.attitude(player,current)>0; - }); - player.chooseButton(dialog).ai=function(button){ - if(!player.hasFriend()&&button.link[2]=='hsqizhou_tu') return 0; - if(player.isHealthy()&&button.link[2]=='hsqizhou_shui') return 0; - if(shui&&button.link[2]=='hsqizhou_shui') return 3; - if(tu&&button.link[2]=='hsqizhou_tu') return 2; - return Math.random(); - }; - 'step 1' - if(result.buttons){ - player.logSkill('kqizhou'); - player.gain(game.createCard(result.buttons[0].link[2]),'draw'); - } - }, - group:'kqizhou_add', - subSkill:{ - add:{ - trigger:{player:'useCard'}, - silent:true, - filter:function(event,player){ - return _status.currentPhase==player&&get.type(event.card,'trick')=='trick'; - }, - content:function(){ - player.storage.kqizhou=true; - } - } - } - }, - jingcu:{ - enable:'phaseUse', - filter:function(event,player){ - return player.maxHp>1; - }, - content:function(){ - 'step 0' - player.loseMaxHp(true); - 'step 1' - player.draw(2); - }, - ai:{ - order:1.5, - threaten:1.4, - result:{ - player:function(player){ - if(player.isDamaged()) return 1; - if(player.hp>=3&&!player.needsToDiscard(2)) return 1; - return 0; - } - } - }, - }, - shengzhang:{ - trigger:{player:'phaseDiscardEnd'}, - forced:true, - filter:function(event,player){ - return event.cards&&event.cards.length>0; - }, - content:function(){ - player.gainMaxHp(true); - } - }, - pyuhuo:{ - unique:true, - skillAnimation:true, - animationColor:'fire', - trigger:{player:'dying'}, - priority:10, - filter:function(event,player){ - return player.storage.pyuhuo!='over'; - }, - forced:true, - content:function(){ - 'step 0' - player.discard(player.getCards('hej')); - 'step 1' - player.link(false); - 'step 2' - player.turnOver(false); - 'step 3' - if(player.storage.pyuhuo){ - player.storage.pyuhuo='over'; - player.awakenSkill('pyuhuo'); - player.hp=6; - player.maxHp=6; - player.draw(6); - player.setAvatar('hs_pyros','hs_pyros2'); - } - else{ - player.storage.pyuhuo=true; - player.hp=4; - player.maxHp=4; - player.draw(4); - player.setAvatar('hs_pyros','hs_pyros1'); - } - }, - ai:{ - threaten:function(player,target){ - if(target.storage.pyuhuo!='over') return 0.6; - return 1; - } - } - }, - mengye:{ - trigger:{player:'phaseEnd'}, - direct:true, - filter:function(event,player){ - return game.hasPlayer(function(current){ - return current!=player&¤t.countCards('h'); - }); - }, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('mengye'),function(card,player,target){ - return target.countCards('h')>0; - }).ai=function(target){ - if(target.hasSkillTag('nodu')) return get.attitude(player,target)*1.5; - if(target.hasCard(function(card){ - return card.name!='du'; - })){ - return -get.attitude(player,target); - } - return -get.attitude(player,target)/5; - } - 'step 1' - if(result.bool){ - var target=result.targets[0]; - player.logSkill('mengye',target); - var card=target.getCards('h',function(card){ - return card.name!='du'; - }).randomGet(); - if(card){ - card.init([card.suit,card.number,'du']); - } - target.changeHujia(); - game.log(target,'将一张手牌转化为',{name:'du'}); - } - }, - ai:{ - threaten:1.5 - } - }, - mengye_old:{ - trigger:{player:'phaseAfter'}, - priority:-50, - direct:true, - filter:function(event,player){ - if(get.mode()=='identity'&&_status.mode=='zhong'&& - game.zhu&&!game.zhu.isZhu&&player==game.zhong){ - return false; - } - if(_status.noswap){ - return false; - } - return !player.isTurnedOver(); - }, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('mengye'),function(card,player,target){ - if(target==player){ - return false; - } - if(get.mode()=='identity'&&_status.mode=='zhong'&&game.zhu&&!game.zhu.isZhu){ - return target==game.zhong; - } - if(target.identity=='zhu'||get.is.jun(target)) return false; - return true; - }).ai=function(target){ - var att=-get.attitude(player,target); - if(att<=0) return 0; - if(target.needsToDiscard()) att+=3; - else if(target.needsToDiscard(1)) att++; - else if(target.countCards()<=3){ - return 0; - } - return att+target.countCards('h')+get.threaten(target); - }; - 'step 1' - if(result.bool){ - var target=result.targets[0]; - player.logSkill('mengye',target); - target.storage.mengye2=player; - target.storage.mengye4=target.ai.shown; - target.addSkill('mengye2'); - event.target=target; - player.turnOver(); - } - else{ - event.finish(); - } - 'step 2' - game.delay(); - 'step 3' - var target=event.target; - if(player==game.me){ - game.swapPlayerAuto(target); - target.storage.mengye3=true; - } - else{ - target.addSkill('mad'); - target.unmarkSkill('mad'); - } - player.out('mengye'); - target.insertPhase(); - }, - ai:{ - threaten:2 - } - }, - mengye2:{ - temp:true, - mark:'character', + group:['qianfu2_damage','qianfu2_phase','qianfu2_revive'], + subSkill:{ + damage:{ + trigger:{player:'damageBefore'}, + filter:function(event){ + if(event.nature!='fire') return true; + return false; + }, + mark:true, + forced:true, + content:function(){ + trigger.cancel(); + }, + ai:{ + nothunder:true, + nodamage:true, + effect:{ + target:function(card,player,target,current){ + if(get.tag(card,'damage')&&!get.tag(card,'fireDamage')) return [0,0]; + } + }, + }, + }, + phase:{ + trigger:{player:'phaseBefore'}, + forced:true, + popup:false, + content:function(){ + trigger.cancel(); + } + }, + revive:{ + trigger:{player:'recoverAfter'}, + forced:true, + filter:function(event,player){ + return player.hp>=3||player.isHealthy(); + }, + content:function(){ + player.removeSkill('qianfu2'); + player.draw(3); + player.setAvatar('hs_selajin','hs_selajin'); + } + } + } + }, + shimo:{ + trigger:{global:'damageAfter'}, + forced:true, + filter:function(event,player){ + return event.player!=player&&get.distance(player,event.player)<=1; + }, + content:function(){ + if(player.isDamaged()){ + player.recover(); + } + else{ + player.draw(); + } + } + }, + lieyang:{ + trigger:{player:'useCard'}, + forced:true, + usable:3, + filter:function(event,player){ + return _status.currentPhase==player&&get.type(event.card,'trick')=='trick'; + }, + content:function(){ + var list=get.inpile('trick','trick'); + player.gain(game.createCard(list.randomGet()),'draw'); + if(player.storage.counttrigger&&player.storage.counttrigger.lieyang>=3){ + player.addTempSkill('lieyang2'); + } + }, + ai:{ + threaten:1.8 + } + }, + lieyang2:{ + mod:{ + cardEnabled:function(card){if(get.type(card,'trick')=='trick') return false} + } + }, + zhuilie:{ + trigger:{player:'phaseBegin'}, + direct:true, + filter:function(event,player){ + return player.countCards('he'); + }, + content:function(){ + 'step 0' + player.chooseToDiscard('he',get.prompt('zhuilie')).set('ai',function(card){ + if(player.hp>=4||(player.hasSha()&&player.hasShan())){ + return 6-get.value(card); + } + if(player.hasSha()||player.hasShan()){ + return 3-get.value(card); + } + return 0; + }).logSkill='zhuilie'; + 'step 1' + if(result.bool){ + var list=[]; + var list2=[]; + for(var i=0;i<6&&i3){ + player.draw(); + } + } + } + }, + szbianshen:{ + trigger:{player:'phaseBefore'}, + unique:true, + skillAnimation:true, + forceunique:true, + filter:function(){ + return game.roundNumber>=3; + }, + check:function(event,player){ + return player.hp<=2; + }, + content:function(){ + 'step 0' + var list=get.gainableCharacters(function(info){ + return info[2]>=5; + }); + var players=game.players.concat(game.dead); + for(var i=0;i
【'+ + translation+'】
'+lib.translate[list[i]+'_info']+'
'); + item.firstChild.addEventListener('click',clickItem); + item.firstChild.link=list[i]; + } + } + dialog.add(ui.create.div('.placeholder')); + event.switchToAuto=function(){ + event._result=event.skillai(); + dialog.close(); + game.resume(); + }; + _status.imchoosing=true; + game.pause(); + } + else{ + event._result=event.skillai(); + } + 'step 1' + _status.imchoosing=false; + var link=result; + player.addSkill(link,true); + player.popup(link); + game.log(player,'获得了技能','【'+get.translation(link)+'】'); + game.delay(); + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(get.type(card,'trick')=='trick'&&player==target) return [1,1]; + } + } + } + }, + kqizhou:{ + trigger:{player:'phaseBegin'}, + direct:true, + filter:function(event,player){ + return player.storage.kqizhou; + }, + content:function(){ + 'step 0' + delete player.storage.kqizhou; + var list=[['','','hsqizhou_feng'], + ['','','hsqizhou_shui'], + ['','','hsqizhou_huo'], + ['','','hsqizhou_tu']]; + var dialog=ui.create.dialog(get.prompt('kqizhou'),[list,'vcard'],'hidden'); + var shui=(player.hp<=1&&player.maxHp>=3); + var tu=game.hasPlayer(function(current){ + return current.hp==1&&get.attitude(player,current)>0; + }); + player.chooseButton(dialog).ai=function(button){ + if(!player.hasFriend()&&button.link[2]=='hsqizhou_tu') return 0; + if(player.isHealthy()&&button.link[2]=='hsqizhou_shui') return 0; + if(shui&&button.link[2]=='hsqizhou_shui') return 3; + if(tu&&button.link[2]=='hsqizhou_tu') return 2; + return Math.random(); + }; + 'step 1' + if(result.buttons){ + player.logSkill('kqizhou'); + player.gain(game.createCard(result.buttons[0].link[2]),'draw'); + } + }, + group:'kqizhou_add', + subSkill:{ + add:{ + trigger:{player:'useCard'}, + silent:true, + filter:function(event,player){ + return _status.currentPhase==player&&get.type(event.card,'trick')=='trick'; + }, + content:function(){ + player.storage.kqizhou=true; + } + } + } + }, + jingcu:{ + enable:'phaseUse', + filter:function(event,player){ + return player.maxHp>1; + }, + content:function(){ + 'step 0' + player.loseMaxHp(true); + 'step 1' + player.draw(2); + }, + ai:{ + order:1.5, + threaten:1.4, + result:{ + player:function(player){ + if(player.isDamaged()) return 1; + if(player.hp>=3&&!player.needsToDiscard(2)) return 1; + return 0; + } + } + }, + }, + shengzhang:{ + trigger:{player:'phaseDiscardEnd'}, + forced:true, + filter:function(event,player){ + return event.cards&&event.cards.length>0; + }, + content:function(){ + player.gainMaxHp(true); + } + }, + pyuhuo:{ + unique:true, + skillAnimation:true, + animationColor:'fire', + trigger:{player:'dying'}, + priority:10, + filter:function(event,player){ + return player.storage.pyuhuo!='over'; + }, + forced:true, + content:function(){ + 'step 0' + player.discard(player.getCards('hej')); + 'step 1' + player.link(false); + 'step 2' + player.turnOver(false); + 'step 3' + if(player.storage.pyuhuo){ + player.storage.pyuhuo='over'; + player.awakenSkill('pyuhuo'); + player.hp=6; + player.maxHp=6; + player.draw(6); + player.setAvatar('hs_pyros','hs_pyros2'); + } + else{ + player.storage.pyuhuo=true; + player.hp=4; + player.maxHp=4; + player.draw(4); + player.setAvatar('hs_pyros','hs_pyros1'); + } + }, + ai:{ + threaten:function(player,target){ + if(target.storage.pyuhuo!='over') return 0.6; + return 1; + } + } + }, + mengye:{ + trigger:{player:'phaseEnd'}, + direct:true, + filter:function(event,player){ + return game.hasPlayer(function(current){ + return current!=player&¤t.countCards('h'); + }); + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('mengye'),function(card,player,target){ + return target.countCards('h')>0; + }).ai=function(target){ + if(target.hasSkillTag('nodu')) return get.attitude(player,target)*1.5; + if(target.hasCard(function(card){ + return card.name!='du'; + })){ + return -get.attitude(player,target); + } + return -get.attitude(player,target)/5; + } + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('mengye',target); + var card=target.getCards('h',function(card){ + return card.name!='du'; + }).randomGet(); + if(card){ + card.init([card.suit,card.number,'du']); + } + target.changeHujia(); + game.log(target,'将一张手牌转化为',{name:'du'}); + } + }, + ai:{ + threaten:1.5 + } + }, + mengye_old:{ + trigger:{player:'phaseAfter'}, + priority:-50, + direct:true, + filter:function(event,player){ + if(get.mode()=='identity'&&_status.mode=='zhong'&& + game.zhu&&!game.zhu.isZhu&&player==game.zhong){ + return false; + } + if(_status.noswap){ + return false; + } + return !player.isTurnedOver(); + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('mengye'),function(card,player,target){ + if(target==player){ + return false; + } + if(get.mode()=='identity'&&_status.mode=='zhong'&&game.zhu&&!game.zhu.isZhu){ + return target==game.zhong; + } + if(target.identity=='zhu'||get.is.jun(target)) return false; + return true; + }).ai=function(target){ + var att=-get.attitude(player,target); + if(att<=0) return 0; + if(target.needsToDiscard()) att+=3; + else if(target.needsToDiscard(1)) att++; + else if(target.countCards()<=3){ + return 0; + } + return att+target.countCards('h')+get.threaten(target); + }; + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('mengye',target); + target.storage.mengye2=player; + target.storage.mengye4=target.ai.shown; + target.addSkill('mengye2'); + event.target=target; + player.turnOver(); + } + else{ + event.finish(); + } + 'step 2' + game.delay(); + 'step 3' + var target=event.target; + if(player==game.me){ + game.swapPlayerAuto(target); + target.storage.mengye3=true; + } + else{ + target.addSkill('mad'); + target.unmarkSkill('mad'); + } + player.out('mengye'); + target.insertPhase(); + }, + ai:{ + threaten:2 + } + }, + mengye2:{ + temp:true, + mark:'character', vanish:true, - intro:{ - content:'由$控制本回合行动' - }, - init:function(player){ - player.ai.modAttitudeFrom=function(from,to){ - return get.attitude(player.storage.mengye2,to); - } - player.ai.modAttitudeTo=function(from,to,att){ - if(from!=to) return 0; - return att; - } - }, - onremove:function(player){ - delete player.ai.modAttitudeFrom; - delete player.ai.modAttitudeTo; - delete player.storage.mengye2; - delete player.storage.mengye3; - delete player.storage.mengye4; - }, - trigger:{player:['phaseAfter','dieBegin']}, - forced:true, - popup:false, - content:function(){ - player.storage.mengye2.in('mengye'); - if(player==game.me&&player.storage.mengye3){ - game.swapPlayerAuto(player.storage.mengye2); - } - if(typeof player.ai.shown=='number'){ - player.ai.shown=player.storage.mengye4; - } - player.removeSkill('mad'); - player.removeSkill('mengye2'); - } - }, - mengye3:{}, - lianzhan:{ - trigger:{source:'damageEnd'}, - forced:true, - content:function(){ - if(player.getStat().damage>trigger.num){ - player.gainMaxHp(); - player.recover(); - } - else{ - player.draw(2); - } - }, - ai:{ + intro:{ + content:'由$控制本回合行动' + }, + init:function(player){ + player.ai.modAttitudeFrom=function(from,to){ + return get.attitude(player.storage.mengye2,to); + } + player.ai.modAttitudeTo=function(from,to,att){ + if(from!=to) return 0; + return att; + } + }, + onremove:function(player){ + delete player.ai.modAttitudeFrom; + delete player.ai.modAttitudeTo; + delete player.storage.mengye2; + delete player.storage.mengye3; + delete player.storage.mengye4; + }, + trigger:{player:['phaseAfter','dieBegin']}, + forced:true, + popup:false, + content:function(){ + player.storage.mengye2.in('mengye'); + if(player==game.me&&player.storage.mengye3){ + game.swapPlayerAuto(player.storage.mengye2); + } + if(typeof player.ai.shown=='number'){ + player.ai.shown=player.storage.mengye4; + } + player.removeSkill('mad'); + player.removeSkill('mengye2'); + } + }, + mengye3:{}, + lianzhan:{ + trigger:{source:'damageEnd'}, + forced:true, + content:function(){ + if(player.getStat().damage>trigger.num){ + player.gainMaxHp(); + player.recover(); + } + else{ + player.draw(2); + } + }, + ai:{ damageBonus:true } - }, - lianzhan2:{}, - kuixin:{ - trigger:{player:'phaseEnd'}, - direct:true, - filter:function(event,player){ - return game.hasPlayer(function(current){ - if(current==player) return false; - var nh=current.countCards('h'); - return nh&&nh>=player.countCards('h'); - }); - }, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('kuixin'),function(card,player,target){ - if(target==player) return false; - var nh=target.countCards('h'); - return nh&&nh>=player.countCards('h'); - }).ai=function(target){ - var att=get.attitude(player,target); - if(target.hasSkillTag('noe')){ - att/=3; - } - return -att; - } - 'step 1' - if(result.bool){ - var target=result.targets[0]; - var card=target.getCards('h').randomGet(); - if(card){ - player.logSkill('kuixin',target); - player.gain(card,target); - target.$giveAuto(card,player); - } - } - } - }, - fuhua:{ - enable:'phaseUse', - filterCard:{name:'du'}, - check:function(){return 1}, - filterTarget:function(card,player,target){ - return !target.hasSkill('moxie')&&!target.storage.fuhua_failed; - }, - filter:function(event,player){ - return player.countCards('h','du'); - }, - discard:false, - prepare:'give', - content:function(){ - 'step 0' - target.gain(cards,player); - var choice=1; - if(get.attitude(target,player)>0||(target.hp<=1&&!target.hasSha())){ - choice=0; - } - target.chooseControl(function(){ - return choice; - }).set('choiceList',['获得技能魔血,每个出牌阶段开始时需交给'+get.translation(player)+'一张牌', - '视为'+get.translation(player)+'对你使用一张决斗,若你赢,本局不能再成为腐化目标']); - 'step 1' - if(result.index==0){ - target.storage.fuhua2=player; - target.addSkill('fuhua2'); - target.addSkill('moxie'); - } - else{ - player.useCard({name:'juedou'},target); - } - }, - ai:{ - threaten:1.5, - order:8, - expos:0.2, - result:{ - player:function(player,target){ - if(player.countCards('h')<=2) return 0; - if(get.attitude(target,player)>0) return 1; - if(get.effect(target,{name:'juedou'},player,player)>0) return 1.5; - return 0; - } - } - }, - group:'fuhua3' - }, - fuhua2:{ - trigger:{player:'phaseUseBegin'}, - forced:true, - filter:function(event,player){ - return player.storage.fuhua2.isIn()&&player.countCards('he')>0; - }, - mark:'character', - intro:{ - content:function(storage){ - return '每个出牌阶段开始时需交给'+get.translation(storage)+'一张牌'; - } - }, - content:function(){ - 'step 0' - player.chooseCard('he',true,'交给'+get.translation(player.storage.fuhua2)+'一张牌'); - 'step 1' - if(result.bool){ - player.storage.fuhua2.gain(result.cards,player); - player.$give(result.cards,player.storage.fuhua2); - player.line(player.storage.fuhua2,'green'); - } - }, - group:'fuhua2_remove', - onremove:true, - subSkill:{ - remove:{ - trigger:{global:'dieAfter'}, - forced:true, - popup:false, - filter:function(event,player){ - return event.player==player.storage.fuhua2; - }, - content:function(){ - player.removeSkill('fuhua2'); - } - } - } - }, - fuhua3:{ - trigger:{player:'damageBefore'}, - forced:true, - popup:false, - filter:function(event,player){ - var evt=event.getParent(3); - return evt.name=='fuhua'&&evt.target==event.source; - }, - content:function(){ - trigger.getParent(3).target.storage.fuhua_failed=true; - } - }, - moxie:{ - trigger:{player:'duBegin'}, - forced:true, - content:function(){ - player.draw(2); - }, - ai:{ - threaten:1.2, - nodu:true, - usedu:true, - }, - group:'moxie2' - }, - moxie2:{ - trigger:{player:'phaseEnd'}, - forced:true, - filter:function(event,player){ - return player.countCards('h')>0; - }, - content:function(){ - var hs=player.getCards('h'); - for(var i=0;iplayer.hp; - }); - }, - logTarget:function(event,player){ - return game.filterPlayer(function(current){ - return current.hp>player.hp; - }); - }, - content:function(){ - 'step 0' - event.targets=game.filterPlayer(function(current){ - return current.hp>player.hp; - }); - event.targets.sortBySeat(); - 'step 1' - if(event.targets.length){ - event.target=event.targets.shift(); - if(event.target.countCards('he',{color:'black'})){ - event.target.chooseCard('he','交给'+get.translation(player)+'一张黑色牌,或失去一点体力',{color:'black'}).ai=function(card){ - if(get.attitude(event.target,player)>0) return 10-get.value(card); - return 7-get.value(card); - } - } - else{ - event.target.loseHp(); - event.redo(); - } - } - else{ - event.finish(); - } - 'step 2' - if(result.bool){ - player.gain(result.cards,event.target); - if(get.position(result.cards[0])=='e'){ - event.target.$give(result.cards,player); - } - else{ - event.target.$give(result.cards.length,player); - } - } - else{ - event.target.loseHp(); - } - event.goto(1); - } - }, - gfuhun:{ - trigger:{player:'phaseEnd'}, - direct:true, - filter:function(event,player){ - return player.countCards('h')>0&&!player.isTurnedOver(); - }, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('gfuhun'),function(card,player,target){ - return target!=player&&target.countCards('h')>0; - }).ai=function(target){ - return -get.attitude(player,target); - } - 'step 1' - if(result.bool){ - player.logSkill('gfuhun',result.targets); - event.target=result.targets[0]; - player.chooseToCompare(event.target); - } - else{ - event.finish(); - } - 'step 2' - if(result.bool){ - event.target.goMad({player:'phaseAfter'}); - if(!player.isTurnedOver()) player.turnOver(); - } - }, - ai:{ - expose:0.2, - threaten:1.5 - } - }, - qianhou:{ - trigger:{player:'phaseBegin'}, - forced:true, - content:function(){ - 'step 0' - var list=[]; - for(var i=0;i0&&info.selectTarget[1]>=info.selectTarget[0]){ - list.push(lib.inpile[i]); - } - } - else if(typeof info.selectTarget=='number'){ - list.push(lib.inpile[i]); - } - } - } - } - while(list.length){ - var card={name:list.randomRemove()}; - var info=get.info(card); - var targets=game.filterPlayer(function(current){ - return lib.filter.filterTarget(card,player,current); - }); - if(targets.length){ - targets.sort(lib.sort.seat); - if(info.selectTarget!=-1){ - var num=info.selectTarget; - if(Array.isArray(num)){ - if(targets.length0; - }, - content:function(){ - "step 0" - var next=player.chooseToDiscard(get.prompt('zhongji',trigger.player),{color:'black'}); - next.logSkill=['zhongji',trigger.player]; - next.ai=function(card){ - if(get.attitude(player,trigger.player)<0){ - return 7-get.value(card); - } - return -1; - } - "step 1" - if(result.bool){ - trigger.num++; - } - }, - ai:{ - threaten:1.3 - } - }, - fuwen:{ - trigger:{player:'phaseDiscardEnd'}, - frequent:true, - filter:function(event,player){ - if(event.cards){ - for(var i=0;i0; - }, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('jinzhou'),function(card,player,target){ - return target!=player&&!target.hasSkill('fengyin'); - }).ai=function(target){ - var att=get.attitude(player,target); - if(att>=0) return 0; - var skills=target.getSkills(); - for(var i=0;i0; - }, - filterCard:{type:['trick','delay']}, - check:function(card){ - return 10-get.value(card); - }, - content:function(){ - var list=get.inpile('trick','trick'); - var list2=[]; - for(var i=0;i<3;i++){ - list2.push(game.createCard(list.randomGet())); - } - player.gain(list2,'draw'); - }, - ai:{ - order:9.8, - threaten:1.8, - result:{ - player:1 - } - } - }, - xingluo:{ - trigger:{player:'phaseBegin'}, - direct:true, - filter:function(event,player){ - return !player.isMaxHandcard(); - }, - content:function(){ - 'step 0' - var nh=player.countCards('h'); - var num=game.countPlayer(function(current){ - return current.countCards('h')>nh; - }); - player.chooseTarget(get.prompt('xingluo'),[1,num],function(card,player,target){ - return target.countCards('h')>nh; - }).ai=function(target){ - return 0.5-get.attitude(player,target); - } - 'step 1' - if(result.bool){ - event.cards=[]; - event.list=result.targets.slice(0); - event.list.sort(lib.sort.seat); - player.logSkill('xingluo',result.targets); - } - else{ - event.finish(); - } - 'step 2' - if(event.list.length){ - event.list.shift().chooseToDiscard('h',true); - } - else{ - event.goto(4); - } - 'step 3' - if(result.bool&&result.cards.length){ - event.cards.push(result.cards[0]); - } - event.goto(2); - 'step 4' - if(event.cards.length){ - player.chooseCardButton('选择一张加入手牌',event.cards).ai=function(button){ - return get.value(button.link); - }; - } - else{ - event.finish(); - } - 'step 5' - if(result.bool){ - player.gain(result.links,'gain2'); - } - }, - ai:{ - expose:0.2 - } - }, - yuelu:{ - enable:'chooseToUse', - filter:function(event,player){ - return event.type=='dying'&&player.countCards('he',{color:'black'}); - }, - alter:true, - filterCard:{color:'black'}, - position:'he', - check:function(card){ - return 11-get.value(card); - }, - filterTarget:function(card,player,target){ - return target==_status.event.dying; - }, - selectTarget:-1, - content:function(){ - target.recover(); - if(!get.is.altered('yuelu')) target.changeHujia(); - }, - ai:{ - order:10, - skillTagFilter:function(player){ - if(player.countCards('he',{color:'black'})==0) return false; - }, - save:true, - result:{ - target:3 - }, - threaten:2.5 - }, - }, - yushou:{ - enable:'phaseUse', - filterCard:true, - position:'he', - check:function(card){ - return 5-get.value(card); - }, - filter:function(event,player){ - if(player.hasSkill('yushou_misha')&&player.hasSkill('yushou_huofu')&&player.hasSkill('yushou_leiouke')) return false; - return true; - }, - content:function(){ - if(!lib.character.stone_misha){ - lib.character.stone_misha=['male','shu',3,['chaofeng'],['minskin','stone','mode:stone'],[3,3,'hunter']]; - } - if(!lib.character.stone_huofu){ - lib.character.stone_huofu=['male','qun',2,['stone_chongfeng'],['minskin','stone','mode:stone'],[3,4,'hunter']]; - } - if(!lib.character.stone_leiouke){ - lib.character.stone_leiouke=['male','shu',2,['hunter_zhanhuo'],['minskin','stone','mode:stone'],[3,1,'hunter']]; - } - var list=['misha','leiouke','huofu']; - for(var i=0;i=1; - }, - content:function(){ - player.changeHujia(); - }, - ai:{ - effect:{ - target:function(card,player,target){ - if(get.tag(card,'damage')){ - if(player.hasSkillTag('jueqing',false,target)) return; - return 0.6; - } - } - } - }, - }, - yushou_huofu:{ - enable:'phaseUse', - viewAs:{name:'juedou'}, - filterCard:{color:'black'}, - position:'he', - viewAsFilter:function(player){ - if(!player.countCards('he',{color:'black'})) return false; - }, - check:function(card){ - return 6-get.value(card); - }, - ai:{ - basic:{ - order:10 - } - } - }, - yushou_leiouke:{ - trigger:{source:'damageBegin'}, - forced:true, - usable:1, - content:function(){ - trigger.num++; - } - }, - qingzun:{ - alter:true, - subSkill:{ - count:{ - trigger:{player:'useCard'}, - silent:true, - filter:function(event,player){ - return event.card.name.indexOf('hsqingyu_')==0; - }, - content:function(){ - player.storage.qingzun++; - player.updateMarks(); - } - }, - draw1:{ - trigger:{player:'phaseBegin'}, - filter:function(event,player){ - if(get.is.altered('qingzun')) return player.storage.qingzun>=3; - return player.storage.qingzun>=2; - }, - frequent:true, - content:function(){ - player.draw(); - } - }, - draw2:{ - trigger:{player:'phaseEnd'}, - filter:function(event,player){ - if(get.is.altered('qingzun')) return player.storage.qingzun>=9; - return player.storage.qingzun>=6; - }, - frequent:true, - content:function(){ - player.draw(); - } - }, - }, - mod:{ - maxHandcard:function(player,num){ - return num+player.storage.qingzun; - } - }, - init:function(player){ - player.storage.qingzun=0; - }, - mark:true, - marktext:'玉', - intro:{ - content:function(storage,player){ - if(!storage) return '未使用过青玉牌'; - var str='手牌上限+'+storage; - var num1,num2; - if(get.is.altered('qingzun')){ - num1=3; - num2=9; - } - else{ - num1=2; - num2=6; - } - if(storage>=num2){ - str+=';准备阶段和结束阶段,你可以摸一张牌' - } - else if(storage>=num1){ - str+=';准备阶段,你可以摸一张牌' - } - return str; - } - }, - group:['qingzun_count','qingzun_draw1','qingzun_draw2'], - }, - ayuling:{ - trigger:{player:'damageEnd'}, - frequent:true, - content:function(){ - var list=['feibiao','hufu','zhao','zhanfang','shandian']; - player.gain(game.createCard('hsqingyu_'+list.randomGet()),'draw'); - }, - ai:{ - maixie:true, - maixie_hp:true, - effect:{ - target:function(card,player,target){ - if(get.tag(card,'damage')){ - if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; - if(!target.hasFriend()) return; - if(target.hp>=4) return [1,get.tag(card,'damage')*2]; - if(target.hp==3) return [1,get.tag(card,'damage')*1.5]; - if(target.hp==2) return [1,get.tag(card,'damage')*0.5]; - } - } - } - } - }, - aoshu:{ - enable:'phaseUse', - usable:1, - position:'he', - filterCard:function(card){ - return get.suit(card)=='spade'; - }, - viewAs:{name:'wuzhong'}, - viewAsFilter:function(player){ - if(!player.countCards('he',{suit:'spade'})) return false; - }, - prompt:'将一张黑桃牌当作无中生有使用', - check:function(card){return 7-get.value(card)}, - ai:{ - threaten:1.4, - order:9, - } - }, - bzhuiji:{ - trigger:{global:'dieAfter'}, - check:function(event,player){ - return get.attitude(player,event.source)<=0; - }, - filter:function(event,player){ - return event.source&&event.source.isAlive()&&event.source!=player; - }, - content:function(){ - player.draw(2); - player.useCard({name:'juedou'},trigger.source); - }, - ai:{ - threaten:1.5, - expose:0.1 - } - }, - lianjin_old:{ - enable:'phaseUse', - usable:2, - filterCard:true, - check:function(card){ - return 7-get.value(card); - }, - content:function(){ - 'step 0' - var list=get.inpile('trick'); - list=list.randomGets(3); - for(var i=0;i=2) continue; - if(names.length>=3) continue; - var select=get.select(info.selectTarget); - if(select[0]==-1&&select[1]==-1){ - names.push(inpile[i]); - if(info.modTarget) single=true; - } - else if(select[0]==1&&select[1]==1){ - names.push(inpile[i]); - single=true; - } - } - if(equip){ - names.push(equips.randomGet()); - } - names.sort(lib.sort.name); - var name='hsyaoshui_'+names[0]+'_'+names[1]+'_'+names[2]; - if(!lib.card[name]){ - lib.card[name]=get.copy(lib.skill.lianjin.template); - lib.card[name].names=names; - lib.card[name].selectTarget=single?1:-1; - lib.translate[name]='药水'; - lib.translate[name+'_info']=get.translation(names[0])+'、'+ - get.translation(names[1])+'、'+get.translation(names[2]); - } - var fakecard=game.createCard(name,cards[0].suit,cards[0].number); - player.gain(fakecard,'gain2'); - // cards[0].style.transitionDuration='0.2s'; - // ui.refresh(cards[0]); - // cards[0].classList.add('opaque'); - // event.cardname=name; - // if(player!=game.me){ - // var fakecard=game.createCard(name); - // fakecard.node.info.remove(); - // player.$draw(fakecard); - // } - // game.delay(0,200); - // stp 1 - // cards[0].style.transitionDuration='0s'; - // ui.refresh(cards[0]); - // cards[0].classList.remove('fullskin'); - // cards[0].init([cards[0].suit,cards[0].number,event.cardname]); - // game.delay(0,100); - // stp 2 - // cards[0].style.transitionDuration=''; - // ui.refresh(cards[0]); - // cards[0].classList.remove('opaque'); - // game.delay(0,200); - }, - template:{ - type:'hsyaoshui', - enable:true, - fullimage:true, - image:'card/hsyaoshui', - vanish:true, - derivation:'hs_kazhakusi', - multitarget:true, - multiline:true, - filterTarget:function(card,player,target){ - var info=get.info(card); - var names=info.names; - for(var i=0;i=3) return -1; - var num=0; - for(var i=0;i0){ - num++; - } - else if(eff<0){ - num-=0.9; - } - } - return num; - } - } - } - }, - ai:{ - order:9, - result:{ - player:1 - }, - threaten:1.4 - }, - group:'lianjin_discard', - subSkill:{ - discard:{ - trigger:{player:'discardAfter'}, - forced:true, - filter:function(event){ - for(var i=0;i0; - }, - content:function(){ - player.gain(game.createCard(trigger.target.getCards('h').randomGet()),'draw'); - } - }, - miss:{ - trigger:{player:'shaMiss'}, - frequent:true, - usable:1, - filter:function(event){ - return event.target.hasCard(function(card){ - return !get.info(card).unique; - },'e'); - }, - content:function(){ - player.gain(game.createCard(trigger.target.getCards('e',function(card){ - return !get.info(card).unique; - }).randomGet()),'draw'); - } - } - } - }, - yingxi:{ - trigger:{player:'phaseEnd'}, - direct:true, - filter:function(event,player){ - return !player.getStat('damage')&&player.countCards('he',{color:'black'})>0; - }, - content:function(){ - 'step 0' - player.chooseCardTarget({ - prompt:get.prompt('yingxi'), - filterCard:{color:'black'}, - filterTarget:function(card,player,target){ - return lib.filter.targetEnabled({name:'sha'},player,target); - }, - position:'he', - ai1:function(card){ - return 8-get.value(card); - }, - ai2:function(target){ - return get.effect(target,{name:'sha'},player,player); - } - }); - 'step 1' - if(result.bool){ - player.useCard({name:'sha'},result.cards,result.targets,'yingxi'); - } - }, - group:'yingxi2', - }, - yingxi2:{ - trigger:{player:'shaBegin'}, - forced:true, - popup:false, - filter:function(event,player){ - return event.skill=='yingxi'&&event.target.isHealthy(); - }, - content:function(){ - trigger.directHit=true; - } - }, - guimou:{ - trigger:{player:'damageEnd'}, - check:function(event,player){ - return get.attitude(player,event.source)<=0; - }, - filter:function(event,player){ - return event.source&&event.source.isAlive()&&event.source!=player&&event.source.countCards('h')>0; - }, - logTarget:'source', - content:function(){ - var card=trigger.source.getCards('h').randomGet(); - if(card){ - player.gain(card,trigger.source); - if(get.color(card)=='black'){ - trigger.source.$give(card,player); - event.redo(); - } - else{ - trigger.source.$giveAuto(card,player); - } - game.delay(0.5); - } - }, - ai:{ - maixie:true, - maixie_hp:true, + }, + lianzhan2:{}, + kuixin:{ + trigger:{player:'phaseEnd'}, + direct:true, + filter:function(event,player){ + return game.hasPlayer(function(current){ + if(current==player) return false; + var nh=current.countCards('h'); + return nh&&nh>=player.countCards('h'); + }); + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('kuixin'),function(card,player,target){ + if(target==player) return false; + var nh=target.countCards('h'); + return nh&&nh>=player.countCards('h'); + }).ai=function(target){ + var att=get.attitude(player,target); + if(target.hasSkillTag('noe')){ + att/=3; + } + return -att; + } + 'step 1' + if(result.bool){ + var target=result.targets[0]; + var card=target.getCards('h').randomGet(); + if(card){ + player.logSkill('kuixin',target); + player.gain(card,target); + target.$giveAuto(card,player); + } + } + } + }, + fuhua:{ + enable:'phaseUse', + filterCard:{name:'du'}, + check:function(){return 1}, + filterTarget:function(card,player,target){ + return !target.hasSkill('moxie')&&!target.storage.fuhua_failed; + }, + filter:function(event,player){ + return player.countCards('h','du'); + }, + discard:false, + prepare:'give', + content:function(){ + 'step 0' + target.gain(cards,player); + var choice=1; + if(get.attitude(target,player)>0||(target.hp<=1&&!target.hasSha())){ + choice=0; + } + target.chooseControl(function(){ + return choice; + }).set('choiceList',['获得技能魔血,每个出牌阶段开始时需交给'+get.translation(player)+'一张牌', + '视为'+get.translation(player)+'对你使用一张决斗,若你赢,本局不能再成为腐化目标']); + 'step 1' + if(result.index==0){ + target.storage.fuhua2=player; + target.addSkill('fuhua2'); + target.addSkill('moxie'); + } + else{ + player.useCard({name:'juedou'},target); + } + }, + ai:{ + threaten:1.5, + order:8, + expos:0.2, + result:{ + player:function(player,target){ + if(player.countCards('h')<=2) return 0; + if(get.attitude(target,player)>0) return 1; + if(get.effect(target,{name:'juedou'},player,player)>0) return 1.5; + return 0; + } + } + }, + group:'fuhua3' + }, + fuhua2:{ + trigger:{player:'phaseUseBegin'}, + forced:true, + filter:function(event,player){ + return player.storage.fuhua2.isIn()&&player.countCards('he')>0; + }, + mark:'character', + intro:{ + content:function(storage){ + return '每个出牌阶段开始时需交给'+get.translation(storage)+'一张牌'; + } + }, + content:function(){ + 'step 0' + player.chooseCard('he',true,'交给'+get.translation(player.storage.fuhua2)+'一张牌'); + 'step 1' + if(result.bool){ + player.storage.fuhua2.gain(result.cards,player); + player.$give(result.cards,player.storage.fuhua2); + player.line(player.storage.fuhua2,'green'); + } + }, + group:'fuhua2_remove', + onremove:true, + subSkill:{ + remove:{ + trigger:{global:'dieAfter'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.player==player.storage.fuhua2; + }, + content:function(){ + player.removeSkill('fuhua2'); + } + } + } + }, + fuhua3:{ + trigger:{player:'damageBefore'}, + forced:true, + popup:false, + filter:function(event,player){ + var evt=event.getParent(3); + return evt.name=='fuhua'&&evt.target==event.source; + }, + content:function(){ + trigger.getParent(3).target.storage.fuhua_failed=true; + } + }, + moxie:{ + trigger:{player:'duBegin'}, + forced:true, + content:function(){ + player.draw(2); + }, + ai:{ + threaten:1.2, + nodu:true, + usedu:true, + }, + group:'moxie2' + }, + moxie2:{ + trigger:{player:'phaseEnd'}, + forced:true, + filter:function(event,player){ + return player.countCards('h')>0; + }, + content:function(){ + var hs=player.getCards('h'); + for(var i=0;iplayer.hp; + }); + }, + logTarget:function(event,player){ + return game.filterPlayer(function(current){ + return current.hp>player.hp; + }); + }, + content:function(){ + 'step 0' + event.targets=game.filterPlayer(function(current){ + return current.hp>player.hp; + }); + event.targets.sortBySeat(); + 'step 1' + if(event.targets.length){ + event.target=event.targets.shift(); + if(event.target.countCards('he',{color:'black'})){ + event.target.chooseCard('he','交给'+get.translation(player)+'一张黑色牌,或失去一点体力',{color:'black'}).ai=function(card){ + if(get.attitude(event.target,player)>0) return 10-get.value(card); + return 7-get.value(card); + } + } + else{ + event.target.loseHp(); + event.redo(); + } + } + else{ + event.finish(); + } + 'step 2' + if(result.bool){ + player.gain(result.cards,event.target); + if(get.position(result.cards[0])=='e'){ + event.target.$give(result.cards,player); + } + else{ + event.target.$give(result.cards.length,player); + } + } + else{ + event.target.loseHp(); + } + event.goto(1); + } + }, + gfuhun:{ + trigger:{player:'phaseEnd'}, + direct:true, + filter:function(event,player){ + return player.countCards('h')>0&&!player.isTurnedOver(); + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('gfuhun'),function(card,player,target){ + return target!=player&&target.countCards('h')>0; + }).ai=function(target){ + return -get.attitude(player,target); + } + 'step 1' + if(result.bool){ + player.logSkill('gfuhun',result.targets); + event.target=result.targets[0]; + player.chooseToCompare(event.target); + } + else{ + event.finish(); + } + 'step 2' + if(result.bool){ + event.target.goMad({player:'phaseAfter'}); + if(!player.isTurnedOver()) player.turnOver(); + } + }, + ai:{ + expose:0.2, + threaten:1.5 + } + }, + qianhou:{ + trigger:{player:'phaseBegin'}, + forced:true, + content:function(){ + 'step 0' + var list=[]; + for(var i=0;i0&&info.selectTarget[1]>=info.selectTarget[0]){ + list.push(lib.inpile[i]); + } + } + else if(typeof info.selectTarget=='number'){ + list.push(lib.inpile[i]); + } + } + } + } + while(list.length){ + var card={name:list.randomRemove()}; + var info=get.info(card); + var targets=game.filterPlayer(function(current){ + return lib.filter.filterTarget(card,player,current); + }); + if(targets.length){ + targets.sort(lib.sort.seat); + if(info.selectTarget!=-1){ + var num=info.selectTarget; + if(Array.isArray(num)){ + if(targets.length0; + }, + content:function(){ + "step 0" + var next=player.chooseToDiscard(get.prompt('zhongji',trigger.player),{color:'black'}); + next.logSkill=['zhongji',trigger.player]; + next.ai=function(card){ + if(get.attitude(player,trigger.player)<0){ + return 7-get.value(card); + } + return -1; + } + "step 1" + if(result.bool){ + trigger.num++; + } + }, + ai:{ + threaten:1.3 + } + }, + fuwen:{ + trigger:{player:'phaseDiscardEnd'}, + frequent:true, + filter:function(event,player){ + if(event.cards){ + for(var i=0;i0; + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('jinzhou'),function(card,player,target){ + return target!=player&&!target.hasSkill('fengyin'); + }).ai=function(target){ + var att=get.attitude(player,target); + if(att>=0) return 0; + var skills=target.getSkills(); + for(var i=0;i0; + }, + filterCard:{type:['trick','delay']}, + check:function(card){ + return 10-get.value(card); + }, + content:function(){ + var list=get.inpile('trick','trick'); + var list2=[]; + for(var i=0;i<3;i++){ + list2.push(game.createCard(list.randomGet())); + } + player.gain(list2,'draw'); + }, + ai:{ + order:9.8, + threaten:1.8, + result:{ + player:1 + } + } + }, + xingluo:{ + trigger:{player:'phaseBegin'}, + direct:true, + filter:function(event,player){ + return !player.isMaxHandcard(); + }, + content:function(){ + 'step 0' + var nh=player.countCards('h'); + var num=game.countPlayer(function(current){ + return current.countCards('h')>nh; + }); + player.chooseTarget(get.prompt('xingluo'),[1,num],function(card,player,target){ + return target.countCards('h')>nh; + }).ai=function(target){ + return 0.5-get.attitude(player,target); + } + 'step 1' + if(result.bool){ + event.cards=[]; + event.list=result.targets.slice(0); + event.list.sort(lib.sort.seat); + player.logSkill('xingluo',result.targets); + } + else{ + event.finish(); + } + 'step 2' + if(event.list.length){ + event.list.shift().chooseToDiscard('h',true); + } + else{ + event.goto(4); + } + 'step 3' + if(result.bool&&result.cards.length){ + event.cards.push(result.cards[0]); + } + event.goto(2); + 'step 4' + if(event.cards.length){ + player.chooseCardButton('选择一张加入手牌',event.cards).ai=function(button){ + return get.value(button.link); + }; + } + else{ + event.finish(); + } + 'step 5' + if(result.bool){ + player.gain(result.links,'gain2'); + } + }, + ai:{ + expose:0.2 + } + }, + yuelu:{ + enable:'chooseToUse', + filter:function(event,player){ + return event.type=='dying'&&player.countCards('he',{color:'black'}); + }, + alter:true, + filterCard:{color:'black'}, + position:'he', + check:function(card){ + return 11-get.value(card); + }, + filterTarget:function(card,player,target){ + return target==_status.event.dying; + }, + selectTarget:-1, + content:function(){ + target.recover(); + if(!get.is.altered('yuelu')) target.changeHujia(); + }, + ai:{ + order:10, + skillTagFilter:function(player){ + if(player.countCards('he',{color:'black'})==0) return false; + }, + save:true, + result:{ + target:3 + }, + threaten:2.5 + }, + }, + yushou:{ + enable:'phaseUse', + filterCard:true, + position:'he', + check:function(card){ + return 5-get.value(card); + }, + filter:function(event,player){ + if(player.hasSkill('yushou_misha')&&player.hasSkill('yushou_huofu')&&player.hasSkill('yushou_leiouke')) return false; + return true; + }, + content:function(){ + if(!lib.character.stone_misha){ + lib.character.stone_misha=['male','shu',3,['chaofeng'],['minskin','stone','mode:stone'],[3,3,'hunter']]; + } + if(!lib.character.stone_huofu){ + lib.character.stone_huofu=['male','qun',2,['stone_chongfeng'],['minskin','stone','mode:stone'],[3,4,'hunter']]; + } + if(!lib.character.stone_leiouke){ + lib.character.stone_leiouke=['male','shu',2,['hunter_zhanhuo'],['minskin','stone','mode:stone'],[3,1,'hunter']]; + } + var list=['misha','leiouke','huofu']; + for(var i=0;i=1; + }, + content:function(){ + player.changeHujia(); + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(get.tag(card,'damage')){ + if(player.hasSkillTag('jueqing',false,target)) return; + return 0.6; + } + } + } + }, + }, + yushou_huofu:{ + enable:'phaseUse', + viewAs:{name:'juedou'}, + filterCard:{color:'black'}, + position:'he', + viewAsFilter:function(player){ + if(!player.countCards('he',{color:'black'})) return false; + }, + check:function(card){ + return 6-get.value(card); + }, + ai:{ + basic:{ + order:10 + } + } + }, + yushou_leiouke:{ + trigger:{source:'damageBegin'}, + forced:true, + usable:1, + content:function(){ + trigger.num++; + } + }, + qingzun:{ + alter:true, + subSkill:{ + count:{ + trigger:{player:'useCard'}, + silent:true, + filter:function(event,player){ + return event.card.name.indexOf('hsqingyu_')==0; + }, + content:function(){ + player.storage.qingzun++; + player.updateMarks(); + } + }, + draw1:{ + trigger:{player:'phaseBegin'}, + filter:function(event,player){ + if(get.is.altered('qingzun')) return player.storage.qingzun>=3; + return player.storage.qingzun>=2; + }, + frequent:true, + content:function(){ + player.draw(); + } + }, + draw2:{ + trigger:{player:'phaseEnd'}, + filter:function(event,player){ + if(get.is.altered('qingzun')) return player.storage.qingzun>=9; + return player.storage.qingzun>=6; + }, + frequent:true, + content:function(){ + player.draw(); + } + }, + }, + mod:{ + maxHandcard:function(player,num){ + return num+player.storage.qingzun; + } + }, + init:function(player){ + player.storage.qingzun=0; + }, + mark:true, + marktext:'玉', + intro:{ + content:function(storage,player){ + if(!storage) return '未使用过青玉牌'; + var str='手牌上限+'+storage; + var num1,num2; + if(get.is.altered('qingzun')){ + num1=3; + num2=9; + } + else{ + num1=2; + num2=6; + } + if(storage>=num2){ + str+=';准备阶段和结束阶段,你可以摸一张牌' + } + else if(storage>=num1){ + str+=';准备阶段,你可以摸一张牌' + } + return str; + } + }, + group:['qingzun_count','qingzun_draw1','qingzun_draw2'], + }, + ayuling:{ + trigger:{player:'damageEnd'}, + frequent:true, + content:function(){ + var list=['feibiao','hufu','zhao','zhanfang','shandian']; + player.gain(game.createCard('hsqingyu_'+list.randomGet()),'draw'); + }, + ai:{ + maixie:true, + maixie_hp:true, + effect:{ + target:function(card,player,target){ + if(get.tag(card,'damage')){ + if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; + if(!target.hasFriend()) return; + if(target.hp>=4) return [1,get.tag(card,'damage')*2]; + if(target.hp==3) return [1,get.tag(card,'damage')*1.5]; + if(target.hp==2) return [1,get.tag(card,'damage')*0.5]; + } + } + } + } + }, + aoshu:{ + enable:'phaseUse', + usable:1, + position:'he', + filterCard:function(card){ + return get.suit(card)=='spade'; + }, + viewAs:{name:'wuzhong'}, + viewAsFilter:function(player){ + if(!player.countCards('he',{suit:'spade'})) return false; + }, + prompt:'将一张黑桃牌当作无中生有使用', + check:function(card){return 7-get.value(card)}, + ai:{ + threaten:1.4, + order:9, + } + }, + bzhuiji:{ + trigger:{global:'dieAfter'}, + check:function(event,player){ + return get.attitude(player,event.source)<=0; + }, + filter:function(event,player){ + return event.source&&event.source.isAlive()&&event.source!=player; + }, + content:function(){ + player.draw(2); + player.useCard({name:'juedou'},trigger.source); + }, + ai:{ + threaten:1.5, + expose:0.1 + } + }, + lianjin_old:{ + enable:'phaseUse', + usable:2, + filterCard:true, + check:function(card){ + return 7-get.value(card); + }, + content:function(){ + 'step 0' + var list=get.inpile('trick'); + list=list.randomGets(3); + for(var i=0;i=2) continue; + if(names.length>=3) continue; + var select=get.select(info.selectTarget); + if(select[0]==-1&&select[1]==-1){ + names.push(inpile[i]); + if(info.modTarget) single=true; + } + else if(select[0]==1&&select[1]==1){ + names.push(inpile[i]); + single=true; + } + } + if(equip){ + names.push(equips.randomGet()); + } + names.sort(lib.sort.name); + var name='hsyaoshui_'+names[0]+'_'+names[1]+'_'+names[2]; + if(!lib.card[name]){ + lib.card[name]=get.copy(lib.skill.lianjin.template); + lib.card[name].names=names; + lib.card[name].selectTarget=single?1:-1; + lib.translate[name]='药水'; + lib.translate[name+'_info']=get.translation(names[0])+'、'+ + get.translation(names[1])+'、'+get.translation(names[2]); + } + var fakecard=game.createCard(name,cards[0].suit,cards[0].number); + player.gain(fakecard,'gain2'); + // cards[0].style.transitionDuration='0.2s'; + // ui.refresh(cards[0]); + // cards[0].classList.add('opaque'); + // event.cardname=name; + // if(player!=game.me){ + // var fakecard=game.createCard(name); + // fakecard.node.info.remove(); + // player.$draw(fakecard); + // } + // game.delay(0,200); + // stp 1 + // cards[0].style.transitionDuration='0s'; + // ui.refresh(cards[0]); + // cards[0].classList.remove('fullskin'); + // cards[0].init([cards[0].suit,cards[0].number,event.cardname]); + // game.delay(0,100); + // stp 2 + // cards[0].style.transitionDuration=''; + // ui.refresh(cards[0]); + // cards[0].classList.remove('opaque'); + // game.delay(0,200); + }, + template:{ + type:'hsyaoshui', + enable:true, + fullimage:true, + image:'card/hsyaoshui', + vanish:true, + derivation:'hs_kazhakusi', + multitarget:true, + multiline:true, + filterTarget:function(card,player,target){ + var info=get.info(card); + var names=info.names; + for(var i=0;i=3) return -1; + var num=0; + for(var i=0;i0){ + num++; + } + else if(eff<0){ + num-=0.9; + } + } + return num; + } + } + } + }, + ai:{ + order:9, + result:{ + player:1 + }, + threaten:1.4 + }, + group:'lianjin_discard', + subSkill:{ + discard:{ + trigger:{player:'discardAfter'}, + forced:true, + filter:function(event){ + for(var i=0;i0; + }, + content:function(){ + player.gain(game.createCard(trigger.target.getCards('h').randomGet()),'draw'); + } + }, + miss:{ + trigger:{player:'shaMiss'}, + frequent:true, + usable:1, + filter:function(event){ + return event.target.hasCard(function(card){ + return !get.info(card).unique; + },'e'); + }, + content:function(){ + player.gain(game.createCard(trigger.target.getCards('e',function(card){ + return !get.info(card).unique; + }).randomGet()),'draw'); + } + } + } + }, + yingxi:{ + trigger:{player:'phaseEnd'}, + direct:true, + filter:function(event,player){ + return !player.getStat('damage')&&player.countCards('he',{color:'black'})>0; + }, + content:function(){ + 'step 0' + player.chooseCardTarget({ + prompt:get.prompt('yingxi'), + filterCard:{color:'black'}, + filterTarget:function(card,player,target){ + return lib.filter.targetEnabled({name:'sha'},player,target); + }, + position:'he', + ai1:function(card){ + return 8-get.value(card); + }, + ai2:function(target){ + return get.effect(target,{name:'sha'},player,player); + } + }); + 'step 1' + if(result.bool){ + player.useCard({name:'sha'},result.cards,result.targets,'yingxi'); + } + }, + group:'yingxi2', + }, + yingxi2:{ + trigger:{player:'shaBegin'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.skill=='yingxi'&&event.target.isHealthy(); + }, + content:function(){ + trigger.directHit=true; + } + }, + guimou:{ + trigger:{player:'damageEnd'}, + check:function(event,player){ + return get.attitude(player,event.source)<=0; + }, + filter:function(event,player){ + return event.source&&event.source.isAlive()&&event.source!=player&&event.source.countCards('h')>0; + }, + logTarget:'source', + content:function(){ + var card=trigger.source.getCards('h').randomGet(); + if(card){ + player.gain(card,trigger.source); + if(get.color(card)=='black'){ + trigger.source.$give(card,player); + event.redo(); + } + else{ + trigger.source.$giveAuto(card,player); + } + game.delay(0.5); + } + }, + ai:{ + maixie:true, + maixie_hp:true, maixie_defend:true, - effect:{ - target:function(card,player,target){ - if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; - if(!target.hasFriend()) return false; - if(get.tag(card,'damage')&&player.countCards('h')>1) return [1,0,0,-1]; - } - } - } - }, - peiyu:{ - trigger:{player:['phaseBegin']}, - direct:true, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('peiyu'),function(card,player,target){ - for(var i=1;i<=8;i++){ - if(target.hasSkill('tuteng'+i)) return false; - } - return true; - }).ai=function(target){ - if(player==target&&get.attitude(player,target)>0&&event.parent.triggername=='phaseBegin'){ - return get.attitude(player,target)+10; - } - return get.attitude(player,target); - } - 'step 1' - if(result.bool){ - player.logSkill('peiyu',result.targets); - var rand=['tuteng1','tuteng2','tuteng3','tuteng4', - 'tuteng5','tuteng6','tuteng7','tuteng8']; - result.targets[0].addAdditionalSkill('peiyu',['peiyu2',rand.randomGet()]); - } - } - }, - peiyu2:{ - trigger:{player:'damageAfter'}, - silent:true, - content:function(){ - player.removeAdditionalSkill('peiyu'); - } - }, - peiyu_old:{ - enable:'phaseUse', - filterCard:true, - position:'he', - filterTarget:true, - check:function(card){ - return 6-get.value(card); - }, - content:function(){ - 'step 0' - var rand=['tuteng1','tuteng2','tuteng3','tuteng4', - 'tuteng5','tuteng6','tuteng7','tuteng8']; - var rand2=[]; - for(var i=0;i1){ - rand.remove('tuteng1'); - } - gain=rand.randomGet(); - target.removeSkill(rand2.randomGet()) - } - } - target.addSkill(gain); - target.storage.peiyu[gain]=player; - game.delay(); - event.finish(); - } - } - else{ - var gain=rand.randomGet(); - target.addSkill(gain); - target.storage.peiyu[gain]=player; - game.delay(); - event.finish(); - } - 'step 1' - var skill1=result.buttons[0].name; - var skill2=result.buttons[1].name; - if(target.hasSkill(skill1)){ - target.removeSkill(skill1); - target.addSkill(skill2); - target.storage.peiyu[skill2]=player; - } - else{ - target.removeSkill(skill2); - target.addSkill(skill1); - target.storage.peiyu[skill1]=player; - } - }, - ai:{ - expose:0.2, - order:5, - result:{ - target:function(player,target){ - for(var i=1;i<=8;i++){ - if(target.hasSkill('tuteng'+i)) return 0; - } - return 1; - } - } - }, - group:'peiyu_old2' - }, - peiyu_old2:{ - trigger:{player:'dieBegin'}, - forced:true, - popup:false, - content:function(){ - game.countPlayer(function(current){ - for(var j in current.storage.peiyu){ - if(current.storage.peiyu[j]==player){ - current.removeSkill(j); - } - } - }); - } - }, - wzhanyi:{ - trigger:{player:'phaseUseBefore'}, - check:function(event,player){ - return player.countCards('h')+2<=player.hp; - }, - content:function(){ - 'step 0' - event.cards=get.cards(3); - trigger.cancel(); - player.$draw(event.cards.slice(0)); - for(var i=0;i=3; - }, - filterTarget:function(card,player,target){ - return player.canUse('yuansuhuimie',target); - }, - selectTarget:-1, - multitarget:true, - multiline:true, - line:'thunder', - content:function(){ - player.maxHp=player.hp; - player.update(); - targets.sort(lib.sort.seat); - player.useCard({name:'yuansuhuimie'},targets).animate=false; - } - }, - chouhuo:{ - unique:true, - trigger:{player:'phaseBegin'}, - forced:true, - skillAnimation:true, - animationColor:'fire', - filter:function(event,player){ - if(player.storage.nuyan&&player.storage.nuyan.length){ - var num=0; - for(var i=0;i0){ - if(players[i].hp<2){ - lose--; - recover+=0.5; - } - lose--; - recover++; - } - else if(get.attitude(player,players[i])<0){ - if(players[i].hp<2){ - lose++; - recover-=0.5; - } - lose++; - recover--; - } - } - else{ - if(get.attitude(player,players[i])>0){ - lose--; - } - else if(get.attitude(player,players[i])<0){ - lose++; - } - } - } - if(button.link[2]=='nanman'||button.link[2]=='nanman'||button.link[2]=='yuansuhuimie'|| - button.link[2]=='chiyuxi'||button.link[2]=='jingleishan'){ - if(lose>recover&&lose>0){ - return 2; - } - else{ - return 0; - } - } - return 1; - }, - backup:function(links,player){ - return { - filterCard:function(){return false}, - selectCard:-1, - popname:true, - viewAs:{name:links[0][2]}, - onuse:function(result,player){ - player.loseHp(); - } - } - }, - prompt:function(links,player){ - return '失去一点体力,视为使用一张'+get.translation(links[0][2]); - } - }, - ai:{ - order:6, - result:{ - player:function(player){ - if(player.hp>1) return 1; - return 0; - } - }, - } - }, - nuyan:{ - enable:'phaseUse', - usable:1, - filter:function(event,player){ - return player.countCards('he',{color:'red'})>0 - }, - init:function(player){ - player.storage.nuyan=[]; - }, - chooseButton:{ - dialog:function(event,player){ - var list=[]; - for(var i=0;i0){ - if(players[i].hp<2){ - lose--; - recover+=0.5; - } - lose--; - recover++; - } - else if(get.attitude(player,players[i])<0){ - if(players[i].hp<2){ - lose++; - recover-=0.5; - } - lose++; - recover--; - } - } - else{ - if(get.attitude(player,players[i])>0){ - lose--; - } - else if(get.attitude(player,players[i])<0){ - lose++; - } - } - } - if(button.link[2]=='nanman'||button.link[2]=='nanman'||button.link[2]=='yuansuhuimie'|| - button.link[2]=='chiyuxi'||button.link[2]=='jingleishan'){ - if(lose>recover&&lose>0){ - return 2; - } - else{ - return 0; - } - } - return 1; - }, - backup:function(links,player){ - return { - filterCard:{color:'red'}, - selectCard:1, - position:'he', - popname:true, - viewAs:{name:links[0][2]}, - ai1:function(card){ - return 6-get.value(card); - }, - onuse:function(result,player){ - player.storage.nuyan.add(result.card.name); - } - } - }, - prompt:function(links,player){ - return '将一张红色牌当作'+get.translation(links[0][2])+'使用'; - } - }, - ai:{ - order:6, - result:{ - player:1 - }, - } - }, - duxin:{ - trigger:{player:['phaseBegin','phaseEnd']}, - frequent:true, - filter:function(event,player){ - return !player.countCards('h',{type:'hsdusu'}); - }, - content:function(){ - var list=['hsdusu_xueji','hsdusu_huangxuecao','hsdusu_kuyecao','hsdusu_shinancao','hsdusu_huoyanhua']; - if(typeof lib.cardType.hslingjian!='number'){ - list.remove('hsdusu_kuyecao'); - } - var name=list.randomGet(); - if(name=='hsdusu_huoyanhua'){ - player.gain(game.createCard({name:name,nature:'fire'}),'draw'); - } - else{ - player.gain(game.createCard(name),'draw'); - } - }, - ai:{ - threaten:1.6 - } - }, - hsdusu_shinancao:{ - mark:true, - marktext:'楠', - nopop:true, - intro:{ - content:'下一次造成的伤害+1' - }, - logv:false, - trigger:{source:'damageBegin'}, - forced:true, - content:function(){ - trigger.num++; - player.removeSkill('hsdusu_shinancao'); - } - }, - kuangluan_old:{ - group:['kuangluan_count1','kuangluan_count2','kuangluan_use'], - subSkill:{ - count1:{ - trigger:{player:'useCard'}, - silent:true, - filter:function(event,player){ - return _status.currentPhase==player&&get.type(event.card)=='trick'; - }, - content:function(){ - player.storage.kuangluan++; - } - }, - count2:{ - trigger:{player:'phaseBegin'}, - silent:true, - content:function(){ - player.storage.kuangluan=0; - } - }, - use:{ - trigger:{player:'phaseUseEnd'}, - forced:true, - filter:function(event,player){ - return player.storage.kuangluan>0; - }, - content:function(){ - var list=[]; - for(var i=0;i0&&info.selectTarget[1]>=info.selectTarget[0]){ - list.push(lib.inpile[i]); - } - } - else if(typeof info.selectTarget=='number'){ - list.push(lib.inpile[i]); - } - } - } - } - var n=player.storage.kuangluan; - delete player.storage.kuangluan; - while(list.length){ - var card={name:list.randomRemove()}; - var info=get.info(card); - var targets=game.filterPlayer(function(current){ - return lib.filter.filterTarget(card,player,current); - }); - if(targets.length){ - targets.sort(lib.sort.seat); - if(info.selectTarget==-1){ - player.useCard(card,targets); - } - else{ - var num=info.selectTarget; - if(Array.isArray(num)){ - if(targets.length=2; - }, - content:function(){ - player.recover(player.maxHp); - player.goMad('phaseAfter'); - } - }, - kuangluan3:{ - trigger:{player:'phaseBegin'}, - silent:true, - content:function(){ - player.storage.kuangluan=[]; - player.unmarkSkill('kuangluan'); - } - }, - xiubu:{ - trigger:{player:'equipEnd'}, - frequent:true, - filter:function(event){ - return lib.inpile.contains(event.card.name)&&get.subtype(event.card)=='equip1'&&typeof lib.cardType.hslingjian=='number'; - }, - content:function(){ - var num=1; - var info=get.info(trigger.card); - if(info&&info.distance&&typeof info.distance.attackFrom=='number'){ - num=1-info.distance.attackFrom; - } - if(num<1){ - num=1; - } - var list=get.typeCard('hslingjian'); - if(!list.length){ - return; - } - var cards=[]; - while(num--){ - cards.push(game.createCard(list.randomGet())); - } - player.gain(cards,'gain2'); - }, - threaten:1.3 - }, - zengli:{ - enable:'phaseUse', - usable:1, - filterTarget:function(card,player,target){ - return target!=player&&!target.isMin(); - }, - delay:false, - content:function(){ - 'step 0' - var list=[]; - for(var i=0;i1){ - return 6-get.value(card); - } - return 0; - }).set('logSkill',['xianji',event.target]); - } - else{ - event.finish(); - } - 'step 1' - if(result.bool){ - event.target.draw(result.cards.length); - player.storage.xianji3=event.target; - player.addSkill('xianji3'); - player.addExpose(0.2); - } - } - }, - xianji3:{ - mark:'character', - intro:{ - content:'每当$对你使用一张牌,你摸一张牌' - }, - trigger:{target:'useCardToBegin'}, - filter:function(event,player){ - return event.player==player.storage.xianji3; - }, - forced:true, - content:function(){ - player.draw(); - }, - }, - tanmi:{ - trigger:{global:'phaseEnd'}, - filter:function(event,player){ - return player.countCards('h')==0&&event.player!=player; - }, - frequent:true, - content:function(){ - 'step 0' - player.draw(2); - 'step 1' - player.chooseToUse(); - 'step 2' - if(result.bool){ - player.chooseToUse(); - } - }, - ai:{ - noh:true, - skillTagFilter:function(player,tag){ - if(tag=='noh'){ - if(player.countCards('h')!=1) return false; - } - } - } - }, - xueren:{ - trigger:{source:'damageEnd'}, - filter:function(event){ - if(event._notrigger.contains(event.player)) return false; - return event.card&&event.card.name=='sha'&&event.player.isAlive(); - }, - check:function(event,player){ - if(get.attitude(player,event.player)>=0) return false; - if(player.hp>2) return true; - if(player.hp<2) return false; - return player.hp>=event.player.hp; - }, - content:function(){ - 'step 0' - trigger.player.loseHp(); - 'step 1' - player.loseHp(); - 'step 2' - player.draw(2); - } - }, - maoxian:{ - enable:'phaseUse', - usable:2, - direct:true, - delay:false, - unique:true, - content:function(){ - 'step 0' - var list=get.gainableSkills(); - list.remove('maoxian'); - list=list.randomGets(3); - event.skillai=function(){ - return get.max(list,get.skillRank,'item'); - }; - if(event.isMine()){ - var dialog=ui.create.dialog('forcebutton'); - dialog.add('选择获得一项技能'); - var clickItem=function(){ - _status.event._result=this.link; - dialog.close(); - game.resume(); - }; - for(var i=0;i
【'+ - translation+'】
'+lib.translate[list[i]+'_info']+'
'); - item.firstChild.addEventListener('click',clickItem); - item.firstChild.link=list[i]; - } - } - dialog.add(ui.create.div('.placeholder')); - event.switchToAuto=function(){ - event._result=event.skillai(); - dialog.close(); - game.resume(); - }; - _status.imchoosing=true; - game.pause(); - } - else{ - event._result=event.skillai(); - } - 'step 1' - _status.imchoosing=false; - var link=result; - player.addAdditionalSkill('maoxian',link); - player.popup(link); - game.log(player,'获得了技能','【'+get.translation(link)+'】'); - player.checkMarks(); - player.markSkill('maoxian'); - game.delay(); - }, - intro:{ - content:function(storage,player){ - return '当前技能:'+get.translation(player.additionalSkills.maoxian); - } - }, - ai:{ - order:11, - result:{ - player:function(player){ - if(player.getStat().skill.maoxian) return 0; - return 1; - } - } - } - }, - maoxian_old:{ - enable:'phaseUse', - usable:2, - direct:true, - delay:false, - unique:true, - getSkills:function(player,current){ - var names=[]; - var list=[]; - var map={}; - for(var i=0;i=3; - }, - content:function(){ - 'step 0' - event.cards=get.cards(3); - if(!event.isMine()) player.showCards(event.cards); - 'step 1' - player.chooseCardButton('获得任意张类别不同的牌',[1,3],event.cards).filterButton=function(button){ - var type=get.type(button.link,'trick'); - for(var i=0;iget.value(cards[i]); - } - }); - if(!list.length){ - list=game.findCards(function(name){ - if(cards[i].name==name) return; - if(get.type({name:name},'trick')==type){ - return get.value({name:name})==get.value(cards[i]); - } - }); - } - if(!list.length){ - list=[cards[i].name]; - } - cards2.push(game.createCard(list.randomGet())); - } - player.gain(cards2,'log'); - player.$draw(cards2); - }, - ai:{ - order:8, - result:{ - player:1 - } - } - }, - zhuizong:{ - enable:'phaseUse', - usable:1, - filterCard:true, - position:'he', - selectCard:[1,Infinity], - check:function(card){ - if(ui.selected.cards.length) return 0; - return 6-get.value(card) - }, - content:function(){ - 'step 0' - event.cards=get.cards(4*cards.length); - player.chooseCardButton('获得其中的一张牌',true,event.cards,true); - 'step 1' - player.gain(result.links,'draw'); - event.cards.remove(result.links[0]); - for(var i=0;i1) return [1,0,0,-1]; + } + } + } + }, + peiyu:{ + trigger:{player:['phaseBegin']}, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('peiyu'),function(card,player,target){ + for(var i=1;i<=8;i++){ + if(target.hasSkill('tuteng'+i)) return false; + } + return true; + }).ai=function(target){ + if(player==target&&get.attitude(player,target)>0&&event.parent.triggername=='phaseBegin'){ + return get.attitude(player,target)+10; + } + return get.attitude(player,target); + } + 'step 1' + if(result.bool){ + player.logSkill('peiyu',result.targets); + var rand=['tuteng1','tuteng2','tuteng3','tuteng4', + 'tuteng5','tuteng6','tuteng7','tuteng8']; + result.targets[0].addAdditionalSkill('peiyu',['peiyu2',rand.randomGet()]); + } + } + }, + peiyu2:{ + trigger:{player:'damageAfter'}, + silent:true, + content:function(){ + player.removeAdditionalSkill('peiyu'); + } + }, + peiyu_old:{ + enable:'phaseUse', + filterCard:true, + position:'he', + filterTarget:true, + check:function(card){ + return 6-get.value(card); + }, + content:function(){ + 'step 0' + var rand=['tuteng1','tuteng2','tuteng3','tuteng4', + 'tuteng5','tuteng6','tuteng7','tuteng8']; + var rand2=[]; + for(var i=0;i1){ + rand.remove('tuteng1'); + } + gain=rand.randomGet(); + target.removeSkill(rand2.randomGet()) + } + } + target.addSkill(gain); + target.storage.peiyu[gain]=player; + game.delay(); + event.finish(); + } + } + else{ + var gain=rand.randomGet(); + target.addSkill(gain); + target.storage.peiyu[gain]=player; + game.delay(); + event.finish(); + } + 'step 1' + var skill1=result.buttons[0].name; + var skill2=result.buttons[1].name; + if(target.hasSkill(skill1)){ + target.removeSkill(skill1); + target.addSkill(skill2); + target.storage.peiyu[skill2]=player; + } + else{ + target.removeSkill(skill2); + target.addSkill(skill1); + target.storage.peiyu[skill1]=player; + } + }, + ai:{ + expose:0.2, + order:5, + result:{ + target:function(player,target){ + for(var i=1;i<=8;i++){ + if(target.hasSkill('tuteng'+i)) return 0; + } + return 1; + } + } + }, + group:'peiyu_old2' + }, + peiyu_old2:{ + trigger:{player:'dieBegin'}, + forced:true, + popup:false, + content:function(){ + game.countPlayer(function(current){ + for(var j in current.storage.peiyu){ + if(current.storage.peiyu[j]==player){ + current.removeSkill(j); + } + } + }); + } + }, + wzhanyi:{ + trigger:{player:'phaseUseBefore'}, + check:function(event,player){ + return player.countCards('h')+2<=player.hp; + }, + content:function(){ + 'step 0' + event.cards=get.cards(3); + trigger.cancel(); + player.$draw(event.cards.slice(0)); + for(var i=0;i=3; + }, + filterTarget:function(card,player,target){ + return player.canUse('yuansuhuimie',target); + }, + selectTarget:-1, + multitarget:true, + multiline:true, + line:'thunder', + content:function(){ + player.maxHp=player.hp; + player.update(); + targets.sort(lib.sort.seat); + player.useCard({name:'yuansuhuimie'},targets).animate=false; + } + }, + chouhuo:{ + unique:true, + trigger:{player:'phaseBegin'}, + forced:true, + skillAnimation:true, + animationColor:'fire', + filter:function(event,player){ + if(player.storage.nuyan&&player.storage.nuyan.length){ + var num=0; + for(var i=0;i0){ + if(players[i].hp<2){ + lose--; + recover+=0.5; + } + lose--; + recover++; + } + else if(get.attitude(player,players[i])<0){ + if(players[i].hp<2){ + lose++; + recover-=0.5; + } + lose++; + recover--; + } + } + else{ + if(get.attitude(player,players[i])>0){ + lose--; + } + else if(get.attitude(player,players[i])<0){ + lose++; + } + } + } + if(button.link[2]=='nanman'||button.link[2]=='nanman'||button.link[2]=='yuansuhuimie'|| + button.link[2]=='chiyuxi'||button.link[2]=='jingleishan'){ + if(lose>recover&&lose>0){ + return 2; + } + else{ + return 0; + } + } + return 1; + }, + backup:function(links,player){ + return { + filterCard:function(){return false}, + selectCard:-1, + popname:true, + viewAs:{name:links[0][2]}, + onuse:function(result,player){ + player.loseHp(); + } + } + }, + prompt:function(links,player){ + return '失去一点体力,视为使用一张'+get.translation(links[0][2]); + } + }, + ai:{ + order:6, + result:{ + player:function(player){ + if(player.hp>1) return 1; + return 0; + } + }, + } + }, + nuyan:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.countCards('he',{color:'red'})>0 + }, + init:function(player){ + player.storage.nuyan=[]; + }, + chooseButton:{ + dialog:function(event,player){ + var list=[]; + for(var i=0;i0){ + if(players[i].hp<2){ + lose--; + recover+=0.5; + } + lose--; + recover++; + } + else if(get.attitude(player,players[i])<0){ + if(players[i].hp<2){ + lose++; + recover-=0.5; + } + lose++; + recover--; + } + } + else{ + if(get.attitude(player,players[i])>0){ + lose--; + } + else if(get.attitude(player,players[i])<0){ + lose++; + } + } + } + if(button.link[2]=='nanman'||button.link[2]=='nanman'||button.link[2]=='yuansuhuimie'|| + button.link[2]=='chiyuxi'||button.link[2]=='jingleishan'){ + if(lose>recover&&lose>0){ + return 2; + } + else{ + return 0; + } + } + return 1; + }, + backup:function(links,player){ + return { + filterCard:{color:'red'}, + selectCard:1, + position:'he', + popname:true, + viewAs:{name:links[0][2]}, + ai1:function(card){ + return 6-get.value(card); + }, + onuse:function(result,player){ + player.storage.nuyan.add(result.card.name); + } + } + }, + prompt:function(links,player){ + return '将一张红色牌当作'+get.translation(links[0][2])+'使用'; + } + }, + ai:{ + order:6, + result:{ + player:1 + }, + } + }, + duxin:{ + trigger:{player:['phaseBegin','phaseEnd']}, + frequent:true, + filter:function(event,player){ + return !player.countCards('h',{type:'hsdusu'}); + }, + content:function(){ + var list=['hsdusu_xueji','hsdusu_huangxuecao','hsdusu_kuyecao','hsdusu_shinancao','hsdusu_huoyanhua']; + if(typeof lib.cardType.hslingjian!='number'){ + list.remove('hsdusu_kuyecao'); + } + var name=list.randomGet(); + if(name=='hsdusu_huoyanhua'){ + player.gain(game.createCard({name:name,nature:'fire'}),'draw'); + } + else{ + player.gain(game.createCard(name),'draw'); + } + }, + ai:{ + threaten:1.6 + } + }, + hsdusu_shinancao:{ + mark:true, + marktext:'楠', + nopop:true, + intro:{ + content:'下一次造成的伤害+1' + }, + logv:false, + trigger:{source:'damageBegin'}, + forced:true, + content:function(){ + trigger.num++; + player.removeSkill('hsdusu_shinancao'); + } + }, + kuangluan_old:{ + group:['kuangluan_count1','kuangluan_count2','kuangluan_use'], + subSkill:{ + count1:{ + trigger:{player:'useCard'}, + silent:true, + filter:function(event,player){ + return _status.currentPhase==player&&get.type(event.card)=='trick'; + }, + content:function(){ + player.storage.kuangluan++; + } + }, + count2:{ + trigger:{player:'phaseBegin'}, + silent:true, + content:function(){ + player.storage.kuangluan=0; + } + }, + use:{ + trigger:{player:'phaseUseEnd'}, + forced:true, + filter:function(event,player){ + return player.storage.kuangluan>0; + }, + content:function(){ + var list=[]; + for(var i=0;i0&&info.selectTarget[1]>=info.selectTarget[0]){ + list.push(lib.inpile[i]); + } + } + else if(typeof info.selectTarget=='number'){ + list.push(lib.inpile[i]); + } + } + } + } + var n=player.storage.kuangluan; + delete player.storage.kuangluan; + while(list.length){ + var card={name:list.randomRemove()}; + var info=get.info(card); + var targets=game.filterPlayer(function(current){ + return lib.filter.filterTarget(card,player,current); + }); + if(targets.length){ + targets.sort(lib.sort.seat); + if(info.selectTarget==-1){ + player.useCard(card,targets); + } + else{ + var num=info.selectTarget; + if(Array.isArray(num)){ + if(targets.length=2; + }, + content:function(){ + player.recover(player.maxHp); + player.goMad('phaseAfter'); + } + }, + kuangluan3:{ + trigger:{player:'phaseBegin'}, + silent:true, + content:function(){ + player.storage.kuangluan=[]; + player.unmarkSkill('kuangluan'); + } + }, + xiubu:{ + trigger:{player:'equipEnd'}, + frequent:true, + filter:function(event){ + return lib.inpile.contains(event.card.name)&&get.subtype(event.card)=='equip1'&&typeof lib.cardType.hslingjian=='number'; + }, + content:function(){ + var num=1; + var info=get.info(trigger.card); + if(info&&info.distance&&typeof info.distance.attackFrom=='number'){ + num=1-info.distance.attackFrom; + } + if(num<1){ + num=1; + } + var list=get.typeCard('hslingjian'); + if(!list.length){ + return; + } + var cards=[]; + while(num--){ + cards.push(game.createCard(list.randomGet())); + } + player.gain(cards,'gain2'); + }, + threaten:1.3 + }, + zengli:{ + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return target!=player&&!target.isMin(); + }, + delay:false, + content:function(){ + 'step 0' + var list=[]; + for(var i=0;i1){ + return 6-get.value(card); + } + return 0; + }).set('logSkill',['xianji',event.target]); + } + else{ + event.finish(); + } + 'step 1' + if(result.bool){ + event.target.draw(result.cards.length); + player.storage.xianji3=event.target; + player.addSkill('xianji3'); + player.addExpose(0.2); + } + } + }, + xianji3:{ + mark:'character', + intro:{ + content:'每当$对你使用一张牌,你摸一张牌' + }, + trigger:{target:'useCardToBegin'}, + filter:function(event,player){ + return event.player==player.storage.xianji3; + }, + forced:true, + content:function(){ + player.draw(); + }, + }, + tanmi:{ + trigger:{global:'phaseEnd'}, + filter:function(event,player){ + return player.countCards('h')==0&&event.player!=player; + }, + frequent:true, + content:function(){ + 'step 0' + player.draw(2); + 'step 1' + player.chooseToUse(); + 'step 2' + if(result.bool){ + player.chooseToUse(); + } + }, + ai:{ + noh:true, + skillTagFilter:function(player,tag){ + if(tag=='noh'){ + if(player.countCards('h')!=1) return false; + } + } + } + }, + xueren:{ + trigger:{source:'damageEnd'}, + filter:function(event){ + if(event._notrigger.contains(event.player)) return false; + return event.card&&event.card.name=='sha'&&event.player.isAlive(); + }, + check:function(event,player){ + if(get.attitude(player,event.player)>=0) return false; + if(player.hp>2) return true; + if(player.hp<2) return false; + return player.hp>=event.player.hp; + }, + content:function(){ + 'step 0' + trigger.player.loseHp(); + 'step 1' + player.loseHp(); + 'step 2' + player.draw(2); + } + }, + maoxian:{ + enable:'phaseUse', + usable:2, + direct:true, + delay:false, + unique:true, + content:function(){ + 'step 0' + var list=get.gainableSkills(); + list.remove('maoxian'); + list=list.randomGets(3); + event.skillai=function(){ + return get.max(list,get.skillRank,'item'); + }; + if(event.isMine()){ + var dialog=ui.create.dialog('forcebutton'); + dialog.add('选择获得一项技能'); + var clickItem=function(){ + _status.event._result=this.link; + dialog.close(); + game.resume(); + }; + for(var i=0;i
【'+ + translation+'】
'+lib.translate[list[i]+'_info']+'
'); + item.firstChild.addEventListener('click',clickItem); + item.firstChild.link=list[i]; + } + } + dialog.add(ui.create.div('.placeholder')); + event.switchToAuto=function(){ + event._result=event.skillai(); + dialog.close(); + game.resume(); + }; + _status.imchoosing=true; + game.pause(); + } + else{ + event._result=event.skillai(); + } + 'step 1' + _status.imchoosing=false; + var link=result; + player.addAdditionalSkill('maoxian',link); + player.popup(link); + game.log(player,'获得了技能','【'+get.translation(link)+'】'); + player.checkMarks(); + player.markSkill('maoxian'); + game.delay(); + }, + intro:{ + content:function(storage,player){ + return '当前技能:'+get.translation(player.additionalSkills.maoxian); + } + }, + ai:{ + order:11, + result:{ + player:function(player){ + if(player.getStat().skill.maoxian) return 0; + return 1; + } + } + } + }, + maoxian_old:{ + enable:'phaseUse', + usable:2, + direct:true, + delay:false, + unique:true, + getSkills:function(player,current){ + var names=[]; + var list=[]; + var map={}; + for(var i=0;i=3; + }, + content:function(){ + 'step 0' + event.cards=get.cards(3); + if(!event.isMine()) player.showCards(event.cards); + 'step 1' + player.chooseCardButton('获得任意张类别不同的牌',[1,3],event.cards).filterButton=function(button){ + var type=get.type(button.link,'trick'); + for(var i=0;iget.value(cards[i]); + } + }); + if(!list.length){ + list=game.findCards(function(name){ + if(cards[i].name==name) return; + if(get.type({name:name},'trick')==type){ + return get.value({name:name})==get.value(cards[i]); + } + }); + } + if(!list.length){ + list=[cards[i].name]; + } + cards2.push(game.createCard(list.randomGet())); + } + player.gain(cards2,'log'); + player.$draw(cards2); + }, + ai:{ + order:8, + result:{ + player:1 + } + } + }, + zhuizong:{ + enable:'phaseUse', + usable:1, + filterCard:true, + position:'he', + selectCard:[1,Infinity], + check:function(card){ + if(ui.selected.cards.length) return 0; + return 6-get.value(card) + }, + content:function(){ + 'step 0' + event.cards=get.cards(4*cards.length); + player.chooseCardButton('获得其中的一张牌',true,event.cards,true); + 'step 1' + player.gain(result.links,'draw'); + event.cards.remove(result.links[0]); + for(var i=0;i=3) return false; - for(var i=0;i0; - }, - filterTarget:function(card,player,target){ - if(get.color(card)=='red'){ - return player.canUse('chiyuxi',target); - } - else{ - return player.canUse('jingleishan',target); - } - }, - selectTarget:-1, - discard:false, - delay:false, - line:false, - filterCard:true, - position:'he', - log:'notarget', - check:function(card){ - return 6-get.value(card); - }, - multitarget:true, - content:function(){ - if(get.color(cards[0])=='black'){ - player.useCard({name:'jingleishan'},cards,targets); - } - else{ - player.useCard({name:'chiyuxi'},cards,targets); - } - }, - ai:{ - order:9.1, - result:{ - target:function(player,target){ - var card=ui.selected.cards[0]; - if(card&&get.color(card)=='black'){ - return get.effect(target,{name:'jingleishan'},player,target); - } - return get.effect(target,{name:'chiyuxi'},player,target); - } - } - } - }, - shifa:{ - trigger:{player:'phaseUseBegin'}, - forced:true, - content:function(){ - 'step 0' - var list=[]; - var target=player.getEnemies().randomGet(); - for(var i=0;i1&&event.target.countCards('he')>0; - }, - content:function(){ - player.discardPlayerCard(trigger.target,get.prompt('yuanzheng',trigger.target),'hej').logSkill=['yuanzheng',trigger.target]; - } - }, - yuanzheng_old:{ - trigger:{player:'useCardToBegin'}, - direct:true, - filter:function(event,player){ - if(event.getParent(2).name=='yuanzheng') return false; - return event.target&&event.target!=player&&get.distance(player,event.target,'attack')>1; - }, - content:function(){ - 'step 0' - player.chooseControl('draw_card','出杀','cancel2',function(){ - if(get.effect(trigger.target,{name:'sha'},player,player)>0){ - return '出杀'; - } - return 'draw_card'; - }).prompt='是对'+get.translation(trigger.target)+'发动否发动【远征】?'; - 'step 1' - if(result.control!='cancel2'){ - if(result.control=='draw_card'){ - player.draw(); - player.logSkill('yuanzheng'); - } - else{ - player.logSkill('yuanzheng',trigger.target); - player.useCard({name:'sha'},trigger.target,false).animate=false; - // player.discardPlayerCard(trigger.target,'he',true); - } - } - } - }, - byuhuo:{ - unique:true, - trigger:{player:'dying'}, - priority:6, - forced:true, - mark:true, - skillAnimation:true, - animationColor:'fire', - init:function(player){ - player.storage.byuhuo=false; - }, - filter:function(event,player){ - if(player.hp>0) return false; - if(player.storage.byuhuo) return false; - return true; - }, - content:function(){ - player.storage.byuhuo=true; - player.addSkill('byuhuo2'); - player.maxHp=2; - player.hp=2; - player.update(); - if(!player.isTurnedOver()){ - player.turnOver(); - } - }, - ai:{ - threaten:function(player,target){ - if(!target.storage.byuhuo) return 0.6; - } - }, - intro:{ - content:function(storage,player){ - if(storage){ - if(player.hasSkill('byuhuo2')){ - return '不能成为其他角色卡牌的目标;在下一准备阶段,对所有其他角色造成两点火焰伤害'; - } - return '已发动'; - } - else{ - return '未发动'; - } - } - } - }, - byuhuo2:{ - trigger:{player:'phaseBegin'}, - forced:true, - content:function(){ - 'step 0' - var targets=game.filterPlayer(); - targets.remove(player); - targets.sort(lib.sort.seat); - event.targets=targets; - event.num=0; - player.unmarkSkill('byuhuo'); - 'step 1' - if(num0; - }, - content:function(){ - 'step 0' - var nh=player.countCards('h'); - if(nh){ - player.draw(nh); - } - else{ - event.finish(); - } - 'step 1' - var hs=player.getCards('h'); - if(hs.length>10&&hs.length>player.hp){ - player.discard(hs.randomGets(hs.length-player.hp)); - } - }, - ai:{ - maixie:true, - maixie_hp:true, - effect:{ - target:function(card,player,target){ - if(get.tag(card,'damage')){ - if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; - if(!target.hasFriend()) return; - var nh=target.countCards('h'); - if(nh>5) return [1,-1]; - if(nh<=1) return [1,-0.1]; - if(nh==2){ - if(target.hp>=2) return [1,0.1]; - } - else{ - if(target.hp>=4) return [1,2]; - if(target.hp==3) return [1,1.5]; - if(target.hp==2) return [1,0.5]; - } - } - } - } - } - }, - chuidiao:{ - trigger:{player:'phaseEnd'}, - forced:true, - content:function(){ - var num=Math.floor(Math.random()*3); - if(num) player.draw(num); - }, - }, - hhudun:{ - trigger:{global:'phaseBegin'}, - forced:true, - filter:function(event,player){ - return !player.hujia; - }, - content:function(){ - player.changeHujia(); - }, - group:'hhudun_hujia', - subSkill:{ - hujia:{ - trigger:{player:'damageZero'}, - filter:function(event){ - return event.hujia; - }, - forced:true, - content:function(){ - player.draw(); - } - } - }, - ai:{ - threaten:function(player,target){ - if(target.hujia){ - return 0.5; - } - else{ - return 2; - } - } - } - }, - fenlie:{ - audio:2, - forced:true, - trigger:{player:'gainAfter'}, - filter:function(event,player){ - if(event.parent.parent.name=='phaseDraw') return false; - if(event.parent.name=='fenlie') return false; - if(!event.cards) return false; - for(var i=0;i3000&&event.player.countCards('he')>0&&event.player.isAlive(); - }, - content:function(){ - player.line(trigger.player,'green'); - trigger.player.chooseToDiscard('he',true,Math.floor(trigger.player.storage.shixu/3000)); - delete trigger.player.storage.shixu; - } - } - } - }, - jixuan:{ - trigger:{player:'phaseAfter'}, - forced:true, - priority:-50, - filter:function(event,player){ - return event.skill!='jixuan'; - }, - content:function(){ - player.draw(); - player.insertPhase(); - }, - ai:{ - threaten:1.8 - }, - }, - qianghua:{ - trigger:{player:'useCardAfter'}, - filter:function(event,player){ - if(event.parent.name=='qianghua') return false; - if(player.storage.qianghua>=1) return false; - if(_status.currentPhase!=player) return false; - if(event.parent.parent.name!='phaseUse') return false; - if(!event.targets||!event.card) return false; - if(get.info(event.card).complexTarget) return false; - if(!lib.filter.cardEnabled(event.card,player,event.parent)) return false; - var type=get.type(event.card); - if(type!='basic'&&type!='trick') return false; - var card=game.createCard(event.card.name,event.card.suit,event.card.number,event.card.nature); - var targets=event._targets||event.targets; - for(var i=0;i0&& - event.targets.contains(player)==false&&event.targets.length==1; - }, - direct:true, - content:function(){ - "step 0" - var effect=0; - for(var i=0;i0; - }, - content:function(){ - trigger.num--; - player.removeSkill('stuxi2'); - } - }, - bingdong:{ - trigger:{source:'damageEnd'}, - forced:true, - usable:1, - filter:function(event,player){ - if(!lib.card.hslingjian_jinjilengdong){ - return false; - } - return true; - }, - content:function(){ - player.gain(game.createCard('hslingjian_jinjilengdong'),'gain2'); - } - }, - bingdong_old:{ - enable:'phaseUse', - usable:1, - filter:function(event,player){ - return !player.isTurnedOver(); - }, - filterTarget:function(card,player,target){ - return !target.isTurnedOver()&&player!=target; - }, - content:function(){ - 'step 0' - if(!player.isTurnedOver()){ - player.turnOver(); - } - 'step 1' - if(!target.isTurnedOver()){ - target.turnOver(); - } - }, - ai:{ - order:1, - expose:0.2, - result:{ - target:function(player,target){ - if(get.attitude(player,target)<-3&&player.identity!='zhu'){ - return -1; - } - return 0; - } - } - } - }, - luoshi:{ - trigger:{player:'damageEnd'}, - forced:true, - filter:function(event,player){ - return player.countCards('he')>0||(event.source&&event.source.countCards('he')>0); - }, - content:function(){ - 'step 0' - var hs=player.getCards('he'); - if(hs.length){ - player.discard(hs.randomGet()) - } - 'step 1' - if(trigger.source){ - var hs=trigger.source.getCards('he'); - if(hs.length){ - trigger.source.discard(hs.randomGet()) - } - } - }, - ai:{ - maixie_defend:true, - } - }, - ronghuo:{ - trigger:{player:'useCardToBefore'}, - priority:7, - filter:function(event,player){ - if(event.card.name=='sha'&&!event.card.nature) return true; - }, - check:function(event,player){ - var att=get.attitude(player,event.target); - if(event.target.hasSkillTag('nofire')){ - return att>0; - } - return att<=0; - }, - forced:true, - content:function(){ - trigger.card.nature='fire'; - player.addSkill('ronghuo2'); - player.storage.ronghuo=trigger.card; - } - }, - ronghuo2:{ - trigger:{player:'useCardAfter'}, - forced:true, - popup:false, - content:function(){ - delete player.storage.ronghuo.nature; - } - }, - fushi:{ - enable:'phaseUse', - filterTarget:function(card,player,target){ - return target.hp1){ - if(target.hp<=1) att+=2; - if(target.hp<=2) att++; - } - return att; - }; - 'step 1' - if(result.bool){ - event.target=result.targets[0]; - player.logSkill('jiaohui',event.target); - event.target.chooseDrawRecover(true); - } - }, - }, - bimeng:{ - trigger:{player:'phaseEnd'}, - frequent:true, - content:function(){ - var list=['hsmengjing_feicuiyoulong','hsmengjing_huanxiaojiemei', - 'hsmengjing_suxing','hsmengjing_mengye','hsmengjing_mengjing']; - player.gain(game.createCard(list.randomGet())); - player.$draw(); - }, - ai:{ - threaten:2 - } - }, - liehun:{ - trigger:{player:'phaseEnd'}, - forced:true, - filter:function(event,player){ - return player.hasCard(function(card){ - return get.type(card)!='basic'&&!get.info(card).unique; - }); - }, - content:function(){ - var hs=player.getCards('h'); - for(var i=0;i0){ - if(target==player){ - num++; - } - if(target.hp==1){ - num+=3; - } - else if(target.hp==2){ - num+=1; - } - } - return num; - } - "step 1" - if(result.bool){ - player.logSkill('lingzhou',result.targets); - result.targets[0].chooseDrawRecover(true); - } - }, - ai:{ - expose:0.2, - threaten:1.5, - noautowuxie:true, - } - }, - mieshi:{ - trigger:{player:'phaseEnd'}, - forced:true, - content:function(){ - 'step 0' - player.loseHp(); - 'step 1' - event.target=game.filterPlayer().randomGet(player); - if(!event.target){ - event.finish(); - return; - } - player.line(event.target,'fire'); - game.delayx(); - 'step 2' - event.target.damage('fire'); - } - }, - xmojian:{ - trigger:{player:'turnOverAfter'}, - direct:true, - filter:function(event,player){ - return !player.isTurnedOver(); - }, - content:function(){ - "step 0" - player.chooseTarget(get.prompt('xmojian'),function(card,player,target){ - return lib.filter.targetEnabled({name:'sha'},player,target); - }).ai=function(target){ - return get.effect(target,{name:'sha'},player); - } - "step 1" - if(result.bool){ - player.logSkill('xmojian'); - player.useCard({name:'sha'},result.targets,false); - } - }, - ai:{ - expose:0.2, - } - }, - xshixin:{ - trigger:{source:'damageEnd'}, - forced:true, - alter:true, - filter:function(event,player){ - if(event._notrigger.contains(event.player)) return false; - if(get.is.altered('xshixin')&&event.player.hp0){ - if(num>3){ - num=3; - } - if(get.is.altered('enze')&&num>2){ - num=2; - } - target.draw(num); - } - else if(num<0){ - if(get.is.altered('enze')&&num<-2){ - num=-2; - } - target.chooseToDiscard(-num,true); - } - }, - ai:{ - threaten:1.8, - order:function(name,player){ - var max=true,num=0; - var players=game.filterPlayer(); - for(var i=0;inum){ - if(att>0){ - max=true; - } - else if(att<0){ - max=false; - } - num=att*dh; - } - } - if(max) return 10; - return 0.5; - }, - result:{ - player:function(player,target){ - return (player.countCards('h')-target.countCards('h'))*get.attitude(player,target); - } - }, - expose:0.2 - } - }, - chongsheng:{ - unique:true, - enable:'chooseToUse', - mark:true, - init:function(player){ - player.storage.chongsheng=2; - player.syncStorage('chongsheng'); - }, - filter:function(event,player){ - if(event.type!='dying') return false; - if(player!=event.dying) return false; - if(player.storage.chongsheng<=0) return false; - return true; - }, - content:function(){ - 'step 0' - player.hp=Math.min(player.storage.chongsheng,player.maxHp); - player.discard(player.getCards('hej')); - player.draw(player.storage.chongsheng); - player.storage.chongsheng--; - if(player.storage.chongsheng<=0){ - player.unmarkSkill('chongsheng'); - } - 'step 1' - if(player.isLinked()) player.link(); - 'step 2' - if(player.isTurnedOver()) player.turnOver(); - player.syncStorage('chongsheng'); - }, - ai:{ - skillTagFilter:function(player){ - if(player.storage.chongsheng<=0) return false; - if(player.hp>0) return false; - }, - save:true, - result:{ - player:10 - }, - threaten:function(player,target){ - if(target.storage.chongsheng>0) return 0.6; - } - }, - intro:{ - content:'time' - } - }, - guozai:{ - enable:'phaseUse', - usable:1, - alter:true, - filter:function(event,player){ - return player.countCards('h')<(get.is.altered('guozai')?3:4); - }, - init:function(player){ - player.storage.guozai2=0; - }, - content:function(){ - var num=(get.is.altered('guozai')?3:4)-player.countCards('h'); - player.draw(num); - player.addSkill('guozai2'); - player.storage.guozai2+=num; - game.addVideo('storage',player,['guozai2',player.storage.guozai2]); - }, - ai:{ - order:1, - result:{ - player:1 - } - } - }, - guozai2:{ - mark:true, - intro:{ - content:'结束阶段需弃置&张牌' - }, - trigger:{player:'phaseUseEnd'}, - forced:true, - content:function(){ - player.chooseToDiscard('he',true,player.storage.guozai2); - player.storage.guozai2=0; - player.removeSkill('guozai2'); - } - }, - guozaix:{ - enable:'phaseUse', - usable:2, - filter:function(event,player){ - return player.countCards('h')<4; - }, - init:function(player){ - player.storage.guozaix2=0; - }, - content:function(){ - var num=4-player.countCards('h'); - player.draw(num); - player.addSkill('guozaix2'); - player.storage.guozaix2+=num; - game.addVideo('storage',player,['guozaix2',player.storage.guozaix2]); - }, - ai:{ - order:1, - result:{ - player:1 - } - } - }, - guozaix2:{ - mark:true, - intro:{ - content:'结束阶段需弃置&张牌' - }, - trigger:{player:'phaseUseEnd'}, - forced:true, - content:function(){ - player.chooseToDiscard('he',true,player.storage.guozaix2); - player.storage.guozaix2=0; - player.removeSkill('guozaix2'); - } - }, - hanshuang:{ - trigger:{source:'damageEnd'}, - forced:true, - alter:true, - filter:function(event,player){ - if(event._notrigger.contains(event.player)) return false; - return event.card&&get.color(event.card)=='black'&& - !event.player.isTurnedOver()&&event.player.isAlive(); - }, - content:function(){ - trigger.player.turnOver(); - if(get.is.altered('hanshuang')) trigger.player.draw(); - player.loseHp(); - }, - ai:{ - threaten:1.5, - effect:{ - player:function(card,player,target,current){ - if(get.color(card)=='black'&&get.tag(card,'damage')){ - return [1,0,1,-2]; - } - } - } - } - }, - bingshi:{ - global:'bingshi2' - }, - bingshi2:{ - trigger:{global:'dieAfter'}, - forced:true, - globalFixed:true, - filter:function(event,player){ - return event.player.hasSkill('bingshi')&&event.player.isDead(); - }, - content:function(){ - trigger.player.line(player,'thunder'); - player.damage('nosource','thunder').animate=false; - player.$damage(trigger.player); - player.$damagepop(-1,'thunder'); - if(lib.config.animation&&!lib.config.low_performance){ - player.$thunder(); - } - if(!event.parent.parent.bingshi_logv){ - event.parent.parent.bingshi_logv=true; - game.logv(trigger.player,'bingshi',game.filterPlayer(),event.parent.parent); - } - } - }, - huanwu:{ - enable:'phaseUse', - usable:1, - filterTarget:function(card,player,target){ - return !target.storage.huanwu; - }, - content:function(){ - target.gainMaxHp(); - target.recover(); - target.draw(2); - target.storage.huanwu=true; - target.mark('huanwu',{ - name:'唤雾', - content:'已发动' - }); - game.addVideo('mark',target,{ - name:'唤雾', - content:'已发动', - id:'huanwu' - }); - }, - ai:{ - threaten:1.2, - result:{ - target:function(player,target){ - return 1/target.hp; - } - }, - order:10, - expose:0.3 - } - }, - fengnu:{ - mod:{ - cardUsable:function(card){ - if(get.info(card)&&get.info(card).forceUsable) return; - return Infinity; - }, - targetInRange:function(){ - if(!get.is.altered('fengnu')) return true; - } - }, - alter:true, - trigger:{player:'useCard'}, - filter:function(event,player){ - if(_status.currentPhase!=player) return false; - return player.countUsed(event.card)>1; - }, - forced:true, - usable:3, - content:function(){ - player.draw(); - } - }, - shengdun:{ - trigger:{player:'phaseBegin'}, - forced:true, - filter:function(event,player){ - return !player.hujia; - }, - content:function(){ - player.changeHujia(); - player.update(); - }, - }, - shengdun_old:{ - trigger:{player:'phaseBegin'}, - silent:true, - priority:10, - init2:function(player){ - player.markSkill('shengdun'); - }, - content:function(){ - if(player.storage.shengdun){ - player.markSkill('shengdun'); - } - player.storage.shengdun=false; - }, - intro:{ - content:'未发动' - }, - group:'shengdun2' - }, - shengdun_old2:{ - trigger:{player:'damageBegin'}, - forced:true, - filter:function(event,player){ - return event.num>0&&!player.storage.shengdun; - }, - content:function(){ - trigger.num--; - player.storage.shengdun=true; - player.unmarkSkill('shengdun'); - } - }, - jingmeng:{ - trigger:{player:'useCard'}, - frequent:true, - filter:function(event,player){ - return _status.currentPhase==player&&player.countUsed()==1; - }, - content:function(){ - var type=get.type(trigger.card); - var card=get.cardPile2(function(card){ - return get.type(card)==type; - }); - if(card){ - player.gain(card,'gain2','log'); - } - }, - ai:{ - threaten:1.1 - } - }, - kuixin_old:{ - trigger:{player:'phaseEnd'}, - direct:true, - filter:function(event,player){ - var nh=player.countCards('h'); - var nm=1; - return game.hasPlayer(function(current){ - if(current!=player&&Math.abs(current.countCards('h')-nh)<=nm){ - return true; - } - }); - }, - content:function(){ - 'step 0' - var nh=player.countCards('h'); - var nm=1; - var check=true; - if(player.countCards('h','tao')){ - check=false; - } - else if(player.countCards('h','shan')&&player.countCards('h','wuxie')){ - check=false; - } - player.chooseTarget(get.prompt('kuixin'),function(card,player,target){ - return target!=player&&Math.abs(target.countCards('h')-nh)<=nm; - }).ai=function(target){ - if(!check) return 0; - if(get.attitude(player,target)<0){ - return target.countCards('h')-nh; - } - return 0; - }; - 'step 1' - if(result.bool){ - var target=result.targets[0]; - player.logSkill('kuixin',result.targets); - var cards0=target.getCards('h'); - var cards1=player.getCards('h'); - target.gain(cards1,player); - player.gain(cards0,target); - target.$give(cards0.length,player); - player.$give(cards1.length,target); - } - }, - ai:{ - expose:0.2, - threaten:1.5 - } - }, - hswuji:{ - trigger:{player:'phaseUseEnd'}, - frequent:true, - filter:function(event,player){ - return player.countUsed()>0; - }, - content:function(){ - player.draw(player.countUsed()); - }, - ai:{ - threaten:1.3 - } - }, - bingshuang:{ - trigger:{source:'damageEnd'}, - filter:function(event,player){ - if(event._notrigger.contains(event.player)) return false; - return event.card&&get.type(event.card)=='trick'&& - event.player.isAlive()&&!event.player.isTurnedOver(); - }, - check:function(event,player){ - if(event.player.hasSkillTag('noturn')) return; - if(event.player.isTurnedOver()){ - return get.attitude(player,event.player)>0; - } - return get.attitude(player,event.player)<=0; - }, - logTarget:'player', - content:function(){ - trigger.player.draw(2); - trigger.player.turnOver(); - } - }, - yanshu:{ - trigger:{player:'discardAfter'}, - frequent:true, - usable:1, - filter:function(event,player){ - if(!event.cards) return false; - for(var i=0;i0; - }, - content:function(){ - trigger.player.recover(); - player.addTempSkill('shengyan2'); - }, - ai:{ - expose:0.2 - } - }, - shengyan2:{}, - liechao:{ - enable:'phaseUse', - usable:1, - alter:true, - filter:function(event,player){ - return !player.isTurnedOver()&&player.countCards('h')<=player.hp; - }, - content:function(){ - player.draw(get.is.altered('liechao')?3:4); - player.turnOver(); - player.skip('phaseDiscard'); - }, - ai:{ - order:10, - result:{ - player:1 - } - } - }, - qingliu:{ - trigger:{player:'damageBefore'}, - filter:function(event){ - return event.nature=='fire'; - }, - forced:true, - content:function(){ - trigger.cancel(); - }, - ai:{ - nofire:true, - effect:{ - target:function(card,player,target,current){ - if(get.tag(card,'fireDamage')) return 0; - } - } - } - }, - zhongjia:{ - trigger:{player:'damageEnd'}, - forced:true, - filter:function(event){ - return event.num>0; - }, - content:function(){ - player.changeHujia(); - }, - ai:{ - nohujia:true, - maixie:true, - maixie_hp:true, - skillTagFilter:function(player){ - return player.hp>player.countCards('h')&&player.hp>1; - }, - threaten:function(player,target){ - if(!target.hujia) return 0.8; - }, - effect:{ - target:function(card,player,target){ - if(get.tag(card,'damage')){ - if(player.hasSkillTag('jueqing',false,target)) return [1,-1]; - return 0.8; - } - } - } - } - }, - dunji:{ - enable:'phaseUse', - usable:1, - filter:function(event,player){ - return player.hujia?true:false; - }, - filterTarget:function(card,player,target){ - return player!=target&&get.distance(player,target,'attack')<=1; - }, - selectTarget:function(){ - return [1,_status.event.player.hujia]; - }, - contentBefore:function(){ - player.changeHujia(-targets.length); - }, - content:function(){ - target.damage(); - }, - ai:{ - order:9, - result:{ - target:function(player,target){ - var eff=get.damageEffect(target,player,target)+0.5; - if(eff>0&&eff<=0.5) return 0; - return eff; - } - } - } - }, - fengxing:{ - trigger:{player:'loseEnd'}, - direct:true, - filter:function(event,player){ - return _status.currentPhase!=player&&!player.hasSkill('fengxing2')&&player.countCards('he')>0; - }, - content:function(){ - 'step 0' - player.addTempSkill('fengxing2'); - player.chooseToDiscard('he',get.prompt('fengxing')).set('ai',function(card){ - return 7-get.value(card); - }).set('autodelay',0.5).logSkill='fengxing'; - 'step 1' - if(result.bool){ - player.draw(2); - } - }, - ai:{ - threaten:0.6 - } - }, - fengxing2:{}, - fengxian:{ - enable:'phaseUse', - usable:1, - filterTarget:function(card,player,target){ - return target.countCards('h')>0; - }, - selectTarget:-1, - content:function(){ - target.chooseToDiscard(true); - }, - ai:{ - order:8, - result:{ - target:function(player,target){ - var nh=target.countCards('h'); - switch(nh){ - case 0:return 0; - case 1:return -1.5; - case 2:return -1.3; - case 3:return -1; - default:return -0.8; - } - } - } - } - }, - qiaodong:{ - enable:['chooseToRespond'], - filterCard:{type:'equip'}, - filter:function(event,player){ - return player.countCards('he',{type:'equip'})>0; - }, - viewAs:{name:'shan'}, - position:'he', - prompt:'将一张装备牌当闪使用或打出', - check:function(){return 1}, - ai:{ - respondShan:true, - skillTagFilter:function(player){ - if(!player.countCards('he',{type:'equip'})) return false; - } - } - }, - hsmengjing_mengye:{ - trigger:{player:'phaseEnd'}, - forced:true, - priority:-1, - filter:function(event,player){ - return player.countCards('he')>0; - }, - content:function(){ - player.discard(player.getCards('he')); - player.removeSkill('hsmengjing_mengye'); - }, - mark:'image', - intro:{ - content:'结束阶段,弃置所有牌' - } - }, - zhanhou:{ - enable:'phaseUse', - filterCard:{subtype:'equip2'}, - position:'he', - filter:function(event,player){ - return player.countCards('he',{subtype:'equip2'})>0; - }, - check:function(card){ - return 7-get.value(card); - }, - content:function(){ - player.changeHujia(); - }, - ai:{ - order:9.5, - result:{ - player:1 - } - }, - // mod:{ - // globalFrom:function(from,to,distance){ - // return distance-from.hujia; - // } - // }, - }, - shijie:{ - trigger:{player:'phaseEnd'}, - direct:true, - filter:function(event,player){ - return game.hasPlayer(function(current){ - return current!=player&¤t.countCards('h'); - }); - }, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('shijie'),function(card,player,target){ - return player!=target&&target.countCards('h')>0; - }).ai=function(target){ - return 11-get.attitude(player,target); - }; - 'step 1' - if(result.bool){ - player.logSkill('shijie',result.targets); - var target=result.targets[0]; - var card=target.getCards('h').randomGet() - player.gain(card,target); - event.target=target; - target.$giveAuto(card,player); - event.target.draw(); - } - }, - ai:{ - expose:0.1 - } - }, - shengguang:{ - enable:'phaseUse', - filterCard:{color:'red'}, - filter:function(event,player){ - return player.countCards('he',{color:'red'})>0; - }, - position:'he', - usable:1, - check:function(card){ - return 9-get.value(card) - }, - filterTarget:function(card,player,target){ - if(player.storage.anying) return true; - if(target.hp>=target.maxHp) return false; - return true; - }, - content:function(){ - if(player.storage.anying){ - target.loseHp(); - } - else{ - target.recover(); - } - }, - ai:{ - order:9, - result:{ - target:function(player,target){ - if(player.storage.anying) return -1; - if(target.hp==1) return 5; - if(player==target&&player.countCards('h')>player.hp) return 5; - return 2; - } - }, - threaten:2, - expose:0.2 - } - }, - xinci:{ - enable:'phaseUse', - filterCard:{color:'black'}, - filter:function(event,player){ - return player.countCards('he',{color:'black'})>0; - }, - position:'he', - usable:1, - mark:true, - intro:{ - content:'已进入暗影形态' - }, - check:function(card){ - return 9-get.value(card) - }, - filterTarget:true, - content:function(){ - target.loseHp(); - }, - ai:{ - order:9, - result:{ - target:-1 - }, - threaten:2, - expose:0.2 - } - }, - anying:{ - unique:true, - enable:'phaseUse', - skillAnimation:'epic', - animationColor:'thunder', - derivation:'xinci', - filter:function(event,player){ - return !player.storage.anying&&player.countCards('he',{color:'black'})>0; - }, - filterCard:{color:'black'}, - position:'he', - check:function(card){ - return 5-get.value(card); - }, - content:function(){ - player.storage.anying=true; - player.awakenSkill('anying'); - player.removeSkill('shengguang'); - player.addAdditionalSkill('anying','xinci'); - }, - ai:{ - order:1, - result:{ - player:function(player){ - if(player.hasUnknown()) return 0; - return !game.hasPlayer(function(current){ - return get.attitude(player,current)>0&¤t.isDamaged()&¤t.hp<=2; - }); - } - } - } - }, - huanjue:{ - trigger:{global:'useCard'}, - usable:1, - filter:function(event,player){ - if(event.targets.length!=1) return false; - var target=event.targets[0]; - if(event.player==target) return false; - if(player!=event.player&&player!=target) return false; - for(var i=0;i=3) return false; + for(var i=0;i0; + }, + filterTarget:function(card,player,target){ + if(get.color(card)=='red'){ + return player.canUse('chiyuxi',target); + } + else{ + return player.canUse('jingleishan',target); + } + }, + selectTarget:-1, + discard:false, + delay:false, + line:false, + filterCard:true, + position:'he', + log:'notarget', + check:function(card){ + return 6-get.value(card); + }, + multitarget:true, + content:function(){ + if(get.color(cards[0])=='black'){ + player.useCard({name:'jingleishan'},cards,targets); + } + else{ + player.useCard({name:'chiyuxi'},cards,targets); + } + }, + ai:{ + order:9.1, + result:{ + target:function(player,target){ + var card=ui.selected.cards[0]; + if(card&&get.color(card)=='black'){ + return get.effect(target,{name:'jingleishan'},player,target); + } + return get.effect(target,{name:'chiyuxi'},player,target); + } + } + } + }, + shifa:{ + trigger:{player:'phaseUseBegin'}, + forced:true, + content:function(){ + 'step 0' + var list=[]; + var target=player.getEnemies().randomGet(); + for(var i=0;i1&&event.target.countCards('he')>0; + }, + content:function(){ + player.discardPlayerCard(trigger.target,get.prompt('yuanzheng',trigger.target),'hej').logSkill=['yuanzheng',trigger.target]; + } + }, + yuanzheng_old:{ + trigger:{player:'useCardToBegin'}, + direct:true, + filter:function(event,player){ + if(event.getParent(2).name=='yuanzheng') return false; + return event.target&&event.target!=player&&get.distance(player,event.target,'attack')>1; + }, + content:function(){ + 'step 0' + player.chooseControl('draw_card','出杀','cancel2',function(){ + if(get.effect(trigger.target,{name:'sha'},player,player)>0){ + return '出杀'; + } + return 'draw_card'; + }).prompt='是对'+get.translation(trigger.target)+'发动否发动【远征】?'; + 'step 1' + if(result.control!='cancel2'){ + if(result.control=='draw_card'){ + player.draw(); + player.logSkill('yuanzheng'); + } + else{ + player.logSkill('yuanzheng',trigger.target); + player.useCard({name:'sha'},trigger.target,false).animate=false; + // player.discardPlayerCard(trigger.target,'he',true); + } + } + } + }, + byuhuo:{ + unique:true, + trigger:{player:'dying'}, + priority:6, + forced:true, + mark:true, + skillAnimation:true, + animationColor:'fire', + init:function(player){ + player.storage.byuhuo=false; + }, + filter:function(event,player){ + if(player.hp>0) return false; + if(player.storage.byuhuo) return false; + return true; + }, + content:function(){ + player.storage.byuhuo=true; + player.addSkill('byuhuo2'); + player.maxHp=2; + player.hp=2; + player.update(); + if(!player.isTurnedOver()){ + player.turnOver(); + } + }, + ai:{ + threaten:function(player,target){ + if(!target.storage.byuhuo) return 0.6; + } + }, + intro:{ + content:function(storage,player){ + if(storage){ + if(player.hasSkill('byuhuo2')){ + return '不能成为其他角色卡牌的目标;在下一准备阶段,对所有其他角色造成两点火焰伤害'; + } + return '已发动'; + } + else{ + return '未发动'; + } + } + } + }, + byuhuo2:{ + trigger:{player:'phaseBegin'}, + forced:true, + content:function(){ + 'step 0' + var targets=game.filterPlayer(); + targets.remove(player); + targets.sort(lib.sort.seat); + event.targets=targets; + event.num=0; + player.unmarkSkill('byuhuo'); + 'step 1' + if(num0; + }, + content:function(){ + 'step 0' + var nh=player.countCards('h'); + if(nh){ + player.draw(nh); + } + else{ + event.finish(); + } + 'step 1' + var hs=player.getCards('h'); + if(hs.length>10&&hs.length>player.hp){ + player.discard(hs.randomGets(hs.length-player.hp)); + } + }, + ai:{ + maixie:true, + maixie_hp:true, + effect:{ + target:function(card,player,target){ + if(get.tag(card,'damage')){ + if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; + if(!target.hasFriend()) return; + var nh=target.countCards('h'); + if(nh>5) return [1,-1]; + if(nh<=1) return [1,-0.1]; + if(nh==2){ + if(target.hp>=2) return [1,0.1]; + } + else{ + if(target.hp>=4) return [1,2]; + if(target.hp==3) return [1,1.5]; + if(target.hp==2) return [1,0.5]; + } + } + } + } + } + }, + chuidiao:{ + trigger:{player:'phaseEnd'}, + forced:true, + content:function(){ + var num=Math.floor(Math.random()*3); + if(num) player.draw(num); + }, + }, + hhudun:{ + trigger:{global:'phaseBegin'}, + forced:true, + filter:function(event,player){ + return !player.hujia; + }, + content:function(){ + player.changeHujia(); + }, + group:'hhudun_hujia', + subSkill:{ + hujia:{ + trigger:{player:'damageZero'}, + filter:function(event){ + return event.hujia; + }, + forced:true, + content:function(){ + player.draw(); + } + } + }, + ai:{ + threaten:function(player,target){ + if(target.hujia){ + return 0.5; + } + else{ + return 2; + } + } + } + }, + fenlie:{ + audio:2, + forced:true, + trigger:{player:'gainAfter'}, + filter:function(event,player){ + if(event.parent.parent.name=='phaseDraw') return false; + if(event.parent.name=='fenlie') return false; + if(!event.cards) return false; + for(var i=0;i3000&&event.player.countCards('he')>0&&event.player.isAlive(); + }, + content:function(){ + player.line(trigger.player,'green'); + trigger.player.chooseToDiscard('he',true,Math.floor(trigger.player.storage.shixu/3000)); + delete trigger.player.storage.shixu; + } + } + } + }, + jixuan:{ + trigger:{player:'phaseAfter'}, + forced:true, + priority:-50, + filter:function(event,player){ + return event.skill!='jixuan'; + }, + content:function(){ + player.draw(); + player.insertPhase(); + }, + ai:{ + threaten:1.8 + }, + }, + qianghua:{ + trigger:{player:'useCardAfter'}, + filter:function(event,player){ + if(event.parent.name=='qianghua') return false; + if(player.storage.qianghua>=1) return false; + if(_status.currentPhase!=player) return false; + if(event.parent.parent.name!='phaseUse') return false; + if(!event.targets||!event.card) return false; + if(get.info(event.card).complexTarget) return false; + if(!lib.filter.cardEnabled(event.card,player,event.parent)) return false; + var type=get.type(event.card); + if(type!='basic'&&type!='trick') return false; + var card=game.createCard(event.card.name,event.card.suit,event.card.number,event.card.nature); + var targets=event._targets||event.targets; + for(var i=0;i0&& + event.targets.contains(player)==false&&event.targets.length==1; + }, + direct:true, + content:function(){ + "step 0" + var effect=0; + for(var i=0;i0; + }, + content:function(){ + trigger.num--; + player.removeSkill('stuxi2'); + } + }, + bingdong:{ + trigger:{source:'damageEnd'}, + forced:true, + usable:1, + filter:function(event,player){ + if(!lib.card.hslingjian_jinjilengdong){ + return false; + } + return true; + }, + content:function(){ + player.gain(game.createCard('hslingjian_jinjilengdong'),'gain2'); + } + }, + bingdong_old:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return !player.isTurnedOver(); + }, + filterTarget:function(card,player,target){ + return !target.isTurnedOver()&&player!=target; + }, + content:function(){ + 'step 0' + if(!player.isTurnedOver()){ + player.turnOver(); + } + 'step 1' + if(!target.isTurnedOver()){ + target.turnOver(); + } + }, + ai:{ + order:1, + expose:0.2, + result:{ + target:function(player,target){ + if(get.attitude(player,target)<-3&&player.identity!='zhu'){ + return -1; + } + return 0; + } + } + } + }, + luoshi:{ + trigger:{player:'damageEnd'}, + forced:true, + filter:function(event,player){ + return player.countCards('he')>0||(event.source&&event.source.countCards('he')>0); + }, + content:function(){ + 'step 0' + var hs=player.getCards('he'); + if(hs.length){ + player.discard(hs.randomGet()) + } + 'step 1' + if(trigger.source){ + var hs=trigger.source.getCards('he'); + if(hs.length){ + trigger.source.discard(hs.randomGet()) + } + } + }, + ai:{ + maixie_defend:true, + } + }, + ronghuo:{ + trigger:{player:'useCardToBefore'}, + priority:7, + filter:function(event,player){ + if(event.card.name=='sha'&&!event.card.nature) return true; + }, + check:function(event,player){ + var att=get.attitude(player,event.target); + if(event.target.hasSkillTag('nofire')){ + return att>0; + } + return att<=0; + }, + forced:true, + content:function(){ + trigger.card.nature='fire'; + player.addSkill('ronghuo2'); + player.storage.ronghuo=trigger.card; + } + }, + ronghuo2:{ + trigger:{player:'useCardAfter'}, + forced:true, + popup:false, + content:function(){ + delete player.storage.ronghuo.nature; + } + }, + fushi:{ + enable:'phaseUse', + filterTarget:function(card,player,target){ + return target.hp1){ + if(target.hp<=1) att+=2; + if(target.hp<=2) att++; + } + return att; + }; + 'step 1' + if(result.bool){ + event.target=result.targets[0]; + player.logSkill('jiaohui',event.target); + event.target.chooseDrawRecover(true); + } + }, + }, + bimeng:{ + trigger:{player:'phaseEnd'}, + frequent:true, + content:function(){ + var list=['hsmengjing_feicuiyoulong','hsmengjing_huanxiaojiemei', + 'hsmengjing_suxing','hsmengjing_mengye','hsmengjing_mengjing']; + player.gain(game.createCard(list.randomGet())); + player.$draw(); + }, + ai:{ + threaten:2 + } + }, + liehun:{ + trigger:{player:'phaseEnd'}, + forced:true, + filter:function(event,player){ + return player.hasCard(function(card){ + return get.type(card)!='basic'&&!get.info(card).unique; + }); + }, + content:function(){ + var hs=player.getCards('h'); + for(var i=0;i0){ + if(target==player){ + num++; + } + if(target.hp==1){ + num+=3; + } + else if(target.hp==2){ + num+=1; + } + } + return num; + } + "step 1" + if(result.bool){ + player.logSkill('lingzhou',result.targets); + result.targets[0].chooseDrawRecover(true); + } + }, + ai:{ + expose:0.2, + threaten:1.5, + noautowuxie:true, + } + }, + mieshi:{ + trigger:{player:'phaseEnd'}, + forced:true, + content:function(){ + 'step 0' + player.loseHp(); + 'step 1' + event.target=game.filterPlayer().randomGet(player); + if(!event.target){ + event.finish(); + return; + } + player.line(event.target,'fire'); + game.delayx(); + 'step 2' + event.target.damage('fire'); + } + }, + xmojian:{ + trigger:{player:'turnOverAfter'}, + direct:true, + filter:function(event,player){ + return !player.isTurnedOver(); + }, + content:function(){ + "step 0" + player.chooseTarget(get.prompt('xmojian'),function(card,player,target){ + return lib.filter.targetEnabled({name:'sha'},player,target); + }).ai=function(target){ + return get.effect(target,{name:'sha'},player); + } + "step 1" + if(result.bool){ + player.logSkill('xmojian'); + player.useCard({name:'sha'},result.targets,false); + } + }, + ai:{ + expose:0.2, + } + }, + xshixin:{ + trigger:{source:'damageEnd'}, + forced:true, + alter:true, + filter:function(event,player){ + if(event._notrigger.contains(event.player)) return false; + if(get.is.altered('xshixin')&&event.player.hp0){ + if(num>3){ + num=3; + } + if(get.is.altered('enze')&&num>2){ + num=2; + } + target.draw(num); + } + else if(num<0){ + if(get.is.altered('enze')&&num<-2){ + num=-2; + } + target.chooseToDiscard(-num,true); + } + }, + ai:{ + threaten:1.8, + order:function(name,player){ + var max=true,num=0; + var players=game.filterPlayer(); + for(var i=0;inum){ + if(att>0){ + max=true; + } + else if(att<0){ + max=false; + } + num=att*dh; + } + } + if(max) return 10; + return 0.5; + }, + result:{ + player:function(player,target){ + return (player.countCards('h')-target.countCards('h'))*get.attitude(player,target); + } + }, + expose:0.2 + } + }, + chongsheng:{ + unique:true, + enable:'chooseToUse', + mark:true, + init:function(player){ + player.storage.chongsheng=2; + player.syncStorage('chongsheng'); + }, + filter:function(event,player){ + if(event.type!='dying') return false; + if(player!=event.dying) return false; + if(player.storage.chongsheng<=0) return false; + return true; + }, + content:function(){ + 'step 0' + player.hp=Math.min(player.storage.chongsheng,player.maxHp); + player.discard(player.getCards('hej')); + player.draw(player.storage.chongsheng); + player.storage.chongsheng--; + if(player.storage.chongsheng<=0){ + player.unmarkSkill('chongsheng'); + } + 'step 1' + if(player.isLinked()) player.link(); + 'step 2' + if(player.isTurnedOver()) player.turnOver(); + player.syncStorage('chongsheng'); + }, + ai:{ + skillTagFilter:function(player){ + if(player.storage.chongsheng<=0) return false; + if(player.hp>0) return false; + }, + save:true, + result:{ + player:10 + }, + threaten:function(player,target){ + if(target.storage.chongsheng>0) return 0.6; + } + }, + intro:{ + content:'time' + } + }, + guozai:{ + enable:'phaseUse', + usable:1, + alter:true, + filter:function(event,player){ + return player.countCards('h')<(get.is.altered('guozai')?3:4); + }, + init:function(player){ + player.storage.guozai2=0; + }, + content:function(){ + var num=(get.is.altered('guozai')?3:4)-player.countCards('h'); + player.draw(num); + player.addSkill('guozai2'); + player.storage.guozai2+=num; + game.addVideo('storage',player,['guozai2',player.storage.guozai2]); + }, + ai:{ + order:1, + result:{ + player:1 + } + } + }, + guozai2:{ + mark:true, + intro:{ + content:'结束阶段需弃置&张牌' + }, + trigger:{player:'phaseUseEnd'}, + forced:true, + content:function(){ + player.chooseToDiscard('he',true,player.storage.guozai2); + player.storage.guozai2=0; + player.removeSkill('guozai2'); + } + }, + guozaix:{ + enable:'phaseUse', + usable:2, + filter:function(event,player){ + return player.countCards('h')<4; + }, + init:function(player){ + player.storage.guozaix2=0; + }, + content:function(){ + var num=4-player.countCards('h'); + player.draw(num); + player.addSkill('guozaix2'); + player.storage.guozaix2+=num; + game.addVideo('storage',player,['guozaix2',player.storage.guozaix2]); + }, + ai:{ + order:1, + result:{ + player:1 + } + } + }, + guozaix2:{ + mark:true, + intro:{ + content:'结束阶段需弃置&张牌' + }, + trigger:{player:'phaseUseEnd'}, + forced:true, + content:function(){ + player.chooseToDiscard('he',true,player.storage.guozaix2); + player.storage.guozaix2=0; + player.removeSkill('guozaix2'); + } + }, + hanshuang:{ + trigger:{source:'damageEnd'}, + forced:true, + alter:true, + filter:function(event,player){ + if(event._notrigger.contains(event.player)) return false; + return event.card&&get.color(event.card)=='black'&& + !event.player.isTurnedOver()&&event.player.isAlive(); + }, + content:function(){ + trigger.player.turnOver(); + if(get.is.altered('hanshuang')) trigger.player.draw(); + player.loseHp(); + }, + ai:{ + threaten:1.5, + effect:{ + player:function(card,player,target,current){ + if(get.color(card)=='black'&&get.tag(card,'damage')){ + return [1,0,1,-2]; + } + } + } + } + }, + bingshi:{ + global:'bingshi2' + }, + bingshi2:{ + trigger:{global:'dieAfter'}, + forced:true, + globalFixed:true, + filter:function(event,player){ + return event.player.hasSkill('bingshi')&&event.player.isDead(); + }, + content:function(){ + trigger.player.line(player,'thunder'); + player.damage('nosource','thunder').animate=false; + player.$damage(trigger.player); + player.$damagepop(-1,'thunder'); + if(lib.config.animation&&!lib.config.low_performance){ + player.$thunder(); + } + if(!event.parent.parent.bingshi_logv){ + event.parent.parent.bingshi_logv=true; + game.logv(trigger.player,'bingshi',game.filterPlayer(),event.parent.parent); + } + } + }, + huanwu:{ + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return !target.storage.huanwu; + }, + content:function(){ + target.gainMaxHp(); + target.recover(); + target.draw(2); + target.storage.huanwu=true; + target.mark('huanwu',{ + name:'唤雾', + content:'已发动' + }); + game.addVideo('mark',target,{ + name:'唤雾', + content:'已发动', + id:'huanwu' + }); + }, + ai:{ + threaten:1.2, + result:{ + target:function(player,target){ + return 1/target.hp; + } + }, + order:10, + expose:0.3 + } + }, + fengnu:{ + mod:{ + cardUsable:function(card){ + if(get.info(card)&&get.info(card).forceUsable) return; + return Infinity; + }, + targetInRange:function(){ + if(!get.is.altered('fengnu')) return true; + } + }, + alter:true, + trigger:{player:'useCard'}, + filter:function(event,player){ + if(_status.currentPhase!=player) return false; + return player.countUsed(event.card)>1; + }, + forced:true, + usable:3, + content:function(){ + player.draw(); + } + }, + shengdun:{ + trigger:{player:'phaseBegin'}, + forced:true, + filter:function(event,player){ + return !player.hujia; + }, + content:function(){ + player.changeHujia(); + player.update(); + }, + }, + shengdun_old:{ + trigger:{player:'phaseBegin'}, + silent:true, + priority:10, + init2:function(player){ + player.markSkill('shengdun'); + }, + content:function(){ + if(player.storage.shengdun){ + player.markSkill('shengdun'); + } + player.storage.shengdun=false; + }, + intro:{ + content:'未发动' + }, + group:'shengdun2' + }, + shengdun_old2:{ + trigger:{player:'damageBegin'}, + forced:true, + filter:function(event,player){ + return event.num>0&&!player.storage.shengdun; + }, + content:function(){ + trigger.num--; + player.storage.shengdun=true; + player.unmarkSkill('shengdun'); + } + }, + jingmeng:{ + trigger:{player:'useCard'}, + frequent:true, + filter:function(event,player){ + return _status.currentPhase==player&&player.countUsed()==1; + }, + content:function(){ + var type=get.type(trigger.card); + var card=get.cardPile2(function(card){ + return get.type(card)==type; + }); + if(card){ + player.gain(card,'gain2','log'); + } + }, + ai:{ + threaten:1.1 + } + }, + kuixin_old:{ + trigger:{player:'phaseEnd'}, + direct:true, + filter:function(event,player){ + var nh=player.countCards('h'); + var nm=1; + return game.hasPlayer(function(current){ + if(current!=player&&Math.abs(current.countCards('h')-nh)<=nm){ + return true; + } + }); + }, + content:function(){ + 'step 0' + var nh=player.countCards('h'); + var nm=1; + var check=true; + if(player.countCards('h','tao')){ + check=false; + } + else if(player.countCards('h','shan')&&player.countCards('h','wuxie')){ + check=false; + } + player.chooseTarget(get.prompt('kuixin'),function(card,player,target){ + return target!=player&&Math.abs(target.countCards('h')-nh)<=nm; + }).ai=function(target){ + if(!check) return 0; + if(get.attitude(player,target)<0){ + return target.countCards('h')-nh; + } + return 0; + }; + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('kuixin',result.targets); + var cards0=target.getCards('h'); + var cards1=player.getCards('h'); + target.gain(cards1,player); + player.gain(cards0,target); + target.$give(cards0.length,player); + player.$give(cards1.length,target); + } + }, + ai:{ + expose:0.2, + threaten:1.5 + } + }, + hswuji:{ + trigger:{player:'phaseUseEnd'}, + frequent:true, + filter:function(event,player){ + return player.countUsed()>0; + }, + content:function(){ + player.draw(player.countUsed()); + }, + ai:{ + threaten:1.3 + } + }, + bingshuang:{ + trigger:{source:'damageEnd'}, + filter:function(event,player){ + if(event._notrigger.contains(event.player)) return false; + return event.card&&get.type(event.card)=='trick'&& + event.player.isAlive()&&!event.player.isTurnedOver(); + }, + check:function(event,player){ + if(event.player.hasSkillTag('noturn')) return; + if(event.player.isTurnedOver()){ + return get.attitude(player,event.player)>0; + } + return get.attitude(player,event.player)<=0; + }, + logTarget:'player', + content:function(){ + trigger.player.draw(2); + trigger.player.turnOver(); + } + }, + yanshu:{ + trigger:{player:'discardAfter'}, + frequent:true, + usable:1, + filter:function(event,player){ + if(!event.cards) return false; + for(var i=0;i0; + }, + content:function(){ + trigger.player.recover(); + player.addTempSkill('shengyan2'); + }, + ai:{ + expose:0.2 + } + }, + shengyan2:{}, + liechao:{ + enable:'phaseUse', + usable:1, + alter:true, + filter:function(event,player){ + return !player.isTurnedOver()&&player.countCards('h')<=player.hp; + }, + content:function(){ + player.draw(get.is.altered('liechao')?3:4); + player.turnOver(); + player.skip('phaseDiscard'); + }, + ai:{ + order:10, + result:{ + player:1 + } + } + }, + qingliu:{ + trigger:{player:'damageBefore'}, + filter:function(event){ + return event.nature=='fire'; + }, + forced:true, + content:function(){ + trigger.cancel(); + }, + ai:{ + nofire:true, + effect:{ + target:function(card,player,target,current){ + if(get.tag(card,'fireDamage')) return 0; + } + } + } + }, + zhongjia:{ + trigger:{player:'damageEnd'}, + forced:true, + filter:function(event){ + return event.num>0; + }, + content:function(){ + player.changeHujia(); + }, + ai:{ + nohujia:true, + maixie:true, + maixie_hp:true, + skillTagFilter:function(player){ + return player.hp>player.countCards('h')&&player.hp>1; + }, + threaten:function(player,target){ + if(!target.hujia) return 0.8; + }, + effect:{ + target:function(card,player,target){ + if(get.tag(card,'damage')){ + if(player.hasSkillTag('jueqing',false,target)) return [1,-1]; + return 0.8; + } + } + } + } + }, + dunji:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.hujia?true:false; + }, + filterTarget:function(card,player,target){ + return player!=target&&get.distance(player,target,'attack')<=1; + }, + selectTarget:function(){ + return [1,_status.event.player.hujia]; + }, + contentBefore:function(){ + player.changeHujia(-targets.length); + }, + content:function(){ + target.damage(); + }, + ai:{ + order:9, + result:{ + target:function(player,target){ + var eff=get.damageEffect(target,player,target)+0.5; + if(eff>0&&eff<=0.5) return 0; + return eff; + } + } + } + }, + fengxing:{ + trigger:{player:'loseEnd'}, + direct:true, + filter:function(event,player){ + return _status.currentPhase!=player&&!player.hasSkill('fengxing2')&&player.countCards('he')>0; + }, + content:function(){ + 'step 0' + player.addTempSkill('fengxing2'); + player.chooseToDiscard('he',get.prompt('fengxing')).set('ai',function(card){ + return 7-get.value(card); + }).set('autodelay',0.5).logSkill='fengxing'; + 'step 1' + if(result.bool){ + player.draw(2); + } + }, + ai:{ + threaten:0.6 + } + }, + fengxing2:{}, + fengxian:{ + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return target.countCards('h')>0; + }, + selectTarget:-1, + content:function(){ + target.chooseToDiscard(true); + }, + ai:{ + order:8, + result:{ + target:function(player,target){ + var nh=target.countCards('h'); + switch(nh){ + case 0:return 0; + case 1:return -1.5; + case 2:return -1.3; + case 3:return -1; + default:return -0.8; + } + } + } + } + }, + qiaodong:{ + enable:['chooseToRespond'], + filterCard:{type:'equip'}, + filter:function(event,player){ + return player.countCards('he',{type:'equip'})>0; + }, + viewAs:{name:'shan'}, + position:'he', + prompt:'将一张装备牌当闪使用或打出', + check:function(){return 1}, + ai:{ + respondShan:true, + skillTagFilter:function(player){ + if(!player.countCards('he',{type:'equip'})) return false; + } + } + }, + hsmengjing_mengye:{ + trigger:{player:'phaseEnd'}, + forced:true, + priority:-1, + filter:function(event,player){ + return player.countCards('he')>0; + }, + content:function(){ + player.discard(player.getCards('he')); + player.removeSkill('hsmengjing_mengye'); + }, + mark:'image', + intro:{ + content:'结束阶段,弃置所有牌' + } + }, + zhanhou:{ + enable:'phaseUse', + filterCard:{subtype:'equip2'}, + position:'he', + filter:function(event,player){ + return player.countCards('he',{subtype:'equip2'})>0; + }, + check:function(card){ + return 7-get.value(card); + }, + content:function(){ + player.changeHujia(); + }, + ai:{ + order:9.5, + result:{ + player:1 + } + }, + // mod:{ + // globalFrom:function(from,to,distance){ + // return distance-from.hujia; + // } + // }, + }, + shijie:{ + trigger:{player:'phaseEnd'}, + direct:true, + filter:function(event,player){ + return game.hasPlayer(function(current){ + return current!=player&¤t.countCards('h'); + }); + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('shijie'),function(card,player,target){ + return player!=target&&target.countCards('h')>0; + }).ai=function(target){ + return 11-get.attitude(player,target); + }; + 'step 1' + if(result.bool){ + player.logSkill('shijie',result.targets); + var target=result.targets[0]; + var card=target.getCards('h').randomGet() + player.gain(card,target); + event.target=target; + target.$giveAuto(card,player); + event.target.draw(); + } + }, + ai:{ + expose:0.1 + } + }, + shengguang:{ + enable:'phaseUse', + filterCard:{color:'red'}, + filter:function(event,player){ + return player.countCards('he',{color:'red'})>0; + }, + position:'he', + usable:1, + check:function(card){ + return 9-get.value(card) + }, + filterTarget:function(card,player,target){ + if(player.storage.anying) return true; + if(target.hp>=target.maxHp) return false; + return true; + }, + content:function(){ + if(player.storage.anying){ + target.loseHp(); + } + else{ + target.recover(); + } + }, + ai:{ + order:9, + result:{ + target:function(player,target){ + if(player.storage.anying) return -1; + if(target.hp==1) return 5; + if(player==target&&player.countCards('h')>player.hp) return 5; + return 2; + } + }, + threaten:2, + expose:0.2 + } + }, + xinci:{ + enable:'phaseUse', + filterCard:{color:'black'}, + filter:function(event,player){ + return player.countCards('he',{color:'black'})>0; + }, + position:'he', + usable:1, + mark:true, + intro:{ + content:'已进入暗影形态' + }, + check:function(card){ + return 9-get.value(card) + }, + filterTarget:true, + content:function(){ + target.loseHp(); + }, + ai:{ + order:9, + result:{ + target:-1 + }, + threaten:2, + expose:0.2 + } + }, + anying:{ + unique:true, + enable:'phaseUse', + skillAnimation:'epic', + animationColor:'thunder', + derivation:'xinci', + filter:function(event,player){ + return !player.storage.anying&&player.countCards('he',{color:'black'})>0; + }, + filterCard:{color:'black'}, + position:'he', + check:function(card){ + return 5-get.value(card); + }, + content:function(){ + player.storage.anying=true; + player.awakenSkill('anying'); + player.removeSkill('shengguang'); + player.addAdditionalSkill('anying','xinci'); + }, + ai:{ + order:1, + result:{ + player:function(player){ + if(player.hasUnknown()) return 0; + return !game.hasPlayer(function(current){ + return get.attitude(player,current)>0&¤t.isDamaged()&¤t.hp<=2; + }); + } + } + } + }, + huanjue:{ + trigger:{global:'useCard'}, + usable:1, + filter:function(event,player){ + if(event.targets.length!=1) return false; + var target=event.targets[0]; + if(event.player==target) return false; + if(player!=event.player&&player!=target) return false; + for(var i=0;i0; - }, - filterTarget:function(card,player,target){ - return player!=target&&!target.hasSkill('mdzhoufu2'); - }, - prepare:'throw', - discard:false, - content:function(){ - target.$gain2(cards); - target.storage.mdzhoufu2=cards[0]; - target.addSkill('mdzhoufu2'); - target.storage.mdzhoufu3=player; - game.addVideo('storage',target,['mdzhoufu2',get.cardInfo(cards[0]),'card']); - ui.special.appendChild(cards[0]); - }, - check:function(card){ - if(get.suit(card)=='spade'){ - return 6-get.value(card); - } - return -1; - }, - ai:{ - tag:{ - rejudge:0.1, - }, - threaten:1.5, - expose:0.1, - order:10, - result:{ - target:-1 - } - } - }, - mdzhoufu2:{ - trigger:{player:'judge'}, - forced:true, - priority:10, - mark:'card', - content:function(){ - "step 0" - player.storage.mdzhoufu2.discard(); - player.$throw(player.storage.mdzhoufu2); - if(player.storage.mdzhoufu2.clone){ - player.storage.mdzhoufu2.clone.classList.add('thrownhighlight'); - game.addVideo('highlightnode',player,get.cardInfo(player.storage.mdzhoufu2)); - } - if(player.storage.mdzhoufu3.isIn()){ - player.storage.mdzhoufu3.line(player,'green'); - player.storage.mdzhoufu3.gain(player.judging[0]); - player.storage.mdzhoufu3.$gain2(player.judging[0]); - } - else{ - player.judging[0].discard(); - game.delay(1.5); - } - player.removeSkill('mdzhoufu2'); - "step 1" - player.judging[0]=player.storage.mdzhoufu2; - trigger.position.appendChild(player.storage.mdzhoufu2); - // trigger.untrigger(); - game.log(player,'的判定牌改为',player.storage.mdzhoufu2); - delete player.storage.mdzhoufu2; - delete player.storage.mdzhoufu3; - }, - intro:{ - content:'card' - }, - }, - zuzhou_old:{ - trigger:{player:'damageEnd',source:'damageEnd'}, - check:function(event,player){ - var target=(player==event.player)?event.source:event.player; - return get.attitude(player,target)<0; - }, - filter:function(event,player){ - var target=(player==event.player)?event.source:event.player; - return target.isAlive(); - }, - prompt:function(event,player){ - var target=(player==event.player)?event.source:event.player; - return get.prompt('zuzhou',target); - }, - content:function(){ - "step 0" - event.target=(player==trigger.player)?trigger.source:trigger.player; - event.target.judge(function(card){ - return get.color(card)=='black'?-1:0; - }); - "step 1" - if(result.color=='black'){ - event.target.loseHp(); - } - }, - ai:{ - expose:0.1, - threaten:1.3 - } - }, - xianzhi:{ - trigger:{global:'judgeBegin'}, - frequent:true, - filter:function(){ - return ui.cardPile.childNodes.length>1; - }, - check:function(){ - return false; - }, - content:function(){ - 'step 0' - var str=''; - if(trigger.card) str=get.translation(trigger.card.viewAs||trigger.card.name); - else if(trigger.skill) str=get.translation(trigger.skill); - else str=get.translation(trigger.parent.name); + }, + ai:{ + threaten:1.5 + }, + group:'zuzhou_remove', + subSkill:{ + remove:{ + trigger:{global:'damageEnd'}, + filter:function(event,player){ + return event.card&&event.card.name=='fulei'; + }, + forced:true, + content:function(){ + trigger.card.expired=true; + game.log(trigger.card,'被移去'); + } + } + } + }, + mdzhoufu:{ + enable:'phaseUse', + filterCard:{color:'black'}, + filter:function(event,player){ + return player.countCards('h',{color:'black'})>0; + }, + filterTarget:function(card,player,target){ + return player!=target&&!target.hasSkill('mdzhoufu2'); + }, + prepare:'throw', + discard:false, + content:function(){ + target.$gain2(cards); + target.storage.mdzhoufu2=cards[0]; + target.addSkill('mdzhoufu2'); + target.storage.mdzhoufu3=player; + game.addVideo('storage',target,['mdzhoufu2',get.cardInfo(cards[0]),'card']); + ui.special.appendChild(cards[0]); + }, + check:function(card){ + if(get.suit(card)=='spade'){ + return 6-get.value(card); + } + return -1; + }, + ai:{ + tag:{ + rejudge:0.1, + }, + threaten:1.5, + expose:0.1, + order:10, + result:{ + target:-1 + } + } + }, + mdzhoufu2:{ + trigger:{player:'judge'}, + forced:true, + priority:10, + mark:'card', + content:function(){ + "step 0" + player.storage.mdzhoufu2.discard(); + player.$throw(player.storage.mdzhoufu2); + if(player.storage.mdzhoufu2.clone){ + player.storage.mdzhoufu2.clone.classList.add('thrownhighlight'); + game.addVideo('highlightnode',player,get.cardInfo(player.storage.mdzhoufu2)); + } + if(player.storage.mdzhoufu3.isIn()){ + player.storage.mdzhoufu3.line(player,'green'); + player.storage.mdzhoufu3.gain(player.judging[0]); + player.storage.mdzhoufu3.$gain2(player.judging[0]); + } + else{ + player.judging[0].discard(); + game.delay(1.5); + } + player.removeSkill('mdzhoufu2'); + "step 1" + player.judging[0]=player.storage.mdzhoufu2; + trigger.position.appendChild(player.storage.mdzhoufu2); + // trigger.untrigger(); + game.log(player,'的判定牌改为',player.storage.mdzhoufu2); + delete player.storage.mdzhoufu2; + delete player.storage.mdzhoufu3; + }, + intro:{ + content:'card' + }, + }, + zuzhou_old:{ + trigger:{player:'damageEnd',source:'damageEnd'}, + check:function(event,player){ + var target=(player==event.player)?event.source:event.player; + return get.attitude(player,target)<0; + }, + filter:function(event,player){ + var target=(player==event.player)?event.source:event.player; + return target.isAlive(); + }, + prompt:function(event,player){ + var target=(player==event.player)?event.source:event.player; + return get.prompt('zuzhou',target); + }, + content:function(){ + "step 0" + event.target=(player==trigger.player)?trigger.source:trigger.player; + event.target.judge(function(card){ + return get.color(card)=='black'?-1:0; + }); + "step 1" + if(result.color=='black'){ + event.target.loseHp(); + } + }, + ai:{ + expose:0.1, + threaten:1.3 + } + }, + xianzhi:{ + trigger:{global:'judgeBegin'}, + frequent:true, + filter:function(){ + return ui.cardPile.childNodes.length>1; + }, + check:function(){ + return false; + }, + content:function(){ + 'step 0' + var str=''; + if(trigger.card) str=get.translation(trigger.card.viewAs||trigger.card.name); + else if(trigger.skill) str=get.translation(trigger.skill); + else str=get.translation(trigger.parent.name); - var cards=[ui.cardPile.childNodes[0],ui.cardPile.childNodes[1]]; - var att=get.attitude(player,trigger.player); - var delta=trigger.judge(ui.cardPile.childNodes[1])-trigger.judge(ui.cardPile.childNodes[0]); - player.chooseControl('调换顺序','cancel2', - ui.create.dialog('先知:'+get.translation(trigger.player)+'的'+str+'判定',cards,'hidden')).ai=function(){ - if(att*delta>0) return '调换顺序'; - else return 'cancel2'; - }; - 'step 1' - if(result.control=='调换顺序'){ - var card=ui.cardPile.firstChild; - ui.cardPile.removeChild(card); - ui.cardPile.insertBefore(card,ui.cardPile.firstChild.nextSibling); - game.log(player,'调换了牌堆顶两张牌的顺序'); - } - }, - ai:{ - expose:0.1, - tag:{ - rejudge:0.5 - } - } - }, - jingxiang:{ - trigger:{player:'chooseToRespondBegin'}, - direct:true, - usable:1, - alter:true, - filter:function(event,player){ - if(event.responded) return false; - return game.hasPlayer(function(current){ - return current!=player&¤t.countCards('h'); - }); - }, - content:function(){ - "step 0" - player.chooseTarget(get.prompt('jingxiang'),function(card,player,target){ - if(target==player) return false; - var nh=target.countCards('h'); - if(nh==0) return false; - if(get.is.altered('jingxiang')){ - return nh<=player.countCards('h'); - } - return true; - }).ai=function(target){ - return 1-get.attitude(player,target); - }; - "step 1" - if(result.bool){ - var target=result.targets[0]; - player.logSkill('jingxiang',target); - event.target=target; - var cards=target.getCards('h'); - player.chooseCardButton('选择'+get.translation(target)+'的一张卡手牌打出',cards).filterButton=function(button){ - return trigger.filterCard(button.link); - } - } - else{ - event.finish(); - } - "step 2" - if(result.bool){ - game.log(player,'使用了',event.target,'的手牌'); - event.target.$throw(result.links); - event.target.lose(result.links); - trigger.untrigger(); - trigger.animate=false; - trigger.responded=true; - result.buttons[0].link.remove(); - trigger.result={bool:true,card:result.buttons[0].link} - } - else{ - player.storage.counttrigger.jingxiang--; - } - }, - ai:{ - effect:{ - target:function(card){ - if(get.tag(card,'respondShan')) return 0.4; - if(get.tag(card,'respondSha')) return 0.4; - } - } - }, - }, - wlianji:{ - trigger:{player:'phaseEnd'}, - frequent:true, - filter:function(event,player){ - return player.countUsed()>player.hp; - }, - content:function(){ - player.draw(2); - }, - init:function(player){player.storage.jingce=true}, - intro:{ - content:function(storage,player){ - if(_status.currentPhase==player) return '已使用'+player.countUsed()+'张牌'; - } - } - }, - mengun:{ - trigger:{global:'useCardToBefore'}, - priority:12, - filter:function(event,player){ - if(event.player==player) return false; - if(_status.currentPhase!=event.player) return false; - if(event.player.hasSkill('mengun2')) return false; - if(get.itemtype(event.card)!='card') return false; - if(!player.countCards('h',{suit:get.suit(event.card)})) return false; - return get.type(event.card)=='basic'; - }, - direct:true, - content:function(){ - "step 0" - var val=get.value(trigger.card); - var suit=get.suit(trigger.card); - var eff=get.effect(trigger.target,trigger.card,trigger.player,player); - var next=player.chooseToDiscard('是否对'+get.translation(trigger.player)+'使用的'+get.translation(trigger.card)+'发动【闷棍】?',function(card){ - return get.suit(card)==suit; - }); - next.logSkill=['mengun',trigger.player]; - next.ai=function(card){ - if(eff>=0) return 0; - return Math.min(8,1+val)-get.value(card); - } - "step 1" - if(result.bool){ - game.log(trigger.player,'收回了',trigger.cards); - trigger.cancel(); - game.delay(); - } - else{ - event.finish(); - } - "step 2" - trigger.player.$gain2(trigger.cards); - trigger.player.gain(trigger.cards); - trigger.player.storage.mengun2=trigger.cards[0]; - game.addVideo('storage',player,['mengun2',get.cardInfo(trigger.cards[0]),'card']); - trigger.player.addTempSkill('mengun2','phaseEnd'); - }, - ai:{ - expose:0.2 - } - }, - mengun2:{ - mark:'card', - mod:{ - cardEnabled:function(card,player){ - if(card==player.storage.mengun2) return false; - }, - }, - intro:{ - content:'card', - onunmark:function(storage,player){ - delete player.storage.mengun2; - } - }, - }, - jianren:{ - enable:'phaseUse', - usable:1, - filter:function(event,player){ - return player.getEquip(1)?true:false; - }, - filterCard:function(card,player){ - return card==player.getEquip(1); - }, - position:'e', - filterTarget:function(card,player,target){ - return target!=player; - }, - selectCard:-1, - selectTarget:-1, - content:function(){ - target.damage(); - }, - ai:{ - order:9, - result:{ - target:function(player,target){ - return get.damageEffect(target,player,target); - } - } - } - }, - jihuo:{ - trigger:{player:'phaseAfter'}, - filter:function(event,player){ - return player.countCards('h')>0&&event.skill!='jihuo'; - }, - direct:true, - priority:-50, - content:function(){ - "step 0" - var next=player.chooseToDiscard(get.prompt('jihuo')); - next.ai=get.unuseful2; - next.logSkill='jihuo'; - "step 1" - if(result.bool){ - player.insertPhase(); - } - }, - ai:{ - threaten:1.2 - } - }, - tzhenji:{ - trigger:{player:'discardAfter'}, - direct:true, - filter:function(event,player){ - if(player.hasSkill('tzhenji2')){ - return false; - } - if(event.cards){ - for(var i=0;i0; - return get.damageEffect(target,player,player,'thunder')-(bool?1:0); - }; - "step 1" - if(result.bool){ - game.delay(0.5); - var target=result.targets[0]; - player.logSkill('tzhenji',target,'thunder'); - var cs=target.getCards('he'); - if(cs.length){ - target.discard(cs.randomGet()); - } - target.damage('thunder'); - player.addTempSkill('tzhenji2'); - } - }, - ai:{ - threaten:1.2, - expose:0.3, - effect:{ - target:function(card,player,target){ - if(get.tag(card,'loseCard')&&target.countCards('he')){ - return 0.7; - } - } - }, - } - }, - tzhenji2:{}, - tzhenji_old:{ - trigger:{player:['useCard','respondEnd']}, - filter:function(event){ - return get.suit(event.card)=='spade'; - }, - direct:true, - content:function(){ - "step 0"; - player.chooseTarget(get.prompt('tzhenji_old')).ai=function(target){ - return get.damageEffect(target,player,player,'thunder')-1; - }; - "step 1" - if(result.bool){ - player.logSkill('tzhenji',result.targets,'thunder'); - event.target=result.targets[0]; - event.target.judge(); - } - else{ - event.finish(); - } - "step 2" - if(result.color=='red'){ - event.target.damage('fire'); - } - else{ - event.target.damage('thunder'); - var cs=event.target.getCards('he'); - if(cs.length){ - event.target.discard(cs.randomGet()); - } - cs=player.getCards('he'); - if(cs.length){ - player.discard(cs.randomGet()); - } - } - }, - ai:{ - expose:0.2, - threaten:1.2, - effect_old:{ - target:function(card,player,target){ - if(get.tag(card,'respondShan')){ - var hastarget=game.hasPlayer(function(current){ - return get.attitude(player,current)<0; - }); - var ns=target.countCards('h','shan'); - var nh=target.countCards('h'); - if(ns>1){ - return [0,hastarget?1:0]; - } - if(ns&&nh>=2){ - return [0,0]; - } - if(nh>3){ - return [0,0]; - } - if(nh==0){ - return 1.5; - } - return [1,0.05]; - } - } - } - } - }, - tuteng_s:{ - trigger:{player:'phaseUseBegin'}, - forced:true, - filter:function(event,player){ - var rand=['tuteng1','tuteng2','tuteng3','tuteng4']; - for(var i=0;i=3){ - player.removeSkill(rand2.randomGet()); - } - player.addSkill(rand.randomGet('tuteng1','tuteng3')); - }, - ai:{ - threaten:2 - } - }, - tuteng:{ - enable:'phaseUse', - usable:1, - unique:true, - direct:true, - delay:0, - init:function(){ - for(var i=1;i<=8;i++){ - lib.translate['tuteng'+i+'_info']=lib.skill['tuteng'+i].intro.content; - } - }, - position:'he', - filter:function(event,player){ - var rand=['tuteng1','tuteng2','tuteng3','tuteng4']; - for(var i=0;i1||rand2.length>=4)){ - var dialog=ui.create.dialog(); - for(var i=0;i=4){ - dialog.add('替换一个已有图腾'); - dialog.add([rand2x,'vcard']); - player.chooseButton(dialog,2,true).filterButton=function(button){ - if(ui.selected.buttons.length){ - var current=ui.selected.buttons[0].name; - if(rand.contains(current)){ - return rand2.contains(button.name); - } - else{ - return rand.contains(button.name); - } - } - return true; - }; - } - else{ - player.chooseButton(dialog,true); - } - for(var i=0;i1){ - rand.remove('tuteng1'); - } - player.addSkill(rand.randomGet()); - } - // if(rand2.length>=3){ - // player.removeSkill(rand2.randomGet()); - // } - game.delay(); - event.finish(); - } - } - else{ - event.finish(); - } - 'step 1' - if(result.buttons.length==1){ - player.addSkill(result.buttons[0].name); - } - else if(result.buttons.length==2){ - var skill1=result.buttons[0].name; - var skill2=result.buttons[1].name; - if(player.hasSkill(skill1)){ - player.removeSkill(skill1); - player.addSkill(skill2); - } - else{ - player.removeSkill(skill2); - player.addSkill(skill1); - } - } - }, - ai:{ - order:11, - result:{ - player:1 - }, - effect:function(card,player,target){ - if(get.tag(card,'damage')){ - if(player.hasSkillTag('jueqing',false,target)) return; - return 1.2; - } - }, - threaten:2 - }, - group:'tuteng_lose' - }, - zuling:{ - skillAnimation:'epic', - animationColor:'thunder', - trigger:{player:'phaseBegin'}, - forced:true, - unique:true, - filter:function(event,player){ - if(!player.storage.tuteng_awake){ - var rand=['tuteng1','tuteng2','tuteng3','tuteng4', - 'tuteng5','tuteng6','tuteng7','tuteng8']; - var num=0; - for(var i=0;i=2){ - return true; - } - } - } - return false; - }, - content:function(){ - player.storage.tuteng_awake=true; - player.loseMaxHp(); - player.awakenSkill('zuling'); - } - }, - tuteng_h:{ - mod:{ - maxHandcard:function(player,num){ - return num-1; - } - } - }, - tuteng_lose:{ - trigger:{player:'damageEnd'}, - forced:true, - popup:false, - filter:function(event,player){ - var tuteng=['tuteng1','tuteng2','tuteng3','tuteng4', - 'tuteng5','tuteng6','tuteng7','tuteng8']; - for(var i=0;i0; - }, - content:function(){ - trigger.num--; - player.removeSkill('tuteng3'); - }, - }, - tuteng4:{ - mark:'image', - nopop:true, - intro:{ - content:'在你的回合内,你的锦囊牌造成的首次伤害+1' - }, - trigger:{source:'damageBegin'}, - forced:true, - usable:1, - filter:function(event,player){ - return _status.currentPhase==player&&event.card&&get.type(event.card)=='trick'&&event.notLink(); - }, - content:function(){ - trigger.num++; - } - }, - tuteng5:{ - mark:'image', - nopop:true, - intro:{ - content:'结束阶段,你摸一张牌' - }, - trigger:{player:'phaseEnd'}, - forced:true, - content:function(){ - player.draw(); - } - }, - tuteng6:{ - mark:'image', - nopop:true, - intro:{ - content:'在你的回合内,你的杀造成的首次伤害+1' - }, - trigger:{source:'damageBegin'}, - forced:true, - filter:function(event,player){ - return _status.currentPhase==player&&event.card&&event.card.name=='sha'&&event.notLink(); - }, - usable:1, - content:function(){ - trigger.num++; - } - }, - tuteng7:{ - mark:'image', - nopop:true, - intro:{ - content:'结束阶段,你令一名其他角色回复一点体力' - }, - trigger:{player:'phaseEnd'}, - direct:true, - filter:function(event,player){ - return game.hasPlayer(function(current){ - return current!=player&¤t.isDamaged(); - }); - }, - content:function(){ - 'step 0' - player.chooseTarget('活力图腾:令一名其他角色回复一点体力',function(card,player,target){ - return target!=player&&target.hp=player.hp) return -1; - if(player.hp<=2){ - if(player.hp==2&&nh==0) return 1; - return -1; - } - return 1; - } - }, - effect:{ - target:function(card){ - if(get.tag(card,'damage')||get.tag(card,'loseHp')){ - return 1.5; - } - } - }, - threaten:1.2 - } - }, - fenliu2:{ - mod:{ - maxHandcard:function(player,num){ - return num+1; - } - } - }, - hongxi:{ - trigger:{global:'dieAfter'}, - filter:function(event,player){ - return player.hp0) return '调换顺序'; + else return 'cancel2'; + }; + 'step 1' + if(result.control=='调换顺序'){ + var card=ui.cardPile.firstChild; + ui.cardPile.removeChild(card); + ui.cardPile.insertBefore(card,ui.cardPile.firstChild.nextSibling); + game.log(player,'调换了牌堆顶两张牌的顺序'); + } + }, + ai:{ + expose:0.1, + tag:{ + rejudge:0.5 + } + } + }, + jingxiang:{ + trigger:{player:'chooseToRespondBegin'}, + direct:true, + usable:1, + alter:true, + filter:function(event,player){ + if(event.responded) return false; + return game.hasPlayer(function(current){ + return current!=player&¤t.countCards('h'); + }); + }, + content:function(){ + "step 0" + player.chooseTarget(get.prompt('jingxiang'),function(card,player,target){ + if(target==player) return false; + var nh=target.countCards('h'); + if(nh==0) return false; + if(get.is.altered('jingxiang')){ + return nh<=player.countCards('h'); + } + return true; + }).ai=function(target){ + return 1-get.attitude(player,target); + }; + "step 1" + if(result.bool){ + var target=result.targets[0]; + player.logSkill('jingxiang',target); + event.target=target; + var cards=target.getCards('h'); + player.chooseCardButton('选择'+get.translation(target)+'的一张卡手牌打出',cards).filterButton=function(button){ + return trigger.filterCard(button.link); + } + } + else{ + event.finish(); + } + "step 2" + if(result.bool){ + game.log(player,'使用了',event.target,'的手牌'); + event.target.$throw(result.links); + event.target.lose(result.links); + trigger.untrigger(); + trigger.animate=false; + trigger.responded=true; + result.buttons[0].link.remove(); + trigger.result={bool:true,card:result.buttons[0].link} + } + else{ + player.storage.counttrigger.jingxiang--; + } + }, + ai:{ + effect:{ + target:function(card){ + if(get.tag(card,'respondShan')) return 0.4; + if(get.tag(card,'respondSha')) return 0.4; + } + } + }, + }, + wlianji:{ + trigger:{player:'phaseEnd'}, + frequent:true, + filter:function(event,player){ + return player.countUsed()>player.hp; + }, + content:function(){ + player.draw(2); + }, + init:function(player){player.storage.jingce=true}, + intro:{ + content:function(storage,player){ + if(_status.currentPhase==player) return '已使用'+player.countUsed()+'张牌'; + } + } + }, + mengun:{ + trigger:{global:'useCardToBefore'}, + priority:12, + filter:function(event,player){ + if(event.player==player) return false; + if(_status.currentPhase!=event.player) return false; + if(event.player.hasSkill('mengun2')) return false; + if(get.itemtype(event.card)!='card') return false; + if(!player.countCards('h',{suit:get.suit(event.card)})) return false; + return get.type(event.card)=='basic'; + }, + direct:true, + content:function(){ + "step 0" + var val=get.value(trigger.card); + var suit=get.suit(trigger.card); + var eff=get.effect(trigger.target,trigger.card,trigger.player,player); + var next=player.chooseToDiscard('是否对'+get.translation(trigger.player)+'使用的'+get.translation(trigger.card)+'发动【闷棍】?',function(card){ + return get.suit(card)==suit; + }); + next.logSkill=['mengun',trigger.player]; + next.ai=function(card){ + if(eff>=0) return 0; + return Math.min(8,1+val)-get.value(card); + } + "step 1" + if(result.bool){ + game.log(trigger.player,'收回了',trigger.cards); + trigger.cancel(); + game.delay(); + } + else{ + event.finish(); + } + "step 2" + trigger.player.$gain2(trigger.cards); + trigger.player.gain(trigger.cards); + trigger.player.storage.mengun2=trigger.cards[0]; + game.addVideo('storage',player,['mengun2',get.cardInfo(trigger.cards[0]),'card']); + trigger.player.addTempSkill('mengun2','phaseEnd'); + }, + ai:{ + expose:0.2 + } + }, + mengun2:{ + mark:'card', + mod:{ + cardEnabled:function(card,player){ + if(card==player.storage.mengun2) return false; + }, + }, + intro:{ + content:'card', + onunmark:function(storage,player){ + delete player.storage.mengun2; + } + }, + }, + jianren:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.getEquip(1)?true:false; + }, + filterCard:function(card,player){ + return card==player.getEquip(1); + }, + position:'e', + filterTarget:function(card,player,target){ + return target!=player; + }, + selectCard:-1, + selectTarget:-1, + content:function(){ + target.damage(); + }, + ai:{ + order:9, + result:{ + target:function(player,target){ + return get.damageEffect(target,player,target); + } + } + } + }, + jihuo:{ + trigger:{player:'phaseAfter'}, + filter:function(event,player){ + return player.countCards('h')>0&&event.skill!='jihuo'; + }, + direct:true, + priority:-50, + content:function(){ + "step 0" + var next=player.chooseToDiscard(get.prompt('jihuo')); + next.ai=get.unuseful2; + next.logSkill='jihuo'; + "step 1" + if(result.bool){ + player.insertPhase(); + } + }, + ai:{ + threaten:1.2 + } + }, + tzhenji:{ + trigger:{player:'discardAfter'}, + direct:true, + filter:function(event,player){ + if(player.hasSkill('tzhenji2')){ + return false; + } + if(event.cards){ + for(var i=0;i0; + return get.damageEffect(target,player,player,'thunder')-(bool?1:0); + }; + "step 1" + if(result.bool){ + game.delay(0.5); + var target=result.targets[0]; + player.logSkill('tzhenji',target,'thunder'); + var cs=target.getCards('he'); + if(cs.length){ + target.discard(cs.randomGet()); + } + target.damage('thunder'); + player.addTempSkill('tzhenji2'); + } + }, + ai:{ + threaten:1.2, + expose:0.3, + effect:{ + target:function(card,player,target){ + if(get.tag(card,'loseCard')&&target.countCards('he')){ + return 0.7; + } + } + }, + } + }, + tzhenji2:{}, + tzhenji_old:{ + trigger:{player:['useCard','respondEnd']}, + filter:function(event){ + return get.suit(event.card)=='spade'; + }, + direct:true, + content:function(){ + "step 0"; + player.chooseTarget(get.prompt('tzhenji_old')).ai=function(target){ + return get.damageEffect(target,player,player,'thunder')-1; + }; + "step 1" + if(result.bool){ + player.logSkill('tzhenji',result.targets,'thunder'); + event.target=result.targets[0]; + event.target.judge(); + } + else{ + event.finish(); + } + "step 2" + if(result.color=='red'){ + event.target.damage('fire'); + } + else{ + event.target.damage('thunder'); + var cs=event.target.getCards('he'); + if(cs.length){ + event.target.discard(cs.randomGet()); + } + cs=player.getCards('he'); + if(cs.length){ + player.discard(cs.randomGet()); + } + } + }, + ai:{ + expose:0.2, + threaten:1.2, + effect_old:{ + target:function(card,player,target){ + if(get.tag(card,'respondShan')){ + var hastarget=game.hasPlayer(function(current){ + return get.attitude(player,current)<0; + }); + var ns=target.countCards('h','shan'); + var nh=target.countCards('h'); + if(ns>1){ + return [0,hastarget?1:0]; + } + if(ns&&nh>=2){ + return [0,0]; + } + if(nh>3){ + return [0,0]; + } + if(nh==0){ + return 1.5; + } + return [1,0.05]; + } + } + } + } + }, + tuteng_s:{ + trigger:{player:'phaseUseBegin'}, + forced:true, + filter:function(event,player){ + var rand=['tuteng1','tuteng2','tuteng3','tuteng4']; + for(var i=0;i=3){ + player.removeSkill(rand2.randomGet()); + } + player.addSkill(rand.randomGet('tuteng1','tuteng3')); + }, + ai:{ + threaten:2 + } + }, + tuteng:{ + enable:'phaseUse', + usable:1, + unique:true, + direct:true, + delay:0, + init:function(){ + for(var i=1;i<=8;i++){ + lib.translate['tuteng'+i+'_info']=lib.skill['tuteng'+i].intro.content; + } + }, + position:'he', + filter:function(event,player){ + var rand=['tuteng1','tuteng2','tuteng3','tuteng4']; + for(var i=0;i1||rand2.length>=4)){ + var dialog=ui.create.dialog(); + for(var i=0;i=4){ + dialog.add('替换一个已有图腾'); + dialog.add([rand2x,'vcard']); + player.chooseButton(dialog,2,true).filterButton=function(button){ + if(ui.selected.buttons.length){ + var current=ui.selected.buttons[0].name; + if(rand.contains(current)){ + return rand2.contains(button.name); + } + else{ + return rand.contains(button.name); + } + } + return true; + }; + } + else{ + player.chooseButton(dialog,true); + } + for(var i=0;i1){ + rand.remove('tuteng1'); + } + player.addSkill(rand.randomGet()); + } + // if(rand2.length>=3){ + // player.removeSkill(rand2.randomGet()); + // } + game.delay(); + event.finish(); + } + } + else{ + event.finish(); + } + 'step 1' + if(result.buttons.length==1){ + player.addSkill(result.buttons[0].name); + } + else if(result.buttons.length==2){ + var skill1=result.buttons[0].name; + var skill2=result.buttons[1].name; + if(player.hasSkill(skill1)){ + player.removeSkill(skill1); + player.addSkill(skill2); + } + else{ + player.removeSkill(skill2); + player.addSkill(skill1); + } + } + }, + ai:{ + order:11, + result:{ + player:1 + }, + effect:function(card,player,target){ + if(get.tag(card,'damage')){ + if(player.hasSkillTag('jueqing',false,target)) return; + return 1.2; + } + }, + threaten:2 + }, + group:'tuteng_lose' + }, + zuling:{ + skillAnimation:'epic', + animationColor:'thunder', + trigger:{player:'phaseBegin'}, + forced:true, + unique:true, + filter:function(event,player){ + if(!player.storage.tuteng_awake){ + var rand=['tuteng1','tuteng2','tuteng3','tuteng4', + 'tuteng5','tuteng6','tuteng7','tuteng8']; + var num=0; + for(var i=0;i=2){ + return true; + } + } + } + return false; + }, + content:function(){ + player.storage.tuteng_awake=true; + player.loseMaxHp(); + player.awakenSkill('zuling'); + } + }, + tuteng_h:{ + mod:{ + maxHandcard:function(player,num){ + return num-1; + } + } + }, + tuteng_lose:{ + trigger:{player:'damageEnd'}, + forced:true, + popup:false, + filter:function(event,player){ + var tuteng=['tuteng1','tuteng2','tuteng3','tuteng4', + 'tuteng5','tuteng6','tuteng7','tuteng8']; + for(var i=0;i0; + }, + content:function(){ + trigger.num--; + player.removeSkill('tuteng3'); + }, + }, + tuteng4:{ + mark:'image', + nopop:true, + intro:{ + content:'在你的回合内,你的锦囊牌造成的首次伤害+1' + }, + trigger:{source:'damageBegin'}, + forced:true, + usable:1, + filter:function(event,player){ + return _status.currentPhase==player&&event.card&&get.type(event.card)=='trick'&&event.notLink(); + }, + content:function(){ + trigger.num++; + } + }, + tuteng5:{ + mark:'image', + nopop:true, + intro:{ + content:'结束阶段,你摸一张牌' + }, + trigger:{player:'phaseEnd'}, + forced:true, + content:function(){ + player.draw(); + } + }, + tuteng6:{ + mark:'image', + nopop:true, + intro:{ + content:'在你的回合内,你的杀造成的首次伤害+1' + }, + trigger:{source:'damageBegin'}, + forced:true, + filter:function(event,player){ + return _status.currentPhase==player&&event.card&&event.card.name=='sha'&&event.notLink(); + }, + usable:1, + content:function(){ + trigger.num++; + } + }, + tuteng7:{ + mark:'image', + nopop:true, + intro:{ + content:'结束阶段,你令一名其他角色回复一点体力' + }, + trigger:{player:'phaseEnd'}, + direct:true, + filter:function(event,player){ + return game.hasPlayer(function(current){ + return current!=player&¤t.isDamaged(); + }); + }, + content:function(){ + 'step 0' + player.chooseTarget('活力图腾:令一名其他角色回复一点体力',function(card,player,target){ + return target!=player&&target.hp=player.hp) return -1; + if(player.hp<=2){ + if(player.hp==2&&nh==0) return 1; + return -1; + } + return 1; + } + }, + effect:{ + target:function(card){ + if(get.tag(card,'damage')||get.tag(card,'loseHp')){ + return 1.5; + } + } + }, + threaten:1.2 + } + }, + fenliu2:{ + mod:{ + maxHandcard:function(player,num){ + return num+1; + } + } + }, + hongxi:{ + trigger:{global:'dieAfter'}, + filter:function(event,player){ + return player.hp=0) return 0; - if(player.hasSkillTag('notricksource')) return 0; - if(event.current.hasSkillTag('notrick')) return 0; - return 11-get.value(card); - }; - next.autochoose=lib.filter.autoRespondSha; - } - else{ - event.finish(); - } - 'step 2' - if(!result.bool){ - event.current.damage('thunder'); - } - game.delayx(0.5); - 'step 3' - event.goto(1); - }, - ai:{ - order:8, - useful:[5,1], - value:8, - result:{ - target:1, - }, - } - }, - hsqizhou_shui:{ - type:'hsqizhou', - fullimage:true, - vanish:true, - enable:function(event,player){ - return player.isDamaged(); - }, - derivation:'hs_kalimosi', - filterTarget:function(card,player,target){ - return target==player; - }, - selectTarget:-1, - content:function(){ - target.recover(2); - }, - ai:{ - order:8, - useful:[5,1], - value:8, - tag:{ - recover:1 - }, - result:{ - target:2, - }, - } - }, - hsqizhou_huo:{ - type:'hsqizhou', - fullimage:true, - vanish:true, - enable:true, - derivation:'hs_kalimosi', - filterTarget:true, - content:function(){ - target.damage('fire'); - }, - ai:{ - order:5, - result:{ - target:-1, - }, - useful:[5,1], - value:8, - tag:{ - damage:1, - fireDamage:1, - natureDamage:1, - } - } - }, - hsqizhou_tu:{ - type:'hsqizhou', - fullimage:true, - vanish:true, - enable:true, - derivation:'hs_kalimosi', - filterTarget:function(card,player,target){ - return target!=player - }, - selectTarget:[1,Infinity], - content:function(){ - target.changeHujia(); - }, - ai:{ - order:8, - useful:[5,1], - value:8, - result:{ - target:1, - }, - } - }, - hsqingyu_feibiao:{ - type:'hsqingyu', - fullimage:true, - vanish:true, - enable:true, - derivation:'hs_aya', - filterTarget:function(card,player,target){ - return target.countCards('he')>0; - }, - content:function(){ - var cards=[]; - var hs=target.getCards('h'); - var es=target.getCards('e'); - if(hs.length) cards.push(hs.randomGet()); - if(es.length) cards.push(es.randomGet()); - target.discard(cards); - }, - ai:{ - order:8, - useful:3, - value:6, - result:{ - target:function(player,target){ - var num=0; - if(target.countCards('h')) num--; - if(target.countCards('e')) num--; - return num; - }, - }, - } - }, - hsqingyu_zhanfang:{ - type:'hsqingyu', - fullimage:true, - vanish:true, - enable:true, - derivation:'hs_aya', - filterTarget:true, - content:function(){ - target.gainMaxHp(); - target.draw(); - }, - ai:{ - order:5, - useful:3, - value:4, - result:{ - target:function(player,target){ - if(target.hp==target.maxHp){ - if(target.maxHp<3) return 2; - if(target.maxHp==3) return 1.5; - return 1.2; - } - return 1; - }, - }, - } - }, - hsqingyu_hufu:{ - type:'hsqingyu', - fullimage:true, - vanish:true, - enable:true, - derivation:'hs_aya', - filterTarget:true, - content:function(){ - target.changeHujia(); - }, - ai:{ - order:5, - useful:3, - value:6, - result:{ - target:function(player,target){ - return 2/Math.max(1,Math.sqrt(target.hp)); - }, - }, - } - }, - hsqingyu_shandian:{ - type:'hsqingyu', - fullimage:true, - vanish:true, - enable:true, - derivation:'hs_aya', - filterTarget:true, - content:function(){ - target.damage('thunder'); - }, - ai:{ - order:5, - result:{ - target:-1, - }, - useful:5, - value:8, - tag:{ - damage:1, - thunderDamage:1, - natureDamage:1, - } - } - }, - hsqingyu_zhao:{ - type:'equip', - subtype:'equip1', - distance:{attackFrom:-1}, - fullimage:true, - vanish:true, - derivation:'hs_aya', - onEquip:function(){ - player.draw(); - }, - ai:{ - order:9, - useful:5, - value:4 - } - }, - hsdusu_xueji:{ - type:'hsdusu', - fullimage:true, - vanish:true, - enable:true, - derivation:'hs_xialikeer', - filterTarget:function(card,player,target){ - return target.countCards('e')>0; - }, - content:function(){ - target.discard(target.getCards('e').randomGets(2)); - }, - ai:{ - order:5, - result:{ - target:function(player,target){ - if(target.hasSkillTag('noe')) return 0; - if(target.countCards('e')>1) return -1.5; - return -1; - }, - }, - value:5, - } - }, - hsdusu_kuyecao:{ - type:'hsdusu', - fullimage:true, - vanish:true, - enable:true, - derivation:'hs_xialikeer', - filterTarget:function(card,player,target){ - return !target.hasSkill('qianxing'); - }, - content:function(){ - target.addTempSkill('qianxing',{player:'phaseBegin'}); - }, - ai:{ - order:2, - result:{ - target:function(player,target){ - if(player!=target&&get.distance(player,target,'absolute')<=1) return 0; - var num=1; - if(target==player){ - num=1.5; - } - if(target.hp==1) return 2*num; - if(target.hp==2&&target.countCards('h')<=2) return 1.2*num; - return num; - } - }, - value:5, - } - }, - hsdusu_huangxuecao:{ - type:'hsdusu', - fullimage:true, - vanish:true, - enable:true, - derivation:'hs_xialikeer', - filterTarget:function(card,player,target){ - return target==player; - }, - selectTarget:-1, - modTarget:true, - content:function(){ - target.draw(2); - }, - ai:{ - order:9, - result:{ - target:1, - }, - value:10, - } - }, - hsdusu_huoyanhua:{ - type:'hsdusu', - fullimage:true, - vanish:true, - enable:true, - derivation:'hs_xialikeer', - range:{attack:1}, - filterTarget:true, - content:function(){ - target.damage('fire'); - }, - ai:{ - order:5, - result:{ - target:-1, - }, - useful:5, - value:8, - tag:{ - damage:1, - fireDamage:1, - natureDamage:1, - } - } - }, - hsdusu_shinancao:{ - type:'hsdusu', - fullimage:true, - vanish:true, - enable:true, - derivation:'hs_xialikeer', - filterTarget:function(card,player,target){ - return !target.hasSkill('hsdusu_shinancao'); - }, - content:function(){ - target.addSkill('hsdusu_shinancao'); - }, - ai:{ - order:7, - result:{ - target:function(player,target){ - if(target.hp>1){ - if(target.countCards('h')>2) return 1; - return 0.5; - } - return 0.2; - }, - }, - value:5, - } - }, - hsbaowu_cangbaotu:{ - type:'hsbaowu', - fullimage:true, - vanish:true, - enable:true, - gainnable:false, - derivation:'hs_yelise', - filterTarget:function(card,player,target){ - return target==player; - }, - selectTarget:-1, - content:function(){ - target.addSkill('hsbaowu_cangbaotu'); - target.draw(); - }, - ai:{ - order:10, - result:{ - player:10 - }, - useful:10, - value:10, - } - }, - hsbaowu_huangjinyuanhou:{ - type:'hsbaowu', - fullimage:true, - vanish:true, - enable:true, - gainnable:false, - derivation:'hs_yelise', - filterTarget:function(card,player,target){ - return target==player; - }, - selectTarget:-1, - content:function(){ - 'step 0' + }, + hsqizhou_feng:{ + type:'hsqizhou', + fullimage:true, + vanish:true, + enable:true, + derivation:'hs_kalimosi', + filterTarget:function(card,player,target){ + return target==player; + }, + selectTarget:-1, + content:function(){ + 'step 0' + event.list=target.getEnemies().sortBySeat(); + player.line(event.list,'thunder'); + 'step 1' + if(event.list.length){ + event.current=event.list.shift(); + event.current.animate('target'); + var next=event.current.chooseToRespond({name:'sha'}); + next.ai=function(card){ + if(get.damageEffect(event.current,player,event.current,'thunder')>=0) return 0; + if(player.hasSkillTag('notricksource')) return 0; + if(event.current.hasSkillTag('notrick')) return 0; + return 11-get.value(card); + }; + next.autochoose=lib.filter.autoRespondSha; + } + else{ + event.finish(); + } + 'step 2' + if(!result.bool){ + event.current.damage('thunder'); + } + game.delayx(0.5); + 'step 3' + event.goto(1); + }, + ai:{ + order:8, + useful:[5,1], + value:8, + result:{ + target:1, + }, + } + }, + hsqizhou_shui:{ + type:'hsqizhou', + fullimage:true, + vanish:true, + enable:function(event,player){ + return player.isDamaged(); + }, + derivation:'hs_kalimosi', + filterTarget:function(card,player,target){ + return target==player; + }, + selectTarget:-1, + content:function(){ + target.recover(2); + }, + ai:{ + order:8, + useful:[5,1], + value:8, + tag:{ + recover:1 + }, + result:{ + target:2, + }, + } + }, + hsqizhou_huo:{ + type:'hsqizhou', + fullimage:true, + vanish:true, + enable:true, + derivation:'hs_kalimosi', + filterTarget:true, + content:function(){ + target.damage('fire'); + }, + ai:{ + order:5, + result:{ + target:-1, + }, + useful:[5,1], + value:8, + tag:{ + damage:1, + fireDamage:1, + natureDamage:1, + } + } + }, + hsqizhou_tu:{ + type:'hsqizhou', + fullimage:true, + vanish:true, + enable:true, + derivation:'hs_kalimosi', + filterTarget:function(card,player,target){ + return target!=player + }, + selectTarget:[1,Infinity], + content:function(){ + target.changeHujia(); + }, + ai:{ + order:8, + useful:[5,1], + value:8, + result:{ + target:1, + }, + } + }, + hsqingyu_feibiao:{ + type:'hsqingyu', + fullimage:true, + vanish:true, + enable:true, + derivation:'hs_aya', + filterTarget:function(card,player,target){ + return target.countCards('he')>0; + }, + content:function(){ + var cards=[]; + var hs=target.getCards('h'); + var es=target.getCards('e'); + if(hs.length) cards.push(hs.randomGet()); + if(es.length) cards.push(es.randomGet()); + target.discard(cards); + }, + ai:{ + order:8, + useful:3, + value:6, + result:{ + target:function(player,target){ + var num=0; + if(target.countCards('h')) num--; + if(target.countCards('e')) num--; + return num; + }, + }, + } + }, + hsqingyu_zhanfang:{ + type:'hsqingyu', + fullimage:true, + vanish:true, + enable:true, + derivation:'hs_aya', + filterTarget:true, + content:function(){ + target.gainMaxHp(); + target.draw(); + }, + ai:{ + order:5, + useful:3, + value:4, + result:{ + target:function(player,target){ + if(target.hp==target.maxHp){ + if(target.maxHp<3) return 2; + if(target.maxHp==3) return 1.5; + return 1.2; + } + return 1; + }, + }, + } + }, + hsqingyu_hufu:{ + type:'hsqingyu', + fullimage:true, + vanish:true, + enable:true, + derivation:'hs_aya', + filterTarget:true, + content:function(){ + target.changeHujia(); + }, + ai:{ + order:5, + useful:3, + value:6, + result:{ + target:function(player,target){ + return 2/Math.max(1,Math.sqrt(target.hp)); + }, + }, + } + }, + hsqingyu_shandian:{ + type:'hsqingyu', + fullimage:true, + vanish:true, + enable:true, + derivation:'hs_aya', + filterTarget:true, + content:function(){ + target.damage('thunder'); + }, + ai:{ + order:5, + result:{ + target:-1, + }, + useful:5, + value:8, + tag:{ + damage:1, + thunderDamage:1, + natureDamage:1, + } + } + }, + hsqingyu_zhao:{ + type:'equip', + subtype:'equip1', + distance:{attackFrom:-1}, + fullimage:true, + vanish:true, + derivation:'hs_aya', + onEquip:function(){ + player.draw(); + }, + ai:{ + order:9, + useful:5, + value:4 + } + }, + hsdusu_xueji:{ + type:'hsdusu', + fullimage:true, + vanish:true, + enable:true, + derivation:'hs_xialikeer', + filterTarget:function(card,player,target){ + return target.countCards('e')>0; + }, + content:function(){ + target.discard(target.getCards('e').randomGets(2)); + }, + ai:{ + order:5, + result:{ + target:function(player,target){ + if(target.hasSkillTag('noe')) return 0; + if(target.countCards('e')>1) return -1.5; + return -1; + }, + }, + value:5, + } + }, + hsdusu_kuyecao:{ + type:'hsdusu', + fullimage:true, + vanish:true, + enable:true, + derivation:'hs_xialikeer', + filterTarget:function(card,player,target){ + return !target.hasSkill('qianxing'); + }, + content:function(){ + target.addTempSkill('qianxing',{player:'phaseBegin'}); + }, + ai:{ + order:2, + result:{ + target:function(player,target){ + if(player!=target&&get.distance(player,target,'absolute')<=1) return 0; + var num=1; + if(target==player){ + num=1.5; + } + if(target.hp==1) return 2*num; + if(target.hp==2&&target.countCards('h')<=2) return 1.2*num; + return num; + } + }, + value:5, + } + }, + hsdusu_huangxuecao:{ + type:'hsdusu', + fullimage:true, + vanish:true, + enable:true, + derivation:'hs_xialikeer', + filterTarget:function(card,player,target){ + return target==player; + }, + selectTarget:-1, + modTarget:true, + content:function(){ + target.draw(2); + }, + ai:{ + order:9, + result:{ + target:1, + }, + value:10, + } + }, + hsdusu_huoyanhua:{ + type:'hsdusu', + fullimage:true, + vanish:true, + enable:true, + derivation:'hs_xialikeer', + range:{attack:1}, + filterTarget:true, + content:function(){ + target.damage('fire'); + }, + ai:{ + order:5, + result:{ + target:-1, + }, + useful:5, + value:8, + tag:{ + damage:1, + fireDamage:1, + natureDamage:1, + } + } + }, + hsdusu_shinancao:{ + type:'hsdusu', + fullimage:true, + vanish:true, + enable:true, + derivation:'hs_xialikeer', + filterTarget:function(card,player,target){ + return !target.hasSkill('hsdusu_shinancao'); + }, + content:function(){ + target.addSkill('hsdusu_shinancao'); + }, + ai:{ + order:7, + result:{ + target:function(player,target){ + if(target.hp>1){ + if(target.countCards('h')>2) return 1; + return 0.5; + } + return 0.2; + }, + }, + value:5, + } + }, + hsbaowu_cangbaotu:{ + type:'hsbaowu', + fullimage:true, + vanish:true, + enable:true, + gainnable:false, + derivation:'hs_yelise', + filterTarget:function(card,player,target){ + return target==player; + }, + selectTarget:-1, + content:function(){ + target.addSkill('hsbaowu_cangbaotu'); + target.draw(); + }, + ai:{ + order:10, + result:{ + player:10 + }, + useful:10, + value:10, + } + }, + hsbaowu_huangjinyuanhou:{ + type:'hsbaowu', + fullimage:true, + vanish:true, + enable:true, + gainnable:false, + derivation:'hs_yelise', + filterTarget:function(card,player,target){ + return target==player; + }, + selectTarget:-1, + content:function(){ + 'step 0' var cards=target.getCards(); if(cards.length){ target.lose(cards)._triggered=null; @@ -7598,888 +7598,888 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.num=1+cards.length; 'step 1' var cards=[]; - var list=[]; - if(lib.characterPack.hearth){ - for(var i=0;i1) return 1; - if(player.hp==1) return 1; - return 0; - } - }, - useful:10, - value:10, - } - }, - hsshenqi_nengliangzhiguang:{ - type:'hsshenqi', - fullimage:true, - vanish:true, - enable:function(card,player){ - return !player.isTurnedOver(); - }, - derivation:'hs_lafamu', - filterTarget:true, - content:function(){ - target.gainMaxHp(); - target.recover(); - target.draw(4); - }, - contentAfter:function(){ - if(!player.isTurnedOver()){ - player.turnOver(); - } - }, - ai:{ - order:5, - result:{ - target:function(player,target){ - if(target.hp<=1) return 2; - if(target.countCards('h')0; - }, - selectTarget:-1, - content:function(){ - if(target.countCards('hej')) player.gainPlayerCard(target,'hej',true); - }, - contentAfter:function(){ - if(!player.isTurnedOver()){ - player.turnOver(); - } - }, - ai:{ - order:9.5, - result:{ - player:1 - }, - tag:{ - multitarget:1, - multineg:1, - loseCard:1, - gain:1 - }, - useful:5, - value:10, - } - }, - hsmengjing_feicuiyoulong:{ - type:'hsmengjing', - fullimage:true, - vanish:true, - enable:true, - derivation:'hs_ysera', - filterTarget:true, - content:function(){ - target.damage(); - }, - ai:{ - order:5, - result:{ - target:-1 - }, - tag:{ - damage:1 - }, - useful:5, - value:10, - } - }, - hsmengjing_suxing:{ - type:'hsmengjing', - fullimage:true, - vanish:true, - enable:true, - derivation:'hs_ysera', - filterTarget:function(card,player,target){ - return player!=target; - }, - selectTarget:-1, - content:function(){ - target.loseHp(); - var he=target.getCards('he'); - if(he.length){ - target.discard(he.randomGets(2)); - } - }, - ai:{ - result:{ - target:-1, - }, - order:6, - useful:5, - value:10, - } - }, - hsmengjing_mengye:{ - type:'hsmengjing', - fullimage:true, - vanish:true, - enable:true, - derivation:'hs_ysera', - filterTarget:true, - content:function(){ - target.draw(); - target.addSkill('hsmengjing_mengye'); - }, - ai:{ - order:1, - useful:5, - value:10, - result:{ - target:function(player,target){ - if(target.hasSkill('hsmengjing_mengye')) return 0.5; - return -target.countCards('he'); - } - } - } - }, - hsmengjing_mengjing:{ - type:'hsmengjing', - fullimage:true, - vanish:true, - enable:true, - derivation:'hs_ysera', - filterTarget:function(card,player,target){ - return !target.hasJudge('lebu')||target.countCards('e')>0; - }, - content:function(){ - 'step 0' - var es=target.getCards('e'); - if(es.length){ - target.gain(es,'gain2'); - } - 'step 1' - if(!target.hasJudge('lebu')){ - target.addJudge(game.createCard('lebu')); - } - }, - ai:{ - order:2, - useful:5, - value:10, - result:{ - target:function(player,target){ - var num=target.hp-target.countCards('he')-2; - if(num>-1) return -1; - if(target.hp<3) num--; - if(target.hp<2) num--; - if(target.hp<1) num--; - return num; - } - } - } - }, - hsmengjing_huanxiaojiemei:{ - type:'hsmengjing', - fullimage:true, - vanish:true, - enable:true, - derivation:'hs_ysera', - filterTarget:function(card,player,target){ - return target.hp1) return 1; + if(player.hp==1) return 1; + return 0; + } + }, + useful:10, + value:10, + } + }, + hsshenqi_nengliangzhiguang:{ + type:'hsshenqi', + fullimage:true, + vanish:true, + enable:function(card,player){ + return !player.isTurnedOver(); + }, + derivation:'hs_lafamu', + filterTarget:true, + content:function(){ + target.gainMaxHp(); + target.recover(); + target.draw(4); + }, + contentAfter:function(){ + if(!player.isTurnedOver()){ + player.turnOver(); + } + }, + ai:{ + order:5, + result:{ + target:function(player,target){ + if(target.hp<=1) return 2; + if(target.countCards('h')0; + }, + selectTarget:-1, + content:function(){ + if(target.countCards('hej')) player.gainPlayerCard(target,'hej',true); + }, + contentAfter:function(){ + if(!player.isTurnedOver()){ + player.turnOver(); + } + }, + ai:{ + order:9.5, + result:{ + player:1 + }, + tag:{ + multitarget:1, + multineg:1, + loseCard:1, + gain:1 + }, + useful:5, + value:10, + } + }, + hsmengjing_feicuiyoulong:{ + type:'hsmengjing', + fullimage:true, + vanish:true, + enable:true, + derivation:'hs_ysera', + filterTarget:true, + content:function(){ + target.damage(); + }, + ai:{ + order:5, + result:{ + target:-1 + }, + tag:{ + damage:1 + }, + useful:5, + value:10, + } + }, + hsmengjing_suxing:{ + type:'hsmengjing', + fullimage:true, + vanish:true, + enable:true, + derivation:'hs_ysera', + filterTarget:function(card,player,target){ + return player!=target; + }, + selectTarget:-1, + content:function(){ + target.loseHp(); + var he=target.getCards('he'); + if(he.length){ + target.discard(he.randomGets(2)); + } + }, + ai:{ + result:{ + target:-1, + }, + order:6, + useful:5, + value:10, + } + }, + hsmengjing_mengye:{ + type:'hsmengjing', + fullimage:true, + vanish:true, + enable:true, + derivation:'hs_ysera', + filterTarget:true, + content:function(){ + target.draw(); + target.addSkill('hsmengjing_mengye'); + }, + ai:{ + order:1, + useful:5, + value:10, + result:{ + target:function(player,target){ + if(target.hasSkill('hsmengjing_mengye')) return 0.5; + return -target.countCards('he'); + } + } + } + }, + hsmengjing_mengjing:{ + type:'hsmengjing', + fullimage:true, + vanish:true, + enable:true, + derivation:'hs_ysera', + filterTarget:function(card,player,target){ + return !target.hasJudge('lebu')||target.countCards('e')>0; + }, + content:function(){ + 'step 0' + var es=target.getCards('e'); + if(es.length){ + target.gain(es,'gain2'); + } + 'step 1' + if(!target.hasJudge('lebu')){ + target.addJudge(game.createCard('lebu')); + } + }, + ai:{ + order:2, + useful:5, + value:10, + result:{ + target:function(player,target){ + var num=target.hp-target.countCards('he')-2; + if(num>-1) return -1; + if(target.hp<3) num--; + if(target.hp<2) num--; + if(target.hp<1) num--; + return num; + } + } + } + }, + hsmengjing_huanxiaojiemei:{ + type:'hsmengjing', + fullimage:true, + vanish:true, + enable:true, + derivation:'hs_ysera', + filterTarget:function(card,player,target){ + return target.hp=6){ - return player.hp<=2; - } - return player.hp<=1; - }, - content:function(){ - "step 0" - player.chooseTarget(get.prompt('konghun'),function(card,player,target){ - return player!=target; - },[1,Math.min(4,Math.floor((game.players.length-1)/2))]).ai=function(target){ - return get.damageEffect(target,player,player,'thunder')+1; - } - "step 1" - if(result.bool){ - event.targets=result.targets.slice(0); - player.logSkill('konghun',event.targets,'thunder'); - event.targets.sort(lib.sort.seat); - event.num=0; - } - else{ - event.finish(); - } - "step 2" - if(event.num0&&event.player!=player&&event.player.hp=6){ + return player.hp<=2; + } + return player.hp<=1; + }, + content:function(){ + "step 0" + player.chooseTarget(get.prompt('konghun'),function(card,player,target){ + return player!=target; + },[1,Math.min(4,Math.floor((game.players.length-1)/2))]).ai=function(target){ + return get.damageEffect(target,player,player,'thunder')+1; + } + "step 1" + if(result.bool){ + event.targets=result.targets.slice(0); + player.logSkill('konghun',event.targets,'thunder'); + event.targets.sort(lib.sort.seat); + event.num=0; + } + else{ + event.finish(); + } + "step 2" + if(event.num0&&event.player!=player&&event.player.hp1||event.targets[0]!=player); }, - silent:true, + silent:true, content:function(){ player.addTempSkill('huodi3'); } - }, - huodi3:{}, - jingfan:{ - trigger:{player:'phaseUseEnd'}, - unique:true, - direct:true, - content:function(){ - "step 0" - var num=player.countUsed()-player.countCards('h'); - event.num=num; - if(num>0){ - player.draw(num); - } - "step 1" - if(event.num>0){ - player.chooseTarget('选择至多'+get.cnNumber(event.num)+'名角色令其进攻距离+1',[1,event.num],function(card,player,target){ - return player!=target; - }).ai=function(target){ - return get.attitude(player,target); - } - } - else{ - event.finish(); - } - "step 2" - if(result.bool&&result.targets){ - player.logSkill('jingfan',result.targets); - for(var i=0;i0; - }, - filter:function(event,player){ - if(event.num<=1) return false; - return true; - }, - priority:-11, - content:function(){ - trigger.num=1; - if(trigger.source){ - trigger.source.addTempSkill('chiying2','damageAfter'); - } - } - }, - chiying2:{ - trigger:{source:'damageEnd'}, - forced:true, - popup:false, - content:function(){ - player.draw(); - } - }, - juechen:{ - trigger:{player:'useCard'}, - filter:function(event,player){ - return event.card.name=='sha'; - }, - direct:true, - content:function(){ - "step 0" - player.chooseTarget(get.prompt('juechen'),function(card,player,target){ - return player!=target&&!trigger.targets.contains(target)&&target.countCards('he')>0; - }).set('autodelay',true).ai=function(target){ - return -get.attitude(player,target); - } + }, + huodi3:{}, + jingfan:{ + trigger:{player:'phaseUseEnd'}, + unique:true, + direct:true, + content:function(){ + "step 0" + var num=player.countUsed()-player.countCards('h'); + event.num=num; + if(num>0){ + player.draw(num); + } "step 1" - if(result.bool){ - player.logSkill('juechen',result.targets); - player.discardPlayerCard(true,result.targets[0],'he'); - } - } - }, - lingfeng:{ - trigger:{player:'phaseDrawBefore'}, - check:function(event,player){ - for(var i=0;i0; - }).ai=function(target){ - return -get.attitude(player,target); - } - } - "step 2" - if(result.bool&&result.targets&&result.targets.length){ - player.discardPlayerCard(result.targets[0],'he',true); - } - "step 3" - player.gain(event.cards); - player.$draw(event.cards); - game.delay(); - }, - ai:{ - threaten:1.1 - } - }, - biantian4:{ + if(event.num>0){ + player.chooseTarget('选择至多'+get.cnNumber(event.num)+'名角色令其进攻距离+1',[1,event.num],function(card,player,target){ + return player!=target; + }).ai=function(target){ + return get.attitude(player,target); + } + } + else{ + event.finish(); + } + "step 2" + if(result.bool&&result.targets){ + player.logSkill('jingfan',result.targets); + for(var i=0;i0; + }, + filter:function(event,player){ + if(event.num<=1) return false; + return true; + }, + priority:-11, + content:function(){ + trigger.num=1; + if(trigger.source){ + trigger.source.addTempSkill('chiying2','damageAfter'); + } + } + }, + chiying2:{ + trigger:{source:'damageEnd'}, + forced:true, + popup:false, + content:function(){ + player.draw(); + } + }, + juechen:{ + trigger:{player:'useCard'}, + filter:function(event,player){ + return event.card.name=='sha'; + }, + direct:true, + content:function(){ + "step 0" + player.chooseTarget(get.prompt('juechen'),function(card,player,target){ + return player!=target&&!trigger.targets.contains(target)&&target.countCards('he')>0; + }).set('autodelay',true).ai=function(target){ + return -get.attitude(player,target); + } + "step 1" + if(result.bool){ + player.logSkill('juechen',result.targets); + player.discardPlayerCard(true,result.targets[0],'he'); + } + } + }, + lingfeng:{ + trigger:{player:'phaseDrawBefore'}, + check:function(event,player){ + for(var i=0;i0; + }).ai=function(target){ + return -get.attitude(player,target); + } + } + "step 2" + if(result.bool&&result.targets&&result.targets.length){ + player.discardPlayerCard(result.targets[0],'he',true); + } + "step 3" + player.gain(event.cards); + player.$draw(event.cards); + game.delay(); + }, + ai:{ + threaten:1.1 + } + }, + biantian4:{ trigger:{player:'dieBegin'}, forced:true, popup:false, @@ -294,285 +294,285 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }, - biantian:{ - trigger:{player:'phaseBegin'}, - forced:true, - unique:true, - group:'biantian4', - content:function(){ - "step 0" - player.removeSkill('biantian2'); - for(var i=0;i0; - }, - content:function(){ - "step 0" - player.choosePlayerCard(trigger.player,get.prompt('jingmiao',trigger.player),'he'); - "step 1" - if(result.bool){ - player.logSkill('jingmiao',trigger.player); - trigger.player.discard(result.links); - } - }, - ai:{ - expose:0.2 - } - }, - zhinang:{ - trigger:{player:'phaseBegin'}, - frequent:true, - content:function(){ - "step 0" - event.cards=get.cards(3); - event.cards2=[]; - for(var i=0;iplayer.hp){ - if(target==player) return Math.max(1,att-2); - } - if(target==player) return att+5; - return att; - } - } - "step 2" - if(result&&result.targets&&result.targets.length){ - event.target=result.targets[0]; - } - if(event.cards2.length){ - event.target.gain(event.cards2,'gain2'); - } - }, - ai:{ - threaten:1.3 - } - }, - tianyu:{ - trigger:{player:'phaseEnd'}, - direct:true, - filter:function(event,player){ - for(var i=0;i0; + }, + content:function(){ + "step 0" + player.choosePlayerCard(trigger.player,get.prompt('jingmiao',trigger.player),'he'); + "step 1" + if(result.bool){ + player.logSkill('jingmiao',trigger.player); + trigger.player.discard(result.links); + } + }, + ai:{ + expose:0.2 + } + }, + zhinang:{ + trigger:{player:'phaseBegin'}, + frequent:true, + content:function(){ + "step 0" + event.cards=get.cards(3); + event.cards2=[]; + for(var i=0;iplayer.hp){ + if(target==player) return Math.max(1,att-2); + } + if(target==player) return att+5; + return att; + } + } + "step 2" + if(result&&result.targets&&result.targets.length){ + event.target=result.targets[0]; + } + if(event.cards2.length){ + event.target.gain(event.cards2,'gain2'); + } + }, + ai:{ + threaten:1.3 + } + }, + tianyu:{ + trigger:{player:'phaseEnd'}, + direct:true, + filter:function(event,player){ + for(var i=0;i0; })){ - if(card.name=='sha'){ - if(card.nature=='fire') return 2.95; - else if(card.nature=='fire') return 2.92; - else return 2.9; - } - else if(card.name=='tao'){ - return 4; - } + if(card.name=='sha'){ + if(card.nature=='fire') return 2.95; + else if(card.nature=='fire') return 2.92; + else return 2.9; + } + else if(card.name=='tao'){ + return 4; + } } return 0; }, @@ -119,22 +119,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return { filterCard:function(){return false}, viewAs:{name:links[0][2],nature:links[0][3]}, - selectCard:-1, + selectCard:-1, popname:true, - log:false, + log:false, precontent:function(){ - 'step 0' - player.chooseTarget('选择交换手牌的目标',function(card,player,target){ - return target.countCards('h')0&¤t.countCards('h')0&¤t.countCards('h')player.hp){ - var cards=get.cards(player.maxHp-player.hp); - event.cards=cards; - var dialog=ui.create.dialog('选择获得卡牌的目标',cards,'hidden'); - dialog.classList.add('noselect'); - player.chooseTarget(true,dialog).ai=function(target){ - return get.attitude(player,target)/Math.sqrt(1+target.countCards('h')); - } - } - else{ - event.finish(); - } - 'step 2' - player.line(result.targets); - result.targets[0].gain(event.cards,'draw'); - }, - ai:{ - effect:{ + oldmiji:{ + trigger:{player:['phaseBegin','phaseEnd']}, + filter:function(event,player){ + return player.isDamaged(); + }, + content:function(){ + 'step 0' + player.judge(function(card){ + return get.color(card)=='black'?1:-1; + }); + 'step 1' + if(result.bool&&player.maxHp>player.hp){ + var cards=get.cards(player.maxHp-player.hp); + event.cards=cards; + var dialog=ui.create.dialog('选择获得卡牌的目标',cards,'hidden'); + dialog.classList.add('noselect'); + player.chooseTarget(true,dialog).ai=function(target){ + return get.attitude(player,target)/Math.sqrt(1+target.countCards('h')); + } + } + else{ + event.finish(); + } + 'step 2' + player.line(result.targets); + result.targets[0].gain(event.cards,'draw'); + }, + ai:{ + effect:{ target:function(card,player,target){ if(get.tag(card,'recover')&&target.hp==target.maxHp-1) return [0,0]; - if(target.hasFriend()){ - if((get.tag(card,'damage')==1||get.tag(card,'loseHp'))&&target.hp==target.maxHp) return [0,1]; - } + if(target.hasFriend()){ + if((get.tag(card,'damage')==1||get.tag(card,'loseHp'))&&target.hp==target.maxHp) return [0,1]; + } } }, threaten:function(player,target){ if(target.hp==1) return 3; if(target.hp==2) return 2; - return 1; + return 1; }, - } - }, - shiyong:{ - audio:2, - trigger:{player:'damageEnd'}, - forced:true, - check:function(){ - return false; - }, - filter:function(event,player){ - return event.card&&event.card.name=='sha'&&(get.color(event.card)=='red'||event.source.hasSkill('jiu')); - }, - content:function(){ - player.loseMaxHp(); - } - }, - oldqianxi:{ - trigger:{source:'damageBefore'}, - check:function(event,player){ - var att=get.attitude(player,event.player); - if(event.player.hp==event.player.maxHp) return att<0; - if(event.player.hp==event.player.maxHp-1&& - (event.player.maxHp<=3||event.player.hasSkillTag('maixie'))) return att<0; - return att>0; - }, - filter:function(event,player){ - return event.card&&event.card.name=='sha'&&get.distance(player,event.player)<=1; - }, - logTarget:'player', - content:function(){ - 'step 0' - player.judge(function(card){ - return get.suit(card)!='heart'?1:-1; - }); - 'step 1' - if(result.bool){ - trigger.cancel(); - trigger.player.loseMaxHp(true); - } - } - }, - oldxuanfeng:{ + } + }, + shiyong:{ + audio:2, + trigger:{player:'damageEnd'}, + forced:true, + check:function(){ + return false; + }, + filter:function(event,player){ + return event.card&&event.card.name=='sha'&&(get.color(event.card)=='red'||event.source.hasSkill('jiu')); + }, + content:function(){ + player.loseMaxHp(); + } + }, + oldqianxi:{ + trigger:{source:'damageBefore'}, + check:function(event,player){ + var att=get.attitude(player,event.player); + if(event.player.hp==event.player.maxHp) return att<0; + if(event.player.hp==event.player.maxHp-1&& + (event.player.maxHp<=3||event.player.hasSkillTag('maixie'))) return att<0; + return att>0; + }, + filter:function(event,player){ + return event.card&&event.card.name=='sha'&&get.distance(player,event.player)<=1; + }, + logTarget:'player', + content:function(){ + 'step 0' + player.judge(function(card){ + return get.suit(card)!='heart'?1:-1; + }); + 'step 1' + if(result.bool){ + trigger.cancel(); + trigger.player.loseMaxHp(true); + } + } + }, + oldxuanfeng:{ audio:'xuanfeng', trigger:{player:'loseEnd'}, direct:true, filter:function(event,player){ - for(var i=0;i0){ - return [0,num]; - } - if(target.hp==1&&!target.hasShan()) return; - return [1,num]; - } - } - } - } - }, - qianggu:{ + ow_heiying:['female','wei',3,['qinru','yinshen','maichong']], + ow_orisa:['female','wu',4,['qianggu','woliu']], + }, + characterIntro:{ + ow_orisa:'奥丽莎是用在努巴尼昙花一现的OR15防御机器人的零件组装而成的,她是这座城市的新一代守护者,但依然有很大的成长空间', + ow_liekong:'莉娜·奥克斯顿(代号:“猎空”)是守望先锋原型机试飞计划的最年轻成员。但在第一次试飞过程中,原型机的传送阵列出现故障,包括飞行员在内完全失踪。莉娜在几个月后再次出现,不过她身上的分子却无法和时间流同步。这种被称为“时间解离”的症状使她彻底变成了一个“活生生”的幽灵,时隐时现。直到一位名叫温斯顿的科学家设计出了“时间加速器”,一台可以让“猎空”维持在当前时间的装置。不仅如此,这一装置还让“猎空”有能力控制她自己的时间流,使她可以任意加速或减慢时间。有了这一全新的能力,她成了守望先锋最强大的特工之一。守望先锋解散后,“猎空”依旧选择为了正义而战,守护无辜。', + ow_sishen:'关于这个黑袍恐怖分子的传闻并不多,只知道大家都称他为“死神”。虽然没人知道他的真实身份和动机,但有一点是可以肯定的,他的出现意味着死亡。“死神”是一名极其不稳定、残暴、冷酷的雇佣兵,在世界各地犯下多起恐怖袭击案件。在过去的数十年间,他参与了许多武装冲突,但其本人却不属于任何组织。在多年的追踪后,“死神”神秘的面纱终于被慢慢揭开。据信,“死神”正在追杀前守望先锋特工并系统地逐一消灭。', + ow_tianshi:'齐格勒是瑞士一家顶尖医院的手术部门负责人。正是她在医学领域的成就,引起了守望先锋的注意。由于齐格勒的双亲都被战争夺走了生命,因此她从一开始就极其反对该组织通过军事手段进行维和。但最终,她意识到守望先锋给她提供了一个可以拯救更多人生命的机会。作为守望先锋医学研究部门的负责人,安吉拉致力于更好地在前线治疗受到致命伤的病员。尽管她对守望先锋做出了巨大的贡献,但齐格勒博士经常质疑她的上司以及守望先锋的长远目标。而当守望先锋解散之后,齐格勒博士便致力于帮助那些受战争波及的受难者。', + ow_falaozhiying:'本名法芮尔,来自一个军功卓越的军人世家,贡献与荣耀就是她最高的追求。在加入埃及军队后,她的坚韧和在战术上的天赋使她很快就晋升为了一名军官。作为一名果敢的领袖,任何在她手下服役的士兵都对她抱有绝对的忠诚。有了所有这些卓越的表现,法芮尔自然成了守望先锋最青睐的一名候选人。但在她正式加入之前,守望先锋就解散了。当她带着所有的荣誉退役后,法芮尔加入了一家名为“海力士国际安保”的私人安保公司,该公司的最重要的一笔订单就是负责保护吉萨高原地下的人工智能研究设施。尽管她对守望先锋的解散感到无比的遗憾,但她依旧梦想着能为正义而战并改变这个残破的世界。', + ow_zhixuzhiguang:'当被认为是为数不多可以成为光子建筑师的人才之后,年轻的塞特娅·法斯瓦尼离开了贫穷的家乡,成为了费斯卡光子建筑师学院的一员。她很快就成为了乌托邦最顶尖的光子建筑师。但费斯卡集团在塞特娅身上还是看到了更广阔的发展潜力。费斯卡集团称其为“秩序之光”,为了集团的利益和扩大在其他国家的影响力,将其派遣到全球执行秘密任务。虽然“秩序之光”相信她的所作所为是为了实现人性之“大善”,但有时候她也会怀疑她所希望实现的控制和秩序,是否真的是人类最需要的。', + ow_luxiao:'卢西奥•科雷亚•多斯桑托斯在里约热内卢长大。“智能危机”结束后,由于经济的一蹶不振导致这里变成了一个贫穷拥挤的贫民区。他想找到一个办法激发周围人的信心与活力:音乐。他开始在街边、社区派对进行表演,随着年龄的增长便开始了一系列传奇的地下演出。但当多国集团费斯卡集团计划重建城市的大部分地区时,卢西奥所在的社区陷入了混乱,人们失去了自由。卢西奥绝对不会容忍这一切。他偷走了费斯卡用来压迫人民的音波技术,反过来将人们团结在一起。最终,在一场暴动中,他们将费斯卡集团赶出了家园。卢西奥的领导能力让他在一夜之间成为了明星和社会正能量的象征。他的音乐在人们心中的地位如火箭般蹿升。随着影响力的不断扩大,卢西奥意识到他有机会可以改变这个世界,让这个世界变得更美好。', + ow_shibing:'被全球通缉的独行侠“士兵:76”独自一人发动了一场旨在查出守望先锋解散真相的战争。“士兵:76”在全球一系列针对金融机构、秘密集团和守望先锋基地的袭击活动中被曝光。尽管外界至今不清楚他的动机是什么,但有人认为他曾是一位守望先锋特工,决心查出守望先锋垮台的幕后黑手。', + ow_yuanshi:'岛田忍者家族大名最年轻的儿子,但对家族的非法生意毫无兴趣,被视为一个危险的累赘。在家族大名意外死亡后,他与哥哥半藏的矛盾激化,最终导致了一场生死对决,源氏也因此差点送命。后来被守望先锋救下,并被改造成机械忍者以摧毁他父亲的邪恶帝国。在完成任务后,源氏因无法接受自己的机械身躯,离开了守户先锋,并游历世界希望能找到自己存在的意义。数年之后,他遇到了智械僧侣禅雅塔,并且在这位僧侣的引导下,源氏体内的人类和机械体验终于融合在了一起。他开始明白,尽管他有一副机械身躯,但他的人类灵魂是完整的,他渐渐意识到自己的新形态是给予自己的恩赐和力量。', + ow_chanyata:'在“智能危机”结束之后,一群被放逐的智能机器人感受到了被其称为“灵魂觉醒”的升华之道,他们渐渐相信他们和人类一样,同样拥有灵魂。由神秘僧侣泰哈撒·孟达塔带领的这些僧侣开始寻找让人类和机器人重回曾经的和谐相处之道。他们最终被世人所接纳,并得到了全球数百万人的支持。但其中一位僧侣,禅雅塔并不赞同这一新道路。他认为要解决人类和机器人之间根深蒂固的问题,不能依靠循循善诱,而必须通过个体联系和互动。最终,他选择离开寺庙,游走世界,帮助那些他所遇到的人摆脱凡尘。但如果有必要,他也会为了保护无辜而拿起武器,无论人类还是机器人。', + ow_dva:'D.Va曾是一名职业玩家,而现在则利用自己的技巧驾驶一台尖端机甲保卫国家。随着智能机械不断进化,它最终干扰了MEKA的无人机控制网络,迫使军方派驾驶员驾驶这些机甲。由于难以找到合适的候选人,政府开始向那些拥有足以操控机甲尖端武器系统的必要反应和本能的国内职业玩家寻求帮助,其中就包括顶尖玩家之一的“D.Va”宋哈娜。作为一名为了获胜不惜一切代价的精英玩家,D.Va从来都不会对对手表现出丝毫的仁慈。D.Va将这次新任务视为一款全新的游戏,无所畏惧地和其他MEKA机甲冲向战场,随时准备保卫自己的国家。最近,她开始向她的粉丝直播战斗行动,而这也让她成为了世界巨星。', + ow_mei:'守望先锋为了查明全球不断升级的怪异气候现象的真正原因,在世界各个位置建立了一系列生态监测站。周美灵就是这一长久项目的成员之一。当她来到该项目的南极洲监控站时,一场突如其来的极地风暴摧毁了大部分设施并将这里与外界隔绝了开来。随着补给物资的不断消耗,科学家们进入了急冻状态希望能够撑到救援队抵达的那一天。但救援并没有抵达。几年后,当这些科学家的急冻舱最终被发现时,美是唯一的幸存者。此时,守望先锋已经解散,所有的生态监测站也都已经被废弃,他们之前收集的研究数据全部丢失。美最终决定独自继续她的工作。她带上了一台可穿戴式气候控制装置,游历世界,希望能够重新建立起生态监测网络,查出威胁着这个星球生态系统的真正原因。', + ow_ana:'守望先锋的创始成员之一,世界公认的顶级狙击手。智械危机结束后,安娜被晋升为了上尉。尽管身居要职,但已年过半百的安娜拒绝离开战场,依然亲临前线。直至在一次人质解救行动中,遭遇了一个叫做“黑百合”的黑爪特工,所有人都认为安娜死在了那场战斗中。但事实上,安娜活了下来,身受重伤并且失去了自己的右眼。在恢复期间,她感受到了战斗中生命的不可承受之重,因此决定就此隐居。然而随着时间一天天过去,看着自己家乡遭到的威胁愈演愈烈,她突然意识到自己依然有责任保护身边的亲人。在“征用”了守望先锋军械库中的装备后,安娜重新回到了这个世界,为了一个更安全、稳定的和平世界而战。', + ow_heibaihe:'“黑百合”在成为如今的杀手之前,曾与对抗恐怖组织“黑爪”的守望先锋探员杰哈·拉克瓦结婚。在多次刺杀杰哈无果之后,黑爪决定将目标转向他的妻子,艾米丽。黑爪特工绑架了艾米丽并对其进行了一项高强度神经重构计划。他们击垮了她的意志,抑制了其本身的人性,将其变成了一个潜伏特工。她最终被守望先锋探员找到并在确认无致命伤之后重新过上了以前的生活。两周之后,她杀死了睡梦中的杰哈,并回归了黑爪。', + ow_maikelei:'曾是美国西南部因非法军火交易而臭名昭著的“死局”帮中,最令人胆寒的一员,后被守望先锋逮捕。由于其枪法精湛且足智多谋,守望先锋给了他两个选择:在最高安全级别的监狱中度过余生,或加入守望先锋的秘密行动部队“暗影守望”。他选择了后者。尽管一开始他对守望先锋的理念嗤之以鼻,但他逐渐相信可以通过扫除世上的不公,来弥补自己过去犯下的罪行。后来,暗影守望内部出现了异样的气氛:废除守望先锋,独掌大权。麦克雷由于不想参与其中,于是便独自离开,销声匿迹。多年之后,他以雇佣兵的身份再次出现。尽管许多大小团体都想拉拢他,但他只为自己眼中的正义而战。', + ow_kuangshu:'由于澳大利亚智能中枢核心在遭到攻击后发生爆炸,这片地区现在变成了寸草不生的辐射荒地。但即便如此,还是有一群自称为“拾荒者”的人类生存了下来。他们在残骸中寻找一切还可利用的东西,渐渐形成了一个野蛮、危险的团体。“狂鼠”就是其中的一员。和其他人一样,他也受到了辐射,因此变成了一个痴迷于危险炸弹的疯子。当他在中枢废墟中发掘出一个极其珍贵的宝藏后,全世界都知道了这个疯子的名号。尽管几乎没人知道他到底发现了什么,但他身后总有数不清的赏金猎人、黑帮和投机分子想要杀掉他,直到他与“拾荒者”打手“路霸”达到了一个协议:只要今后找到的宝贝五五分成,“路霸”就会是“狂鼠”的私人保镖。', + ow_tuobiang:'托比昂是一个极其不信任智械的天才工程师,但他的同行都认为这只是他杞人忧天而已。但托比昂最担心的事情最终还是发生了,一场机器人对抗其人类发明者的“智能危机”在全球范围内爆发。由于其在工程学方面的天才造诣,守望先锋向他伸出了橄榄枝,并将其纳入了最早的守望先锋攻击部队,而他也证明了自己在终结这场危机中的关键价值。但在守望先锋解散后,托比昂设计出的许多武器被偷走并被藏在世界各地。出于对自己作品的责任心,托比昂便发誓不能让这些武器落入敌手,危害无辜的世人。', + ow_baolei:'“堡垒”系列在设计之初是被用于维和目的的,这一系列的机器单位拥有能够快速在突击和攻城模式之间转换的独特能力。但在“智能危机”期间,该系列却被用来对抗其人类发明者,成为了机器人叛军的中坚力量。随着后来危机的解除,几乎所有的“堡垒”系列机器人都被销毁或拆解。直到今天,“堡垒”依旧是当年那场可怕战争的代名词。但是有一台独特的“堡垒”机器人,在那场战争的决战中严重受损,因此被遗忘了数十年。直到有一天,它被意外地重新激活,它的战斗程序几乎全部受损,取而代之的是对自然世界及其住民的强烈好奇。好奇的“堡垒”于是在这个被战火蹂躏过的世界上,开始了探索和寻找自我价值的旅途。', + ow_banzang:'岛田家据传已有数百年的历史。以忍者为主要成员的岛田家,经过多年的发展,已经建立起一个以军火和非法物资交易为主的庞大黑道帝国。作为大名的长子,半藏注定要继承他的父亲统治岛田帝国。父亲过世后,家族长老就建议半藏帮助他那刚愎自用的弟弟源氏,以便两人携手管理岛田帝国。在遭到源氏拒绝后,半藏被迫亲手了结了自己的弟弟。半藏因此深受打击,他拒绝继承父亲的遗产并最终抛弃了自己的家族和所有辛苦换来的成果。现在,半藏四海为家,不断磨练着自己作为一名武士的技巧,希望终有一天能挽回自己的名誉并真正放下自己的过去。', + ow_laiyinhate:'莱因哈特•威尔海姆的行事作风就像一个属于过去的勇士,时刻铭记着骑士的信条:无畏、公正、勇敢。莱因哈特独特的道德观和舍小为大的信念,深得其上级的喜爱。他有话直说,因此成为了守望先锋最坚定的拥护者,同时在有必要时,也是守望先锋最刻薄的批评者,时刻提醒着其他人,守望先锋是一支正义之师。莱因哈特一直服役到将近六十岁,因此不得不面临强制退役。而守望先锋又深陷腐败和煽动叛乱之嫌的泥沼,莱因哈特只能眼睁睁地看着自己守护了一生的信念被吞噬。尽管守望先锋最终解散,但莱因哈特绝不会在世界陷入混乱之时袖手旁观。他再一次穿上了十字军战甲,立誓为正义而战,像曾经的白银骑士那样守护欧罗巴大陆无辜的人民,坚信光明的未来必将到来。', + ow_luba:'“路霸”马可曾是众多居住在澳洲内陆的居民之一。在智能危机爆发后,政府作出了一个极具争议的决定,将这里送给了差点摧毁整个国家的智能机器人,以求达成永久的和平协定。这一决定直接导致马可和大批居民被迫离开,因失去家园而怒不可遏的马可和其他人开始了一场暴力起义,最终,引发了一场大爆炸,导致周围数公里地区全部遭到辐射,只留下了变形的金属和残骸。为了在这种环境下生存下来,他戴上了面具、骑着破烂摩托开上了通往澳洲内陆的残破高速公路。一路上,他的人性一点一点地被消磨,马可最终消失了,而“路霸”就此诞生。', + ow_wensidun:'在“地平线”月球殖民地的居民中,有一群经过基因改造的大猩猩。其中一只大猩猩在接受了哈罗德·温斯顿博士团队的基因改造后,显示出了极快的脑部发育迹象,博士本人也将人类科学和创造力教给了这只猩猩。但当其他大猩猩发动叛乱,杀死了所有科学家并占领殖民地后,他的生活便再也回不到过去了。出于对哈罗德博士的爱戴,这只大猩猩决定继承他的姓氏:温斯顿,并设计出了一枚临时火箭逃往了地球。他找到了新家:守望先锋 —— 这是一个代表着他所憧憬的所有人性的组织。温斯顿终于有机会实现哈罗德博士生前不断教导他的英雄理念。但随着后来守望先锋的解散,温斯顿也隐居了起来,再一次与他报以厚望的世界失去联系,但他却从未放弃对英雄最终回归的期望。', + ow_zhaliya:'亚历山德拉·查莉娅诺娃是世界上最强壮的女运动员之一。然而就在世锦赛前夕,一直处于休眠状态的西伯利亚机器人控制中枢再度发动攻击,战火再次蔓延到了她的家乡。早已名利双收的亚历山德拉,毅然抛弃了一切,立即回到家乡加入了当地的防御部队。', + ow_heiying:'作为全世界最臭名昭著的黑客,“黑影”利用信息与情报操控权贵。早在她称自己为“黑影”之前,░░░░░░是千千万万在智械危机后变成孤儿的儿童之一。在家乡大部分基础设施都被摧毁的情况下,她依靠自己在黑客以及计算机方面的天赋活了下来。在黑客领域的一连串的胜利让░░░░░░对自己的实力过度自信,最终她在毫无防备的情况下,陷入了一张覆盖全球的阴谋网——并且也因此被人盯上了。由于自己的安全面临严重威胁,░░░░░░不得不删除关于自己的全部信息,从此销声匿迹。后来,她以“黑影”的身份再度出现,经过改造的她决心查出那张阴谋网背后的真相。', + }, + skill:{ + woliu:{ + trigger:{player:'phaseEnd'}, + direct:true, + unique:true, + forceunique:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('woliu'),lib.filter.notMe,[1,2]).ai=function(target){ + if(get.attitude(player,target)<0){ + return get.effect(target,{name:'sha'},player,player); + } + return 0; + } + 'step 1' + if(result.bool){ + player.logSkill('woliu',result.targets); + var list=[player].concat(result.targets); + for(var i=0;i0){ + return [0,num]; + } + if(target.hp==1&&!target.hasShan()) return; + return [1,num]; + } + } + } + } + }, + qianggu:{ enable:'phaseUse', usable:1, filterCard:true, selectCard:2, - position:'he', + position:'he', check:function(card){ return 8-get.value(card); }, @@ -184,7 +184,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ player.changeHujia(2); - player.addTempSkill('qianggu2',{player:'phaseBegin'}); + player.addTempSkill('qianggu2',{player:'phaseBegin'}); }, ai:{ result:{ @@ -193,25 +193,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){ order:2.5 } }, - qianggu2:{ - trigger:{target:'useCardToBefore'}, + qianggu2:{ + trigger:{target:'useCardToBefore'}, forced:true, filter:function(event,player){ return event.card.name=='sha'; }, - mark:true, - intro:{ - content:'其他角色对你使用杀时需要弃置一张基本牌,否则杀对你无效' - }, + mark:true, + intro:{ + content:'其他角色对你使用杀时需要弃置一张基本牌,否则杀对你无效' + }, content:function(){ "step 0" var eff; - if(player.hasSkill('woliu2')){ - eff=-get.attitude(trigger.player,player); - } - else{ - eff=get.effect(player,trigger.card,trigger.player,trigger.player); - } + if(player.hasSkill('woliu2')){ + eff=-get.attitude(trigger.player,player); + } + else{ + eff=get.effect(player,trigger.card,trigger.player,trigger.player); + } trigger.player.chooseToDiscard('强固:弃置一张基本牌,否则杀对'+get.translation(player)+'无效',function(card){ return get.type(card)=='basic'; }).set('ai',function(card){ @@ -230,7 +230,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ target:function(card,player,target,current){ if(card.name=='sha'){ if(_status.event.name=='qianggu2') return; - if(get.attitude(player,target)>0) return; + if(get.attitude(player,target)>0) return; var bs=player.getCards('h',{type:'basic'}); if(bs.length<2) return 0; if(player.hasSkill('jiu')||player.hasSkill('tianxianjiu')) return; @@ -247,14 +247,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } } - }, - dianji:{ - enable:'phaseUse', + }, + dianji:{ + enable:'phaseUse', filter:function(event,player){ return player.countCards('h')>0; }, filterCard:true, - usable:1, + usable:1, viewAs:{name:'jingleishan',nature:'thunder'}, check:function(card){ return 8-get.value(card) @@ -264,311 +264,311 @@ game.import('character',function(lib,game,ui,get,ai,_status){ expose:0.2, threaten:1.2 }, - mod:{ - playerEnabled:function(card,player,target){ - if(_status.event.skill=='dianji'&&get.distance(player,target)>2) return false; - } - } - }, - feitiao:{ - trigger:{player:'phaseUseBegin'}, - direct:true, - filter:function(event,player){ - return player.countCards('he')>0; - }, - content:function(){ - 'step 0' - var next=player.chooseCardTarget({ - prompt:get.prompt('feitiao'), - position:'he', - filterCard:true, - ai1:function(card){ - return 7-get.value(card); - }, - ai2:function(target){ - var att=get.attitude(player,target); - if(att>=0) return 0; - if(!target.countCards('he')) return -0.01; - var dist=get.distance(player,target); - if(dist>2){ - att-=2; - } - else if(dist==2){ - att--; - } - return -att; - }, - filterTarget:function(card,player,target){ - return player!=target; - } - }); - 'step 1' - if(result.bool){ - player.discard(result.cards); - var target=result.targets[0]; - player.logSkill('feitiao',target); - player.storage.feitiao2=target; - player.addTempSkill('feitiao2'); - target.randomDiscard(); - } - - } - }, - feitiao2:{ - mod:{ - globalFrom:function(from,to){ - if(to==from.storage.feitiao2) return -Infinity; - } - }, - mark:'character', - intro:{ - content:'与$的距离视为1直到回合结束' - }, - onremove:true - }, - zhencha:{ - init:function(player){ - player.storage.zhencha=true; - }, - mark:true, - intro:{ - content:function(storage,player){ - if(storage){ - return '每当你使用一张杀,你摸一张牌或回复一点体力'; - } - else if(player.hasSkill('bshaowei')&&player.storage.bshaowei){ - return '你的杀无视距离和防具、无数量限制且不可闪避;你不能闪避杀'; - } - else{ - return '无额外技能'; - } - } - }, - trigger:{player:'phaseEnd'}, - filter:function(event,player){ - if(player.hasSkill('zhencha2')) return false; - return !player.storage.zhencha; - }, - content:function(){ - player.storage.bshaowei=false; - player.storage.zhencha=true; - if(player.marks.zhencha){ - player.marks.zhencha.firstChild.innerHTML='侦'; - } - player.addTempSkill('zhencha2'); - }, - subSkill:{ - sha:{ - trigger:{player:'shaBegin'}, - direct:true, - filter:function(event,player){ - return player.storage.zhencha&&event.card&&event.card.name=='sha'; - }, - content:function(){ - player.chooseDrawRecover(get.prompt('zhencha')).logSkill='zhencha'; - } - } - }, - group:'zhencha_sha' - }, - bshaowei:{ - init:function(player){ - player.storage.bshaowei=false; - }, - trigger:{player:'phaseEnd'}, - filter:function(event,player){ - if(player.hasSkill('zhencha2')) return false; - return !player.storage.bshaowei; - }, - check:function(event,player){ - if(!player.hasShan()) return true; - if(!player.hasSha()) return false; - return Math.random()<0.5; - }, - content:function(){ - player.storage.bshaowei=true; - player.storage.zhencha=false; - if(player.marks.zhencha){ - player.marks.zhencha.firstChild.innerHTML='哨'; - } - player.addTempSkill('zhencha2'); - }, - subSkill:{ - sha:{ - mod:{ - targetInRange:function(card,player,target,now){ - if(card.name=='sha'&&player.storage.bshaowei) return true; - }, - cardUsable:function(card,player,num){ - if(card.name=='sha'&&player.storage.bshaowei) return Infinity; - } - }, - trigger:{target:'shaBegin',player:'shaBegin'}, - forced:true, - filter:function(event,player){ - return player.storage.bshaowei; - }, - check:function(){ - return false; - }, - content:function(){ - trigger.directHit=true; - }, - ai:{ - unequip:true, - skillTagFilter:function(player,tag,arg){ - if(!player.storage.bshaowei) return false; - if(arg&&arg.name=='sha') return true; - return false; - } - } - } - }, - group:'bshaowei_sha', - ai:{ - threaten:function(player,target){ - if(target.storage.bshaowei) return 1.7; - return 1; + mod:{ + playerEnabled:function(card,player,target){ + if(_status.event.skill=='dianji'&&get.distance(player,target)>2) return false; } - } - }, - zhencha2:{}, - pingzhang:{ - trigger:{global:'damageBegin'}, - alter:true, - intro:{ - content:function(storage,player){ - if(player.hasSkill('pingzhang2')){ - if(player.hasSkill('pingzhang3')){ - return '已对自已和其他角色发动屏障'; - } - else{ - return '已对自已发动屏障'; - } - } - else{ - return '已对其他角色发动屏障'; - } - }, - markcount:function(storage,player){ - if(player.hasSkill('pingzhang2')&&player.hasSkill('pingzhang3')){ - return 2; - } - return 1; - } - }, - filter:function(event,player){ - if(event.num<=0) return false; - var position=get.is.altered('pingzhang')?'h':'he'; - if(event.player==player){ - if(player.hasSkill('pingzhang2')) return false; - return player.countCards(position,{suit:'heart'}); - } - else{ - if(player.hasSkill('pingzhang3')) return false; - return player.countCards(position,{suit:'spade'}); - } - }, - direct:true, - content:function(){ - 'step 0' - var position=get.is.altered('pingzhang')?'h':'he'; - var suit=(player==trigger.player)?'heart':'spade'; - var next=player.chooseToDiscard(position,{suit:suit},get.prompt('pingzhang',trigger.player)); - next.ai=function(card){ - if(get.damageEffect(trigger.player,trigger.source,player)<0){ - return 8-get.value(card); - } - return 0; - } - next.logSkill=['pingzhang',trigger.player]; - 'step 1' - if(result.bool){ - trigger.num--; - if(player==trigger.player){ - player.addSkill('pingzhang2'); - } - else{ - player.addSkill('pingzhang3'); - } - player.markSkill('pingzhang'); - } - }, - group:['pingzhang_count'], - subSkill:{ - count:{ - trigger:{player:'phaseBegin'}, - silent:true, - content:function(){ - player.storage.pingzhang=0; - if(player.hasSkill('pingzhang2')){ - player.storage.pingzhang++; - player.removeSkill('pingzhang2'); - } - if(player.hasSkill('pingzhang3')){ - player.storage.pingzhang++; - player.removeSkill('pingzhang3'); - } - player.unmarkSkill('pingzhang'); - } - } - }, - ai:{ - expose:0.2, - threaten:1.5 - } - }, - pingzhang2:{}, - pingzhang3:{}, - liyong:{ - trigger:{player:'phaseDrawBegin'}, - forced:true, - filter:function(event,player){ - return player.storage.pingzhang>0; - }, - content:function(){ - trigger.num+=player.storage.pingzhang; - } - }, - liangou:{ - enable:'phaseUse', - usable:1, - filterTarget:function(card,player,target){ - return target!=player; - }, - filterCard:true, - position:'he', - check:function(card){ - return 5-get.value(card); - }, - content:function(){ - 'step 0' - player.judge(function(card){ - return get.suit(card)!='heart'?1:-1; - }); - 'step 1' - if(result.bool){ - target.addTempSkill('liangou2'); - target.storage.liangou2=player; - } - }, - ai:{ - order:10, - expose:0.2, - result:{ - target:function(player,target){ - if(get.damageEffect(target,player,target)<0&&player.hasCard(function(card){ - return get.tag(card,'damage')?true:false; - })){ - return -1; - } - return 0; - } - } - } - }, - liangou2:{ - mod:{ + } + }, + feitiao:{ + trigger:{player:'phaseUseBegin'}, + direct:true, + filter:function(event,player){ + return player.countCards('he')>0; + }, + content:function(){ + 'step 0' + var next=player.chooseCardTarget({ + prompt:get.prompt('feitiao'), + position:'he', + filterCard:true, + ai1:function(card){ + return 7-get.value(card); + }, + ai2:function(target){ + var att=get.attitude(player,target); + if(att>=0) return 0; + if(!target.countCards('he')) return -0.01; + var dist=get.distance(player,target); + if(dist>2){ + att-=2; + } + else if(dist==2){ + att--; + } + return -att; + }, + filterTarget:function(card,player,target){ + return player!=target; + } + }); + 'step 1' + if(result.bool){ + player.discard(result.cards); + var target=result.targets[0]; + player.logSkill('feitiao',target); + player.storage.feitiao2=target; + player.addTempSkill('feitiao2'); + target.randomDiscard(); + } + + } + }, + feitiao2:{ + mod:{ + globalFrom:function(from,to){ + if(to==from.storage.feitiao2) return -Infinity; + } + }, + mark:'character', + intro:{ + content:'与$的距离视为1直到回合结束' + }, + onremove:true + }, + zhencha:{ + init:function(player){ + player.storage.zhencha=true; + }, + mark:true, + intro:{ + content:function(storage,player){ + if(storage){ + return '每当你使用一张杀,你摸一张牌或回复一点体力'; + } + else if(player.hasSkill('bshaowei')&&player.storage.bshaowei){ + return '你的杀无视距离和防具、无数量限制且不可闪避;你不能闪避杀'; + } + else{ + return '无额外技能'; + } + } + }, + trigger:{player:'phaseEnd'}, + filter:function(event,player){ + if(player.hasSkill('zhencha2')) return false; + return !player.storage.zhencha; + }, + content:function(){ + player.storage.bshaowei=false; + player.storage.zhencha=true; + if(player.marks.zhencha){ + player.marks.zhencha.firstChild.innerHTML='侦'; + } + player.addTempSkill('zhencha2'); + }, + subSkill:{ + sha:{ + trigger:{player:'shaBegin'}, + direct:true, + filter:function(event,player){ + return player.storage.zhencha&&event.card&&event.card.name=='sha'; + }, + content:function(){ + player.chooseDrawRecover(get.prompt('zhencha')).logSkill='zhencha'; + } + } + }, + group:'zhencha_sha' + }, + bshaowei:{ + init:function(player){ + player.storage.bshaowei=false; + }, + trigger:{player:'phaseEnd'}, + filter:function(event,player){ + if(player.hasSkill('zhencha2')) return false; + return !player.storage.bshaowei; + }, + check:function(event,player){ + if(!player.hasShan()) return true; + if(!player.hasSha()) return false; + return Math.random()<0.5; + }, + content:function(){ + player.storage.bshaowei=true; + player.storage.zhencha=false; + if(player.marks.zhencha){ + player.marks.zhencha.firstChild.innerHTML='哨'; + } + player.addTempSkill('zhencha2'); + }, + subSkill:{ + sha:{ + mod:{ + targetInRange:function(card,player,target,now){ + if(card.name=='sha'&&player.storage.bshaowei) return true; + }, + cardUsable:function(card,player,num){ + if(card.name=='sha'&&player.storage.bshaowei) return Infinity; + } + }, + trigger:{target:'shaBegin',player:'shaBegin'}, + forced:true, + filter:function(event,player){ + return player.storage.bshaowei; + }, + check:function(){ + return false; + }, + content:function(){ + trigger.directHit=true; + }, + ai:{ + unequip:true, + skillTagFilter:function(player,tag,arg){ + if(!player.storage.bshaowei) return false; + if(arg&&arg.name=='sha') return true; + return false; + } + } + } + }, + group:'bshaowei_sha', + ai:{ + threaten:function(player,target){ + if(target.storage.bshaowei) return 1.7; + return 1; + } + } + }, + zhencha2:{}, + pingzhang:{ + trigger:{global:'damageBegin'}, + alter:true, + intro:{ + content:function(storage,player){ + if(player.hasSkill('pingzhang2')){ + if(player.hasSkill('pingzhang3')){ + return '已对自已和其他角色发动屏障'; + } + else{ + return '已对自已发动屏障'; + } + } + else{ + return '已对其他角色发动屏障'; + } + }, + markcount:function(storage,player){ + if(player.hasSkill('pingzhang2')&&player.hasSkill('pingzhang3')){ + return 2; + } + return 1; + } + }, + filter:function(event,player){ + if(event.num<=0) return false; + var position=get.is.altered('pingzhang')?'h':'he'; + if(event.player==player){ + if(player.hasSkill('pingzhang2')) return false; + return player.countCards(position,{suit:'heart'}); + } + else{ + if(player.hasSkill('pingzhang3')) return false; + return player.countCards(position,{suit:'spade'}); + } + }, + direct:true, + content:function(){ + 'step 0' + var position=get.is.altered('pingzhang')?'h':'he'; + var suit=(player==trigger.player)?'heart':'spade'; + var next=player.chooseToDiscard(position,{suit:suit},get.prompt('pingzhang',trigger.player)); + next.ai=function(card){ + if(get.damageEffect(trigger.player,trigger.source,player)<0){ + return 8-get.value(card); + } + return 0; + } + next.logSkill=['pingzhang',trigger.player]; + 'step 1' + if(result.bool){ + trigger.num--; + if(player==trigger.player){ + player.addSkill('pingzhang2'); + } + else{ + player.addSkill('pingzhang3'); + } + player.markSkill('pingzhang'); + } + }, + group:['pingzhang_count'], + subSkill:{ + count:{ + trigger:{player:'phaseBegin'}, + silent:true, + content:function(){ + player.storage.pingzhang=0; + if(player.hasSkill('pingzhang2')){ + player.storage.pingzhang++; + player.removeSkill('pingzhang2'); + } + if(player.hasSkill('pingzhang3')){ + player.storage.pingzhang++; + player.removeSkill('pingzhang3'); + } + player.unmarkSkill('pingzhang'); + } + } + }, + ai:{ + expose:0.2, + threaten:1.5 + } + }, + pingzhang2:{}, + pingzhang3:{}, + liyong:{ + trigger:{player:'phaseDrawBegin'}, + forced:true, + filter:function(event,player){ + return player.storage.pingzhang>0; + }, + content:function(){ + trigger.num+=player.storage.pingzhang; + } + }, + liangou:{ + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return target!=player; + }, + filterCard:true, + position:'he', + check:function(card){ + return 5-get.value(card); + }, + content:function(){ + 'step 0' + player.judge(function(card){ + return get.suit(card)!='heart'?1:-1; + }); + 'step 1' + if(result.bool){ + target.addTempSkill('liangou2'); + target.storage.liangou2=player; + } + }, + ai:{ + order:10, + expose:0.2, + result:{ + target:function(player,target){ + if(get.damageEffect(target,player,target)<0&&player.hasCard(function(card){ + return get.tag(card,'damage')?true:false; + })){ + return -1; + } + return 0; + } + } + } + }, + liangou2:{ + mod:{ // cardEnabled:function(card,player){ // return false; // }, @@ -581,86 +581,86 @@ game.import('character',function(lib,game,ui,get,ai,_status){ // cardSavable:function(card,player){ // return false; // }, - globalTo:function(from,to){ - if(from==to.storage.liangou2) return -Infinity; - } + globalTo:function(from,to){ + if(from==to.storage.liangou2) return -Infinity; + } }, - onremove:true, - trigger:{player:'damageBegin'}, - usable:1, - forced:true, - popup:false, - content:function(){ - trigger.num++; - }, - // ai:{ - // effect:{ - // target:function(card,player,target){ - // if(get.tag(card,'damage')) return [1,-2]; - // if(get.tag(card,'respond')) return [1,-1]; - // } - // } - // } - }, - xiyang:{ - trigger:{player:'phaseEnd'}, - filter:function(event,player){ - return !player.isTurnedOver()&&player.isDamaged(); - }, - check:function(event,player){ - return player.hp<=1; - }, - content:function(){ - 'step 0' - player.turnOver(); - 'step 1' - player.recover(2); - } - }, - qinru:{ - trigger:{player:'useCardToBegin'}, - filter:function(event,player){ - return event.target!=player&&event.targets&& - event.targets.length==1&&!event.target.hasSkill('fengyin'); - }, - logTarget:'target', - check:function(event,player){ - return get.attitude(player,event.target)<0; - }, - intro:{ - content:'players' - }, - content:function(){ - 'step 0' - trigger.target.judge(function(card){ - return get.suit(card)=='heart'?0:-1; - }); - 'step 1' - if(result.suit!='heart'){ - var target=trigger.target; - if(!player.storage.qinru){ - player.storage.qinru=[]; - } - for(var i=0;i2){ - player.storage.qinru.shift(); - } - target.addTempSkill('fengyin',{player:'phaseAfter'}); - player.markSkill('qinru'); - } - }, - ai:{ - expose:0.2, - threaten:1.3, - } - }, - yinshen:{ + onremove:true, + trigger:{player:'damageBegin'}, + usable:1, + forced:true, + popup:false, + content:function(){ + trigger.num++; + }, + // ai:{ + // effect:{ + // target:function(card,player,target){ + // if(get.tag(card,'damage')) return [1,-2]; + // if(get.tag(card,'respond')) return [1,-1]; + // } + // } + // } + }, + xiyang:{ + trigger:{player:'phaseEnd'}, + filter:function(event,player){ + return !player.isTurnedOver()&&player.isDamaged(); + }, + check:function(event,player){ + return player.hp<=1; + }, + content:function(){ + 'step 0' + player.turnOver(); + 'step 1' + player.recover(2); + } + }, + qinru:{ + trigger:{player:'useCardToBegin'}, + filter:function(event,player){ + return event.target!=player&&event.targets&& + event.targets.length==1&&!event.target.hasSkill('fengyin'); + }, + logTarget:'target', + check:function(event,player){ + return get.attitude(player,event.target)<0; + }, + intro:{ + content:'players' + }, + content:function(){ + 'step 0' + trigger.target.judge(function(card){ + return get.suit(card)=='heart'?0:-1; + }); + 'step 1' + if(result.suit!='heart'){ + var target=trigger.target; + if(!player.storage.qinru){ + player.storage.qinru=[]; + } + for(var i=0;i2){ + player.storage.qinru.shift(); + } + target.addTempSkill('fengyin',{player:'phaseAfter'}); + player.markSkill('qinru'); + } + }, + ai:{ + expose:0.2, + threaten:1.3, + } + }, + yinshen:{ trigger:{player:'phaseEnd'}, direct:true, filter:function(event,player){ @@ -682,149 +682,149 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, }, - maichong:{ - trigger:{player:'phaseBegin'}, - filter:function(event,player){ - if(player.storage.qinru){ - for(var i=0;i0; - }, - filterTarget:function(card,player,target){ - return !target.hujia; - }, - filterCard:true, - position:'he', - check:function(card){ - var player=_status.event.player; - if(game.hasPlayer(function(current){ - return current.hp==1&&get.attitude(player,current)>2; - })){ - return 7-get.value(card); - } - return 5-get.value(card); - }, - content:function(){ - player.changeHujia(-1); - target.changeHujia(); - }, - ai:{ - order:5, - expose:0.2, - result:{ - target:function(player,target){ - return 1/Math.max(1,target.hp); - } - } - } - }, - maoding:{ - trigger:{player:'damageEnd',source:'damageEnd'}, - frequent:true, - filter:function(event,player){ - if(get.is.altered('maoding')&&event.source!=player) return false; - return true; - }, - alter:true, - content:function(){ + maichong:{ + trigger:{player:'phaseBegin'}, + filter:function(event,player){ + if(player.storage.qinru){ + for(var i=0;i0; + }, + filterTarget:function(card,player,target){ + return !target.hujia; + }, + filterCard:true, + position:'he', + check:function(card){ + var player=_status.event.player; + if(game.hasPlayer(function(current){ + return current.hp==1&&get.attitude(player,current)>2; + })){ + return 7-get.value(card); + } + return 5-get.value(card); + }, + content:function(){ + player.changeHujia(-1); + target.changeHujia(); + }, + ai:{ + order:5, + expose:0.2, + result:{ + target:function(player,target){ + return 1/Math.max(1,target.hp); + } + } + } + }, + maoding:{ + trigger:{player:'damageEnd',source:'damageEnd'}, + frequent:true, + filter:function(event,player){ + if(get.is.altered('maoding')&&event.source!=player) return false; + return true; + }, + alter:true, + content:function(){ var list=get.typeCard('hslingjian'); if(!list.length){ return; } - player.gain(game.createCard(list.randomGet()),'gain2'); - }, - group:'maoding2', - ai:{ - threaten:1.5, + player.gain(game.createCard(list.randomGet()),'gain2'); + }, + group:'maoding2', + ai:{ + threaten:1.5, maixie_defend:true - } - }, - maoding2:{ - enable:'phaseUse', - filter:function(event,player){ - return player.countCards('h',{type:'hslingjian'})>1; - }, - filterCard:{type:'hslingjian'}, - filterTarget:function(card,player,target){ - return !target.hujia; - }, - selectCard:2, - // usable:1, - content:function(){ - target.changeHujia(); - }, - ai:{ + } + }, + maoding2:{ + enable:'phaseUse', + filter:function(event,player){ + return player.countCards('h',{type:'hslingjian'})>1; + }, + filterCard:{type:'hslingjian'}, + filterTarget:function(card,player,target){ + return !target.hujia; + }, + selectCard:2, + // usable:1, + content:function(){ + target.changeHujia(); + }, + ai:{ order:9, result:{ target:function(player,target){ @@ -832,230 +832,231 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, } - }, - paotai:{ - enable:'phaseUse', - intro:{ - content:function(storage){ - var num; - switch(storage){ - case 1:num=30;break; - case 2:num=60;break; - case 3:num=100;break; - } - return '结束阶段,有'+num+'%机率对一名随机敌人造成一点火焰伤害'; - } - }, - init:function(player){ - player.storage.paotai=0; - }, - filter:function(event,player){ - return player.countCards('h','sha')>0&&player.storage.paotai<3; - }, - filterCard:{name:'sha'}, - content:function(){ - player.storage.paotai++; - player.markSkill('paotai'); - }, - ai:{ - order:5, - threaten:1.5, - result:{ - player:1 - } - }, - group:['paotai2','paotai3'] - }, - paotai2:{ - trigger:{player:'phaseEnd'}, - forced:true, - filter:function(event,player){ - var num=0; - switch(player.storage.paotai){ - case 1:num=30;break; - case 2:num=60;break; - case 3:num=100;break; - } - return 100*Math.random()0&&event.num>0; - }, - content:function(){ - player.storage.paotai-=trigger.num; - if(player.storage.paotai<=0){ - player.storage.paotai=0; - player.unmarkSkill('paotai'); - } - else{ - player.updateMarks(); - } - } - }, - bfengshi:{ - trigger:{player:'shaBegin'}, - forced:true, - alter:true, + }, + paotai:{ + enable:'phaseUse', + intro:{ + content:function(storage){ + var num; + switch(storage){ + case 1:num=30;break; + case 2:num=60;break; + case 3:num=100;break; + } + return '结束阶段,有'+num+'%机率对一名随机敌人造成一点火焰伤害'; + } + }, + init:function(player){ + player.storage.paotai=0; + }, + filter:function(event,player){ + return player.countCards('h','sha')>0&&player.storage.paotai<3; + }, + filterCard:{name:'sha'}, + content:function(){ + player.storage.paotai++; + player.markSkill('paotai'); + }, + ai:{ + order:5, + threaten:1.5, + result:{ + player:1 + } + }, + group:['paotai2','paotai3'] + }, + paotai2:{ + trigger:{player:'phaseEnd'}, + forced:true, + filter:function(event,player){ + var num=0; + switch(player.storage.paotai){ + case 1:num=30;break; + case 2:num=60;break; + case 3:num=100;break; + } + return 100*Math.random()0&&event.num>0; + }, + content:function(){ + player.storage.paotai-=trigger.num; + if(player.storage.paotai<=0){ + player.storage.paotai=0; + player.unmarkSkill('paotai'); + } + else{ + player.updateMarks(); + } + } + }, + bfengshi:{ + trigger:{player:'shaBegin'}, + forced:true, + alter:true, check:function(event,player){ return get.attitude(player,event.target)<=0; }, filter:function(event,player){ if(player.hasSkill('bfengshi4')) return false; - var num=0.2; - if(get.is.altered('bfengshi')) num=0.15; + var num=0.2; + if(get.is.altered('bfengshi')) num=0.15; return Math.random()0; - }, - check:function(card){ - return 7-get.value(card); - }, - content:function(){ - 'step 0' - var targets=player.getEnemies(function(target){ - return target.countCards('he')>0; - }); - if(targets.length){ - event.targets=targets.randomGets(3); - event.targets.sort(lib.sort.seat); - player.line(event.targets,'green'); - } - 'step 1' - if(event.targets.length){ - var target=event.targets.shift(); - var he=target.getCards('he'); - if(he.length){ - target.addExpose(0.1); - target.discard(he.randomGet()); - } - event.redo(); - } - }, - ai:{ - order:10, - expose:0.3, - result:{ - player:1 - } - } - }, - aqianghua:{ - enable:'phaseUse', - usable:1, - alter:true, - filter:function(event,player){ - return player.countCards('h')>=1; - }, - filterTarget:function(card,player,target){ - return target!=player; - }, - filterCard:true, - selectCard:-1, - discard:false, - prepare:'give', - content:function(){ - target.gain(cards); - if(!get.is.altered('aqianghua')) target.changeHujia(); - target.addSkill('aqianghua2'); - }, - ai:{ - threaten:1.5, - order:2.1, - result:{ - target:function(player,target){ - if(get.attitude(player,target)<3) return 0; - if(target.hasJudge('lebu')) return 0; - if(target.hasSkill('aqianghua2')) return 0.1; - return 1; - } - } - } - }, - aqianghua2:{ - trigger:{source:'damageBegin'}, - forced:true, - content:function(){ - trigger.num++; - player.unmarkSkill('aqianghua2'); - player.removeSkill('aqianghua2'); - }, - mark:true, - intro:{ - content:'下一次造成的伤害+1' - } - }, - shihuo:{ - trigger:{global:'damageEnd'}, - forced:true, - filter:function(event){ - return event.nature=='fire'; - }, - content:function(){ - player.draw(); - } - }, - shoujia:{ + yinbo:{ enable:'phaseUse', - usable:1, + usable:1, + filterCard:{suit:'spade'}, + position:'he', + filter:function(event,player){ + return player.countCards('he',{suit:'spade'})>0; + }, + check:function(card){ + return 7-get.value(card); + }, + content:function(){ + 'step 0' + var targets=player.getEnemies(function(target){ + return target.countCards('he')>0; + }); + if(targets.length){ + event.targets=targets.randomGets(3); + event.targets.sort(lib.sort.seat); + player.line(event.targets,'green'); + } + 'step 1' + if(event.targets.length){ + var target=event.targets.shift(); + var he=target.getCards('he'); + if(he.length){ + target.addExpose(0.1); + target.discard(he.randomGet()); + } + event.redo(); + } + }, + ai:{ + order:10, + expose:0.3, + result:{ + player:1 + } + } + }, + aqianghua:{ + enable:'phaseUse', + usable:1, + alter:true, + filter:function(event,player){ + return player.countCards('h')>=1; + }, + filterTarget:function(card,player,target){ + return target!=player; + }, + filterCard:true, + selectCard:-1, + discard:false, + prepare:'give', + content:function(){ + target.gain(cards); + if(!get.is.altered('aqianghua')) target.changeHujia(); + target.addSkill('aqianghua2'); + }, + ai:{ + threaten:1.5, + order:2.1, + result:{ + target:function(player,target){ + if(target.hasSkillTag('nogain')) return 0; + if(get.attitude(player,target)<3) return 0; + if(target.hasJudge('lebu')) return 0; + if(target.hasSkill('aqianghua2')) return 0.1; + return 1; + } + } + } + }, + aqianghua2:{ + trigger:{source:'damageBegin'}, + forced:true, + content:function(){ + trigger.num++; + player.unmarkSkill('aqianghua2'); + player.removeSkill('aqianghua2'); + }, + mark:true, + intro:{ + content:'下一次造成的伤害+1' + } + }, + shihuo:{ + trigger:{global:'damageEnd'}, + forced:true, + filter:function(event){ + return event.nature=='fire'; + }, + content:function(){ + player.draw(); + } + }, + shoujia:{ + enable:'phaseUse', + usable:1, filter:function(event,player){ return player.countCards('h')>0; }, @@ -1065,19 +1066,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, discard:false, prepare:'give2', - filterTarget:function(card,player,target){ - return target!=player&&!target.hasSkill('shoujia2'); - }, + filterTarget:function(card,player,target){ + return target!=player&&!target.hasSkill('shoujia2'); + }, content:function(){ target.storage.shoujia=cards[0]; - target.storage.shoujia2=player; + target.storage.shoujia2=player; target.addSkill('shoujia2'); - target.syncStorage('shoujia'); + target.syncStorage('shoujia'); }, ai:{ order:1, - expose:0.2, - threaten:1.4, + expose:0.2, + threaten:1.4, result:{ target:-1 } @@ -1095,21 +1096,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.showCards([player.storage.shoujia],get.translation(player)+'发动了【兽夹】'); 'step 1' player.storage.shoujia.discard(); - delete player.storage.shoujia; + delete player.storage.shoujia; delete player.storage.shoujia2; player.removeSkill('shoujia2'); - game.addVideo('storage',player,['shoujia',null]); + game.addVideo('storage',player,['shoujia',null]); game.addVideo('storage',player,['shoujia2',null]); - player.turnOver(true); + player.turnOver(true); }, intro:{ mark:function(dialog,content,player){ if(player.storage.shoujia2&&player.storage.shoujia2.isUnderControl(true)){ dialog.add([player.storage.shoujia]); } - else{ - return '已成为'+get.translation(player.storage.shoujia2)+'的兽夹目标'; - } + else{ + return '已成为'+get.translation(player.storage.shoujia2)+'的兽夹目标'; + } }, content:function(content,player){ if(player.storage.shoujia2&&player.storage.shoujia2.isUnderControl(true)){ @@ -1118,128 +1119,128 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return '已成为'+get.translation(player.storage.shoujia2)+'的兽夹目标'; } }, - group:'shoujia3' + group:'shoujia3' }, - shoujia3:{ - trigger:{global:'damageEnd'}, - forced:true, - filter:function(event,player){ - return event.player==player.storage.shoujia2; - }, - content:function(){ - player.storage.shoujia.discard(); - player.$throw(player.storage.shoujia); - game.log(player.storage.shoujia,'被置入弃牌堆') - delete player.storage.shoujia; + shoujia3:{ + trigger:{global:'damageEnd'}, + forced:true, + filter:function(event,player){ + return event.player==player.storage.shoujia2; + }, + content:function(){ + player.storage.shoujia.discard(); + player.$throw(player.storage.shoujia); + game.log(player.storage.shoujia,'被置入弃牌堆') + delete player.storage.shoujia; delete player.storage.shoujia2; player.removeSkill('shoujia2'); - game.addVideo('storage',player,['shoujia',null]); + game.addVideo('storage',player,['shoujia',null]); game.addVideo('storage',player,['shoujia2',null]); - } - }, - liudan:{ + } + }, + liudan:{ trigger:{player:'useCard'}, - check:function(event,player){ - return game.countPlayer(function(current){ - if(event.targets.contains(current)==false&¤t!=player&& - lib.filter.targetEnabled(event.card,player,current)){ - return get.effect(current,event.card,player,player); - } - })>=0; - }, + check:function(event,player){ + return game.countPlayer(function(current){ + if(event.targets.contains(current)==false&¤t!=player&& + lib.filter.targetEnabled(event.card,player,current)){ + return get.effect(current,event.card,player,player); + } + })>=0; + }, 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)); - }); + 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)); - }); + return (trigger.targets.contains(current)==false&¤t!=player&& + lib.filter.targetEnabled(trigger.card,player,current)); + }); if(list.length){ - var list2=[]; - for(var i=0;iplayer.countCards('h')&&!player.skipList.contains('phaseUse')&&!player.skipList.contains('phaseDiscard'); - }, - check:function(event,player){ - var nh=player.countCards('h'); - if(Math.min(5,player.hp)-nh>=2) return true; - return false; - }, - content:function(){ - var num=Math.min(5,player.hp)-player.countCards('h'); - var cards=[]; - while(num--){ - cards.push(game.createCard('sha')); - } - player.gain(cards,'gain2'); - player.skip('phaseUse'); - player.skip('phaseDiscard'); - } - }, - shanguang:{ - enable:'phaseUse', - usable:1, - filterCard:{suit:'diamond'}, - position:'he', - filter:function(event,player){ - return player.countCards('he',{suit:'diamond'})>0; - }, - filterTarget:function(card,player,target){ - return target!=player&&get.distance(player,target,'attack')<=1; - }, - check:function(card){ + shenqiang:{ + trigger:{source:'damageEnd'}, + forced:true, + filter:function(event,player){ + return event.card&&event.card.name=='sha'&&_status.currentPhase==player; + }, + content:function(){ + player.getStat().card.sha--; + } + }, + tiandan:{ + trigger:{player:'phaseDrawBegin'}, + filter:function(event,player){ + return Math.min(5,player.hp)>player.countCards('h')&&!player.skipList.contains('phaseUse')&&!player.skipList.contains('phaseDiscard'); + }, + check:function(event,player){ + var nh=player.countCards('h'); + if(Math.min(5,player.hp)-nh>=2) return true; + return false; + }, + content:function(){ + var num=Math.min(5,player.hp)-player.countCards('h'); + var cards=[]; + while(num--){ + cards.push(game.createCard('sha')); + } + player.gain(cards,'gain2'); + player.skip('phaseUse'); + player.skip('phaseDiscard'); + } + }, + shanguang:{ + enable:'phaseUse', + usable:1, + filterCard:{suit:'diamond'}, + position:'he', + filter:function(event,player){ + return player.countCards('he',{suit:'diamond'})>0; + }, + filterTarget:function(card,player,target){ + return target!=player&&get.distance(player,target,'attack')<=1; + }, + check:function(card){ if(card.name=='sha'&&_status.event.player.countCards('h','sha')<3) return 0; - return 6-get.value(card); - }, - content:function(){ - target.addTempSkill('shanguang2'); - }, - ai:{ - order:7.9, - result:{ - target:function(player,target){ - var nh=target.countCards('h'); - if(get.attitude(player,target)<0&&nh>=3&& - player.canUse('sha',target)&&player.countCards('h','sha')&& - get.effect(target,{name:'sha'},player,player)>0){ - return -nh-5; - } - return -nh; - } - } - } - }, - shanguang2:{ - mod:{ + return 6-get.value(card); + }, + content:function(){ + target.addTempSkill('shanguang2'); + }, + ai:{ + order:7.9, + result:{ + target:function(player,target){ + var nh=target.countCards('h'); + if(get.attitude(player,target)<0&&nh>=3&& + player.canUse('sha',target)&&player.countCards('h','sha')&& + get.effect(target,{name:'sha'},player,player)>0){ + return -nh-5; + } + return -nh; + } + } + } + }, + shanguang2:{ + mod:{ cardEnabled:function(){ return false; }, @@ -1253,121 +1254,121 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return false; } }, - ai:{ - effect:{ - target:function(card,player,target,current){ - if(get.tag(card,'respondShan')||get.tag(card,'respondSha')){ - if(current<0) return 1.5; - } - } - } - } - }, - baoxue:{ - enable:'phaseUse', - init:function(player){ - player.storage.baoxue=false; - }, - intro:{ - content:'limited' - }, - mark:true, - unique:true, - skillAnimation:true, - animationColor:'water', - line:'thunder', - filter:function(event,player){ - return !player.storage.baoxue&&player.countCards('he',{color:'black'})>0; - }, - filterTarget:function(card,player,target){ - return target!=player; - }, - selectTarget:function(){ - return [1,_status.event.player.countCards('he',{color:'black'})]; - }, - alter:true, - delay:false, - contentBefore:function(){ - 'step 0' - game.delayx(); - 'step 1' - player.storage.baoxue=true; - player.awakenSkill('baoxue'); - player.showHandcards(); - player.discard(player.getCards('he',{color:'black'})); - }, - content:function(){ - 'step 0' - if(!get.is.altered('baoxue')){ - var he=target.getCards('he'); - if(he.length){ - target.discard(he.randomGet()); - } - } - 'step 1' - target.turnOver(true); - }, - contentAfter:function(){ - if(get.is.altered('baoxue')){ - player.turnOver(true); - } - }, - ai:{ - order:function(skill,player){ - var num=game.countPlayer(function(current){ - return get.attitude(player,current)<0; - }); - var nh=player.countCards('he',{color:'black'}); - if(nh==1&&num>1) return 0; - if(nh>num) return 1; - return 11; - }, - result:{ - target:function(player,target){ + ai:{ + effect:{ + target:function(card,player,target,current){ + if(get.tag(card,'respondShan')||get.tag(card,'respondSha')){ + if(current<0) return 1.5; + } + } + } + } + }, + baoxue:{ + enable:'phaseUse', + init:function(player){ + player.storage.baoxue=false; + }, + intro:{ + content:'limited' + }, + mark:true, + unique:true, + skillAnimation:true, + animationColor:'water', + line:'thunder', + filter:function(event,player){ + return !player.storage.baoxue&&player.countCards('he',{color:'black'})>0; + }, + filterTarget:function(card,player,target){ + return target!=player; + }, + selectTarget:function(){ + return [1,_status.event.player.countCards('he',{color:'black'})]; + }, + alter:true, + delay:false, + contentBefore:function(){ + 'step 0' + game.delayx(); + 'step 1' + player.storage.baoxue=true; + player.awakenSkill('baoxue'); + player.showHandcards(); + player.discard(player.getCards('he',{color:'black'})); + }, + content:function(){ + 'step 0' + if(!get.is.altered('baoxue')){ + var he=target.getCards('he'); + if(he.length){ + target.discard(he.randomGet()); + } + } + 'step 1' + target.turnOver(true); + }, + contentAfter:function(){ + if(get.is.altered('baoxue')){ + player.turnOver(true); + } + }, + ai:{ + order:function(skill,player){ + var num=game.countPlayer(function(current){ + return get.attitude(player,current)<0; + }); + var nh=player.countCards('he',{color:'black'}); + if(nh==1&&num>1) return 0; + if(nh>num) return 1; + return 11; + }, + result:{ + target:function(player,target){ if(target.hasSkillTag('noturn')) return 0; - if(player.hasUnknown()) return 0; - return -1; - } - } - } - }, - mianzhen:{ - enable:'phaseUse', - usable:1, - filter:function(event,player){ - return player.countCards('he')>0; - }, - filterTarget:function(card,player,target){ - return target!=player&&!target.hasSkill('mianzhen2'); - }, - filterCard:true, - position:'he', - check:function(card){ - return 8-get.value(card); - }, - content:function(){ - 'step 0' - target.chooseToRespond({name:'shan'}); - 'step 1' - if(!result.bool) target.addSkill('mianzhen2'); - }, - ai:{ - order:2.2, - result:{ - target:function(player,target){ - return Math.min(-0.1,-1-target.countCards('h')+Math.sqrt(target.hp)/2); - } - } - } - }, - mianzhen2:{ - mark:true, - intro:{ - content:'不能使用或打出手牌直到受到伤害或下一回合结束' - }, - trigger:{player:['damageEnd','phaseEnd']}, - forced:true, - popup:false, + if(player.hasUnknown()) return 0; + return -1; + } + } + } + }, + mianzhen:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.countCards('he')>0; + }, + filterTarget:function(card,player,target){ + return target!=player&&!target.hasSkill('mianzhen2'); + }, + filterCard:true, + position:'he', + check:function(card){ + return 8-get.value(card); + }, + content:function(){ + 'step 0' + target.chooseToRespond({name:'shan'}); + 'step 1' + if(!result.bool) target.addSkill('mianzhen2'); + }, + ai:{ + order:2.2, + result:{ + target:function(player,target){ + return Math.min(-0.1,-1-target.countCards('h')+Math.sqrt(target.hp)/2); + } + } + } + }, + mianzhen2:{ + mark:true, + intro:{ + content:'不能使用或打出手牌直到受到伤害或下一回合结束' + }, + trigger:{player:['damageEnd','phaseEnd']}, + forced:true, + popup:false, content:function(){ player.removeSkill('mianzhen2'); }, @@ -1385,51 +1386,51 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return false; } }, - ai:{ - threaten:0.6 - } - }, - zhiyuan:{ - trigger:{source:'damageBefore'}, - check:function(event,player){ - player.disableSkill('tmp','zhiyuan'); - var eff=get.damageEffect(event.player,player,player); - var att=get.attitude(player,event.player); - var bool=false; - if(att>0){ - if(eff<=0||event.player.hp0; - }, - content:function(){ - trigger.cancel(); - trigger.player.recover(trigger.num); - }, - ai:{ - effect:{ - player:function(card,player,target){ - if(get.tag(card,'damage')&&get.attitude(player,target)>0){ - if(target.hp==target.maxHp||get.recoverEffect(target,player,player)<=0) return 'zeroplayertarget'; - return [0,0,0,1]; - } - } - } - } - }, - duwen:{ - trigger:{source:'damageBegin'}, + ai:{ + threaten:0.6 + } + }, + zhiyuan:{ + trigger:{source:'damageBefore'}, + check:function(event,player){ + player.disableSkill('tmp','zhiyuan'); + var eff=get.damageEffect(event.player,player,player); + var att=get.attitude(player,event.player); + var bool=false; + if(att>0){ + if(eff<=0||event.player.hp0; + }, + content:function(){ + trigger.cancel(); + trigger.player.recover(trigger.num); + }, + ai:{ + effect:{ + player:function(card,player,target){ + if(get.tag(card,'damage')&&get.attitude(player,target)>0){ + if(target.hp==target.maxHp||get.recoverEffect(target,player,player)<=0) return 'zeroplayertarget'; + return [0,0,0,1]; + } + } + } + } + }, + duwen:{ + trigger:{source:'damageBegin'}, check:function(event,player){ return get.attitude(player,event.player)<=0; }, @@ -1438,115 +1439,115 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return player.countCards('h')==event.player.countCards('h')&&event.notLink(); }, content:function(){ - trigger.num++; + trigger.num++; }, - ai:{ - threaten:1.5 - }, - }, - duwen2:{ - trigger:{source:'damageEnd'}, - forced:true, - filter:function(event,player){ - return event.card&&event.card.name=='sha'&&player.hp==event.player.hp&&event.notLink(); - }, - content:function(){ - player.draw(2); - } - }, - juji:{ - enable:'phaseUse', - usable:1, - position:'he', - filter:function(event,player){ - return player.countCards('he')>0; - }, - filterCard:function(card){ - var suit=get.suit(card); - for(var i=0;i0; - }, - check:function(card){ - if(ui.selected.cards.length>1) return 0; - return 5-get.value(card); - }, - selectCard:[1,4], - content:function(){ - var suits=[]; - for(var i=0;inum){ - min.length=0; - min.push(players[i]); - num=eff; - } - } - } - for(var i=0;i0) return 0; - if(min[i].countCards('h')<=1&&get.distance(player,min[i],'attack')<=1) return 0; - } - if(min.contains(target)) return -1; - return 0; - } - } - }, - }, - juji2:{ - ai:{ - effect:{ - player:function(card,player,target){ - if(card.name=='sha'&&target==player.storage.juji2) return [1,0,1,-1]; - } - } - }, - trigger:{player:'phaseAfter'}, - forced:true, - popup:false, - content:function(){ - player.unmarkSkill('juji2'); - player.removeSkill('juji2'); - delete player.storage.juji2; - }, - group:'juji3' - }, - juji3:{ - trigger:{player:'shaBegin'}, + ai:{ + threaten:1.5 + }, + }, + duwen2:{ + trigger:{source:'damageEnd'}, + forced:true, + filter:function(event,player){ + return event.card&&event.card.name=='sha'&&player.hp==event.player.hp&&event.notLink(); + }, + content:function(){ + player.draw(2); + } + }, + juji:{ + enable:'phaseUse', + usable:1, + position:'he', + filter:function(event,player){ + return player.countCards('he')>0; + }, + filterCard:function(card){ + var suit=get.suit(card); + for(var i=0;i0; + }, + check:function(card){ + if(ui.selected.cards.length>1) return 0; + return 5-get.value(card); + }, + selectCard:[1,4], + content:function(){ + var suits=[]; + for(var i=0;inum){ + min.length=0; + min.push(players[i]); + num=eff; + } + } + } + for(var i=0;i0) return 0; + if(min[i].countCards('h')<=1&&get.distance(player,min[i],'attack')<=1) return 0; + } + if(min.contains(target)) return -1; + return 0; + } + } + }, + }, + juji2:{ + ai:{ + effect:{ + player:function(card,player,target){ + if(card.name=='sha'&&target==player.storage.juji2) return [1,0,1,-1]; + } + } + }, + trigger:{player:'phaseAfter'}, + forced:true, + popup:false, + content:function(){ + player.unmarkSkill('juji2'); + player.removeSkill('juji2'); + delete player.storage.juji2; + }, + group:'juji3' + }, + juji3:{ + trigger:{player:'shaBegin'}, forced:true, filter:function(event,player){ return event.target==player.storage.juji2; @@ -1554,13 +1555,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ trigger.directHit=true; }, - mod:{ - globalFrom:function(from,to){ - if(to==from.storage.juji2) return -Infinity; - } - } - }, - dulei:{ + mod:{ + globalFrom:function(from,to){ + if(to==from.storage.juji2) return -Infinity; + } + } + }, + dulei:{ enable:'phaseUse', filter:function(event,player){ return !player.hasSkill('dulei2'); @@ -1576,7 +1577,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ player.storage.dulei=cards[0]; player.addSkill('dulei2'); - player.syncStorage('dulei'); + player.syncStorage('dulei'); }, ai:{ order:1, @@ -1601,11 +1602,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.removeSkill('dulei2'); game.addVideo('storage',player,['dulei',null]); trigger.player.loseHp(); - 'step 2' - var he=trigger.player.getCards('he'); - if(he.length){ - trigger.player.discard(he.randomGet()); - } + 'step 2' + var he=trigger.player.getCards('he'); + if(he.length){ + trigger.player.discard(he.randomGet()); + } }, intro:{ mark:function(dialog,content,player){ @@ -1624,7 +1625,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }, - juji_old:{ + juji_old:{ trigger:{player:'shaBegin'}, forced:true, filter:function(event,player){ @@ -1633,46 +1634,46 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ trigger.directHit=true; }, - group:'juji2' + group:'juji2' }, - juji2_old:{ - enable:'phaseUse', - usable:1, - filterTarget:function(card,player,target){ - return target!=player; - }, - content:function(){ - target.addTempSkill('juji3',{player:'phaseEnd'}); - if(!target.storage.juji3){ - target.storage.juji3=[]; - } - target.storage.juji3.push(player); - }, - mod:{ - targetInRange:function(card,player,target){ - if(target.hasSkill('juji3')&&Array.isArray(target.storage.juji3)&&target.storage.juji3.contains(player)){ - return true; - } - } - } - }, - juji3_old:{ - mark:true, - intro:{ - nocount:true, - content:function(storage){ - return '对'+get.translation(storage)+'使用卡牌无视距离'; - } - }, - mod:{ - targetInRange:function(card,player,target){ - if(Array.isArray(player.storage.juji3)&&player.storage.juji3.contains(target)){ - return true; - } - } - } - }, - zhuagou:{ + juji2_old:{ + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return target!=player; + }, + content:function(){ + target.addTempSkill('juji3',{player:'phaseEnd'}); + if(!target.storage.juji3){ + target.storage.juji3=[]; + } + target.storage.juji3.push(player); + }, + mod:{ + targetInRange:function(card,player,target){ + if(target.hasSkill('juji3')&&Array.isArray(target.storage.juji3)&&target.storage.juji3.contains(player)){ + return true; + } + } + } + }, + juji3_old:{ + mark:true, + intro:{ + nocount:true, + content:function(storage){ + return '对'+get.translation(storage)+'使用卡牌无视距离'; + } + }, + mod:{ + targetInRange:function(card,player,target){ + if(Array.isArray(player.storage.juji3)&&player.storage.juji3.contains(target)){ + return true; + } + } + } + }, + zhuagou:{ enable:'phaseUse', usable:1, changeSeat:true, @@ -1700,240 +1701,240 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }, - bingqiang:{ - enable:'phaseUse', - position:'he', - filterCard:function(card){ - var color=get.color(card); - for(var i=0;imax){ - max=num; - } - if(num-min){ - if(get.color(card)=='red') return 5-get.value(card); - } - else{ - if(get.color(card)=='black') return 5-get.value(card); - } - return 0; - }, - changeTarget:function(player,targets){ - var target=targets[0]; - var add=game.filterPlayer(function(player){ - return get.distance(target,player,'pure')==1; - }); - for(var i=0;i0; - }, - content:function(){ - for(var i=0;i0; - }, - content:function(){ - 'step 0' - var goon=false; - var goon2=false; - var att=get.attitude(player,trigger.player); - if(att>0){ - if(trigger.player.hp==1) goon=true; - } - else{ - if(Math.random()<0.5) goon=true; - } - if(Math.random()<0.3) goon2=true; - player.chooseToDiscard([1,player.countCards('h')],'he',get.prompt('bingqiang',trigger.player)).set('logSkill',['bingqiang',trigger.player]).ai=function(card){ - if(ui.selected.cards.length) return 0; - if(goon) return 6-get.value(card); - if(goon2) return 4-get.value(card); - return 0; - } - 'step 1' - if(result.bool){ - var num=result.cards.length; - event.num=num; - player.chooseControl('选项一','选项二','选项三','选项四',function(){ - if(get.attitude(player,trigger.player)>0){ - if(Math.random()<0.7) return '选项一'; - return '选项三'; - } - else{ - if(Math.random()<0.7) return '选项四'; - return '选项二'; - } - }).set('prompt','冰墙

选项一:防御距离+'+num+ - '

选项二:防御距离-'+num+ - '

选项三:进攻距离+'+num+ - '

选项四:进攻距离-'+num+'
'); - } - else{ - event.finish(); - } - 'step 2' - switch(result.control){ - case '选项一':{ - trigger.player.storage.bingqiang2=event.num; - trigger.player.addTempSkill('bingqiang2',{player:'phaseBegin'}); - break; - } - case '选项二':{ - trigger.player.storage.bingqiang3=event.num; - trigger.player.addTempSkill('bingqiang3',{player:'phaseBegin'}); - break; - } - case '选项三':{ - trigger.player.storage.bingqiang4=event.num; - trigger.player.addTempSkill('bingqiang4',{player:'phaseBegin'}); - break; - } - case '选项四':{ - trigger.player.storage.bingqiang5=event.num; - trigger.player.addTempSkill('bingqiang5',{player:'phaseBegin'}); - break; - } - } - }, - ai:{ - expose:0.1 - } - }, - bingqiang2:{ - mark:true, - intro:{ - content:'防御距离+#' - }, - mod:{ + bingqiang:{ + enable:'phaseUse', + position:'he', + filterCard:function(card){ + var color=get.color(card); + for(var i=0;imax){ + max=num; + } + if(num-min){ + if(get.color(card)=='red') return 5-get.value(card); + } + else{ + if(get.color(card)=='black') return 5-get.value(card); + } + return 0; + }, + changeTarget:function(player,targets){ + var target=targets[0]; + var add=game.filterPlayer(function(player){ + return get.distance(target,player,'pure')==1; + }); + for(var i=0;i0; + }, + content:function(){ + for(var i=0;i0; + }, + content:function(){ + 'step 0' + var goon=false; + var goon2=false; + var att=get.attitude(player,trigger.player); + if(att>0){ + if(trigger.player.hp==1) goon=true; + } + else{ + if(Math.random()<0.5) goon=true; + } + if(Math.random()<0.3) goon2=true; + player.chooseToDiscard([1,player.countCards('h')],'he',get.prompt('bingqiang',trigger.player)).set('logSkill',['bingqiang',trigger.player]).ai=function(card){ + if(ui.selected.cards.length) return 0; + if(goon) return 6-get.value(card); + if(goon2) return 4-get.value(card); + return 0; + } + 'step 1' + if(result.bool){ + var num=result.cards.length; + event.num=num; + player.chooseControl('选项一','选项二','选项三','选项四',function(){ + if(get.attitude(player,trigger.player)>0){ + if(Math.random()<0.7) return '选项一'; + return '选项三'; + } + else{ + if(Math.random()<0.7) return '选项四'; + return '选项二'; + } + }).set('prompt','冰墙

选项一:防御距离+'+num+ + '

选项二:防御距离-'+num+ + '

选项三:进攻距离+'+num+ + '

选项四:进攻距离-'+num+'
'); + } + else{ + event.finish(); + } + 'step 2' + switch(result.control){ + case '选项一':{ + trigger.player.storage.bingqiang2=event.num; + trigger.player.addTempSkill('bingqiang2',{player:'phaseBegin'}); + break; + } + case '选项二':{ + trigger.player.storage.bingqiang3=event.num; + trigger.player.addTempSkill('bingqiang3',{player:'phaseBegin'}); + break; + } + case '选项三':{ + trigger.player.storage.bingqiang4=event.num; + trigger.player.addTempSkill('bingqiang4',{player:'phaseBegin'}); + break; + } + case '选项四':{ + trigger.player.storage.bingqiang5=event.num; + trigger.player.addTempSkill('bingqiang5',{player:'phaseBegin'}); + break; + } + } + }, + ai:{ + expose:0.1 + } + }, + bingqiang2:{ + mark:true, + intro:{ + content:'防御距离+#' + }, + mod:{ globalTo:function(from,to,distance){ - if(typeof to.storage.bingqiang2=='number') return distance+to.storage.bingqiang2; + if(typeof to.storage.bingqiang2=='number') return distance+to.storage.bingqiang2; }, } - }, - bingqiang3:{ - mark:true, - intro:{ - content:'防御距离-#' - }, - mod:{ + }, + bingqiang3:{ + mark:true, + intro:{ + content:'防御距离-#' + }, + mod:{ globalTo:function(from,to,distance){ - if(typeof to.storage.bingqiang3=='number') return distance-to.storage.bingqiang3; + if(typeof to.storage.bingqiang3=='number') return distance-to.storage.bingqiang3; }, } - }, - bingqiang4:{ - mark:true, - intro:{ - content:'进攻距离+#' - }, - mod:{ + }, + bingqiang4:{ + mark:true, + intro:{ + content:'进攻距离+#' + }, + mod:{ globalFrom:function(from,to,distance){ if(typeof from.storage.bingqiang4=='number') return distance-from.storage.bingqiang4; } } - }, - bingqiang5:{ - mark:true, - intro:{ - content:'进攻距离-#' - }, - mod:{ + }, + bingqiang5:{ + mark:true, + intro:{ + content:'进攻距离-#' + }, + mod:{ globalFrom:function(from,to,distance){ if(typeof from.storage.bingqiang5=='number') return distance+from.storage.bingqiang5; } } - }, - shuangqiang:{ + }, + shuangqiang:{ trigger:{source:'damageBegin'}, check:function(event,player){ var att=get.attitude(player,event.player); if(event.player.hp==1) return att>0; return att<=0; }, - logTarget:'player', + logTarget:'player', filter:function(event,player){ return !event.player.isTurnedOver()&&event.num>0; }, @@ -1943,30 +1944,30 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger.player.turnOver(); } }, - jidong:{ - trigger:{global:'phaseEnd'}, - filter:function(event,player){ - return player.hp==1&&!player.isTurnedOver(); - }, - alter:true, - content:function(){ - 'step 0' - player.turnOver(); - player.recover(2); - 'step 1' - if(player.isTurnedOver()&&!get.is.altered('jidong')){ - player.addTempSkill('jidong2',{player:'turnOverAfter'}); - } - }, - ai:{ - threaten:function(player,target){ - if(target.hp==1) return 2; - return 1; - } - } - }, - jidong2:{ - trigger:{player:'damageBefore'}, + jidong:{ + trigger:{global:'phaseEnd'}, + filter:function(event,player){ + return player.hp==1&&!player.isTurnedOver(); + }, + alter:true, + content:function(){ + 'step 0' + player.turnOver(); + player.recover(2); + 'step 1' + if(player.isTurnedOver()&&!get.is.altered('jidong')){ + player.addTempSkill('jidong2',{player:'turnOverAfter'}); + } + }, + ai:{ + threaten:function(player,target){ + if(target.hp==1) return 2; + return 1; + } + } + }, + jidong2:{ + trigger:{player:'damageBefore'}, forced:true, content:function(){ trigger.cancel(); @@ -1981,200 +1982,200 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, }, - mod:{ - targetEnabled:function(card,player,target){ - if(player!=target) return false; - } - } - }, - chongzhuang:{ - trigger:{source:'damageEnd'}, - forced:true, - filter:function(event,player){ - return player.storage.jijia<=0&&event.num>0; - }, - popup:false, - unique:true, - content:function(){ - player.storage.jijia2+=trigger.num; - if(player.storage.jijia2>=4){ - player.storage.jijia=4; - player.storage.jijia2=0; - player.markSkill('jijia'); - if(lib.config.skill_animation_type!='off'){ - player.logSkill('chongzhuang'); - player.$skill('重装') - } - } - } - }, - tuijin:{ - enable:'phaseUse', - usable:1, - unique:true, - filter:function(event,player){ - if(player.storage.jijia>0){ - return game.hasPlayer(function(current){ - return get.distance(player,current)>1 - }); - } - return false; - }, - filterTarget:function(card,player,target){ - return target!=player&&get.distance(player,target)>1; - }, - content:function(){ - player.storage.tuijin2=target; - player.addTempSkill('tuijin2'); - }, - ai:{ - order:11, - result:{ - target:function(player,target){ - if(get.attitude(player,target)<0){ - if(get.distance(player,target)>2) return -1.5; - return -1; - } - return 0.3; - } - } - } - }, - tuijin2:{ - mod:{ - globalFrom:function(from,to){ - if(to==from.storage.tuijin2) return -Infinity; - } - }, - mark:'character', - intro:{ - content:'与$的距离视为1直到回合结束' - }, - onremove:true - }, - jijia:{ - mark:true, - unique:true, - init:function(player){ - player.storage.jijia=4; - player.storage.jijia2=0; - }, - intro:{ - content:'机甲体力值:#' - }, - mod:{ - maxHandcard:function(player,num){ - if(player.storage.jijia>0){ - return num+player.storage.jijia; - } + mod:{ + targetEnabled:function(card,player,target){ + if(player!=target) return false; } - }, - trigger:{player:'changeHp'}, - forced:true, - popup:false, - filter:function(event,player){ - return player.storage.jijia>0&&event.parent.name=='damage'&&event.num<0; - }, - content:function(){ - player.hp-=trigger.num; - player.update(); - player.storage.jijia+=trigger.num; - if(player.storage.jijia<=0){ - player.unmarkSkill('jijia'); - } - else{ - player.updateMarks(); - } - }, - ai:{ - threaten:function(player,target){ + } + }, + chongzhuang:{ + trigger:{source:'damageEnd'}, + forced:true, + filter:function(event,player){ + return player.storage.jijia<=0&&event.num>0; + }, + popup:false, + unique:true, + content:function(){ + player.storage.jijia2+=trigger.num; + if(player.storage.jijia2>=4){ + player.storage.jijia=4; + player.storage.jijia2=0; + player.markSkill('jijia'); + if(lib.config.skill_animation_type!='off'){ + player.logSkill('chongzhuang'); + player.$skill('重装') + } + } + } + }, + tuijin:{ + enable:'phaseUse', + usable:1, + unique:true, + filter:function(event,player){ + if(player.storage.jijia>0){ + return game.hasPlayer(function(current){ + return get.distance(player,current)>1 + }); + } + return false; + }, + filterTarget:function(card,player,target){ + return target!=player&&get.distance(player,target)>1; + }, + content:function(){ + player.storage.tuijin2=target; + player.addTempSkill('tuijin2'); + }, + ai:{ + order:11, + result:{ + target:function(player,target){ + if(get.attitude(player,target)<0){ + if(get.distance(player,target)>2) return -1.5; + return -1; + } + return 0.3; + } + } + } + }, + tuijin2:{ + mod:{ + globalFrom:function(from,to){ + if(to==from.storage.tuijin2) return -Infinity; + } + }, + mark:'character', + intro:{ + content:'与$的距离视为1直到回合结束' + }, + onremove:true + }, + jijia:{ + mark:true, + unique:true, + init:function(player){ + player.storage.jijia=4; + player.storage.jijia2=0; + }, + intro:{ + content:'机甲体力值:#' + }, + mod:{ + maxHandcard:function(player,num){ + if(player.storage.jijia>0){ + return num+player.storage.jijia; + } + } + }, + trigger:{player:'changeHp'}, + forced:true, + popup:false, + filter:function(event,player){ + return player.storage.jijia>0&&event.parent.name=='damage'&&event.num<0; + }, + content:function(){ + player.hp-=trigger.num; + player.update(); + player.storage.jijia+=trigger.num; + if(player.storage.jijia<=0){ + player.unmarkSkill('jijia'); + } + else{ + player.updateMarks(); + } + }, + ai:{ + threaten:function(player,target){ if(target.storage.jijia<=0) return 2; return 1; } - } - }, - zihui:{ - enable:'phaseUse', - filter:function(event,player){ - return player.storage.jijia>0; - }, - filterTarget:function(card,player,target){ - return target!=player&&get.distance(player,target)<=2; - }, - unique:true, - selectTarget:-1, + } + }, + zihui:{ + enable:'phaseUse', + filter:function(event,player){ + return player.storage.jijia>0; + }, + filterTarget:function(card,player,target){ + return target!=player&&get.distance(player,target)<=2; + }, + unique:true, + selectTarget:-1, skillAnimation:true, animationColor:'fire', - line:'fire', - alter:true, - content:function(){ - 'step 0' - var num=player.storage.jijia; - if(get.is.altered('zihui')){ - num=Math.max(1,Math.min(num,target.countCards('he'))); - } - target.chooseToDiscard(num,'he','弃置'+get.cnNumber(num)+'张牌,或受到2点火焰伤害').ai=function(card){ - if(target.hasSkillTag('nofire')) return 0; - if(get.type(card)!='basic') return 11-get.value(card); - if(target.hp>4) return 7-get.value(card); - if(target.hp==4&&num>=3) return 7-get.value(card); - if(target.hp==3&&num>=4) return 7-get.value(card); - if(num>1) return 8-get.value(card); - return 10-get.value(card); - }; - 'step 1' - if(!result.bool){ - target.damage(2,'fire'); - } - if(target==targets[targets.length-1]){ - player.storage.jijia=0; - player.unmarkSkill('jijia'); - } - }, - ai:{ - order:2, - result:{ - player:function(player){ - var num=0; - var players=game.filterPlayer(); - for(var i=0;i2) continue; - var nh=players[i].countCards('h'); - var att=get.attitude(player,players[i]); - if(nh0){ - if(players[i].hp<=2){ - num-=2; - } - else{ - num-=1.5; - } - } - } - else if(nh==player.storage.jijia){ - if(att<0){ - num+=0.5; - } - else if(att>0){ - num-=0.5; - } - } - } - if(num>=2) return 1; - return 0; - } - } - } - }, - xiandan:{ + line:'fire', + alter:true, + content:function(){ + 'step 0' + var num=player.storage.jijia; + if(get.is.altered('zihui')){ + num=Math.max(1,Math.min(num,target.countCards('he'))); + } + target.chooseToDiscard(num,'he','弃置'+get.cnNumber(num)+'张牌,或受到2点火焰伤害').ai=function(card){ + if(target.hasSkillTag('nofire')) return 0; + if(get.type(card)!='basic') return 11-get.value(card); + if(target.hp>4) return 7-get.value(card); + if(target.hp==4&&num>=3) return 7-get.value(card); + if(target.hp==3&&num>=4) return 7-get.value(card); + if(num>1) return 8-get.value(card); + return 10-get.value(card); + }; + 'step 1' + if(!result.bool){ + target.damage(2,'fire'); + } + if(target==targets[targets.length-1]){ + player.storage.jijia=0; + player.unmarkSkill('jijia'); + } + }, + ai:{ + order:2, + result:{ + player:function(player){ + var num=0; + var players=game.filterPlayer(); + for(var i=0;i2) continue; + var nh=players[i].countCards('h'); + var att=get.attitude(player,players[i]); + if(nh0){ + if(players[i].hp<=2){ + num-=2; + } + else{ + num-=1.5; + } + } + } + else if(nh==player.storage.jijia){ + if(att<0){ + num+=0.5; + } + else if(att>0){ + num-=0.5; + } + } + } + if(num>=2) return 1; + return 0; + } + } + } + }, + xiandan:{ trigger:{player:'shaBegin'}, direct:true, content:function(){ @@ -2188,43 +2189,43 @@ game.import('character',function(lib,game,ui,get,ai,_status){ next.logSkill='xiandan'; "step 1" if(result.bool){ - if(get.color(result.cards[0])=='red'){ - trigger.directHit=true; - } + if(get.color(result.cards[0])=='red'){ + trigger.directHit=true; + } else{ - player.addTempSkill('xiandan2','shaAfter'); - } + player.addTempSkill('xiandan2','shaAfter'); + } } } }, - xiandan2:{ + xiandan2:{ trigger:{source:'damageBegin'}, filter:function(event){ return event.card&&event.card.name=='sha'&&event.notLink(); }, forced:true, - popup:false, + popup:false, content:function(){ trigger.num++; } }, - shouge:{ - trigger:{source:'dieAfter'}, - frequent:true, - content:function(){ - player.gain(game.createCard('zhiliaobo'),'gain2'); - } - }, - tuji:{ - mod:{ - globalFrom:function(from,to,distance){ - if(_status.currentPhase==from){ - return distance-from.countUsed(); - } - }, - }, - }, - mujing:{ + shouge:{ + trigger:{source:'dieAfter'}, + frequent:true, + content:function(){ + player.gain(game.createCard('zhiliaobo'),'gain2'); + } + }, + tuji:{ + mod:{ + globalFrom:function(from,to,distance){ + if(_status.currentPhase==from){ + return distance-from.countUsed(); + } + }, + }, + }, + mujing:{ enable:['chooseToRespond','chooseToUse'], filterCard:function(card){ return get.color(card)=='black'; @@ -2242,26 +2243,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, respondSha:true, }, - group:'mujing2' + group:'mujing2' }, - mujing2:{ - trigger:{player:'shaMiss'}, - forced:true, - popup:false, - filter:function(event){ - return !event.parent._mujinged; - }, - content:function(){ - trigger.parent._mujinged=true; - player.getStat().card.sha--; - } - }, - lichang:{ + mujing2:{ + trigger:{player:'shaMiss'}, + forced:true, + popup:false, + filter:function(event){ + return !event.parent._mujinged; + }, + content:function(){ + trigger.parent._mujinged=true; + player.getStat().card.sha--; + } + }, + lichang:{ trigger:{player:'phaseEnd'}, direct:true, - filter:function(event,player){ - return player.countCards('he',{color:'red'})>0; - }, + filter:function(event,player){ + return player.countCards('he',{color:'red'})>0; + }, content:function(){ "step 0" var next=player.chooseToDiscard(get.prompt('lichang'),'he',{color:'red'}); @@ -2275,135 +2276,135 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, }, - lichang2:{ - trigger:{player:'phaseBegin'}, - direct:true, - mark:true, - intro:{ - content:'下个准备阶段令一名距离1以内的角色回复一点体力或摸两张牌' - }, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('lichang'),function(card,player,target){ - return get.distance(player,target)<=1; - }).ai=function(target){ - var att=get.attitude(player,target); - if(att>0){ - if(target.hp==1&&target.maxHp>1) return att*2; - } - return att; - }; - player.removeSkill('lichang2'); - 'step 1' - if(result.bool){ - player.logSkill('lichang',result.targets); - result.targets[0].chooseDrawRecover(2,true); - } - } - }, - mujing_old:{ - trigger:{player:'useCardToBegin'}, + lichang2:{ + trigger:{player:'phaseBegin'}, + direct:true, + mark:true, + intro:{ + content:'下个准备阶段令一名距离1以内的角色回复一点体力或摸两张牌' + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('lichang'),function(card,player,target){ + return get.distance(player,target)<=1; + }).ai=function(target){ + var att=get.attitude(player,target); + if(att>0){ + if(target.hp==1&&target.maxHp>1) return att*2; + } + return att; + }; + player.removeSkill('lichang2'); + 'step 1' + if(result.bool){ + player.logSkill('lichang',result.targets); + result.targets[0].chooseDrawRecover(2,true); + } + } + }, + mujing_old:{ + trigger:{player:'useCardToBegin'}, filter:function(event,player){ return event.target&&event.target!=player&&get.distance(event.target,player,'attack')>1; }, - direct:true, + direct:true, content:function(){ 'step 0' - player.discardPlayerCard(get.prompt('mujing'),trigger.target).logSkill=['mujing']; - 'step 1' - if(result.bool&&player.countCards('h')<=trigger.target.countCards('h')){ - player.draw(); - } + player.discardPlayerCard(get.prompt('mujing'),trigger.target).logSkill=['mujing']; + 'step 1' + if(result.bool&&player.countCards('h')<=trigger.target.countCards('h')){ + player.draw(); + } } - }, - zhanlong:{ - trigger:{player:'phaseBegin'}, - unique:true, + }, + zhanlong:{ + trigger:{player:'phaseBegin'}, + unique:true, mark:true, skillAnimation:true, init:function(player){ player.storage.zhanlong=false; }, - check:function(event,player){ - if(player.hasJudge('lebu')) return false; - return true; - }, + check:function(event,player){ + if(player.hasJudge('lebu')) return false; + return true; + }, filter:function(event,player){ if(player.storage.zhanlong) return false; - if(player.countCards('he')==0) return false; - if(player.hp!=1) return false; - return true; + if(player.countCards('he')==0) return false; + if(player.hp!=1) return false; + return true; }, content:function(){ - 'step 0' - player.discard(player.getCards('he')); - 'step 1' - player.addTempSkill('zhanlong2'); - player.awakenSkill('zhanlong'); + 'step 0' + player.discard(player.getCards('he')); + 'step 1' + player.addTempSkill('zhanlong2'); + player.awakenSkill('zhanlong'); player.storage.zhanlong=true; - var cards=[]; - for(var i=0;i<3;i++){ - cards.push(game.createCard('sha')); - } - player.gain(cards,'gain2'); + var cards=[]; + for(var i=0;i<3;i++){ + cards.push(game.createCard('sha')); + } + player.gain(cards,'gain2'); }, - ai:{ - threaten:function(player,target){ + ai:{ + threaten:function(player,target){ if(target.hp==1) return 3; return 1; }, - effect:{ + effect:{ target:function(card,player,target){ if(!target.hasFriend()) return; if(get.tag(card,'damage')==1&&target.hp==2&&target.countCards('he')&& - !target.isTurnedOver()&&_status.currentPhase!=target){ - if(get.distance(_status.currentPhase,target,'absolute')<=2) return [0.5,1]; - return 0.8; - } + !target.isTurnedOver()&&_status.currentPhase!=target){ + if(get.distance(_status.currentPhase,target,'absolute')<=2) return [0.5,1]; + return 0.8; + } } } - }, + }, intro:{ content:'limited' } - }, - zhanlong2:{ - mod:{ - cardUsable:function(card){ - if(card.name=='sha') return Infinity; - } - } - }, - feiren:{ - trigger:{source:'damageBegin'}, + }, + zhanlong2:{ + mod:{ + cardUsable:function(card){ + if(card.name=='sha') return Infinity; + } + } + }, + feiren:{ + trigger:{source:'damageBegin'}, forced:true, - alter:true, + alter:true, filter:function(event,player){ return !get.is.altered('feiren')&&event.card&&event.card.name=='sha'&&get.suit(event.card)=='spade'&&event.notLink(); }, content:function(){ trigger.num++; }, - mod:{ - targetInRange:function(card){ - if(card.name=='sha') return true; - }, - selectTarget:function(card,player,range){ - if(card.name=='sha'&&range[1]!=-1&&get.suit(card)=='club'){ - range[1]++; - } - }, - }, - ai:{ - threaten:1.4 - } + mod:{ + targetInRange:function(card){ + if(card.name=='sha') return true; + }, + selectTarget:function(card,player,range){ + if(card.name=='sha'&&range[1]!=-1&&get.suit(card)=='club'){ + range[1]++; + } + }, + }, + ai:{ + threaten:1.4 + } }, - feiren3:{ + feiren3:{ trigger:{player:'useCardAfter'}, filter:function(event,player){ - if(event.parent.name=='feiren2') return false; + if(event.parent.name=='feiren2') return false; if(event.card.name!='sha') return false; - if(get.suit(event.card)!='spade') return false; + if(get.suit(event.card)!='spade') return false; var card=game.createCard(event.card.name,event.card.suit,event.card.number,event.card.nature); for(var i=0;i0){ - return 0; - } - return get.recoverEffect(target,player,target); - } - } - } - }, - xie2:{ - mark:true, - trigger:{global:'phaseEnd'}, - forced:true, - filter:function(event,player){ - if(player.storage.xie=='now'){ - return event.player==player; - } - var num=game.phaseNumber-player.storage.xie; - return num&&num%6==0; - }, - content:function(){ - if(player.storage.xie=='now'){ - player.storage.xie=game.phaseNumber; - } - player.recover(); - }, - intro:{ - content:function(storage,player){ - var str='每隔六回合回复一点体力,直到'+get.translation(storage)+'死亡'; - if(typeof player.storage.xie=='number'){ - var num=game.phaseNumber-player.storage.xie; - num=num%6; - if(num==0){ - str+='(下次生效于本回合)' - } - else{ - str+='(下次生效于'+(6-num)+'回合后)' - } - } - return str; - }, - onunmark:function(storage,player){ - delete player.storage.xie; - delete player.storage.xie2; - } - }, - group:['xie3','xie4'] - }, - xie3:{ - trigger:{global:'phaseBegin'}, - forced:true, - popup:false, - content:function(){ - var num=game.phaseNumber-player.storage.xie; - num=num%6; - if(num){ - num=6-num; - } - player.storage.xie2_markcount=num; - player.updateMarks(); - } - }, - xie4:{ - trigger:{global:'dieAfter'}, - forced:true, - popup:false, - filter:function(event,player){ - return event.player==player.storage.xie2; - }, - content:function(){ - game.log(player,'解除了','【谐】'); - player.removeSkill('xie2'); - } - }, - luan:{ - enable:'phaseUse', - unique:true, - filterTarget:function(card,player,target){ - return target!=player&&!target.hasSkill('luan2'); - }, - filter:function(event,player){ - return player.countCards('h',{suit:'spade'}); - }, - filterCard:{suit:'spade'}, - check:function(card){ - return 7-get.value(card); - }, - content:function(){ - var current=game.findPlayer(function(player){ - return player.hasSkill('luan2'); - }); - if(current){ - current.removeSkill('luan2'); - } - target.addSkill('luan2'); - // target.storage.luan='now'; - target.storage.luan2=player; - }, - ai:{ - expose:0.2, - order:9.1, - threaten:2, - result:{ - target:function(player,target){ - var current=game.findPlayer(function(player){ - return player.hasSkill('luan2'); - }); - if(current&&get.attitude(player,current)<0){ - return 0; - } - if(target.hp==1) return 0.5; - return -1; - } - } - } - }, - luan2:{ - mark:true, - intro:{ - content:'受到的伤害后流失一点体力,直到首次进入濒死状态' - }, - trigger:{player:'damageEnd'}, - forced:true, - content:function(){ - player.loseHp(); - }, - ai:{ - threaten:1.2 - }, - group:['luan3','luan4'] - }, - luan3:{ - trigger:{player:'dyingAfter'}, - forced:true, - popup:false, - content:function(){ - game.log(player,'解除了','【乱】'); - player.removeSkill('luan2'); - } - }, - luan2_old:{ - mark:true, - trigger:{global:'phaseEnd'}, - forced:true, - filter:function(event,player){ - if(player.storage.luan=='now'){ - return event.player==player; - } - var num=game.phaseNumber-player.storage.luan; - return num&&num%6==0; - }, - content:function(){ - if(player.storage.luan=='now'){ - player.storage.luan=game.phaseNumber; - } - player.loseHp(); - }, - intro:{ - content:function(storage,player){ - var str='每隔六回合失去一点体力,直到'+get.translation(storage)+'死亡'; - if(typeof player.storage.luan=='number'){ - var num=game.phaseNumber-player.storage.luan; - num=num%6; - if(num==0){ - str+='(下次生效于本回合)' - } - else{ - str+='(下次生效于'+(6-num)+'回合后)' - } - } - return str; - }, - onunmark:function(storage,player){ - delete player.storage.luan; - delete player.storage.luan2; - } - }, - group:['luan3','luan4'] - }, - luan3_old:{ - trigger:{global:'phaseBegin'}, - forced:true, - popup:false, - content:function(){ - var num=game.phaseNumber-player.storage.luan; - num=num%6; - if(num){ - num=6-num; - } - player.storage.luan2_markcount=num; - player.updateMarks(); - } - }, - luan4:{ - trigger:{global:'dieAfter'}, - forced:true, - popup:false, - filter:function(event,player){ - return event.player==player.storage.luan2; - }, - content:function(){ - game.log(player,'解除了','【乱】'); - player.removeSkill('luan2'); - } - }, - sheng:{ - enable:'phaseUse', - unique:true, + xie:{ + enable:'phaseUse', + unique:true, + filterTarget:function(card,player,target){ + return target!=player&&!target.hasSkill('xie2'); + }, + filter:function(event,player){ + return player.countCards('h',{suit:'heart'}); + }, + filterCard:{suit:'heart'}, + check:function(card){ + return 7-get.value(card); + }, + content:function(){ + var current=game.findPlayer(function(player){ + return player.hasSkill('xie2'); + }); + if(current){ + current.removeSkill('xie2'); + } + target.addSkill('xie2'); + target.storage.xie='now'; + target.storage.xie2=player; + }, + ai:{ + expose:0.2, + order:9.1, + threaten:2, + result:{ + target:function(player,target){ + var current=game.findPlayer(function(player){ + return player.hasSkill('xie2'); + }); + if(current&&get.recoverEffect(current,player,player)>0){ + return 0; + } + return get.recoverEffect(target,player,target); + } + } + } + }, + xie2:{ + mark:true, + trigger:{global:'phaseEnd'}, + forced:true, + filter:function(event,player){ + if(player.storage.xie=='now'){ + return event.player==player; + } + var num=game.phaseNumber-player.storage.xie; + return num&&num%6==0; + }, + content:function(){ + if(player.storage.xie=='now'){ + player.storage.xie=game.phaseNumber; + } + player.recover(); + }, + intro:{ + content:function(storage,player){ + var str='每隔六回合回复一点体力,直到'+get.translation(storage)+'死亡'; + if(typeof player.storage.xie=='number'){ + var num=game.phaseNumber-player.storage.xie; + num=num%6; + if(num==0){ + str+='(下次生效于本回合)' + } + else{ + str+='(下次生效于'+(6-num)+'回合后)' + } + } + return str; + }, + onunmark:function(storage,player){ + delete player.storage.xie; + delete player.storage.xie2; + } + }, + group:['xie3','xie4'] + }, + xie3:{ + trigger:{global:'phaseBegin'}, + forced:true, + popup:false, + content:function(){ + var num=game.phaseNumber-player.storage.xie; + num=num%6; + if(num){ + num=6-num; + } + player.storage.xie2_markcount=num; + player.updateMarks(); + } + }, + xie4:{ + trigger:{global:'dieAfter'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.player==player.storage.xie2; + }, + content:function(){ + game.log(player,'解除了','【谐】'); + player.removeSkill('xie2'); + } + }, + luan:{ + enable:'phaseUse', + unique:true, + filterTarget:function(card,player,target){ + return target!=player&&!target.hasSkill('luan2'); + }, + filter:function(event,player){ + return player.countCards('h',{suit:'spade'}); + }, + filterCard:{suit:'spade'}, + check:function(card){ + return 7-get.value(card); + }, + content:function(){ + var current=game.findPlayer(function(player){ + return player.hasSkill('luan2'); + }); + if(current){ + current.removeSkill('luan2'); + } + target.addSkill('luan2'); + // target.storage.luan='now'; + target.storage.luan2=player; + }, + ai:{ + expose:0.2, + order:9.1, + threaten:2, + result:{ + target:function(player,target){ + var current=game.findPlayer(function(player){ + return player.hasSkill('luan2'); + }); + if(current&&get.attitude(player,current)<0){ + return 0; + } + if(target.hp==1) return 0.5; + return -1; + } + } + } + }, + luan2:{ + mark:true, + intro:{ + content:'受到的伤害后流失一点体力,直到首次进入濒死状态' + }, + trigger:{player:'damageEnd'}, + forced:true, + content:function(){ + player.loseHp(); + }, + ai:{ + threaten:1.2 + }, + group:['luan3','luan4'] + }, + luan3:{ + trigger:{player:'dyingAfter'}, + forced:true, + popup:false, + content:function(){ + game.log(player,'解除了','【乱】'); + player.removeSkill('luan2'); + } + }, + luan2_old:{ + mark:true, + trigger:{global:'phaseEnd'}, + forced:true, + filter:function(event,player){ + if(player.storage.luan=='now'){ + return event.player==player; + } + var num=game.phaseNumber-player.storage.luan; + return num&&num%6==0; + }, + content:function(){ + if(player.storage.luan=='now'){ + player.storage.luan=game.phaseNumber; + } + player.loseHp(); + }, + intro:{ + content:function(storage,player){ + var str='每隔六回合失去一点体力,直到'+get.translation(storage)+'死亡'; + if(typeof player.storage.luan=='number'){ + var num=game.phaseNumber-player.storage.luan; + num=num%6; + if(num==0){ + str+='(下次生效于本回合)' + } + else{ + str+='(下次生效于'+(6-num)+'回合后)' + } + } + return str; + }, + onunmark:function(storage,player){ + delete player.storage.luan; + delete player.storage.luan2; + } + }, + group:['luan3','luan4'] + }, + luan3_old:{ + trigger:{global:'phaseBegin'}, + forced:true, + popup:false, + content:function(){ + var num=game.phaseNumber-player.storage.luan; + num=num%6; + if(num){ + num=6-num; + } + player.storage.luan2_markcount=num; + player.updateMarks(); + } + }, + luan4:{ + trigger:{global:'dieAfter'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.player==player.storage.luan2; + }, + content:function(){ + game.log(player,'解除了','【乱】'); + player.removeSkill('luan2'); + } + }, + sheng:{ + enable:'phaseUse', + unique:true, mark:true, skillAnimation:true, animationColor:'metal', @@ -2669,18 +2670,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, filter:function(event,player){ if(player.storage.sheng) return false; - return true; + return true; + }, + filterTarget:function(card,player,target){ + return target.isDamaged(); + }, + selectTarget:[1,Infinity], + contentBefore:function(){ + player.turnOver(); + player.addSkill('sheng2'); + player.awakenSkill('sheng'); + player.storage.sheng=true; }, - filterTarget:function(card,player,target){ - return target.isDamaged(); - }, - selectTarget:[1,Infinity], - contentBefore:function(){ - player.turnOver(); - player.addSkill('sheng2'); - player.awakenSkill('sheng'); - player.storage.sheng=true; - }, content:function(){ target.recover(); }, @@ -2688,103 +2689,103 @@ game.import('character',function(lib,game,ui,get,ai,_status){ order:1, result:{ target:function(player,target){ - var eff=get.recoverEffect(target,player,target); - if(player.hp==1) return eff; - if(player.hasUnknown()) return 0; - var num1=0,num2=0,num3=0,players=game.filterPlayer(); - for(var i=0;i0){ - num1++; - if(players[i].isDamaged()){ - num2++; - if(players[i].hp<=1){ - num3++; - } - } - } - } - if(num1==num2) return eff; - if(num2==num1-1&&num3) return eff; - if(num3>=2) return eff; - return 0; - } + var eff=get.recoverEffect(target,player,target); + if(player.hp==1) return eff; + if(player.hasUnknown()) return 0; + var num1=0,num2=0,num3=0,players=game.filterPlayer(); + for(var i=0;i0){ + num1++; + if(players[i].isDamaged()){ + num2++; + if(players[i].hp<=1){ + num3++; + } + } + } + } + if(num1==num2) return eff; + if(num2==num1-1&&num3) return eff; + if(num3>=2) return eff; + return 0; + } }, }, intro:{ content:'limited' } - }, - sheng2:{ - trigger:{player:'phaseBegin'}, - forced:true, - popup:false, - content:function(){ - player.removeSkill('sheng2'); - }, - mod:{ - targetEnabled:function(card,player,target){ - if(player!=target) return false; - } - } - }, - yihun:{ - trigger:{player:'phaseEnd'}, - direct:true, - filter:function(event,player){ - return player.countCards('he',{color:'black'})>0&&!player.hasSkill('yihun2'); - }, - content:function(){ - 'step 0' - var next=player.chooseCardTarget({ - prompt:get.prompt('yihun'), - position:'he', - filterCard:function(card,player){ - return get.color(card)=='black'&&lib.filter.cardDiscardable(card,player); - }, - ai1:function(card){ - return 7-get.value(card); - }, - ai2:function(target){ - var att=-get.attitude(player,target); - if(target==player.next){ - att/=10; - } - if(target==player.next.next){ - att/=2; - } - return att; - }, - filterTarget:function(card,player,target){ - return player!=target; - }, - }); - 'step 1' - if(result.bool){ - player.discard(result.cards); - player.logSkill('yihun',result.targets); - player.addSkill('yihun2'); - var target=result.targets[0] - player.storage.yihun2=target; - if(target&&(get.mode()!='guozhan')||!target.isUnseen()){ - player.markSkillCharacter('yihun2',target,'移魂','在'+get.translation(target)+'的下一准备阶段视为对其使用一张杀'); - } - } - }, - }, - yihun2:{ - trigger:{global:['phaseBegin','dieAfter']}, - forced:true, - filter:function(event,player){ - return event.player==player.storage.yihun2; - }, - content:function(){ - if(player.storage.yihun2.isIn()){ - player.useCard({name:'sha'},player.storage.yihun2); - } - player.removeSkill('yihun2'); - delete player.storage.yihun2; - }, - mod:{ + }, + sheng2:{ + trigger:{player:'phaseBegin'}, + forced:true, + popup:false, + content:function(){ + player.removeSkill('sheng2'); + }, + mod:{ + targetEnabled:function(card,player,target){ + if(player!=target) return false; + } + } + }, + yihun:{ + trigger:{player:'phaseEnd'}, + direct:true, + filter:function(event,player){ + return player.countCards('he',{color:'black'})>0&&!player.hasSkill('yihun2'); + }, + content:function(){ + 'step 0' + var next=player.chooseCardTarget({ + prompt:get.prompt('yihun'), + position:'he', + filterCard:function(card,player){ + return get.color(card)=='black'&&lib.filter.cardDiscardable(card,player); + }, + ai1:function(card){ + return 7-get.value(card); + }, + ai2:function(target){ + var att=-get.attitude(player,target); + if(target==player.next){ + att/=10; + } + if(target==player.next.next){ + att/=2; + } + return att; + }, + filterTarget:function(card,player,target){ + return player!=target; + }, + }); + 'step 1' + if(result.bool){ + player.discard(result.cards); + player.logSkill('yihun',result.targets); + player.addSkill('yihun2'); + var target=result.targets[0] + player.storage.yihun2=target; + if(target&&(get.mode()!='guozhan')||!target.isUnseen()){ + player.markSkillCharacter('yihun2',target,'移魂','在'+get.translation(target)+'的下一准备阶段视为对其使用一张杀'); + } + } + }, + }, + yihun2:{ + trigger:{global:['phaseBegin','dieAfter']}, + forced:true, + filter:function(event,player){ + return event.player==player.storage.yihun2; + }, + content:function(){ + if(player.storage.yihun2.isIn()){ + player.useCard({name:'sha'},player.storage.yihun2); + } + player.removeSkill('yihun2'); + delete player.storage.yihun2; + }, + mod:{ targetEnabled:function(){ return false; }, @@ -2792,10 +2793,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return false; }, } - }, - huoyu:{ - enable:'phaseUse', - unique:true, + }, + huoyu:{ + enable:'phaseUse', + unique:true, mark:true, skillAnimation:true, animationColor:'fire', @@ -2804,388 +2805,388 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, filter:function(event,player){ if(player.storage.huoyu) return false; - if(player.countCards('he',{color:'red'})<2) return false; - return true; + if(player.countCards('he',{color:'red'})<2) return false; + return true; }, - filterTarget:function(card,player,target){ - return player.canUse('chiyuxi',target); - }, - filterCard:{color:'red'}, - selectCard:2, - position:'he', - check:function(card){ - return 7-get.value(card); - }, - selectTarget:-1, - multitarget:true, - multiline:true, - line:'fire', + filterTarget:function(card,player,target){ + return player.canUse('chiyuxi',target); + }, + filterCard:{color:'red'}, + selectCard:2, + position:'he', + check:function(card){ + return 7-get.value(card); + }, + selectTarget:-1, + multitarget:true, + multiline:true, + line:'fire', content:function(){ 'step 0' - targets.sort(lib.sort.seat); + targets.sort(lib.sort.seat); player.awakenSkill('huoyu'); player.storage.huoyu=true; - player.useCard({name:'chiyuxi'},targets).animate=false; + player.useCard({name:'chiyuxi'},targets).animate=false; 'step 1' - player.useCard({name:'chiyuxi'},targets).animate=false; + player.useCard({name:'chiyuxi'},targets).animate=false; }, ai:{ order:5, result:{ target:function(player,target){ - if(player.hasUnknown()) return 0; - return get.effect(target,{name:'chiyuxi'},player,target); - } + if(player.hasUnknown()) return 0; + return get.effect(target,{name:'chiyuxi'},player,target); + } }, }, intro:{ content:'limited' } - }, - feidan:{ + }, + feidan:{ trigger:{source:'damageAfter'}, direct:true, filter:function(event,player){ if(player.countCards('he')==0) return false; if(!event.card) return false; if(event.card.name!='sha') return false; - return game.hasPlayer(function(current){ - return current!=event.player&&get.distance(event.player,current)<=1 - }); + return game.hasPlayer(function(current){ + return current!=event.player&&get.distance(event.player,current)<=1 + }); }, content:function(){ "step 0" - var eff=0; - var targets=game.filterPlayer(function(current){ - if(current!=trigger.player&&get.distance(trigger.player,current)<=1){ - eff+=get.damageEffect(current,player,player); - return true; - } - }); - event.targets=targets; - player.chooseToDiscard(get.prompt('feidan',targets)).set('ai',function(card){ - if(eff>0) return 7-get.value(card); - return 0; - }).set('logSkill',['feidan',targets]); + var eff=0; + var targets=game.filterPlayer(function(current){ + if(current!=trigger.player&&get.distance(trigger.player,current)<=1){ + eff+=get.damageEffect(current,player,player); + return true; + } + }); + event.targets=targets; + player.chooseToDiscard(get.prompt('feidan',targets)).set('ai',function(card){ + if(eff>0) return 7-get.value(card); + return 0; + }).set('logSkill',['feidan',targets]); "step 1" if(result.bool){ event.targets.sort(lib.sort.seat); } - else{ - event.finish(); - } - "step 2" - if(event.targets.length){ - event.targets.shift().damage(); - event.redo(); - } + else{ + event.finish(); + } + "step 2" + if(event.targets.length){ + event.targets.shift().damage(); + event.redo(); + } }, - mod:{ - targetInRange:function(card,player,target){ - if(card.name=='sha'){ - if(get.distance(player,target)<=1) return false; - return true; - } - } - } + mod:{ + targetInRange:function(card,player,target){ + if(card.name=='sha'){ + if(get.distance(player,target)<=1) return false; + return true; + } + } + } }, - yuedong:{ - trigger:{player:'phaseUseEnd'}, - direct:true, - content:function(){ - 'step 0' - var num=1+player.storage.yuedong_num; - player.chooseTarget(get.prompt('yuedong'),[1,num],function(card,player,target){ - if(player.storage.yuedong_recover){ - return target.hp1) return att/5; - if(num2==1){ - if(num>1) return att/3; - return att/4; - } - return att; - } - return att; - }); - 'step 1' - if(result.bool){ - player.logSkill('yuedong',result.targets); - var eff=1+player.storage.yuedong_eff; - if(player.storage.yuedong_recover){ - result.targets.sort(lib.sort.seat); - for(var i=0;i1&&!player.storage.yuedong_recover; - }, - check:function(card){ - return 6-get.value(card); - }, - content:function(){ - player.storage.yuedong_recover=true; - }, - ai:{ - order:10.2, - result:{ - player:function(player){ - var num1=0,num2=0,players=game.filterPlayer(); - for(var i=0;i0){ - num2++; - if(players[i].hp<=2&&players[i].maxHp>2){ - num1++; - if(players[i].hp==1){ - num1++; - } - } - } - } - if(num1>=3){ - return 1; - } - return 0; - } - } - } - }, - kuoyin:{ - enable:'phaseUse', - filterCard:true, - selectCard:function(){ - if(get.is.altered('kuoyin')) return 1; - if(_status.event.player.storage.yuedong_eff) return 1; - if(_status.event.player.storage.yuedong_num) return 2; - return [1,2]; - }, - position:'he', - alter:true, - filter:function(event,player){ - if(get.is.altered('kuoyin')&&player.storage.yuedong_num) return false; - if(player.storage.yuedong_eff&&player.storage.yuedong_num) return false; - return player.countCards('he')>0; - }, - check:function(card){ - var player=_status.event.player; - var num1=0,num2=0,players=game.filterPlayer(); - for(var i=0;i0){ - num2++; - if(players[i].hp<=2&&players[i].maxHp>2){ - num1++; - } - } - } - if(player.storage.yuedong_recover){ - if(num1>1&&!player.storage.yuedong_num){ - if(ui.selected.cards.length) return 0; - return 7-get.value(card); - } - return 0; - } - else{ - if(num2>1&&!player.storage.yuedong_num){ - if(ui.selected.cards.length) return 0; - return 7-get.value(card); - } - if(num2>2){ - return 6-get.value(card); - } - return 5-get.value(card); - } - }, - content:function(){ - if(cards.length==1){ - player.storage.yuedong_num+=2; - } - else{ - player.storage.yuedong_eff++; - } - }, - ai:{ - threaten:1.6, - order:10.1, - result:{ - player:1 - } - }, - group:'kuoyin2' - }, - kuoyin2:{ - trigger:{player:'phaseBegin'}, - silent:true, - content:function(){ - player.storage.yuedong_recover=false; - player.storage.yuedong_num=0; - player.storage.yuedong_eff=0; - } - }, - guangshu:{ - enable:'phaseUse', - check:function(card){ - var player=_status.event.player; - var suit=get.suit(card); - if(suit=='heart'){ - if(game.hasPlayer(function(current){ - return current.hp==1&&get.attitude(player,current)>0 - })); - } - else if(suit=='spade'){ - return 7-get.value(card); - } - return 6-get.value(card); - }, - filter:function(event,player){ - return player.countCards('he')>0; - }, - filterTarget:function(card,player,target){ - return !target.hasSkill('guangshu_heart')&& - !target.hasSkill('guangshu_spade')&& - !target.hasSkill('guangshu_club')&& - !target.hasSkill('guangshu_diamond'); - }, - filterCard:true, - position:'he', - content:function(){ - target.addSkill('guangshu_'+get.suit(cards[0])); - }, - ai:{ - expose:0.2, - threaten:1.6, - order:5, - result:{ - target:function(player,target){ - if(!ui.selected.cards.length) return 0; - switch(get.suit(ui.selected.cards[0])){ - case 'heart':if(target.hp==1) return 1;return 0.1; - case 'diamond':return 1+Math.sqrt(target.countCards('h')); - case 'club':return -target.countCards('h')-Math.sqrt(target.countCards('h','sha')); - case 'spade':return get.damageEffect(target,player,target,'thunder'); - default:return 0; - } - } - } - } - }, - guangshu_diamond:{ - mark:true, - intro:{ - content:'下次造成伤害时摸两张牌' - }, - trigger:{source:'damageEnd'}, - forced:true, - content:function(){ - player.draw(2); - player.removeSkill('guangshu_diamond'); - } - }, - guangshu_heart:{ - mark:true, - intro:{ - content:'下次受到伤害时回复一点体力' - }, - trigger:{player:'damageEnd'}, - priority:6, - forced:true, - content:function(){ - player.recover(); - player.removeSkill('guangshu_heart'); - } - }, - guangshu_club:{ - mark:true, - intro:{ - content:'无法使用杀直到下一回合结束' - }, - trigger:{player:'phaseEnd'}, - forced:true, - popup:false, - content:function(){ - player.removeSkill('guangshu_club'); - }, - mod:{ - cardEnabled:function(card){ - if(card.name=='sha') return false; - } - } - }, - guangshu_spade:{ - mark:true, - intro:{ - content:'下个结束阶段受到一点无来源的雷电伤害' - }, - trigger:{player:'phaseEnd'}, - forced:true, - content:function(){ - player.damage('thunder','nosource'); - player.removeSkill('guangshu_spade'); - } - }, - ziyu:{ - trigger:{global:'phaseEnd'}, - direct:true, - filter:function(event,player){ - if(get.is.altered('ziyu')) return game.phaseNumber%6==0; - return game.phaseNumber%4==0; - }, - alter:true, - content:function(){ - player.chooseDrawRecover(get.prompt('ziyu')).logSkill='ziyu'; - } - }, - shouhu:{ - mod:{ - cardEnabled:function(card){ - if(card.name=='sha') return false; - }, - }, - enable:'phaseUse', - filter:function(event,player){ - return player.countCards('h','sha')>0; - }, - filterTarget:function(card,player,target){ - return target.hp1) return att/5; + if(num2==1){ + if(num>1) return att/3; + return att/4; + } + return att; + } + return att; + }); + 'step 1' + if(result.bool){ + player.logSkill('yuedong',result.targets); + var eff=1+player.storage.yuedong_eff; + if(player.storage.yuedong_recover){ + result.targets.sort(lib.sort.seat); + for(var i=0;i1&&!player.storage.yuedong_recover; + }, + check:function(card){ + return 6-get.value(card); + }, + content:function(){ + player.storage.yuedong_recover=true; + }, + ai:{ + order:10.2, + result:{ + player:function(player){ + var num1=0,num2=0,players=game.filterPlayer(); + for(var i=0;i0){ + num2++; + if(players[i].hp<=2&&players[i].maxHp>2){ + num1++; + if(players[i].hp==1){ + num1++; + } + } + } + } + if(num1>=3){ + return 1; + } + return 0; + } + } + } + }, + kuoyin:{ + enable:'phaseUse', + filterCard:true, + selectCard:function(){ + if(get.is.altered('kuoyin')) return 1; + if(_status.event.player.storage.yuedong_eff) return 1; + if(_status.event.player.storage.yuedong_num) return 2; + return [1,2]; + }, + position:'he', + alter:true, + filter:function(event,player){ + if(get.is.altered('kuoyin')&&player.storage.yuedong_num) return false; + if(player.storage.yuedong_eff&&player.storage.yuedong_num) return false; + return player.countCards('he')>0; + }, + check:function(card){ + var player=_status.event.player; + var num1=0,num2=0,players=game.filterPlayer(); + for(var i=0;i0){ + num2++; + if(players[i].hp<=2&&players[i].maxHp>2){ + num1++; + } + } + } + if(player.storage.yuedong_recover){ + if(num1>1&&!player.storage.yuedong_num){ + if(ui.selected.cards.length) return 0; + return 7-get.value(card); + } + return 0; + } + else{ + if(num2>1&&!player.storage.yuedong_num){ + if(ui.selected.cards.length) return 0; + return 7-get.value(card); + } + if(num2>2){ + return 6-get.value(card); + } + return 5-get.value(card); + } + }, + content:function(){ + if(cards.length==1){ + player.storage.yuedong_num+=2; + } + else{ + player.storage.yuedong_eff++; + } + }, + ai:{ + threaten:1.6, + order:10.1, + result:{ + player:1 + } + }, + group:'kuoyin2' + }, + kuoyin2:{ + trigger:{player:'phaseBegin'}, + silent:true, + content:function(){ + player.storage.yuedong_recover=false; + player.storage.yuedong_num=0; + player.storage.yuedong_eff=0; + } + }, + guangshu:{ + enable:'phaseUse', + check:function(card){ + var player=_status.event.player; + var suit=get.suit(card); + if(suit=='heart'){ + if(game.hasPlayer(function(current){ + return current.hp==1&&get.attitude(player,current)>0 + })); + } + else if(suit=='spade'){ + return 7-get.value(card); + } + return 6-get.value(card); + }, + filter:function(event,player){ + return player.countCards('he')>0; + }, + filterTarget:function(card,player,target){ + return !target.hasSkill('guangshu_heart')&& + !target.hasSkill('guangshu_spade')&& + !target.hasSkill('guangshu_club')&& + !target.hasSkill('guangshu_diamond'); + }, + filterCard:true, + position:'he', + content:function(){ + target.addSkill('guangshu_'+get.suit(cards[0])); + }, + ai:{ + expose:0.2, + threaten:1.6, + order:5, + result:{ + target:function(player,target){ + if(!ui.selected.cards.length) return 0; + switch(get.suit(ui.selected.cards[0])){ + case 'heart':if(target.hp==1) return 1;return 0.1; + case 'diamond':return 1+Math.sqrt(target.countCards('h')); + case 'club':return -target.countCards('h')-Math.sqrt(target.countCards('h','sha')); + case 'spade':return get.damageEffect(target,player,target,'thunder'); + default:return 0; + } + } + } + } + }, + guangshu_diamond:{ + mark:true, + intro:{ + content:'下次造成伤害时摸两张牌' + }, + trigger:{source:'damageEnd'}, + forced:true, + content:function(){ + player.draw(2); + player.removeSkill('guangshu_diamond'); + } + }, + guangshu_heart:{ + mark:true, + intro:{ + content:'下次受到伤害时回复一点体力' + }, + trigger:{player:'damageEnd'}, + priority:6, + forced:true, + content:function(){ + player.recover(); + player.removeSkill('guangshu_heart'); + } + }, + guangshu_club:{ + mark:true, + intro:{ + content:'无法使用杀直到下一回合结束' + }, + trigger:{player:'phaseEnd'}, + forced:true, + popup:false, + content:function(){ + player.removeSkill('guangshu_club'); + }, + mod:{ + cardEnabled:function(card){ + if(card.name=='sha') return false; + } + } + }, + guangshu_spade:{ + mark:true, + intro:{ + content:'下个结束阶段受到一点无来源的雷电伤害' + }, + trigger:{player:'phaseEnd'}, + forced:true, + content:function(){ + player.damage('thunder','nosource'); + player.removeSkill('guangshu_spade'); + } + }, + ziyu:{ + trigger:{global:'phaseEnd'}, + direct:true, + filter:function(event,player){ + if(get.is.altered('ziyu')) return game.phaseNumber%6==0; + return game.phaseNumber%4==0; + }, + alter:true, + content:function(){ + player.chooseDrawRecover(get.prompt('ziyu')).logSkill='ziyu'; + } + }, + shouhu:{ + mod:{ + cardEnabled:function(card){ + if(card.name=='sha') return false; + }, + }, + enable:'phaseUse', + filter:function(event,player){ + return player.countCards('h','sha')>0; + }, + filterTarget:function(card,player,target){ + return target.hpplayer.hp&&player.countCards('h','lebu')==0)||get.distance(player,event.player)>1); }, - alter:true, - intro:{ - content:function(storage,player){ - var str=''; - if(player.storage.shanxian_h.length){ - if(player.isUnderControl(true)){ - str+='手牌区:'+get.translation(player.storage.shanxian_h); - } - else{ - str+='手牌区:'+(player.storage.shanxian_h.length)+'张牌'; - } - } - if(player.storage.shanxian_e.length){ - if(str.length) str+='、'; - if(player.isUnderControl(true)){ - str+='装备区:'+get.translation(player.storage.shanxian_e); - } - else{ - str+='装备区:'+(player.storage.shanxian_e.length)+'张牌'; - } - } - return str; - }, - mark:function(dialog,content,player){ - if(player.storage.shanxian_h.length){ - if(player.isUnderControl(true)){ - dialog.add('
手牌区
'); - dialog.addSmall(player.storage.shanxian_h); - } - else{ - dialog.add('
手牌区:'+player.storage.shanxian_h.length+'张牌
'); - } - } - if(player.storage.shanxian_e.length){ - if(player.isUnderControl(true)){ - dialog.add('
装备区
'); - dialog.addSmall(player.storage.shanxian_e); - } - else{ - dialog.add('
装备区:'+player.storage.shanxian_e.length+'张牌
'); - } - } + alter:true, + intro:{ + content:function(storage,player){ + var str=''; + if(player.storage.shanxian_h.length){ + if(player.isUnderControl(true)){ + str+='手牌区:'+get.translation(player.storage.shanxian_h); + } + else{ + str+='手牌区:'+(player.storage.shanxian_h.length)+'张牌'; + } + } + if(player.storage.shanxian_e.length){ + if(str.length) str+='、'; + if(player.isUnderControl(true)){ + str+='装备区:'+get.translation(player.storage.shanxian_e); + } + else{ + str+='装备区:'+(player.storage.shanxian_e.length)+'张牌'; + } + } + return str; }, - }, - logTarget:'player', + mark:function(dialog,content,player){ + if(player.storage.shanxian_h.length){ + if(player.isUnderControl(true)){ + dialog.add('
手牌区
'); + dialog.addSmall(player.storage.shanxian_h); + } + else{ + dialog.add('
手牌区:'+player.storage.shanxian_h.length+'张牌
'); + } + } + if(player.storage.shanxian_e.length){ + if(player.isUnderControl(true)){ + dialog.add('
装备区
'); + dialog.addSmall(player.storage.shanxian_e); + } + else{ + dialog.add('
装备区:'+player.storage.shanxian_e.length+'张牌
'); + } + } + }, + }, + logTarget:'player', content:function(){ - "step 0" - if(!get.is.altered('shanxian')){ - player.draw(false); - player.$draw(); - } + "step 0" + if(!get.is.altered('shanxian')){ + player.draw(false); + player.$draw(); + } "step 1" - player.storage.shanxian_h=player.getCards('h'); - player.storage.shanxian_e=player.getCards('e'); - player.storage.shanxian_n=1; - player.syncStorage('shanxian_e'); + player.storage.shanxian_h=player.getCards('h'); + player.storage.shanxian_e=player.getCards('e'); + player.storage.shanxian_n=1; + player.syncStorage('shanxian_e'); player.phase('shanxian'); player.storage.shanxian=trigger.player; - player.removeSkill('shanxian2'); - player.markSkill('shanxian'); + player.removeSkill('shanxian2'); + player.markSkill('shanxian'); "step 2" player.turnOver(true); delete player.storage.shanxian; @@ -3264,7 +3265,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, ai:{ - expose:0.1, + expose:0.1, effect:{ target:function(card){ if(card.name=='guiyoujie') return [0,0]; @@ -3272,272 +3273,272 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }, - shanxian2:{ - trigger:{player:['gainBegin','loseBegin']}, - forced:true, - popup:false, - content:function(){ - player.removeSkill('shanxian2'); - } - }, - shanhui:{ - unique:true, - trigger:{player:'damageEnd',source:'damageEnd'}, - filter:function(event,player){ - return player.storage.shanxian_h&&player.storage.shanxian_e&& - player.storage.shanxian_n>0&&!player.hasSkill('shanxian2'); - }, - check:function(event,player){ - var n1=player.countCards('he'); - var n2=player.storage.shanxian_h.length+player.storage.shanxian_e.length; - if(n1player.storage.shanxian_h.length+player.storage.shanxian_e.length){ - player.recover(); - } - player.storage.shanxian_n--; - if(player.storage.shanxian_n<=0){ - delete player.storage.shanxian_h; - delete player.storage.shanxian_e; - delete player.storage.shanxian_n; - player.unmarkSkill('shanxian'); - } - else{ - player.addSkill('shanxian2'); - } - } - } - }, - translate:{ - woliu:'涡流', - woliu2:'涡流', - woliu_info:'结束阶段,你可以选择至多两名角色,当你或目标中的任意一名角色成为杀的目标时,其余角色也将被追加为目标,直到你死亡或下一回合开始', - qianggu:'强固', - qianggu_info:'出牌阶段限一次,你可以弃置两张牌并获得两点护甲,若如此做,直到你的下个回合开始,其他角色对你使用杀时需要弃置一张基本牌,否则杀对你无效', - qianggu2:'强固', - qianggu2_bg:'固', - qianggu2_info:'其他角色对你使用杀时需要弃置一张基本牌,否则杀对你无效', - pingzhang:'屏障', - pingzhang_info:'每轮各限一次,当你受到伤害时,你可以弃置一张红桃牌令伤害-1;当一名其他角色受到伤害时,你可以弃置一张黑桃牌令伤害-1', - pingzhang_info_alter:'每轮各限一次,当你受到伤害时,你可以弃置一张红桃手牌令伤害-1;当一名其他角色受到伤害时,你可以弃置一张黑桃手牌令伤害-1', - liyong:'力涌', - liyong_info:'锁定技,你摸牌阶段摸牌数+X,X为你上一轮发动屏障的次数', - dianji:'电击', - dianji_info:'出牌阶段限一次,你可以将一张手牌当作惊雷闪对距离2以内的角色使用', - feitiao:'飞跳', - feitiao2:'飞跳', - feitiao_info:'出牌阶段开始时,你可以弃置一张牌并指定一名角色,你与该角色的距离视为1直到回合结束,然后该角色随机弃置一张牌', - bshaowei:'哨卫', - bshaowei_info:'结束阶段,你可以切换至哨卫模式。当处于此模式时,你的杀无视距离和防具、无数量限制且不可闪避;你不能闪避杀', - zhencha:'侦查', - zhencha_info:'结束阶段,你可以切换至侦查模式。当处于此模式时,每当你使用一张杀,你摸一张牌或回复一点体力', - liangou:'链钩', - liangou_info:'出牌阶段限一次,你可以弃置一张牌,指定一名其他角色并进行一次判定,若结果不为红桃,该角色与你距离为1且受到的首次伤害+1直到回合结束', - xiyang:'吸氧', - xiyang_info:'结束阶段,若你武将牌正面朝上,你可以翻面并回复两点体力', - qinru:'侵入', - qinru_info:'每当你使用卡牌指定惟一目标时,你可以令目标进行一次判定,若结果不为红桃,该角色的非锁定技失效直到其下一回合结束', - yinshen:'隐身', + shanxian2:{ + trigger:{player:['gainBegin','loseBegin']}, + forced:true, + popup:false, + content:function(){ + player.removeSkill('shanxian2'); + } + }, + shanhui:{ + unique:true, + trigger:{player:'damageEnd',source:'damageEnd'}, + filter:function(event,player){ + return player.storage.shanxian_h&&player.storage.shanxian_e&& + player.storage.shanxian_n>0&&!player.hasSkill('shanxian2'); + }, + check:function(event,player){ + var n1=player.countCards('he'); + var n2=player.storage.shanxian_h.length+player.storage.shanxian_e.length; + if(n1player.storage.shanxian_h.length+player.storage.shanxian_e.length){ + player.recover(); + } + player.storage.shanxian_n--; + if(player.storage.shanxian_n<=0){ + delete player.storage.shanxian_h; + delete player.storage.shanxian_e; + delete player.storage.shanxian_n; + player.unmarkSkill('shanxian'); + } + else{ + player.addSkill('shanxian2'); + } + } + } + }, + translate:{ + woliu:'涡流', + woliu2:'涡流', + woliu_info:'结束阶段,你可以选择至多两名角色,当你或目标中的任意一名角色成为杀的目标时,其余角色也将被追加为目标,直到你死亡或下一回合开始', + qianggu:'强固', + qianggu_info:'出牌阶段限一次,你可以弃置两张牌并获得两点护甲,若如此做,直到你的下个回合开始,其他角色对你使用杀时需要弃置一张基本牌,否则杀对你无效', + qianggu2:'强固', + qianggu2_bg:'固', + qianggu2_info:'其他角色对你使用杀时需要弃置一张基本牌,否则杀对你无效', + pingzhang:'屏障', + pingzhang_info:'每轮各限一次,当你受到伤害时,你可以弃置一张红桃牌令伤害-1;当一名其他角色受到伤害时,你可以弃置一张黑桃牌令伤害-1', + pingzhang_info_alter:'每轮各限一次,当你受到伤害时,你可以弃置一张红桃手牌令伤害-1;当一名其他角色受到伤害时,你可以弃置一张黑桃手牌令伤害-1', + liyong:'力涌', + liyong_info:'锁定技,你摸牌阶段摸牌数+X,X为你上一轮发动屏障的次数', + dianji:'电击', + dianji_info:'出牌阶段限一次,你可以将一张手牌当作惊雷闪对距离2以内的角色使用', + feitiao:'飞跳', + feitiao2:'飞跳', + feitiao_info:'出牌阶段开始时,你可以弃置一张牌并指定一名角色,你与该角色的距离视为1直到回合结束,然后该角色随机弃置一张牌', + bshaowei:'哨卫', + bshaowei_info:'结束阶段,你可以切换至哨卫模式。当处于此模式时,你的杀无视距离和防具、无数量限制且不可闪避;你不能闪避杀', + zhencha:'侦查', + zhencha_info:'结束阶段,你可以切换至侦查模式。当处于此模式时,每当你使用一张杀,你摸一张牌或回复一点体力', + liangou:'链钩', + liangou_info:'出牌阶段限一次,你可以弃置一张牌,指定一名其他角色并进行一次判定,若结果不为红桃,该角色与你距离为1且受到的首次伤害+1直到回合结束', + xiyang:'吸氧', + xiyang_info:'结束阶段,若你武将牌正面朝上,你可以翻面并回复两点体力', + qinru:'侵入', + qinru_info:'每当你使用卡牌指定惟一目标时,你可以令目标进行一次判定,若结果不为红桃,该角色的非锁定技失效直到其下一回合结束', + yinshen:'隐身', yinshen_info:'结束阶段,你可以弃置一张装备牌并获得潜行直到下一回合开始', - maichong:'脉冲', - maichong_info:'准备阶段,你可以令最近两名被你侵入的角色各随机弃置一张牌,若弃置的牌中有非基本牌,你摸一张牌', - maichong_info_alter:'准备阶段,你可以令最近两名被你侵入的角色各随机弃置一张牌', - lichang:'力场', - lichang2:'力场', - lichang_info:'结束阶段,你可以弃置一张红色牌,若如此做,你可以在下个准备阶段令一名距离1以内的角色回复一点体力或摸两张牌', - mengji:'猛击', - mengji_info:'锁定技,若你已发动重盾,当你没有护甲时,你的杀造成的伤害+1', - zhongdun:'重盾', - zhongdun_info:'游戏开始时,你获得8点护甲;出牌阶段限一次,你可以弃置一张牌并将一点护甲分给一名没有护甲的其他角色', - zhongdun_info_alter:'游戏开始时,你获得6点护甲;出牌阶段限一次,你可以弃置一张牌并将一点护甲分给一名没有护甲的其他角色', - paotai:'炮台', - paotai2:'炮台', - paotai_info:'出牌阶段,你可以弃置一张杀布置或升级一个炮台(最高3级);结束阶段,炮台有一定机率对一名随机敌人造成一点火焰伤害;每当你受到一点伤害,炮台降低一级', - maoding:'铆钉', - maoding2:'铆钉', - maoding_info:'每当你造成或受到一次伤害,你可以获得一个零件;出牌阶段,你可以弃置两张零件牌令一名没有护甲的角色获得一点护甲', - maoding_info_alter:'每当你造成一次伤害,你可以获得一个零件;出牌阶段,你可以弃置两张零件牌令一名没有护甲的角色获得一点护甲', - bfengshi:'风矢', - bfengshi2:'风矢', - bfengshi_info:'锁定技,在一合内每当你使用一张牌,你的攻击范围+1;你的首张杀增加20%的概率强制命中;你的首张杀造成伤害后增加20%的概率令伤害+1', - bfengshi_info_alter:'锁定技,在一合内每当你使用一张牌,你的攻击范围+1;你的首张杀增加15%的概率强制命中;你的首张杀造成伤害后增加15%的概率令伤害+1', - yinbo:'音波', - yinbo_info:'出牌阶段限一次,你可以弃置一张黑桃牌,然后随机弃置三名敌人各一张牌', - liudan:'榴弹', - liudan_info:'每当你使用一张杀,你可以令所有不是此杀目标的其他角色有50%概率成为此杀的额外目标', - shoujia:'兽夹', - shoujia2:'兽夹', - shoujia3:'兽夹', - shoujia_info:'出牌阶段限一次,你可以将一张牌背面朝上置于一名其他角色的武将牌上,当该角色使用一张与此牌花色相同的牌指定其他角色为目标时,移去此牌,该角色将武将牌翻至背面;当你受到伤害时,移去此牌', - shihuo:'嗜火', - shihuo_info:'锁定技,每当一名角色受到火焰伤害,你摸一张牌', - shanguang:'闪光', - shanguang_info:'出牌阶段限一次,你可以弃置一张方片牌令攻击范围内的一名其他角色本回合内不能使用或打出卡牌', - tiandan:'填弹', - tiandan_info:'摸牌阶段开始时,你可以跳过出牌和弃牌阶段,然后获得若干张杀直到你的手牌数等于你的体值(最多为5)', - shenqiang:'神枪', - shenqiang_info:'锁定技,每当你在出牌阶段使用杀造成伤害,本阶段内出杀次数上限+1', - mianzhen:'眠针', - mianzhen2:'眠针', - mianzhen_info:'出牌阶段限一次,你可以弃置一张牌并令一名其他角色打出一张闪,否则该角色不能使用或打出卡牌直到其受到伤害或下一回合结束', - aqianghua:'强化', - aqianghua2:'强化', - aqianghua_info:'出牌阶段限一次,你可以将你的全部手牌(至少一张)交给一名其他角色,该角色获得一点护甲且下一次造成的伤害+1', - aqianghua_info_alter:'出牌阶段限一次,你可以将你的全部手牌(至少一张)交给一名其他角色,该角色下一次造成的伤害+1', - zhiyuan:'支援', - zhiyuan_info:'每当你即将造成伤害,你可以防止此伤害,改为令目标回复等量的体力', - juji:'狙击', - juji2:'狙击', - juji3:'狙击', - juji_info:'出牌阶段限一次,你可以弃置任意张花色不同的牌并指定一名有手牌的其他角色,若该角色的手牌中含有与你弃置的牌花色相同的牌,则本回合内你与其距离为1且该角色不能闪避你的杀', - duwen:'毒吻', - duwen2:'毒吻', - duwen_info:'锁定技,当你造成伤害时,若你的手牌数与受伤害角色相等,此伤害+1', - zhuagou:'抓钩', - zhuagou_info:'出牌阶段限一次,你可以弃置一张手牌并将你的座位移到任意位置', - dulei:'诡雷', - dulei2:'诡雷', - dulei_info:'出牌阶段,若你武将牌上没有牌,你可以将一张牌背面朝上置于你的武将牌上,当一名角色使用与该牌花色相同的牌指定你为目标时,你展示并移去此牌,然后该角色失去一点体力并随机弃置一张牌', - shuangqiang:'霜枪', - shuangqiang_info:'每当你对一名未翻面的角色造成伤害,你可以令伤害-1,然后令受伤害角色翻面', - baoxue:'暴雪', - baoxue_info:'限定技,出牌阶段,你可以展示并弃置你的所有黑色牌,然后令至多X名其他角色随机弃置一张牌并将武将牌翻至背面,X为你的弃牌数', - baoxue_info_alter:'限定技,出牌阶段,你可以展示并弃置你的所有黑色牌,并选择等量其他角色将武将牌翻至背面,结算后你将武将牌翻至背面', - bingqiang:'冰墙', - bingqiang2:'冰墙', - bingqiang2_bg:'墙', - bingqiang3:'冰墙', - bingqiang3_bg:'墙', - bingqiang4:'冰墙', - bingqiang4_bg:'墙', - bingqiang5:'冰墙', - bingqiang5_bg:'障', - bingqiang_info:'出牌阶段,你可以弃置X张红色牌令一名角色和其相邻角色的防御离+X,或弃置X张黑色牌令一名角色和其相邻角色的进攻离-X,效果持续到你的下个回合开始', - jidong:'急冻', - jidong_info:'在一名角色的结束阶段,若你的体力值为1,你可以翻面并回复两点体力,在你的武将牌翻至正面前,你防止所有伤害,也不能成为其他角色卡牌的目标', - jidong_info_alter:'在一名角色的结束阶段,若你的体力值为1,你可以翻面并回复两点体力', - jijia:'机甲', - jijia_info:'锁定技,游戏开始时,你获得一个体力为4的机甲;你的手牌上限为你和机甲的体力之和;你受到的伤害由机甲承担', - zihui:'自毁', - zihui_info:'出牌阶段,你可以令距离2以内的所有其他角色选择一项:弃置数量等同你机甲体力值的牌,或受到2点火焰伤害,并在结算完毕后摧毁你的机甲', - zihui_info_alter:'出牌阶段,你可以令距离2以内的所有其他角色选择一项:1. 弃置数量等同你机甲体力值的牌(不足则全弃,至少弃1张);2. 或受到2点火焰伤害,并在结算完毕后摧毁你的机甲', - tuijin:'推进', - tuijin2:'推进', - tuijin_info:'出牌阶段限一次,若你有机甲,你可以指定一名角色,本回合内视为与其距离为1', - chongzhuang:'重装', - chongzhuang_info:'在你失去机甲后,当你累计造成了4点伤害时,你重新获得机甲', - shouge:'收割', - shouge_info:'每当你杀死一名角色,你可以获得一张治疗波', - tuji:'突击', - tuji_info:'锁定技,在你的回合内,每当你使用一张牌,你的进攻距离+1', - mujing:'目镜', - mujing2:'目镜', - mujing_info:'你可以将一张黑色牌当作杀使用或打出;当你的杀被闪避后,此杀不计入出杀次数', - mujing_old_info:'每当你对攻击范围不含你的角色使用一张牌,你可以弃置目标一张牌;若你的手牌数不多于目标,你摸一张牌', - feiren:'飞刃', - feiren2:'飞刃', - feiren_info:'你的杀无视距离;你的黑桃杀造成的伤害+1,梅花杀可以额外指定一个目标', - feiren_info_alter:'你的杀无视距离;你的梅花杀可以额外指定一个目标', - zhanlong:'斩龙', - zhanlong_info:'限定技,准备阶段,若你体力值为1,你可以弃置所有牌(至少一张),然后将三张杀置入你的手牌,若如此做,你本回合使用杀无次数限制', - xie:'谐', - xie2:'谐', - xie_info:'出牌阶段,你可以弃置一张红桃手牌并指定一名角色,该角色自其下一回合开始每隔六回合回复一点体力,直到你死亡。同一时间只能对一人发动', - luan:'乱', - luan2:'乱', - luan_old_info:'出牌阶段,你可以弃置一张黑桃手牌并指定一名角色,该角色自其下一回合开始每隔六回合失去一点体力,直到你死亡。同一时间只能对一人发动', - luan_info:'出牌阶段,你可以弃置一张黑桃手牌并指定一名角色,该角色受到伤害后流失一点体力,直到你死亡或其首次进入濒死状态。同一时间只能对一人发动', - sheng:'圣', - sheng_info:'限定技,出牌阶段,你可以将你的武将牌翻面,然后令任意名角色回复一点体力,若如此做,你不能成为其他角色的卡牌目标直到下一回合开始', - xiandan:'霰弹', - xiandan_info:'每当你使用一张杀,你可以弃置一张红色牌令此杀不可闪避,或弃置一张黑色牌令此杀伤害+1', - yihun:'移魂', - yihun_info:'结束阶段,你可以弃置一张黑色牌并指定一名其他角色,你在该角色下一准备阶段视为对其使用一张杀;在此之前,你不能使用卡牌,也不能成为卡牌的目标', - feidan:'飞弹', - feidan_info:'你的杀只能对距离1以外的角色使用;每当你使用杀造成伤害后,你可以弃置一张牌对距离目标1以内的其他角色各造成一点伤害', - huoyu:'火雨', - huoyu_info:'限定技,出牌阶段,你可以弃置两张红色牌,视为使用两张炽羽袭', - yuedong:'乐动', - yuedong_info:'出牌阶段结束时,你可以令一名角色摸一张牌', - kuoyin:'扩音', - kuoyin_info:'出牌阶段,你可以弃置一张牌令本回合乐动的目标数改为3,或弃置两张牌令本回合乐动的摸牌量改为2', - kuoyin_info_alter:'出牌阶段,你可以弃置一张牌令本回合乐动的目标数改为3', - huhuan:'互换', - huhuan_info:'出牌阶段,你可以弃置两张牌令本回合乐动的摸牌效果改为回复等量体力', - guangshu:'光枢', - guangshu_heart:'光盾', - guangshu_spade:'光塔', - guangshu_club:'光井', - guangshu_diamond:'光流', - guangshu_info:'出牌阶段,你可以弃置一张牌,并指定一名角色,根据弃置牌的花色执行如下效果:♥该角色下次受到伤害时回复一点体力;♦︎该角色下次造成伤害时摸两张牌;♣该角色无法使用杀直到下一回合结束;♠该角色于下个结束阶段受到一点无来源的雷电伤害', - ziyu:'自愈', - ziyu_info:'在一名角色的结束阶段,你可以回复一点体力或摸一张牌,每隔四回合发动一次', - ziyu_info_alter:'在一名角色的结束阶段,你可以回复一点体力或摸一张牌,每隔六回合发动一次', - shouhu:'守护', - shouhu_info:'你不能使用杀;出牌阶段,你可以弃置一张杀令一名其他角色回复一点体力', - shanxian:'闪现', - shanxian_info:'在一名其他角色的回合开始前,若你的武将牌正面朝上,你可以摸一张牌并进行一个额外回合,并在回合结束后将武将牌翻至背面。若如此做,你对其使用卡牌无视距离直到回合结束。', - shanxian_info_alter:'在一名其他角色的回合开始前,若你的武将牌正面朝上,你可以进行一个额外回合,并在回合结束后将武将牌翻至背面。若如此做,你对其使用卡牌无视距离直到回合结束。', - shanhui:'闪回', - shanhui_info:'当你造成或受到伤害后,你可以将你的牌重置为上次发动闪现时的状态,若你的牌数因此而减少,你回复一点体力', - ow_liekong:'猎空', - ow_sishen:'死神', - ow_tianshi:'天使', - ow_falaozhiying:'法老之鹰', - ow_zhixuzhiguang:'秩序之光', - ow_luxiao:'卢西奥', - ow_shibing:'士兵76', - ow_yuanshi:'源氏', - ow_chanyata:'禅雅塔', - ow_dva:'DVA', - ow_mei:'小美', - ow_heibaihe:'黑百合', - ow_ana:'安娜', - ow_baolei:'堡垒', - ow_maikelei:'麦克雷', - ow_banzang:'半藏', - ow_kuangshu:'狂鼠', - ow_tuobiang:'托比昂', - ow_laiyinhate:'莱因哈特', - ow_luba:'路霸', - ow_wensidun:'温斯顿', - ow_zhaliya:'查莉娅', - ow_heiying:'黑影', - ow_orisa:'奥丽莎', - } + maichong:'脉冲', + maichong_info:'准备阶段,你可以令最近两名被你侵入的角色各随机弃置一张牌,若弃置的牌中有非基本牌,你摸一张牌', + maichong_info_alter:'准备阶段,你可以令最近两名被你侵入的角色各随机弃置一张牌', + lichang:'力场', + lichang2:'力场', + lichang_info:'结束阶段,你可以弃置一张红色牌,若如此做,你可以在下个准备阶段令一名距离1以内的角色回复一点体力或摸两张牌', + mengji:'猛击', + mengji_info:'锁定技,若你已发动重盾,当你没有护甲时,你的杀造成的伤害+1', + zhongdun:'重盾', + zhongdun_info:'游戏开始时,你获得8点护甲;出牌阶段限一次,你可以弃置一张牌并将一点护甲分给一名没有护甲的其他角色', + zhongdun_info_alter:'游戏开始时,你获得6点护甲;出牌阶段限一次,你可以弃置一张牌并将一点护甲分给一名没有护甲的其他角色', + paotai:'炮台', + paotai2:'炮台', + paotai_info:'出牌阶段,你可以弃置一张杀布置或升级一个炮台(最高3级);结束阶段,炮台有一定机率对一名随机敌人造成一点火焰伤害;每当你受到一点伤害,炮台降低一级', + maoding:'铆钉', + maoding2:'铆钉', + maoding_info:'每当你造成或受到一次伤害,你可以获得一个零件;出牌阶段,你可以弃置两张零件牌令一名没有护甲的角色获得一点护甲', + maoding_info_alter:'每当你造成一次伤害,你可以获得一个零件;出牌阶段,你可以弃置两张零件牌令一名没有护甲的角色获得一点护甲', + bfengshi:'风矢', + bfengshi2:'风矢', + bfengshi_info:'锁定技,在一合内每当你使用一张牌,你的攻击范围+1;你的首张杀增加20%的概率强制命中;你的首张杀造成伤害后增加20%的概率令伤害+1', + bfengshi_info_alter:'锁定技,在一合内每当你使用一张牌,你的攻击范围+1;你的首张杀增加15%的概率强制命中;你的首张杀造成伤害后增加15%的概率令伤害+1', + yinbo:'音波', + yinbo_info:'出牌阶段限一次,你可以弃置一张黑桃牌,然后随机弃置三名敌人各一张牌', + liudan:'榴弹', + liudan_info:'每当你使用一张杀,你可以令所有不是此杀目标的其他角色有50%概率成为此杀的额外目标', + shoujia:'兽夹', + shoujia2:'兽夹', + shoujia3:'兽夹', + shoujia_info:'出牌阶段限一次,你可以将一张牌背面朝上置于一名其他角色的武将牌上,当该角色使用一张与此牌花色相同的牌指定其他角色为目标时,移去此牌,该角色将武将牌翻至背面;当你受到伤害时,移去此牌', + shihuo:'嗜火', + shihuo_info:'锁定技,每当一名角色受到火焰伤害,你摸一张牌', + shanguang:'闪光', + shanguang_info:'出牌阶段限一次,你可以弃置一张方片牌令攻击范围内的一名其他角色本回合内不能使用或打出卡牌', + tiandan:'填弹', + tiandan_info:'摸牌阶段开始时,你可以跳过出牌和弃牌阶段,然后获得若干张杀直到你的手牌数等于你的体值(最多为5)', + shenqiang:'神枪', + shenqiang_info:'锁定技,每当你在出牌阶段使用杀造成伤害,本阶段内出杀次数上限+1', + mianzhen:'眠针', + mianzhen2:'眠针', + mianzhen_info:'出牌阶段限一次,你可以弃置一张牌并令一名其他角色打出一张闪,否则该角色不能使用或打出卡牌直到其受到伤害或下一回合结束', + aqianghua:'强化', + aqianghua2:'强化', + aqianghua_info:'出牌阶段限一次,你可以将你的全部手牌(至少一张)交给一名其他角色,该角色获得一点护甲且下一次造成的伤害+1', + aqianghua_info_alter:'出牌阶段限一次,你可以将你的全部手牌(至少一张)交给一名其他角色,该角色下一次造成的伤害+1', + zhiyuan:'支援', + zhiyuan_info:'每当你即将造成伤害,你可以防止此伤害,改为令目标回复等量的体力', + juji:'狙击', + juji2:'狙击', + juji3:'狙击', + juji_info:'出牌阶段限一次,你可以弃置任意张花色不同的牌并指定一名有手牌的其他角色,若该角色的手牌中含有与你弃置的牌花色相同的牌,则本回合内你与其距离为1且该角色不能闪避你的杀', + duwen:'毒吻', + duwen2:'毒吻', + duwen_info:'锁定技,当你造成伤害时,若你的手牌数与受伤害角色相等,此伤害+1', + zhuagou:'抓钩', + zhuagou_info:'出牌阶段限一次,你可以弃置一张手牌并将你的座位移到任意位置', + dulei:'诡雷', + dulei2:'诡雷', + dulei_info:'出牌阶段,若你武将牌上没有牌,你可以将一张牌背面朝上置于你的武将牌上,当一名角色使用与该牌花色相同的牌指定你为目标时,你展示并移去此牌,然后该角色失去一点体力并随机弃置一张牌', + shuangqiang:'霜枪', + shuangqiang_info:'每当你对一名未翻面的角色造成伤害,你可以令伤害-1,然后令受伤害角色翻面', + baoxue:'暴雪', + baoxue_info:'限定技,出牌阶段,你可以展示并弃置你的所有黑色牌,然后令至多X名其他角色随机弃置一张牌并将武将牌翻至背面,X为你的弃牌数', + baoxue_info_alter:'限定技,出牌阶段,你可以展示并弃置你的所有黑色牌,并选择等量其他角色将武将牌翻至背面,结算后你将武将牌翻至背面', + bingqiang:'冰墙', + bingqiang2:'冰墙', + bingqiang2_bg:'墙', + bingqiang3:'冰墙', + bingqiang3_bg:'墙', + bingqiang4:'冰墙', + bingqiang4_bg:'墙', + bingqiang5:'冰墙', + bingqiang5_bg:'障', + bingqiang_info:'出牌阶段,你可以弃置X张红色牌令一名角色和其相邻角色的防御离+X,或弃置X张黑色牌令一名角色和其相邻角色的进攻离-X,效果持续到你的下个回合开始', + jidong:'急冻', + jidong_info:'在一名角色的结束阶段,若你的体力值为1,你可以翻面并回复两点体力,在你的武将牌翻至正面前,你防止所有伤害,也不能成为其他角色卡牌的目标', + jidong_info_alter:'在一名角色的结束阶段,若你的体力值为1,你可以翻面并回复两点体力', + jijia:'机甲', + jijia_info:'锁定技,游戏开始时,你获得一个体力为4的机甲;你的手牌上限为你和机甲的体力之和;你受到的伤害由机甲承担', + zihui:'自毁', + zihui_info:'出牌阶段,你可以令距离2以内的所有其他角色选择一项:弃置数量等同你机甲体力值的牌,或受到2点火焰伤害,并在结算完毕后摧毁你的机甲', + zihui_info_alter:'出牌阶段,你可以令距离2以内的所有其他角色选择一项:1. 弃置数量等同你机甲体力值的牌(不足则全弃,至少弃1张);2. 或受到2点火焰伤害,并在结算完毕后摧毁你的机甲', + tuijin:'推进', + tuijin2:'推进', + tuijin_info:'出牌阶段限一次,若你有机甲,你可以指定一名角色,本回合内视为与其距离为1', + chongzhuang:'重装', + chongzhuang_info:'在你失去机甲后,当你累计造成了4点伤害时,你重新获得机甲', + shouge:'收割', + shouge_info:'每当你杀死一名角色,你可以获得一张治疗波', + tuji:'突击', + tuji_info:'锁定技,在你的回合内,每当你使用一张牌,你的进攻距离+1', + mujing:'目镜', + mujing2:'目镜', + mujing_info:'你可以将一张黑色牌当作杀使用或打出;当你的杀被闪避后,此杀不计入出杀次数', + mujing_old_info:'每当你对攻击范围不含你的角色使用一张牌,你可以弃置目标一张牌;若你的手牌数不多于目标,你摸一张牌', + feiren:'飞刃', + feiren2:'飞刃', + feiren_info:'你的杀无视距离;你的黑桃杀造成的伤害+1,梅花杀可以额外指定一个目标', + feiren_info_alter:'你的杀无视距离;你的梅花杀可以额外指定一个目标', + zhanlong:'斩龙', + zhanlong_info:'限定技,准备阶段,若你体力值为1,你可以弃置所有牌(至少一张),然后将三张杀置入你的手牌,若如此做,你本回合使用杀无次数限制', + xie:'谐', + xie2:'谐', + xie_info:'出牌阶段,你可以弃置一张红桃手牌并指定一名角色,该角色自其下一回合开始每隔六回合回复一点体力,直到你死亡。同一时间只能对一人发动', + luan:'乱', + luan2:'乱', + luan_old_info:'出牌阶段,你可以弃置一张黑桃手牌并指定一名角色,该角色自其下一回合开始每隔六回合失去一点体力,直到你死亡。同一时间只能对一人发动', + luan_info:'出牌阶段,你可以弃置一张黑桃手牌并指定一名角色,该角色受到伤害后流失一点体力,直到你死亡或其首次进入濒死状态。同一时间只能对一人发动', + sheng:'圣', + sheng_info:'限定技,出牌阶段,你可以将你的武将牌翻面,然后令任意名角色回复一点体力,若如此做,你不能成为其他角色的卡牌目标直到下一回合开始', + xiandan:'霰弹', + xiandan_info:'每当你使用一张杀,你可以弃置一张红色牌令此杀不可闪避,或弃置一张黑色牌令此杀伤害+1', + yihun:'移魂', + yihun_info:'结束阶段,你可以弃置一张黑色牌并指定一名其他角色,你在该角色下一准备阶段视为对其使用一张杀;在此之前,你不能使用卡牌,也不能成为卡牌的目标', + feidan:'飞弹', + feidan_info:'你的杀只能对距离1以外的角色使用;每当你使用杀造成伤害后,你可以弃置一张牌对距离目标1以内的其他角色各造成一点伤害', + huoyu:'火雨', + huoyu_info:'限定技,出牌阶段,你可以弃置两张红色牌,视为使用两张炽羽袭', + yuedong:'乐动', + yuedong_info:'出牌阶段结束时,你可以令一名角色摸一张牌', + kuoyin:'扩音', + kuoyin_info:'出牌阶段,你可以弃置一张牌令本回合乐动的目标数改为3,或弃置两张牌令本回合乐动的摸牌量改为2', + kuoyin_info_alter:'出牌阶段,你可以弃置一张牌令本回合乐动的目标数改为3', + huhuan:'互换', + huhuan_info:'出牌阶段,你可以弃置两张牌令本回合乐动的摸牌效果改为回复等量体力', + guangshu:'光枢', + guangshu_heart:'光盾', + guangshu_spade:'光塔', + guangshu_club:'光井', + guangshu_diamond:'光流', + guangshu_info:'出牌阶段,你可以弃置一张牌,并指定一名角色,根据弃置牌的花色执行如下效果:♥该角色下次受到伤害时回复一点体力;♦︎该角色下次造成伤害时摸两张牌;♣该角色无法使用杀直到下一回合结束;♠该角色于下个结束阶段受到一点无来源的雷电伤害', + ziyu:'自愈', + ziyu_info:'在一名角色的结束阶段,你可以回复一点体力或摸一张牌,每隔四回合发动一次', + ziyu_info_alter:'在一名角色的结束阶段,你可以回复一点体力或摸一张牌,每隔六回合发动一次', + shouhu:'守护', + shouhu_info:'你不能使用杀;出牌阶段,你可以弃置一张杀令一名其他角色回复一点体力', + shanxian:'闪现', + shanxian_info:'在一名其他角色的回合开始前,若你的武将牌正面朝上,你可以摸一张牌并进行一个额外回合,并在回合结束后将武将牌翻至背面。若如此做,你对其使用卡牌无视距离直到回合结束。', + shanxian_info_alter:'在一名其他角色的回合开始前,若你的武将牌正面朝上,你可以进行一个额外回合,并在回合结束后将武将牌翻至背面。若如此做,你对其使用卡牌无视距离直到回合结束。', + shanhui:'闪回', + shanhui_info:'当你造成或受到伤害后,你可以将你的牌重置为上次发动闪现时的状态,若你的牌数因此而减少,你回复一点体力', + ow_liekong:'猎空', + ow_sishen:'死神', + ow_tianshi:'天使', + ow_falaozhiying:'法老之鹰', + ow_zhixuzhiguang:'秩序之光', + ow_luxiao:'卢西奥', + ow_shibing:'士兵76', + ow_yuanshi:'源氏', + ow_chanyata:'禅雅塔', + ow_dva:'DVA', + ow_mei:'小美', + ow_heibaihe:'黑百合', + ow_ana:'安娜', + ow_baolei:'堡垒', + ow_maikelei:'麦克雷', + ow_banzang:'半藏', + ow_kuangshu:'狂鼠', + ow_tuobiang:'托比昂', + ow_laiyinhate:'莱因哈特', + ow_luba:'路霸', + ow_wensidun:'温斯顿', + ow_zhaliya:'查莉娅', + ow_heiying:'黑影', + ow_orisa:'奥丽莎', + } }; }); diff --git a/character/rank.js b/character/rank.js index 7e87c6858..4969e0a91 100644 --- a/character/rank.js +++ b/character/rank.js @@ -1,638 +1,638 @@ window.noname_character_rank={ - s:[ - 'swd_muyun', - 'swd_zhaoyun', - 'swd_septem', - 'hs_sthrall', - 'hs_malorne', - 'swd_duguningke', - 'swd_guyue', - 'swd_murongshi', - 'swd_cheyun', - 'swd_tuobayuer', - 'swd_yuxiaoxue', - 'gjqt_bailitusu', - 'swd_huanglei', - 'hs_medivh', - 'pal_yuejinzhao', - ], - ap:[ - 'ow_zhaliya', - 'pal_liumengli', - 'pal_yuntianhe', - 'pal_lixiaoyao', - 'swd_huanyuanzhi', - 'pal_xiahoujinxuan', - 'swd_huiyan', - 'ow_dva', - 'ow_mei', - 'ow_yuanshi', - 'swd_yuwentuo', - 'pal_xuanxiao', - 'swd_jipeng', - 'lusu', - 'old_yuanshu', - 'xunyu', - 'pal_murongziying', - 'swd_jiliang', - 'swd_shuijing', - 'shen_caocao', - 'hs_neptulon', - 'gjqt_aruan', - 'swd_muyue', - 'swd_qi', - 'zhangliao', - 'pal_zixuan', - 'swd_tuwei', - 'hs_xsylvanas', - 'hs_malygos', - 'hs_alakir', - 'ow_luxiao', - 'gjqt_ouyangshaogong', - 'ow_liekong', - 'ow_ana', - 'hs_aya', - 'hs_tyrande', - 'swd_shuwaner', - 'pal_yueqi', - ], - a:[ - 'gw_shasixiwusi', - 'gw_kairuisi', - 'gw_kanbi', - 'gw_nvyemo', - 'gw_linjing', - 'lifeng', - 'gw_meizi', - 'gw_aimin', - 'gw_puxila', - 'gw_bulanwang', - 'gw_kaxier', - 'gw_zhangyujushou', - 'xushi', - 'wuxian', - 'pal_tangyurou', - 'gw_luobo', - 'gw_aigeleisi', - 'gw_zhuoertan', - 'gw_gaier', - 'pal_mingxiu', - 'pal_luozhaoyan', - 'pal_xia', - 'hs_yashaji', - 'hs_pengpeng', - 'hs_manyututeng', - 'hs_amala', - 'hs_kaituozhe', - 'hs_yinggencao', - 'hs_laila', - 'swd_kendi', - 'hs_enzoth', - 'hs_sapphiron', - 'gw_airuiting', - 'gw_dagong', - 'gw_fulisi', - 'gw_xili', - 'gw_yenaifa', - 'gw_yioufeisi', - 'gw_jieluote', - 'gw_telisi', - 'gw_luoqi', - 'gw_enxier', - 'gw_aisinie', - 'gw_falanxisika', - 'gw_haluo', - 'hs_khadgar', - 'swd_sikongyu', - 'swd_huzhongxian', - 'swd_anka', - 'swd_kangnalishi', - 'swd_xuanyuanjianxian', - 'liuxie', - 'shen_lvbu', - 'liufeng', - 'zhangxingcai', - 'shen_lvmeng', - 'swd_xiarou', - 'hs_morgl', - 'diaochan', - 'diy_zaozhirenjun', - 'ow_heiying', - 'pal_longkui', - 'pal_nangonghuang', - 'pal_xingxuan', - 'hs_walian', - 'hs_laxiao', - 'hs_fandral', - 'sundeng', - 'hs_xialikeer', - 'hs_sainaliusi', - 'hs_lrhonin', - 'hs_ysera', - 'yxs_diaochan', - 'liuzan', - 'lingcao', - 'hs_trueheart', - 'swd_wangsiyue', - 'swd_lanyin', - 'swd_hengai', - 're_huangyueying', - 'hs_bchillmaw', - 'shen_zhugeliang', - 'gjqt_fanglansheng', - 'hs_zhishigushu', - 'hs_zhanzhenggushu', - 'gjqt_xiayize', - 'hs_yngvar', - 're_huanggai', - 'hs_antonidas', - 'chenlin', - 'swd_chenjingchou', - 'hs_anduin', - 'yxs_yangyuhuan', - 'caoang', - 'swd_shanxiaoxiao', - 'gjqt_fengqingxue', - 'swd_ziqiao', - 'pal_jingtian', - 'yxs_wuzetian', - 'yxs_caocao', - 'bulianshi', - 'sp_pangtong', - 'liubiao', - 'zhongyao', - 'liuchen', - 'yxs_guiguzi', - 'hs_shanlingjuren', - 'hs_bannabusi', - 'zhangrang', - 'hs_lafamu', - 'ow_chanyata', - 'ow_tianshi', - 'ow_maikelei', - 'ow_tuobiang', - 'ow_banzang', - 'ow_laiyinhate', - 'wanglang', - 'huangzhong', - 'pal_wangpengxu', - 'yxs_luobinhan', - 'hs_alleria', - 're_lusu', - 'hs_fuding', - 'wangji', - 're_luxun', - 'pal_muchanglan', - 'yxs_luzhishen', - 'hs_jaina', - 're_lidian', - 'hs_kalimosi', - 'hs_zhihuanhua', - 'xizhicai', - ], - am:[ - 'gw_oudimu', - 'dongyun', - 'gw_xigedelifa', - 'gw_laomaotou', - 'gw_haizhiyezhu', - 'gw_nitelila', - 'gw_bierna', - 'gw_fuertaisite', - 'gw_hengsaite', - 'gw_kuite', - 'sunqian', - 'pal_anu', - 'gw_mieren', - 'gw_sanhanya', - 'pal_xianqing', - 'gw_shanhu', - 'gw_huoge', - 'taoqian', - 'pal_jushifang', - 'hs_fachaotuteng', - 'huangfusong', - 'hs_shizugui', - 'hs_shuiwenxuejia', - 'hs_pyros', - 'swd_xiyan', - 'swd_xiaohuanglong', - 'ow_orisa', - 'ow_baolei', - 'ow_wensidun', - 'gw_gaier', - 'gw_laduoweide', - 'gw_kaerweite', - 'yxs_napolun', - 'hs_aedwin', - 'hs_wujiyuansu', - 'ow_kuangshu', - 'old_wangyi', - 'hs_shaku', - 're_zhangliao', - 'zhoutai', - 'zhugejin', - 'hs_totemic', - 'swd_duanmeng', - 'pal_wenhui', - 'gjqt_xunfang', - 'ow_shibing', - 'hs_blingtron', - 'hs_kcthun', - 'ow_zhixuzhiguang', - 'ow_falaozhiying', - 'hs_bolvar', - 'sp_caiwenji', - 'yxs_yingzheng', - 'caorui', - 'manchong', - 'yxs_xiangyu', - 'swd_linyue', - 'swd_fuyan', - 'pal_xuejian', - 'swd_maixing', - 'xunyou', - 're_daqiao', - 'swd_fengyu', - 'swd_xuanyuanjiantong', - 'zhugeke', - 'pal_changqing', - 'gjqt_xiangling', - 'diy_zhenji', - 'gjqt_yuewuyi', - 'hs_magni', - 're_zhouyu', - 'dengai', - 'zhonghui', - 'hs_ronghejuren', - 'hs_wvelen', - 'swd_yuchiyanhong', - 'pal_hanlingsha', - 'diy_liuyan', - 'diy_zhouyu', - 'swd_jiuyou', - 'swd_duopeng', - 'swd_kama', - 'swd_yuli', - 'swd_rongshuang', - 'zhanghe', - 'zhangzhang', - 'pal_zhaoliner', - 'caozhi', - 'caochong', - 'xin_fazheng', - 'wuguotai', - 'chengong', - 'hs_siwangzhiyi', - 'hs_bilanyoulong', - 'yxs_direnjie', - 'yxs_sunwu', - 'zhanglu', - 'yxs_luban', - 'yxs_huamulan', - 'hs_jiaziruila', - 'hs_brann', - 're_liubei', - 'hs_kchromaggus', - 'sunru', - 'yxs_zhangsanfeng', - 'yxs_nandinggeer', - 'hs_kazhakusi', - 'swd_yeyaxi', - 'dianwei', - 'swd_weida', - 'yxs_libai', - 'hs_yogg', - 'swd_nicole', - 'yxs_wangzhaojun', - 'hs_alextrasza', - 'yxs_yangguang', - 'sunquan', - 'wangyi', - 'diy_caiwenji', - 'hs_mijiaojisi', - 'hs_mojinbaozi', - 'xuhuang', - 'liuye', - ], - bp:[ - 'gw_qigaiwang', - 'quyi', - 'wangyun', - 'pal_xiaoman', - 'pal_jiangyunfan', - 'pal_longyou', - 'gw_aokeweisite', - 'pal_wangxiaohu', - 'pal_shenqishuang', - 'pal_sumei', - 'hs_tgolem', - 'hs_huolituteng', - 'hs_selajin', - 'hs_hemite', - 'zoushi', - 'swd_zhiyin', - 'hs_hudunren', - 'hs_ruanniguai', - 'diy_lukang', - 'yxs_meixi', - 'yxs_lanlinwang', - 'jianyong', - 'jiling', - 'zhangren', - 'yanbaihu', - 'sunziliufang', - 'shen_zhouyu', - 'yj_jushou', - 'swd_zidashu', - 'taishici', - 'caifuren', - 'yxs_kaisa', - 'sunluyu', - 'liyan', - 'pal_jiangcheng', - 'zhugeguo', - 'xiaoqiao', - 'sp_zhangjiao', - 'hs_tanghangu', - 'ow_heibaihe', - 'ow_luba', - 'pal_leiyuange', - 'dongbai', - 'swd_moye', - 'guohuanghou', - 'yxs_zhaoyong', - 'litong', - 'old_quancong', - 'mizhu', - 'hs_hallazeal', - 'liuyu', - 'buzhi', - 'chess_zhangliao', - 'chess_sunshangxiang', - 'chess_huangzhong', - 'chess_taishici', - 'chess_diaochan', - 'chengyu', - 'guansuo', - 'ow_sishen', - 'hs_nate', - 'hs_finley', - 'hs_yelise', - 'hs_loatheb', - 'hs_xuanzhuanjijia', - 'swd_quxian', - 'yxs_zhuyuanzhang', - 'yxs_jinke', - 'gongsunyuan', - 'guotufengji', - 'shixie', - 'yxs_mozi', - 'hs_xuefashi', - 'xiahoushi', - 'zhangsong', - 'yxs_yuefei', - 'yxs_fuermosi', - 'yxs_xiaoqiao', - 'zhuhuan', - 'yxs_aijiyanhou', - 'yxs_bole', - 're_machao', - 're_guanyu', - 'yuanshao', - 're_yuanshao', - 'hs_waleera', - 'gjqt_yinqianshang', - 'gjqt_hongyu', - 'gjqt_wenrenyu', - 'shen_zhaoyun', - 'swd_shangzhang', - 'swd_situqiang', - 'hs_malfurion', - 'swd_haidapang', - 'hs_wuther', - 'sp_dongzhuo', - 'jiangwei', - 'liubei', - 'mateng', - 'wutugu', - 'swd_chunyuheng', - 'hetaihou', - 'swd_fengtianling', - 'kongrong', - 'swd_qiner', - 'sp_diaochan', - 'swd_jiangziya', - 'liushan', - 'zhugedan', - 'sp_zhaoyun', - 're_huatuo', - 'swd_jiangwu', - 'sp_jiangwei', - 'zhugeliang', - 'swd_huyue', - 'swd_zhuoshanzhu', - 'swd_shaowei', - 'swd_hanlong', - 'swd_hupo', - 'caopi', - 'jiaxu', - 'maliang', - 'zhangchunhua', - 'xushu', - 'xin_xushu', - 'lingtong', - 'chenqun', - 'guyong', - 'diy_xuhuang', - 'hs_jgarrosh', - 'guanping', - 'sunxiu', - 'quancong', - 'yxs_luocheng', - 'caoren', - 'zumao', - 'sp_ganning', - 'sp_lvmeng', - 'swd_lilian', - 'hs_lreno', - 'hs_zhouzhuo', - 'hs_liadrin', - 'hs_anomalus', - 'mifuren', - 'hanba', - 'sunjian', - 'pangtong', - 'caochun', - 'diy_liuzan', - 'diy_yangyi', - 're_yuanshu', - 'yuanshu', - 're_guojia', - 'cuiyan', - 'sp_zhugeliang', - 'hs_guldan', - 're_ganning', - 'caiwenji', - 're_xushu', - 'hs_lrexxar', - 'huatuo', - 'sunhao', - 'swd_jiting', - 'hs_nozdormu', - 'zhoucang', - 'hs_shifazhe', - 'guanyinping', - ], - b:[ - 'xinxianying', - 'caojie', - 'hs_shirencao', - 'sp_daqiao', - 'hs_jiawodun', - 'yxs_weizhongxian', - 'cenhun', - 'huanghao', - 'panzhangmazhong', - 'jsp_guanyu', - 'wenpin', - 'diy_liufu', - 're_xuzhu', - 're_simayi', - 'yxs_mingchenghuanghou', - 'diy_tianyu', - 'old_zhuran', - 'old_lingtong', - 'sp_jiaxu', - 'sp_liubei', - 'zhuling', - 'xin_liru', - 'weiyan', - 'sp_xiahoudun', - 'jsp_huangyueying', - 'sp_zhangfei', - 'yxs_lishimin', - 'daxiaoqiao', - 'pal_linyueru', - 'zhuran', - 'fuhuanghou', - 'xin_masu', - 'yxs_chengjisihan', - 'masu', - 'handang', - 'swd_youzhao', - 'swd_fu', - 'yxs_chengyaojin', - 'yxs_yujix', - 'swd_jialanduo', - 'kanze', - 'mazhong', - 'zhaoxiang', - 'heqi', - 'sp_machao', - 're_zhaoyun', - 'fuwan', - 'hs_jinglinglong', - 'ganfuren', - 'hs_huzhixiannv', - 'sp_sunshangxiang', - 'jiangqing', - 'shen_simayi', - 'swd_hanluo', - 'swd_zhanggao', - 'simalang', - 'sp_caoren', - 'sunshangxiang', - 'daqiao', - 'swd_luchengxuan', - 'dongzhuo', - 'fazheng', - 'yufan', - 'guanzhang', - 'diy_yuji', - 'yuejin', - 'gaoshun', - 'chengpu', - 'caozhen', - 'wuyi', - 'hanhaoshihuan', - 'caoxiu', - 'zhangyi', - 'yxs_baosi', - 'lingju', - 'xin_yujin', - 'diy_feishi', - 'yxs_lvzhi', - 'madai', - 'sunce', - 'huangyueying', - 'guojia', - 'jiangfei', - 'xiahouba', - 'yxs_tangbohu', - 'caozhang', - 'pangde', - ], - bm:[ - 'zangba', - 'diy_xizhenxihong', - 'tadun', - 'guohuai', - 'sunluban', - 'zhouyu', - 'dingfeng', - 'mayunlu', - 'shen_guanyu', - 're_caocao', - 're_lvbu', - 'chendong', - 'simayi', - 'zhenji', - 'ganning', - 'luxun', - 'zhangjiao', - 'zhurong', - 'jsp_zhaoyun', - 'tianfeng', - 'old_zhonghui', - 'xusheng', - 'liru', - 're_zhangfei', - 'yxs_goujian', - 'yangxiu', - 're_lvmeng', - 're_xiahoudun', - 'zhangliang', - 'xiahouyuan', - 'sp_pangde', - 'yanwen', - ], - c:[ - 'old_xusheng', - 'old_caozhen', - 'old_caoxiu', - 'old_madai', - 'zhuzhi', - 'liaohua', - 'zhaoyun', - 'machao', - 're_gongsunzan', - 'caohong', - 'caocao', - 'lvbu', - 'yujin', - ], - d:[ - 'menghuo', - 'huaxiong', - 'panfeng', - 'guanyu', - 'xuzhu', - 'lvmeng', - 'huanggai', - 'xiahoudun', - 'zhangbao', - 'zhangfei', - 'old_huaxiong', - ], + s:[ + 'swd_muyun', + 'swd_zhaoyun', + 'swd_septem', + 'hs_sthrall', + 'hs_malorne', + 'swd_duguningke', + 'swd_guyue', + 'swd_murongshi', + 'swd_cheyun', + 'swd_tuobayuer', + 'swd_yuxiaoxue', + 'gjqt_bailitusu', + 'swd_huanglei', + 'hs_medivh', + 'pal_yuejinzhao', + ], + ap:[ + 'ow_zhaliya', + 'pal_liumengli', + 'pal_yuntianhe', + 'pal_lixiaoyao', + 'swd_huanyuanzhi', + 'pal_xiahoujinxuan', + 'swd_huiyan', + 'ow_dva', + 'ow_mei', + 'ow_yuanshi', + 'swd_yuwentuo', + 'pal_xuanxiao', + 'swd_jipeng', + 'lusu', + 'old_yuanshu', + 'xunyu', + 'pal_murongziying', + 'swd_jiliang', + 'swd_shuijing', + 'shen_caocao', + 'hs_neptulon', + 'gjqt_aruan', + 'swd_muyue', + 'swd_qi', + 'zhangliao', + 'pal_zixuan', + 'swd_tuwei', + 'hs_xsylvanas', + 'hs_malygos', + 'hs_alakir', + 'ow_luxiao', + 'gjqt_ouyangshaogong', + 'ow_liekong', + 'ow_ana', + 'hs_aya', + 'hs_tyrande', + 'swd_shuwaner', + 'pal_yueqi', + ], + a:[ + 'gw_shasixiwusi', + 'gw_kairuisi', + 'gw_kanbi', + 'gw_nvyemo', + 'gw_linjing', + 'lifeng', + 'gw_meizi', + 'gw_aimin', + 'gw_puxila', + 'gw_bulanwang', + 'gw_kaxier', + 'gw_zhangyujushou', + 'xushi', + 'wuxian', + 'pal_tangyurou', + 'gw_luobo', + 'gw_aigeleisi', + 'gw_zhuoertan', + 'gw_gaier', + 'pal_mingxiu', + 'pal_luozhaoyan', + 'pal_xia', + 'hs_yashaji', + 'hs_pengpeng', + 'hs_manyututeng', + 'hs_amala', + 'hs_kaituozhe', + 'hs_yinggencao', + 'hs_laila', + 'swd_kendi', + 'hs_enzoth', + 'hs_sapphiron', + 'gw_airuiting', + 'gw_dagong', + 'gw_fulisi', + 'gw_xili', + 'gw_yenaifa', + 'gw_yioufeisi', + 'gw_jieluote', + 'gw_telisi', + 'gw_luoqi', + 'gw_enxier', + 'gw_aisinie', + 'gw_falanxisika', + 'gw_haluo', + 'hs_khadgar', + 'swd_sikongyu', + 'swd_huzhongxian', + 'swd_anka', + 'swd_kangnalishi', + 'swd_xuanyuanjianxian', + 'liuxie', + 'shen_lvbu', + 'liufeng', + 'zhangxingcai', + 'shen_lvmeng', + 'swd_xiarou', + 'hs_morgl', + 'diaochan', + 'diy_zaozhirenjun', + 'ow_heiying', + 'pal_longkui', + 'pal_nangonghuang', + 'pal_xingxuan', + 'hs_walian', + 'hs_laxiao', + 'hs_fandral', + 'sundeng', + 'hs_xialikeer', + 'hs_sainaliusi', + 'hs_lrhonin', + 'hs_ysera', + 'yxs_diaochan', + 'liuzan', + 'lingcao', + 'hs_trueheart', + 'swd_wangsiyue', + 'swd_lanyin', + 'swd_hengai', + 're_huangyueying', + 'hs_bchillmaw', + 'shen_zhugeliang', + 'gjqt_fanglansheng', + 'hs_zhishigushu', + 'hs_zhanzhenggushu', + 'gjqt_xiayize', + 'hs_yngvar', + 're_huanggai', + 'hs_antonidas', + 'chenlin', + 'swd_chenjingchou', + 'hs_anduin', + 'yxs_yangyuhuan', + 'caoang', + 'swd_shanxiaoxiao', + 'gjqt_fengqingxue', + 'swd_ziqiao', + 'pal_jingtian', + 'yxs_wuzetian', + 'yxs_caocao', + 'bulianshi', + 'sp_pangtong', + 'liubiao', + 'zhongyao', + 'liuchen', + 'yxs_guiguzi', + 'hs_shanlingjuren', + 'hs_bannabusi', + 'zhangrang', + 'hs_lafamu', + 'ow_chanyata', + 'ow_tianshi', + 'ow_maikelei', + 'ow_tuobiang', + 'ow_banzang', + 'ow_laiyinhate', + 'wanglang', + 'huangzhong', + 'pal_wangpengxu', + 'yxs_luobinhan', + 'hs_alleria', + 're_lusu', + 'hs_fuding', + 'wangji', + 're_luxun', + 'pal_muchanglan', + 'yxs_luzhishen', + 'hs_jaina', + 're_lidian', + 'hs_kalimosi', + 'hs_zhihuanhua', + 'xizhicai', + 'maliang', + ], + am:[ + 'gw_oudimu', + 'guanyinping', + 'dongyun', + 'gw_xigedelifa', + 'gw_laomaotou', + 'gw_haizhiyezhu', + 'gw_nitelila', + 'gw_bierna', + 'gw_fuertaisite', + 'gw_hengsaite', + 'gw_kuite', + 'sunqian', + 'pal_anu', + 'gw_mieren', + 'gw_sanhanya', + 'pal_xianqing', + 'gw_shanhu', + 'gw_huoge', + 'taoqian', + 'pal_jushifang', + 'hs_fachaotuteng', + 'huangfusong', + 'hs_shizugui', + 'hs_shuiwenxuejia', + 'hs_pyros', + 'swd_xiyan', + 'swd_xiaohuanglong', + 'ow_orisa', + 'ow_baolei', + 'ow_wensidun', + 'gw_gaier', + 'gw_laduoweide', + 'gw_kaerweite', + 'yxs_napolun', + 'hs_aedwin', + 'hs_wujiyuansu', + 'ow_kuangshu', + 'old_wangyi', + 'hs_shaku', + 're_zhangliao', + 'zhoutai', + 'zhugejin', + 'hs_totemic', + 'swd_duanmeng', + 'pal_wenhui', + 'gjqt_xunfang', + 'ow_shibing', + 'hs_blingtron', + 'hs_kcthun', + 'ow_zhixuzhiguang', + 'ow_falaozhiying', + 'hs_bolvar', + 'sp_caiwenji', + 'yxs_yingzheng', + 'caorui', + 'manchong', + 'yxs_xiangyu', + 'swd_linyue', + 'swd_fuyan', + 'pal_xuejian', + 'swd_maixing', + 'xunyou', + 're_daqiao', + 'swd_fengyu', + 'swd_xuanyuanjiantong', + 'zhugeke', + 'pal_changqing', + 'gjqt_xiangling', + 'diy_zhenji', + 'gjqt_yuewuyi', + 'hs_magni', + 're_zhouyu', + 'dengai', + 'zhonghui', + 'hs_ronghejuren', + 'hs_wvelen', + 'swd_yuchiyanhong', + 'pal_hanlingsha', + 'diy_liuyan', + 'diy_zhouyu', + 'swd_jiuyou', + 'swd_duopeng', + 'swd_kama', + 'swd_yuli', + 'swd_rongshuang', + 'zhanghe', + 'zhangzhang', + 'pal_zhaoliner', + 'caozhi', + 'caochong', + 'xin_fazheng', + 'wuguotai', + 'chengong', + 'hs_siwangzhiyi', + 'hs_bilanyoulong', + 'yxs_direnjie', + 'yxs_sunwu', + 'zhanglu', + 'yxs_luban', + 'yxs_huamulan', + 'hs_jiaziruila', + 'hs_brann', + 're_liubei', + 'hs_kchromaggus', + 'sunru', + 'yxs_zhangsanfeng', + 'yxs_nandinggeer', + 'hs_kazhakusi', + 'swd_yeyaxi', + 'dianwei', + 'swd_weida', + 'yxs_libai', + 'hs_yogg', + 'swd_nicole', + 'yxs_wangzhaojun', + 'hs_alextrasza', + 'yxs_yangguang', + 'sunquan', + 'wangyi', + 'diy_caiwenji', + 'hs_mijiaojisi', + 'hs_mojinbaozi', + 'xuhuang', + 'liuye', + ], + bp:[ + 'gw_qigaiwang', + 'quyi', + 'wangyun', + 'pal_xiaoman', + 'pal_jiangyunfan', + 'pal_longyou', + 'gw_aokeweisite', + 'pal_wangxiaohu', + 'pal_shenqishuang', + 'pal_sumei', + 'hs_tgolem', + 'hs_huolituteng', + 'hs_selajin', + 'hs_hemite', + 'zoushi', + 'swd_zhiyin', + 'hs_hudunren', + 'hs_ruanniguai', + 'diy_lukang', + 'yxs_meixi', + 'yxs_lanlinwang', + 'jianyong', + 'jiling', + 'zhangren', + 'yanbaihu', + 'sunziliufang', + 'shen_zhouyu', + 'yj_jushou', + 'swd_zidashu', + 'taishici', + 'caifuren', + 'yxs_kaisa', + 'sunluyu', + 'liyan', + 'pal_jiangcheng', + 'zhugeguo', + 'xiaoqiao', + 'sp_zhangjiao', + 'hs_tanghangu', + 'ow_heibaihe', + 'ow_luba', + 'pal_leiyuange', + 'dongbai', + 'swd_moye', + 'guohuanghou', + 'yxs_zhaoyong', + 'litong', + 'old_quancong', + 'mizhu', + 'hs_hallazeal', + 'liuyu', + 'buzhi', + 'chess_zhangliao', + 'chess_sunshangxiang', + 'chess_huangzhong', + 'chess_taishici', + 'chess_diaochan', + 'chengyu', + 'guansuo', + 'ow_sishen', + 'hs_nate', + 'hs_finley', + 'hs_yelise', + 'hs_loatheb', + 'hs_xuanzhuanjijia', + 'swd_quxian', + 'yxs_zhuyuanzhang', + 'yxs_jinke', + 'gongsunyuan', + 'guotufengji', + 'shixie', + 'yxs_mozi', + 'hs_xuefashi', + 'xiahoushi', + 'zhangsong', + 'yxs_yuefei', + 'yxs_fuermosi', + 'yxs_xiaoqiao', + 'zhuhuan', + 'yxs_aijiyanhou', + 'yxs_bole', + 're_machao', + 're_guanyu', + 'yuanshao', + 're_yuanshao', + 'hs_waleera', + 'gjqt_yinqianshang', + 'gjqt_hongyu', + 'gjqt_wenrenyu', + 'shen_zhaoyun', + 'swd_shangzhang', + 'swd_situqiang', + 'hs_malfurion', + 'swd_haidapang', + 'hs_wuther', + 'sp_dongzhuo', + 'jiangwei', + 'liubei', + 'mateng', + 'wutugu', + 'swd_chunyuheng', + 'hetaihou', + 'swd_fengtianling', + 'kongrong', + 'swd_qiner', + 'sp_diaochan', + 'swd_jiangziya', + 'liushan', + 'zhugedan', + 'sp_zhaoyun', + 're_huatuo', + 'swd_jiangwu', + 'sp_jiangwei', + 'zhugeliang', + 'swd_huyue', + 'swd_zhuoshanzhu', + 'swd_shaowei', + 'swd_hanlong', + 'swd_hupo', + 'caopi', + 'jiaxu', + 'zhangchunhua', + 'xushu', + 'xin_xushu', + 'lingtong', + 'chenqun', + 'guyong', + 'diy_xuhuang', + 'hs_jgarrosh', + 'guanping', + 'sunxiu', + 'quancong', + 'yxs_luocheng', + 'caoren', + 'zumao', + 'sp_ganning', + 'sp_lvmeng', + 'swd_lilian', + 'hs_lreno', + 'hs_zhouzhuo', + 'hs_liadrin', + 'hs_anomalus', + 'mifuren', + 'hanba', + 'sunjian', + 'pangtong', + 'caochun', + 'diy_liuzan', + 'diy_yangyi', + 're_yuanshu', + 'yuanshu', + 're_guojia', + 'cuiyan', + 'sp_zhugeliang', + 'hs_guldan', + 're_ganning', + 'caiwenji', + 're_xushu', + 'hs_lrexxar', + 'huatuo', + 'sunhao', + 'swd_jiting', + 'hs_nozdormu', + 'zhoucang', + 'hs_shifazhe', + 'huanghao', + ], + b:[ + 'xinxianying', + 'caojie', + 'hs_shirencao', + 'sp_daqiao', + 'hs_jiawodun', + 'yxs_weizhongxian', + 'cenhun', + 'panzhangmazhong', + 'jsp_guanyu', + 'wenpin', + 'diy_liufu', + 're_xuzhu', + 're_simayi', + 'yxs_mingchenghuanghou', + 'diy_tianyu', + 'old_zhuran', + 'old_lingtong', + 'sp_jiaxu', + 'sp_liubei', + 'zhuling', + 'xin_liru', + 'weiyan', + 'sp_xiahoudun', + 'jsp_huangyueying', + 'sp_zhangfei', + 'yxs_lishimin', + 'daxiaoqiao', + 'pal_linyueru', + 'zhuran', + 'fuhuanghou', + 'xin_masu', + 'yxs_chengjisihan', + 'masu', + 'handang', + 'swd_youzhao', + 'swd_fu', + 'yxs_chengyaojin', + 'yxs_yujix', + 'swd_jialanduo', + 'kanze', + 'mazhong', + 'zhaoxiang', + 'heqi', + 'sp_machao', + 're_zhaoyun', + 'fuwan', + 'hs_jinglinglong', + 'ganfuren', + 'hs_huzhixiannv', + 'sp_sunshangxiang', + 'jiangqing', + 'shen_simayi', + 'swd_hanluo', + 'swd_zhanggao', + 'simalang', + 'sp_caoren', + 'sunshangxiang', + 'daqiao', + 'swd_luchengxuan', + 'dongzhuo', + 'fazheng', + 'yufan', + 'guanzhang', + 'diy_yuji', + 'yuejin', + 'gaoshun', + 'chengpu', + 'caozhen', + 'wuyi', + 'hanhaoshihuan', + 'caoxiu', + 'zhangyi', + 'yxs_baosi', + 'lingju', + 'xin_yujin', + 'diy_feishi', + 'yxs_lvzhi', + 'madai', + 'sunce', + 'huangyueying', + 'guojia', + 'jiangfei', + 'xiahouba', + 'yxs_tangbohu', + 'caozhang', + 'pangde', + ], + bm:[ + 'zangba', + 'diy_xizhenxihong', + 'tadun', + 'guohuai', + 'sunluban', + 'zhouyu', + 'dingfeng', + 'mayunlu', + 'shen_guanyu', + 're_caocao', + 're_lvbu', + 'chendong', + 'simayi', + 'zhenji', + 'ganning', + 'luxun', + 'zhangjiao', + 'zhurong', + 'jsp_zhaoyun', + 'tianfeng', + 'old_zhonghui', + 'xusheng', + 'liru', + 're_zhangfei', + 'yxs_goujian', + 'yangxiu', + 're_lvmeng', + 're_xiahoudun', + 'zhangliang', + 'xiahouyuan', + 'sp_pangde', + 'yanwen', + ], + c:[ + 'old_xusheng', + 'old_caozhen', + 'old_caoxiu', + 'old_madai', + 'zhuzhi', + 'liaohua', + 'zhaoyun', + 'machao', + 're_gongsunzan', + 'caohong', + 'caocao', + 'lvbu', + 'yujin', + ], + d:[ + 'menghuo', + 'huaxiong', + 'panfeng', + 'guanyu', + 'xuzhu', + 'lvmeng', + 'huanggai', + 'xiahoudun', + 'zhangbao', + 'zhangfei', + 'old_huaxiong', + ], }; diff --git a/character/refresh.js b/character/refresh.js index 9cd47a160..37257aa3a 100644 --- a/character/refresh.js +++ b/character/refresh.js @@ -168,6 +168,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, result:{ target:function(player,target){ + if(target.hasSkillTag('nogain')) return 0; if(ui.selected.cards.length&&ui.selected.cards[0].name=='du'){ if(target.hasSkillTag('nodu')) return 0; return -10; @@ -210,7 +211,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{source:'damageEnd'}, forced:true, filter:function(event,player){ - if(event._notrigger.contains(event.player)) return false; + if(event._notrigger.contains(event.player)) return false; return event.card&&event.card.name=='sha'&&event.player.isAlive()&&event.player.countCards('he')>0; }, check:function(){ @@ -1124,7 +1125,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{source:'damageEnd'}, direct:true, filter:function(event){ - if(event._notrigger.contains(event.player)) return false; + if(event._notrigger.contains(event.player)) return false; return event.card&&event.card.name=='sha'&&event.cards&& get.color(event.cards)=='black'&&event.player.countCards('e'); }, @@ -1451,7 +1452,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, trigger:{player:'damageEnd',source:'damageEnd'}, filter:function(event){ - if(event._notrigger.contains(event.player)) return false; + if(event._notrigger.contains(event.player)) return false; return event.num&&event.source&&event.player&& event.player.isAlive()&&event.source.isAlive()&&event.source!=event.player; }, diff --git a/character/shenhua.js b/character/shenhua.js index 44f4e0efc..de22fafeb 100644 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -1,4623 +1,4623 @@ 'use strict'; game.import('character',function(lib,game,ui,get,ai,_status){ - return { - name:'shenhua', - connect:true, - connectBanned:['zuoci'], - character:{ - xiahouyuan:['male','wei',4,['xinshensu']], - caoren:['male','wei',4,['xinjushou','xinjiewei']], - huangzhong:['male','shu',4,['xinliegong']], - weiyan:['male','shu',4,['xinkuanggu','qimou']], - xiaoqiao:['female','wu',3,['retianxiang','hongyan']], - zhoutai:['male','wu',4,['buqu','fenji']], - sp_zhangjiao:['male','qun',3,['releiji','guidao','huangtian'],['zhu']], - // yuji:['male','qun',3,['guhuo']], - // xin_yuji:['male','qun',3,['guhuo']], + return { + name:'shenhua', + connect:true, + connectBanned:['zuoci'], + character:{ + xiahouyuan:['male','wei',4,['xinshensu']], + caoren:['male','wei',4,['xinjushou','xinjiewei']], + huangzhong:['male','shu',4,['xinliegong']], + weiyan:['male','shu',4,['xinkuanggu','qimou']], + xiaoqiao:['female','wu',3,['retianxiang','hongyan']], + zhoutai:['male','wu',4,['buqu','fenji']], + sp_zhangjiao:['male','qun',3,['releiji','guidao','huangtian'],['zhu']], + // yuji:['male','qun',3,['guhuo']], + // xin_yuji:['male','qun',3,['guhuo']], - sp_zhugeliang:['male','shu',3,['huoji','bazhen','kanpo']], - pangtong:['male','shu',3,['xinlianhuan','niepan']], - xunyu:['male','wei',3,['quhu','jieming']], - dianwei:['male','wei',4,['xinqiangxi']], - taishici:['male','wu',4,['tianyi']], - yanwen:['male','qun',4,['shuangxiong']], - re_yuanshao:['male','qun',4,['reluanji','xueyi'],['zhu']], - pangde:['male','qun',4,['mashu','jianchu']], + sp_zhugeliang:['male','shu',3,['huoji','bazhen','kanpo']], + pangtong:['male','shu',3,['xinlianhuan','niepan']], + xunyu:['male','wei',3,['quhu','jieming']], + dianwei:['male','wei',4,['xinqiangxi']], + taishici:['male','wu',4,['tianyi']], + yanwen:['male','qun',4,['shuangxiong']], + re_yuanshao:['male','qun',4,['reluanji','xueyi'],['zhu']], + pangde:['male','qun',4,['mashu','jianchu']], - menghuo:['male','shu',4,['huoshou','zaiqi']], - zhurong:['female','shu',4,['juxiang','lieren']], - caopi:['male','wei',3,['xingshang','fangzhu','songwei'],['zhu']], - xuhuang:['male','wei',4,['duanliang','jiezi']], - re_lusu:['male','wu',3,['haoshi','redimeng']], - sunjian:['male','wu',4,['yinghun']], - dongzhuo:['male','qun',8,['jiuchi','roulin','benghuai','baonue'],['zhu']], - jiaxu:['male','qun',3,['luanwu','wansha','weimu']], + menghuo:['male','shu',4,['huoshou','zaiqi']], + zhurong:['female','shu',4,['juxiang','lieren']], + caopi:['male','wei',3,['xingshang','fangzhu','songwei'],['zhu']], + xuhuang:['male','wei',4,['duanliang','jiezi']], + re_lusu:['male','wu',3,['haoshi','redimeng']], + sunjian:['male','wu',4,['yinghun']], + dongzhuo:['male','qun',8,['jiuchi','roulin','benghuai','baonue'],['zhu']], + jiaxu:['male','qun',3,['luanwu','wansha','weimu']], - jiangwei:['male','shu',4,['tiaoxin','zhiji']], - liushan:['male','shu',3,['xiangle','fangquan','ruoyu'],['zhu']], - zhanghe:['male','wei',4,['qiaobian']], - dengai:['male','wei',4,['tuntian','zaoxian']], - sunce:['male','wu',4,['jiang','hunzi','zhiba'],['zhu']], - zhangzhang:['male','wu',3,['zhijian','guzheng']], - caiwenji:['female','qun',3,['beige','duanchang']], - zuoci:['male','qun',3,['huashen','xinsheng']], - }, - perfectPair:{ - yuanshao:['yanwen'], - menghuo:['zhurong'], - sp_zhugeliang:['pangtong'], - sunce:['zhouyu','taishici','daqiao'] - }, - characterFilter:{ - zuoci:function(mode){ - return mode!='guozhan'; - } - }, - characterIntro:{ - huangzhong:'字汉升,今河南南阳人。汉末三国时期蜀汉名将。本为刘表部下中郎将,后归刘备,并助刘备攻益州刘璋,在定军山一战中阵斩曹操部下名将夏侯渊。备称汉中王后改封后将军,赐关内侯。', - weiyan:'字文长,义阳人。三国时期蜀汉名将,诸葛亮死后,魏延因被陷害谋反而遭杨仪一党所杀。', - xiahouyuan:'字妙才,沛国谯人。东汉末年曹操部下名将,夏侯惇之族弟,八虎骑之一。群雄征讨董卓时随曹操一同起兵,后征战四方,屡立功勋。在平定马超叛乱后负责西北防线的镇守。公元219年刘备攻打汉中,被刘备部将黄忠所杀。', - caoren:'字子孝,沛国谯人,曹操的从弟。三国时期曹魏名将,官至大司马。谥曰忠侯。', - xiaoqiao:'庐江皖县人也。父桥国老德尊于时。小乔国色流离,资貌绝伦。建安三年,周瑜协策攻皖,拔之。娶小乔为妻。后人谓英雄美女,天作之合。', - zhoutai:'字幼平,九江下蔡人,三国时期吴国武将。早年与蒋钦随孙策左右,立过数次战功。孙策讨伐六县山贼时,周泰胆气绝伦,保卫孙权,勇战退敌,身受十二处伤。有诗云:三番救主出重围,忠勇如公世所稀。遍体疮痍犹痛饮,血痕残酒满征衣。', - yuji:'自号太平道人,琅琊人,在吴郡、会稽一带为百姓治病,甚得人心。孙策怒之,以惑人心为由斩之,后策常受吉咒而亡。', - zhangjiao:'乱世的开始,黄巾起义军首领,太平道创始人。张角早年信奉黄老学说,对在汉代十分流行的谶纬之学也深有研究,对民间医术 、巫术也很熟悉。', - dianwei:'己吾城村人。东汉末年曹魏猛将。擅使大双戟,为人壮猛任侠,曾为乡人刘氏报仇,杀人出市,人莫敢近。相貌魁梧,膂力过人。建安二年(197),张绣背叛曹操,典韦为保护曹操而独挡叛军,击杀多人,但最终因寡不敌众而战死。', - xunyu:'荀彧,字文若,颍川颍阴(今河南许昌)人。东汉末年曹操帐下首席谋臣,杰出的战略家。自小被世人称作“王佐之才”。', - pangtong:'庞统,字士元,襄阳(治今湖北襄阳)人。三国时刘备帐下谋士,官拜军师中郎将。才智与诸葛亮齐名,人称“凤雏”。在进围雒县时,统率众攻城,不幸被流矢击中去世,时年三十六岁。追赐统为关内侯,谥曰靖侯。庞统死后,葬于落凤庞统墓坡。', - sp_zhugeliang:'字孔明,号卧龙居士,琅琊阳都人。刘备曾“三顾茅庐”得见卧龙。卧龙以一篇《隆中对》分析天下形势,提出先取荆州,再取益州成鼎足之势的说法。《三国演义》中的诸葛亮善用“火攻”,曾用火攻战术赢得多场战役,如“火烧赤壁”、“火烧博望坡”、“火烧藤甲兵”等。', - taishici:'太史慈,字子义,东莱黄县(今山东龙口东黄城集)人。东汉末年武将,守言应诺,恪遵信义,始终如一,弭息诽论。官至建昌都尉。弓马熟练,箭法精良。原为刘繇部下,后被孙策收降,于赤壁之战前病逝,死时才四十一岁。', - pangde:'字令明,东汉末年雍州南安郡狟道县(今甘肃天水市武山县四门镇)人。曹操部下重要将领。官至立义将军,拜关门亭侯。谥曰壮侯。有一子庞会。', - yanwen:'东汉末年河北袁绍部下武将,素有威名。颜良与文丑一起作为袁绍军队的勇将而闻名。建安四年(199),袁绍以颜良、文丑为将,率精卒十万,准备攻许都;次年,兵进黎阳,遣颜良攻白马。终均亡于关羽刀下。', - yuanshao:'字本初,汉族,汝南汝阳人,出身名门望族,自曾祖父起四代有五人位居三公,自己也居三公之上,其家族也因此有“四世三公”之称。曾于初平元年被推举为反董卓联合军的盟主,联军瓦解后,在汉末群雄割据的过程中,袁绍先占据冀州,又先后夺青、并二州,并于建安四年击败了割据幽州的军阀公孙瓒,势力达到顶点;但在建安五年的官渡之战中败于曹操。在平定冀州叛乱之后,于建安七年病死。', - xuhuang:'字公明,河东杨人。三国时期曹魏名将,本为杨奉帐下骑都尉,杨奉被曹操击败后转投曹操,在曹操手下多立功勋,参与官渡、赤壁、关中征伐、汉中征伐等几次重大战役。', - caopi:'字子桓,三国时期著名的政治家、文学家,曹魏的开国皇帝,公元220-226年在位。沛国谯人,魏武帝曹操与武宣卞皇后的长子。去世后庙号高祖,谥为文皇帝,葬于首阳陵。', - sunjian:'字文台,汉族,吴郡富春人。东汉末期地方军阀,著名将领。史书说他“容貌不凡,性阔达,好奇节”,是大军事家孙武的后裔。汉末群雄之一,三国中吴国的奠基人。孙权建国后,追谥孙坚为武烈皇帝。', - dongzhuo:'字仲颖,陇西临洮人。东汉末年少帝、献帝时权臣,西凉军阀。官至太师、郿侯。其为人残忍嗜杀,倒行逆施,招致群雄联合讨伐,但联合军在董卓迁都长安不久后瓦解。后被其亲信吕布所杀。', - zhurong:'据传为火神祝融氏后裔,南蛮王孟获之妻。武艺超群,善使飞刀,是《三国演义》中写到的唯一真正上过战场的女性。曾与孟获一起抵抗蜀军,在诸葛亮七擒七纵孟获之后,随孟获投降蜀汉。', - menghuo:'中国三国时期南中少数族首领。系东汉末益州建宁郡( 今云南晋宁东 )大姓,身材肥硕。生卒年不详。官至御史中丞。曾被诸葛亮七擒七纵,传为佳话。', - jiaxu:'字文和,武威姑臧人。三国时期魏国著名谋士。曾先后担任三国军阀李傕、张绣、曹操的谋士。官至魏国太尉,谥曰肃侯。', - lusu:'字子敬,汉族,临淮东城人,中国东汉末年东吴的著名军事统帅。他曾为孙权提出鼎足江东的战略规划,因此得到孙权的赏识,于周瑜死后代替周瑜领兵,守陆口。曾单刀赴会关羽于荆州。', - zhanghe:'字儁乂,河间鄚人。三国时期魏国名将。官渡之战时,本为袁绍部将的张郃投降了曹操,并在曹操帐下多立功勋,于曹魏建立后加封为征西车骑将军。诸葛亮六出祁山之间,张郃多次抵御蜀军的进攻,于公元231年在木门道被诸葛亮设伏射死。后谥曰壮侯。为曹魏“五子良将”之一。', - dengai:'字士载,义阳棘阳人。三国时期魏国杰出的军事家、将领。公元263年他与钟会分别率军攻打蜀汉,最后他率先进入成都,使得蜀汉灭亡。后因遭到钟会的污蔑和陷害,被司马昭猜忌而被收押,最后与其子邓忠一起被卫瓘派遣的武将田续所杀害。', - jiangwei:'字伯约,天水冀人。三国时期蜀汉著名将领、军事统帅。原为曹魏天水郡的中郎将,后降蜀汉,官至凉州刺史、大将军。诸葛亮去世后继承诸葛亮的遗志,继续率领蜀汉军队北伐曹魏,与曹魏名将陈泰、郭淮、邓艾等多次交手。', - liushan:'蜀汉后主,字公嗣。小名阿斗。刘备之子,母亲是昭烈皇后甘氏。三国时期蜀汉第二位皇帝,公元223-263年在位。公元263年蜀汉被曹魏所灭,刘禅投降曹魏,被封为安乐公。', - sunce:'字伯符,吴郡富春人。孙坚长子,孙权长兄。东汉末年割据江东一带的军阀,汉末群雄之一,三国时期吴国的奠基者。三国演义中绰号“小霸王”,统一江东。在一次狩猎中为刺客所伤,不久后身亡,年仅二十六岁。其弟孙权接掌孙策势力,并于称帝后,追谥孙策为长沙桓王。', - zhangzhang:'张昭,字子布,彭城人,三国时期吴国重臣,善丹青。拜辅吴将军,班亚三司,改封娄侯。年八十一卒,谥曰文侯。张纮,字子纲,广陵人。东吴谋士,和张昭一起合称“二张”。孙策平定江东时亲自登门邀请,张纮遂出仕为官。张纮后来建议孙权迁都秣陵,孙权正在准备时张纮病逝,其年六十岁。孙权为之流涕。', - zuoci:'左慈,字元放,东汉末方士,汉族,庐江(今安徽庐江西南)人。在道教历史上,东汉时期的丹鼎派道术是从他一脉相传。', - caiwenji:'名琰,原字昭姬,晋时避司马昭讳,改字文姬,东汉末年陈留圉(今河南开封杞县)人,东汉大文学家蔡邕的女儿,是中国历史上著名的才女和文学家,精于天文数理,既博学能文,又善诗赋,兼长辩才与音律。代表作有《胡笳十八拍》、《悲愤诗》等 。', - }, - skill:{ - xinjushou:{ - audio:'jushou', - trigger:{player:'phaseEnd'}, - content:function(){ - 'step 0' - player.draw(4); - player.turnOver(); - 'step 1' - player.chooseCard('h',true,'弃置一张手牌,若以此法弃置的是装备牌,则你改为使用之').set('ai',function(card){ - if(get.type(card)=='equip'){ - return 5-get.value(card); - } - return -get.value(card); - }).set('filterCard',lib.filter.cardDiscardable); - 'step 2' - if(result.bool&&result.cards.length){ - if(get.type(result.cards[0])=='equip'){ - player.$give(result.cards,player); - player.lose(result.cards,ui.special); - event.toequip=result.cards[0]; - } - else{ - player.discard(result.cards[0]); - } - } - 'step 3' - if(event.toequip){ - game.delay(); - } - 'step 4' - if(event.toequip){ - player.equip(event.toequip); - } - }, - ai:{ - effect:{ - target:function(card,player,target){ - if(card.name=='guiyoujie') return [0,1]; - } - } - }, - }, - xinjiewei:{ - audio:'yanzheng', - enable:'chooseToUse', - filterCard:true, - position:'e', - viewAs:{name:'wuxie'}, - filter:function(event,player){ - return player.countCards('e')>0; - }, - viewAsFilter:function(player){ - return player.countCards('e')>0; - }, - prompt:'将一张装备区内的牌当无懈可击使用', - check:function(card){return 8-get.equipValue(card)}, - threaten:1.2, - group:'xinjiewei_move', - subSkill:{ - move:{ - trigger:{player:'turnOverEnd'}, - direct:true, - audio:'jiewei', - filter:function(event,player){ - return !player.isTurnedOver()&&player.canMoveCard(); - }, - content:function(){ - "step 0" - player.chooseToDiscard('he',get.prompt('xinjiewei'),'弃置一张牌并移动场上的一张牌',lib.filter.cardDiscardable).set('ai',function(card){ - if(!_status.event.check) return 0; - return 7-get.value(card); - }).set('check',player.canMoveCard(true)).set('logSkill','xinjiewei'); - "step 1" - if(result.bool){ - player.moveCard(true); - } - else{ - event.finish(); - } - } - } - } - }, - jianchu:{ - trigger:{player:'shaBegin'}, - filter:function(event){ - return event.target.countCards('he')>0; - }, - direct:true, - content:function(){ - 'step 0' - player.discardPlayerCard(trigger.target,get.prompt('jianchu',trigger.target)).set('ai',function(button){ - if(!_status.event.att) return 0; - if(get.position(button.link)=='e') return get.value(button.link); - return 1; - }).set('logSkill',['jianchu',trigger.target]).set('att',get.attitude(player,trigger.target)<=0); - 'step 1' - if(result.bool&&result.links&&result.links.length){ - if(get.type(result.links[0])=='equip'){ - trigger.directHit=true; - } - else if(trigger.cards){ - trigger.target.gain(trigger.cards,'gain2','log'); - } - } - } - }, - redimeng:{ - audio:'dimeng', - enable:'phaseUse', - usable:1, - position:'he', - filterCard:function(){ - if(ui.selected.targets.length==2) return false; - return true; - }, - selectCard:[0,Infinity], - selectTarget:2, - complexCard:true, - complexSelect:true, - filterTarget:function(card,player,target){ - if(player==target) return false; - if(ui.selected.targets.length==0) return true; - return (Math.abs(ui.selected.targets[0].countCards('h')-target.countCards('h'))== - ui.selected.cards.length); - }, - multitarget:true, - multiline:true, - content:function(){ - 'step 0' - var cards=targets[0].getCards('h').concat(targets[1].getCards('h')); - var dialog=ui.create.dialog('缔盟',true); - if(player.isUnderControl(true)||targets[0].isUnderControl(true)||targets[1].isUnderControl(true)){ - dialog.add(cards); - dialog.seeing=true; - } - else{ - dialog.add([cards,'blank']); - } - _status.dieClose.push(dialog); - dialog.videoId=lib.status.videoId++; - game.addVideo('cardDialog',null,['缔盟',get.cardsInfo(cards),dialog.videoId]); - game.broadcast(function(cards,id,player,targets){ - var dialog=ui.create.dialog('缔盟',true); - if(player.isUnderControl(true)||targets[0].isUnderControl(true)||targets[1].isUnderControl(true)){ - dialog.add(cards); - dialog.seeing=true; - } - else{ - dialog.add([cards,'blank']); - } - _status.dieClose.push(dialog); - dialog.videoId=id; - },cards,dialog.videoId,player,targets); + jiangwei:['male','shu',4,['tiaoxin','zhiji']], + liushan:['male','shu',3,['xiangle','fangquan','ruoyu'],['zhu']], + zhanghe:['male','wei',4,['qiaobian']], + dengai:['male','wei',4,['tuntian','zaoxian']], + sunce:['male','wu',4,['jiang','hunzi','zhiba'],['zhu']], + zhangzhang:['male','wu',3,['zhijian','guzheng']], + caiwenji:['female','qun',3,['beige','duanchang']], + zuoci:['male','qun',3,['huashen','xinsheng']], + }, + perfectPair:{ + yuanshao:['yanwen'], + menghuo:['zhurong'], + sp_zhugeliang:['pangtong'], + sunce:['zhouyu','taishici','daqiao'] + }, + characterFilter:{ + zuoci:function(mode){ + return mode!='guozhan'; + } + }, + characterIntro:{ + huangzhong:'字汉升,今河南南阳人。汉末三国时期蜀汉名将。本为刘表部下中郎将,后归刘备,并助刘备攻益州刘璋,在定军山一战中阵斩曹操部下名将夏侯渊。备称汉中王后改封后将军,赐关内侯。', + weiyan:'字文长,义阳人。三国时期蜀汉名将,诸葛亮死后,魏延因被陷害谋反而遭杨仪一党所杀。', + xiahouyuan:'字妙才,沛国谯人。东汉末年曹操部下名将,夏侯惇之族弟,八虎骑之一。群雄征讨董卓时随曹操一同起兵,后征战四方,屡立功勋。在平定马超叛乱后负责西北防线的镇守。公元219年刘备攻打汉中,被刘备部将黄忠所杀。', + caoren:'字子孝,沛国谯人,曹操的从弟。三国时期曹魏名将,官至大司马。谥曰忠侯。', + xiaoqiao:'庐江皖县人也。父桥国老德尊于时。小乔国色流离,资貌绝伦。建安三年,周瑜协策攻皖,拔之。娶小乔为妻。后人谓英雄美女,天作之合。', + zhoutai:'字幼平,九江下蔡人,三国时期吴国武将。早年与蒋钦随孙策左右,立过数次战功。孙策讨伐六县山贼时,周泰胆气绝伦,保卫孙权,勇战退敌,身受十二处伤。有诗云:三番救主出重围,忠勇如公世所稀。遍体疮痍犹痛饮,血痕残酒满征衣。', + yuji:'自号太平道人,琅琊人,在吴郡、会稽一带为百姓治病,甚得人心。孙策怒之,以惑人心为由斩之,后策常受吉咒而亡。', + zhangjiao:'乱世的开始,黄巾起义军首领,太平道创始人。张角早年信奉黄老学说,对在汉代十分流行的谶纬之学也深有研究,对民间医术 、巫术也很熟悉。', + dianwei:'己吾城村人。东汉末年曹魏猛将。擅使大双戟,为人壮猛任侠,曾为乡人刘氏报仇,杀人出市,人莫敢近。相貌魁梧,膂力过人。建安二年(197),张绣背叛曹操,典韦为保护曹操而独挡叛军,击杀多人,但最终因寡不敌众而战死。', + xunyu:'荀彧,字文若,颍川颍阴(今河南许昌)人。东汉末年曹操帐下首席谋臣,杰出的战略家。自小被世人称作“王佐之才”。', + pangtong:'庞统,字士元,襄阳(治今湖北襄阳)人。三国时刘备帐下谋士,官拜军师中郎将。才智与诸葛亮齐名,人称“凤雏”。在进围雒县时,统率众攻城,不幸被流矢击中去世,时年三十六岁。追赐统为关内侯,谥曰靖侯。庞统死后,葬于落凤庞统墓坡。', + sp_zhugeliang:'字孔明,号卧龙居士,琅琊阳都人。刘备曾“三顾茅庐”得见卧龙。卧龙以一篇《隆中对》分析天下形势,提出先取荆州,再取益州成鼎足之势的说法。《三国演义》中的诸葛亮善用“火攻”,曾用火攻战术赢得多场战役,如“火烧赤壁”、“火烧博望坡”、“火烧藤甲兵”等。', + taishici:'太史慈,字子义,东莱黄县(今山东龙口东黄城集)人。东汉末年武将,守言应诺,恪遵信义,始终如一,弭息诽论。官至建昌都尉。弓马熟练,箭法精良。原为刘繇部下,后被孙策收降,于赤壁之战前病逝,死时才四十一岁。', + pangde:'字令明,东汉末年雍州南安郡狟道县(今甘肃天水市武山县四门镇)人。曹操部下重要将领。官至立义将军,拜关门亭侯。谥曰壮侯。有一子庞会。', + yanwen:'东汉末年河北袁绍部下武将,素有威名。颜良与文丑一起作为袁绍军队的勇将而闻名。建安四年(199),袁绍以颜良、文丑为将,率精卒十万,准备攻许都;次年,兵进黎阳,遣颜良攻白马。终均亡于关羽刀下。', + yuanshao:'字本初,汉族,汝南汝阳人,出身名门望族,自曾祖父起四代有五人位居三公,自己也居三公之上,其家族也因此有“四世三公”之称。曾于初平元年被推举为反董卓联合军的盟主,联军瓦解后,在汉末群雄割据的过程中,袁绍先占据冀州,又先后夺青、并二州,并于建安四年击败了割据幽州的军阀公孙瓒,势力达到顶点;但在建安五年的官渡之战中败于曹操。在平定冀州叛乱之后,于建安七年病死。', + xuhuang:'字公明,河东杨人。三国时期曹魏名将,本为杨奉帐下骑都尉,杨奉被曹操击败后转投曹操,在曹操手下多立功勋,参与官渡、赤壁、关中征伐、汉中征伐等几次重大战役。', + caopi:'字子桓,三国时期著名的政治家、文学家,曹魏的开国皇帝,公元220-226年在位。沛国谯人,魏武帝曹操与武宣卞皇后的长子。去世后庙号高祖,谥为文皇帝,葬于首阳陵。', + sunjian:'字文台,汉族,吴郡富春人。东汉末期地方军阀,著名将领。史书说他“容貌不凡,性阔达,好奇节”,是大军事家孙武的后裔。汉末群雄之一,三国中吴国的奠基人。孙权建国后,追谥孙坚为武烈皇帝。', + dongzhuo:'字仲颖,陇西临洮人。东汉末年少帝、献帝时权臣,西凉军阀。官至太师、郿侯。其为人残忍嗜杀,倒行逆施,招致群雄联合讨伐,但联合军在董卓迁都长安不久后瓦解。后被其亲信吕布所杀。', + zhurong:'据传为火神祝融氏后裔,南蛮王孟获之妻。武艺超群,善使飞刀,是《三国演义》中写到的唯一真正上过战场的女性。曾与孟获一起抵抗蜀军,在诸葛亮七擒七纵孟获之后,随孟获投降蜀汉。', + menghuo:'中国三国时期南中少数族首领。系东汉末益州建宁郡( 今云南晋宁东 )大姓,身材肥硕。生卒年不详。官至御史中丞。曾被诸葛亮七擒七纵,传为佳话。', + jiaxu:'字文和,武威姑臧人。三国时期魏国著名谋士。曾先后担任三国军阀李傕、张绣、曹操的谋士。官至魏国太尉,谥曰肃侯。', + lusu:'字子敬,汉族,临淮东城人,中国东汉末年东吴的著名军事统帅。他曾为孙权提出鼎足江东的战略规划,因此得到孙权的赏识,于周瑜死后代替周瑜领兵,守陆口。曾单刀赴会关羽于荆州。', + zhanghe:'字儁乂,河间鄚人。三国时期魏国名将。官渡之战时,本为袁绍部将的张郃投降了曹操,并在曹操帐下多立功勋,于曹魏建立后加封为征西车骑将军。诸葛亮六出祁山之间,张郃多次抵御蜀军的进攻,于公元231年在木门道被诸葛亮设伏射死。后谥曰壮侯。为曹魏“五子良将”之一。', + dengai:'字士载,义阳棘阳人。三国时期魏国杰出的军事家、将领。公元263年他与钟会分别率军攻打蜀汉,最后他率先进入成都,使得蜀汉灭亡。后因遭到钟会的污蔑和陷害,被司马昭猜忌而被收押,最后与其子邓忠一起被卫瓘派遣的武将田续所杀害。', + jiangwei:'字伯约,天水冀人。三国时期蜀汉著名将领、军事统帅。原为曹魏天水郡的中郎将,后降蜀汉,官至凉州刺史、大将军。诸葛亮去世后继承诸葛亮的遗志,继续率领蜀汉军队北伐曹魏,与曹魏名将陈泰、郭淮、邓艾等多次交手。', + liushan:'蜀汉后主,字公嗣。小名阿斗。刘备之子,母亲是昭烈皇后甘氏。三国时期蜀汉第二位皇帝,公元223-263年在位。公元263年蜀汉被曹魏所灭,刘禅投降曹魏,被封为安乐公。', + sunce:'字伯符,吴郡富春人。孙坚长子,孙权长兄。东汉末年割据江东一带的军阀,汉末群雄之一,三国时期吴国的奠基者。三国演义中绰号“小霸王”,统一江东。在一次狩猎中为刺客所伤,不久后身亡,年仅二十六岁。其弟孙权接掌孙策势力,并于称帝后,追谥孙策为长沙桓王。', + zhangzhang:'张昭,字子布,彭城人,三国时期吴国重臣,善丹青。拜辅吴将军,班亚三司,改封娄侯。年八十一卒,谥曰文侯。张纮,字子纲,广陵人。东吴谋士,和张昭一起合称“二张”。孙策平定江东时亲自登门邀请,张纮遂出仕为官。张纮后来建议孙权迁都秣陵,孙权正在准备时张纮病逝,其年六十岁。孙权为之流涕。', + zuoci:'左慈,字元放,东汉末方士,汉族,庐江(今安徽庐江西南)人。在道教历史上,东汉时期的丹鼎派道术是从他一脉相传。', + caiwenji:'名琰,原字昭姬,晋时避司马昭讳,改字文姬,东汉末年陈留圉(今河南开封杞县)人,东汉大文学家蔡邕的女儿,是中国历史上著名的才女和文学家,精于天文数理,既博学能文,又善诗赋,兼长辩才与音律。代表作有《胡笳十八拍》、《悲愤诗》等 。', + }, + skill:{ + xinjushou:{ + audio:'jushou', + trigger:{player:'phaseEnd'}, + content:function(){ + 'step 0' + player.draw(4); + player.turnOver(); + 'step 1' + player.chooseCard('h',true,'弃置一张手牌,若以此法弃置的是装备牌,则你改为使用之').set('ai',function(card){ + if(get.type(card)=='equip'){ + return 5-get.value(card); + } + return -get.value(card); + }).set('filterCard',lib.filter.cardDiscardable); + 'step 2' + if(result.bool&&result.cards.length){ + if(get.type(result.cards[0])=='equip'){ + player.$give(result.cards,player); + player.lose(result.cards,ui.special); + event.toequip=result.cards[0]; + } + else{ + player.discard(result.cards[0]); + } + } + 'step 3' + if(event.toequip){ + game.delay(); + } + 'step 4' + if(event.toequip){ + player.equip(event.toequip); + } + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(card.name=='guiyoujie') return [0,1]; + } + } + }, + }, + xinjiewei:{ + audio:'yanzheng', + enable:'chooseToUse', + filterCard:true, + position:'e', + viewAs:{name:'wuxie'}, + filter:function(event,player){ + return player.countCards('e')>0; + }, + viewAsFilter:function(player){ + return player.countCards('e')>0; + }, + prompt:'将一张装备区内的牌当无懈可击使用', + check:function(card){return 8-get.equipValue(card)}, + threaten:1.2, + group:'xinjiewei_move', + subSkill:{ + move:{ + trigger:{player:'turnOverEnd'}, + direct:true, + audio:'jiewei', + filter:function(event,player){ + return !player.isTurnedOver()&&player.canMoveCard(); + }, + content:function(){ + "step 0" + player.chooseToDiscard('he',get.prompt('xinjiewei'),'弃置一张牌并移动场上的一张牌',lib.filter.cardDiscardable).set('ai',function(card){ + if(!_status.event.check) return 0; + return 7-get.value(card); + }).set('check',player.canMoveCard(true)).set('logSkill','xinjiewei'); + "step 1" + if(result.bool){ + player.moveCard(true); + } + else{ + event.finish(); + } + } + } + } + }, + jianchu:{ + trigger:{player:'shaBegin'}, + filter:function(event){ + return event.target.countCards('he')>0; + }, + direct:true, + content:function(){ + 'step 0' + player.discardPlayerCard(trigger.target,get.prompt('jianchu',trigger.target)).set('ai',function(button){ + if(!_status.event.att) return 0; + if(get.position(button.link)=='e') return get.value(button.link); + return 1; + }).set('logSkill',['jianchu',trigger.target]).set('att',get.attitude(player,trigger.target)<=0); + 'step 1' + if(result.bool&&result.links&&result.links.length){ + if(get.type(result.links[0])=='equip'){ + trigger.directHit=true; + } + else if(trigger.cards){ + trigger.target.gain(trigger.cards,'gain2','log'); + } + } + } + }, + redimeng:{ + audio:'dimeng', + enable:'phaseUse', + usable:1, + position:'he', + filterCard:function(){ + if(ui.selected.targets.length==2) return false; + return true; + }, + selectCard:[0,Infinity], + selectTarget:2, + complexCard:true, + complexSelect:true, + filterTarget:function(card,player,target){ + if(player==target) return false; + if(ui.selected.targets.length==0) return true; + return (Math.abs(ui.selected.targets[0].countCards('h')-target.countCards('h'))== + ui.selected.cards.length); + }, + multitarget:true, + multiline:true, + content:function(){ + 'step 0' + var cards=targets[0].getCards('h').concat(targets[1].getCards('h')); + var dialog=ui.create.dialog('缔盟',true); + if(player.isUnderControl(true)||targets[0].isUnderControl(true)||targets[1].isUnderControl(true)){ + dialog.add(cards); + dialog.seeing=true; + } + else{ + dialog.add([cards,'blank']); + } + _status.dieClose.push(dialog); + dialog.videoId=lib.status.videoId++; + game.addVideo('cardDialog',null,['缔盟',get.cardsInfo(cards),dialog.videoId]); + game.broadcast(function(cards,id,player,targets){ + var dialog=ui.create.dialog('缔盟',true); + if(player.isUnderControl(true)||targets[0].isUnderControl(true)||targets[1].isUnderControl(true)){ + dialog.add(cards); + dialog.seeing=true; + } + else{ + dialog.add([cards,'blank']); + } + _status.dieClose.push(dialog); + dialog.videoId=id; + },cards,dialog.videoId,player,targets); - event.current=targets[0]; - event.dialog=dialog; - event.num1=0; - event.num2=0; - game.delay(); - 'step 1' - if(event.dialog.buttons.length>1){ - var next=event.current.chooseButton(true,function(button){ - return get.value(button.link,_status.event.player); - }); - next.set('dialog',event.dialog.videoId); - next.set('closeDialog',false); - next.set('dialogdisplay',true); - } - else{ - event.directButton=event.dialog.buttons[0]; - } - 'step 2' - var dialog=event.dialog; - var card; - if(event.directButton){ - card=event.directButton.link; - } - else{ - card=result.links[0]; - } - for(var i=0;i3; - }); - var player=_status.event.player; - var num=player.countCards('he',function(card){ - return get.value(card)<7; - }); - var count=null; - var from,nh; - if(list.length==0) return null; - list.sort(function(a,b){ - return a.countCards('h')-b.countCards('h'); - }); - if(type==1) return list[0]; - from=list[0]; - nh=from.countCards('h'); + event.current=targets[0]; + event.dialog=dialog; + event.num1=0; + event.num2=0; + game.delay(); + 'step 1' + if(event.dialog.buttons.length>1){ + var next=event.current.chooseButton(true,function(button){ + return get.value(button.link,_status.event.player); + }); + next.set('dialog',event.dialog.videoId); + next.set('closeDialog',false); + next.set('dialogdisplay',true); + } + else{ + event.directButton=event.dialog.buttons[0]; + } + 'step 2' + var dialog=event.dialog; + var card; + if(event.directButton){ + card=event.directButton.link; + } + else{ + card=result.links[0]; + } + for(var i=0;i3; + }); + var player=_status.event.player; + var num=player.countCards('he',function(card){ + return get.value(card)<7; + }); + var count=null; + var from,nh; + if(list.length==0) return null; + list.sort(function(a,b){ + return a.countCards('h')-b.countCards('h'); + }); + if(type==1) return list[0]; + from=list[0]; + nh=from.countCards('h'); - list=game.filterPlayer(function(current){ - return current!=player&&get.attitude(player,current)<1; - }); - if(list.length==0) return null; - list.sort(function(a,b){ - return b.countCards('h')-a.countCards('h'); - }); - for(var i=0;i0; - }, - filterCard:{suit:'club'}, - viewAs:{name:'tiesuo'}, - prompt:'将一张梅花牌当铁锁连环使用', - check:function(card){return 6-get.value(card)}, - ai:{ - order:7.5, - result:{ - target:function(player,target){ - if(ui.selected.targets.length) return 0; - if(target.isLinked()) return 1; - return -1; - } - } - } - }, - lianhuan4:{ - trigger:{player:'useCard'}, - filter:function(event){ - return event.skill=='lianhuan3'&&event.targets.length==1; - }, - forced:true, - popup:false, - content:function(){ - player.draw(); - } - }, - reluanji:{ - audio:'luanji', - enable:'phaseUse', - viewAs:{name:'wanjian'}, - filterCard:function(card,player){ - if(!player.storage.reluanji) return true; - return !player.storage.reluanji.contains(get.suit(card)); - }, - selectCard:2, - check:function(card){ - var player=_status.event.player; - var targets=game.filterPlayer(function(current){ - return player.canUse('wanjian',current); - }); - var num=0; - for(var i=0;i=7){ - if(num<2) return 0; - } - else if(targets.length>=5){ - if(num<1.5) return 0; - } - } - return 6-get.value(card); - }, - ai:{ - basic:{ - order:10 - } - }, - group:['reluanji_count','reluanji_reset','reluanji_respond'], - subSkill:{ - reset:{ - trigger:{player:'phaseAfter'}, - silent:true, - filter:function(event,player){ - return player.storage.reluanji?true:false; - }, - content:function(){ - delete player.storage.reluanji; - } - }, - count:{ - trigger:{player:'useCard'}, - silent:true, - filter:function(event){ - return event.skill=='reluanji'; - }, - content:function(){ - if(!player.storage.reluanji){ - player.storage.reluanji=[]; - } - for(var i=0;i=4&&shas.length>=3){ - num=3; - } - else if(player.hp>=3&&shas.length>=2){ - num=2; - } - else{ - num=1 - } - player.awakenSkill('qimou'); - player.storage.qimou=true; - player.chooseControl('一','二','三','四','五','六',function(){ - return get.cnNumber(_status.event.goon,true); - }).set('prompt','失去任意点体力').set('goon',num); - 'step 1' - var num; - switch(result.control){ - case '一':num=1;break; - case '二':num=2;break; - case '三':num=3;break; - case '四':num=4;break; - case '五':num=5;break; - case '六':num=6;break; - } - player.storage.qimou2=num; - player.loseHp(num); - player.addTempSkill('qimou2'); - }, - ai:{ - order:2, - result:{ - player:function(player){ - if(player.hp==1) return 0; - var shas=player.getCards('h','sha'); - if(!shas.length) return 0; - var card=shas[0]; - if(!lib.filter.cardEnabled(card,player)) return 0; - if(lib.filter.cardUsable(card,player)) return 0; - var mindist; - if(player.hp>=4&&shas.length>=3){ - mindist=4; - } - else if(player.hp>=3&&shas.length>=2){ - mindist=3; - } - else{ - mindist=2; - } - if(game.hasPlayer(function(current){ - return (current.hp<=mindist-1&& - get.distance(player,current,'attack')<=mindist&& - player.canUse(card,current,false)&& - get.effect(current,card,player,player)>0); - })){ - return 1; - } - return 0; - } - } - } - }, - qimou2:{ - onremove:true, - mod:{ - cardUsable:function(card,player,num){ - if(typeof player.storage.qimou2=='number'&&card.name=='sha'){ - return num+player.storage.qimou2; - } - }, - globalFrom:function(from,to,distance){ - if(typeof from.storage.qimou2=='number'){ - return distance-from.storage.qimou2; - } - } - } - }, - xinkuanggu:{ - trigger:{source:'damageEnd'}, - filter:function(event,player){ - return get.distance(player,event.player)<=1&&event.num>0; - }, - direct:true, - audio:'kuanggu', - content:function(){ - 'step 0' - event.num=trigger.num; - 'step 1' - player.chooseDrawRecover(get.prompt('xinkuanggu')).set('logSkill','xinkuanggu'); - 'step 2' - if(result.control!='cancel2'){ - event.num--; - if(event.num>0){ - event.goto(1); - } - } - } - }, - xinliegong:{ - mod:{ - targetInRange:function(card,player,target){ - if(card.name=='sha'&&card.number){ - if(get.distance(player,target)<=card.number) return true; - } - } - }, - audio:'liegong', - trigger:{player:'shaBegin'}, - logTarget:'target', - check:function(event,player){ - return get.attitude(player,event.target)<=0; - }, - filter:function(event,player){ - if(event.target.countCards('h')<=player.countCards('h')) return true; - if(event.target.hp<=player.hp) return true; - return false; - }, - content:function(){ - if(trigger.target.countCards('h')<=player.countCards('h')) trigger.directHit=true; - if(trigger.target.hp>=player.hp) player.addTempSkill('xinliegong2','shaAfter'); - }, - ai:{ - threaten:0.5 - } - }, - xinliegong2:{ - trigger:{source:'damageBegin'}, - filter:function(event){ - return event.card&&event.card.name=='sha'&&event.notLink(); - }, - forced:true, - audio:false, - content:function(){ - trigger.num++; - } - }, - tiaoxin:{ - audio:4, - enable:'phaseUse', - usable:1, - filterTarget:function(card,player,target){ - return target.canUse({name:'sha'},player)&&target.countCards('he'); - }, - content:function(){ - "step 0" - target.chooseToUse({name:'sha'},player,-1,'挑衅:对'+get.translation(player)+'使用一张杀,或令其弃置你的一张牌').set('targetRequired',true); - "step 1" - if(result.bool==false&&target.countCards('he')>0){ - player.discardPlayerCard(target,'he',true); - } - else{ - event.finish(); - } - }, - ai:{ - order:4, - expose:0.2, - result:{ - target:-1, - player:function(player,target){ - if(target.countCards('h')==0) return 0; - if(target.countCards('h')==1) return -0.1; - if(player.hp<=2) return -2; - if(player.countCards('h','shan')==0) return -1; - return -0.5; - } - }, - threaten:1.1 - } - }, - zhiji:{ - skillAnimation:true, - audio:2, - unique:true, - priority:-10, - derivation:'guanxing', - trigger:{player:'phaseBegin'}, - forced:true, - filter:function(event,player){ - if(player.storage.zhiji) return false; - return player.countCards('h')==0; - }, - content:function(){ - "step 0" - player.awakenSkill('zhiji'); - player.chooseControl('zhiji_recover','zhiji_draw',function(event,player){ - if(player.hp>=2) return 'zhiji_draw'; - return 'zhiji_recover'; - }); - "step 1" - if(result.control=='zhiji_draw'){ - player.draw(2); - } - else{ - player.recover(); - } - "step 2" - player.loseMaxHp(); - player.storage.zhiji=true; - if(player.hp>player.maxHp) player.hp=player.maxHp; - player.update(); - player.addSkill('guanxing'); - game.createTrigger('phaseBegin','guanxing',player,trigger); - } - }, - xiangle:{ - audio:2, - trigger:{target:'useCardToBefore'}, - forced:true, - filter:function(event,player){ - return event.card.name=='sha'; - }, - content:function(){ - "step 0" - var eff=get.effect(player,trigger.card,trigger.player,trigger.player); - trigger.player.chooseToDiscard('享乐:弃置一张基本牌,否则杀对'+get.translation(player)+'无效',function(card){ - return get.type(card)=='basic'; - }).set('ai',function(card){ - if(_status.event.eff>0){ - return 10-get.value(card); - } - return 0; - }).set('eff',eff); - "step 1" - if(result.bool==false){ - trigger.cancel(); - } - }, - ai:{ - effect:{ - target:function(card,player,target,current){ - if(card.name=='sha'&&get.attitude(player,target)<0){ - if(_status.event.name=='xiangle') return; - var bs=player.getCards('h',{type:'basic'}); - if(bs.length<2) return 0; - if(player.hasSkill('jiu')||player.hasSkill('tianxianjiu')) return; - if(bs.length<=3&&player.countCards('h','sha')<=1){ - for(var i=0;i0&&!player.hasSkill('fangquan3'); - }, - direct:true, - content:function(){ - "step 0" - var fang=player.hp>=2&&player.countCards('h')<=player.hp+1; - player.chooseTarget(get.prompt('fangquan'),function(card,player,target){ - return target!=player; - }).set('ai',function(target){ - if(!_status.event.fang) return -1; - if(target.hasJudge('lebu')) return -1; - return get.attitude(player,target)-4; - }).set('fang',fang); - "step 1" - if(result.bool){ - player.logSkill('fangquan',result.targets); - trigger.cancel(); - player.addSkill('fangquan2'); - player.storage.fangquan=result.targets[0]; - } - } - }, - fangquan2:{ - trigger:{player:'phaseAfter'}, - forced:true, - popup:false, - audio:false, - priority:-50, - content:function(){ - "step 0" - player.chooseToDiscard(true); - "step 1" - var target=player.storage.fangquan; - target.markSkillCharacter('fangquan',player,'放权','进行一个额外回合'); - target.insertPhase(); - target.addSkill('fangquan3'); - player.removeSkill('fangquan2'); - delete player.storage.fangquan; - } - }, - fangquan3:{ - trigger:{player:['phaseAfter','phaseCancelled']}, - forced:true, - popup:false, - audio:false, - content:function(){ - player.unmarkSkill('fangquan'); - player.removeSkill('fangquan3'); - } - }, - ruoyu:{ - skillAnimation:true, - audio:2, - unique:true, - zhuSkill:true, - keepSkill:true, - derivation:'jijiang', - trigger:{player:'phaseBegin'}, - forced:true, - filter:function(event,player){ - if(!player.hasZhuSkill('ruoyu'))return false; - if(player.storage.ruoyu) return false; - return player.isMinHp(); - }, - content:function(){ - player.storage.ruoyu=true; - player.maxHp++; - player.update(); - player.recover(); - if(player.hasSkill('ruoyu')){ - player.addSkill('jijiang'); - } - else{ - player.addAdditionalSkill('ruoyu','jijiang'); - } - if(!player.isZhu){ - player.storage.zhuSkill_ruoyu=['jijiang']; - } - else{ - event.trigger('zhuUpdate'); - } - player.awakenSkill('ruoyu'); - } - }, - qiaobian:{ - audio:2, - group:['qiaobian1','qiaobian2','qiaobian3','qiaobian4'], - ai:{ - threaten:3 - } - }, - qiaobian1:{ - audio:2, - trigger:{player:'phaseJudgeBefore'}, - filter:function(event,player){ - return player.countCards('h')>0; - }, - direct:true, - frequent:true, - content:function(){ - "step 0" - if(player.countCards('j')==0&&(!event.isMine()||!lib.config.autoskilllist.contains('qiaobian1'))){ - event.finish(); - } - else{ - var next=player.chooseToDiscard(get.prompt('qiaobian'),'弃置一张手牌并跳过判定阶段'); - next.set('ai',get.unuseful2); - next.set('logSkill','qiaobian'); - } - "step 1" - if(result.bool){ - trigger.cancel(); - } - } - }, - qiaobian2:{ - audio:2, - trigger:{player:'phaseDrawBefore'}, - filter:function(event,player){ - return player.countCards('h')>0; - }, - direct:true, - content:function(){ - "step 0" - var check,i,num=0,num2=0,players=game.filterPlayer(); - for(i=0;i=2&&num2>0); + list=game.filterPlayer(function(current){ + return current!=player&&get.attitude(player,current)<1; + }); + if(list.length==0) return null; + list.sort(function(a,b){ + return b.countCards('h')-a.countCards('h'); + }); + for(var i=0;i0; + }, + filterCard:{suit:'club'}, + viewAs:{name:'tiesuo'}, + prompt:'将一张梅花牌当铁锁连环使用', + check:function(card){return 6-get.value(card)}, + ai:{ + order:7.5, + result:{ + target:function(player,target){ + if(ui.selected.targets.length) return 0; + if(target.isLinked()) return 1; + return -1; + } + } + } + }, + lianhuan4:{ + trigger:{player:'useCard'}, + filter:function(event){ + return event.skill=='lianhuan3'&&event.targets.length==1; + }, + forced:true, + popup:false, + content:function(){ + player.draw(); + } + }, + reluanji:{ + audio:'luanji', + enable:'phaseUse', + viewAs:{name:'wanjian'}, + filterCard:function(card,player){ + if(!player.storage.reluanji) return true; + return !player.storage.reluanji.contains(get.suit(card)); + }, + selectCard:2, + check:function(card){ + var player=_status.event.player; + var targets=game.filterPlayer(function(current){ + return player.canUse('wanjian',current); + }); + var num=0; + for(var i=0;i=7){ + if(num<2) return 0; + } + else if(targets.length>=5){ + if(num<1.5) return 0; + } + } + return 6-get.value(card); + }, + ai:{ + basic:{ + order:10 + } + }, + group:['reluanji_count','reluanji_reset','reluanji_respond'], + subSkill:{ + reset:{ + trigger:{player:'phaseAfter'}, + silent:true, + filter:function(event,player){ + return player.storage.reluanji?true:false; + }, + content:function(){ + delete player.storage.reluanji; + } + }, + count:{ + trigger:{player:'useCard'}, + silent:true, + filter:function(event){ + return event.skill=='reluanji'; + }, + content:function(){ + if(!player.storage.reluanji){ + player.storage.reluanji=[]; + } + for(var i=0;i=4&&shas.length>=3){ + num=3; + } + else if(player.hp>=3&&shas.length>=2){ + num=2; + } + else{ + num=1 + } + player.awakenSkill('qimou'); + player.storage.qimou=true; + player.chooseControl('一','二','三','四','五','六',function(){ + return get.cnNumber(_status.event.goon,true); + }).set('prompt','失去任意点体力').set('goon',num); + 'step 1' + var num; + switch(result.control){ + case '一':num=1;break; + case '二':num=2;break; + case '三':num=3;break; + case '四':num=4;break; + case '五':num=5;break; + case '六':num=6;break; + } + player.storage.qimou2=num; + player.loseHp(num); + player.addTempSkill('qimou2'); + }, + ai:{ + order:2, + result:{ + player:function(player){ + if(player.hp==1) return 0; + var shas=player.getCards('h','sha'); + if(!shas.length) return 0; + var card=shas[0]; + if(!lib.filter.cardEnabled(card,player)) return 0; + if(lib.filter.cardUsable(card,player)) return 0; + var mindist; + if(player.hp>=4&&shas.length>=3){ + mindist=4; + } + else if(player.hp>=3&&shas.length>=2){ + mindist=3; + } + else{ + mindist=2; + } + if(game.hasPlayer(function(current){ + return (current.hp<=mindist-1&& + get.distance(player,current,'attack')<=mindist&& + player.canUse(card,current,false)&& + get.effect(current,card,player,player)>0); + })){ + return 1; + } + return 0; + } + } + } + }, + qimou2:{ + onremove:true, + mod:{ + cardUsable:function(card,player,num){ + if(typeof player.storage.qimou2=='number'&&card.name=='sha'){ + return num+player.storage.qimou2; + } + }, + globalFrom:function(from,to,distance){ + if(typeof from.storage.qimou2=='number'){ + return distance-from.storage.qimou2; + } + } + } + }, + xinkuanggu:{ + trigger:{source:'damageEnd'}, + filter:function(event,player){ + return get.distance(player,event.player)<=1&&event.num>0; + }, + direct:true, + audio:'kuanggu', + content:function(){ + 'step 0' + event.num=trigger.num; + 'step 1' + player.chooseDrawRecover(get.prompt('xinkuanggu')).set('logSkill','xinkuanggu'); + 'step 2' + if(result.control!='cancel2'){ + event.num--; + if(event.num>0){ + event.goto(1); + } + } + } + }, + xinliegong:{ + mod:{ + targetInRange:function(card,player,target){ + if(card.name=='sha'&&card.number){ + if(get.distance(player,target)<=card.number) return true; + } + } + }, + audio:'liegong', + trigger:{player:'shaBegin'}, + logTarget:'target', + check:function(event,player){ + return get.attitude(player,event.target)<=0; + }, + filter:function(event,player){ + if(event.target.countCards('h')<=player.countCards('h')) return true; + if(event.target.hp<=player.hp) return true; + return false; + }, + content:function(){ + if(trigger.target.countCards('h')<=player.countCards('h')) trigger.directHit=true; + if(trigger.target.hp>=player.hp) player.addTempSkill('xinliegong2','shaAfter'); + }, + ai:{ + threaten:0.5 + } + }, + xinliegong2:{ + trigger:{source:'damageBegin'}, + filter:function(event){ + return event.card&&event.card.name=='sha'&&event.notLink(); + }, + forced:true, + audio:false, + content:function(){ + trigger.num++; + } + }, + tiaoxin:{ + audio:4, + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return target.canUse({name:'sha'},player)&&target.countCards('he'); + }, + content:function(){ + "step 0" + target.chooseToUse({name:'sha'},player,-1,'挑衅:对'+get.translation(player)+'使用一张杀,或令其弃置你的一张牌').set('targetRequired',true); + "step 1" + if(result.bool==false&&target.countCards('he')>0){ + player.discardPlayerCard(target,'he',true); + } + else{ + event.finish(); + } + }, + ai:{ + order:4, + expose:0.2, + result:{ + target:-1, + player:function(player,target){ + if(target.countCards('h')==0) return 0; + if(target.countCards('h')==1) return -0.1; + if(player.hp<=2) return -2; + if(player.countCards('h','shan')==0) return -1; + return -0.5; + } + }, + threaten:1.1 + } + }, + zhiji:{ + skillAnimation:true, + audio:2, + unique:true, + priority:-10, + derivation:'guanxing', + trigger:{player:'phaseBegin'}, + forced:true, + filter:function(event,player){ + if(player.storage.zhiji) return false; + return player.countCards('h')==0; + }, + content:function(){ + "step 0" + player.awakenSkill('zhiji'); + player.chooseControl('zhiji_recover','zhiji_draw',function(event,player){ + if(player.hp>=2) return 'zhiji_draw'; + return 'zhiji_recover'; + }); + "step 1" + if(result.control=='zhiji_draw'){ + player.draw(2); + } + else{ + player.recover(); + } + "step 2" + player.loseMaxHp(); + player.storage.zhiji=true; + if(player.hp>player.maxHp) player.hp=player.maxHp; + player.update(); + player.addSkill('guanxing'); + game.createTrigger('phaseBegin','guanxing',player,trigger); + } + }, + xiangle:{ + audio:2, + trigger:{target:'useCardToBefore'}, + forced:true, + filter:function(event,player){ + return event.card.name=='sha'; + }, + content:function(){ + "step 0" + var eff=get.effect(player,trigger.card,trigger.player,trigger.player); + trigger.player.chooseToDiscard('享乐:弃置一张基本牌,否则杀对'+get.translation(player)+'无效',function(card){ + return get.type(card)=='basic'; + }).set('ai',function(card){ + if(_status.event.eff>0){ + return 10-get.value(card); + } + return 0; + }).set('eff',eff); + "step 1" + if(result.bool==false){ + trigger.cancel(); + } + }, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(card.name=='sha'&&get.attitude(player,target)<0){ + if(_status.event.name=='xiangle') return; + var bs=player.getCards('h',{type:'basic'}); + if(bs.length<2) return 0; + if(player.hasSkill('jiu')||player.hasSkill('tianxianjiu')) return; + if(bs.length<=3&&player.countCards('h','sha')<=1){ + for(var i=0;i0&&!player.hasSkill('fangquan3'); + }, + direct:true, + content:function(){ + "step 0" + var fang=player.hp>=2&&player.countCards('h')<=player.hp+1; + player.chooseTarget(get.prompt('fangquan'),function(card,player,target){ + return target!=player; + }).set('ai',function(target){ + if(!_status.event.fang) return -1; + if(target.hasJudge('lebu')) return -1; + return get.attitude(player,target)-4; + }).set('fang',fang); + "step 1" + if(result.bool){ + player.logSkill('fangquan',result.targets); + trigger.cancel(); + player.addSkill('fangquan2'); + player.storage.fangquan=result.targets[0]; + } + } + }, + fangquan2:{ + trigger:{player:'phaseAfter'}, + forced:true, + popup:false, + audio:false, + priority:-50, + content:function(){ + "step 0" + player.chooseToDiscard(true); + "step 1" + var target=player.storage.fangquan; + target.markSkillCharacter('fangquan',player,'放权','进行一个额外回合'); + target.insertPhase(); + target.addSkill('fangquan3'); + player.removeSkill('fangquan2'); + delete player.storage.fangquan; + } + }, + fangquan3:{ + trigger:{player:['phaseAfter','phaseCancelled']}, + forced:true, + popup:false, + audio:false, + content:function(){ + player.unmarkSkill('fangquan'); + player.removeSkill('fangquan3'); + } + }, + ruoyu:{ + skillAnimation:true, + audio:2, + unique:true, + zhuSkill:true, + keepSkill:true, + derivation:'jijiang', + trigger:{player:'phaseBegin'}, + forced:true, + filter:function(event,player){ + if(!player.hasZhuSkill('ruoyu'))return false; + if(player.storage.ruoyu) return false; + return player.isMinHp(); + }, + content:function(){ + player.storage.ruoyu=true; + player.maxHp++; + player.update(); + player.recover(); + if(player.hasSkill('ruoyu')){ + player.addSkill('jijiang'); + } + else{ + player.addAdditionalSkill('ruoyu','jijiang'); + } + if(!player.isZhu){ + player.storage.zhuSkill_ruoyu=['jijiang']; + } + else{ + event.trigger('zhuUpdate'); + } + player.awakenSkill('ruoyu'); + } + }, + qiaobian:{ + audio:2, + group:['qiaobian1','qiaobian2','qiaobian3','qiaobian4'], + ai:{ + threaten:3 + } + }, + qiaobian1:{ + audio:2, + trigger:{player:'phaseJudgeBefore'}, + filter:function(event,player){ + return player.countCards('h')>0; + }, + direct:true, + frequent:true, + content:function(){ + "step 0" + if(player.countCards('j')==0&&(!event.isMine()||!lib.config.autoskilllist.contains('qiaobian1'))){ + event.finish(); + } + else{ + var next=player.chooseToDiscard(get.prompt('qiaobian'),'弃置一张手牌并跳过判定阶段'); + next.set('ai',get.unuseful2); + next.set('logSkill','qiaobian'); + } + "step 1" + if(result.bool){ + trigger.cancel(); + } + } + }, + qiaobian2:{ + audio:2, + trigger:{player:'phaseDrawBefore'}, + filter:function(event,player){ + return player.countCards('h')>0; + }, + direct:true, + content:function(){ + "step 0" + var check,i,num=0,num2=0,players=game.filterPlayer(); + for(i=0;i=2&&num2>0); - player.chooseToDiscard(get.prompt('qiaobian'),'弃置一张手牌并跳过摸牌阶段,然后可以获得至多两名角色各一张手牌',lib.filter.cardDiscardable).set('ai',function(card){ - if(!_status.event.check) return 0; - return 7-get.value(card); - }).set('check',check).set('logSkill','qiaobian'); - "step 1" - if(result.bool){ - trigger.cancel(); - player.chooseTarget([1,2],'获得至多两名角色各一张手牌',function(card,player,target){ - return target!=player&&target.countCards('h'); - }).set('ai',function(target){ - return 1-get.attitude(_status.event.player,target); - }) - } - else{ - event.finish(); - } - "step 2" - if(result.bool){ - player.line(result.targets,'green'); - event.targets=result.targets; - if(!event.targets.length) event.finish(); - } - else{ - event.finish(); - } - "step 3" - player.gainMultiple(event.targets); - "step 4" - game.delay(); - }, - ai:{ - expose:0.2 - } - }, - qiaobian3:{ - audio:2, - trigger:{player:'phaseUseBefore'}, - filter:function(event,player){ - return player.countCards('h')>0; - }, - direct:true, - content:function(){ - "step 0" - var check; - if(!player.canMoveCard(true)){ - check=false; - } - else{ - check=game.hasPlayer(function(current){ - return get.attitude(player,current)>0&¤t.countCards('j'); - }); - if(!check){ - if(player.countCards('h')>player.hp+1){ - check=false; - } - else if(player.countCards('h',{name:['wuzhong']})){ - check=false; - } - else{ - check=true; - } - } - } - player.chooseToDiscard(get.prompt('qiaobian'),'弃置一张手牌并跳过出牌阶段,然后可以移动场上的一张牌',lib.filter.cardDiscardable).set('ai',function(card){ - if(!_status.event.check) return 0; - return 7-get.value(card); - }).set('check',check).set('logSkill','qiaobian'); - "step 1" - if(result.bool){ - trigger.cancel(); - player.moveCard(); - } - else{ - event.finish(); - } - }, - ai:{ - expose:0.2 - } - }, - qiaobian4:{ - audio:2, - trigger:{player:'phaseDiscardBefore'}, - direct:true, - filter:function(event,player){ - return player.countCards('h')>0; - }, - content:function(){ - "step 0" - var discard=player.countCards('h')>player.hp; - var next=player.chooseToDiscard(get.prompt('qiaobian'),'弃置一张手牌并跳过弃牌阶段'); - next.logSkill='qiaobian'; - next.ai=function(card){ - if(discard){ - return 100-get.useful(card); - } - else{ - return -1; - } - }; - "step 1" - if(result.bool){ - trigger.cancel(); - } - } - }, - tuntian:{ - audio:2, - trigger:{player:'loseEnd'}, - frequent:true, - filter:function(event,player){ - if(player==_status.currentPhase) return false; - for(var i=0;i0&&card.name=='juedou') return; - if(get.tag(card,'damage')&&target.hasSkillTag('maixie')) return; - if(target.countCards('h')==0) return 2; - if(target.hasSkill('ziliang')) return 0.7; - if(get.mode()=='guozhan') return 0.5; - return [0.5,Math.max(target.countCards('h')/4,target.countCards('h','sha')+target.countCards('h','shan'))]; - } - } - }, - threaten:function(player,target){ - if(target.countCards('h')==0) return 2; - return 0.5; - }, - nodiscard:true, - nolose:true - } - }, - zaoxian:{ - skillAnimation:true, - audio:2, - unique:true, - trigger:{player:'phaseBegin'}, - forced:true, - filter:function(event,player){ - if(player.storage.tuntian) return player.storage.tuntian.length>=3&&!player.storage.zaoxian; - }, - derivation:'jixi', - content:function(){ - player.loseMaxHp(); - player.addSkill('jixi'); - player.storage.zaoxian=true; - player.awakenSkill('zaoxian'); - } - }, - jixi:{ - audio:2, - enable:'phaseUse', - filter:function(event,player){ - return player.storage.tuntian.length>0; - }, - chooseButton:{ - dialog:function(event,player){ - return ui.create.dialog('急袭',player.storage.tuntian,'hidden'); - }, - backup:function(links,player){ - return { - filterCard:function(){return false}, - selectCard:-1, - viewAs:{name:'shunshou'}, - cards:links, - onuse:function(result,player){ - result.cards=lib.skill[result.skill].cards; - var card=result.cards[0]; - player.storage.tuntian.remove(card); - player.syncStorage('tuntian'); - if(!player.storage.tuntian.length){ - player.unmarkSkill('tuntian'); - } - else{ - player.markSkill('tuntian'); - } - player.logSkill('jixi',result.targets); - } - } - }, - prompt:function(links,player){ - return '选择急袭的目标'; - } - }, - ai:{ - order:10, - result:{ - player:function(player){ - return player.storage.tuntian.length-1; - } - } - } - }, - jiang:{ - audio:2, - trigger:{player:['shaBefore','juedouBefore'],target:['shaBefore','juedouBefore']}, - filter:function(event,player){ - if(event.card.name=='juedou') return true; - return get.color(event.card)=='red'; - }, - frequent:true, - content:function(){ - player.draw(); - }, - ai:{ - effect:{ - target:function(card,player,target){ - if(card.name=='sha'&&get.color(card)=='red') return [1,0.6]; - }, - player:function(card,player,target){ - if(card.name=='sha'&&get.color(card)=='red') return [1,1]; - } - } - } - }, - hunzi:{ - skillAnimation:true, - audio:2, - derivation:['reyingzi','yinghun'], - unique:true, - trigger:{player:'phaseBegin'}, - filter:function(event,player){ - return player.hp==1&&!player.storage.hunzi; - }, - forced:true, - priority:3, - content:function(){ - player.loseMaxHp(); - player.addSkill('reyingzi'); - player.addSkill('yinghun'); - player.awakenSkill('hunzi'); - player.storage.hunzi=true; - game.createTrigger('phaseBegin','yinghun',player,trigger); - }, - ai:{ - threaten:function(player,target){ - if(target.hp==1) return 2; - return 0.5; - }, - maixie:true, - effect:{ - target:function(card,player,target){ - if(!target.hasFriend()) return; - if(get.tag(card,'damage')==1&&target.hp==2&&!target.isTurnedOver()&& - _status.currentPhase!=target&&get.distance(_status.currentPhase,target,'absolute')<=3) return [0.5,1]; - } - } - } - }, - zhiba:{ - unique:true, - global:'zhiba2', - zhuSkill:true, - }, - zhiba2:{ - audio:2, - forceaudio:true, - enable:'phaseUse', - filter:function(event,player){ - if(player.group!='wu'||player.countCards('h')==0) return false; - return game.hasPlayer(function(target){ - return target!=player&&target.hasZhuSkill('zhiba',player)&&target.countCards('h')>0; - }); - }, - filterTarget:function(card,player,target){ - return target!=player&&target.hasZhuSkill('zhiba',player)&&target.countCards('h')>0; - }, - usable:1, - content:function(){ - "step 0" - if(target.storage.hunzi){ - target.chooseControl('拒绝','不拒绝').set('prompt','是否拒绝制霸拼点?').set('choice',get.attitude(target,player)<=0); - } - else{ - event.forced=true; - } - "step 1" - if(!event.forced&&result.control=='拒绝'){ - game.log(target,'拒绝了拼点'); - target.chat('拒绝'); - event.finish(); - return; - } - player.chooseToCompare(target,function(card){ - if(card.name=='du') return 20; - var player=get.owner(card); - var target=_status.event.getParent().target; - if(player!=target&&get.attitude(player,target)>0){ - return -get.number(card); - } - return get.number(card); - }).set('preserve','lose'); - "step 2" - if(result.bool==false){ - target.gain([result.player,result.target]); - target.$gain2([result.player,result.target]); - } - }, - ai:{ - basic:{ - order:1 - }, - expose:0.2, - result:{ - target:function(player,target){ - if(player.countCards('h','du')&&get.attitude(player,target)<0) return -1; - if(player.countCards('h')<=player.hp) return 0; - var maxnum=0; - var cards2=target.getCards('h'); - for(var i=0;imaxnum){ - maxnum=cards2[i].number; - } - } - if(maxnum>10) maxnum=10; - if(maxnum<5&&cards2.length>1) maxnum=5; - var cards=player.getCards('h'); - for(var i=0;i0; - }, - filterCard:function(card){ - return get.type(card)=='equip'; - }, - check:function(card){ - var player=_status.currentPhase; - if(player.countCards('he',{subtype:get.subtype(card)})>1){ - return 11-get.equipValue(card); - } - return 6-get.value(card); - }, - filterTarget:function(card,player,target){ - if(target.isMin()) return false; - return player!=target&&!target.getEquip(card); - }, - content:function(){ - target.equip(cards[0]); - player.draw(); - }, - discard:false, - prepare:function(cards,player,targets){ - player.$give(cards,targets[0],false); - }, - ai:{ - basic:{ - order:10 - }, - result:{ - target:3, - }, - threaten:1.3 - } - }, - guzheng:{ - audio:2, - unique:true, - gainable:true, - trigger:{global:'discardAfter'}, - filter:function(event,player){ - if(event.player!=player&&event.player.classList.contains('dead')==false&& - event.cards&&event.cards.length&&event.getParent(2).name=='phaseDiscard'){ - for(var i=0;i0){ - if(du&&num<=3){ - return false; - } - return true; - } - if(du) return true; - return num>2; - }, - direct:true, - content:function(){ - "step 0" - event.cards=trigger.cards.slice(0); - for(var i=0;i0&&att2<=0; - }, - content:function(){ - "step 0" - var next=player.chooseToDiscard('he',get.prompt('beige')); - var check=lib.skill.beige.checkx(trigger,player); - next.set('ai',function(card){ - if(_status.event.goon) return 8-get.value(card); - return 0; - }); - next.set('logSkill','beige'); - next.set('goon',check); - "step 1" - if(result.bool){ - trigger.player.judge(); - } - else{ - event.finish(); - } - "step 2" - switch(get.suit(result.card)){ - case 'heart':trigger.player.recover();break; - case 'diamond':trigger.player.draw(2);break; - case 'club':trigger.source.chooseToDiscard('he',2,true);break; - case 'spade':trigger.source.turnOver();break; - } - }, - ai:{ - expose:0.3 - } - }, - duanchang:{ - audio:4, - forbid:['boss'], - trigger:{player:'dieBegin'}, - forced:true, - filter:function(event){ - return event.source&&event.source.isIn(); - }, - content:function(){ - trigger.source.clearSkills(); - }, - logTarget:'source', - ai:{ - threaten:function(player,target){ - if(target.hp==1) return 0.2; - return 1.5; - }, - effect:{ - target:function(card,player,target,current){ - if(!target.hasFriend()) return; - if(target.hp<=1&&get.tag(card,'damage')) return [1,0,0,-2]; - } - } - } - }, - huashen:{ - unique:true, - forbid:['guozhan'], - init:function(player){ - player.storage.huashen={ - list:[], - shown:[], - owned:{}, - player:player, - } - }, - get:function(player,num){ - if(typeof num!='number') num=1; - while(num--){ - var name=player.storage.huashen.list.randomRemove(); - var skills=lib.character[name][3].slice(0); - for(var i=0;i
【'+get.translation(skill)+ - '】
'+lib.translate[skill+'_info']+'
'); - } - } - } - }, - mark:true - }, - huashen1:{ - trigger:{global:'gameStart',player:'enterGame'}, - forced:true, - popup:false, - priority:10, - filter:function(event,player){ - return !player.storage.huasheninited; - }, - content:function(){ - for(var i in lib.character){ - if(lib.filter.characterDisabled2(i)) continue; - var add=false; - for(var j=0;j0; + }, + direct:true, + content:function(){ + "step 0" + var check; + if(!player.canMoveCard(true)){ + check=false; + } + else{ + check=game.hasPlayer(function(current){ + return get.attitude(player,current)>0&¤t.countCards('j'); + }); + if(!check){ + if(player.countCards('h')>player.hp+1){ + check=false; + } + else if(player.countCards('h',{name:['wuzhong']})){ + check=false; + } + else{ + check=true; + } + } + } + player.chooseToDiscard(get.prompt('qiaobian'),'弃置一张手牌并跳过出牌阶段,然后可以移动场上的一张牌',lib.filter.cardDiscardable).set('ai',function(card){ + if(!_status.event.check) return 0; + return 7-get.value(card); + }).set('check',check).set('logSkill','qiaobian'); + "step 1" + if(result.bool){ + trigger.cancel(); + player.moveCard(); + } + else{ + event.finish(); + } + }, + ai:{ + expose:0.2 + } + }, + qiaobian4:{ + audio:2, + trigger:{player:'phaseDiscardBefore'}, + direct:true, + filter:function(event,player){ + return player.countCards('h')>0; + }, + content:function(){ + "step 0" + var discard=player.countCards('h')>player.hp; + var next=player.chooseToDiscard(get.prompt('qiaobian'),'弃置一张手牌并跳过弃牌阶段'); + next.logSkill='qiaobian'; + next.ai=function(card){ + if(discard){ + return 100-get.useful(card); + } + else{ + return -1; + } + }; + "step 1" + if(result.bool){ + trigger.cancel(); + } + } + }, + tuntian:{ + audio:2, + trigger:{player:'loseEnd'}, + frequent:true, + filter:function(event,player){ + if(player==_status.currentPhase) return false; + for(var i=0;i0&&card.name=='juedou') return; + if(get.tag(card,'damage')&&target.hasSkillTag('maixie')) return; + if(target.countCards('h')==0) return 2; + if(target.hasSkill('ziliang')) return 0.7; + if(get.mode()=='guozhan') return 0.5; + return [0.5,Math.max(target.countCards('h')/4,target.countCards('h','sha')+target.countCards('h','shan'))]; + } + } + }, + threaten:function(player,target){ + if(target.countCards('h')==0) return 2; + return 0.5; + }, + nodiscard:true, + nolose:true + } + }, + zaoxian:{ + skillAnimation:true, + audio:2, + unique:true, + trigger:{player:'phaseBegin'}, + forced:true, + filter:function(event,player){ + if(player.storage.tuntian) return player.storage.tuntian.length>=3&&!player.storage.zaoxian; + }, + derivation:'jixi', + content:function(){ + player.loseMaxHp(); + player.addSkill('jixi'); + player.storage.zaoxian=true; + player.awakenSkill('zaoxian'); + } + }, + jixi:{ + audio:2, + enable:'phaseUse', + filter:function(event,player){ + return player.storage.tuntian.length>0; + }, + chooseButton:{ + dialog:function(event,player){ + return ui.create.dialog('急袭',player.storage.tuntian,'hidden'); + }, + backup:function(links,player){ + return { + filterCard:function(){return false}, + selectCard:-1, + viewAs:{name:'shunshou'}, + cards:links, + onuse:function(result,player){ + result.cards=lib.skill[result.skill].cards; + var card=result.cards[0]; + player.storage.tuntian.remove(card); + player.syncStorage('tuntian'); + if(!player.storage.tuntian.length){ + player.unmarkSkill('tuntian'); + } + else{ + player.markSkill('tuntian'); + } + player.logSkill('jixi',result.targets); + } + } + }, + prompt:function(links,player){ + return '选择急袭的目标'; + } + }, + ai:{ + order:10, + result:{ + player:function(player){ + return player.storage.tuntian.length-1; + } + } + } + }, + jiang:{ + audio:2, + trigger:{player:['shaBefore','juedouBefore'],target:['shaBefore','juedouBefore']}, + filter:function(event,player){ + if(event.card.name=='juedou') return true; + return get.color(event.card)=='red'; + }, + frequent:true, + content:function(){ + player.draw(); + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(card.name=='sha'&&get.color(card)=='red') return [1,0.6]; + }, + player:function(card,player,target){ + if(card.name=='sha'&&get.color(card)=='red') return [1,1]; + } + } + } + }, + hunzi:{ + skillAnimation:true, + audio:2, + derivation:['reyingzi','yinghun'], + unique:true, + trigger:{player:'phaseBegin'}, + filter:function(event,player){ + return player.hp==1&&!player.storage.hunzi; + }, + forced:true, + priority:3, + content:function(){ + player.loseMaxHp(); + player.addSkill('reyingzi'); + player.addSkill('yinghun'); + player.awakenSkill('hunzi'); + player.storage.hunzi=true; + game.createTrigger('phaseBegin','yinghun',player,trigger); + }, + ai:{ + threaten:function(player,target){ + if(target.hp==1) return 2; + return 0.5; + }, + maixie:true, + effect:{ + target:function(card,player,target){ + if(!target.hasFriend()) return; + if(get.tag(card,'damage')==1&&target.hp==2&&!target.isTurnedOver()&& + _status.currentPhase!=target&&get.distance(_status.currentPhase,target,'absolute')<=3) return [0.5,1]; + } + } + } + }, + zhiba:{ + unique:true, + global:'zhiba2', + zhuSkill:true, + }, + zhiba2:{ + audio:2, + forceaudio:true, + enable:'phaseUse', + filter:function(event,player){ + if(player.group!='wu'||player.countCards('h')==0) return false; + return game.hasPlayer(function(target){ + return target!=player&&target.hasZhuSkill('zhiba',player)&&target.countCards('h')>0; + }); + }, + filterTarget:function(card,player,target){ + return target!=player&&target.hasZhuSkill('zhiba',player)&&target.countCards('h')>0; + }, + usable:1, + content:function(){ + "step 0" + if(target.storage.hunzi){ + target.chooseControl('拒绝','不拒绝').set('prompt','是否拒绝制霸拼点?').set('choice',get.attitude(target,player)<=0); + } + else{ + event.forced=true; + } + "step 1" + if(!event.forced&&result.control=='拒绝'){ + game.log(target,'拒绝了拼点'); + target.chat('拒绝'); + event.finish(); + return; + } + player.chooseToCompare(target,function(card){ + if(card.name=='du') return 20; + var player=get.owner(card); + var target=_status.event.getParent().target; + if(player!=target&&get.attitude(player,target)>0){ + return -get.number(card); + } + return get.number(card); + }).set('preserve','lose'); + "step 2" + if(result.bool==false){ + target.gain([result.player,result.target]); + target.$gain2([result.player,result.target]); + } + }, + ai:{ + basic:{ + order:1 + }, + expose:0.2, + result:{ + target:function(player,target){ + if(player.countCards('h','du')&&get.attitude(player,target)<0) return -1; + if(player.countCards('h')<=player.hp) return 0; + var maxnum=0; + var cards2=target.getCards('h'); + for(var i=0;imaxnum){ + maxnum=cards2[i].number; + } + } + if(maxnum>10) maxnum=10; + if(maxnum<5&&cards2.length>1) maxnum=5; + var cards=player.getCards('h'); + for(var i=0;i0; + }, + filterCard:function(card){ + return get.type(card)=='equip'; + }, + check:function(card){ + var player=_status.currentPhase; + if(player.countCards('he',{subtype:get.subtype(card)})>1){ + return 11-get.equipValue(card); + } + return 6-get.value(card); + }, + filterTarget:function(card,player,target){ + if(target.isMin()) return false; + return player!=target&&!target.getEquip(card); + }, + content:function(){ + target.equip(cards[0]); + player.draw(); + }, + discard:false, + prepare:function(cards,player,targets){ + player.$give(cards,targets[0],false); + }, + ai:{ + basic:{ + order:10 + }, + result:{ + target:3, + }, + threaten:1.3 + } + }, + guzheng:{ + audio:2, + unique:true, + gainable:true, + trigger:{global:'discardAfter'}, + filter:function(event,player){ + if(event.player!=player&&event.player.classList.contains('dead')==false&& + event.cards&&event.cards.length&&event.getParent(2).name=='phaseDiscard'){ + for(var i=0;i0){ + if(du&&num<=3){ + return false; + } + return true; + } + if(du) return true; + return num>2; + }, + direct:true, + content:function(){ + "step 0" + event.cards=trigger.cards.slice(0); + for(var i=0;i0&&att2<=0; + }, + content:function(){ + "step 0" + var next=player.chooseToDiscard('he',get.prompt('beige')); + var check=lib.skill.beige.checkx(trigger,player); + next.set('ai',function(card){ + if(_status.event.goon) return 8-get.value(card); + return 0; + }); + next.set('logSkill','beige'); + next.set('goon',check); + "step 1" + if(result.bool){ + trigger.player.judge(); + } + else{ + event.finish(); + } + "step 2" + switch(get.suit(result.card)){ + case 'heart':trigger.player.recover();break; + case 'diamond':trigger.player.draw(2);break; + case 'club':trigger.source.chooseToDiscard('he',2,true);break; + case 'spade':trigger.source.turnOver();break; + } + }, + ai:{ + expose:0.3 + } + }, + duanchang:{ + audio:4, + forbid:['boss'], + trigger:{player:'dieBegin'}, + forced:true, + filter:function(event){ + return event.source&&event.source.isIn(); + }, + content:function(){ + trigger.source.clearSkills(); + }, + logTarget:'source', + ai:{ + threaten:function(player,target){ + if(target.hp==1) return 0.2; + return 1.5; + }, + effect:{ + target:function(card,player,target,current){ + if(!target.hasFriend()) return; + if(target.hp<=1&&get.tag(card,'damage')) return [1,0,0,-2]; + } + } + } + }, + huashen:{ + unique:true, + forbid:['guozhan'], + init:function(player){ + player.storage.huashen={ + list:[], + shown:[], + owned:{}, + player:player, + } + }, + get:function(player,num){ + if(typeof num!='number') num=1; + while(num--){ + var name=player.storage.huashen.list.randomRemove(); + var skills=lib.character[name][3].slice(0); + for(var i=0;i
【'+get.translation(skill)+ + '】
'+lib.translate[skill+'_info']+'
'); + } + } + } + }, + mark:true + }, + huashen1:{ + trigger:{global:'gameStart',player:'enterGame'}, + forced:true, + popup:false, + priority:10, + filter:function(event,player){ + return !player.storage.huasheninited; + }, + content:function(){ + for(var i in lib.character){ + if(lib.filter.characterDisabled2(i)) continue; + var add=false; + for(var j=0;j0; - }, - content:function(){ - for(var i=0;i=2; - } - return true; - }, - content:function(){ - "step 0" - trigger.cancel(); - event.cards=get.cards(player.maxHp-player.hp); - player.showCards(event.cards); - "step 1" - var num=0; - for(var i=0;i1; - }, - priority:5, - content:function(){ - "step 0" - player.chooseToCompare(trigger.player); - "step 1" - if(result.bool&&trigger.player.countCards('he')){ - player.gainPlayerCard(trigger.player,true,'he'); - } - } - }, - xingshang:{ - audio:2, - unique:true, - gainable:true, - trigger:{global:'dieEnd'}, - priority:5, - filter:function(event){ - return event.playerCards&&event.playerCards.length>0 - }, - check:function(event){ - for(var i=0;i0){ - if(target.classList.contains('turnedover')) return 1000-target.countCards('h'); - if(player.maxHp-player.hp<3) return -1; - return 100-target.countCards('h'); - } - else{ - if(target.classList.contains('turnedover')) return -1; - if(player.maxHp-player.hp>=3) return -1; - return 1+target.countCards('h'); - } - } - "step 1" - if(result.bool){ - player.logSkill('fangzhu',result.targets); - result.targets[0].draw(player.maxHp-player.hp); - result.targets[0].turnOver(); - } - }, - ai:{ - maixie:true, - maixie_hp:true, - effect:{ - target:function(card,player,target){ - if(get.tag(card,'damage')){ - if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; - if(target.hp<=1) return; - if(!target.hasFriend()) return; - var hastarget=false; - var turnfriend=false; - var players=game.filterPlayer(); - for(var i=0;i0&&players[i].isTurnedOver()){ - hastarget=true; - turnfriend=true; - } - } - if(get.attitude(player,target)>0&&!hastarget) return; - if(turnfriend||target.hp==target.maxHp) return [0.5,1]; - if(target.hp>1) return [1,0.5]; - } - } - } - } - }, - songwei:{ - unique:true, - global:'songwei2', - zhuSkill:true, - }, - songwei2:{ - audio:2, - forceaudio:true, - trigger:{player:'judgeEnd'}, - filter:function(event,player){ - if(player.group!='wei') return false; - if(get.color(event.result.card)!='black') return false; - return game.hasPlayer(function(target){ - return player!=target&&target.hasZhuSkill('songwei',player); - }); - }, - direct:true, - content:function(){ - 'step 0' - var list=game.filterPlayer(function(current){ - return current!=player&¤t.hasZhuSkill('songwei',player); - }); - list.sortBySeat(); - event.list=list; - 'step 1' - if(event.list.length){ - var current=event.list.shift(); - event.current=current; - player.chooseBool(get.prompt('songwei',current)).set('choice',get.attitude(player,current)>0); - } - else{ - event.finish(); - } - 'step 2' - if(result.bool){ - player.logSkill('songwei',event.current); - event.current.draw(); - } - event.goto(1); - } - }, - jiezi:{ - trigger:{global:['phaseDrawSkipped','phaseDrawCancelled']}, - forced:true, - filter:function(event,player){ - return event.player!=player; - }, - content:function(){ - player.draw(); - } - }, - gzduanliang:{ - group:['duanliang1','duanliang2'], - ai:{ - threaten:1.2 - } - }, - duanliang:{ - group:['duanliang1','duanliang3'], - ai:{ - threaten:1.2 - } - }, - duanliang1:{ - audio:2, - enable:'chooseToUse', - filterCard:function(card){ - if(get.type(card)!='basic'&&get.type(card)!='equip') return false; - return get.color(card)=='black'; - }, - filter:function(event,player){ - return player.countCards('he',{type:['basic','equip'],color:'black'}) - }, - position:'he', - viewAs:{name:'bingliang'}, - prompt:'将一黑色的基本牌或装备牌当兵粮寸断使用', - check:function(card){return 6-get.value(card)}, - ai:{ - order:9 - } - }, - duanliang2:{ - mod:{ - targetInRange:function(card,player,target){ - if(card.name=='bingliang'){ - if(get.distance(player,target)<=2) return true; - } - } - } - }, - duanliang3:{ - mod:{ - targetInRange:function(card,player,target){ - if(card.name=='bingliang'){ - if(target.countCards('h')>=player.countCards('h')) return true; - } - } - } - }, - haoshi:{ - audio:2, - trigger:{player:'phaseDrawBegin'}, - threaten:1.4, - check:function(event,player){ - if(player.countCards('h')<=1) return true; - return game.hasPlayer(function(current){ - return current!=player&¤t.isMinHandcard()&&get.attitude(player,current)>0; - }); - }, - content:function(){ - trigger.num+=2; - player.addSkill('haoshi2'); - }, - ai:{ - threaten:2, - ai:{ - noh:true, - skillTagFilter:function(player,tag){ - if(tag=='noh'){ - if(player.countCards('h')!=2) return false; - } - } - } - } - }, - haoshi2:{ - trigger:{player:'phaseDrawEnd'}, - forced:true, - popup:false, - audio:false, - content:function(){ - "step 0" - player.removeSkill('haoshi2'); - if(player.countCards('h')<=5){ - event.finish(); - return; - } - player.chooseCardTarget({ - selectCard:Math.floor(player.countCards('h')/2), - filterTarget:function(card,player,target){ - return target.isMinHandcard(); - }, - forced:true, - ai2:function(target){ - return get.attitude(_status.event.player,target); - } - }); - "step 1" - if(result.targets&&result.targets[0]){ - result.targets[0].gain(result.cards,player); - player.$give(result.cards.length,result.targets[0]); - } - } - }, - dimeng:{ - audio:2, - enable:'phaseUse', - usable:1, - position:'he', - filterCard:function(){ - if(ui.selected.targets.length==2) return false; - return true; - }, - selectCard:[0,Infinity], - selectTarget:2, - complexCard:true, - filterTarget:function(card,player,target){ - if(player==target) return false; - if(ui.selected.targets.length==0) return true; - return (Math.abs(ui.selected.targets[0].countCards('h')-target.countCards('h'))== - ui.selected.cards.length); - }, - multitarget:true, - multiline:true, - complexSelect:true, - content:function(){ - targets[0].swapHandcards(targets[1]); - }, - check:function(card){ - var list=[],player=_status.event.player; - var num=player.countCards('he'); - var count; - var players=game.filterPlayer(); - for(var i=0;i3) list.push(players[i]); - } - list.sort(function(a,b){ - return a.countCards('h')-b.countCards('h'); - }); - if(list.length==0) return -1; - var from=list[0]; - list.length=0; + if(event.triggername=='phaseBegin'){ + (function(){ + var skills=[link]; + var list=[]; + game.expandSkills(skills); + var triggerevent=event._trigger; + var name='phaseBegin'; + for(i=0;i0; + }, + content:function(){ + for(var i=0;i=2; + } + return true; + }, + content:function(){ + "step 0" + trigger.cancel(); + event.cards=get.cards(player.maxHp-player.hp); + player.showCards(event.cards); + "step 1" + var num=0; + for(var i=0;i1; + }, + priority:5, + content:function(){ + "step 0" + player.chooseToCompare(trigger.player); + "step 1" + if(result.bool&&trigger.player.countCards('he')){ + player.gainPlayerCard(trigger.player,true,'he'); + } + } + }, + xingshang:{ + audio:2, + unique:true, + gainable:true, + trigger:{global:'dieEnd'}, + priority:5, + filter:function(event){ + return event.playerCards&&event.playerCards.length>0 + }, + check:function(event){ + for(var i=0;i0){ + if(target.classList.contains('turnedover')) return 1000-target.countCards('h'); + if(player.maxHp-player.hp<3) return -1; + return 100-target.countCards('h'); + } + else{ + if(target.classList.contains('turnedover')) return -1; + if(player.maxHp-player.hp>=3) return -1; + return 1+target.countCards('h'); + } + } + "step 1" + if(result.bool){ + player.logSkill('fangzhu',result.targets); + result.targets[0].draw(player.maxHp-player.hp); + result.targets[0].turnOver(); + } + }, + ai:{ + maixie:true, + maixie_hp:true, + effect:{ + target:function(card,player,target){ + if(get.tag(card,'damage')){ + if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; + if(target.hp<=1) return; + if(!target.hasFriend()) return; + var hastarget=false; + var turnfriend=false; + var players=game.filterPlayer(); + for(var i=0;i0&&players[i].isTurnedOver()){ + hastarget=true; + turnfriend=true; + } + } + if(get.attitude(player,target)>0&&!hastarget) return; + if(turnfriend||target.hp==target.maxHp) return [0.5,1]; + if(target.hp>1) return [1,0.5]; + } + } + } + } + }, + songwei:{ + unique:true, + global:'songwei2', + zhuSkill:true, + }, + songwei2:{ + audio:2, + forceaudio:true, + trigger:{player:'judgeEnd'}, + filter:function(event,player){ + if(player.group!='wei') return false; + if(get.color(event.result.card)!='black') return false; + return game.hasPlayer(function(target){ + return player!=target&&target.hasZhuSkill('songwei',player); + }); + }, + direct:true, + content:function(){ + 'step 0' + var list=game.filterPlayer(function(current){ + return current!=player&¤t.hasZhuSkill('songwei',player); + }); + list.sortBySeat(); + event.list=list; + 'step 1' + if(event.list.length){ + var current=event.list.shift(); + event.current=current; + player.chooseBool(get.prompt('songwei',current)).set('choice',get.attitude(player,current)>0); + } + else{ + event.finish(); + } + 'step 2' + if(result.bool){ + player.logSkill('songwei',event.current); + event.current.draw(); + } + event.goto(1); + } + }, + jiezi:{ + trigger:{global:['phaseDrawSkipped','phaseDrawCancelled']}, + forced:true, + filter:function(event,player){ + return event.player!=player; + }, + content:function(){ + player.draw(); + } + }, + gzduanliang:{ + group:['duanliang1','duanliang2'], + ai:{ + threaten:1.2 + } + }, + duanliang:{ + group:['duanliang1','duanliang3'], + ai:{ + threaten:1.2 + } + }, + duanliang1:{ + audio:2, + enable:'chooseToUse', + filterCard:function(card){ + if(get.type(card)!='basic'&&get.type(card)!='equip') return false; + return get.color(card)=='black'; + }, + filter:function(event,player){ + return player.countCards('he',{type:['basic','equip'],color:'black'}) + }, + position:'he', + viewAs:{name:'bingliang'}, + prompt:'将一黑色的基本牌或装备牌当兵粮寸断使用', + check:function(card){return 6-get.value(card)}, + ai:{ + order:9 + } + }, + duanliang2:{ + mod:{ + targetInRange:function(card,player,target){ + if(card.name=='bingliang'){ + if(get.distance(player,target)<=2) return true; + } + } + } + }, + duanliang3:{ + mod:{ + targetInRange:function(card,player,target){ + if(card.name=='bingliang'){ + if(target.countCards('h')>=player.countCards('h')) return true; + } + } + } + }, + haoshi:{ + audio:2, + trigger:{player:'phaseDrawBegin'}, + threaten:1.4, + check:function(event,player){ + if(player.countCards('h')<=1) return true; + return game.hasPlayer(function(current){ + return current!=player&¤t.isMinHandcard()&&get.attitude(player,current)>0; + }); + }, + content:function(){ + trigger.num+=2; + player.addSkill('haoshi2'); + }, + ai:{ + threaten:2, + ai:{ + noh:true, + skillTagFilter:function(player,tag){ + if(tag=='noh'){ + if(player.countCards('h')!=2) return false; + } + } + } + } + }, + haoshi2:{ + trigger:{player:'phaseDrawEnd'}, + forced:true, + popup:false, + audio:false, + content:function(){ + "step 0" + player.removeSkill('haoshi2'); + if(player.countCards('h')<=5){ + event.finish(); + return; + } + player.chooseCardTarget({ + selectCard:Math.floor(player.countCards('h')/2), + filterTarget:function(card,player,target){ + return target.isMinHandcard(); + }, + forced:true, + ai2:function(target){ + return get.attitude(_status.event.player,target); + } + }); + "step 1" + if(result.targets&&result.targets[0]){ + result.targets[0].gain(result.cards,player); + player.$give(result.cards.length,result.targets[0]); + } + } + }, + dimeng:{ + audio:2, + enable:'phaseUse', + usable:1, + position:'he', + filterCard:function(){ + if(ui.selected.targets.length==2) return false; + return true; + }, + selectCard:[0,Infinity], + selectTarget:2, + complexCard:true, + filterTarget:function(card,player,target){ + if(player==target) return false; + if(ui.selected.targets.length==0) return true; + return (Math.abs(ui.selected.targets[0].countCards('h')-target.countCards('h'))== + ui.selected.cards.length); + }, + multitarget:true, + multiline:true, + complexSelect:true, + content:function(){ + targets[0].swapHandcards(targets[1]); + }, + check:function(card){ + var list=[],player=_status.event.player; + var num=player.countCards('he'); + var count; + var players=game.filterPlayer(); + for(var i=0;i3) list.push(players[i]); + } + list.sort(function(a,b){ + return a.countCards('h')-b.countCards('h'); + }); + if(list.length==0) return -1; + var from=list[0]; + list.length=0; - for(var i=0;i=list[0].countCards('h')) return -1; - for(var i=0;i=2) return -1; - if(ui.selected.cards.length3) list.push(players[i]); - } - list.sort(function(a,b){ - return a.countCards('h')-b.countCards('h'); - }); - if(target==list[0]) return get.attitude(player,target); - return -get.attitude(player,target); - } - else{ - var from=ui.selected.targets[0]; - for(var i=0;i=list[0].countCards('h')) return -get.attitude(player,target); - for(var i=0;i=2) return -get.attitude(player,target); - if(target==list[i]) return get.attitude(player,target); - return -get.attitude(player,target); - } - } - } - } - } - } - }, - yinghun:{ - audio:2, - audioname:['sunce'], - trigger:{player:'phaseBegin'}, - filter:function(event,player){ - return player.hp0){ - return 10+get.attitude(_status.event.player,target); - } - if(player.maxHp-player.hp==1){ - return -1; - } - return 1; - }); - "step 1" - if(result.bool){ - event.num=player.maxHp-player.hp; - if(player.countCards('e')>=player.hp){ - event.num=player.maxHp; - } - player.logSkill('yinghun',result.targets); - event.target=result.targets[0]; - if(event.num==1){ - event.directcontrol=true; - } - else{ - var str1='摸'+get.cnNumber(event.num,true)+'弃一'; - var str2='摸一弃'+get.cnNumber(event.num,true); - player.chooseControl(str1,str2,function(event,player){ - return _status.event.choice; - }).set('choice',get.attitude(player,event.target)>0?str1:str2); - event.str=str1; - } - } - else{ - event.finish(); - } - "step 2" - if(event.directcontrol||result.control==event.str){ - event.target.draw(event.num); - event.target.chooseToDiscard(true,'he'); - } - else{ - event.target.draw(); - event.target.chooseToDiscard(event.num,true,'he'); - } - }, - ai:{ - threaten:function(player,target){ - if(target.hp==1||target.countCards('e')>=target.hp) return 2; - if(target.hp==target.maxHp) return 0.5; - if(target.hp==2) return 1.5; - return 0.5; - }, - maixie:true, - effect:{ - target:function(card,player,target){ - if(target.maxHp<=3) 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]; - } - } - } - }, - gzyinghun:{ - audio:'yinghun', - audioname:['sunce'], - trigger:{player:'phaseBegin'}, - filter:function(event,player){ - return player.hp0){ - return 10+get.attitude(_status.event.player,target); - } - if(player.maxHp-player.hp==1){ - return -1; - } - return 1; - }); - "step 1" - if(result.bool){ - event.num=player.maxHp-player.hp; - player.logSkill(event.name,result.targets); - event.target=result.targets[0]; - if(event.num==1){ - event.directcontrol=true; - } - else{ - var str1='摸'+get.cnNumber(event.num,true)+'弃一'; - var str2='摸一弃'+get.cnNumber(event.num,true); - player.chooseControl(str1,str2,function(event,player){ - return _status.event.choice; - }).set('choice',get.attitude(player,event.target)>0?str1:str2); - event.str=str1; - } - } - else{ - event.finish(); - } - "step 2" - if(event.directcontrol||result.control==event.str){ - event.target.draw(event.num); - event.target.chooseToDiscard(true,'he'); - } - else{ - event.target.draw(); - event.target.chooseToDiscard(event.num,true,'he'); - } - }, - ai:{ - threaten:function(player,target){ - if(target.hp==target.maxHp) return 0.5; - if(target.hp==1) return 2; - if(target.hp==2) return 1.5; - return 0.5; - }, - maixie:true, - effect:{ - target:function(card,player,target){ - if(target.maxHp<=3) 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]; - } - } - } - }, - jiuchi:{ - audio:2, - enable:'chooseToUse', - filterCard:function(card){ - return get.suit(card)=='spade'; - }, - viewAs:{name:'jiu'}, - viewAsFilter:function(player){ - if(!player.countCards('h',{suit:'spade'})) return false; - }, - prompt:'将一张黑桃手牌当酒使用', - check:function(card){ - if(_status.event.type=='dying') return 1; - return 4-get.value(card); - }, - ai:{ - skillTagFilter:function(player){ - return player.countCards('h',{suit:'spade'})>0&&player.hp<=0; - }, - threaten:1.5, - save:true, - } - }, - roulin:{ - audio:2, - trigger:{player:'shaBegin',target:'shaBegin'}, - forced:true, - filter:function(event,player){ - if(event.directHit) return false; - if(player==event.player){ - return event.target.sex=='female'; - } - return event.player.sex=='female'; - }, - check:function(event,player){ - return player==event.player; - }, + for(var i=0;i=list[0].countCards('h')) return -1; + for(var i=0;i=2) return -1; + if(ui.selected.cards.length3) list.push(players[i]); + } + list.sort(function(a,b){ + return a.countCards('h')-b.countCards('h'); + }); + if(target==list[0]) return get.attitude(player,target); + return -get.attitude(player,target); + } + else{ + var from=ui.selected.targets[0]; + for(var i=0;i=list[0].countCards('h')) return -get.attitude(player,target); + for(var i=0;i=2) return -get.attitude(player,target); + if(target==list[i]) return get.attitude(player,target); + return -get.attitude(player,target); + } + } + } + } + } + } + }, + yinghun:{ + audio:2, + audioname:['sunce'], + trigger:{player:'phaseBegin'}, + filter:function(event,player){ + return player.hp0){ + return 10+get.attitude(_status.event.player,target); + } + if(player.maxHp-player.hp==1){ + return -1; + } + return 1; + }); + "step 1" + if(result.bool){ + event.num=player.maxHp-player.hp; + if(player.countCards('e')>=player.hp){ + event.num=player.maxHp; + } + player.logSkill('yinghun',result.targets); + event.target=result.targets[0]; + if(event.num==1){ + event.directcontrol=true; + } + else{ + var str1='摸'+get.cnNumber(event.num,true)+'弃一'; + var str2='摸一弃'+get.cnNumber(event.num,true); + player.chooseControl(str1,str2,function(event,player){ + return _status.event.choice; + }).set('choice',get.attitude(player,event.target)>0?str1:str2); + event.str=str1; + } + } + else{ + event.finish(); + } + "step 2" + if(event.directcontrol||result.control==event.str){ + event.target.draw(event.num); + event.target.chooseToDiscard(true,'he'); + } + else{ + event.target.draw(); + event.target.chooseToDiscard(event.num,true,'he'); + } + }, + ai:{ + threaten:function(player,target){ + if(target.hp==1||target.countCards('e')>=target.hp) return 2; + if(target.hp==target.maxHp) return 0.5; + if(target.hp==2) return 1.5; + return 0.5; + }, + maixie:true, + effect:{ + target:function(card,player,target){ + if(target.maxHp<=3) 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]; + } + } + } + }, + gzyinghun:{ + audio:'yinghun', + audioname:['sunce'], + trigger:{player:'phaseBegin'}, + filter:function(event,player){ + return player.hp0){ + return 10+get.attitude(_status.event.player,target); + } + if(player.maxHp-player.hp==1){ + return -1; + } + return 1; + }); + "step 1" + if(result.bool){ + event.num=player.maxHp-player.hp; + player.logSkill(event.name,result.targets); + event.target=result.targets[0]; + if(event.num==1){ + event.directcontrol=true; + } + else{ + var str1='摸'+get.cnNumber(event.num,true)+'弃一'; + var str2='摸一弃'+get.cnNumber(event.num,true); + player.chooseControl(str1,str2,function(event,player){ + return _status.event.choice; + }).set('choice',get.attitude(player,event.target)>0?str1:str2); + event.str=str1; + } + } + else{ + event.finish(); + } + "step 2" + if(event.directcontrol||result.control==event.str){ + event.target.draw(event.num); + event.target.chooseToDiscard(true,'he'); + } + else{ + event.target.draw(); + event.target.chooseToDiscard(event.num,true,'he'); + } + }, + ai:{ + threaten:function(player,target){ + if(target.hp==target.maxHp) return 0.5; + if(target.hp==1) return 2; + if(target.hp==2) return 1.5; + return 0.5; + }, + maixie:true, + effect:{ + target:function(card,player,target){ + if(target.maxHp<=3) 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]; + } + } + } + }, + jiuchi:{ + audio:2, + enable:'chooseToUse', + filterCard:function(card){ + return get.suit(card)=='spade'; + }, + viewAs:{name:'jiu'}, + viewAsFilter:function(player){ + if(!player.countCards('h',{suit:'spade'})) return false; + }, + prompt:'将一张黑桃手牌当酒使用', + check:function(card){ + if(_status.event.type=='dying') return 1; + return 4-get.value(card); + }, + ai:{ + skillTagFilter:function(player){ + return player.countCards('h',{suit:'spade'})>0&&player.hp<=0; + }, + threaten:1.5, + save:true, + } + }, + roulin:{ + audio:2, + trigger:{player:'shaBegin',target:'shaBegin'}, + forced:true, + filter:function(event,player){ + if(event.directHit) return false; + if(player==event.player){ + return event.target.sex=='female'; + } + return event.player.sex=='female'; + }, + check:function(event,player){ + return player==event.player; + }, priority:-1, - content:function(){ - if(typeof trigger.shanRequired=='number'){ + content:function(){ + if(typeof trigger.shanRequired=='number'){ trigger.shanRequired++; } else{ trigger.shanRequired=2; } - } - }, - benghuai:{ - audio:4, - trigger:{player:'phaseEnd'}, - forced:true, - check:function(){ - return false; - }, - filter:function(event,player){ - return !player.isMinHp(); - }, - content:function(){ - "step 0" - player.chooseControl('baonue_hp','baonue_maxHp',function(event,player){ - if(player.hp==player.maxHp) return 'baonue_hp'; - if(player.hp0); - } - else{ - event.finish(); - } - 'step 2' - if(result.bool){ - player.logSkill('baonue',event.current); - player.judge(function(card){ - if(get.suit(card)=='spade') return 4; - return 0; - }); - } - else{ - event.goto(1); - } - 'step 3' - if(result.suit=='spade'){ - event.current.recover(); - } - event.goto(1); - } - }, - luanwu:{ - audio:2, - unique:true, - enable:'phaseUse', - filter:function(event,player){ - return !player.storage.luanwu; - }, - init:function(player){ - player.storage.luanwu=false; - }, - mark:true, - intro:{ - content:'limited' - }, - skillAnimation:'epic', - animationColor:'thunder', - filterTarget:function(card,player,target){ - return target!=player; - }, - selectTarget:-1, - multitarget:true, - multiline:true, - content:function(){ - "step 0" - player.unmarkSkill('luanwu') - player.storage.luanwu=true; - event.current=player.next; - "step 1" - event.current.animate('target'); - event.current.chooseToUse('乱武:使用一张杀或流失一点体力',{name:'sha'},function(card,player,target){ - if(player==target) return false; - if(!player.canUse('sha',target)) return false; - if(get.distance(player,target)<=1) return true; - if(game.hasPlayer(function(current){ - return current!=player&&get.distance(player,current)0) att=1; - if(att<0) att=-1; - if(players[i]!=player&&players[i].hp<=3){ - if(players[i].countCards('h')==0) num+=att/players[i].hp; - else if(players[i].countCards('h')==1) num+=att/2/players[i].hp; - else if(players[i].countCards('h')==2) num+=att/4/players[i].hp; - } - if(players[i].hp==1) num+=att*1.5; - } - if(player.hp==1){ - return -num; - } - if(player.hp==2){ - return -game.players.length/4-num; - } - return -game.players.length/3-num; - } - } - } - }, - wansha:{ - locked:true, - global:'wansha2', - trigger:{global:'dying'}, - priority:15, - forced:true, - filter:function(event,player){ - return _status.currentPhase==player&&event.player!=player; - }, - content:function(){} - }, - wansha2:{ - mod:{ - cardSavable:function(card,player){ - if(!_status.currentPhase) return; - if(_status.currentPhase.hasSkill('wansha')&&_status.currentPhase!=player){ - if(card.name=='tao'&&_status.event.dying!=player) return false; - } - } - } - }, - weimu:{ - mod:{ - targetEnabled:function(card){ - if((get.type(card)=='trick'||get.type(card)=='delay')&& - get.color(card)=='black') return false; - } - } - }, - huoji:{ - audio:2, - enable:'chooseToUse', - filterCard:function(card){ - return get.color(card)=='red'; - }, - viewAs:{name:'huogong',nature:'fire'}, - viewAsFilter:function(player){ - if(!player.countCards('h',{color:'red'})) return false; - }, - prompt:'将一张红色牌当火攻使用', - check:function(card){ - var player=_status.currentPhase; - if(player.countCards('h')>player.hp){ - return 6-get.value(card); - } - return 4-get.value(card) - } - }, - bazhen:{ - audio:2, - inherit:'bagua_skill', - filter:function(event,player){ - if(!lib.skill.bagua_skill.filter(event,player)) return false; - if(player.getEquip(2)) return false; - return true; - }, - ai:{ - effect:{ - target:function(card,player,target){ - if(player==target&&get.subtype(card)=='equip2'){ - if(get.equipValue(card)<=7.5) return 0; - } - if(target.getEquip(2)) return; - return lib.skill.bagua_skill.ai.effect.target.apply(this,arguments); - } - } - } - }, - kanpo:{ - audio:2, - enable:'chooseToUse', - filterCard:function(card){ - return get.color(card)=='black'; - }, - viewAsFilter:function(player){ - return player.countCards('h',{color:'black'})>0; - }, - viewAs:{name:'wuxie'}, - prompt:'将一张黑色手牌当无懈可击使用', - check:function(card){return 8-get.value(card)}, - threaten:1.2 - }, - lianhuan:{ - group:['lianhuan1','lianhuan2'] - }, - lianhuan1:{ - audio:2, - enable:'phaseUse', - filter:function(event,player){ - return player.countCards('h',{suit:'club'})>0; - }, - filterCard:function(card){ - return get.suit(card)=='club'; - }, - viewAs:{name:'tiesuo'}, - prompt:'将一张梅花牌当铁锁连环使用', - check:function(card){return 4-get.value(card)} - }, - lianhuan2:{ - audio:2, - enable:'phaseUse', - filter:function(event,player){ - return player.countCards('h',{suit:'club'})>0; - }, - filterCard:function(card){ - return get.suit(card)=='club'; - }, - check:function(card){ - return 5-get.useful(card); - }, - content:function(){ - player.draw(); - }, - discard:false, - prompt:'将一张梅花牌置入弃牌堆并摸一张牌', - delay:0.5, - prepare:function(cards,player){ - player.$throw(cards,1000); - }, - ai:{ - basic:{ - order:1 - }, - result:{ - player:1, - }, - } - }, - niepan:{ - audio:2, - unique:true, - enable:'chooseToUse', - mark:true, - skillAnimation:true, - animationStr:'涅盘', - animationColor:'fire', - init:function(player){ - player.storage.niepan=false; - }, - filter:function(event,player){ - if(player.storage.niepan) return false; - if(event.type=='dying'){ - if(player!=event.dying) return false; - return true; - } - else if(event.parent.name=='phaseUse'){ - return true; - } - return false; - }, - content:function(){ - 'step 0' - player.hp=Math.min(3,player.maxHp); - player.discard(player.getCards('hej')); - player.draw(3); - player.awakenSkill('niepan'); - player.storage.niepan=true; - 'step 1' - player.link(false); - 'step 2' - player.turnOver(false); - }, - ai:{ - order:0.5, - skillTagFilter:function(player){ - if(player.storage.niepan) return false; - if(player.hp>0) return false; - }, - save:true, - result:{ - player:function(player){ - if(player.hp==0) return 10; - if(player.hp<=1&&player.countCards('he')<=1) return 10; - return 0; - } - }, - threaten:function(player,target){ - if(!target.storage.niepan) return 0.6; - } - }, - intro:{ - content:'limited' - } - }, - oldniepan:{ - audio:'niepan', - unique:true, - enable:'chooseToUse', - mark:true, - skillAnimation:true, - animationStr:'涅盘', - animationColor:'fire', - init:function(player){ - player.storage.oldniepan=false; - }, - filter:function(event,player){ - if(player.storage.oldniepan) return false; - if(event.type=='dying'){ - if(player!=event.dying) return false; - return true; - } - return false; - }, - content:function(){ - 'step 0' - player.hp=Math.min(3,player.maxHp); - player.discard(player.getCards('hej')); - player.draw(3); - player.awakenSkill('oldniepan'); - player.storage.oldniepan=true; - 'step 1' - player.link(false); - 'step 2' - player.turnOver(false); - }, - ai:{ - order:1, - skillTagFilter:function(player){ - if(player.storage.oldniepan) return false; - if(player.hp>0) return false; - }, - save:true, - result:{ - player:function(player){ - if(player.hp==0) return 10; - if(player.hp<=2&&player.countCards('he')<=1) return 10; - return 0; - } - }, - threaten:function(player,target){ - if(!target.storage.oldniepan) return 0.6; - } - }, - intro:{ - content:'limited' - } - }, - quhu:{ - audio:2, - enable:'phaseUse', - usable:1, - filter:function(event,player){ - if(player.countCards('h')==0) return false; - return game.hasPlayer(function(current){ - return current.hp>player.hp&¤t.countCards('h'); - }); - }, - filterTarget:function(card,player,target){ - return target.hp>player.hp&&target.countCards('h')>0; - }, - content:function(){ - "step 0" - player.chooseToCompare(target); - "step 1" - if(result.bool){ - if(game.hasPlayer(function(player){ - return player!=target&&get.distance(target,player,'attack')<=1; - })){ - player.chooseTarget(function(card,player,target){ - var source=_status.event.source; - return target!=source&&get.distance(source,target,'attack')<=1; - },true).set('ai',function(target){ - return get.damageEffect(target,_status.event.source,player); - }).set('source',target); - } - else{ - event.finish(); - } - } - else{ - player.damage(target); - event.finish(); - } - "step 2" - if(result.bool&&result.targets&&result.targets.length){ - target.line(result.targets[0],'green'); - result.targets[0].damage(target); - } - }, - ai:{ - order:0.5, - result:{ - target:function(player,target){ - var att=get.attitude(player,target); - var oc=(target.countCards('h')==1); - if(att>0&&oc) return 0; - var players=game.filterPlayer(); - for(var i=0;i0){ - return att>0?att/2:att-(oc?5:0); - } - } - } - return 0; - }, - player:function(player,target){ - if(target.hasSkillTag('jueqing',false,target)) return -10; - var mn=1; - var hs=player.getCards('h'); - for(var i=0;i2){ - max=Math.max(Math.min(5,players[i].hp)-players[i].countCards('h'),max); - } - } - switch(max){ - case 0:return mn==13?0:-20; - case 1:return mn>=12?0:-15; - case 2:return 0; - case 3:return 1; - default:return max; - } - } - }, - expose:0.2 - } - }, - jieming:{ - audio:2, - trigger:{player:'damageEnd'}, - direct:true, - content:function(){ - "step 0" - player.chooseTarget(get.prompt('jieming'),[1,trigger.num],function(card,player,target){ - return target.countCards('h')2){ - return Math.min(5,target.maxHp)-target.countCards('h'); - } - return att/3; - }); - "step 1" - if(result.bool){ - player.logSkill('jieming',result.targets); - for(var i=0;i1){ - if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; - var max=0; - var players=game.filterPlayer(); - for(var i=0;i0){ - max=Math.max(Math.min(5,players[i].hp)-players[i].countCards('h'),max); - } - } - switch(max){ - case 0:return 2; - case 1:return 1.5; - case 2:return [1,2]; - default:return [0,max]; - } - } - if((card.name=='tao'||card.name=='caoyao')&& - target.hp>1&&target.countCards('h')<=target.hp) return [0,0]; - } - }, - } - }, - qiangxi:{ - audio:2, - enable:'phaseUse', - usable:1, - filterCard:function(card){ - return get.subtype(card)=='equip1'; - }, - selectCard:[0,1], - filterTarget:function(card,player,target){ - if(player==target) return false; - return get.distance(player,target,'attack')<=1; - }, - content:function(){ - "step 0" - if(cards.length==0){ - player.loseHp(); - } - "step 1" - target.damage(); - }, - check:function(card){ - return 10-get.value(card); - }, - position:'he', - ai:{ - damage:true, - order:8, - result:{ - player:function(player,target){ - if(player.getEquip(1)) return 0; - if(player.hp>=target.hp) return -0.9; - if(player.hp<=2) return -10; - return -2; - }, - target:function(player,target){ - if(!player.getEquip(1)){ - if(player.hp<2) return 0; - if(player.hp==2&&target.hp>=2) return 0; - if(target.hp>player.hp) return 0; - } - return get.damageEffect(target,player); - } - } - }, - threaten:1.3 - }, - xinqiangxi:{ - audio:'qiangxi', - enable:'phaseUse', - filter:function(event,player){ - if(player.hasSkill('xinqiangxi2')){ - return !player.hasSkill('xinqiangxi3'); - } - else if(player.hasSkill('xinqiangxi3')){ - return !player.hasSkill('xinqiangxi2')&&player.countCards('he',{type:'equip'})>0; - } - else{ - return true; - } - }, - filterCard:function(card){ - var player=_status.event.player; - if(player.hasSkill('xinqiangxi2')) return false; - return get.type(card)=='equip'; - }, - selectCard:function(){ - var player=_status.event.player; - if(player.hasSkill('xinqiangxi2')) return -1; - if(player.hasSkill('xinqiangxi3')) return [1,1]; - return [0,1]; - }, - filterTarget:function(card,player,target){ - if(player==target) return false; - return get.distance(player,target,'attack')<=1; - }, - content:function(){ - "step 0" - if(cards.length==0){ - player.loseHp(); - player.addTempSkill('xinqiangxi3'); - } - else{ - player.addTempSkill('xinqiangxi2'); - } - "step 1" - target.damage(); - }, - check:function(card){ - return 10-get.value(card); - }, - position:'he', - ai:{ - order:8.5, - result:{ - target:function(player,target){ - if(player.hasSkill('xinqiangxi2')||!player.countCards('he',{type:'equip'})){ - if(player.hp<2) return 0; - if(target.hp>=player.hp) return 0; - } - return get.damageEffect(target,player); - } - } - }, - threaten:1.5 - }, - xinqiangxi2:{}, - xinqiangxi3:{}, - tianyi:{ - audio:2, - enable:'phaseUse', - usable:1, - filterTarget:function(card,player,target){ - return player!=target&&target.countCards('h')>0; - }, - filter:function(event,player){ - return player.countCards('h')>0; - }, - content:function(){ - "step 0" - player.chooseToCompare(target); - "step 1" - if(result.bool){ - player.addTempSkill('tianyi2'); - } - else{ - player.addTempSkill('tianyi3'); - } - }, - 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.6; - 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 - } - }, - tianyi2:{ - mod:{ - targetInRange:function(card,player,target,now){ - if(card.name=='sha') return true; - }, - selectTarget:function(card,player,range){ - if(card.name=='sha'&&range[1]!=-1) range[1]++; - }, - cardUsable:function(card,player,num){ - if(card.name=='sha') return num+1; - } - }, - }, - tianyi3:{ - mod:{ - cardEnabled:function(card){if(card.name=='sha') return false} - } - }, - shuangxiong:{ - audio:true, - trigger:{player:'phaseDrawBefore'}, - check:function(event,player){ - if(player.countCards('h')>player.hp) return true; - if(player.countCards('h')>3) return true; - return false; - }, - content:function(){ - "step 0" - player.judge(ui.special); - "step 1" - player.gain(result.card); - player.$gain2(result.card); - player.addTempSkill('shuangxiong2'); - player.storage.shuangxiong=get.color(result.card); - trigger.cancel(); - } - }, - shuangxiong2:{ - audio:true, - enable:'phaseUse', - viewAs:{name:'juedou'}, - filterCard:function(card,player){ - return get.color(card)!=player.storage.shuangxiong; - }, - check:function(card){ - return 8-get.value(card); - }, - ai:{ - basic:{ - order:10 - } - } - }, - luanji:{ - audio:2, - enable:'phaseUse', - viewAs:{name:'wanjian'}, - filterCard:function(card,player){ - if(ui.selected.cards.length){ - return get.suit(card)==get.suit(ui.selected.cards[0]); - } - var cards=player.getCards('h'); - for(var i=0;i=7){ - if(num<2) return 0; - } - else if(targets.length>=5){ - if(num<1.5) return 0; - } - } - return 6-get.value(card); - }, - ai:{ - basic:{ - order:10 - } - } - }, - xueyi:{ - mod:{ - maxHandcard:function(player,num){ - if(player.hasZhuSkill('xueyi')){ - return num+game.countPlayer(function(current){ - if(player!=current&¤t.group=='qun') return 2; - }); - } - return num; - } - }, - zhuSkill:true, - }, - mengjin:{ - audio:2, - trigger:{player:'shaMiss'}, - priority:-1, - filter:function(event){ - return event.target.countCards('he')>0; - }, - check:function(event,player){ - return get.attitude(player,event.target)<0; - }, - content:function(){ - player.discardPlayerCard('he',trigger.target,true); - } - }, - jiewei:{ - trigger:{player:'turnOverEnd'}, - direct:true, - audio:2, - content:function(){ - 'step 0' - player.chooseToUse(function(card){ - if(!lib.filter.cardEnabled(card,_status.event.player,_status.event)){ - return false; - } - var type=get.type(card,'trick'); - return type=='trick'||type=='equip'; - },'是否使用一张锦囊牌或装备牌?').set('logSkill','jiewei'); - 'step 1' - if(result.bool){ - var type=get.type(result.card||result.cards[0]); - if(game.hasPlayer(function(current){ - if(type=='equip'){ - return current.countCards('e'); - } - else{ - return current.countCards('j'); - } - })){ - var next=player.chooseTarget('是否弃置场上的一张'+get.translation(type)+'牌?',function(card,player,target){ - if(_status.event.type=='equip'){ - return target.countCards('e')>0; - } - else{ - return target.countCards('j')>0; - } - }); - next.set('ai',function(target){ - if(type=='equip'){ - return -get.attitude(player,target); - } - else{ - return get.attitude(player,target); - } - }); - next.set('type',type); - event.type=type; - } - else{ - event.finish(); - } - } - else{ - event.finish(); - } - 'step 2' - if(event.type&&result.bool&&result.targets&&result.targets.length){ - player.line(result.targets,'green'); - if(event.type=='equip'){ - player.discardPlayerCard(result.targets[0],'e',true); - } - else{ - player.discardPlayerCard(result.targets[0],'j',true); - } - } - } - }, - releiji:{ - audio:2, - audioname:['boss_qinglong'], - trigger:{player:'respond'}, - filter:function(event,player){ - return event.card.name=='shan'; - }, - direct:true, - content:function(){ - "step 0"; - player.chooseTarget(get.prompt('releiji')).ai=function(target){ - if(target.hasSkill('hongyan')) return 0; - return get.damageEffect(target,_status.event.player,_status.event.player,'thunder'); - }; - "step 1" - if(result.bool){ - player.logSkill('releiji',result.targets,'thunder'); - event.target=result.targets[0]; - event.target.judge(function(card){ - var suit=get.suit(card); - if(suit=='spade') return -4; - if(suit=='club') return -2; - return 0; - }); - } - else{ - event.finish(); - } - "step 2" - if(result.suit=='club'){ - event.target.damage('thunder'); - player.recover(); - } - else if(result.suit=='spade'){ - event.target.damage(2,'thunder'); - } - }, - ai:{ - useShan:true, - effect:{ - target:function(card,player,target,current){ - if(get.tag(card,'respondShan')){ - var hastarget=game.hasPlayer(function(current){ - return get.attitude(target,current)<0; - }); - var be=target.countCards('e',{color:'black'}); - if(target.countCards('h','shan')&&be){ - if(!target.hasSkill('guidao')) return 0; - return [0,hastarget?target.countCards('he')/2:0]; - } - if(target.countCards('h','shan')&&target.countCards('h')>2){ - if(!target.hasSkill('guidao')) return 0; - return [0,hastarget?target.countCards('h')/4:0]; - } - if(target.countCards('h')>3||(be&&target.countCards('h')>=2)){ - return [0,0]; - } - if(target.countCards('h')==0){ - return [1.5,0]; - } - if(target.countCards('h')==1&&!be){ - return [1.2,0]; - } - if(!target.hasSkill('guidao')) return [1,0.05]; - return [1,Math.min(0.5,(target.countCards('h')+be)/4)]; - } - } - } - } - }, - shensu:{ - group:['shensu1','shensu2'] - }, - xinshensu:{ - group:['shensu1','shensu2','shensu4'] - }, - shensu1:{ - audio:2, - trigger:{player:'phaseBegin'}, - direct:true, - content:function(){ - "step 0" - var check= player.countCards('h')>2; - player.chooseTarget(get.prompt('shensu'),function(card,player,target){ - if(player==target) return false; - return player.canUse({name:'sha'},target,false); - }).set('check',check).set('ai',function(target){ - if(!_status.event.check) return 0; - return get.effect(target,{name:'sha'},_status.event.player); - }); - "step 1" - if(result.bool){ - player.logSkill('shensu1',result.targets); - player.useCard({name:'sha'},result.targets[0],false); - player.skip('phaseJudge'); - player.skip('phaseDraw'); - } - } - }, - shensu2:{ - audio:2, - trigger:{player:'phaseUseBefore'}, - direct:true, - filter:function(event,player){ - return player.countCards('he',{type:'equip'})>0; - }, - content:function(){ - "step 0" - var check=player.needsToDiscard(); - player.chooseCardTarget({ - prompt:get.prompt('shensu'), - filterCard:function(card,player){ - return get.type(card)=='equip'&&lib.filter.cardDiscardable(card,player) - }, - position:'he', - filterTarget:function(card,player,target){ - if(player==target) return false; - return player.canUse({name:'sha'},target,false); - }, - ai1:function(card){ - if(_status.event.check) return 0; - return 6-get.value(card); - }, - ai2:function(target){ - if(_status.event.check) return 0; - return get.effect(target,{name:'sha'},_status.event.player); - }, - check:check - }); - "step 1" - if(result.bool){ - player.logSkill('shensu2',result.targets); - player.discard(result.cards[0]); - player.useCard({name:'sha'},result.targets[0]); - trigger.cancel(); - } - } - }, - shensu4:{ - audio:'shensu1', - trigger:{player:'phaseDiscardBefore'}, - direct:true, - content:function(){ - "step 0" - var check=player.needsToDiscard()||player.isTurnedOver(); - player.chooseTarget(get.prompt('shensu'),function(card,player,target){ - if(player==target) return false; - return player.canUse({name:'sha'},target,false); - }).set('check',check).set('ai',function(target){ - if(!_status.event.check) return 0; - return get.effect(target,{name:'sha'},_status.event.player); - }); - "step 1" - if(result.bool){ - player.logSkill('shensu4',result.targets); - player.turnOver(); - player.useCard({name:'sha'},result.targets[0],false); - trigger.cancel(); - } - } - }, - jushou:{ - audio:true, - trigger:{player:'phaseEnd'}, - content:function(){ - player.draw(3); - player.turnOver(); - }, - ai:{ - effect:{ - target:function(card,player,target){ - if(card.name=='guiyoujie') return [0,1]; - } - } - }, - }, - liegong:{ - audio:2, - trigger:{player:'shaBegin'}, - check:function(event,player){ - return get.attitude(player,event.target)<=0; - }, - logTarget:'target', - filter:function(event,player){ - var length=event.target.countCards('h'); - return (length>=player.hp||length<=player.getAttackRange()); - }, - content:function(){ - trigger.directHit=true; - }, - mod:{ - attackFrom:function(from,to,distance){ - if(get.zhu(from,'shouyue')) return distance-1; - } - } - }, - kuanggu:{ - audio:2, - trigger:{source:'damageEnd'}, - forced:true, - filter:function(event,player){ - return get.distance(player,event.player)<=1&&player.isDamaged(); - }, - content:function(){ - player.recover(trigger.num); - } - }, - tianxiang:{ - audio:2, - trigger:{player:'damageBefore'}, - direct:true, - filter:function(event,player){ - return player.countCards('h',{suit:'heart'})>0&&event.num>0; - }, - content:function(){ - "step 0" - player.chooseCardTarget({ - filterCard:function(card,player){ - return get.suit(card)=='heart'&&lib.filter.cardDiscardable(card,player); - }, - filterTarget:function(card,player,target){ - return player!=target; - }, - ai1:function(card){ - return 10-get.value(card); - }, - ai2:function(target){ - var att=get.attitude(_status.event.player,target); - var trigger=_status.event.getTrigger(); - var da=0; - if(_status.event.player.hp==1){ - da=10; - } - if(trigger.num>1){ - if(target.maxHp>5&&target.hp>1) return -att/10+da; - return -att+da; - } - var eff=get.damageEffect(target,trigger.source,target,trigger.nature); - if(att==0) return 0.1+da; - if(eff>=0&&trigger.num==1){ - return att+da; - } - if(target.hp==target.maxHp) return -att+da; - if(target.hp==1){ - if(target.maxHp<=4&&!target.hasSkillTag('maixie')){ - if(target.maxHp<=3){ - return -att+da; - } - return -att/2+da; - } - return da; - } - if(target.hp==target.maxHp-1){ - if(target.hp>2||target.hasSkillTag('maixie')) return att/5+da; - if(att>0) return 0.02+da; - return 0.05+da; - } - return att/2+da; - }, - prompt:get.prompt('tianxiang') - }); - "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('damageBefore'); - }, - ai:{ - maixie_defend:true, - effect:{ - target:function(card,player,target){ - if(player.hasSkillTag('jueqing',false,target)) return; - if(get.tag(card,'damage')&&target.countCards('h')>1) return 0.7; - } - }, - threaten:function(player,target){ - if(target.countCards('h')==0) return 2; - } - } - }, - tianxiang2:{ - trigger:{player:['damageAfter','damageCancelled','damageZero']}, - forced:true, - popup:false, - audio:false, + } + }, + benghuai:{ + audio:4, + trigger:{player:'phaseEnd'}, + forced:true, + check:function(){ + return false; + }, + filter:function(event,player){ + return !player.isMinHp(); + }, + content:function(){ + "step 0" + player.chooseControl('baonue_hp','baonue_maxHp',function(event,player){ + if(player.hp==player.maxHp) return 'baonue_hp'; + if(player.hp0); + } + else{ + event.finish(); + } + 'step 2' + if(result.bool){ + player.logSkill('baonue',event.current); + player.judge(function(card){ + if(get.suit(card)=='spade') return 4; + return 0; + }); + } + else{ + event.goto(1); + } + 'step 3' + if(result.suit=='spade'){ + event.current.recover(); + } + event.goto(1); + } + }, + luanwu:{ + audio:2, + unique:true, + enable:'phaseUse', + filter:function(event,player){ + return !player.storage.luanwu; + }, + init:function(player){ + player.storage.luanwu=false; + }, + mark:true, + intro:{ + content:'limited' + }, + skillAnimation:'epic', + animationColor:'thunder', + filterTarget:function(card,player,target){ + return target!=player; + }, + selectTarget:-1, + multitarget:true, + multiline:true, + content:function(){ + "step 0" + player.unmarkSkill('luanwu') + player.storage.luanwu=true; + event.current=player.next; + "step 1" + event.current.animate('target'); + event.current.chooseToUse('乱武:使用一张杀或流失一点体力',{name:'sha'},function(card,player,target){ + if(player==target) return false; + if(!player.canUse('sha',target)) return false; + if(get.distance(player,target)<=1) return true; + if(game.hasPlayer(function(current){ + return current!=player&&get.distance(player,current)0) att=1; + if(att<0) att=-1; + if(players[i]!=player&&players[i].hp<=3){ + if(players[i].countCards('h')==0) num+=att/players[i].hp; + else if(players[i].countCards('h')==1) num+=att/2/players[i].hp; + else if(players[i].countCards('h')==2) num+=att/4/players[i].hp; + } + if(players[i].hp==1) num+=att*1.5; + } + if(player.hp==1){ + return -num; + } + if(player.hp==2){ + return -game.players.length/4-num; + } + return -game.players.length/3-num; + } + } + } + }, + wansha:{ + locked:true, + global:'wansha2', + trigger:{global:'dying'}, + priority:15, + forced:true, + filter:function(event,player){ + return _status.currentPhase==player&&event.player!=player; + }, + content:function(){} + }, + wansha2:{ + mod:{ + cardSavable:function(card,player){ + if(!_status.currentPhase) return; + if(_status.currentPhase.hasSkill('wansha')&&_status.currentPhase!=player){ + if(card.name=='tao'&&_status.event.dying!=player) return false; + } + } + } + }, + weimu:{ + mod:{ + targetEnabled:function(card){ + if((get.type(card)=='trick'||get.type(card)=='delay')&& + get.color(card)=='black') return false; + } + } + }, + huoji:{ + audio:2, + enable:'chooseToUse', + filterCard:function(card){ + return get.color(card)=='red'; + }, + viewAs:{name:'huogong',nature:'fire'}, + viewAsFilter:function(player){ + if(!player.countCards('h',{color:'red'})) return false; + }, + prompt:'将一张红色牌当火攻使用', + check:function(card){ + var player=_status.currentPhase; + if(player.countCards('h')>player.hp){ + return 6-get.value(card); + } + return 4-get.value(card) + } + }, + bazhen:{ + audio:2, + inherit:'bagua_skill', + filter:function(event,player){ + if(!lib.skill.bagua_skill.filter(event,player)) return false; + if(player.getEquip(2)) return false; + return true; + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(player==target&&get.subtype(card)=='equip2'){ + if(get.equipValue(card)<=7.5) return 0; + } + if(target.getEquip(2)) return; + return lib.skill.bagua_skill.ai.effect.target.apply(this,arguments); + } + } + } + }, + kanpo:{ + audio:2, + enable:'chooseToUse', + filterCard:function(card){ + return get.color(card)=='black'; + }, + viewAsFilter:function(player){ + return player.countCards('h',{color:'black'})>0; + }, + viewAs:{name:'wuxie'}, + prompt:'将一张黑色手牌当无懈可击使用', + check:function(card){return 8-get.value(card)}, + threaten:1.2 + }, + lianhuan:{ + group:['lianhuan1','lianhuan2'] + }, + lianhuan1:{ + audio:2, + enable:'phaseUse', + filter:function(event,player){ + return player.countCards('h',{suit:'club'})>0; + }, + filterCard:function(card){ + return get.suit(card)=='club'; + }, + viewAs:{name:'tiesuo'}, + prompt:'将一张梅花牌当铁锁连环使用', + check:function(card){return 4-get.value(card)} + }, + lianhuan2:{ + audio:2, + enable:'phaseUse', + filter:function(event,player){ + return player.countCards('h',{suit:'club'})>0; + }, + filterCard:function(card){ + return get.suit(card)=='club'; + }, + check:function(card){ + return 5-get.useful(card); + }, + content:function(){ + player.draw(); + }, + discard:false, + prompt:'将一张梅花牌置入弃牌堆并摸一张牌', + delay:0.5, + prepare:function(cards,player){ + player.$throw(cards,1000); + }, + ai:{ + basic:{ + order:1 + }, + result:{ + player:1, + }, + } + }, + niepan:{ + audio:2, + unique:true, + enable:'chooseToUse', + mark:true, + skillAnimation:true, + animationStr:'涅盘', + animationColor:'fire', + init:function(player){ + player.storage.niepan=false; + }, + filter:function(event,player){ + if(player.storage.niepan) return false; + if(event.type=='dying'){ + if(player!=event.dying) return false; + return true; + } + else if(event.parent.name=='phaseUse'){ + return true; + } + return false; + }, + content:function(){ + 'step 0' + player.hp=Math.min(3,player.maxHp); + player.discard(player.getCards('hej')); + player.draw(3); + player.awakenSkill('niepan'); + player.storage.niepan=true; + 'step 1' + player.link(false); + 'step 2' + player.turnOver(false); + }, + ai:{ + order:0.5, + skillTagFilter:function(player){ + if(player.storage.niepan) return false; + if(player.hp>0) return false; + }, + save:true, + result:{ + player:function(player){ + if(player.hp==0) return 10; + if(player.hp<=1&&player.countCards('he')<=1) return 10; + return 0; + } + }, + threaten:function(player,target){ + if(!target.storage.niepan) return 0.6; + } + }, + intro:{ + content:'limited' + } + }, + oldniepan:{ + audio:'niepan', + unique:true, + enable:'chooseToUse', + mark:true, + skillAnimation:true, + animationStr:'涅盘', + animationColor:'fire', + init:function(player){ + player.storage.oldniepan=false; + }, + filter:function(event,player){ + if(player.storage.oldniepan) return false; + if(event.type=='dying'){ + if(player!=event.dying) return false; + return true; + } + return false; + }, + content:function(){ + 'step 0' + player.hp=Math.min(3,player.maxHp); + player.discard(player.getCards('hej')); + player.draw(3); + player.awakenSkill('oldniepan'); + player.storage.oldniepan=true; + 'step 1' + player.link(false); + 'step 2' + player.turnOver(false); + }, + ai:{ + order:1, + skillTagFilter:function(player){ + if(player.storage.oldniepan) return false; + if(player.hp>0) return false; + }, + save:true, + result:{ + player:function(player){ + if(player.hp==0) return 10; + if(player.hp<=2&&player.countCards('he')<=1) return 10; + return 0; + } + }, + threaten:function(player,target){ + if(!target.storage.oldniepan) return 0.6; + } + }, + intro:{ + content:'limited' + } + }, + quhu:{ + audio:2, + enable:'phaseUse', + usable:1, + filter:function(event,player){ + if(player.countCards('h')==0) return false; + return game.hasPlayer(function(current){ + return current.hp>player.hp&¤t.countCards('h'); + }); + }, + filterTarget:function(card,player,target){ + return target.hp>player.hp&&target.countCards('h')>0; + }, + content:function(){ + "step 0" + player.chooseToCompare(target); + "step 1" + if(result.bool){ + if(game.hasPlayer(function(player){ + return player!=target&&get.distance(target,player,'attack')<=1; + })){ + player.chooseTarget(function(card,player,target){ + var source=_status.event.source; + return target!=source&&get.distance(source,target,'attack')<=1; + },true).set('ai',function(target){ + return get.damageEffect(target,_status.event.source,player); + }).set('source',target); + } + else{ + event.finish(); + } + } + else{ + player.damage(target); + event.finish(); + } + "step 2" + if(result.bool&&result.targets&&result.targets.length){ + target.line(result.targets[0],'green'); + result.targets[0].damage(target); + } + }, + ai:{ + order:0.5, + result:{ + target:function(player,target){ + var att=get.attitude(player,target); + var oc=(target.countCards('h')==1); + if(att>0&&oc) return 0; + var players=game.filterPlayer(); + for(var i=0;i0){ + return att>0?att/2:att-(oc?5:0); + } + } + } + return 0; + }, + player:function(player,target){ + if(target.hasSkillTag('jueqing',false,target)) return -10; + var mn=1; + var hs=player.getCards('h'); + for(var i=0;i2){ + max=Math.max(Math.min(5,players[i].hp)-players[i].countCards('h'),max); + } + } + switch(max){ + case 0:return mn==13?0:-20; + case 1:return mn>=12?0:-15; + case 2:return 0; + case 3:return 1; + default:return max; + } + } + }, + expose:0.2 + } + }, + jieming:{ + audio:2, + trigger:{player:'damageEnd'}, + direct:true, + content:function(){ + "step 0" + player.chooseTarget(get.prompt('jieming'),[1,trigger.num],function(card,player,target){ + return target.countCards('h')2){ + return Math.min(5,target.maxHp)-target.countCards('h'); + } + return att/3; + }); + "step 1" + if(result.bool){ + player.logSkill('jieming',result.targets); + for(var i=0;i1){ + if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; + var max=0; + var players=game.filterPlayer(); + for(var i=0;i0){ + max=Math.max(Math.min(5,players[i].hp)-players[i].countCards('h'),max); + } + } + switch(max){ + case 0:return 2; + case 1:return 1.5; + case 2:return [1,2]; + default:return [0,max]; + } + } + if((card.name=='tao'||card.name=='caoyao')&& + target.hp>1&&target.countCards('h')<=target.hp) return [0,0]; + } + }, + } + }, + qiangxi:{ + audio:2, + enable:'phaseUse', + usable:1, + filterCard:function(card){ + return get.subtype(card)=='equip1'; + }, + selectCard:[0,1], + filterTarget:function(card,player,target){ + if(player==target) return false; + return get.distance(player,target,'attack')<=1; + }, + content:function(){ + "step 0" + if(cards.length==0){ + player.loseHp(); + } + "step 1" + target.damage(); + }, + check:function(card){ + return 10-get.value(card); + }, + position:'he', + ai:{ + damage:true, + order:8, + result:{ + player:function(player,target){ + if(player.getEquip(1)) return 0; + if(player.hp>=target.hp) return -0.9; + if(player.hp<=2) return -10; + return -2; + }, + target:function(player,target){ + if(!player.getEquip(1)){ + if(player.hp<2) return 0; + if(player.hp==2&&target.hp>=2) return 0; + if(target.hp>player.hp) return 0; + } + return get.damageEffect(target,player); + } + } + }, + threaten:1.3 + }, + xinqiangxi:{ + audio:'qiangxi', + enable:'phaseUse', + filter:function(event,player){ + if(player.hasSkill('xinqiangxi2')){ + return !player.hasSkill('xinqiangxi3'); + } + else if(player.hasSkill('xinqiangxi3')){ + return !player.hasSkill('xinqiangxi2')&&player.countCards('he',{type:'equip'})>0; + } + else{ + return true; + } + }, + filterCard:function(card){ + var player=_status.event.player; + if(player.hasSkill('xinqiangxi2')) return false; + return get.type(card)=='equip'; + }, + selectCard:function(){ + var player=_status.event.player; + if(player.hasSkill('xinqiangxi2')) return -1; + if(player.hasSkill('xinqiangxi3')) return [1,1]; + return [0,1]; + }, + filterTarget:function(card,player,target){ + if(player==target) return false; + return get.distance(player,target,'attack')<=1; + }, + content:function(){ + "step 0" + if(cards.length==0){ + player.loseHp(); + player.addTempSkill('xinqiangxi3'); + } + else{ + player.addTempSkill('xinqiangxi2'); + } + "step 1" + target.damage(); + }, + check:function(card){ + return 10-get.value(card); + }, + position:'he', + ai:{ + order:8.5, + result:{ + target:function(player,target){ + if(player.hasSkill('xinqiangxi2')||!player.countCards('he',{type:'equip'})){ + if(player.hp<2) return 0; + if(target.hp>=player.hp) return 0; + } + return get.damageEffect(target,player); + } + } + }, + threaten:1.5 + }, + xinqiangxi2:{}, + xinqiangxi3:{}, + tianyi:{ + audio:2, + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return player!=target&&target.countCards('h')>0; + }, + filter:function(event,player){ + return player.countCards('h')>0; + }, + content:function(){ + "step 0" + player.chooseToCompare(target); + "step 1" + if(result.bool){ + player.addTempSkill('tianyi2'); + } + else{ + player.addTempSkill('tianyi3'); + } + }, + 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.6; + 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 + } + }, + tianyi2:{ + mod:{ + targetInRange:function(card,player,target,now){ + if(card.name=='sha') return true; + }, + selectTarget:function(card,player,range){ + if(card.name=='sha'&&range[1]!=-1) range[1]++; + }, + cardUsable:function(card,player,num){ + if(card.name=='sha') return num+1; + } + }, + }, + tianyi3:{ + mod:{ + cardEnabled:function(card){if(card.name=='sha') return false} + } + }, + shuangxiong:{ + audio:true, + trigger:{player:'phaseDrawBefore'}, + check:function(event,player){ + if(player.countCards('h')>player.hp) return true; + if(player.countCards('h')>3) return true; + return false; + }, + content:function(){ + "step 0" + player.judge(ui.special); + "step 1" + player.gain(result.card); + player.$gain2(result.card); + player.addTempSkill('shuangxiong2'); + player.storage.shuangxiong=get.color(result.card); + trigger.cancel(); + } + }, + shuangxiong2:{ + audio:true, + enable:'phaseUse', + viewAs:{name:'juedou'}, + filterCard:function(card,player){ + return get.color(card)!=player.storage.shuangxiong; + }, + check:function(card){ + return 8-get.value(card); + }, + ai:{ + basic:{ + order:10 + } + } + }, + luanji:{ + audio:2, + enable:'phaseUse', + viewAs:{name:'wanjian'}, + filterCard:function(card,player){ + if(ui.selected.cards.length){ + return get.suit(card)==get.suit(ui.selected.cards[0]); + } + var cards=player.getCards('h'); + for(var i=0;i=7){ + if(num<2) return 0; + } + else if(targets.length>=5){ + if(num<1.5) return 0; + } + } + return 6-get.value(card); + }, + ai:{ + basic:{ + order:10 + } + } + }, + xueyi:{ + mod:{ + maxHandcard:function(player,num){ + if(player.hasZhuSkill('xueyi')){ + return num+game.countPlayer(function(current){ + if(player!=current&¤t.group=='qun') return 2; + }); + } + return num; + } + }, + zhuSkill:true, + }, + mengjin:{ + audio:2, + trigger:{player:'shaMiss'}, + priority:-1, + filter:function(event){ + return event.target.countCards('he')>0; + }, + check:function(event,player){ + return get.attitude(player,event.target)<0; + }, + content:function(){ + player.discardPlayerCard('he',trigger.target,true); + } + }, + jiewei:{ + trigger:{player:'turnOverEnd'}, + direct:true, + audio:2, + content:function(){ + 'step 0' + player.chooseToUse(function(card){ + if(!lib.filter.cardEnabled(card,_status.event.player,_status.event)){ + return false; + } + var type=get.type(card,'trick'); + return type=='trick'||type=='equip'; + },'是否使用一张锦囊牌或装备牌?').set('logSkill','jiewei'); + 'step 1' + if(result.bool){ + var type=get.type(result.card||result.cards[0]); + if(game.hasPlayer(function(current){ + if(type=='equip'){ + return current.countCards('e'); + } + else{ + return current.countCards('j'); + } + })){ + var next=player.chooseTarget('是否弃置场上的一张'+get.translation(type)+'牌?',function(card,player,target){ + if(_status.event.type=='equip'){ + return target.countCards('e')>0; + } + else{ + return target.countCards('j')>0; + } + }); + next.set('ai',function(target){ + if(type=='equip'){ + return -get.attitude(player,target); + } + else{ + return get.attitude(player,target); + } + }); + next.set('type',type); + event.type=type; + } + else{ + event.finish(); + } + } + else{ + event.finish(); + } + 'step 2' + if(event.type&&result.bool&&result.targets&&result.targets.length){ + player.line(result.targets,'green'); + if(event.type=='equip'){ + player.discardPlayerCard(result.targets[0],'e',true); + } + else{ + player.discardPlayerCard(result.targets[0],'j',true); + } + } + } + }, + releiji:{ + audio:2, + audioname:['boss_qinglong'], + trigger:{player:'respond'}, + filter:function(event,player){ + return event.card.name=='shan'; + }, + direct:true, + content:function(){ + "step 0"; + player.chooseTarget(get.prompt('releiji')).ai=function(target){ + if(target.hasSkill('hongyan')) return 0; + return get.damageEffect(target,_status.event.player,_status.event.player,'thunder'); + }; + "step 1" + if(result.bool){ + player.logSkill('releiji',result.targets,'thunder'); + event.target=result.targets[0]; + event.target.judge(function(card){ + var suit=get.suit(card); + if(suit=='spade') return -4; + if(suit=='club') return -2; + return 0; + }); + } + else{ + event.finish(); + } + "step 2" + if(result.suit=='club'){ + event.target.damage('thunder'); + player.recover(); + } + else if(result.suit=='spade'){ + event.target.damage(2,'thunder'); + } + }, + ai:{ + useShan:true, + effect:{ + target:function(card,player,target,current){ + if(get.tag(card,'respondShan')){ + var hastarget=game.hasPlayer(function(current){ + return get.attitude(target,current)<0; + }); + var be=target.countCards('e',{color:'black'}); + if(target.countCards('h','shan')&&be){ + if(!target.hasSkill('guidao')) return 0; + return [0,hastarget?target.countCards('he')/2:0]; + } + if(target.countCards('h','shan')&&target.countCards('h')>2){ + if(!target.hasSkill('guidao')) return 0; + return [0,hastarget?target.countCards('h')/4:0]; + } + if(target.countCards('h')>3||(be&&target.countCards('h')>=2)){ + return [0,0]; + } + if(target.countCards('h')==0){ + return [1.5,0]; + } + if(target.countCards('h')==1&&!be){ + return [1.2,0]; + } + if(!target.hasSkill('guidao')) return [1,0.05]; + return [1,Math.min(0.5,(target.countCards('h')+be)/4)]; + } + } + } + } + }, + shensu:{ + group:['shensu1','shensu2'] + }, + xinshensu:{ + group:['shensu1','shensu2','shensu4'] + }, + shensu1:{ + audio:2, + trigger:{player:'phaseBegin'}, + direct:true, + content:function(){ + "step 0" + var check= player.countCards('h')>2; + player.chooseTarget(get.prompt('shensu'),function(card,player,target){ + if(player==target) return false; + return player.canUse({name:'sha'},target,false); + }).set('check',check).set('ai',function(target){ + if(!_status.event.check) return 0; + return get.effect(target,{name:'sha'},_status.event.player); + }); + "step 1" + if(result.bool){ + player.logSkill('shensu1',result.targets); + player.useCard({name:'sha'},result.targets[0],false); + player.skip('phaseJudge'); + player.skip('phaseDraw'); + } + } + }, + shensu2:{ + audio:2, + trigger:{player:'phaseUseBefore'}, + direct:true, + filter:function(event,player){ + return player.countCards('he',{type:'equip'})>0; + }, + content:function(){ + "step 0" + var check=player.needsToDiscard(); + player.chooseCardTarget({ + prompt:get.prompt('shensu'), + filterCard:function(card,player){ + return get.type(card)=='equip'&&lib.filter.cardDiscardable(card,player) + }, + position:'he', + filterTarget:function(card,player,target){ + if(player==target) return false; + return player.canUse({name:'sha'},target,false); + }, + ai1:function(card){ + if(_status.event.check) return 0; + return 6-get.value(card); + }, + ai2:function(target){ + if(_status.event.check) return 0; + return get.effect(target,{name:'sha'},_status.event.player); + }, + check:check + }); + "step 1" + if(result.bool){ + player.logSkill('shensu2',result.targets); + player.discard(result.cards[0]); + player.useCard({name:'sha'},result.targets[0]); + trigger.cancel(); + } + } + }, + shensu4:{ + audio:'shensu1', + trigger:{player:'phaseDiscardBefore'}, + direct:true, + content:function(){ + "step 0" + var check=player.needsToDiscard()||player.isTurnedOver(); + player.chooseTarget(get.prompt('shensu'),function(card,player,target){ + if(player==target) return false; + return player.canUse({name:'sha'},target,false); + }).set('check',check).set('ai',function(target){ + if(!_status.event.check) return 0; + return get.effect(target,{name:'sha'},_status.event.player); + }); + "step 1" + if(result.bool){ + player.logSkill('shensu4',result.targets); + player.turnOver(); + player.useCard({name:'sha'},result.targets[0],false); + trigger.cancel(); + } + } + }, + jushou:{ + audio:true, + trigger:{player:'phaseEnd'}, + content:function(){ + player.draw(3); + player.turnOver(); + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(card.name=='guiyoujie') return [0,1]; + } + } + }, + }, + liegong:{ + audio:2, + trigger:{player:'shaBegin'}, + check:function(event,player){ + return get.attitude(player,event.target)<=0; + }, + logTarget:'target', + filter:function(event,player){ + var length=event.target.countCards('h'); + return (length>=player.hp||length<=player.getAttackRange()); + }, + content:function(){ + trigger.directHit=true; + }, + mod:{ + attackFrom:function(from,to,distance){ + if(get.zhu(from,'shouyue')) return distance-1; + } + } + }, + kuanggu:{ + audio:2, + trigger:{source:'damageEnd'}, + forced:true, + filter:function(event,player){ + return get.distance(player,event.player)<=1&&player.isDamaged(); + }, + content:function(){ + player.recover(trigger.num); + } + }, + tianxiang:{ + audio:2, + trigger:{player:'damageBefore'}, + direct:true, + filter:function(event,player){ + return player.countCards('h',{suit:'heart'})>0&&event.num>0; + }, + content:function(){ + "step 0" + player.chooseCardTarget({ + filterCard:function(card,player){ + return get.suit(card)=='heart'&&lib.filter.cardDiscardable(card,player); + }, + filterTarget:function(card,player,target){ + return player!=target; + }, + ai1:function(card){ + return 10-get.value(card); + }, + ai2:function(target){ + var att=get.attitude(_status.event.player,target); + var trigger=_status.event.getTrigger(); + var da=0; + if(_status.event.player.hp==1){ + da=10; + } + if(trigger.num>1){ + if(target.maxHp>5&&target.hp>1) return -att/10+da; + return -att+da; + } + var eff=get.damageEffect(target,trigger.source,target,trigger.nature); + if(att==0) return 0.1+da; + if(eff>=0&&trigger.num==1){ + return att+da; + } + if(target.hp==target.maxHp) return -att+da; + if(target.hp==1){ + if(target.maxHp<=4&&!target.hasSkillTag('maixie')){ + if(target.maxHp<=3){ + return -att+da; + } + return -att/2+da; + } + return da; + } + if(target.hp==target.maxHp-1){ + if(target.hp>2||target.hasSkillTag('maixie')) return att/5+da; + if(att>0) return 0.02+da; + return 0.05+da; + } + return att/2+da; + }, + prompt:get.prompt('tianxiang') + }); + "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('damageBefore'); + }, + ai:{ + maixie_defend:true, + effect:{ + target:function(card,player,target){ + if(player.hasSkillTag('jueqing',false,target)) return; + if(get.tag(card,'damage')&&target.countCards('h')>1) return 0.7; + } + }, + threaten:function(player,target){ + if(target.countCards('h')==0) return 2; + } + } + }, + tianxiang2:{ + trigger:{player:['damageAfter','damageCancelled','damageZero']}, + forced:true, + popup:false, + audio:false, vanish:true, - content:function(){ - if(player.hp0&&event.num>0; - }, - content:function(){ - "step 0" - player.chooseCardTarget({ - filterCard:function(card,player){ - return get.suit(card)=='heart'&&lib.filter.cardDiscardable(card,player); - }, - filterTarget:function(card,player,target){ - return player!=target; - }, - position:'he', - ai1:function(card){ - return 10-get.value(card); - }, - ai2:function(target){ - var att=get.attitude(_status.event.player,target); - var trigger=_status.event.getTrigger(); - var da=0; - if(_status.event.player.hp==1){ - da=10; - } - var eff=get.damageEffect(target,trigger.source,target); - if(att==0) return 0.1+da; - if(eff>=0&&att>0){ - return att+da; - } - if(att>0&&target.hp>1){ - if(target.maxHp-target.hp>=3) return att*1.1+da; - if(target.maxHp-target.hp>=2) return att*0.9+da; - } - return -att+da; - }, - prompt:get.prompt('retianxiang'), - prompt2:lib.translate.retianxiang_info - }); - "step 1" - if(result.bool){ - player.discard(result.cards,ui.special); - var target=result.targets[0]; - player.chooseControlList(true,function(event,player){ - var target=_status.event.target; - var att=get.attitude(player,target); - if(target.hasSkillTag('maihp')) att=-att; - if(att>0){ - return 0; - } - else{ - return 1; - } - }, - ['令'+get.translation(target)+'受到伤害来源对其造成的1点伤害,然后摸X张牌(X为其已损失体力值且至多为5)', - '令'+get.translation(target)+'失去1点体力,然后获得'+get.translation(result.cards)]).set('target',target); - player.logSkill(event.name,target); - trigger.cancel(); - event.target=target; - event.card=result.cards[0]; - } - else{ - event.finish(); - } - "step 2" - if(typeof result.index=='number'){ - if(result.index){ - event.target.loseHp().type='retianxiang'; - event.target.addSkill('retianxiang3'); - event.target.storage.retianxiang3=event.card; - } - else{ - event.target.damage(trigger.source).type='retianxiang'; - event.target.addSkill('retianxiang2'); - if(get.position(event.card)=='s'){ - event.card.discard(); - } - } - } - }, - ai:{ - maixie_defend:true, - effect:{ - target:function(card,player,target){ - if(player.hasSkillTag('jueqing',false,target)) return; - if(get.tag(card,'damage')&&target.countCards('he')>1) return 0.7; - } - }, - } - }, - retianxiang3:{ - trigger:{player:'loseHpAfter'}, - forced:true, - popup:false, - filter:function(event){ - return event.type=='retianxiang'; - }, - vanish:true, - content:function(){ - player.gain(player.storage.retianxiang3,'gain2'); - player.removeSkill('retianxiang3'); - }, - onremove:function(player){ - var card=player.storage.retianxiang3; - if(get.position(card)=='s'){ - card.discard(); - } - delete player.storage.retianxiang3; - } - }, - retianxiang2:{ - trigger:{player:'damageAfter'}, - forced:true, - popup:false, - filter:function(event){ - return event.type=='retianxiang'; - }, - vanish:true, - content:function(){ - if(player.isDamaged()){ - player.draw(player.maxHp-player.hp); - } - player.removeSkill('retianxiang2'); - }, - }, - xintianxiang:{ - audio:'tianxiang', - trigger:{player:'damageBefore'}, - direct:true, - filter:function(event,player){ - return player.countCards('he',{suit:'heart'})>0&&event.num>0&&!player.hasSkill('xintianxiang3'); - }, - content:function(){ - "step 0" - player.chooseCardTarget({ - filterCard:function(card,player){ - return get.suit(card)=='heart'&&lib.filter.cardDiscardable(card,player); - }, - filterTarget:function(card,player,target){ - return player!=target; - }, - position:'he', - ai1:function(card){ - return 10-get.value(card); - }, - ai2:function(target){ - var att=get.attitude(_status.event.player,target); - var trigger=_status.event.getTrigger(); - var da=0; - if(_status.event.player.hp==1){ - da=10; - } - if(trigger.num>1){ - if(target.maxHp>5&&target.hp>1) return -att/10+da; - return -att+da; - } - var eff=get.damageEffect(target,trigger.source,target,trigger.nature); - if(att==0) return 0.1+da; - if(eff>=0&&trigger.num==1){ - return att+da; - } - if(target.hp==target.maxHp) return -att+da; - if(target.hp==1){ - if(target.maxHp<=4&&!target.hasSkillTag('maixie')){ - if(target.maxHp<=3){ - return -att+da; - } - return -att/2+da; - } - return da; - } - if(target.hp==target.maxHp-1){ - if(target.hp>2||target.hasSkillTag('maixie')) return att/5+da; - if(att>0) return 0.02+da; - return 0.05+da; - } - return att/2+da; - }, - prompt:get.prompt('tianxiang') - }); - "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; - player.discard(result.cards[0]); - } - else{ - event.finish(); - } - "step 2" - trigger.trigger('damageBefore'); - }, - ai:{ - maixie_defend:true, - effect:{ - target:function(card,player,target){ - if(player.hasSkillTag('jueqing',false,target)) return; - if(get.tag(card,'damage')&&target.countCards('he')>1) return 0.7; - } - }, - } - }, - xintianxiang2:{ - trigger:{player:['damageAfter','damageCancelled','damageZero']}, - forced:true, - popup:false, - audio:false, + content:function(){ + if(player.hp0&&event.num>0; + }, + content:function(){ + "step 0" + player.chooseCardTarget({ + filterCard:function(card,player){ + return get.suit(card)=='heart'&&lib.filter.cardDiscardable(card,player); + }, + filterTarget:function(card,player,target){ + return player!=target; + }, + position:'he', + ai1:function(card){ + return 10-get.value(card); + }, + ai2:function(target){ + var att=get.attitude(_status.event.player,target); + var trigger=_status.event.getTrigger(); + var da=0; + if(_status.event.player.hp==1){ + da=10; + } + var eff=get.damageEffect(target,trigger.source,target); + if(att==0) return 0.1+da; + if(eff>=0&&att>0){ + return att+da; + } + if(att>0&&target.hp>1){ + if(target.maxHp-target.hp>=3) return att*1.1+da; + if(target.maxHp-target.hp>=2) return att*0.9+da; + } + return -att+da; + }, + prompt:get.prompt('retianxiang'), + prompt2:lib.translate.retianxiang_info + }); + "step 1" + if(result.bool){ + player.discard(result.cards,ui.special); + var target=result.targets[0]; + player.chooseControlList(true,function(event,player){ + var target=_status.event.target; + var att=get.attitude(player,target); + if(target.hasSkillTag('maihp')) att=-att; + if(att>0){ + return 0; + } + else{ + return 1; + } + }, + ['令'+get.translation(target)+'受到伤害来源对其造成的1点伤害,然后摸X张牌(X为其已损失体力值且至多为5)', + '令'+get.translation(target)+'失去1点体力,然后获得'+get.translation(result.cards)]).set('target',target); + player.logSkill(event.name,target); + trigger.cancel(); + event.target=target; + event.card=result.cards[0]; + } + else{ + event.finish(); + } + "step 2" + if(typeof result.index=='number'){ + if(result.index){ + event.target.loseHp().type='retianxiang'; + event.target.addSkill('retianxiang3'); + event.target.storage.retianxiang3=event.card; + } + else{ + event.target.damage(trigger.source).type='retianxiang'; + event.target.addSkill('retianxiang2'); + if(get.position(event.card)=='s'){ + event.card.discard(); + } + } + } + }, + ai:{ + maixie_defend:true, + effect:{ + target:function(card,player,target){ + if(player.hasSkillTag('jueqing',false,target)) return; + if(get.tag(card,'damage')&&target.countCards('he')>1) return 0.7; + } + }, + } + }, + retianxiang3:{ + trigger:{player:'loseHpAfter'}, + forced:true, + popup:false, + filter:function(event){ + return event.type=='retianxiang'; + }, vanish:true, - content:function(){ - 'step 0' - var source=player.storage.xintianxiang; - if(source.isDead()){ - event.finish(); - return; - } - var num=player.maxHp-player.hp||0; - var str1='令'+get.translation(player)+'摸'+get.cnNumber(num)+'张牌'; - var str2='令'+get.translation(player)+'防止造成和受到的所有伤害且天香失效直到你下一回合开始'; - var att=get.attitude(source,player); - var choice='选项一'; - if(att<0){ - if(num>=2){ - choice='选项二'; - } - } - else if(att>0){ - if(num<2&&!player.hasSkillTag('maixie')){ - choice='选项二'; - } - } - source.chooseControl(function(){ - return _status.event.choice; - }).set('choiceList',[str1,str2]).set('choice',choice); - 'step 1' - if(result.control=='选项一'){ - if(player.isDamaged()){ - player.draw(player.maxHp-player.hp); - } - } - else{ - player.storage.xintianxiang.addSkill('xintianxiang3'); - player.storage.xintianxiang.storage.xintianxiang3=player; - player.addSkill('xintianxiang4'); - } - player.removeSkill('xintianxiang2'); - delete player.storage.xintianxiang; - } - }, - xintianxiang3:{ - trigger:{player:['phaseBegin','dieBegin']}, - silent:true, - content:function(){ - if(player.storage.xintianxiang3){ - player.storage.xintianxiang3.removeSkill('xintianxiang4'); - delete player.storage.xintianxiang3; - } - player.removeSkill('xintianxiang3'); - } - }, - xintianxiang4:{ - trigger:{source:'damageBefore',player:'damageBefore'}, - forced:true, - mark:true, - intro:{ - content:'防止造成和受到的一切伤害' - }, - priority:15, - content:function(){ - trigger.cancel(); - }, - ai:{ - nofire:true, - nothunder:true, - nodamage:true, - notrick:true, - notricksource:true, - effect:{ - target:function(card,player,target,current){ - if(get.tag(card,'damage')){ - return 'zeroplayertarget'; - } - }, - player:function(card,player,target,current){ - if(get.tag(card,'damage')){ - return 'zeroplayertarget'; - } - } - } - } - }, - hongyan:{ - mod:{ - suit:function(card,suit){ - if(suit=='spade') return 'heart'; - } - } - }, - gzbuqu:{ - audio:'buqu', - trigger:{player:'changeHp'}, - filter:function(event,player){ - return player.hp<=0&&event.num<0; - }, - init:function(player){ - player.storage.gzbuqu=[]; - }, - priority:-15, - intro:{ - content:'cards' - }, - group:'gzbuqu_recover', - locked:true, - frequent:true, - ondisable:true, - onremove:function(player){ - if(player.storage.gzbuqu.length){ - delete player.nodying; - player.hp=1-player.storage.gzbuqu.length; - game.log(player,'移去了不屈牌',player.storage.gzbuqu); - while(player.storage.gzbuqu.length){ - player.storage.gzbuqu.shift().discard(); - } - player.unmarkSkill('gzbuqu'); - player.dying({}); - } - }, - process:function(player){ - delete player.nodying; - player.markSkill('gzbuqu'); - player.syncStorage('gzbuqu'); - var nums=[]; - var cards=player.storage.gzbuqu; - for(var i=0;i0&&event.num>0; - }, - forced:true, - popup:false, - content:function(){ - 'step 0' - if(player.hp>=player.storage.gzbuqu.length){ - player.hp-=player.storage.gzbuqu.length-1; - player.update(); - while(player.storage.gzbuqu.length){ - player.storage.gzbuqu.shift().discard(); - } - player.unmarkSkill('gzbuqu'); - delete player.nodying; - event.finish(); - } - else{ - player.chooseCardButton('移去'+get.cnNumber(player.hp)+'张不屈牌',true,player.hp,player.storage.gzbuqu).set('ai',function(button){ - var buttons=get.selectableButtons(); - for(var i=0;i0&&player.hp<=0}, - content:function(){ - "step 0" - event.card=get.cards()[0]; - if(player.storage.buqu==undefined) player.storage.buqu=[]; - player.storage.buqu.push(event.card); - player.syncStorage('buqu'); - player.showCards(player.storage.buqu,'不屈') - player.markSkill('buqu'); - "step 1" - for(var i=0;i2; - }, - content:function(){ - "step 0" - player.line(trigger.player,'green'); - player.loseHp(); - "step 1" - trigger.player.draw(2); - }, - }, - leiji:{ - audio:2, - trigger:{player:'respond'}, - filter:function(event,player){ - return event.card.name=='shan'; - }, - direct:true, - content:function(){ - "step 0"; - player.chooseTarget(get.prompt('leiji')).ai=function(target){ - if(target.hasSkill('hongyan')) return 0; - return get.damageEffect(target,_status.event.player,_status.event.player,'thunder'); - }; - "step 1" - if(result.bool){ - player.logSkill('leiji',result.targets,'thunder'); - event.target=result.targets[0]; - event.target.judge(function(card){ - if(get.suit(card)=='spade') return -4; - return 0; - }); - } - else{ - event.finish(); - } - "step 2" - if(result.bool==false){ - event.target.damage(2,'thunder'); - } - }, - ai:{ - mingzhi:false, - useShan:true, - effect:{ - target:function(card,player,target,current){ - if(get.tag(card,'respondShan')){ - var hastarget=game.hasPlayer(function(current){ - return get.attitude(target,current)<0; - }); - if(target.countCards('h','shan')&&target.countCards('e',{suit:'spade'})){ - return [0,hastarget?target.countCards('he')/2:0]; - } - if(target.countCards('h','shan')){ - return [1,hastarget?target.countCards('he')/2:0]; - } - return [1,target.countCards('h')/4]; - } - } - } - } - }, - guidao:{ - audio:2, - trigger:{global:'judge'}, - filter:function(event,player){ - return player.countCards('he',{color:'black'})>0; - }, - direct:true, - content:function(){ - "step 0" - player.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+ - get.translation(trigger.player.judging[0])+','+get.prompt('guidao'),'he',function(card){ - return get.color(card)=='black'; - }).set('ai',function(card){ - var trigger=_status.event.getTrigger(); - var player=_status.event.player; - var judging=_status.event.judging; - var result=trigger.judge(card)-trigger.judge(judging); - var attitude=get.attitude(player,trigger.player); - if(attitude==0||result==0) return 0; - if(attitude>0){ - return result; - } - else{ - return -result; - } - }).set('judging',trigger.player.judging[0]); - "step 1" - if(result.bool){ - player.respond(result.cards,'highlight'); - } - else{ - event.finish(); - } - "step 2" - if(result.bool){ - player.logSkill('guidao'); - player.$gain2(trigger.player.judging[0]); - player.gain(trigger.player.judging[0]); - trigger.player.judging[0]=result.cards[0]; - if(!get.owner(result.cards[0],'judge')){ - trigger.position.appendChild(result.cards[0]); - } - game.log(trigger.player,'的判定牌改为',result.cards[0]); - } - "step 3" - game.delay(2); - }, - ai:{ - tag:{ - rejudge:1 - } - } - }, - guhuo:{ - enable:'phaseUse', - usable:1, - audio:2, - filter:function(event,player){ - return player.countCards('h')>0 - }, - chooseButton:{ - dialog:function(){ - var list=['sha','tao','jiu','taoyuan','wugu','juedou','huogong','jiedao','tiesuo','guohe','shunshou','wuzhong','wanjian','nanman']; - for(var i=0;i=3&&player.hp>=3) return 0; - for(var i=0;i0&&event.num>0&&!player.hasSkill('xintianxiang3'); + }, + content:function(){ + "step 0" + player.chooseCardTarget({ + filterCard:function(card,player){ + return get.suit(card)=='heart'&&lib.filter.cardDiscardable(card,player); + }, + filterTarget:function(card,player,target){ + return player!=target; + }, + position:'he', + ai1:function(card){ + return 10-get.value(card); + }, + ai2:function(target){ + var att=get.attitude(_status.event.player,target); + var trigger=_status.event.getTrigger(); + var da=0; + if(_status.event.player.hp==1){ + da=10; + } + if(trigger.num>1){ + if(target.maxHp>5&&target.hp>1) return -att/10+da; + return -att+da; + } + var eff=get.damageEffect(target,trigger.source,target,trigger.nature); + if(att==0) return 0.1+da; + if(eff>=0&&trigger.num==1){ + return att+da; + } + if(target.hp==target.maxHp) return -att+da; + if(target.hp==1){ + if(target.maxHp<=4&&!target.hasSkillTag('maixie')){ + if(target.maxHp<=3){ + return -att+da; + } + return -att/2+da; + } + return da; + } + if(target.hp==target.maxHp-1){ + if(target.hp>2||target.hasSkillTag('maixie')) return att/5+da; + if(att>0) return 0.02+da; + return 0.05+da; + } + return att/2+da; + }, + prompt:get.prompt('tianxiang') + }); + "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; + player.discard(result.cards[0]); + } + else{ + event.finish(); + } + "step 2" + trigger.trigger('damageBefore'); + }, + ai:{ + maixie_defend:true, + effect:{ + target:function(card,player,target){ + if(player.hasSkillTag('jueqing',false,target)) return; + if(get.tag(card,'damage')&&target.countCards('he')>1) return 0.7; + } + }, + } + }, + xintianxiang2:{ + trigger:{player:['damageAfter','damageCancelled','damageZero']}, + forced:true, + popup:false, + audio:false, + vanish:true, + content:function(){ + 'step 0' + var source=player.storage.xintianxiang; + if(source.isDead()){ + event.finish(); + return; + } + var num=player.maxHp-player.hp||0; + var str1='令'+get.translation(player)+'摸'+get.cnNumber(num)+'张牌'; + var str2='令'+get.translation(player)+'防止造成和受到的所有伤害且天香失效直到你下一回合开始'; + var att=get.attitude(source,player); + var choice='选项一'; + if(att<0){ + if(num>=2){ + choice='选项二'; + } + } + else if(att>0){ + if(num<2&&!player.hasSkillTag('maixie')){ + choice='选项二'; + } + } + source.chooseControl(function(){ + return _status.event.choice; + }).set('choiceList',[str1,str2]).set('choice',choice); + 'step 1' + if(result.control=='选项一'){ + if(player.isDamaged()){ + player.draw(player.maxHp-player.hp); + } + } + else{ + player.storage.xintianxiang.addSkill('xintianxiang3'); + player.storage.xintianxiang.storage.xintianxiang3=player; + player.addSkill('xintianxiang4'); + } + player.removeSkill('xintianxiang2'); + delete player.storage.xintianxiang; + } + }, + xintianxiang3:{ + trigger:{player:['phaseBegin','dieBegin']}, + silent:true, + content:function(){ + if(player.storage.xintianxiang3){ + player.storage.xintianxiang3.removeSkill('xintianxiang4'); + delete player.storage.xintianxiang3; + } + player.removeSkill('xintianxiang3'); + } + }, + xintianxiang4:{ + trigger:{source:'damageBefore',player:'damageBefore'}, + forced:true, + mark:true, + intro:{ + content:'防止造成和受到的一切伤害' + }, + priority:15, + content:function(){ + trigger.cancel(); + }, + ai:{ + nofire:true, + nothunder:true, + nodamage:true, + notrick:true, + notricksource:true, + effect:{ + target:function(card,player,target,current){ + if(get.tag(card,'damage')){ + return 'zeroplayertarget'; + } + }, + player:function(card,player,target,current){ + if(get.tag(card,'damage')){ + return 'zeroplayertarget'; + } + } + } + } + }, + hongyan:{ + mod:{ + suit:function(card,suit){ + if(suit=='spade') return 'heart'; + } + } + }, + gzbuqu:{ + audio:'buqu', + trigger:{player:'changeHp'}, + filter:function(event,player){ + return player.hp<=0&&event.num<0; + }, + init:function(player){ + player.storage.gzbuqu=[]; + }, + priority:-15, + intro:{ + content:'cards' + }, + group:'gzbuqu_recover', + locked:true, + frequent:true, + ondisable:true, + onremove:function(player){ + if(player.storage.gzbuqu.length){ + delete player.nodying; + player.hp=1-player.storage.gzbuqu.length; + game.log(player,'移去了不屈牌',player.storage.gzbuqu); + while(player.storage.gzbuqu.length){ + player.storage.gzbuqu.shift().discard(); + } + player.unmarkSkill('gzbuqu'); + player.dying({}); + } + }, + process:function(player){ + delete player.nodying; + player.markSkill('gzbuqu'); + player.syncStorage('gzbuqu'); + var nums=[]; + var cards=player.storage.gzbuqu; + for(var i=0;i0&&event.num>0; + }, + forced:true, + popup:false, + content:function(){ + 'step 0' + if(player.hp>=player.storage.gzbuqu.length){ + player.hp-=player.storage.gzbuqu.length-1; + player.update(); + while(player.storage.gzbuqu.length){ + player.storage.gzbuqu.shift().discard(); + } + player.unmarkSkill('gzbuqu'); + delete player.nodying; + event.finish(); + } + else{ + player.chooseCardButton('移去'+get.cnNumber(player.hp)+'张不屈牌',true,player.hp,player.storage.gzbuqu).set('ai',function(button){ + var buttons=get.selectableButtons(); + for(var i=0;i0&&player.hp<=0}, + content:function(){ + "step 0" + event.card=get.cards()[0]; + if(player.storage.buqu==undefined) player.storage.buqu=[]; + player.storage.buqu.push(event.card); + player.syncStorage('buqu'); + player.showCards(player.storage.buqu,'不屈') + player.markSkill('buqu'); + "step 1" + for(var i=0;i2; + }, + content:function(){ + "step 0" + player.line(trigger.player,'green'); + player.loseHp(); + "step 1" + trigger.player.draw(2); + }, + }, + leiji:{ + audio:2, + trigger:{player:'respond'}, + filter:function(event,player){ + return event.card.name=='shan'; + }, + direct:true, + content:function(){ + "step 0"; + player.chooseTarget(get.prompt('leiji')).ai=function(target){ + if(target.hasSkill('hongyan')) return 0; + return get.damageEffect(target,_status.event.player,_status.event.player,'thunder'); + }; + "step 1" + if(result.bool){ + player.logSkill('leiji',result.targets,'thunder'); + event.target=result.targets[0]; + event.target.judge(function(card){ + if(get.suit(card)=='spade') return -4; + return 0; + }); + } + else{ + event.finish(); + } + "step 2" + if(result.bool==false){ + event.target.damage(2,'thunder'); + } + }, + ai:{ + mingzhi:false, + useShan:true, + effect:{ + target:function(card,player,target,current){ + if(get.tag(card,'respondShan')){ + var hastarget=game.hasPlayer(function(current){ + return get.attitude(target,current)<0; + }); + if(target.countCards('h','shan')&&target.countCards('e',{suit:'spade'})){ + return [0,hastarget?target.countCards('he')/2:0]; + } + if(target.countCards('h','shan')){ + return [1,hastarget?target.countCards('he')/2:0]; + } + return [1,target.countCards('h')/4]; + } + } + } + } + }, + guidao:{ + audio:2, + trigger:{global:'judge'}, + filter:function(event,player){ + return player.countCards('he',{color:'black'})>0; + }, + direct:true, + content:function(){ + "step 0" + player.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+ + get.translation(trigger.player.judging[0])+','+get.prompt('guidao'),'he',function(card){ + return get.color(card)=='black'; + }).set('ai',function(card){ + var trigger=_status.event.getTrigger(); + var player=_status.event.player; + var judging=_status.event.judging; + var result=trigger.judge(card)-trigger.judge(judging); + var attitude=get.attitude(player,trigger.player); + if(attitude==0||result==0) return 0; + if(attitude>0){ + return result; + } + else{ + return -result; + } + }).set('judging',trigger.player.judging[0]); + "step 1" + if(result.bool){ + player.respond(result.cards,'highlight'); + } + else{ + event.finish(); + } + "step 2" + if(result.bool){ + player.logSkill('guidao'); + player.$gain2(trigger.player.judging[0]); + player.gain(trigger.player.judging[0]); + trigger.player.judging[0]=result.cards[0]; + if(!get.owner(result.cards[0],'judge')){ + trigger.position.appendChild(result.cards[0]); + } + game.log(trigger.player,'的判定牌改为',result.cards[0]); + } + "step 3" + game.delay(2); + }, + ai:{ + tag:{ + rejudge:1 + } + } + }, + guhuo:{ + enable:'phaseUse', + usable:1, + audio:2, + filter:function(event,player){ + return player.countCards('h')>0 + }, + chooseButton:{ + dialog:function(){ + var list=['sha','tao','jiu','taoyuan','wugu','juedou','huogong','jiedao','tiesuo','guohe','shunshou','wuzhong','wanjian','nanman']; + for(var i=0;i=3&&player.hp>=3) return 0; + for(var i=0;in2){ - target.damage(player); - player.line(target); - } - else if(n1=3) return 0; - if(!target.hasSkillTag('maixie_hp')){ - return -3; - } - return -1; - } - if(num==2) return 0; - return -2+num+(Math.pow(target.hp,0.2)-1); - } - } - } - } - }, - skill:{ - choulve:{ - trigger:{player:'phaseUseBegin'}, - direct:true, - filter:function(event,player){ - return game.hasPlayer(function(current){ - return current!=player&¤t.countCards('he'); - }) - }, - content:function(){ - 'step 0' - var str='令一名其他角色交给你一张牌'; - if(player.storage.choulve){ - str+='若其如此做,视为你使用'+get.translation(player.storage.choulve); - } - var goon=true; - if(player.storage.choulve){ - goon=game.hasPlayer(function(current){ - return player.canUse(player.storage.choulve,current)&&get.effect(current,player.storage.choulve,player,player)>0; - }); - } - player.chooseTarget(get.prompt('choulve'),str,function(card,player,target){ - return target!=player&&target.countCards('he'); - }).set('ai',function(target){ - if(!_status.event.goon) return 0; - var player=_status.event.player; - if(get.attitude(player,target)>=0&&get.attitude(target,player)>=0){ - return Math.sqrt(target.countCards('he')); - } - return 0; - }).set('goon',goon); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - player.logSkill('choulve',target); - target.chooseCard('he','是否交给'+get.translation(player)+'一张牌?', - player.storage.choulve?('若如此做,视为'+get.translation(player)+ - '使用'+get.translation(player.storage.choulve)):null).set('ai',function(card){ - if(_status.event.goon) return 7-get.value(card); - return 0; - }).set('goon',get.attitude(target,player)>1); - event.target=target; - } - else{ - event.finish(); - } - 'step 2' - if(result.bool){ - event.target.give(result.cards,player); - if(player.storage.choulve){ - player.chooseUseTarget(player.storage.choulve); - } - } - }, - group:'choulve_damage', - subSkill:{ - damage:{ - trigger:{player:'damageEnd'}, - silent:true, - content:function(){ - if(trigger.card&&get.info(trigger.card).enable&&get.type(trigger.card)!='delay'){ - if(trigger.cards&&trigger.cards.length==1&&trigger.cards[0]==trigger.card){ - player.storage.choulve=game.createCard(trigger.card); - } - else{ - player.storage.choulve={name:trigger.card.name}; - } - } - } - } - } - }, - polu:{ - trigger:{player:['phaseBegin','damageEnd']}, - forced:true, - filter:function(event,player){ - return !player.getEquip('ly_piliche'); - }, - content:function(){ - if(trigger.name=='phase'){ - player.useCard(game.createCard('ly_piliche','diamond',1),player); - } - else{ - player.draw(); - } - } - }, - ly_piliche:{ - trigger:{source:'damageEnd'}, - check:function(event,player){ - return get.attitude(player,event.player)<0; - }, - filter:function(event,player){ - if(event.card&&get.type(event.card)=='delay') return false; - return event.player.isIn()&&(event.player.getEquip(2)||event.player.getEquip(3)); - }, - logTarget:'player', - content:function(){ - var equip2=trigger.player.getEquip(2); - var equip3=trigger.player.getEquip(3); - var cards=[]; - if(equip2) cards.push(equip2); - if(equip3) cards.push(equip3); - if(cards.length){ - trigger.player.discard(cards); - } - } - }, - shuimeng:{ - trigger:{player:'phaseUseAfter'}, - direct:true, - filter:function(event,player){ - return player.countCards('h'); - }, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('shuimeng'),function(card,player,target){ - return target!=player&&target.countCards('h'); - }).set('ai',function(target){ - if(!_status.event.goon) return 0; - return -get.attitude(_status.event.player,target); - }).set('goon',player.needsToDiscard()||player.hasCard(function(card){ - var val=get.value(card); - if(val<0) return true; - if(val<=5){ - return card.number>=11; - } - if(val<=6){ - return card.number>=12; - } - return false; - })); - 'step 1' - if(result.bool){ - player.logSkill('shuimeng',result.targets); - event.target=result.targets[0]; - player.chooseToCompare(event.target); - } - else{ - event.finish(); - } - 'step 2' - if(result.bool){ - player.useCard({name:'wuzhong'},player); - } - else{ - event.target.useCard({name:'guohe'},player); - } - } - }, - qianya:{ - trigger:{target:'useCardToBegin'}, - direct:true, - filter:function(event,player){ - return get.type(event.card,'trick')=='trick'&&player.countCards('h'); - }, - content:function(){ - 'step 0' - var nh=player.countCards('h'); - player.chooseCardTarget({ - filterCard:true, - filterTarget:function(card,player,target){ - return target!=player; - }, - selectCard:[1,nh], - ai1:function(card){ - var player=_status.event.player; - var cardname=_status.event.cardname; - if(_status.event.du) return -get.value(card); - else if(_status.event.shuimeng){ - if(cardname=='wuzhong'){ - if(player.needsToDiscard(2-ui.selected.cards.length)){ - return 10-get.value(card); - } - } - else if(cardname=='guohe'){ - if(player.needsToDiscard(-1-ui.selected.cards.length)){ - return 10-get.value(card); - } - } - return 0; - } - else if(cardname=='lebu'){ - if(player.needsToDiscard(1-ui.selected.cards.length)){ - return 8-get.value(card); - } - else{ - if(!ui.selected.cards.length){ - return 6-get.value(card); - } - return 0; - } - } - else if(cardname=='shunshou'){ - if(_status.event.nh<=2) return get.value(card); - } - else if(cardname=='huogong'){ - if(player.hp==1) return get.value(card); - } - if(ui.selected.cards.length) return 0; - return 7-get.value(card); - }, - ai2:function(target){ - var att=get.attitude(_status.event.player,target); - var nh2=target.countCards('h'); - var num=Math.sqrt(1+nh2); - var cardname=_status.event.cardname; - if(_status.event.du) return 0.5-att; - else if(_status.event.shuimeng){ - return att/num; - } - else if(cardname=='lebu'){ - return att/num; - } - else if(cardname=='shunshou'){ - if(_status.event.nh<=2) return att/num; - } - else if(cardname=='huogong'){ - if(_status.event.player.hp==1) return att/num; - } - if(_status.event.nh>nh2+1){ - return att/num; - } - return 0; - }, - du:player.hasCard(function(card){ - return get.value(card)<0; - }), - shuimeng:trigger.getParent(2).name=='shuimeng', - nh:nh, - cardname:trigger.card.name, - prompt:get.prompt('qianya') - }); - 'step 1' - if(result.bool){ - player.logSkill('qianya',result.targets); - player.give(result.cards,result.targets[0]); - } - } - }, - xianfu:{ - trigger:{global:'gameStart',player:'enterGame'}, - forced:true, - filter:function(){ - return game.players.length>1; - }, - content:function(){ - 'step 0' - player.chooseTarget('选择【先辅】的目标',lib.translate.xianfu_info,true,function(card,player,target){ - return target!=player&&!target.hasSkill('xianfu2'); - }).set('ai',function(target){ - var att=get.attitude(_status.event.player,target); - if(att>0) return att+1; - if(att==0) return Math.random(); - return att; - }); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - player.line(target,'green'); - game.log(target,'成为了','【先辅】','的目标'); - target.storage.xianfu2=player; - target.addSkill('xianfu2'); - } - } - }, - xianfu2:{ - mark:'character', - intro:{ - content:'当你受到伤害后,$受到等量的伤害,当你回复体力后,$回复等量的体力' - }, - nopop:true, - trigger:{player:['damageAfter','recoverAfter']}, - forced:true, - popup:false, - filter:function(event,player){ - return player.storage.xianfu2&&player.storage.xianfu2.isIn()&&event.num>0; - }, - content:function(){ - 'step 0' - game.delayx(); - 'step 1' - var target=player.storage.xianfu2; - player.line(target,'green'); - target.logSkill('xianfu'); - target[trigger.name](trigger.num,trigger.source||'nosource'); - game.delay(); - }, - group:'xianfu3', - onremove:true, - }, - xianfu3:{ - trigger:{global:'dieAfter'}, - silent:true, - filter:function(event,player){ - return event.player==player.storage.xianfu2; - }, - content:function(){ - player.removeSkill('xianfu2'); - } - }, - chouce:{ - trigger:{player:'damageEnd'}, - content:function(){ - 'step 0' - event.num=trigger.num; - 'step 1' - player.judge(); - 'step 2' - event.color=result.color; - if(event.color=='black'){ - player.chooseTarget('弃置一名角色区域内的一张牌',true,function(card,player,target){ - return target.countCards('hej'); - }).set('ai',function(target){ - var player=_status.event.player; - var att=get.attitude(player,target); - if(att<0){ - att=-Math.sqrt(-att); - } - else{ - att=Math.sqrt(att); - } - return att*lib.card.guohe.ai.result.target(player,target); - }) - } - else{ - var next=player.chooseTarget('令一名角色摸一张牌',true); - var xianfu=game.findPlayer(function(current){ - return current.hasSkill('xianfu2')&¤t.storage.xianfu2==player; - }); - if(xianfu){ - next.set('prompt2','(若目标为'+get.translation(xianfu)+'则改为摸两张牌)'); - } - next.set('ai',function(target){ - var player=_status.event.player; - var att=get.attitude(player,target)/Math.sqrt(1+target.countCards('h')); - if(target.storage.xianfu2==player) return att*2; - return att; - }) - } - 'step 3' - if(result.bool){ - var target=result.targets[0]; - player.line(target,'green'); - if(event.color=='black'){ - player.discardPlayerCard(target,'hej',true); - } - else{ - if(target.hasSkill('xianfu2')&&target.storage.xianfu2==player){ - target.draw(2); - } - else{ - target.draw(); - } - } - } - 'step 4' - if(--event.num>0){ - player.chooseBool('是否再次发动【筹策】?'); - } - else{ - event.finish(); - } - 'step 5' - if(result.bool){ - event.goto(1); - } - }, - ai:{ - maixie:true, + skills:['ly_piliche'], + destroy:'polu' + }, + wy_meirenji:{ + fullskin:true, + vanish:true, + derivation:'wangyun', + type:'trick', + enable:true, + filterTarget:function(card,player,target){ + return target.countCards('h')&&target!=player&&target.sex=='male'; + }, + content:function(){ + 'step 0' + event.list=game.filterPlayer(function(current){ + return current!=player&¤t!=target&¤t.sex=='female'; + }).sortBySeat(); + 'step 1' + if(target.countCards('h')&&event.list.length){ + event.current=event.list.shift(); + event.current.gainPlayerCard(target,true); + target.line2([event.current,player]); + } + else{ + event.goto(4); + } + 'step 2' + event.current.chooseCard('h',true,'将一张手牌交给'+get.translation(player)); + 'step 3' + if(result.bool){ + event.current.give(result.cards,player); + } + event.goto(1); + 'step 4' + var n1=target.countCards('h'); + var n2=player.countCards('h'); + if(n1>n2){ + target.damage(player); + player.line(target); + } + else if(n1=3) return 0; + if(!target.hasSkillTag('maixie_hp')){ + return -3; + } + return -1; + } + if(num==2) return 0; + return -2+num+(Math.pow(target.hp,0.2)-1); + } + } + } + } + }, + skill:{ + zishu:{ + subSkill:{ + discard:{ + trigger:{player:'gainAfter'}, + silent:true, + filter:function(event,player){ + return _status.currentPhase!=player; + }, + content:function(){ + if(!player.storage.zishu){ + player.storage.zishu=[]; + } + player.storage.zishu.addArray(trigger.cards); + } + }, + discard2:{ + trigger:{global:'phaseAfter'}, + forced:true, + filter:function(event,player){ + if(_status.currentPhase!=player&&player.storage.zishu){ + var he=player.getCards('he'); + for(var i=0;i0; + }); + } + player.chooseTarget(get.prompt('choulve'),str,function(card,player,target){ + return target!=player&&target.countCards('he'); + }).set('ai',function(target){ + if(!_status.event.goon) return 0; + var player=_status.event.player; + if(get.attitude(player,target)>=0&&get.attitude(target,player)>=0){ + return Math.sqrt(target.countCards('he')); + } + return 0; + }).set('goon',goon); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('choulve',target); + target.chooseCard('he','是否交给'+get.translation(player)+'一张牌?', + player.storage.choulve?('若如此做,视为'+get.translation(player)+ + '使用'+get.translation(player.storage.choulve)):null).set('ai',function(card){ + if(_status.event.goon) return 7-get.value(card); + return 0; + }).set('goon',get.attitude(target,player)>1); + event.target=target; + } + else{ + event.finish(); + } + 'step 2' + if(result.bool){ + event.target.give(result.cards,player); + if(player.storage.choulve){ + player.chooseUseTarget(player.storage.choulve); + } + } + }, + group:'choulve_damage', + subSkill:{ + damage:{ + trigger:{player:'damageEnd'}, + silent:true, + content:function(){ + if(trigger.card&&get.info(trigger.card).enable&&get.type(trigger.card)!='delay'){ + if(trigger.cards&&trigger.cards.length==1&&trigger.cards[0]==trigger.card){ + player.storage.choulve=game.createCard(trigger.card); + } + else{ + player.storage.choulve={name:trigger.card.name}; + } + } + } + } + } + }, + polu:{ + trigger:{player:['phaseBegin','damageEnd']}, + forced:true, + filter:function(event,player){ + return !player.getEquip('ly_piliche'); + }, + content:function(){ + if(trigger.name=='phase'){ + player.useCard(game.createCard('ly_piliche','diamond',1),player); + } + else{ + player.draw(); + } + } + }, + ly_piliche:{ + trigger:{source:'damageEnd'}, + check:function(event,player){ + return get.attitude(player,event.player)<0; + }, + filter:function(event,player){ + if(event.card&&get.type(event.card)=='delay') return false; + return event.player.isIn()&&(event.player.getEquip(2)||event.player.getEquip(3)); + }, + logTarget:'player', + content:function(){ + var equip2=trigger.player.getEquip(2); + var equip3=trigger.player.getEquip(3); + var cards=[]; + if(equip2) cards.push(equip2); + if(equip3) cards.push(equip3); + if(cards.length){ + trigger.player.discard(cards); + } + } + }, + shuimeng:{ + trigger:{player:'phaseUseAfter'}, + direct:true, + filter:function(event,player){ + return player.countCards('h'); + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('shuimeng'),function(card,player,target){ + return target!=player&&target.countCards('h'); + }).set('ai',function(target){ + if(!_status.event.goon) return 0; + return -get.attitude(_status.event.player,target); + }).set('goon',player.needsToDiscard()||player.hasCard(function(card){ + var val=get.value(card); + if(val<0) return true; + if(val<=5){ + return card.number>=11; + } + if(val<=6){ + return card.number>=12; + } + return false; + })); + 'step 1' + if(result.bool){ + player.logSkill('shuimeng',result.targets); + event.target=result.targets[0]; + player.chooseToCompare(event.target); + } + else{ + event.finish(); + } + 'step 2' + if(result.bool){ + player.useCard({name:'wuzhong'},player); + } + else{ + event.target.useCard({name:'guohe'},player); + } + } + }, + qianya:{ + trigger:{target:'useCardToBegin'}, + direct:true, + filter:function(event,player){ + return get.type(event.card,'trick')=='trick'&&player.countCards('h'); + }, + content:function(){ + 'step 0' + var nh=player.countCards('h'); + player.chooseCardTarget({ + filterCard:true, + filterTarget:function(card,player,target){ + return target!=player; + }, + selectCard:[1,nh], + ai1:function(card){ + var player=_status.event.player; + var cardname=_status.event.cardname; + if(_status.event.du) return -get.value(card); + else if(_status.event.shuimeng){ + if(cardname=='wuzhong'){ + if(player.needsToDiscard(2-ui.selected.cards.length)){ + return 10-get.value(card); + } + } + else if(cardname=='guohe'){ + if(player.needsToDiscard(-1-ui.selected.cards.length)){ + return 10-get.value(card); + } + } + return 0; + } + else if(cardname=='lebu'){ + if(player.needsToDiscard(1-ui.selected.cards.length)){ + return 8-get.value(card); + } + else{ + if(!ui.selected.cards.length){ + return 6-get.value(card); + } + return 0; + } + } + else if(cardname=='shunshou'){ + if(_status.event.nh<=2) return get.value(card); + } + else if(cardname=='huogong'){ + if(player.hp==1) return get.value(card); + } + if(ui.selected.cards.length) return 0; + return 7-get.value(card); + }, + ai2:function(target){ + var att=get.attitude(_status.event.player,target); + var nh2=target.countCards('h'); + var num=Math.sqrt(1+nh2); + var cardname=_status.event.cardname; + if(_status.event.du) return 0.5-att; + else if(_status.event.shuimeng){ + return att/num; + } + else if(cardname=='lebu'){ + return att/num; + } + else if(cardname=='shunshou'){ + if(_status.event.nh<=2) return att/num; + } + else if(cardname=='huogong'){ + if(_status.event.player.hp==1) return att/num; + } + if(_status.event.nh>nh2+1){ + return att/num; + } + return 0; + }, + du:player.hasCard(function(card){ + return get.value(card)<0; + }), + shuimeng:trigger.getParent(2).name=='shuimeng', + nh:nh, + cardname:trigger.card.name, + prompt:get.prompt('qianya') + }); + 'step 1' + if(result.bool){ + player.logSkill('qianya',result.targets); + player.give(result.cards,result.targets[0]); + } + } + }, + xianfu:{ + trigger:{global:'gameStart',player:'enterGame'}, + forced:true, + filter:function(){ + return game.players.length>1; + }, + content:function(){ + 'step 0' + player.chooseTarget('选择【先辅】的目标',lib.translate.xianfu_info,true,function(card,player,target){ + return target!=player&&!target.hasSkill('xianfu2'); + }).set('ai',function(target){ + var att=get.attitude(_status.event.player,target); + if(att>0) return att+1; + if(att==0) return Math.random(); + return att; + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.line(target,'green'); + game.log(target,'成为了','【先辅】','的目标'); + target.storage.xianfu2=player; + target.addSkill('xianfu2'); + } + } + }, + xianfu2:{ + mark:'character', + intro:{ + content:'当你受到伤害后,$受到等量的伤害,当你回复体力后,$回复等量的体力' + }, + nopop:true, + trigger:{player:['damageAfter','recoverAfter']}, + forced:true, + popup:false, + filter:function(event,player){ + return player.storage.xianfu2&&player.storage.xianfu2.isIn()&&event.num>0; + }, + content:function(){ + 'step 0' + game.delayx(); + 'step 1' + var target=player.storage.xianfu2; + player.line(target,'green'); + target.logSkill('xianfu'); + target[trigger.name](trigger.num,trigger.source||'nosource'); + game.delay(); + }, + group:'xianfu3', + onremove:true, + }, + xianfu3:{ + trigger:{global:'dieAfter'}, + silent:true, + filter:function(event,player){ + return event.player==player.storage.xianfu2; + }, + content:function(){ + player.removeSkill('xianfu2'); + } + }, + chouce:{ + trigger:{player:'damageEnd'}, + content:function(){ + 'step 0' + event.num=trigger.num; + 'step 1' + player.judge(); + 'step 2' + event.color=result.color; + if(event.color=='black'){ + player.chooseTarget('弃置一名角色区域内的一张牌',true,function(card,player,target){ + return target.countCards('hej'); + }).set('ai',function(target){ + var player=_status.event.player; + var att=get.attitude(player,target); + if(att<0){ + att=-Math.sqrt(-att); + } + else{ + att=Math.sqrt(att); + } + return att*lib.card.guohe.ai.result.target(player,target); + }) + } + else{ + var next=player.chooseTarget('令一名角色摸一张牌',true); + var xianfu=game.findPlayer(function(current){ + return current.hasSkill('xianfu2')&¤t.storage.xianfu2==player; + }); + if(xianfu){ + next.set('prompt2','(若目标为'+get.translation(xianfu)+'则改为摸两张牌)'); + } + next.set('ai',function(target){ + var player=_status.event.player; + var att=get.attitude(player,target)/Math.sqrt(1+target.countCards('h')); + if(target.storage.xianfu2==player) return att*2; + return att; + }) + } + 'step 3' + if(result.bool){ + var target=result.targets[0]; + player.line(target,'green'); + if(event.color=='black'){ + player.discardPlayerCard(target,'hej',true); + } + else{ + if(target.hasSkill('xianfu2')&&target.storage.xianfu2==player){ + target.draw(2); + } + else{ + target.draw(); + } + } + } + 'step 4' + if(--event.num>0){ + player.chooseBool('是否再次发动【筹策】?'); + } + else{ + event.finish(); + } + 'step 5' + if(result.bool){ + event.goto(1); + } + }, + ai:{ + maixie:true, maixie_hp:true, effect:{ target:function(card,player,target){ @@ -700,9325 +827,9330 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } } - } - }, - fuqi:{ - mod:{ - wuxieRespondable:function(card,player,target,current){ - if(player!=current&&get.distance(player,current)<=1){ - return false; - } - } - }, - ai:{ - norespond:true, - skillTagFilter:function(player,tag,arg){ - if(tag=='norespond'&&Array.isArray(arg)){ - if(get.distance(arg[1],player)<=1) return true; - } - return false; - } - } - }, - wylianji:{ - enable:'phaseUse', - usable:1, - filter:function(event,player){ - return player.hasCard(lib.skill.wylianji.filterCard); - }, - check:function(card){ - if(card.name=='sha') return 1; - else{ - if(get.tag(card,'damage')){ - if(get.tag(card,'multineg')) return 5; - return 2; - } - } - return 0; - }, - filterCard:function(card){ - return card.name=='sha'||(get.type(card,'trick')=='trick'&&get.color(card)=='black'&&!get.info(card).multitarget)&&get.info(card).enable; - }, - filterTarget:function(card,player,target){ - return target!=player&&!target.isMin()&& - (player.canUse(card,target,false)||game.hasPlayer(function(current){ - return current!=player&&target.canUse(card,current); - })); - }, - discard:false, - lose:true, - delay:0, - content:function(){ - 'step 0' - player.showCards(get.translation(player)+'对'+get.translation(target)+'发动了【连计】',cards); - 'step 1' - var equip1=get.cardPile2(function(card){ - return get.subtype(card)=='equip1'; - }); - if(!equip1){ - player.popup('连计失败'); - game.log('牌堆中无装备'); - event.finish(); - return; - } - target.$draw(equip1); - target.equip(equip1); - game.delay(); - 'step 2' - var card=cards[0]; - var bool1=game.hasPlayer(function(current){ - return current!=player&&target.canUse(card,current); - }); - var bool2=player.canUse(card,target,false); - if(bool1&&bool2){ - target.chooseControl(function(){ - return 0; - }).set('choiceList',[ - '对除'+get.translation(player)+'以外的角色使用'+get.translation(cards)+',并将装备区里的武器牌交给该牌的一个目标角色', - '视为'+get.translation(player)+'对你使用'+get.translation(cards)+',并将装备区内的武器牌交给'+get.translation(player) - ]); - } - else if(bool1){ - event.directindex=0; - } - else if(bool2){ - event.directindex=1; - } - else{ - event.finish(); - } - 'step 3' - var card=cards[0]; - if(result&&typeof event.directindex!='number'){ - event.directindex=result.index; - } - if(event.directindex==1){ - event.insert(lib.skill.wylianji.content_use,{ - player:player, - target:target, - card:card - }) - } - else{ - event.insert(lib.skill.wylianji.content_give,{ - player:target, - card:card, - targets:game.filterPlayer(function(current){ - return current!=player; - }) - }); - } - }, - content_use:function(){ - 'step 0' - player.useCard(card,target); - 'step 1' - if(!get.owner(card)){ - target.gain(card,'gain2'); - } - 'step 2' - var equip1=target.getEquip(1); - if(equip1){ - game.delay(); - target.give(equip1,player); - target.line(player); - } - }, - content_give:function(){ - 'step 0' - var select=get.select(get.info(card).selectTarget); - if(select[1]==-1){ - for(var i=0;i1){ - player.chooseTarget(true,'将'+get.translation(equip1)+'交给一名角色',function(card,player,target){ - return _status.event.list.contains(target); - }).set('ai',function(target){ - return get.attitude(player,target); - }).set('list',_status.event.list); - event.equip1=equip1; - } - else{ - if(event.list.length==1){ - player.give(equip1,event.list[0]); - player.line(event.list); - } - event.finish(); - } - } - else{ - event.finish(); - } - 'step 3' - if(result.bool&&result.targets.length&&event.equip1){ - player.give(event.equip1,result.targets[0]); - player.line(result.targets); - } - }, - ai:{ - order:7, - result:{ - target:function(player,target){ - if(ui.selected.cards.length){ - var card=ui.selected.cards[0]; - var bool=(card.name!='sha'); - if(game.hasPlayer(function(current){ - return target.canUse(card,current,bool)&&get.effect(current,card,target,player)>0; - })){ - var num=1; - if(target.getEquip(1)){ - num=0.6; - } - if(target.hasSkillTag('noe')) 2*num; - return num; - } - } - return 0; - } - } - } - }, - moucheng:{ - derivation:['jingong','wy_meirenji','wy_xiaolicangdao'], - trigger:{global:'damageEnd'}, - forced:true, - popup:false, - filter:function(event,player){ - return event.source!=player&&event.getParent(2).name=='useCard'&&event.getParent(3).name=='wylianjiInserted'; - }, - init:function(player){ - player.storage.moucheng=0; - }, - intro:{ - content:'已造成#点伤害' - }, - unique:true, - content:function(){ - player.storage.moucheng+=trigger.num; - if(player.hasSkill('moucheng')){ - player.markSkill('moucheng'); - player.syncStorage('moucheng'); - } - if(player.storage.moucheng>=3){ - event.trigger('mouchengAwaken'); - } - }, - group:'moucheng_awaken', - subSkill:{ - awaken:{ - trigger:{player:'mouchengAwaken'}, - forced:true, - skillAnimation:true, - content:function(){ - player.awakenSkill('moucheng'); - player.removeSkill('wylianji'); - player.addSkill('jingong'); - } - } - } - }, - jingong:{ - enable:'phaseUse', - filter:function(event,player){ - return player.countCards('he',function(card){ - return card.name=='sha'||get.type(card)=='equip'; - }); - }, - delay:0, - usable:1, - content:function(){ - 'step 0' - var list=get.inpile('trick','trick').randomGets(2); - if(Math.random()<0.5){ - list.push('wy_meirenji'); - } - else{ - list.push('wy_xiaolicangdao'); - } - for(var i=0;i0; - })){ - if(name=='wy_meirenji'||name=='wy_xiaolicangdao') return Math.random()+0.5; - return Math.random(); - } - return 0; - }); - 'step 1' - if(result.bool){ - var name=result.links[0][2]; - event.fakecard={name:name}; - player.chooseCardTarget({ - filterCard:function(card){ - return card.name=='sha'||get.type(card)=='equip'; - }, - position:'he', - filterTarget:lib.filter.filterTarget, - selectTarget:lib.filter.selectTarget, - ai1:function(card){ - return 7-get.value(card); - }, - ai2:function(target){ - var card=_status.event.fakecard; - var player=_status.event.player; - return get.effect(target,card,player,player); - }, - _get_card:event.fakecard, - prompt:'将一张装备牌或【杀】当作'+get.translation(name)+'使用' - }).set('fakecard',event.fakecard); - } - else{ - event.finish(); - } - 'step 2' - if(result.bool){ - player.useCard(event.fakecard,result.cards,result.targets); - player.addTempSkill('jingong2'); - } - }, - ai:{ - order:2, - result:{ - player:function(player){ - if((player.hp<=2||player.needsToDiscard())&&!player.getStat('damage')) return 0; - return 1; - } - } - } - }, - jingong2:{ - trigger:{player:'phaseEnd'}, - forced:true, - filter:function(event,player){ - return !player.getStat('damage'); - }, - content:function(){ - player.loseHp(); - } - }, - jingong3:{}, - weikui:{ - audio:'kuiwei', - enable:'phaseUse', - usable:1, - filterTarget:function(card,player,target){ - return target!=player&&target.countCards('h'); - }, - content:function(){ - 'step 0' - player.loseHp(); - 'step 1' - if(target.countCards('h','shan')){ - player.viewHandcards(target); - player.useCard({name:'sha'},target,false); - player.storage.weikui2=target; - player.addTempSkill('weikui2'); - } - else{ - player.discardPlayerCard(target,'visible',true); - } - }, - ai:{ - order:8, - result:{ - target:function(player,target){ - if(player.hp<=2) return 0; - if(player.hp==3) return target.hp<=2?-1:0; - return -1; - } - } - } - }, - weikui2:{ - onremove:true, - mod:{ - globalFrom:function(from,to){ - if(to==from.storage.weikui2) return -Infinity; - } - }, - mark:'character', - intro:{ - content:'与$的距离视为1直到回合结束' - }, - }, - lizhan:{ - audio:'yanzheng', - trigger:{player:'phaseEnd'}, - direct:true, - filter:function(event,player){ - for(var i=0;i1; - }, - content:function(){ - 'step 0' - event.num=player.maxHp-1; - player.loseMaxHp(event.num,true); - 'step 1' - player.draw(event.num); - } - }, - yixiang:{ - trigger:{target:'useCardToBegin'}, - frequent:true, - filter:function(event,player){ - if(event.player.hp<=player.hp) return false; - if(event.targets.length>1) return false; - var hs=player.getCards('h'); - var names=['sha','shan','tao','jiu']; - for(var i=0;iplayer.maxHp; - }); - }, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('yirang'),function(card,player,target){ - return target.maxHp>player.maxHp; - }).set('ai',function(target){ - return (get.attitude(_status.event.player,target)-2)*target.maxHp; - }); - 'step 1' - if(result.bool){ - var cards=player.getCards('h',function(card){ - return get.type(card)!='basic'; - }); - var target=result.targets[0]; - var types=[]; - for(var i=0;i0; - }).ai=function(target){ - return -get.attitude(player,target); - }; - 'step 1' - if(result.bool){ - player.logSkill('shejian',result.targets); - player.discardPlayerCard(result.targets[0],'he',true); - } - else{ - event.finish(); - } - }, - }, - fenyue:{ - enable:'phaseUse', - filter:function(event,player){ - if(!player.countCards('h')) return false; - var num; - if(get.mode()=='identity'){ - num=game.countPlayer(function(current){ - return current.identity=='zhong'||current.identity=='mingzhong'; - }); - } - else{ - num=1; - } - if(player.getStat().skill.fenyue>=num) return false; - return true; - }, - filterTarget:function(card,player,target){ - return target.countCards('h')&&target!=player; - }, - ai:{ - order:2.8, - result:{ - target:function(player,target){ - if(get.attitude(player,target)<0&&player.hasCard(function(card){ - return (card.number>=9&&get.value(card)<=5)||get.value(card)<=3; - })){ - return get.effect(target,{name:'sha'},player,target); - } - else{ - return 0; - } - } - } - }, - content:function(){ - 'step 0' - player.chooseToCompare(target); - 'step 1' - if(result.bool){ - player.chooseControl(function(){ - return 1; - }).set('choiceList',[ - '令'+get.translation(target)+'不能使用或打出手牌直到回合结束', - '视为对'+get.translation(target)+'使用一张杀(不计入次数限制)' - ]); - } - else{ - var evt=_status.event.getParent('phaseUse'); - if(evt&&evt.name=='phaseUse'){ - evt.skipped=true; - } - event.finish(); - } - 'step 2' - if(result.control=='选项一'){ - target.addTempSkill('fenyue2'); - } - else{ - player.useCard({name:'sha'},target,false); - } - } - }, - fenyue2:{ - mark:true, - mod:{ - cardEnabled:function(){ - return false; - }, - cardUsable:function(){ - return false; - }, - cardRespondable:function(){ - return false; - }, - cardSavable:function(){ - return false; - } - }, - intro:{ - content:'不能使用或打出卡牌' - } - }, - zhuoshui:{ - audio:'huoshui', - trigger:{player:'phaseBegin'}, - forced:true, - content:function(){ - game.countPlayer(function(current){ - if(current!=player&&!current.hasSkill('fengyin')){ - player.line(current,'green'); - current.addTempSkill('fengyin'); - } - }); - } - }, - zqingcheng:{ - enable:'phaseUse', - filter:function(event,player){ - return player.countCards('he',{type:'equip'}); - }, - filterCard:{type:'equip'}, - position:'he', - filterTarget:function(card,player,target){ - return target!=player; - }, - check:function(card){ - var player=_status.event.player; - if(game.hasPlayer(function(current){ - return get.attitude(player,current)>2&¤t.isTurnedOver(); - })){ - return 10-get.value(card,player); - } - return 6-get.value(card,player); - }, - content:function(){ - 'step 0' - target.turnOver(); - 'step 1' - target.draw(2); - }, - ai:{ - order:8, - result:{ - target:function(player,target){ - if(target.hasSkillTag('noturn')) return 0; - if(target.isTurnedOver()) return 2; - return -0.5; - } - } - } - }, - zfengshi:{ - audio:'fengshi', - trigger:{player:'shaBegin'}, - filter:function(event,player){ - return event.target.countCards('e'); - }, - logTarget:'target', - check:function(event,player){ - if(event.target.hasSkillTag('noe')) return false; - return get.attitude(player,event.target)<0; - }, - content:function(){ - trigger.target.chooseToDiscard('e',true); - } - }, - chuanxin:{ - trigger:{source:'damageBefore'}, - filter:function(event,player){ - if(_status.currentPhase!=player) return false; - if(!_status.event.getParent('phaseUse')) return false; - if(event.card&&(event.card.name=='sha'||event.card.name=='juedou')){ - if(get.mode()=='guozhan'){ - return (event.player.identity!='qun'||player.identity=='ye')&& - !event.player.isUnseen()&&event.player.hasViceCharacter(); - } - else{ - var info=lib.character[event.player.name]; - if(!info) return false; - var skills=event.player.getSkills(); - for(var i=0;i=2) return 1; - return 0; - }).set('choiceList',['弃置装备区内的所有牌并失去一点体力',get.mode()=='guozhan'?'移除副将牌':'随机移除武将牌上的一个技能']); - } - else{ - event._result={index:1}; - } - 'step 1' - if(result.index==1){ - if(get.mode()!='guozhan'){ - var info=lib.character[trigger.player.name]; - var skills=trigger.player.getSkills(); - var list=[]; - for(var i=0;i0; - }, - logTarget:'source', - content:function(){ - var source=trigger.source; - if(source.hasSkill('hengjiang2')){ - source.storage.hengjiang2+=trigger.num; - source.updateMarks(); - } - else{ - source.storage.hengjiang3=player; - source.storage.hengjiang2=trigger.num; - source.addTempSkill('hengjiang2'); - } - }, - ai:{ - maixie_defend:true, - } - }, - hengjiang2:{ - mark:true, - intro:{ - content:'手牌上限-#' - }, - mod:{ - maxHandcard:function(player,num){ - return num-player.storage.hengjiang2; - } - }, - onremove:function(player){ - delete player.storage.hengjiang2; - delete player.storage.hengjiang3; - }, - trigger:{player:'phaseDiscardEnd'}, - filter:function(event,player){ - return player.storage.hengjiang3.isIn()&&(!event.cards||event.cards.length==0); - }, - forced:true, - popup:false, - content:function(){ - player.storage.hengjiang3.draw(); - } - }, - shuangren:{ - trigger:{player:'phaseUseBegin'}, - direct:true, - priority:15, - content:function(){ - 'step 0' - var goon; - if(player.needsToDiscard()>1){ - goon=player.hasCard(function(card){ - return card.number>10&&get.value(card)<=5; - }); - } - else{ - goon=player.hasCard(function(card){ - return (card.number>=9&&get.value(card)<=5)||get.value(card)<=3; - }); - } - player.chooseTarget(get.prompt('shuangren'),function(card,player,target){ - return target!=player&&target.countCards('h'); - }).set('ai',function(target){ - var player=_status.event.player; - if(_status.event.goon&&get.attitude(player,target)<0){ - return get.effect(target,{name:'sha'},player,player); - } - return 0; - }).set('goon',goon); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - event.target=target; - player.logSkill('shuangren',target); - player.chooseToCompare(target); - } - else{ - event.finish(); - } - 'step 2' - if(result.bool){ - var target=event.target; - if(target.identity!='ye'&&target.identity!='unknown'&&game.hasPlayer(function(current){ - if(!player.canUse('sha',current,false)) return false; - if(target==current) return false; - if(get.mode()=='guozhan'){ - return target.identity==current.identity; - } - return true; - })){ - var str='对一名'; - if(get.mode()=='guozhan'){ - str+=get.translation(target.identity)+'势力的'; - } - player.chooseTarget(str+'角色使用一张杀',true,function(card,player,target){ - if(!player.canUse('sha',target,false)) return false; - if(get.mode()=='guozhan'){ - return target.identity==_status.event.identity; - } - return true; - }).set('ai',function(target){ - var player=_status.event.player; - return get.effect(target,{name:'sha'},player,player); - }).set('identity',target.identity); - } - else{ - player.useCard({name:'sha'},target,false); - event.finish(); - } - } - else{ - trigger.cancel(); - event.finish(); - } - 'step 3' - if(result.bool&&result.targets&&result.targets.length){ - player.useCard({name:'sha'},result.targets[0],false); - } - } - }, - kuanshi:{ - trigger:{player:'phaseEnd'}, - direct:true, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('kuanshi')).set('ai',function(target){ - if(get.attitude(_status.event.player,target)>0){ - return 1/Math.sqrt(target.hp+1); - } - return 0; - }); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - player.logSkill('kuanshi',target); - target.storage.kuanshi2=player; - target.addSkill('kuanshi2'); - } - } - }, - kuanshi2:{ - mark:'character', - intro:{ - content:'下一次受到超过1点的伤害时,防止此伤害,然后$跳过下个回合的摸牌阶段' - }, - trigger:{player:'damageBegin'}, - forced:true, - filter:function(event,player){ - return event.num>1; - }, - priority:-11, - content:function(){ - trigger.cancel(); - player.storage.kuanshi2.skip('phaseDraw'); - player.removeSkill('kuanshi2'); - }, - group:'kuanshi2_remove', - onremove:true, - subSkill:{ - remove:{ - trigger:{global:['phaseBegin','dieAfter']}, - forced:true, - popup:false, - filter:function(event,player){ - return event.player==player.storage.kuanshi2; - }, - content:function(){ - player.removeSkill('kuanshi2'); - } - } - } - }, - xiashu:{ - trigger:{player:'phaseUseBegin'}, - direct:true, - filter:function(event,player){ - return player.countCards('h')>0; - }, - content:function(){ - 'step 0' - var maxval=0; - var hs=player.getCards('h'); - for(var i=0;i0) return 0.1; - if(maxval>=8) return 0; - if(att==0) return 0.2; - if(dh>=3) return dh; - if(dh==2){ - if(maxval<=7) return dh; - } - if(maxval<=6) return dh; - return 0; + } + }, + fuqi:{ + mod:{ + wuxieRespondable:function(card,player,target,current){ + if(player!=current&&get.distance(player,current)<=1){ + return false; + } + } + }, + ai:{ + norespond:true, + skillTagFilter:function(player,tag,arg){ + if(tag=='norespond'&&Array.isArray(arg)){ + if(get.distance(arg[1],player)<=1) return true; + } + return false; + } + } + }, + wylianji:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.hasCard(lib.skill.wylianji.filterCard); + }, + check:function(card){ + if(card.name=='sha') return 1; + else{ + if(get.tag(card,'damage')){ + if(get.tag(card,'multineg')) return 5; + return 2; + } + } + return 0; + }, + filterCard:function(card){ + return card.name=='sha'||(get.type(card,'trick')=='trick'&&get.color(card)=='black'&&!get.info(card).multitarget)&&get.info(card).enable; + }, + filterTarget:function(card,player,target){ + return target!=player&&!target.isMin()&& + (player.canUse(card,target,false)||game.hasPlayer(function(current){ + return current!=player&&target.canUse(card,current); + })); + }, + discard:false, + lose:true, + delay:0, + content:function(){ + 'step 0' + player.showCards(get.translation(player)+'对'+get.translation(target)+'发动了【连计】',cards); + 'step 1' + var equip1=get.cardPile2(function(card){ + return get.subtype(card)=='equip1'; + }); + if(!equip1){ + player.popup('连计失败'); + game.log('牌堆中无装备'); + event.finish(); + return; + } + target.$draw(equip1); + target.equip(equip1); + game.delay(); + 'step 2' + var card=cards[0]; + var bool1=game.hasPlayer(function(current){ + return current!=player&&target.canUse(card,current); + }); + var bool2=player.canUse(card,target,false); + if(bool1&&bool2){ + target.chooseControl(function(){ + return 0; + }).set('choiceList',[ + '对除'+get.translation(player)+'以外的角色使用'+get.translation(cards)+',并将装备区里的武器牌交给该牌的一个目标角色', + '视为'+get.translation(player)+'对你使用'+get.translation(cards)+',并将装备区内的武器牌交给'+get.translation(player) + ]); + } + else if(bool1){ + event.directindex=0; + } + else if(bool2){ + event.directindex=1; + } + else{ + event.finish(); + } + 'step 3' + var card=cards[0]; + if(result&&typeof event.directindex!='number'){ + event.directindex=result.index; + } + if(event.directindex==1){ + event.insert(lib.skill.wylianji.content_use,{ + player:player, + target:target, + card:card + }) + } + else{ + event.insert(lib.skill.wylianji.content_give,{ + player:target, + card:card, + targets:game.filterPlayer(function(current){ + return current!=player; + }) + }); + } + }, + content_use:function(){ + 'step 0' + player.useCard(card,target); + 'step 1' + if(!get.owner(card)){ + target.gain(card,'gain2'); + } + 'step 2' + var equip1=target.getEquip(1); + if(equip1){ + game.delay(); + target.give(equip1,player); + target.line(player); + } + }, + content_give:function(){ + 'step 0' + var select=get.select(get.info(card).selectTarget); + if(select[1]==-1){ + for(var i=0;i1){ + player.chooseTarget(true,'将'+get.translation(equip1)+'交给一名角色',function(card,player,target){ + return _status.event.list.contains(target); + }).set('ai',function(target){ + return get.attitude(player,target); + }).set('list',_status.event.list); + event.equip1=equip1; + } + else{ + if(event.list.length==1){ + player.give(equip1,event.list[0]); + player.line(event.list); + } + event.finish(); + } + } + else{ + event.finish(); + } + 'step 3' + if(result.bool&&result.targets.length&&event.equip1){ + player.give(event.equip1,result.targets[0]); + player.line(result.targets); + } + }, + ai:{ + order:7, + result:{ + target:function(player,target){ + if(ui.selected.cards.length){ + var card=ui.selected.cards[0]; + var bool=(card.name!='sha'); + if(game.hasPlayer(function(current){ + return target.canUse(card,current,bool)&&get.effect(current,card,target,player)>0; + })){ + var num=1; + if(target.getEquip(1)){ + num=0.6; + } + if(target.hasSkillTag('noe')) 2*num; + return num; + } + } + return 0; + } + } + } + }, + moucheng:{ + derivation:['jingong','wy_meirenji','wy_xiaolicangdao'], + trigger:{global:'damageEnd'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.source!=player&&event.getParent(2).name=='useCard'&&event.getParent(3).name=='wylianjiInserted'; + }, + init:function(player){ + player.storage.moucheng=0; + }, + intro:{ + content:'已造成#点伤害' + }, + unique:true, + content:function(){ + player.storage.moucheng+=trigger.num; + if(player.hasSkill('moucheng')){ + player.markSkill('moucheng'); + player.syncStorage('moucheng'); + } + if(player.storage.moucheng>=3){ + event.trigger('mouchengAwaken'); + } + }, + group:'moucheng_awaken', + subSkill:{ + awaken:{ + trigger:{player:'mouchengAwaken'}, + forced:true, + skillAnimation:true, + content:function(){ + player.awakenSkill('moucheng'); + player.removeSkill('wylianji'); + player.addSkill('jingong'); + } + } + } + }, + jingong:{ + enable:'phaseUse', + filter:function(event,player){ + return player.countCards('he',function(card){ + return card.name=='sha'||get.type(card)=='equip'; + }); + }, + delay:0, + usable:1, + content:function(){ + 'step 0' + var list=get.inpile('trick','trick').randomGets(2); + if(Math.random()<0.5){ + list.push('wy_meirenji'); + } + else{ + list.push('wy_xiaolicangdao'); + } + for(var i=0;i0; + })){ + if(name=='wy_meirenji'||name=='wy_xiaolicangdao') return Math.random()+0.5; + return Math.random(); + } + return 0; + }); + 'step 1' + if(result.bool){ + var name=result.links[0][2]; + event.fakecard={name:name}; + player.chooseCardTarget({ + filterCard:function(card){ + return card.name=='sha'||get.type(card)=='equip'; + }, + position:'he', + filterTarget:lib.filter.filterTarget, + selectTarget:lib.filter.selectTarget, + ai1:function(card){ + return 7-get.value(card); + }, + ai2:function(target){ + var card=_status.event.fakecard; + var player=_status.event.player; + return get.effect(target,card,player,player); + }, + _get_card:event.fakecard, + prompt:'将一张装备牌或【杀】当作'+get.translation(name)+'使用' + }).set('fakecard',event.fakecard); + } + else{ + event.finish(); + } + 'step 2' + if(result.bool){ + player.useCard(event.fakecard,result.cards,result.targets); + player.addTempSkill('jingong2'); + } + }, + ai:{ + order:2, + result:{ + player:function(player){ + if((player.hp<=2||player.needsToDiscard())&&!player.getStat('damage')) return 0; + return 1; + } + } + } + }, + jingong2:{ + trigger:{player:'phaseEnd'}, + forced:true, + filter:function(event,player){ + return !player.getStat('damage'); + }, + content:function(){ + player.loseHp(); + } + }, + jingong3:{}, + weikui:{ + audio:'kuiwei', + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('h'); + }, + content:function(){ + 'step 0' + player.loseHp(); + 'step 1' + if(target.countCards('h','shan')){ + player.viewHandcards(target); + player.useCard({name:'sha'},target,false); + player.storage.weikui2=target; + player.addTempSkill('weikui2'); + } + else{ + player.discardPlayerCard(target,'visible',true); + } + }, + ai:{ + order:8, + result:{ + target:function(player,target){ + if(player.hp<=2) return 0; + if(player.hp==3) return target.hp<=2?-1:0; + return -1; + } + } + } + }, + weikui2:{ + onremove:true, + mod:{ + globalFrom:function(from,to){ + if(to==from.storage.weikui2) return -Infinity; + } + }, + mark:'character', + intro:{ + content:'与$的距离视为1直到回合结束' + }, + }, + lizhan:{ + audio:'yanzheng', + trigger:{player:'phaseEnd'}, + direct:true, + filter:function(event,player){ + for(var i=0;i1; + }, + content:function(){ + 'step 0' + event.num=player.maxHp-1; + player.loseMaxHp(event.num,true); + 'step 1' + player.draw(event.num); + } + }, + yixiang:{ + trigger:{target:'useCardToBegin'}, + frequent:true, + filter:function(event,player){ + if(event.player.hp<=player.hp) return false; + if(event.targets.length>1) return false; + var hs=player.getCards('h'); + var names=['sha','shan','tao','jiu']; + for(var i=0;iplayer.maxHp; + }); + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('yirang'),function(card,player,target){ + return target.maxHp>player.maxHp; + }).set('ai',function(target){ + return (get.attitude(_status.event.player,target)-2)*target.maxHp; + }); + 'step 1' + if(result.bool){ + var cards=player.getCards('h',function(card){ + return get.type(card)!='basic'; + }); + var target=result.targets[0]; + var types=[]; + for(var i=0;i0; + }).ai=function(target){ + return -get.attitude(player,target); + }; + 'step 1' + if(result.bool){ + player.logSkill('shejian',result.targets); + player.discardPlayerCard(result.targets[0],'he',true); + } + else{ + event.finish(); + } + }, + }, + fenyue:{ + enable:'phaseUse', + filter:function(event,player){ + if(!player.countCards('h')) return false; + var num; + if(get.mode()=='identity'){ + num=game.countPlayer(function(current){ + return current.identity=='zhong'||current.identity=='mingzhong'; + }); + } + else{ + num=1; + } + if(player.getStat().skill.fenyue>=num) return false; + return true; + }, + filterTarget:function(card,player,target){ + return target.countCards('h')&&target!=player; + }, + ai:{ + order:2.8, + result:{ + target:function(player,target){ + if(get.attitude(player,target)<0&&player.hasCard(function(card){ + return (card.number>=9&&get.value(card)<=5)||get.value(card)<=3; + })){ + return get.effect(target,{name:'sha'},player,target); + } + else{ + return 0; + } + } + } + }, + content:function(){ + 'step 0' + player.chooseToCompare(target); + 'step 1' + if(result.bool){ + player.chooseControl(function(){ + return 1; + }).set('choiceList',[ + '令'+get.translation(target)+'不能使用或打出手牌直到回合结束', + '视为对'+get.translation(target)+'使用一张杀(不计入次数限制)' + ]); + } + else{ + var evt=_status.event.getParent('phaseUse'); + if(evt&&evt.name=='phaseUse'){ + evt.skipped=true; + } + event.finish(); + } + 'step 2' + if(result.control=='选项一'){ + target.addTempSkill('fenyue2'); + } + else{ + player.useCard({name:'sha'},target,false); + } + } + }, + fenyue2:{ + mark:true, + mod:{ + cardEnabled:function(){ + return false; + }, + cardUsable:function(){ + return false; + }, + cardRespondable:function(){ + return false; + }, + cardSavable:function(){ + return false; + } + }, + intro:{ + content:'不能使用或打出卡牌' + } + }, + zhuoshui:{ + audio:'huoshui', + trigger:{player:'phaseBegin'}, + forced:true, + content:function(){ + game.countPlayer(function(current){ + if(current!=player&&!current.hasSkill('fengyin')){ + player.line(current,'green'); + current.addTempSkill('fengyin'); + } + }); + } + }, + zqingcheng:{ + enable:'phaseUse', + filter:function(event,player){ + return player.countCards('he',{type:'equip'}); + }, + filterCard:{type:'equip'}, + position:'he', + filterTarget:function(card,player,target){ + return target!=player; + }, + check:function(card){ + var player=_status.event.player; + if(game.hasPlayer(function(current){ + return get.attitude(player,current)>2&¤t.isTurnedOver(); + })){ + return 10-get.value(card,player); + } + return 6-get.value(card,player); + }, + content:function(){ + 'step 0' + target.turnOver(); + 'step 1' + target.draw(2); + }, + ai:{ + order:8, + result:{ + target:function(player,target){ + if(target.hasSkillTag('noturn')) return 0; + if(target.isTurnedOver()) return 2; + return -0.5; + } + } + } + }, + zfengshi:{ + audio:'fengshi', + trigger:{player:'shaBegin'}, + filter:function(event,player){ + return event.target.countCards('e'); + }, + logTarget:'target', + check:function(event,player){ + if(event.target.hasSkillTag('noe')) return false; + return get.attitude(player,event.target)<0; + }, + content:function(){ + trigger.target.chooseToDiscard('e',true); + } + }, + chuanxin:{ + trigger:{source:'damageBefore'}, + filter:function(event,player){ + if(_status.currentPhase!=player) return false; + if(!_status.event.getParent('phaseUse')) return false; + if(event.card&&(event.card.name=='sha'||event.card.name=='juedou')){ + if(get.mode()=='guozhan'){ + return (event.player.identity!='qun'||player.identity=='ye')&& + !event.player.isUnseen()&&event.player.hasViceCharacter(); + } + else{ + var info=lib.character[event.player.name]; + if(!info) return false; + var skills=event.player.getSkills(); + for(var i=0;i=2) return 1; + return 0; + }).set('choiceList',['弃置装备区内的所有牌并失去一点体力',get.mode()=='guozhan'?'移除副将牌':'随机移除武将牌上的一个技能']); + } + else{ + event._result={index:1}; + } + 'step 1' + if(result.index==1){ + if(get.mode()!='guozhan'){ + var info=lib.character[trigger.player.name]; + var skills=trigger.player.getSkills(); + var list=[]; + for(var i=0;i0; + }, + logTarget:'source', + content:function(){ + var source=trigger.source; + if(source.hasSkill('hengjiang2')){ + source.storage.hengjiang2+=trigger.num; + source.updateMarks(); + } + else{ + source.storage.hengjiang3=player; + source.storage.hengjiang2=trigger.num; + source.addTempSkill('hengjiang2'); + } + }, + ai:{ + maixie_defend:true, + } + }, + hengjiang2:{ + mark:true, + intro:{ + content:'手牌上限-#' + }, + mod:{ + maxHandcard:function(player,num){ + return num-player.storage.hengjiang2; + } + }, + onremove:function(player){ + delete player.storage.hengjiang2; + delete player.storage.hengjiang3; + }, + trigger:{player:'phaseDiscardEnd'}, + filter:function(event,player){ + return player.storage.hengjiang3.isIn()&&(!event.cards||event.cards.length==0); + }, + forced:true, + popup:false, + content:function(){ + player.storage.hengjiang3.draw(); + } + }, + shuangren:{ + trigger:{player:'phaseUseBegin'}, + direct:true, + priority:15, + content:function(){ + 'step 0' + var goon; + if(player.needsToDiscard()>1){ + goon=player.hasCard(function(card){ + return card.number>10&&get.value(card)<=5; + }); + } + else{ + goon=player.hasCard(function(card){ + return (card.number>=9&&get.value(card)<=5)||get.value(card)<=3; + }); + } + player.chooseTarget(get.prompt('shuangren'),function(card,player,target){ + return target!=player&&target.countCards('h'); + }).set('ai',function(target){ + var player=_status.event.player; + if(_status.event.goon&&get.attitude(player,target)<0){ + return get.effect(target,{name:'sha'},player,player); + } + return 0; + }).set('goon',goon); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('shuangren',target); + player.chooseToCompare(target); + } + else{ + event.finish(); + } + 'step 2' + if(result.bool){ + var target=event.target; + if(target.identity!='ye'&&target.identity!='unknown'&&game.hasPlayer(function(current){ + if(!player.canUse('sha',current,false)) return false; + if(target==current) return false; + if(get.mode()=='guozhan'){ + return target.identity==current.identity; + } + return true; + })){ + var str='对一名'; + if(get.mode()=='guozhan'){ + str+=get.translation(target.identity)+'势力的'; + } + player.chooseTarget(str+'角色使用一张杀',true,function(card,player,target){ + if(!player.canUse('sha',target,false)) return false; + if(get.mode()=='guozhan'){ + return target.identity==_status.event.identity; + } + return true; + }).set('ai',function(target){ + var player=_status.event.player; + return get.effect(target,{name:'sha'},player,player); + }).set('identity',target.identity); + } + else{ + player.useCard({name:'sha'},target,false); + event.finish(); + } + } + else{ + trigger.cancel(); + event.finish(); + } + 'step 3' + if(result.bool&&result.targets&&result.targets.length){ + player.useCard({name:'sha'},result.targets[0],false); + } + } + }, + kuanshi:{ + trigger:{player:'phaseEnd'}, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('kuanshi')).set('ai',function(target){ + if(get.attitude(_status.event.player,target)>0){ + return 1/Math.sqrt(target.hp+1); + } + return 0; + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('kuanshi',target); + target.storage.kuanshi2=player; + target.addSkill('kuanshi2'); + } + } + }, + kuanshi2:{ + mark:'character', + intro:{ + content:'下一次受到超过1点的伤害时,防止此伤害,然后$跳过下个回合的摸牌阶段' + }, + trigger:{player:'damageBegin'}, + forced:true, + filter:function(event,player){ + return event.num>1; + }, + priority:-11, + content:function(){ + trigger.cancel(); + player.storage.kuanshi2.skip('phaseDraw'); + player.removeSkill('kuanshi2'); + }, + group:'kuanshi2_remove', + onremove:true, + subSkill:{ + remove:{ + trigger:{global:['phaseBegin','dieAfter']}, + forced:true, + popup:false, + filter:function(event,player){ + return event.player==player.storage.kuanshi2; + }, + content:function(){ + player.removeSkill('kuanshi2'); + } + } + } + }, + xiashu:{ + trigger:{player:'phaseUseBegin'}, + direct:true, + filter:function(event,player){ + return player.countCards('h')>0; + }, + content:function(){ + 'step 0' + var maxval=0; + var hs=player.getCards('h'); + for(var i=0;i0) return 0.1; + if(maxval>=8) return 0; + if(att==0) return 0.2; + if(dh>=3) return dh; + if(dh==2){ + if(maxval<=7) return dh; + } + if(maxval<=6) return dh; + return 0; - }).set('maxval',maxval); - 'step 1' - if(result.bool){ - player.logSkill('xiashu',result.targets); - event.target=result.targets[0]; - var hs=player.getCards('h'); - event.target.gain(hs,player); - player.$give(hs.length,event.target); - } - else{ - event.finish(); - } - 'step 2' - var hs=event.target.getCards('h'); - if(!hs.length){ - event.finish(); - return; - } - hs.sort(function(a,b){ - return get.value(b,player,'raw')-get.value(a,player,'raw'); - }); - event.target.chooseCard([1,hs.length],'展示至少一张手牌',true).set('ai',function(card){ - var rand=_status.event.rand; - var list=_status.event.list; - if(_status.event.att){ - if(ui.selected.cards.length>=Math.ceil(list.length/2)) return 0; - var value=get.value(card); - if(_status.event.getParent().player.isHealthy()){ - value+=(get.tag(card,'damage')?1.5:0)+(get.tag(card,'draw')?2:0); - } - return value; - } - if(ui.selected.cards.length>=Math.floor(list.length/2)) return 0; - return (list.indexOf(card)%2==rand)?1:0; - }).set('rand',(Math.random()<0.6)?1:0).set('list',hs).set('att',get.attitude(event.target,player)>0); - 'step 3' - event.target.showCards(result.cards); - event.cards1=result.cards; - event.cards2=event.target.getCards('h',function(card){ - return !event.cards1.contains(card); - }); - 'step 4' - var choice; - var num1=event.cards1.length; - var num2=event.cards2.length; - if(get.attitude(event.target,player)>0&&num1>=num2){ - choice=0; - } - else if(num1==num2){ - choice=(Math.random()<0.45)?0:1; - } - else if(num1>num2){ - if(num1-num2==1){ - choice=(Math.random()<0.6)?0:1; - } - else{ - choice=0; - } - } - else{ - if(num2-num1==1){ - choice=(Math.random()<0.6)?1:0; - } - else{ - choice=1; - } - } - player.chooseControl(function(event,player){ - return _status.event.choice; - }).set('choiceList',['获得'+get.translation(event.target)+'展示的牌', - '获得'+get.translation(event.target)+'未展示的牌']).set('choice',choice); - 'step 5' - if(result.index==0){ - player.gain(event.cards1,target); - target.$give(event.cards1,player); - } - else{ - player.gain(event.cards2,target); - target.$giveAuto(event.cards2,player); - } - }, - ai:{ - expose:0.1 - } - }, - sheyan:{ - trigger:{global:'useCard'}, - filter:function(event,player){ - if(!event.targets||!event.targets.contains(player)) return false; - var info=get.info(event.card); - if(info.type!='trick') return false; - if(info.multitarget) return false; - if(event.targets.length>1) return true; - return game.hasPlayer(function(current){ - return !event.targets.contains(current)&&lib.filter.targetEnabled2(event.card,event.player,current); - }); - }, - direct:true, - content:function(){ - 'step 0' - var bool1=(trigger.targets.length>1); - var bool2=game.hasPlayer(function(current){ - return !trigger.targets.contains(current)&&lib.filter.targetEnabled2(trigger.card,trigger.player,current); - }); - if(bool1&&bool2){ - player.chooseControlList(true,get.prompt('sheyan'),['为'+get.translation(trigger.card)+'增加一个目标','为'+get.translation(trigger.card)+'减少一个目标'],function(event,player){ - if(_status.event.add) return 0; - return 1; - }).set('add',get.effect(player,trigger.card,trigger.player,player)>=0); - } - else if(bool2){ - event.type='add'; - event.goto(2); - event.unchosen=true; - } - else{ - event.type='remove'; - event.goto(2); - event.unchosen=true; - } - 'step 1' - if(result.control=='cancel2'){ - event.finish(); - } - else if(result.index==1){ - event.type='remove'; - } - else{ - event.type='add'; - } - 'step 2' - if(event.type=='add'){ - player.chooseTarget(event.unchosen?get.prompt('sheyan'):null,'为'+get.translation(trigger.card)+'增加一个目标',function(card,player,target){ - return !trigger.targets.contains(target)&&lib.filter.targetEnabled2(trigger.card,trigger.player,target); - }).set('ai',function(target){ - var trigger=_status.event.getTrigger(); - return get.effect(target,trigger.card,trigger.player,_status.event.player); - }); - } - else{ - player.chooseTarget(event.unchosen?get.prompt('sheyan'):null,'为'+get.translation(trigger.card)+'减少一个目标',function(card,player,target){ - return _status.event.targets.contains(target); - }).set('ai',function(target){ - var trigger=_status.event.getTrigger(); - return -get.effect(target,trigger.card,trigger.player,_status.event.player); - }).set('targets',trigger.targets); - } - 'step 3' - if(result.bool){ - if(!event.isMine()) game.delayx(); - event.target=result.targets[0]; - } - else{ - event.finish(); - } - 'step 4' - player.logSkill('sheyan',event.target); - if(event.type=='add'){ - trigger.targets.push(event.target); - } - else{ - trigger.targets.remove(event.target); - } - }, - ai:{ - expose:0.2 - } - }, - bingzheng:{ - trigger:{player:'phaseUseEnd'}, - direct:true, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('bingzheng'),function(card,player,target){ - return target.countCards('h')!=target.hp; - }).set('ai',function(target){ - var player=_status.event.player; - var att=get.attitude(player,target); - var nh=target.countCards('h'); - if(att>0){ - if(nh==target.hp-1){ - if(player==target) return att+1; - return att+2; - } - if(player==target&&player.needsToDiscard()) return att/3; - return att; - } - else{ - if(nh==target.hp+1) return -att; - if(nh==0) return 0; - return -att/2; - } - }); - 'step 1' - if(result.bool){ - player.logSkill('bingzheng',result.targets); - event.target=result.targets[0]; - if(event.target.countCards('h')){ - player.chooseControl(function(event,player){ - var target=event.target; - if(get.attitude(player,target)<0) return 1; - if(target.countCards('h')==target.hp+1) return 1; - return 0; - }).set('choiceList',['令'+get.translation(event.target)+'摸一张牌', - '令'+get.translation(event.target)+'弃置一张手牌']); - } - else{ - event.directfalse=true; - } - } - else{ - event.finish(); - } - 'step 2' - if(event.directfalse||result.index==0){ - event.target.draw(); - } - else{ - event.target.chooseToDiscard('h',true); - } - 'step 3' - if(event.target.countCards('h')==event.target.hp){ - player.draw(); - if(event.target==player){ - event.finish(); - return; - } - var next=player.chooseCard('是否交给'+get.translation(event.target)+'一张牌?','he'); - next.set('ai',function(card){ - if(get.position(card)!='h') return 0; - if(_status.event.shan){ - return card.name=='shan'?1:0; - } - if(_status.event.goon){ - return 10-get.value(card); - } - return -get.value(card,_status.event.player,'raw'); - }); - if(get.attitude(player,event.target)>1&& - player.countCards('h','shan')>1&&player.countCards('h')>event.target.countCards('h')){ - next.set('shan',true); - } - if(get.attitude(player,event.target)>0&&player.needsToDiscard()){ - next.set('goon',true); - } - } - else{ - event.finish(); - } - 'step 4' - if(result.bool){ - event.target.gain(result.cards,player); - player.$giveAuto(result.cards,event.target); - } - }, - ai:{ - expose:0.2, - threaten:1.4 - } - }, - fuman:{ - enable:'phaseUse', - filterTarget:function(card,player,target){ - return !target.hasSkill('fuman2')&&target!=player; - }, - filter:function(event,player){ - return player.countCards('h','sha'); - }, - discard:false, - prepare:'give', - filterCard:{name:'sha'}, - content:function(){ - target.gain(cards,player); - target.storage.fuman3=cards[0]; - target.storage.fuman2=player; - target.addTempSkill('fuman2',{player:'phaseAfter'}); - }, - check:function(card){ - return 6-get.value(card); - }, - ai:{ - order:2, - result:{ - target:function(player,target){ - if(!target.hasSha()) return 1.2; - return 1; - } - } - } - }, - fuman2:{ - trigger:{player:'useCard'}, - forced:true, - popup:false, - filter:function(event,player){ - return event.card==player.storage.fuman3&&player.storage.fuman2.isIn(); - }, - mark:true, - intro:{ - content:'下个回合结束之前使用“抚蛮”牌时,令$一张牌' - }, - content:function(){ - 'step 0' - game.delayx(); - 'step 1' - player.line(player.storage.fuman2,'green'); - player.storage.fuman2.draw(); - player.storage.fuman2.logSkill('fuman'); - }, - onremove:function(player){ - delete player.storage.fuman2; - delete player.storage.fuman3; - }, - ai:{ - effect:{ - player:function(card,player,target,current){ - if(card.name=='sha'&&card!=player.storage.fuman3&& - player.storage.fuman2.isIn()&&get.attitude(player,player.storage.fuman2)>0){ - return 'zeroplayertarget'; - } - } - } - } - }, - qizhou:{ - trigger:{player:['phaseBefore','equipAfter','loseAfter']}, - forced:true, - popup:false, - derivation:['mashu','reyingzi','duanbing','fenwei'], - filter:function(event,player){ - if(player.equiping) return false; - var suits=[]; - var es=player.getCards('e'); - for(var i=0;i0; - } - }, - content:function(){ - var suits=[]; - var es=player.getCards('e'); - for(var i=0;i0; - } - if(player.hasSha()&&geteff(target)){ - var num=game.countPlayer(function(current){ - return current!=player&&get.distance(player,current)<=1&&geteff(current); - }); - if(num==0){ - if(game.hasPlayer(function(current){ - return player.canUse('sha',current)&&geteff(current)&¤t!=target; - })){ - return 1; - } - } - else if(num==1){ - return 1; - } - } - return 0; - } - } - } - }, - fenxun2:{ - mark:'character', - onremove:true, - intro:{ - content:'到$的距离视为1' - }, - mod:{ - globalFrom:function(from,to){ - if(to==from.storage.fenxun2){ - return -Infinity; - } - } - } - }, - duanbing:{ - trigger:{player:'useCard'}, - filter:function(event,player){ - if(event.card.name!='sha') return false; - return game.hasPlayer(function(current){ - return !event.targets.contains(current)&&get.distance(player,current)<=1&&player.canUse('sha',current); - }); - }, - direct:true, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('duanbing'),function(card,player,target){ - return !_status.event.source.contains(target)&&get.distance(player,target)<=1&&player.canUse('sha',target); - }).set('source',trigger.targets).set('ai',function(target){ - var player=_status.event.player; - return get.effect(target,{name:'sha'},player,player); - }); - 'step 1' - if(result.bool){ - if(!event.isMine()&&!_status.connectMode) game.delayx(); - event.target=result.targets[0]; - } - else{ - event.finish(); - } - 'step 2' - player.logSkill('duanbing',event.target); - trigger.targets.push(event.target); - }, - ai:{ - effect:{ - player:function(card,player,target){ - if(card.name=='sha'){ - if(player._duanbingtmp) return; - player._duanbingtmp=true; - if(get.effect(target,{name:'sha'},player,player)<=0){ - delete player._duanbingtmp; - return; - } - if(game.hasPlayer(function(current){ - return current!=target&&get.distance(player,current)<=1&& - player.canUse('sha',current)&&get.effect(current,{name:'sha'},player,player)>0; - })){ - delete player._duanbingtmp; - return [1,1]; - } - delete player._duanbingtmp; - } - } - } - } - }, - fuhan:{ - trigger:{player:'phaseBefore'}, - unique:true, - skillAnimation:true, - forceunique:true, - filter:function(event,player){ - return player.storage.fanghun>0; - }, - prompt:function(event,player){ - var num=player.storage.fanghun2; - var mode=get.mode(); - if(mode!='chess'&&mode!='tafang'&&mode!='stone'){ - num=Math.min(num,game.players.length+game.dead.length); - } - return get.prompt('fuhan')+'(体力上限:'+num+')'; - }, - check:function(event,player){ - var num=player.storage.fanghun2; - if(num==1) return false; - if(player.hp<=1) return true; - if(num==2) return false; - if(num==3) return player.hp<3&&player.isMinHp(); - return true; - }, - content:function(){ - 'step 0' - var list; - if(_status.connectMode){ - list=get.charactersOL(function(i){ - return lib.character[i][1]!='shu'; - }); - } - else{ - list=get.gainableCharacters(function(info){ - return info[1]=='shu'; - }); - } - var players=game.players.concat(game.dead); - for(var i=0;i=3; - }, - skillAnimation:true, - unique:true, - content:function(){ - 'step 0' - player.awakenSkill('yjixi'); - player.gainMaxHp(); - player.recover(); - 'step 1' - var str='摸两张牌'; - var mode=get.mode(); - var choice='选项一'; - if(mode=='identity'||(mode=='versus'&&_status.mode=='four')){ - var list=[]; - var zhu=get.zhu(player); - if(zhu&&zhu!=player&&zhu.skills){ - for(var i=0;i=6) return 0; - return 20-num; - } - else{ - if(_status.event.player.needsToDiscard()){ - return 7-num; - } - } - return 0; - }, - discard:false, - prepare:'give', - content:function(){ - 'step 0' - target.gain(cards,player); - if(get.color(cards[0])=='black'){ - target.chooseToDiscard(2,'he','弃置两张牌,或令'+get.translation(player)+'摸两张牌').set('ai',function(card){ - if(_status.event.goon) return 7-get.value(card); - return 0; - }).set('goon',get.attitude(target,player)<0); - } - else{ - event.finish(); - } - 'step 1' - if(!result.bool){ - player.draw(2); - } - }, - ai:{ - order:8, - expose:0.2, - result:{ - target:function(player,target){ - if(ui.selected.cards.length&&get.color(ui.selected.cards[0])=='red'){ - if(target.countCards('h')0; - }, - content:function(){ - 'step 0' - player.draw(player.storage.shanjia); - 'step 1' - player.chooseToDiscard('he',player.storage.shanjia,true); - 'step 2' - var useCard=false; - if(result.bool&&result.cards){ - for(var i=0;i0) - })){ - return 6-get.value(card); - } - } - return 0; - }, - content:function(){ - player.loseHp(); - switch(get.type(cards[0],'trick')){ - case 'basic':player.addTempSkill('zhanyi_basic');break; - case 'equip':player.addTempSkill('zhanyi_equip');break; - case 'trick':player.addTempSkill('zhanyi_trick');player.draw(2);break; - } - }, - ai:{ - order:9.1, - result:{ - player:1 - } - } - }, - zhanyi_basic:{ - group:['zhanyi_basic_sha','zhanyi_basic_jiu','zhanyi_basic_tao'] - }, - zhanyi_basic_tao:{ - enable:'chooseToUse', - filterCard:{type:'basic'}, - viewAs:{name:'tao'}, - viewAsFilter:function(player){ - if(!player.countCards('h',{type:'basic'})) return false; - }, - prompt:'将一张基本牌当桃使用', - check:function(card){ - return 8-get.value(card); - }, - ai:{ - skillTagFilter:function(player){ - if(!player.countCards('h',{type:'basic'})) return false; - }, - save:true, - } - }, - zhanyi_basic_sha:{ - enable:'chooseToUse', - filterCard:{type:'basic'}, - viewAs:{name:'sha'}, - viewAsFilter:function(player){ - if(!player.countCards('h',{type:'basic'})) return false; - }, - prompt:'将一张基本牌当杀使用', - check:function(card){return 4-get.value(card)}, - ai:{ - skillTagFilter:function(player){ - if(!player.countCards('h',{type:'basic'})) return false; - }, - respondSha:true, - } - }, - zhanyi_basic_jiu:{ - enable:'chooseToUse', - filterCard:{type:'basic'}, - viewAs:{name:'jiu'}, - viewAsFilter:function(player){ - if(!player.countCards('h',{type:'basic'})) return false; - }, - prompt:'将一张基本牌当酒使用', - check:function(card){ - if(_status.event.type=='dying') return 1; - return 4-get.value(card); - }, - ai:{ - skillTagFilter:function(player){ - return player.countCards('h',{type:'basic'})>0&&player.hp<=0; - }, - save:true, - } - }, - zhanyi_equip:{ - trigger:{player:'shaBegin'}, - forced:true, - filter:function(event,player){ - return event.target.countCards('he')>0; - }, - check:function(event,player){ - return get.attitude(player,event.target)<0; - }, - content:function(){ - trigger.target.chooseToDiscard('he',true,2); - } - }, - zhanyi_trick:{ - mod:{ - targetInRange:function(){ - return true; - } - } - }, - shichou:{ - skillAnimation:true, - unique:true, - enable:'phaseUse', - zhuSkill:true, - filter:function(event,player){ - if(!player.hasZhuSkill('shichou'))return false; - if(player.countCards('he')<2) return false; - return !player.storage.shichou; - }, - selectCard:2, - init:function(player){ - if(player.hasZhuSkill('shichou')){ - player.markSkill('shichou'); - player.storage.shichou=false; - } - }, - filterTarget:function(card,player,target){ - return target.group=='shu'&&target!=player; - }, - filterCard:true, - position:'he', - check:function(card){ - return 7-get.value(card); - }, - discard:false, - prepare:'give', - content:function(){ - player.storage.shichou=true; - player.awakenSkill('shichou'); - target.gain(cards,player); - player.storage.shichou_target=target; - player.addSkill('shichou2'); - target.markSkillCharacter('shichou',player,'誓仇','代替'+get.translation(player)+'承受伤害直到首次进入濒死状态'); - }, - intro:{ - content:'limited' - }, - ai:{ - order:7, - result:{ - player:function(player,target){ - if(player.hasUnknown()) return 0; - var att=get.attitude(player,target); - if(att<=0){ - if(target.hp==1) return (10-att)/2; - return 10-att; - } - else{ - if(target.hp==1) return 0; - return (10-att)/4; - } - }, - } - } - }, - shichou2:{ - group:'shichou3', - trigger:{player:'damageBefore'}, - forced:true, - popup:false, - content:function(){ - trigger.untrigger(); - trigger.player=player.storage.shichou_target; - trigger.player.addSkill('shichou4'); - trigger.trigger('damageBefore'); - player.logSkill('shichou2',player.storage.shichou_target); - game.delay(0.5); - }, - ai:{ - effect:{ - target:function(card,player,target,current){ - if(get.tag(card,'damage')){ - if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; - if(get.attitude(player,target)>0) return [0,0]; - var eff=get.damageEffect(target.storage.shichou_target,player,target); - if(eff>0){ - return [0,1]; - } - else if(eff<0){ - return [0,-2]; - } - else{ - return [0,0]; - } - } - } - } - } - }, - shichou3:{ - trigger:{global:['dying','dieBegin']}, - forced:true, - popup:false, - priority:10, - filter:function(event,player){ - return event.player==player.storage.shichou_target; - }, - content:function(){ - trigger.player.unmarkSkill('shichou'); - delete player.storage.shichou_target; - player.removeSkill('shichou2'); - } - }, - shichou4:{ - trigger:{player:['damageAfter','damageCancelled']}, - forced:true, - popup:false, - audio:false, - content:function(){ - if(event.triggername=='damageAfter'&&trigger.num){ - player.draw(trigger.num); - } - player.removeSkill('shichou4'); - } - }, - zhaolie:{ - trigger:{player:'phaseDrawBegin'}, - direct:true, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('zhaolie'),function(card,player,target){ - return target!=player&&get.distance(player,target,'attack')<=1; - }).set('ai',function(target){ - var player=_status.event.player; - if(get.attitude(player,target)>0) return 0; - return get.damageEffect(target,player,player); - }); - 'step 1' - if(result.bool){ - trigger.num--; - player.storage.zhaolie=result.targets[0]; - player.logSkill('zhaolie',result.targets); - player.addTempSkill('zhaolie2','phaseDrawAfter'); - } - } - }, - zhaolie2:{ - trigger:{player:'phaseDrawEnd'}, - forced:true, - popup:false, - content:function(){ - 'step 0' - event.cards=get.cards(3); - player.showCards(event.cards); - 'step 1' - event.basic=[]; - event.nonbasic=[]; - for(var i=0;i1?0:7-get.value(card); - case 2:return 8-get.value(card); - case 3:return 10-get.value(card); - default:return 0; - } - }).set('num',num); - } - 'step 2' - var num=event.nonbasic.length; - var undone=false; - if(num==0){ - if(event.basic.length){ - result.targets[0].gain(event.basic,'gain2','log'); - } - } - else{ - if(result.bool){ - if(event.basic.length){ - player.gain(event.basic,'gain2','log'); - } - } - else{ - player.storage.zhaolie.damage(num); - if(event.basic.length){ - undone=true; - } - } - } - if(!undone){ - delete player.storage.zhaolie; - event.finish(); - } - 'step 3' - if(player.storage.zhaolie.isAlive()){ - player.storage.zhaolie.gain(event.basic,'gain2','log'); - } - else{ - for(var i=0;i=num) return false; - return true; - }, - filterTarget:function(card,player,target){ - return target.countCards('e')>0; - }, - content:function(){ - 'step 0' - target.draw(); - 'step 1' - var goon=get.damageEffect(target,player,target)>=0; - if(!goon&&target.hp>=4&&get.attitude(player,target)<0){ - var es=target.getCards('e'); - for(var i=0;i=8){ - goon=true;break; - } - } - } - target.chooseControl(function(){ - if(_status.event.goon) return '选项二'; - return '选项一'; - }).set('goon',goon).set('prompt','定叛').set('choiceList',['令'+get.translation(player)+'弃置你装备区里的一张牌','获得你装备区内的所有牌并受到一点伤害']); - 'step 2' - if(result.control=='选项一'){ - player.discardPlayerCard(target,true,'e'); - event.finish(); - } - else{ - target.gain(target.getCards('e'),'gain2'); - } - 'step 3' - game.delay(0.5); - target.damage(); - }, - ai:{ - order:7, - result:{ - target:function(player,target){ - if(get.damageEffect(target,player,target)>=0) return 2; - var att=get.attitude(player,target); - if(att==0) return 0; - var es=target.getCards('e'); - if(att>0&&(target.countCards('h')>2||target.needsToDiscard(1))) return 0; - if(es.length==1&&att>0) return 0; - for(var i=0;i0){ - return 1; - } - } - else if(val>=7){ - if(att<0){ - return -1; - } - } - } - return 0; - } - } - } - }, - hongde:{ - trigger:{player:['gainEnd','loseEnd']}, - direct:true, - filter:function(event,player){ - return event.cards&&event.cards.length>1; - }, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('hongde'),function(card,player,target){ - return target!=player; - }).set('ai',function(target){ - return get.attitude(player,target); - }); - 'step 1' - if(result.bool){ - player.logSkill('hongde',result.targets); - result.targets[0].draw(); - } - } - }, - ziyuan:{ - enable:'phaseUse', - usable:1, - filterCard:function(card){ - var num=0; - for(var i=0;i0); - })){ - return 10; - } - return 1; - }, - result:{ - player:function(player,target){ - if(get.attitude(player,target)<0) return -1; - var eff=get.recoverEffect(target,player,player); - if(eff<0) return 0; - if(eff>0){ - if(target.hp==1) return 3; - return 2; - } - if(player.needsToDiscard()) return 1; - return 0; - } - }, - threaten:1.3 - } - }, - jugu:{ - mod:{ - maxHandcard:function(player,num){ - return num+player.maxHp; - } - }, - trigger:{global:'gameStart',player:'enterGame'}, - forced:true, - content:function(){ - player.draw(player.maxHp,false); - player.$draw(player.maxHp); - } - }, - tuifeng:{ - trigger:{player:'damageEnd'}, - direct:true, - notemp:true, - filter:function(event,player){ - return player.countCards('h')>0; - }, - init:function(player){ - player.storage.tuifeng=[]; - }, - content:function(){ - 'step 0' - player.chooseCard(get.prompt('tuifeng'),'he',[1,trigger.num]).set('ai',function(card){ - if(card.name=='du') return 20; - return 7-get.useful(card); - }); - 'step 1' - if(result.bool){ - player.logSkill('tuifeng'); - player.lose(result.cards,ui.special); - player.$give(result.cards,player); - for(var i=0;i0; - }, - content:function(){ - player.draw(2*player.storage.tuifeng.length); - player.addTempSkill('tuifeng3'); - player.$throw(player.storage.tuifeng.slice(0),1000); - player.storage.tuifeng3=player.storage.tuifeng.length; - while(player.storage.tuifeng.length){ - player.storage.tuifeng.shift().discard(); - } - player.unmarkSkill('tuifeng') - } - }, - tuifeng3:{ - mod:{ - cardUsable:function(card,player,num){ - if(card.name=='sha'&&player.storage.tuifeng3) return num+player.storage.tuifeng3; - } - }, - onremove:true - }, - weidi:{ - trigger:{global:['gameStart','zhuUpdate']}, - forced:true, - popup:false, - filter:function(event,player){ - var mode=get.mode(); - return (mode=='identity'||(mode=='versus'&&_status.mode=='four')); - }, - content:function(){ - var list=[]; - var zhu=get.zhu(player); - if(zhu&&zhu!=player&&zhu.skills){ - for(var i=0;i0; - }, - init:function(player){ - player.storage.jianshu=false; - }, - filterTarget:function(card,player,target){ - if(ui.selected.targets.length){ - return target.countCards('h')>0&&target.distanceTo(ui.selected.targets[0])<=1; - } - return true; - }, - filterCard:{color:'black'}, - mark:true, - discard:false, - delay:0, - check:function(card){ - if(_status.event.player.hp==1) return 8-get.value(card); - return 6-get.value(card); - }, - selectTarget:2, - multitarget:true, - content:function(){ - 'step 0' - player.$give(cards,targets[0]); - player.awakenSkill('jianshu'); - player.storage.jianshu=true; - targets[0].gain(cards,player); - 'step 1' - targets[0].chooseToCompare(targets[1]); - 'step 2' - if(result.bool){ - targets[0].chooseToDiscard('he',2,true); - targets[1].loseHp(); - } - else{ - targets[1].chooseToDiscard('he',2,true); - targets[0].loseHp(); - } - }, - intro:{ - content:'limited' - }, - ai:{ - expose:0.4, - order:4, - result:{ - target:function(player,target){ - if(player.hasUnknown()) return 0; - if(ui.selected.targets.length) return -1; - return -0.5; - } - } - } - }, - yongdi:{ - unique:true, - trigger:{player:'damageEnd'}, - animationColor:'fire', - skillAnimation:'legend', - filter:function(event,player){ - return !player.storage.yongdi; - }, - init:function(player){ - player.storage.yongdi=false; - }, - mark:true, - direct:true, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('yongdi'),function(card,player,target){ - return target.sex=='male'&&target!=player; - }).set('ai',function(target){ - if(!_status.event.goon) return 0; - var player=_status.event.player; - var att=get.attitude(player,target); - if(att<=1) return 0; - var mode=get.mode(); - if(mode=='identity'||(mode=='versus'&&_status.mode=='four')){ - if(target.name&&lib.character[target.name]){ - for(var i=0;i0; - }, - selectTarget:[1,3], - filter:function(event,player){ - return player.countCards('h')>0; - }, - multitarget:true, - multiline:true, - content:function(){ - player.chooseToCompare(targets).callback=lib.skill.gushe.callback; - }, - init:function(player){ - player.storage.gushe=0; - }, - intro:{ - name:'饶舌', - content:'mark' - }, - chat:['粗鄙之语','天地不容','谄谀之臣','皓首匹夫,苍髯老贼','二臣贼子','断脊之犬','我从未见过有如此厚顔无耻之人!'], - callback:function(){ - 'step 0' - if(event.num1>event.num2){ - target.chooseToDiscard('he','弃置一张牌,或令'+get.translation(player)+'摸一张牌').set('ai',function(card){ - if(_status.event.goon) return 6-get.value(card); - return 0; - }).set('goon',get.attitude(target,player)<0); - } - else{ - target.chat(lib.skill.gushe.chat[player.storage.gushe]); - game.delay(); - player.storage.gushe++; - player.markSkill('gushe'); - if(player.storage.gushe>=7){ - player.die(); - } - else{ - // player.chooseToDiscard('弃置一张牌,或摸一张牌').set('ai',function(){return -1;}); - event.finish(); - } - } - 'step 1' - if(!result.bool){ - player.draw(); - } - }, - ai:{ - order:7, - result:{ - target:function(player,target){ - var num=game.countPlayer(function(current){ - return get.attitude(player,current)<0&¤t!=player&¤t.countCards('h'); - }); - if(num>3) num=3; - var hs=player.getCards('h'); - for(var i=0;i5&&player.storage.gushe+num<=6) return -1; - } - } - } - return 0; - }, - } - } - }, - jici:{ - trigger:{player:'compare'}, - filter:function(event,player){ - return event.getParent().name=='gushe'&&!event.iwhile&&event.num1<=player.storage.gushe; - }, - content:function(){ - if(trigger.num10; - }, - filterTarget:function(card,player,target){ - return target!=player&&target.countCards('he')>0; - }, - filterCard:{name:'sha'}, - content:function(){ - 'step 0' - target.chooseToDiscard('he',true); - 'step 1' - if(target.hp>=player.hp&&result.bool&&result.cards[0].name!='sha'){ - player.useCard({name:'juedou'},target); - } - }, - ai:{ - order:2, - result:{ - target:function(player,target){ - if(get.effect(target,{name:'juedou'},player,player)<=0){ - return 0; - } - if(target.hpplayer.hp) return -0.1; - return 0; - } - var hs1=target.getCards('h','sha'); - var hs2=player.getCards('h','sha'); - if(hs1.length>hs2.length){ - return 0; - } - var hsx=target.getCards('h'); - if(hsx.length>2&&hs2.length<=1&&hsx[0].number<6){ - return 0; - } - if(hsx.length>3&&hs2.length<=1){ - return 0; - } - if(hs1.length>hs2.length-1&&hs1.length>0&&(hs2.length<=1||hs1[0].number>hs2[0].number)){ - return 0; - } - return -1; - } - } - } - }, - shefu:{ - trigger:{player:'phaseEnd'}, - direct:true, - audio:2, - init:function(player){ - player.storage.shefu=[]; - player.storage.shefu2=[]; - }, - filter:function(event,player){ - return player.countCards('h')>0; - }, - intro:{ - content:'cards', - mark:function(dialog,content,player){ - if(content&&content.length){ - dialog.addAuto(content); - if(player.isUnderControl(true)){ - var str=''; - for(var i=0;i'+str+'') - } - } - }, - }, - content:function(){ - 'step 0' - var list1=[],list2=[],list3=[]; - for(var i=0;i=5) return false; - if(nh2>nh2&&event.source.isDead()) return false; - return true; - }, - direct:true, - content:function(){ - "step 0" - var num1=player.countCards('h'); - var num2=trigger.source.countCards('h'); - if(num1>num2){ - var next=player.chooseToDiscard([num2+1,num1],'贲育:是否弃置至少'+(num2+1)+'张手牌,并对'+get.translation(trigger.source)+'造成一点伤害?'); - next.logSkill=['benyu',trigger.source]; - next.set('ai',function(card){ - var trigger=_status.event.getTrigger(); - var player=_status.event.player; - if(ui.selected.cards.length>=_status.event.num){ - return -1; - } - if(get.damageEffect(trigger.source,player,player)>0&&_status.event.num<=2){ - return 8-get.value(card); - } - return -1; - }); - next.set('num',num2+1); - } - else{ - event.draw=true; - event.num=Math.min(num2,5)-num1; - player.chooseBool(get.prompt('benyu')); - } - "step 1" - if(result.bool){ - if(event.draw){ - player.logSkill('benyu',trigger.source); - player.draw(event.num); - } - else{ - trigger.source.damage(player); - } - } - }, - }, - jili:{ - trigger:{global:'useCard'}, - forced:true, - check:function(event,player){ - return get.effect(player,event.card,event.player,player)>0; - }, - filter:function(event,player){ - if(get.color(event.card)!='red') return false; - if(!event.targets) return false; - if(event.player==player) return false; - if(event.targets.contains(player)) return false; - if(get.info(event.card).multitarget) return false; - var type=get.type(event.card); - if(type!='basic'&&type!='trick') return false; - if(lib.filter.targetEnabled2(event.card,event.player,player)){ - for(var i=0;i0&&event.player!=player&&!player.hasSkill('zhidao2'); - }, - forced:true, - content:function(){ - var num=0; - if(trigger.player.countCards('h')) num++; - if(trigger.player.countCards('e')) num++; - if(trigger.player.countCards('j')) num++; - if(num){ - player.gainPlayerCard(trigger.player,num,'hej',true).set('filterButton',function(button){ - for(var i=0;i0; - }); - }, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('qizhi'),function(card,player,target){ - return !_status.event.getTrigger().targets.contains(target)&&target.countCards('he')>0; - }).set('ai',function(target){ - var player=_status.event.player; - if(target==player) return 2; - if(get.attitude(player,target)<=0){ - return 1 - } - return 0.5; - }); - 'step 1' - if(result.bool){ - player.storage.qizhi++; - if(!event.isMine()&&!_status.connectMode) game.delay(); - player.logSkill('qizhi',result.targets); - player.discardPlayerCard(result.targets[0],true,'he'); - event.target=result.targets[0]; - } - else{ - event.finish(); - } - 'step 2' - event.target.draw(); - }, - group:'qizhi2' - }, - qizhi2:{ - trigger:{player:'phaseBegin'}, - silent:true, - content:function(){ - player.storage.qizhi=0; - } - }, - jinqu:{ - trigger:{player:'phaseEnd'}, - check:function(event,player){ - return player.storage.qizhi>=player.countCards('h'); - }, - prompt:function(event,player){ - if(typeof player.storage.qizhi!='number'){ - '进趋:是否摸两张牌并将手牌弃置至'+get.cnNumber(0)+'张?'; - } - return '进趋:是否摸两张牌并将手牌弃置至'+get.cnNumber(player.storage.qizhi)+'张?'; - }, - content:function(){ - 'step 0' - player.draw(2); - 'step 1' - if(typeof player.storage.qizhi!='number'){ - player.storage.qizhi=0; - } - var dh=player.countCards('h')-player.storage.qizhi; - if(dh>0){ - player.chooseToDiscard(dh,true); - } - } - }, - mouduan:{ - init2:function(player){ - game.broadcastAll(function(player){ - player._mouduan_mark=player.mark('武',{ - content:'拥有技能【激昂】、【谦逊】' - }); - },player); - player.addAdditionalSkill('mouduan',['jiang','qianxun']); - }, - onremove:function(player){ - game.broadcastAll(function(player){ - if(player._mouduan_mark){ - player._mouduan_mark.delete(); - delete player._mouduan_mark; - } - },player); - player.removeAdditionalSkill('mouduan'); - }, - trigger:{player:'loseEnd'}, - forced:true, - filter:function(event,player){ - return player._mouduan_mark&&player._mouduan_mark.name=='武'&&player.countCards('h')<=2; - }, - content:function(){ - game.broadcastAll(function(player){ - if(!player._mouduan_mark) return; - player._mouduan_mark.name='文'; - player._mouduan_mark.skill='文'; - player._mouduan_mark.firstChild.innerHTML='文'; - player._mouduan_mark.info.content='拥有技能【英姿】、【克己】'; - },player); - player.addAdditionalSkill('mouduan',['yingzi','keji']); - }, - group:'mouduan2' - }, - mouduan2:{ - trigger:{global:'phaseBegin'}, - priority:5, - filter:function(event,player){ - return player._mouduan_mark&&player._mouduan_mark.name=='文'&&player.countCards('h')>2; - }, - direct:true, - content:function(){ - 'step 0' - player.chooseToDiscard('he','谋断:是否弃置一张牌将标记变为“武”?').ai=function(){ - return -1; - } - 'step 1' - if(result.bool&&player.countCards('h')>2){ - game.broadcastAll(function(player){ - if(!player._mouduan_mark) return; - player._mouduan_mark.name='武'; - player._mouduan_mark.skill='武'; - player._mouduan_mark.firstChild.innerHTML='武'; - player._mouduan_mark.info.content='拥有技能【激昂】、【谦逊】'; - },player); - player.addAdditionalSkill('mouduan',['jiang','qianxun']); - } - } - }, - tanhu:{ - enable:'phaseUse', - usable:1, - filterTarget:function(card,player,target){ - return player!=target&&target.countCards('h'); - }, - filter:function(event,player){ - return player.countCards('h')>0; - }, - content:function(){ - 'step 0' - player.chooseToCompare(target); - 'step 1' - if(result.bool){ - target.addTempSkill('tanhu2'); - } - }, - ai:{ - result:{ - target:function(player,target){ - var hs=player.getCards('h'); - if(hs.length<3) return 0; - var bool=false; - for(var i=0;i=9&&get.value(hs[i])<7){ - bool=true; - break; - } - } - if(!bool) return 0; - return -1; - } - }, - order:9, - }, - group:'tanhu3' - }, - tanhu2:{ - mark:true, - intro:{ - content:'已成为探虎目标' - } - }, - tanhu3:{ - mod:{ - globalFrom:function(from,to){ - if(to.hasSkill('tanhu2')) return -Infinity; - }, - wuxieRespondable:function(card,player,target){ - if(target.hasSkill('tanhu2')) return false; - } - } - }, + }).set('maxval',maxval); + 'step 1' + if(result.bool){ + player.logSkill('xiashu',result.targets); + event.target=result.targets[0]; + var hs=player.getCards('h'); + event.target.gain(hs,player); + player.$give(hs.length,event.target); + } + else{ + event.finish(); + } + 'step 2' + var hs=event.target.getCards('h'); + if(!hs.length){ + event.finish(); + return; + } + hs.sort(function(a,b){ + return get.value(b,player,'raw')-get.value(a,player,'raw'); + }); + event.target.chooseCard([1,hs.length],'展示至少一张手牌',true).set('ai',function(card){ + var rand=_status.event.rand; + var list=_status.event.list; + if(_status.event.att){ + if(ui.selected.cards.length>=Math.ceil(list.length/2)) return 0; + var value=get.value(card); + if(_status.event.getParent().player.isHealthy()){ + value+=(get.tag(card,'damage')?1.5:0)+(get.tag(card,'draw')?2:0); + } + return value; + } + if(ui.selected.cards.length>=Math.floor(list.length/2)) return 0; + return (list.indexOf(card)%2==rand)?1:0; + }).set('rand',(Math.random()<0.6)?1:0).set('list',hs).set('att',get.attitude(event.target,player)>0); + 'step 3' + event.target.showCards(result.cards); + event.cards1=result.cards; + event.cards2=event.target.getCards('h',function(card){ + return !event.cards1.contains(card); + }); + 'step 4' + var choice; + var num1=event.cards1.length; + var num2=event.cards2.length; + if(get.attitude(event.target,player)>0&&num1>=num2){ + choice=0; + } + else if(num1==num2){ + choice=(Math.random()<0.45)?0:1; + } + else if(num1>num2){ + if(num1-num2==1){ + choice=(Math.random()<0.6)?0:1; + } + else{ + choice=0; + } + } + else{ + if(num2-num1==1){ + choice=(Math.random()<0.6)?1:0; + } + else{ + choice=1; + } + } + player.chooseControl(function(event,player){ + return _status.event.choice; + }).set('choiceList',['获得'+get.translation(event.target)+'展示的牌', + '获得'+get.translation(event.target)+'未展示的牌']).set('choice',choice); + 'step 5' + if(result.index==0){ + player.gain(event.cards1,target); + target.$give(event.cards1,player); + } + else{ + player.gain(event.cards2,target); + target.$giveAuto(event.cards2,player); + } + }, + ai:{ + expose:0.1 + } + }, + sheyan:{ + trigger:{global:'useCard'}, + filter:function(event,player){ + if(!event.targets||!event.targets.contains(player)) return false; + var info=get.info(event.card); + if(info.type!='trick') return false; + if(info.multitarget) return false; + if(event.targets.length>1) return true; + return game.hasPlayer(function(current){ + return !event.targets.contains(current)&&lib.filter.targetEnabled2(event.card,event.player,current); + }); + }, + direct:true, + content:function(){ + 'step 0' + var bool1=(trigger.targets.length>1); + var bool2=game.hasPlayer(function(current){ + return !trigger.targets.contains(current)&&lib.filter.targetEnabled2(trigger.card,trigger.player,current); + }); + if(bool1&&bool2){ + player.chooseControlList(true,get.prompt('sheyan'),['为'+get.translation(trigger.card)+'增加一个目标','为'+get.translation(trigger.card)+'减少一个目标'],function(event,player){ + if(_status.event.add) return 0; + return 1; + }).set('add',get.effect(player,trigger.card,trigger.player,player)>=0); + } + else if(bool2){ + event.type='add'; + event.goto(2); + event.unchosen=true; + } + else{ + event.type='remove'; + event.goto(2); + event.unchosen=true; + } + 'step 1' + if(result.control=='cancel2'){ + event.finish(); + } + else if(result.index==1){ + event.type='remove'; + } + else{ + event.type='add'; + } + 'step 2' + if(event.type=='add'){ + player.chooseTarget(event.unchosen?get.prompt('sheyan'):null,'为'+get.translation(trigger.card)+'增加一个目标',function(card,player,target){ + return !trigger.targets.contains(target)&&lib.filter.targetEnabled2(trigger.card,trigger.player,target); + }).set('ai',function(target){ + var trigger=_status.event.getTrigger(); + return get.effect(target,trigger.card,trigger.player,_status.event.player); + }); + } + else{ + player.chooseTarget(event.unchosen?get.prompt('sheyan'):null,'为'+get.translation(trigger.card)+'减少一个目标',function(card,player,target){ + return _status.event.targets.contains(target); + }).set('ai',function(target){ + var trigger=_status.event.getTrigger(); + return -get.effect(target,trigger.card,trigger.player,_status.event.player); + }).set('targets',trigger.targets); + } + 'step 3' + if(result.bool){ + if(!event.isMine()) game.delayx(); + event.target=result.targets[0]; + } + else{ + event.finish(); + } + 'step 4' + player.logSkill('sheyan',event.target); + if(event.type=='add'){ + trigger.targets.push(event.target); + } + else{ + trigger.targets.remove(event.target); + } + }, + ai:{ + expose:0.2 + } + }, + bingzheng:{ + trigger:{player:'phaseUseEnd'}, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('bingzheng'),function(card,player,target){ + return target.countCards('h')!=target.hp; + }).set('ai',function(target){ + var player=_status.event.player; + var att=get.attitude(player,target); + var nh=target.countCards('h'); + if(att>0){ + if(nh==target.hp-1){ + if(player==target) return att+1; + return att+2; + } + if(player==target&&player.needsToDiscard()) return att/3; + return att; + } + else{ + if(nh==target.hp+1) return -att; + if(nh==0) return 0; + return -att/2; + } + }); + 'step 1' + if(result.bool){ + player.logSkill('bingzheng',result.targets); + event.target=result.targets[0]; + if(event.target.countCards('h')){ + player.chooseControl(function(event,player){ + var target=event.target; + if(get.attitude(player,target)<0) return 1; + if(target.countCards('h')==target.hp+1) return 1; + return 0; + }).set('choiceList',['令'+get.translation(event.target)+'摸一张牌', + '令'+get.translation(event.target)+'弃置一张手牌']); + } + else{ + event.directfalse=true; + } + } + else{ + event.finish(); + } + 'step 2' + if(event.directfalse||result.index==0){ + event.target.draw(); + } + else{ + event.target.chooseToDiscard('h',true); + } + 'step 3' + if(event.target.countCards('h')==event.target.hp){ + player.draw(); + if(event.target==player){ + event.finish(); + return; + } + var next=player.chooseCard('是否交给'+get.translation(event.target)+'一张牌?','he'); + next.set('ai',function(card){ + if(get.position(card)!='h') return 0; + if(_status.event.shan){ + return card.name=='shan'?1:0; + } + if(_status.event.goon){ + return 10-get.value(card); + } + return -get.value(card,_status.event.player,'raw'); + }); + if(get.attitude(player,event.target)>1&& + player.countCards('h','shan')>1&&player.countCards('h')>event.target.countCards('h')){ + next.set('shan',true); + } + if(get.attitude(player,event.target)>0&&player.needsToDiscard()){ + next.set('goon',true); + } + } + else{ + event.finish(); + } + 'step 4' + if(result.bool){ + event.target.gain(result.cards,player); + player.$giveAuto(result.cards,event.target); + } + }, + ai:{ + expose:0.2, + threaten:1.4 + } + }, + fuman:{ + enable:'phaseUse', + filterTarget:function(card,player,target){ + return !target.hasSkill('fuman2')&&target!=player; + }, + filter:function(event,player){ + return player.countCards('h','sha'); + }, + discard:false, + prepare:'give', + filterCard:{name:'sha'}, + content:function(){ + target.gain(cards,player); + target.storage.fuman3=cards[0]; + target.storage.fuman2=player; + target.addTempSkill('fuman2',{player:'phaseAfter'}); + }, + check:function(card){ + return 6-get.value(card); + }, + ai:{ + order:2, + result:{ + target:function(player,target){ + if(!target.hasSha()) return 1.2; + return 1; + } + } + } + }, + fuman2:{ + trigger:{player:'useCard'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.card==player.storage.fuman3&&player.storage.fuman2.isIn(); + }, + mark:true, + intro:{ + content:'下个回合结束之前使用“抚蛮”牌时,令$一张牌' + }, + content:function(){ + 'step 0' + game.delayx(); + 'step 1' + player.line(player.storage.fuman2,'green'); + player.storage.fuman2.draw(); + player.storage.fuman2.logSkill('fuman'); + }, + onremove:function(player){ + delete player.storage.fuman2; + delete player.storage.fuman3; + }, + ai:{ + effect:{ + player:function(card,player,target,current){ + if(card.name=='sha'&&card!=player.storage.fuman3&& + player.storage.fuman2.isIn()&&get.attitude(player,player.storage.fuman2)>0){ + return 'zeroplayertarget'; + } + } + } + } + }, + qizhou:{ + trigger:{player:['phaseBefore','equipAfter','loseAfter']}, + forced:true, + popup:false, + derivation:['mashu','reyingzi','duanbing','fenwei'], + filter:function(event,player){ + if(player.equiping) return false; + var suits=[]; + var es=player.getCards('e'); + for(var i=0;i0; + } + }, + content:function(){ + var suits=[]; + var es=player.getCards('e'); + for(var i=0;i0; + } + if(player.hasSha()&&geteff(target)){ + var num=game.countPlayer(function(current){ + return current!=player&&get.distance(player,current)<=1&&geteff(current); + }); + if(num==0){ + if(game.hasPlayer(function(current){ + return player.canUse('sha',current)&&geteff(current)&¤t!=target; + })){ + return 1; + } + } + else if(num==1){ + return 1; + } + } + return 0; + } + } + } + }, + fenxun2:{ + mark:'character', + onremove:true, + intro:{ + content:'到$的距离视为1' + }, + mod:{ + globalFrom:function(from,to){ + if(to==from.storage.fenxun2){ + return -Infinity; + } + } + } + }, + duanbing:{ + trigger:{player:'useCard'}, + filter:function(event,player){ + if(event.card.name!='sha') return false; + return game.hasPlayer(function(current){ + return !event.targets.contains(current)&&get.distance(player,current)<=1&&player.canUse('sha',current); + }); + }, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('duanbing'),function(card,player,target){ + return !_status.event.source.contains(target)&&get.distance(player,target)<=1&&player.canUse('sha',target); + }).set('source',trigger.targets).set('ai',function(target){ + var player=_status.event.player; + return get.effect(target,{name:'sha'},player,player); + }); + 'step 1' + if(result.bool){ + if(!event.isMine()&&!_status.connectMode) game.delayx(); + event.target=result.targets[0]; + } + else{ + event.finish(); + } + 'step 2' + player.logSkill('duanbing',event.target); + trigger.targets.push(event.target); + }, + ai:{ + effect:{ + player:function(card,player,target){ + if(card.name=='sha'){ + if(player._duanbingtmp) return; + player._duanbingtmp=true; + if(get.effect(target,{name:'sha'},player,player)<=0){ + delete player._duanbingtmp; + return; + } + if(game.hasPlayer(function(current){ + return current!=target&&get.distance(player,current)<=1&& + player.canUse('sha',current)&&get.effect(current,{name:'sha'},player,player)>0; + })){ + delete player._duanbingtmp; + return [1,1]; + } + delete player._duanbingtmp; + } + } + } + } + }, + fuhan:{ + trigger:{player:'phaseBefore'}, + unique:true, + skillAnimation:true, + forceunique:true, + filter:function(event,player){ + return player.storage.fanghun>0; + }, + prompt:function(event,player){ + var num=player.storage.fanghun2; + var mode=get.mode(); + if(mode!='chess'&&mode!='tafang'&&mode!='stone'){ + num=Math.min(num,game.players.length+game.dead.length); + } + return get.prompt('fuhan')+'(体力上限:'+num+')'; + }, + check:function(event,player){ + var num=player.storage.fanghun2; + if(num==1) return false; + if(player.hp<=1) return true; + if(num==2) return false; + if(num==3) return player.hp<3&&player.isMinHp(); + return true; + }, + content:function(){ + 'step 0' + var list; + if(_status.connectMode){ + list=get.charactersOL(function(i){ + return lib.character[i][1]!='shu'; + }); + } + else{ + list=get.gainableCharacters(function(info){ + return info[1]=='shu'; + }); + } + var players=game.players.concat(game.dead); + for(var i=0;i=3; + }, + skillAnimation:true, + unique:true, + content:function(){ + 'step 0' + player.awakenSkill('yjixi'); + player.gainMaxHp(); + player.recover(); + 'step 1' + var str='摸两张牌'; + var mode=get.mode(); + var choice='选项一'; + if(mode=='identity'||(mode=='versus'&&_status.mode=='four')){ + var list=[]; + var zhu=get.zhu(player); + if(zhu&&zhu!=player&&zhu.skills){ + for(var i=0;i=6) return 0; + return 20-num; + } + else{ + if(_status.event.player.needsToDiscard()){ + return 7-num; + } + } + return 0; + }, + discard:false, + prepare:'give', + content:function(){ + 'step 0' + target.gain(cards,player); + if(get.color(cards[0])=='black'){ + target.chooseToDiscard(2,'he','弃置两张牌,或令'+get.translation(player)+'摸两张牌').set('ai',function(card){ + if(_status.event.goon) return 7-get.value(card); + return 0; + }).set('goon',get.attitude(target,player)<0); + } + else{ + event.finish(); + } + 'step 1' + if(!result.bool){ + player.draw(2); + } + }, + ai:{ + order:8, + expose:0.2, + result:{ + target:function(player,target){ + if(ui.selected.cards.length&&get.color(ui.selected.cards[0])=='red'){ + if(target.countCards('h')0; + }, + content:function(){ + 'step 0' + player.draw(player.storage.shanjia); + 'step 1' + player.chooseToDiscard('he',player.storage.shanjia,true); + 'step 2' + var useCard=false; + if(result.bool&&result.cards){ + for(var i=0;i0) + })){ + return 6-get.value(card); + } + } + return 0; + }, + content:function(){ + player.loseHp(); + switch(get.type(cards[0],'trick')){ + case 'basic':player.addTempSkill('zhanyi_basic');break; + case 'equip':player.addTempSkill('zhanyi_equip');break; + case 'trick':player.addTempSkill('zhanyi_trick');player.draw(2);break; + } + }, + ai:{ + order:9.1, + result:{ + player:1 + } + } + }, + zhanyi_basic:{ + group:['zhanyi_basic_sha','zhanyi_basic_jiu','zhanyi_basic_tao'] + }, + zhanyi_basic_tao:{ + enable:'chooseToUse', + filterCard:{type:'basic'}, + viewAs:{name:'tao'}, + viewAsFilter:function(player){ + if(!player.countCards('h',{type:'basic'})) return false; + }, + prompt:'将一张基本牌当桃使用', + check:function(card){ + return 8-get.value(card); + }, + ai:{ + skillTagFilter:function(player){ + if(!player.countCards('h',{type:'basic'})) return false; + }, + save:true, + } + }, + zhanyi_basic_sha:{ + enable:'chooseToUse', + filterCard:{type:'basic'}, + viewAs:{name:'sha'}, + viewAsFilter:function(player){ + if(!player.countCards('h',{type:'basic'})) return false; + }, + prompt:'将一张基本牌当杀使用', + check:function(card){return 4-get.value(card)}, + ai:{ + skillTagFilter:function(player){ + if(!player.countCards('h',{type:'basic'})) return false; + }, + respondSha:true, + } + }, + zhanyi_basic_jiu:{ + enable:'chooseToUse', + filterCard:{type:'basic'}, + viewAs:{name:'jiu'}, + viewAsFilter:function(player){ + if(!player.countCards('h',{type:'basic'})) return false; + }, + prompt:'将一张基本牌当酒使用', + check:function(card){ + if(_status.event.type=='dying') return 1; + return 4-get.value(card); + }, + ai:{ + skillTagFilter:function(player){ + return player.countCards('h',{type:'basic'})>0&&player.hp<=0; + }, + save:true, + } + }, + zhanyi_equip:{ + trigger:{player:'shaBegin'}, + forced:true, + filter:function(event,player){ + return event.target.countCards('he')>0; + }, + check:function(event,player){ + return get.attitude(player,event.target)<0; + }, + content:function(){ + trigger.target.chooseToDiscard('he',true,2); + } + }, + zhanyi_trick:{ + mod:{ + targetInRange:function(){ + return true; + } + } + }, + shichou:{ + skillAnimation:true, + unique:true, + enable:'phaseUse', + zhuSkill:true, + filter:function(event,player){ + if(!player.hasZhuSkill('shichou'))return false; + if(player.countCards('he')<2) return false; + return !player.storage.shichou; + }, + selectCard:2, + init:function(player){ + if(player.hasZhuSkill('shichou')){ + player.markSkill('shichou'); + player.storage.shichou=false; + } + }, + filterTarget:function(card,player,target){ + return target.group=='shu'&&target!=player; + }, + filterCard:true, + position:'he', + check:function(card){ + return 7-get.value(card); + }, + discard:false, + prepare:'give', + content:function(){ + player.storage.shichou=true; + player.awakenSkill('shichou'); + target.gain(cards,player); + player.storage.shichou_target=target; + player.addSkill('shichou2'); + target.markSkillCharacter('shichou',player,'誓仇','代替'+get.translation(player)+'承受伤害直到首次进入濒死状态'); + }, + intro:{ + content:'limited' + }, + ai:{ + order:7, + result:{ + player:function(player,target){ + if(player.hasUnknown()) return 0; + var att=get.attitude(player,target); + if(att<=0){ + if(target.hp==1) return (10-att)/2; + return 10-att; + } + else{ + if(target.hp==1) return 0; + return (10-att)/4; + } + }, + } + } + }, + shichou2:{ + group:'shichou3', + trigger:{player:'damageBefore'}, + forced:true, + popup:false, + content:function(){ + trigger.untrigger(); + trigger.player=player.storage.shichou_target; + trigger.player.addSkill('shichou4'); + trigger.trigger('damageBefore'); + player.logSkill('shichou2',player.storage.shichou_target); + game.delay(0.5); + }, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(get.tag(card,'damage')){ + if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; + if(get.attitude(player,target)>0) return [0,0]; + var eff=get.damageEffect(target.storage.shichou_target,player,target); + if(eff>0){ + return [0,1]; + } + else if(eff<0){ + return [0,-2]; + } + else{ + return [0,0]; + } + } + } + } + } + }, + shichou3:{ + trigger:{global:['dying','dieBegin']}, + forced:true, + popup:false, + priority:10, + filter:function(event,player){ + return event.player==player.storage.shichou_target; + }, + content:function(){ + trigger.player.unmarkSkill('shichou'); + delete player.storage.shichou_target; + player.removeSkill('shichou2'); + } + }, + shichou4:{ + trigger:{player:['damageAfter','damageCancelled']}, + forced:true, + popup:false, + audio:false, + content:function(){ + if(event.triggername=='damageAfter'&&trigger.num){ + player.draw(trigger.num); + } + player.removeSkill('shichou4'); + } + }, + zhaolie:{ + trigger:{player:'phaseDrawBegin'}, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('zhaolie'),function(card,player,target){ + return target!=player&&get.distance(player,target,'attack')<=1; + }).set('ai',function(target){ + var player=_status.event.player; + if(get.attitude(player,target)>0) return 0; + return get.damageEffect(target,player,player); + }); + 'step 1' + if(result.bool){ + trigger.num--; + player.storage.zhaolie=result.targets[0]; + player.logSkill('zhaolie',result.targets); + player.addTempSkill('zhaolie2','phaseDrawAfter'); + } + } + }, + zhaolie2:{ + trigger:{player:'phaseDrawEnd'}, + forced:true, + popup:false, + content:function(){ + 'step 0' + event.cards=get.cards(3); + player.showCards(event.cards); + 'step 1' + event.basic=[]; + event.nonbasic=[]; + for(var i=0;i1?0:7-get.value(card); + case 2:return 8-get.value(card); + case 3:return 10-get.value(card); + default:return 0; + } + }).set('num',num); + } + 'step 2' + var num=event.nonbasic.length; + var undone=false; + if(num==0){ + if(event.basic.length){ + result.targets[0].gain(event.basic,'gain2','log'); + } + } + else{ + if(result.bool){ + if(event.basic.length){ + player.gain(event.basic,'gain2','log'); + } + } + else{ + player.storage.zhaolie.damage(num); + if(event.basic.length){ + undone=true; + } + } + } + if(!undone){ + delete player.storage.zhaolie; + event.finish(); + } + 'step 3' + if(player.storage.zhaolie.isAlive()){ + player.storage.zhaolie.gain(event.basic,'gain2','log'); + } + else{ + for(var i=0;i=num) return false; + return true; + }, + filterTarget:function(card,player,target){ + return target.countCards('e')>0; + }, + content:function(){ + 'step 0' + target.draw(); + 'step 1' + var goon=get.damageEffect(target,player,target)>=0; + if(!goon&&target.hp>=4&&get.attitude(player,target)<0){ + var es=target.getCards('e'); + for(var i=0;i=8){ + goon=true;break; + } + } + } + target.chooseControl(function(){ + if(_status.event.goon) return '选项二'; + return '选项一'; + }).set('goon',goon).set('prompt','定叛').set('choiceList',['令'+get.translation(player)+'弃置你装备区里的一张牌','获得你装备区内的所有牌并受到一点伤害']); + 'step 2' + if(result.control=='选项一'){ + player.discardPlayerCard(target,true,'e'); + event.finish(); + } + else{ + target.gain(target.getCards('e'),'gain2'); + } + 'step 3' + game.delay(0.5); + target.damage(); + }, + ai:{ + order:7, + result:{ + target:function(player,target){ + if(get.damageEffect(target,player,target)>=0) return 2; + var att=get.attitude(player,target); + if(att==0) return 0; + var es=target.getCards('e'); + if(att>0&&(target.countCards('h')>2||target.needsToDiscard(1))) return 0; + if(es.length==1&&att>0) return 0; + for(var i=0;i0){ + return 1; + } + } + else if(val>=7){ + if(att<0){ + return -1; + } + } + } + return 0; + } + } + } + }, + hongde:{ + trigger:{player:['gainEnd','loseEnd']}, + direct:true, + filter:function(event,player){ + return event.cards&&event.cards.length>1; + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('hongde'),function(card,player,target){ + return target!=player; + }).set('ai',function(target){ + return get.attitude(player,target); + }); + 'step 1' + if(result.bool){ + player.logSkill('hongde',result.targets); + result.targets[0].draw(); + } + } + }, + ziyuan:{ + enable:'phaseUse', + usable:1, + filterCard:function(card){ + var num=0; + for(var i=0;i0); + })){ + return 10; + } + return 1; + }, + result:{ + player:function(player,target){ + if(get.attitude(player,target)<0) return -1; + var eff=get.recoverEffect(target,player,player); + if(eff<0) return 0; + if(eff>0){ + if(target.hp==1) return 3; + return 2; + } + if(player.needsToDiscard()) return 1; + return 0; + } + }, + threaten:1.3 + } + }, + jugu:{ + mod:{ + maxHandcard:function(player,num){ + return num+player.maxHp; + } + }, + trigger:{global:'gameStart',player:'enterGame'}, + forced:true, + content:function(){ + player.draw(player.maxHp,false); + player.$draw(player.maxHp); + } + }, + tuifeng:{ + trigger:{player:'damageEnd'}, + direct:true, + notemp:true, + filter:function(event,player){ + return player.countCards('h')>0; + }, + init:function(player){ + player.storage.tuifeng=[]; + }, + content:function(){ + 'step 0' + player.chooseCard(get.prompt('tuifeng'),'he',[1,trigger.num]).set('ai',function(card){ + if(card.name=='du') return 20; + return 7-get.useful(card); + }); + 'step 1' + if(result.bool){ + player.logSkill('tuifeng'); + player.lose(result.cards,ui.special); + player.$give(result.cards,player); + for(var i=0;i0; + }, + content:function(){ + player.draw(2*player.storage.tuifeng.length); + player.addTempSkill('tuifeng3'); + player.$throw(player.storage.tuifeng.slice(0),1000); + player.storage.tuifeng3=player.storage.tuifeng.length; + while(player.storage.tuifeng.length){ + player.storage.tuifeng.shift().discard(); + } + player.unmarkSkill('tuifeng') + } + }, + tuifeng3:{ + mod:{ + cardUsable:function(card,player,num){ + if(card.name=='sha'&&player.storage.tuifeng3) return num+player.storage.tuifeng3; + } + }, + onremove:true + }, + weidi:{ + trigger:{global:['gameStart','zhuUpdate']}, + forced:true, + popup:false, + filter:function(event,player){ + var mode=get.mode(); + return (mode=='identity'||(mode=='versus'&&_status.mode=='four')); + }, + content:function(){ + var list=[]; + var zhu=get.zhu(player); + if(zhu&&zhu!=player&&zhu.skills){ + for(var i=0;i0; + }, + init:function(player){ + player.storage.jianshu=false; + }, + filterTarget:function(card,player,target){ + if(ui.selected.targets.length){ + return target.countCards('h')>0&&target.distanceTo(ui.selected.targets[0])<=1; + } + return true; + }, + filterCard:{color:'black'}, + mark:true, + discard:false, + delay:0, + check:function(card){ + if(_status.event.player.hp==1) return 8-get.value(card); + return 6-get.value(card); + }, + selectTarget:2, + multitarget:true, + content:function(){ + 'step 0' + player.$give(cards,targets[0]); + player.awakenSkill('jianshu'); + player.storage.jianshu=true; + targets[0].gain(cards,player); + 'step 1' + targets[0].chooseToCompare(targets[1]); + 'step 2' + if(result.bool){ + targets[0].chooseToDiscard('he',2,true); + targets[1].loseHp(); + } + else{ + targets[1].chooseToDiscard('he',2,true); + targets[0].loseHp(); + } + }, + intro:{ + content:'limited' + }, + ai:{ + expose:0.4, + order:4, + result:{ + target:function(player,target){ + if(player.hasUnknown()) return 0; + if(ui.selected.targets.length) return -1; + return -0.5; + } + } + } + }, + yongdi:{ + unique:true, + trigger:{player:'damageEnd'}, + animationColor:'fire', + skillAnimation:'legend', + filter:function(event,player){ + return !player.storage.yongdi; + }, + init:function(player){ + player.storage.yongdi=false; + }, + mark:true, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('yongdi'),function(card,player,target){ + return target.sex=='male'&&target!=player; + }).set('ai',function(target){ + if(!_status.event.goon) return 0; + var player=_status.event.player; + var att=get.attitude(player,target); + if(att<=1) return 0; + var mode=get.mode(); + if(mode=='identity'||(mode=='versus'&&_status.mode=='four')){ + if(target.name&&lib.character[target.name]){ + for(var i=0;i0; + }, + selectTarget:[1,3], + filter:function(event,player){ + return player.countCards('h')>0; + }, + multitarget:true, + multiline:true, + content:function(){ + player.chooseToCompare(targets).callback=lib.skill.gushe.callback; + }, + init:function(player){ + player.storage.gushe=0; + }, + intro:{ + name:'饶舌', + content:'mark' + }, + chat:['粗鄙之语','天地不容','谄谀之臣','皓首匹夫,苍髯老贼','二臣贼子','断脊之犬','我从未见过有如此厚顔无耻之人!'], + callback:function(){ + 'step 0' + if(event.num1>event.num2){ + target.chooseToDiscard('he','弃置一张牌,或令'+get.translation(player)+'摸一张牌').set('ai',function(card){ + if(_status.event.goon) return 6-get.value(card); + return 0; + }).set('goon',get.attitude(target,player)<0); + } + else{ + target.chat(lib.skill.gushe.chat[player.storage.gushe]); + game.delay(); + player.storage.gushe++; + player.markSkill('gushe'); + if(player.storage.gushe>=7){ + player.die(); + } + else{ + // player.chooseToDiscard('弃置一张牌,或摸一张牌').set('ai',function(){return -1;}); + event.finish(); + } + } + 'step 1' + if(!result.bool){ + player.draw(); + } + }, + ai:{ + order:7, + result:{ + target:function(player,target){ + var num=game.countPlayer(function(current){ + return get.attitude(player,current)<0&¤t!=player&¤t.countCards('h'); + }); + if(num>3) num=3; + var hs=player.getCards('h'); + for(var i=0;i5&&player.storage.gushe+num<=6) return -1; + } + } + } + return 0; + }, + } + } + }, + jici:{ + trigger:{player:'compare'}, + filter:function(event,player){ + return event.getParent().name=='gushe'&&!event.iwhile&&event.num1<=player.storage.gushe; + }, + content:function(){ + if(trigger.num10; + }, + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('he')>0; + }, + filterCard:{name:'sha'}, + content:function(){ + 'step 0' + target.chooseToDiscard('he',true); + 'step 1' + if(target.hp>=player.hp&&result.bool&&result.cards[0].name!='sha'){ + player.useCard({name:'juedou'},target); + } + }, + ai:{ + order:2, + result:{ + target:function(player,target){ + if(get.effect(target,{name:'juedou'},player,player)<=0){ + return 0; + } + if(target.hpplayer.hp) return -0.1; + return 0; + } + var hs1=target.getCards('h','sha'); + var hs2=player.getCards('h','sha'); + if(hs1.length>hs2.length){ + return 0; + } + var hsx=target.getCards('h'); + if(hsx.length>2&&hs2.length<=1&&hsx[0].number<6){ + return 0; + } + if(hsx.length>3&&hs2.length<=1){ + return 0; + } + if(hs1.length>hs2.length-1&&hs1.length>0&&(hs2.length<=1||hs1[0].number>hs2[0].number)){ + return 0; + } + return -1; + } + } + } + }, + shefu:{ + trigger:{player:'phaseEnd'}, + direct:true, + audio:2, + init:function(player){ + player.storage.shefu=[]; + player.storage.shefu2=[]; + }, + filter:function(event,player){ + return player.countCards('h')>0; + }, + intro:{ + content:'cards', + mark:function(dialog,content,player){ + if(content&&content.length){ + dialog.addAuto(content); + if(player.isUnderControl(true)){ + var str=''; + for(var i=0;i'+str+'') + } + } + }, + }, + content:function(){ + 'step 0' + var list1=[],list2=[],list3=[]; + for(var i=0;i=5) return false; + if(nh2>nh2&&event.source.isDead()) return false; + return true; + }, + direct:true, + content:function(){ + "step 0" + var num1=player.countCards('h'); + var num2=trigger.source.countCards('h'); + if(num1>num2){ + var next=player.chooseToDiscard([num2+1,num1],'贲育:是否弃置至少'+(num2+1)+'张手牌,并对'+get.translation(trigger.source)+'造成一点伤害?'); + next.logSkill=['benyu',trigger.source]; + next.set('ai',function(card){ + var trigger=_status.event.getTrigger(); + var player=_status.event.player; + if(ui.selected.cards.length>=_status.event.num){ + return -1; + } + if(get.damageEffect(trigger.source,player,player)>0&&_status.event.num<=2){ + return 8-get.value(card); + } + return -1; + }); + next.set('num',num2+1); + } + else{ + event.draw=true; + event.num=Math.min(num2,5)-num1; + player.chooseBool(get.prompt('benyu')); + } + "step 1" + if(result.bool){ + if(event.draw){ + player.logSkill('benyu',trigger.source); + player.draw(event.num); + } + else{ + trigger.source.damage(player); + } + } + }, + }, + jili:{ + trigger:{global:'useCard'}, + forced:true, + check:function(event,player){ + return get.effect(player,event.card,event.player,player)>0; + }, + filter:function(event,player){ + if(get.color(event.card)!='red') return false; + if(!event.targets) return false; + if(event.player==player) return false; + if(event.targets.contains(player)) return false; + if(get.info(event.card).multitarget) return false; + var type=get.type(event.card); + if(type!='basic'&&type!='trick') return false; + if(lib.filter.targetEnabled2(event.card,event.player,player)){ + for(var i=0;i0&&event.player!=player&&!player.hasSkill('zhidao2'); + }, + forced:true, + content:function(){ + var num=0; + if(trigger.player.countCards('h')) num++; + if(trigger.player.countCards('e')) num++; + if(trigger.player.countCards('j')) num++; + if(num){ + player.gainPlayerCard(trigger.player,num,'hej',true).set('filterButton',function(button){ + for(var i=0;i0; + }); + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('qizhi'),function(card,player,target){ + return !_status.event.getTrigger().targets.contains(target)&&target.countCards('he')>0; + }).set('ai',function(target){ + var player=_status.event.player; + if(target==player) return 2; + if(get.attitude(player,target)<=0){ + return 1 + } + return 0.5; + }); + 'step 1' + if(result.bool){ + player.storage.qizhi++; + if(!event.isMine()&&!_status.connectMode) game.delay(); + player.logSkill('qizhi',result.targets); + player.discardPlayerCard(result.targets[0],true,'he'); + event.target=result.targets[0]; + } + else{ + event.finish(); + } + 'step 2' + event.target.draw(); + }, + group:'qizhi2' + }, + qizhi2:{ + trigger:{player:'phaseBegin'}, + silent:true, + content:function(){ + player.storage.qizhi=0; + } + }, + jinqu:{ + trigger:{player:'phaseEnd'}, + check:function(event,player){ + return player.storage.qizhi>=player.countCards('h'); + }, + prompt:function(event,player){ + if(typeof player.storage.qizhi!='number'){ + '进趋:是否摸两张牌并将手牌弃置至'+get.cnNumber(0)+'张?'; + } + return '进趋:是否摸两张牌并将手牌弃置至'+get.cnNumber(player.storage.qizhi)+'张?'; + }, + content:function(){ + 'step 0' + player.draw(2); + 'step 1' + if(typeof player.storage.qizhi!='number'){ + player.storage.qizhi=0; + } + var dh=player.countCards('h')-player.storage.qizhi; + if(dh>0){ + player.chooseToDiscard(dh,true); + } + } + }, + mouduan:{ + init2:function(player){ + game.broadcastAll(function(player){ + player._mouduan_mark=player.mark('武',{ + content:'拥有技能【激昂】、【谦逊】' + }); + },player); + player.addAdditionalSkill('mouduan',['jiang','qianxun']); + }, + onremove:function(player){ + game.broadcastAll(function(player){ + if(player._mouduan_mark){ + player._mouduan_mark.delete(); + delete player._mouduan_mark; + } + },player); + player.removeAdditionalSkill('mouduan'); + }, + trigger:{player:'loseEnd'}, + forced:true, + filter:function(event,player){ + return player._mouduan_mark&&player._mouduan_mark.name=='武'&&player.countCards('h')<=2; + }, + content:function(){ + game.broadcastAll(function(player){ + if(!player._mouduan_mark) return; + player._mouduan_mark.name='文'; + player._mouduan_mark.skill='文'; + player._mouduan_mark.firstChild.innerHTML='文'; + player._mouduan_mark.info.content='拥有技能【英姿】、【克己】'; + },player); + player.addAdditionalSkill('mouduan',['yingzi','keji']); + }, + group:'mouduan2' + }, + mouduan2:{ + trigger:{global:'phaseBegin'}, + priority:5, + filter:function(event,player){ + return player._mouduan_mark&&player._mouduan_mark.name=='文'&&player.countCards('h')>2; + }, + direct:true, + content:function(){ + 'step 0' + player.chooseToDiscard('he','谋断:是否弃置一张牌将标记变为“武”?').ai=function(){ + return -1; + } + 'step 1' + if(result.bool&&player.countCards('h')>2){ + game.broadcastAll(function(player){ + if(!player._mouduan_mark) return; + player._mouduan_mark.name='武'; + player._mouduan_mark.skill='武'; + player._mouduan_mark.firstChild.innerHTML='武'; + player._mouduan_mark.info.content='拥有技能【激昂】、【谦逊】'; + },player); + player.addAdditionalSkill('mouduan',['jiang','qianxun']); + } + } + }, + tanhu:{ + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return player!=target&&target.countCards('h'); + }, + filter:function(event,player){ + return player.countCards('h')>0; + }, + content:function(){ + 'step 0' + player.chooseToCompare(target); + 'step 1' + if(result.bool){ + target.addTempSkill('tanhu2'); + } + }, + ai:{ + result:{ + target:function(player,target){ + var hs=player.getCards('h'); + if(hs.length<3) return 0; + var bool=false; + for(var i=0;i=9&&get.value(hs[i])<7){ + bool=true; + break; + } + } + if(!bool) return 0; + return -1; + } + }, + order:9, + }, + group:'tanhu3' + }, + tanhu2:{ + mark:true, + intro:{ + content:'已成为探虎目标' + } + }, + tanhu3:{ + mod:{ + globalFrom:function(from,to){ + if(to.hasSkill('tanhu2')) return -Infinity; + }, + wuxieRespondable:function(card,player,target){ + if(target.hasSkill('tanhu2')) return false; + } + } + }, jiaozi:{ trigger:{player:'damageBegin',source:'damageBegin'}, forced:true, filter:function(event,player){ return player.isMaxHandcard(true); }, - content:function(){ - trigger.num++; - } + content:function(){ + trigger.num++; + } }, - jiqiao:{ - trigger:{player:'phaseUseBegin'}, - direct:true, - filter:function(event,player){ - return player.countCards('he',{type:'equip'})>0; - }, - content:function(){ - 'step 0' - player.chooseToDiscard(get.prompt('jiqiao'),[1,player.countCards('he',{type:'equip'})],'he',function(card){ - return get.type(card)=='equip'; - }).set('ai',function(card){ - if(card.name=='bagua') return 10; - return 7-get.value(card); - }); - 'step 1' - if(result.bool){ - player.logSkill('jiqiao'); - event.cards=get.cards(3*result.cards.length); - player.showCards(event.cards); - } - else{ - event.finish(); - } - 'step 2' - var gained=[]; - for(var i=0;i=2&&he<=3){ - return '弃牌'; - } - if(player.maxHp-player.hp>=3&&he<=5){ - return '弃牌'; - } - if(player.maxHp-player.hp>3){ - return '弃牌'; - } - return '出杀'; - } - return '出杀'; - }).set('prompt','弃置'+get.translation(trigger.player)+get.cnNumber(player.maxHp-player.hp)+'张牌,或对任意一名角色使用一张杀'); - 'step 1' - if(result.control=='弃牌'){ - player.line(trigger.player,'green'); - if(player.hp1) return false; - if(!event.target) return false; - if(event.target.hp>=player.hp) return false; + jiqiao:{ + trigger:{player:'phaseUseBegin'}, + direct:true, + filter:function(event,player){ + return player.countCards('he',{type:'equip'})>0; + }, + content:function(){ + 'step 0' + player.chooseToDiscard(get.prompt('jiqiao'),[1,player.countCards('he',{type:'equip'})],'he',function(card){ + return get.type(card)=='equip'; + }).set('ai',function(card){ + if(card.name=='bagua') return 10; + return 7-get.value(card); + }); + 'step 1' + if(result.bool){ + player.logSkill('jiqiao'); + event.cards=get.cards(3*result.cards.length); + player.showCards(event.cards); + } + else{ + event.finish(); + } + 'step 2' + var gained=[]; + for(var i=0;i=2&&he<=3){ + return '弃牌'; + } + if(player.maxHp-player.hp>=3&&he<=5){ + return '弃牌'; + } + if(player.maxHp-player.hp>3){ + return '弃牌'; + } + return '出杀'; + } + return '出杀'; + }).set('prompt','弃置'+get.translation(trigger.player)+get.cnNumber(player.maxHp-player.hp)+'张牌,或对任意一名角色使用一张杀'); + 'step 1' + if(result.control=='弃牌'){ + player.line(trigger.player,'green'); + if(player.hp1) return false; + if(!event.target) return false; + if(event.target.hp>=player.hp) return false; - var card=event.card; - if(card.name=='sha') return true; - if(get.color(card)=='black'&&get.type(card)=='trick') return true; - return false; - }, - content:function(){ - "step 0" - var save=false; - if(get.attitude(player,trigger.target)>2){ - if(trigger.card.name=='sha'){ - if(player.countCards('h','shan')||player.getEquip(2)|| - trigger.target.hp==1||player.hp>trigger.target.hp+1){ - if(!trigger.target.countCards('h','shan')||trigger.target.countCards('h')0; - }, - content:function(){ - 'step 0' - player.chooseToCompare(target).set('preserve','win'); - 'step 1' - if(result.bool&&result.target){ - event.type=true; - event.card=result.target; - player.chooseTarget('将'+get.translation(result.target)+'交给一名角色',function(card,player,target){ - return target.hp<=player.hp; - }).set('ai',function(target){ - var att=get.attitude(_status.event.player,target); - if(_status.event.du) return -att; - return att; - }).set('du',event.card.name=='du'); - target.addTempSkill('dahe2'); - } - else{ - event.type=false; - if(player.countCards('h')){ - player.showHandcards(); - player.chooseToDiscard('h',true); - } - } - 'step 2' - if(event.type){ - if(result.bool){ - player.line(result.targets,'green'); - result.targets[0].gain(event.card,'gain2'); - } - } - }, - ai:{ - result:{ - target:function(player,target){ - var hs=player.getCards('h'); - if(hs.length<3) return 0; - var bool=false; - for(var i=0;i=9&&get.value(hs[i])<7){ - bool=true; - break; - } - } - if(!bool) return 0; - if(player.canUse('sha',target)&&(player.countCards('h','sha'))){ - return -2; - } - return -0.5; - } - }, - order:9, - } - }, - dahe2:{ - mark:true, - intro:{ - content:'非红桃闪无效' - }, - mod:{ - cardRespondable:function(card,player){ - if(card.name=='shan'&&get.suit(card)!='heart') return false; - }, - } - }, - xunzhi:{ - trigger:{player:'phaseBegin'}, - init:function(player){ - player.storage.xunzhi=0; - }, - filter:function(event,player){ - var previous=player.getPrevious(); - var next=player.getNext(); - if(previous&&next){ - return player.hp!=previous.hp&&player.hp!=next.hp; - } - return false; - }, - check:function(event,player){ - return player.hp>=3&&player.countCards('h')>player.hp+1+player.storage.xunzhi; - }, - content:function(){ - player.loseHp(); - player.storage.xunzhi+=2; - }, - mark:true, - intro:{ - content:function(storage,player){ - return '手牌上限+'+player.storage.xunzhi; - } - }, - mod:{ - maxHandcard:function(player,num){ - if(typeof player.storage.xunzhi=='number'){ - return num+player.storage.xunzhi; - } - } - } - }, - yawang:{ - trigger:{player:'phaseDrawBefore'}, - forced:true, - check:function(event,player){ - var num=game.countPlayer(function(target){ - return target.hp==player.hp; - }); - if(!player.hasSkill('xunzhi2')){ - var nh=player.countCards('h'); - if(nh>5) return false; - if(num==3&&nh>3) return false; - } - return num>=3; - }, - content:function(){ - trigger.cancel(); - var num=game.countPlayer(function(target){ - return target.hp==player.hp; - }); - if(num){ - player.draw(num); - } - player.storage.yawang=num; - player.addTempSkill('yawang2'); - } - }, - yawang2:{ - mod:{ - cardEnabled:function(card,player){ - if(_status.currentPhase!=player) return; - if(player.countUsed()>=player.storage.yawang) return false; - } - } - }, - junwei:{ - trigger:{player:'phaseEnd'}, - direct:true, - filter:function(event,player){ - return player.storage.yinling&&player.storage.yinling.length>=3; - }, - content:function(){ - 'step 0' - if(player.storage.yinling.length>3){ - player.chooseButton(3,[get.prompt('junwei'),'hidden',player.storage.yinling]).set('ai',function(button){ - return 1; - }); - } - else{ - player.chooseBool().set('createDialog',[get.prompt('junwei'),'hidden',player.storage.yinling]).set('dialogselectx',true); - event.cards=player.storage.yinling.slice(0); - } - 'step 1' - if(result.bool){ - var cards=event.cards||result.links; - for(var i=0;i1) return 1; - if(_status.event.player.hp>=3) return 0; - return 1; - }).set('nshan',nshan); - } - } - else{ - event.finish(); - } - 'step 3' - if(!event.directfalse&&result.bool) game.delay(); - ui.clear(); - 'step 4' - if(!event.directfalse&&result.bool){ - event.cards=result.cards; - event.target.$throw(result.cards); - player.chooseTarget('将闪交给一名角色',true,function(card,player,target){ - return target!=_status.event.getParent().target; - }).set('ai',function(target){ - return get.attitude(_status.event.player,target)/(target.countCards('h','shan')+1); - }); - } - else{ - event.target.loseHp(); - delete event.cards; - } - 'step 5' - if(event.cards){ - player.line(result.targets,'green'); - result.targets[0].gain(event.cards,'gain2'); - game.log(player,'将',event.cards,'交给',result.targets[0]); - event.finish(); - } - else{ - if(event.target.countCards('e')){ - player.choosePlayerCard('e','将'+get.translation(event.target)+'的一张装备牌移出游戏',true,event.target); - } - else{ - event.finish(); - } - } - 'step 6' - if(result.bool){ - var card=result.links[0]; - if(event.target.storage.junwei2){ - event.target.storage.junwei2.push(card); - event.target.markSkill('junwei2'); - } - else{ - event.target.storage.junwei2=[card]; - } - event.target.lose(card,ui.special); - event.target.addSkill('junwei2'); - event.target.syncStorage('junwei2'); - } - } - }, - junwei2:{ - mark:true, - intro:{ - content:'cards' - }, - trigger:{player:'phaseEnd'}, - forced:true, - content:function(){ - 'step 0' - if(player.storage.junwei2.length){ - var card=player.storage.junwei2.shift(); - player.equip(card); - event.redo(); - } - 'step 1' - player.removeSkill('junwei2'); - delete player.storage.junwei2; - } - }, - yinling:{ - enable:'phaseUse', - filterCard:{color:'black'}, - position:'he', - intro:{ - content:'cards', - onunmark:'throw' - }, - filter:function(event,player){ - return player.countCards('he',{color:'black'})>0&&player.storage.yinling.length<4; - }, - filterTarget:function(card,player,target){ - return target.countCards('he')>0&&target!=player; - }, - init:function(player){ - player.storage.yinling=[]; - }, - check:function(card){ - return 6-get.value(card); - }, - content:function(){ - 'step 0' - player.choosePlayerCard('hej',target,true); - 'step 1' - if(result.bool&&result.links&&result.links.length){ - target.$give(result.links,player); - target.lose(result.links,ui.special); - player.storage.yinling.push(result.links[0]); - player.markSkill('yinling'); - player.syncStorage('yinling'); - } - }, - ai:{ - order:10.1, - expose:0.1, - result:{ - target:function(player,target){ - if(target.hasSkill('tuntian')) return 0; - var es=target.getCards('e'); - var nh=target.countCards('h'); - var noe=(es.length==0||target.hasSkillTag('noe')); - var noe2=(es.length==1&&es[0].name=='baiyin'&&target.hp=0){ - return -1.5; - } - return 2; - } - return -1.5; - }, - }, - } - }, - yanxiao:{ - enable:'phaseUse', - filterCard:{suit:'diamond'}, - filterTarget:true, - check:function(card){ - return 7-get.value(card); - }, - position:'he', - filter:function(event,player){ - return player.countCards('he',{suit:'diamond'})>0; - }, - discard:false, - prepare:'give', - content:function(){ - if(target.hasSkill('yanxiao2')&&target.storage.yanxiao2){ - target.storage.yanxiao2.push(cards[0]); - target.syncStorage('yanxiao2'); - target.markSkill('yanxiao2'); - } - else{ - target.storage.yanxiao2=cards.slice(0); - target.syncStorage('yanxiao2'); - target.addSkill('yanxiao2'); - } - }, - ai:{ - order:8, - result:{ - target:function(player,target){ - if(target.storage.yanxiao2&&target.storage.yanxiao2.length) return 0; - if(target.countCards('j')) return 1; - return 0; - } - } - } - }, - yanxiao2:{ - mark:true, - intro:{ - content:'cards' - }, - trigger:{player:'phaseJudgeBegin'}, - forced:true, - content:function(){ - var cards=player.storage.yanxiao2.concat(player.getCards('j')); - player.gain(cards,'gain2','log'); - delete player.storage.yanxiao2; - player.removeSkill('yanxiao2'); - }, - ai:{ - effect:{ - target:function(card){ - if(get.type(card)=='delay') return [0,0.1]; - } - } - } - }, - anxian:{ - group:['anxian_source','anxian_target'], - subSkill:{ - source:{ - trigger:{source:'damageBefore'}, - filter:function(event,player){ - return event.card&&event.card.name=='sha'; - }, - check:function(event,player){ - if(get.damageEffect(event.player,player,player)<=0) return true; - return false; - }, - content:function(){ - 'step 0' - if(trigger.player.countCards('h')){ - trigger.player.chooseToDiscard(true); - } - 'step 1' - player.draw(); - trigger.cancel(); - } - }, - target:{ - trigger:{target:'shaBefore'}, - direct:true, - filter:function(event,player){ - return player.countCards('h'); - }, - content:function(){ - "step 0" - var next=player.chooseToDiscard(get.prompt('anxian')); - next.set('ai',function(card){ - var player=_status.event.player; - var trigger=_status.event.getTrigger(); - if(get.attitude(player,trigger.player)>0){ - return 9-get.value(card); - } - if(player.countCards('h',{name:'shan'})) return -1; - return 7-get.value(card); - }); - next.logSkill='anxian'; - "step 1" - if(result.bool){ - trigger.player.draw(); - trigger.cancel(); - } - }, - } - } - }, - luoyan_tianxiang:{ - inherit:'tianxiang', - filter:function(event,player){ - if(!player.storage.xingwu||!player.storage.xingwu.length) return false; - if(player.hasSkill('tianxiang')) return false; - return lib.skill.tianxiang.filter(event,player); - }, - }, - luoyan_liuli:{ - inherit:'liuli', - filter:function(event,player){ - if(!player.storage.xingwu||!player.storage.xingwu.length) return false; - if(player.hasSkill('liuli')) return false; - return lib.skill.liuli.filter(event,player); - }, - }, - luoyan:{ - group:['luoyan_tianxiang','luoyan_liuli'], - }, - xingwu:{ - audio:2, - group:['xingwu_color','xingwu_color2'], - subSkill:{ - color:{ - trigger:{player:'phaseBegin'}, - silent:true, - content:function(){ - player.storage.xingwu_color=['black','red']; - } - }, - color2:{ - trigger:{player:'useCard'}, - silent:true, - filter:function(event,player){ - return Array.isArray(player.storage.xingwu_color)&&_status.currentPhase==player; - }, - content:function(){ - player.storage.xingwu_color.remove(get.color(trigger.card)); - } - } - }, - trigger:{player:'phaseDiscardBegin'}, - direct:true, - filter:function(event,player){ - if(!player.storage.xingwu_color) return false; - var length=player.storage.xingwu_color.length; - if(length==0) return false; - var hs=player.getCards('h'); - if(hs.length==0) return false; - if(length==2) return true; - var color=player.storage.xingwu_color[0]; - for(var i=0;i0&& - get.attitude(player,current)<0) - })) return 0; - } - return 7-get.value(card); - }); - 'step 1' - if(result.bool){ - player.logSkill('xingwu'); - if(player.storage.xingwu.length<2){ - player.$give(result.cards,player); - } - player.lose(result.cards,ui.special); - player.storage.xingwu=player.storage.xingwu.concat(result.cards); - player.markSkill('xingwu'); - player.syncStorage('xingwu'); - } - else{ - event.finish(); - } - 'step 2' - if(player.storage.xingwu.length==3){ - player.$throw(player.storage.xingwu); - while(player.storage.xingwu.length){ - player.storage.xingwu.shift().discard(); - } - player.unmarkSkill('xingwu'); - player.chooseTarget(function(card,player,target){ - return target!=player&&target.sex=='male'; - },'对一名男性角色造成两点伤害并弃置其装备区内的牌').set('ai',function(target){ - var player=_status.event.player; - if(get.attitude(player,target)>0) return -1; - return get.damageEffect(target,player,player)+target.countCards('e')/2; - }); - } - else{ - event.finish(); - } - 'step 3' - if(result.bool){ - var target=result.targets[0]; - target.damage(2); - event.target=target; - player.line(target,'green'); - } - else{ - event.finish(); - } - 'step 4' - if(event.target&&event.target.isAlive()){ - var es=event.target.getCards('e'); - if(es.length){ - event.target.discard(es); - } - } - }, - ai:{ - threaten:1.5 - } - }, - yinbing:{ - trigger:{player:'phaseEnd'}, - direct:true, - audio:2, - init:function(player){ - player.storage.yinbing=[]; - }, - filter:function(event,player){ - return player.countCards('he',{type:'basic'})0&& - (event.card.name=='sha'||event.card.name=='juedou'); - }, - content:function(){ - 'step 0' - player.chooseCardButton('移去一张引兵牌',true,player.storage.yinbing); - 'step 1' - var card=result.links[0]; - player.storage.yinbing.remove(card); - card.discard(); - player.$throw(card); - game.log(player,'将',card,'置入弃牌堆'); - player.syncStorage('yinbing'); - if(player.storage.yinbing.length==0){ - player.unmarkSkill('yinbing'); - } - } - } - }, - group:'yinbing_discard' - }, - juedi:{ - trigger:{player:'phaseBegin'}, - filter:function(event,player){ - return player.storage.yinbing&&player.storage.yinbing.length>0; - }, - forced:true, - audio:2, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('juedi'),true,function(card,player,target){ - return player.hp>=target.hp; - }).set('ai',function(target){ - var player=_status.event.player; - var att=get.attitude(player,target); - if(att<2) return att-10; - var num=att/10; - if(target==player){ - num+=player.maxHp-player.countCards('h')+0.5; - } - else{ - num+=_status.event.n2*2; - if(target.isDamaged()){ - if(target.hp==1){ - num+=3; - } - else if(target.hp==2){ - num+=2; - } - else{ - num+=0.5; - } - } - } - if(target.hasJudge('lebu')){ - num/=2; - } - return num; - }).set('n2',player.storage.yinbing.length); - 'step 1' - if(result.bool){ - player.line(result.targets[0],'green'); - if(result.targets[0]==player){ - player.$throw(player.storage.yinbing,1000); - var num=player.maxHp-player.countCards('h'); - if(num>0) player.draw(num); - while(player.storage.yinbing.length){ - player.storage.yinbing.shift().discard(); - } - player.syncStorage('yinbing'); - player.unmarkSkill('yinbing'); - } - else{ - var target=result.targets[0]; - target.recover(); - target.gain(player.storage.yinbing.slice(0),'gain2','log'); - target.draw(player.storage.yinbing.length); - player.storage.yinbing.length=0; - } - player.syncStorage('yinbing'); - player.unmarkSkill('yinbing'); - } - } - }, - meibu:{ - trigger:{global:'phaseUseBegin'}, - filter:function(event,player){ - return event.player!=player&&get.distance(event.player,player,'attack')>1; - }, - logTarget:'player', - check:function(event,player){ - if(get.attitude(player,event.player)>=0) return false; - var e2=player.getEquip(2); - if(e2){ - if(e2.name=='tengjia') return true; - if(e2.name=='bagua') return true; - } - return player.countCards('h','shan')>0; - }, - content:function(){ - var target=trigger.player; - target.addTempSkill('meibu_viewas'); - target.addTempSkill('meibu_range'); - target.storage.meibu=player; - target.markSkillCharacter('meibu',player,'魅步','锦囊牌均视为杀且'+get.translation(player)+'视为在攻击范围内'); - }, - ai:{ - expose:0.2 - }, - subSkill:{ - range:{ - mod:{ - targetInRange:function(card,player,target){ - if(card.name=='sha'&&target==player.storage.meibu){ - return true; - } - } - }, - onremove:function(player){ - game.broadcast(function(player){ - if(player.marks.meibu){ - player.marks.meibu.delete(); - delete player.marks.meibu; - } - },player); - if(player.marks.meibu){ - player.marks.meibu.delete(); - delete player.marks.meibu; - game.addVideo('unmark',player,'meibu'); - } - }, - trigger:{player:'useCard'}, - forced:true, - popup:false, - filter:function(event,player){ - return event.skill=='meibu_viewas' - }, - content:function(){ - player.removeSkill('meibu_viewas'); - game.broadcastAll(function(player){ - if(player.marks.meibu&&player.marks.meibu.info){ - player.marks.meibu.info.content=player.marks.meibu.info.content.slice(8); - } - },player); - } - }, - viewas:{ - mod:{ - cardEnabled:function(card,player){ - if(card.name!='sha'&&get.type(card,'trick')=='trick') return false; - }, - cardUsable:function(card,player){ - if(card.name!='sha'&&get.type(card,'trick')=='trick') return false; - }, - cardRespondable:function(card,player){ - if(card.name!='sha'&&get.type(card,'trick')=='trick') return false; - }, - cardSavable:function(card,player){ - if(card.name!='sha'&&get.type(card,'trick')=='trick') return false; - }, - }, - enable:['chooseToUse','chooseToRespond'], - filterCard:function(card){ - return get.type(card,'trick')=='trick'; - }, - viewAs:{name:'sha'}, - check:function(){return 1}, - ai:{ - effect:{ - target:function(card,player,target,current){ - if(get.tag(card,'respondSha')&¤t<0) return 0.8 - } - }, - respondSha:true, - order:4, - useful:-1, - value:-1 - } - } - } - }, - mumu:{ - enable:'phaseUse', - usable:1, - filterCard:function(card,player,target){ - return card.name=='sha'||(get.type(card,'trick')=='trick'&&get.color(card)=='black'); - }, - check:function(card){ - return 7-get.value(card); - }, - filterTarget:function(card,player,target){ - if(target==player) return false; - return target.getEquip(1)||target.getEquip(2); - }, - content:function(){ - 'step 0' - var e1=target.getEquip(1); - var e2=target.getEquip(2); - event.e1=e1; - event.e2=e2; - if(e1&&e2){ - player.chooseControl('武器牌','防具牌').set('ai',function(){ - if(_status.event.player.getEquip(2)){ - return '武器牌'; - } - return '防具牌'; - }); - } - else if(e1){ - event.choice='武器牌'; - } - else{ - event.choice='防具牌'; - } - 'step 1' - var choice=event.choice||result.control; - if(choice=='武器牌'){ - if(event.e1){ - target.discard(event.e1); - } - player.draw(); - } - else{ - if(event.e2){ - player.equip(event.e2); - target.$give(event.e2,player); - } - } - }, - ai:{ - order:8, - result:{ - target:function(player,target){ - if(target.getEquip(2)&&!player.getEquip(2)){ - return -2; - } - return -1; - } - } - } - }, - fentian:{ - audio:2, - trigger:{player:'phaseEnd'}, - direct:true, - filter:function(event,player){ - if(player.countCards('h')>=player.hp) return false; - return game.hasPlayer(function(current){ - return player!=current&&get.distance(player,current,'attack')<=1&¤t.countCards('he'); - }); - }, - intro:{ - content:'cards', - }, - init:function(player){ - player.storage.fentian=[]; - }, - content:function(){ - 'step 0' - player.chooseTarget('焚天:选择一名攻击范围内的角色,将其一张牌置于你的武将牌上',true,function(card,player,target){ - return player!=target&&get.distance(player,target,'attack')<=1&&target.countCards('he')>0; - }).set('ai',function(target){ - return -get.attitude(_status.event.player,target) - }); - 'step 1' - if(result.bool){ - player.logSkill('fentian',result.targets); - event.target=result.targets[0]; - player.choosePlayerCard(result.targets[0],'he',true); - } - else{ - event.finish(); - } - 'step 2' - if(result.bool){ - event.target.$give(result.links,player); - event.target.lose(result.links,ui.special); - player.storage.fentian=player.storage.fentian.concat(result.links); - player.syncStorage('fentian'); - setTimeout(function(){ - player.markSkill('fentian'); - },700); - } - }, - mod:{ - attackFrom:function(from,to,distance){ - return distance-from.storage.fentian.length; - } - } - }, - zhiri:{ - trigger:{player:'phaseBegin'}, - forced:true, - unique:true, - audio:2, - skillAnimation:true, - animationColor:'fire', - derivation:'xintan', - filter:function(event,player){ - return player.storage.fentian&&player.storage.fentian.length>=3&&!player.storage.zhiri; - }, - content:function(){ - player.loseMaxHp(); - player.addSkill('xintan'); - player.storage.zhiri=true; - player.awakenSkill('zhiri'); - } - }, - xintan:{ - enable:'phaseUse', - usable:1, - audio:2, - unique:true, - filter:function(event,player){ - return player.storage.fentian&&player.storage.fentian.length>=2; - }, - filterTarget:true, - prompt:'移去两张“焚”并令一名角色失去一点体力', - content:function(){ - 'step 0' - player.chooseCardButton(2,'移去两张“焚”并令'+get.translation(target)+'失去一点体力',player.storage.fentian,true); - 'step 1' - if(result.bool){ - player.$throw(result.links); - for(var i=0;iplayer.hp; - }, - content:function(){ - player.storage.danji=true; - player.loseMaxHp(); - player.addSkill('mashu'); - player.addSkill('nuzhan'); - player.awakenSkill('danji'); - } - }, - nuzhan:{ - trigger:{player:'useCard'}, - filter:function(event,player){ - return event.card&&event.card.name=='sha'&&event.cards&& - event.cards.length==1&&get.type(event.cards[0],'trick')=='trick'; - }, - forced:true, - content:function(){ - if(player.stat[player.stat.length-1].card.sha>0){ - player.stat[player.stat.length-1].card.sha--; - } - }, - group:'nuzhan2' - }, - nuzhan2:{ - trigger:{source:'damageBegin'}, - forced:true, - filter:function(event,player){ - return event.card&&event.card.name=='sha'&&event.cards&& - event.cards.length==1&&get.type(event.cards[0])=='equip'; - }, - content:function(){ - trigger.num++; - } - }, - tunchu:{ - audio:2, - trigger:{player:'phaseDrawBegin'}, - check:function(event,player){ - if(player.storage.tunchu&&player.storage.tunchu.length) return false; - return player.countCards('h')-player.countCards('h',{type:'equip'})<=player.hp; - }, - content:function(){ - trigger.num+=2; - player.addTempSkill('tunchu_choose','phaseDrawAfter'); - }, - init:function(player){ - player.storage.tunchu=[]; - }, - intro:{ - content:'cards' - }, - group:'tunchu_disable', - subSkill:{ - choose:{ - trigger:{player:'phaseDrawEnd'}, - forced:true, - popup:false, - content:function(){ - 'step 0' - player.removeSkill('tunchu_choose'); - var nh=player.countCards('h'); - if(nh){ - player.chooseCard('h',[1,nh],true,'将任意张手牌置于你的武将牌上').set('ai',function(card){ - if(ui.selected.cards.length>=3) return -get.value(card); - return 6-get.value(card); - }); - } - else{ - event.finish(); - } - 'step 1' - player.lose(result.cards,ui.special); - player.storage.tunchu.addArray(result.cards); - player.markSkill('tunchu'); - player.syncStorage('tunchu'); - } - }, - disable:{ - mod:{ - cardEnabled:function(card,player){ - if(player.storage.tunchu&&player.storage.tunchu.length&&card.name=='sha'){ - return false; - } - }, - cardUsable:function(card,player){ - if(player.storage.tunchu&&player.storage.tunchu.length&&card.name=='sha'){ - return false; - } - }, - } - } - } - }, - shuliang:{ - audio:2, - trigger:{global:'phaseEnd'}, - direct:true, - filter:function(event,player){ - return player.storage.tunchu&&player.storage.tunchu.length>0&&event.player.countCards('h')0); - player.chooseCardButton(get.prompt('shuliang',trigger.player),player.storage.tunchu).set('ai',function(){ - if(_status.event.goon) return 1; - return 0; - }).set('goon',goon); - 'step 1' - if(result.bool){ - player.logSkill('shuliang',trigger.player); - player.storage.tunchu.remove(result.links[0]); - player.$throw(result.links); - result.links[0].discard(); - player.syncStorage('tunchu'); - if(player.storage.tunchu.length==0){ - player.unmarkSkill('tunchu'); - } - trigger.player.draw(2); - } - } - }, - jieyuan:{ - group:['jieyuan_more','jieyuan_less'], - subSkill:{ - more:{ - audio:true, - trigger:{source:'damageBegin'}, - direct:true, - filter:function(event,player){ - if(!player.hasSkill('fenxin_nei')){ - if(!player.countCards('h',{color:'black'})) return false; - } - return (event.player.hp>=player.hp||player.hasSkill('fenxin_fan'))&&player!=event.player; - }, - content:function(){ - 'step 0' - var goon=(get.attitude(player,trigger.player)<0); - var next=player.chooseToDiscard(get.prompt('jieyuan',trigger.player)); - if(!player.hasSkill('fenxin_nei')){ - next.set('filterCard',function(card){ - return get.color(card)=='black'; - }); - next.set('prompt2','弃置一张黑色手牌令伤害+1'); - } - else{ - next.set('prompt2','弃置一张手牌令伤害+1'); - } - next.set('ai',function(card){ - if(_status.event.goon){ - return 8-get.value(card); - } - return 0; - }); - next.set('goon',goon); - next.logSkill=['jieyuan_more',trigger.player]; - 'step 1' - if(result.bool){ - trigger.num++; - } - } - }, - less:{ - audio:true, - trigger:{player:'damageBegin'}, - filter:function(event,player){ - if(!player.hasSkill('fenxin_nei')){ - if(!player.countCards('h',{color:'red'})) return false; - } - return event.source&&(event.source.hp>=player.hp||player.hasSkill('fenxin_zhong'))&&player!=event.source; - }, - direct:true, - content:function(){ - "step 0" - var next=player.chooseToDiscard(get.prompt('jieyuan'),{color:'red'}); - if(!player.hasSkill('fenxin_nei')){ - next.set('filterCard',function(card){ - return get.color(card)=='red'; - }); - next.set('prompt2','弃置一张红色手牌令伤害-1'); - } - else{ - next.set('prompt2','弃置一张手牌令伤害-1'); - } - next.set('ai',function(card){ - var player=_status.event.player; - if(player.hp==1||_status.event.getTrigger().num>1){ - return 9-get.value(card); - } - if(player.hp==2){ - return 8-get.value(card); - } - return 7-get.value(card); - }); - next.logSkill='jieyuan_less'; - "step 1" - if(result.bool){ - trigger.num--; - } - } - } - }, - ai:{ - expose:0.2, - threaten:1.5 - } - }, - fenxin:{ - mode:['identity'], - trigger:{global:'dieAfter'}, - filter:function(event,player){ - return ['fan','zhong','nei'].contains(event.player.identity)&&!player.hasSkill('fenxin_'+event.player.identity); - }, - forced:true, - content:function(){ - player.addSkill('fenxin_'+trigger.player.identity); - player.markSkill('fenxin'); - }, - intro:{ - mark:function(dialog,content,player){ - if(player.hasSkill('fenxin_zhong')){ - dialog.addText('你发动“竭缘”减少伤害无体力值限制'); - } - if(player.hasSkill('fenxin_fan')){ - dialog.addText('你发动“竭缘”增加伤害无体力值限制'); - } - if(player.hasSkill('fenxin_nei')){ - dialog.addText('将“竭缘”中的黑色手牌和红色手牌改为一张牌'); - } - } - }, - subSkill:{ - fan:{}, - zhong:{}, - nei:{} - }, - ai:{ - combo:'jieyuan' - } - }, - fenxin_old:{ - mode:['identity'], - trigger:{source:'dieBegin'}, - init:function(player){ - player.storage.fenxin=false; - }, - intro:{ - content:'limited' - }, - skillAnimation:'epic', - audio:2, - mark:true, - filter:function(event,player){ - if(player.storage.fenxin) return false; - return event.player.identity!='zhu'&&player.identity!='zhu'&& - player.identity!='mingzhong'&&event.player.identity!='mingzhong'; - }, - check:function(event,player){ - if(player.identity==event.player.identity) return Math.random()<0.5; - var stat=get.situation(); - switch(player.identity){ - case 'fan': - if(stat<0) return false; - if(stat==0) return Math.random()<0.6; - return true; - case 'zhong': - if(stat>0) return false; - if(stat==0) return Math.random()<0.6; - return true; - case 'nei': - if(event.player.identity=='fan'&&stat<0) return true; - if(event.player.identity=='zhong'&&stat>0) return true; - if(stat==0) return Math.random()<0.7; - return false; - } - }, - prompt:function(event,player){ - return '焚心:是否与'+get.translation(event.player)+'交换身份?'; - }, - content:function(){ - game.broadcastAll(function(player,target,shown){ - var identity=player.identity; - player.identity=target.identity; - if(shown||player==game.me){ - player.setIdentity(); - } - target.identity=identity; - },player,trigger.player,trigger.player.identityShown); - player.line(trigger.player,'green'); - player.storage.fenxin=true; - player.awakenSkill('fenxin_old'); - } - }, - qingyi:{ - group:['qingyi1','qingyi2'] - }, - qingyi1:{ - audio:true, - trigger:{player:'phaseBegin'}, - direct:true, - content:function(){ - "step 0" - player.addSkill('qingyi3'); - var check= player.countCards('h')>2; - player.chooseTarget(get.prompt('qingyi'),function(card,player,target){ - if(player==target) return false; - return player.canUse({name:'sha'},target); - }).ai=function(target){ - if(!check) return 0; - return get.effect(target,{name:'sha'},_status.event.player); - } - "step 1" - if(result.bool){ - player.logSkill('qingyi1',result.targets); - player.useCard({name:'sha'},result.targets[0],false); - player.skip('phaseJudge'); - player.skip('phaseDraw'); - } - player.removeSkill('qingyi3'); - } - }, - qingyi2:{ - audio:true, - trigger:{player:'phaseUseBefore'}, - direct:true, - filter:function(event,player){ - return player.countCards('he',{type:'equip'})>0; - }, - content:function(){ - "step 0" - player.addSkill('qingyi3'); - var check=player.countCards('h')<=player.hp; - player.chooseCardTarget({ - prompt:get.prompt('qingyi'), - filterCard:function(card,player){ - return get.type(card)=='equip'&&lib.filter.cardDiscardable(card,player); - }, - position:'he', - filterTarget:function(card,player,target){ - if(player==target) return false; - return player.canUse({name:'sha'},target); - }, - ai1:function(card){ - if(!_status.event.check) return 0; - return 6-get.value(card); - }, - ai2:function(target){ - if(!_status.event.check) return 0; - return get.effect(target,{name:'sha'},_status.event.player); - }, - check:check - }); - "step 1" - if(result.bool){ - player.logSkill('qingyi2',result.targets); - player.discard(result.cards[0]); - player.useCard({name:'sha'},result.targets[0]); - trigger.cancel(); - } - player.removeSkill('qingyi3'); - } - }, - qingyi3:{ - mod:{ - targetInRange:function(card,player,target,now){ - return true; - } - }, - }, - shixin:{ - audio:2, - trigger:{player:'damageBefore'}, - filter:function(event){ - return event.nature=='fire'; - }, - forced:true, - content:function(){ - trigger.cancel(); - }, - ai:{ - nofire:true, - effect:{ - target:function(card,player,target,current){ - if(get.tag(card,'fireDamage')) return 0; - } - } - } - }, - fenyin:{ - audio:2, - trigger:{player:'useCard'}, - frequent:true, - usable:3, - filter:function(event,player){ - if(!event.cards||event.cards.length!=1) return false; - if(_status.currentPhase!=player) return false; - if(!player.storage.fenyin) return false; - return get.color(player.storage.fenyin)!=get.color(event.cards[0]); - }, - content:function(){ - player.draw(); - }, - intro:{ - content:'card' - }, - group:['fenyin2','fenyin3'] - }, - fenyin3:{ - trigger:{player:'useCard'}, - priority:-1, - silent:true, - filter:function(event,player){ - if(!event.cards||event.cards.length!=1) return false; - if(_status.currentPhase!=player) return false; - return true; - }, - content:function(){ - player.storage.fenyin=trigger.cards[0]; - } - }, - fenyin2:{ - trigger:{player:'phaseBefore'}, - silent:true, - priority:10, - content:function(){ - player.storage.fenyin=null; - } - }, - dujin:{ - audio:2, - trigger:{player:'phaseDrawBegin'}, - frequent:true, - content:function(){ - trigger.num+=1+Math.floor(player.countCards('e')/2); - } - }, - qirang:{ - audio:2, - trigger:{player:'equipEnd'}, - frequent:true, - content:function(){ - player.gain(get.cardPile(function(card){ - return get.type(card,'trick')=='trick'; - }),'gain2'); - }, - ai:{ - effect:{ - target:function(card,player,target,current){ - if(get.type(card)=='equip') return [1,3]; - } - }, - threaten:1.3 - } - }, - yuhua:{ - trigger:{player:'phaseDiscardBegin'}, - forced:true, - audio:2, - filter:function(event,player){ - return event.parent.name=='phaseDiscard'&&player.countCards('h',{type:'basic'})0){ - var att1=get.attitude(target,player); - var att2=get.attitude(target,trigger.player); - var att3=get.attitude(player,target); - if(att3<0) return 0; - return att1/2+att2+att3; - } - else{ - return 0; - // return get.attitude(player,target); - } - }); - 'step 1' - if(result.bool){ - player.addTempSkill('chenqing2',{player:'phaseBegin'}); - event.target=result.targets[0]; - event.target.draw(4); - player.logSkill('chenqing',event.target); - } - else{ - event.finish(); - } - 'step 2' - var target=event.target; - var tosave=trigger.player; - var att=get.attitude(target,tosave); - var hastao=target.countCards('h','tao'); - target.chooseToDiscard(4,true,'he').set('ai',function(card){ - var hastao=_status.event.hastao; - var att=_status.event.att; - if(!hastao&&att>0){ - var suit=get.suit(card); - for(var i=0;i0&&player.countCards('h')>0; - }, - content:function(){ - if(player.storage.mozhi.length&&player.countCards('h')){ - var card=player.storage.mozhi.shift(); - card={name:card.name,nature:card.nature,suit:card.suit,number:card.number}; - if(lib.filter.cardEnabled(card)){ - if(game.hasPlayer(function(current){ - return player.canUse(card,current); - })){ - lib.skill.mozhix.viewAs=card; - var next=player.chooseToUse(); - if(next.isOnline()){ - player.send(function(card){ - lib.skill.mozhix.viewAs=card; - },card) - } - next.logSkill='mozhi'; - next.set('openskilldialog','默识:将一张手牌当'+get.translation(card)+'使用'); - next.set('norestore',true); - next.set('_backupevent','mozhix'); - next.backup('mozhix'); - } - } - event.redo(); - } - }, - group:['mozhi2','mozhi3'] - }, - mozhix:{ - filterCard:true, - selectCard:1, - popname:true, - }, - mozhi2:{ - trigger:{player:'phaseAfter'}, - silent:true, - content:function(){ - player.storage.mozhi.length=0; - player.unmarkSkill('mozhi'); - } - }, - mozhi3:{ - trigger:{player:'useCard'}, - silent:true, - filter:function(event,player){ - if(_status.currentPhase!=player) return false; - if(event.parent.parent.name!='phaseUse') return false; - var type=get.type(event.card); - return player.storage.mozhi.length<2&&(type=='basic'||type=='trick'); - }, - content:function(){ - player.storage.mozhi.add(trigger.card); - if(player.hasSkill('mozhi')) player.markSkill('mozhi'); - } - }, - chenqing2:{}, - ranshang:{ - audio:2, - trigger:{player:'damageEnd'}, - filter:function(event,player){ - return event.nature=='fire'; - }, - init:function(player){ - player.storage.ranshang=0; - }, - forced:true, - check:function(){ - return false; - }, - content:function(){ - if(player.storage.ranshang){ - player.storage.ranshang++; - } - else{ - player.storage.ranshang=1; - } - player.markSkill('ranshang'); - game.addVideo('storage',player,['ranshang',player.storage.ranshang]); - }, - intro:{ - content:'mark' - }, - ai:{ - effect:{ - target:function(card,player,target,current){ - if(card.name=='sha'){ - if(card.nature=='fire'||player.hasSkill('zhuque_skill')) return 2; - } - if(get.tag(card,'fireDamage')&¤t<0) return 2; - } - } - }, - group:'ranshang2' - }, - ranshang2:{ - audio:2, - trigger:{player:'phaseEnd'}, - forced:true, - filter:function(event,player){ - return player.storage.ranshang>0; - }, - content:function(){ - player.loseHp(player.storage.ranshang); - } - }, - hanyong:{ - trigger:{player:'useCard'}, - filter:function(event,player){ - return game.roundNumber>player.hp&&event.card&& - (event.card.name=='nanman'||event.card.name=='wanjian'); - }, - content:function(){ - player.addTempSkill('hanyong3','useCardAfter'); - }, - }, - hanyong3:{ - audio:false, - trigger:{source:'damageBegin'}, - forced:true, - filter:function(event,player){ - return event.card&&(event.card.name=='nanman'||event.card.name=='wanjian')&&event.notLink(); - }, - content:function(){ - trigger.num++; - } - }, - yishe:{ - trigger:{player:'phaseEnd'}, - init:function(player){ - player.storage.yishe=[]; - }, - filter:function(event,player){ - return !player.storage.yishe||!player.storage.yishe.length; - }, - intro:{ - content:'cards' - }, - content:function(){ - 'step 0' - player.draw(2); - player.chooseCard(2,'he',true,'选择两张牌作为“米”'); - 'step 1' - player.storage.yishe=result.cards; - player.lose(result.cards,ui.special); - player.syncStorage('yishe'); - player.markSkill('yishe'); - } - }, - bushi:{ - trigger:{player:'damageEnd',source:'damageEnd'}, - filter:function(event,player){ - if(event._notrigger.contains(event.player)) return false; - return player.storage.yishe&&player.storage.yishe.length&&event.player.isAlive(); - }, - direct:true, - content:function(){ - 'step 0' - trigger.player.chooseCardButton('选择获得一张“米”',player.storage.yishe); - 'step 1' - if(result.bool){ - player.logSkill('bushi'); - trigger.player.gain(result.links[0],'draw2','log'); - player.storage.yishe.remove(result.links[0]); - player.syncStorage('yishe'); - if(player.storage.yishe.length==0){ - player.recover(); - player.unmarkSkill('yishe'); - } - else{ - player.markSkill('yishe'); - } - } - } - }, - midao:{ - unique:true, - trigger:{global:'judge'}, - direct:true, - filter:function(event,player){ - return player.storage.yishe&&player.storage.yishe.length&&event.player.isAlive(); - }, - content:function(){ - "step 0" - var list=player.storage.yishe; - player.chooseButton([get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+get.translation(trigger.player.judging[0])+ - ','+get.prompt('midao'),list,'hidden'],function(button){ - var card=button.link; - var trigger=_status.event.getTrigger(); - var player=_status.event.player; - var judging=_status.event.judging; - var result=trigger.judge(card)-trigger.judge(judging); - var attitude=get.attitude(player,trigger.player); - return result*attitude; - }).set('judging',trigger.player.judging); - "step 1" - if(result.bool){ - player.logSkill('midao',trigger.player); - var card=result.links[0]; - player.storage.yishe.remove(card); - player.syncStorage('yishe'); - if(player.storage.yishe.length==0){ - player.recover(); - player.unmarkSkill('yishe'); - } - else{ - player.markSkill('yishe'); - } + var card=event.card; + if(card.name=='sha') return true; + if(get.color(card)=='black'&&get.type(card)=='trick') return true; + return false; + }, + content:function(){ + "step 0" + var save=false; + if(get.attitude(player,trigger.target)>2){ + if(trigger.card.name=='sha'){ + if(player.countCards('h','shan')||player.getEquip(2)|| + trigger.target.hp==1||player.hp>trigger.target.hp+1){ + if(!trigger.target.countCards('h','shan')||trigger.target.countCards('h')0; + }, + content:function(){ + 'step 0' + player.chooseToCompare(target).set('preserve','win'); + 'step 1' + if(result.bool&&result.target){ + event.type=true; + event.card=result.target; + player.chooseTarget('将'+get.translation(result.target)+'交给一名角色',function(card,player,target){ + return target.hp<=player.hp; + }).set('ai',function(target){ + var att=get.attitude(_status.event.player,target); + if(_status.event.du) return -att; + return att; + }).set('du',event.card.name=='du'); + target.addTempSkill('dahe2'); + } + else{ + event.type=false; + if(player.countCards('h')){ + player.showHandcards(); + player.chooseToDiscard('h',true); + } + } + 'step 2' + if(event.type){ + if(result.bool){ + player.line(result.targets,'green'); + result.targets[0].gain(event.card,'gain2'); + } + } + }, + ai:{ + result:{ + target:function(player,target){ + var hs=player.getCards('h'); + if(hs.length<3) return 0; + var bool=false; + for(var i=0;i=9&&get.value(hs[i])<7){ + bool=true; + break; + } + } + if(!bool) return 0; + if(player.canUse('sha',target)&&(player.countCards('h','sha'))){ + return -2; + } + return -0.5; + } + }, + order:9, + } + }, + dahe2:{ + mark:true, + intro:{ + content:'非红桃闪无效' + }, + mod:{ + cardRespondable:function(card,player){ + if(card.name=='shan'&&get.suit(card)!='heart') return false; + }, + } + }, + xunzhi:{ + trigger:{player:'phaseBegin'}, + init:function(player){ + player.storage.xunzhi=0; + }, + filter:function(event,player){ + var previous=player.getPrevious(); + var next=player.getNext(); + if(previous&&next){ + return player.hp!=previous.hp&&player.hp!=next.hp; + } + return false; + }, + check:function(event,player){ + return player.hp>=3&&player.countCards('h')>player.hp+1+player.storage.xunzhi; + }, + content:function(){ + player.loseHp(); + player.storage.xunzhi+=2; + }, + mark:true, + intro:{ + content:function(storage,player){ + return '手牌上限+'+player.storage.xunzhi; + } + }, + mod:{ + maxHandcard:function(player,num){ + if(typeof player.storage.xunzhi=='number'){ + return num+player.storage.xunzhi; + } + } + } + }, + yawang:{ + trigger:{player:'phaseDrawBefore'}, + forced:true, + check:function(event,player){ + var num=game.countPlayer(function(target){ + return target.hp==player.hp; + }); + if(!player.hasSkill('xunzhi2')){ + var nh=player.countCards('h'); + if(nh>5) return false; + if(num==3&&nh>3) return false; + } + return num>=3; + }, + content:function(){ + trigger.cancel(); + var num=game.countPlayer(function(target){ + return target.hp==player.hp; + }); + if(num){ + player.draw(num); + } + player.storage.yawang=num; + player.addTempSkill('yawang2'); + } + }, + yawang2:{ + mod:{ + cardEnabled:function(card,player){ + if(_status.currentPhase!=player) return; + if(player.countUsed()>=player.storage.yawang) return false; + } + } + }, + junwei:{ + trigger:{player:'phaseEnd'}, + direct:true, + filter:function(event,player){ + return player.storage.yinling&&player.storage.yinling.length>=3; + }, + content:function(){ + 'step 0' + if(player.storage.yinling.length>3){ + player.chooseButton(3,[get.prompt('junwei'),'hidden',player.storage.yinling]).set('ai',function(button){ + return 1; + }); + } + else{ + player.chooseBool().set('createDialog',[get.prompt('junwei'),'hidden',player.storage.yinling]).set('dialogselectx',true); + event.cards=player.storage.yinling.slice(0); + } + 'step 1' + if(result.bool){ + var cards=event.cards||result.links; + for(var i=0;i1) return 1; + if(_status.event.player.hp>=3) return 0; + return 1; + }).set('nshan',nshan); + } + } + else{ + event.finish(); + } + 'step 3' + if(!event.directfalse&&result.bool) game.delay(); + ui.clear(); + 'step 4' + if(!event.directfalse&&result.bool){ + event.cards=result.cards; + event.target.$throw(result.cards); + player.chooseTarget('将闪交给一名角色',true,function(card,player,target){ + return target!=_status.event.getParent().target; + }).set('ai',function(target){ + return get.attitude(_status.event.player,target)/(target.countCards('h','shan')+1); + }); + } + else{ + event.target.loseHp(); + delete event.cards; + } + 'step 5' + if(event.cards){ + player.line(result.targets,'green'); + result.targets[0].gain(event.cards,'gain2'); + game.log(player,'将',event.cards,'交给',result.targets[0]); + event.finish(); + } + else{ + if(event.target.countCards('e')){ + player.choosePlayerCard('e','将'+get.translation(event.target)+'的一张装备牌移出游戏',true,event.target); + } + else{ + event.finish(); + } + } + 'step 6' + if(result.bool){ + var card=result.links[0]; + if(event.target.storage.junwei2){ + event.target.storage.junwei2.push(card); + event.target.markSkill('junwei2'); + } + else{ + event.target.storage.junwei2=[card]; + } + event.target.lose(card,ui.special); + event.target.addSkill('junwei2'); + event.target.syncStorage('junwei2'); + } + } + }, + junwei2:{ + mark:true, + intro:{ + content:'cards' + }, + trigger:{player:'phaseEnd'}, + forced:true, + content:function(){ + 'step 0' + if(player.storage.junwei2.length){ + var card=player.storage.junwei2.shift(); + player.equip(card); + event.redo(); + } + 'step 1' + player.removeSkill('junwei2'); + delete player.storage.junwei2; + } + }, + yinling:{ + enable:'phaseUse', + filterCard:{color:'black'}, + position:'he', + intro:{ + content:'cards', + onunmark:'throw' + }, + filter:function(event,player){ + return player.countCards('he',{color:'black'})>0&&player.storage.yinling.length<4; + }, + filterTarget:function(card,player,target){ + return target.countCards('he')>0&&target!=player; + }, + init:function(player){ + player.storage.yinling=[]; + }, + check:function(card){ + return 6-get.value(card); + }, + content:function(){ + 'step 0' + player.choosePlayerCard('hej',target,true); + 'step 1' + if(result.bool&&result.links&&result.links.length){ + target.$give(result.links,player); + target.lose(result.links,ui.special); + player.storage.yinling.push(result.links[0]); + player.markSkill('yinling'); + player.syncStorage('yinling'); + } + }, + ai:{ + order:10.1, + expose:0.1, + result:{ + target:function(player,target){ + if(target.hasSkill('tuntian')) return 0; + var es=target.getCards('e'); + var nh=target.countCards('h'); + var noe=(es.length==0||target.hasSkillTag('noe')); + var noe2=(es.length==1&&es[0].name=='baiyin'&&target.hp=0){ + return -1.5; + } + return 2; + } + return -1.5; + }, + }, + } + }, + yanxiao:{ + enable:'phaseUse', + filterCard:{suit:'diamond'}, + filterTarget:true, + check:function(card){ + return 7-get.value(card); + }, + position:'he', + filter:function(event,player){ + return player.countCards('he',{suit:'diamond'})>0; + }, + discard:false, + prepare:'give', + content:function(){ + if(target.hasSkill('yanxiao2')&&target.storage.yanxiao2){ + target.storage.yanxiao2.push(cards[0]); + target.syncStorage('yanxiao2'); + target.markSkill('yanxiao2'); + } + else{ + target.storage.yanxiao2=cards.slice(0); + target.syncStorage('yanxiao2'); + target.addSkill('yanxiao2'); + } + }, + ai:{ + order:8, + result:{ + target:function(player,target){ + if(target.storage.yanxiao2&&target.storage.yanxiao2.length) return 0; + if(target.countCards('j')) return 1; + return 0; + } + } + } + }, + yanxiao2:{ + mark:true, + intro:{ + content:'cards' + }, + trigger:{player:'phaseJudgeBegin'}, + forced:true, + content:function(){ + var cards=player.storage.yanxiao2.concat(player.getCards('j')); + player.gain(cards,'gain2','log'); + delete player.storage.yanxiao2; + player.removeSkill('yanxiao2'); + }, + ai:{ + effect:{ + target:function(card){ + if(get.type(card)=='delay') return [0,0.1]; + } + } + } + }, + anxian:{ + group:['anxian_source','anxian_target'], + subSkill:{ + source:{ + trigger:{source:'damageBefore'}, + filter:function(event,player){ + return event.card&&event.card.name=='sha'; + }, + check:function(event,player){ + if(get.damageEffect(event.player,player,player)<=0) return true; + return false; + }, + content:function(){ + 'step 0' + if(trigger.player.countCards('h')){ + trigger.player.chooseToDiscard(true); + } + 'step 1' + player.draw(); + trigger.cancel(); + } + }, + target:{ + trigger:{target:'shaBefore'}, + direct:true, + filter:function(event,player){ + return player.countCards('h'); + }, + content:function(){ + "step 0" + var next=player.chooseToDiscard(get.prompt('anxian')); + next.set('ai',function(card){ + var player=_status.event.player; + var trigger=_status.event.getTrigger(); + if(get.attitude(player,trigger.player)>0){ + return 9-get.value(card); + } + if(player.countCards('h',{name:'shan'})) return -1; + return 7-get.value(card); + }); + next.logSkill='anxian'; + "step 1" + if(result.bool){ + trigger.player.draw(); + trigger.cancel(); + } + }, + } + } + }, + luoyan_tianxiang:{ + inherit:'tianxiang', + filter:function(event,player){ + if(!player.storage.xingwu||!player.storage.xingwu.length) return false; + if(player.hasSkill('tianxiang')) return false; + return lib.skill.tianxiang.filter(event,player); + }, + }, + luoyan_liuli:{ + inherit:'liuli', + filter:function(event,player){ + if(!player.storage.xingwu||!player.storage.xingwu.length) return false; + if(player.hasSkill('liuli')) return false; + return lib.skill.liuli.filter(event,player); + }, + }, + luoyan:{ + group:['luoyan_tianxiang','luoyan_liuli'], + }, + xingwu:{ + audio:2, + group:['xingwu_color','xingwu_color2'], + subSkill:{ + color:{ + trigger:{player:'phaseBegin'}, + silent:true, + content:function(){ + player.storage.xingwu_color=['black','red']; + } + }, + color2:{ + trigger:{player:'useCard'}, + silent:true, + filter:function(event,player){ + return Array.isArray(player.storage.xingwu_color)&&_status.currentPhase==player; + }, + content:function(){ + player.storage.xingwu_color.remove(get.color(trigger.card)); + } + } + }, + trigger:{player:'phaseDiscardBegin'}, + direct:true, + filter:function(event,player){ + if(!player.storage.xingwu_color) return false; + var length=player.storage.xingwu_color.length; + if(length==0) return false; + var hs=player.getCards('h'); + if(hs.length==0) return false; + if(length==2) return true; + var color=player.storage.xingwu_color[0]; + for(var i=0;i0&& + get.attitude(player,current)<0) + })) return 0; + } + return 7-get.value(card); + }); + 'step 1' + if(result.bool){ + player.logSkill('xingwu'); + if(player.storage.xingwu.length<2){ + player.$give(result.cards,player); + } + player.lose(result.cards,ui.special); + player.storage.xingwu=player.storage.xingwu.concat(result.cards); + player.markSkill('xingwu'); + player.syncStorage('xingwu'); + } + else{ + event.finish(); + } + 'step 2' + if(player.storage.xingwu.length==3){ + player.$throw(player.storage.xingwu); + while(player.storage.xingwu.length){ + player.storage.xingwu.shift().discard(); + } + player.unmarkSkill('xingwu'); + player.chooseTarget(function(card,player,target){ + return target!=player&&target.sex=='male'; + },'对一名男性角色造成两点伤害并弃置其装备区内的牌').set('ai',function(target){ + var player=_status.event.player; + if(get.attitude(player,target)>0) return -1; + return get.damageEffect(target,player,player)+target.countCards('e')/2; + }); + } + else{ + event.finish(); + } + 'step 3' + if(result.bool){ + var target=result.targets[0]; + target.damage(2); + event.target=target; + player.line(target,'green'); + } + else{ + event.finish(); + } + 'step 4' + if(event.target&&event.target.isAlive()){ + var es=event.target.getCards('e'); + if(es.length){ + event.target.discard(es); + } + } + }, + ai:{ + threaten:1.5 + } + }, + yinbing:{ + trigger:{player:'phaseEnd'}, + direct:true, + audio:2, + init:function(player){ + player.storage.yinbing=[]; + }, + filter:function(event,player){ + return player.countCards('he',{type:'basic'})0&& + (event.card.name=='sha'||event.card.name=='juedou'); + }, + content:function(){ + 'step 0' + player.chooseCardButton('移去一张引兵牌',true,player.storage.yinbing); + 'step 1' + var card=result.links[0]; + player.storage.yinbing.remove(card); + card.discard(); + player.$throw(card); + game.log(player,'将',card,'置入弃牌堆'); + player.syncStorage('yinbing'); + if(player.storage.yinbing.length==0){ + player.unmarkSkill('yinbing'); + } + } + } + }, + group:'yinbing_discard' + }, + juedi:{ + trigger:{player:'phaseBegin'}, + filter:function(event,player){ + return player.storage.yinbing&&player.storage.yinbing.length>0; + }, + forced:true, + audio:2, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('juedi'),true,function(card,player,target){ + return player.hp>=target.hp; + }).set('ai',function(target){ + var player=_status.event.player; + var att=get.attitude(player,target); + if(att<2) return att-10; + var num=att/10; + if(target==player){ + num+=player.maxHp-player.countCards('h')+0.5; + } + else{ + num+=_status.event.n2*2; + if(target.isDamaged()){ + if(target.hp==1){ + num+=3; + } + else if(target.hp==2){ + num+=2; + } + else{ + num+=0.5; + } + } + } + if(target.hasJudge('lebu')){ + num/=2; + } + return num; + }).set('n2',player.storage.yinbing.length); + 'step 1' + if(result.bool){ + player.line(result.targets[0],'green'); + if(result.targets[0]==player){ + player.$throw(player.storage.yinbing,1000); + var num=player.maxHp-player.countCards('h'); + if(num>0) player.draw(num); + while(player.storage.yinbing.length){ + player.storage.yinbing.shift().discard(); + } + player.syncStorage('yinbing'); + player.unmarkSkill('yinbing'); + } + else{ + var target=result.targets[0]; + target.recover(); + target.gain(player.storage.yinbing.slice(0),'gain2','log'); + target.draw(player.storage.yinbing.length); + player.storage.yinbing.length=0; + } + player.syncStorage('yinbing'); + player.unmarkSkill('yinbing'); + } + } + }, + meibu:{ + trigger:{global:'phaseUseBegin'}, + filter:function(event,player){ + return event.player!=player&&get.distance(event.player,player,'attack')>1; + }, + logTarget:'player', + check:function(event,player){ + if(get.attitude(player,event.player)>=0) return false; + var e2=player.getEquip(2); + if(e2){ + if(e2.name=='tengjia') return true; + if(e2.name=='bagua') return true; + } + return player.countCards('h','shan')>0; + }, + content:function(){ + var target=trigger.player; + target.addTempSkill('meibu_viewas'); + target.addTempSkill('meibu_range'); + target.storage.meibu=player; + target.markSkillCharacter('meibu',player,'魅步','锦囊牌均视为杀且'+get.translation(player)+'视为在攻击范围内'); + }, + ai:{ + expose:0.2 + }, + subSkill:{ + range:{ + mod:{ + targetInRange:function(card,player,target){ + if(card.name=='sha'&&target==player.storage.meibu){ + return true; + } + } + }, + onremove:function(player){ + game.broadcast(function(player){ + if(player.marks.meibu){ + player.marks.meibu.delete(); + delete player.marks.meibu; + } + },player); + if(player.marks.meibu){ + player.marks.meibu.delete(); + delete player.marks.meibu; + game.addVideo('unmark',player,'meibu'); + } + }, + trigger:{player:'useCard'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.skill=='meibu_viewas' + }, + content:function(){ + player.removeSkill('meibu_viewas'); + game.broadcastAll(function(player){ + if(player.marks.meibu&&player.marks.meibu.info){ + player.marks.meibu.info.content=player.marks.meibu.info.content.slice(8); + } + },player); + } + }, + viewas:{ + mod:{ + cardEnabled:function(card,player){ + if(card.name!='sha'&&get.type(card,'trick')=='trick') return false; + }, + cardUsable:function(card,player){ + if(card.name!='sha'&&get.type(card,'trick')=='trick') return false; + }, + cardRespondable:function(card,player){ + if(card.name!='sha'&&get.type(card,'trick')=='trick') return false; + }, + cardSavable:function(card,player){ + if(card.name!='sha'&&get.type(card,'trick')=='trick') return false; + }, + }, + enable:['chooseToUse','chooseToRespond'], + filterCard:function(card){ + return get.type(card,'trick')=='trick'; + }, + viewAs:{name:'sha'}, + check:function(){return 1}, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(get.tag(card,'respondSha')&¤t<0) return 0.8 + } + }, + respondSha:true, + order:4, + useful:-1, + value:-1 + } + } + } + }, + mumu:{ + enable:'phaseUse', + usable:1, + filterCard:function(card,player,target){ + return card.name=='sha'||(get.type(card,'trick')=='trick'&&get.color(card)=='black'); + }, + check:function(card){ + return 7-get.value(card); + }, + filterTarget:function(card,player,target){ + if(target==player) return false; + return target.getEquip(1)||target.getEquip(2); + }, + content:function(){ + 'step 0' + var e1=target.getEquip(1); + var e2=target.getEquip(2); + event.e1=e1; + event.e2=e2; + if(e1&&e2){ + player.chooseControl('武器牌','防具牌').set('ai',function(){ + if(_status.event.player.getEquip(2)){ + return '武器牌'; + } + return '防具牌'; + }); + } + else if(e1){ + event.choice='武器牌'; + } + else{ + event.choice='防具牌'; + } + 'step 1' + var choice=event.choice||result.control; + if(choice=='武器牌'){ + if(event.e1){ + target.discard(event.e1); + } + player.draw(); + } + else{ + if(event.e2){ + player.equip(event.e2); + target.$give(event.e2,player); + } + } + }, + ai:{ + order:8, + result:{ + target:function(player,target){ + if(target.getEquip(2)&&!player.getEquip(2)){ + return -2; + } + return -1; + } + } + } + }, + fentian:{ + audio:2, + trigger:{player:'phaseEnd'}, + direct:true, + filter:function(event,player){ + if(player.countCards('h')>=player.hp) return false; + return game.hasPlayer(function(current){ + return player!=current&&get.distance(player,current,'attack')<=1&¤t.countCards('he'); + }); + }, + intro:{ + content:'cards', + }, + init:function(player){ + player.storage.fentian=[]; + }, + content:function(){ + 'step 0' + player.chooseTarget('焚天:选择一名攻击范围内的角色,将其一张牌置于你的武将牌上',true,function(card,player,target){ + return player!=target&&get.distance(player,target,'attack')<=1&&target.countCards('he')>0; + }).set('ai',function(target){ + return -get.attitude(_status.event.player,target) + }); + 'step 1' + if(result.bool){ + player.logSkill('fentian',result.targets); + event.target=result.targets[0]; + player.choosePlayerCard(result.targets[0],'he',true); + } + else{ + event.finish(); + } + 'step 2' + if(result.bool){ + event.target.$give(result.links,player); + event.target.lose(result.links,ui.special); + player.storage.fentian=player.storage.fentian.concat(result.links); + player.syncStorage('fentian'); + setTimeout(function(){ + player.markSkill('fentian'); + },700); + } + }, + mod:{ + attackFrom:function(from,to,distance){ + return distance-from.storage.fentian.length; + } + } + }, + zhiri:{ + trigger:{player:'phaseBegin'}, + forced:true, + unique:true, + audio:2, + skillAnimation:true, + animationColor:'fire', + derivation:'xintan', + filter:function(event,player){ + return player.storage.fentian&&player.storage.fentian.length>=3&&!player.storage.zhiri; + }, + content:function(){ + player.loseMaxHp(); + player.addSkill('xintan'); + player.storage.zhiri=true; + player.awakenSkill('zhiri'); + } + }, + xintan:{ + enable:'phaseUse', + usable:1, + audio:2, + unique:true, + filter:function(event,player){ + return player.storage.fentian&&player.storage.fentian.length>=2; + }, + filterTarget:true, + prompt:'移去两张“焚”并令一名角色失去一点体力', + content:function(){ + 'step 0' + player.chooseCardButton(2,'移去两张“焚”并令'+get.translation(target)+'失去一点体力',player.storage.fentian,true); + 'step 1' + if(result.bool){ + player.$throw(result.links); + for(var i=0;iplayer.hp; + }, + content:function(){ + player.storage.danji=true; + player.loseMaxHp(); + player.addSkill('mashu'); + player.addSkill('nuzhan'); + player.awakenSkill('danji'); + } + }, + nuzhan:{ + trigger:{player:'useCard'}, + filter:function(event,player){ + return event.card&&event.card.name=='sha'&&event.cards&& + event.cards.length==1&&get.type(event.cards[0],'trick')=='trick'; + }, + forced:true, + content:function(){ + if(player.stat[player.stat.length-1].card.sha>0){ + player.stat[player.stat.length-1].card.sha--; + } + }, + group:'nuzhan2' + }, + nuzhan2:{ + trigger:{source:'damageBegin'}, + forced:true, + filter:function(event,player){ + return event.card&&event.card.name=='sha'&&event.cards&& + event.cards.length==1&&get.type(event.cards[0])=='equip'; + }, + content:function(){ + trigger.num++; + } + }, + tunchu:{ + audio:2, + trigger:{player:'phaseDrawBegin'}, + check:function(event,player){ + if(player.storage.tunchu&&player.storage.tunchu.length) return false; + return player.countCards('h')-player.countCards('h',{type:'equip'})<=player.hp; + }, + content:function(){ + trigger.num+=2; + player.addTempSkill('tunchu_choose','phaseDrawAfter'); + }, + init:function(player){ + player.storage.tunchu=[]; + }, + intro:{ + content:'cards' + }, + group:'tunchu_disable', + subSkill:{ + choose:{ + trigger:{player:'phaseDrawEnd'}, + forced:true, + popup:false, + content:function(){ + 'step 0' + player.removeSkill('tunchu_choose'); + var nh=player.countCards('h'); + if(nh){ + player.chooseCard('h',[1,nh],true,'将任意张手牌置于你的武将牌上').set('ai',function(card){ + if(ui.selected.cards.length>=3) return -get.value(card); + return 6-get.value(card); + }); + } + else{ + event.finish(); + } + 'step 1' + player.lose(result.cards,ui.special); + player.storage.tunchu.addArray(result.cards); + player.markSkill('tunchu'); + player.syncStorage('tunchu'); + } + }, + disable:{ + mod:{ + cardEnabled:function(card,player){ + if(player.storage.tunchu&&player.storage.tunchu.length&&card.name=='sha'){ + return false; + } + }, + cardUsable:function(card,player){ + if(player.storage.tunchu&&player.storage.tunchu.length&&card.name=='sha'){ + return false; + } + }, + } + } + } + }, + shuliang:{ + audio:2, + trigger:{global:'phaseEnd'}, + direct:true, + filter:function(event,player){ + return player.storage.tunchu&&player.storage.tunchu.length>0&&event.player.countCards('h')0); + player.chooseCardButton(get.prompt('shuliang',trigger.player),player.storage.tunchu).set('ai',function(){ + if(_status.event.goon) return 1; + return 0; + }).set('goon',goon); + 'step 1' + if(result.bool){ + player.logSkill('shuliang',trigger.player); + player.storage.tunchu.remove(result.links[0]); + player.$throw(result.links); + result.links[0].discard(); + player.syncStorage('tunchu'); + if(player.storage.tunchu.length==0){ + player.unmarkSkill('tunchu'); + } + trigger.player.draw(2); + } + } + }, + jieyuan:{ + group:['jieyuan_more','jieyuan_less'], + subSkill:{ + more:{ + audio:true, + trigger:{source:'damageBegin'}, + direct:true, + filter:function(event,player){ + if(!player.hasSkill('fenxin_nei')){ + if(!player.countCards('h',{color:'black'})) return false; + } + return (event.player.hp>=player.hp||player.hasSkill('fenxin_fan'))&&player!=event.player; + }, + content:function(){ + 'step 0' + var goon=(get.attitude(player,trigger.player)<0); + var next=player.chooseToDiscard(get.prompt('jieyuan',trigger.player)); + if(!player.hasSkill('fenxin_nei')){ + next.set('filterCard',function(card){ + return get.color(card)=='black'; + }); + next.set('prompt2','弃置一张黑色手牌令伤害+1'); + } + else{ + next.set('prompt2','弃置一张手牌令伤害+1'); + } + next.set('ai',function(card){ + if(_status.event.goon){ + return 8-get.value(card); + } + return 0; + }); + next.set('goon',goon); + next.logSkill=['jieyuan_more',trigger.player]; + 'step 1' + if(result.bool){ + trigger.num++; + } + } + }, + less:{ + audio:true, + trigger:{player:'damageBegin'}, + filter:function(event,player){ + if(!player.hasSkill('fenxin_nei')){ + if(!player.countCards('h',{color:'red'})) return false; + } + return event.source&&(event.source.hp>=player.hp||player.hasSkill('fenxin_zhong'))&&player!=event.source; + }, + direct:true, + content:function(){ + "step 0" + var next=player.chooseToDiscard(get.prompt('jieyuan'),{color:'red'}); + if(!player.hasSkill('fenxin_nei')){ + next.set('filterCard',function(card){ + return get.color(card)=='red'; + }); + next.set('prompt2','弃置一张红色手牌令伤害-1'); + } + else{ + next.set('prompt2','弃置一张手牌令伤害-1'); + } + next.set('ai',function(card){ + var player=_status.event.player; + if(player.hp==1||_status.event.getTrigger().num>1){ + return 9-get.value(card); + } + if(player.hp==2){ + return 8-get.value(card); + } + return 7-get.value(card); + }); + next.logSkill='jieyuan_less'; + "step 1" + if(result.bool){ + trigger.num--; + } + } + } + }, + ai:{ + expose:0.2, + threaten:1.5 + } + }, + fenxin:{ + mode:['identity'], + trigger:{global:'dieAfter'}, + filter:function(event,player){ + return ['fan','zhong','nei'].contains(event.player.identity)&&!player.hasSkill('fenxin_'+event.player.identity); + }, + forced:true, + content:function(){ + player.addSkill('fenxin_'+trigger.player.identity); + player.markSkill('fenxin'); + }, + intro:{ + mark:function(dialog,content,player){ + if(player.hasSkill('fenxin_zhong')){ + dialog.addText('你发动“竭缘”减少伤害无体力值限制'); + } + if(player.hasSkill('fenxin_fan')){ + dialog.addText('你发动“竭缘”增加伤害无体力值限制'); + } + if(player.hasSkill('fenxin_nei')){ + dialog.addText('将“竭缘”中的黑色手牌和红色手牌改为一张牌'); + } + } + }, + subSkill:{ + fan:{}, + zhong:{}, + nei:{} + }, + ai:{ + combo:'jieyuan' + } + }, + fenxin_old:{ + mode:['identity'], + trigger:{source:'dieBegin'}, + init:function(player){ + player.storage.fenxin=false; + }, + intro:{ + content:'limited' + }, + skillAnimation:'epic', + audio:2, + mark:true, + filter:function(event,player){ + if(player.storage.fenxin) return false; + return event.player.identity!='zhu'&&player.identity!='zhu'&& + player.identity!='mingzhong'&&event.player.identity!='mingzhong'; + }, + check:function(event,player){ + if(player.identity==event.player.identity) return Math.random()<0.5; + var stat=get.situation(); + switch(player.identity){ + case 'fan': + if(stat<0) return false; + if(stat==0) return Math.random()<0.6; + return true; + case 'zhong': + if(stat>0) return false; + if(stat==0) return Math.random()<0.6; + return true; + case 'nei': + if(event.player.identity=='fan'&&stat<0) return true; + if(event.player.identity=='zhong'&&stat>0) return true; + if(stat==0) return Math.random()<0.7; + return false; + } + }, + prompt:function(event,player){ + return '焚心:是否与'+get.translation(event.player)+'交换身份?'; + }, + content:function(){ + game.broadcastAll(function(player,target,shown){ + var identity=player.identity; + player.identity=target.identity; + if(shown||player==game.me){ + player.setIdentity(); + } + target.identity=identity; + },player,trigger.player,trigger.player.identityShown); + player.line(trigger.player,'green'); + player.storage.fenxin=true; + player.awakenSkill('fenxin_old'); + } + }, + qingyi:{ + group:['qingyi1','qingyi2'] + }, + qingyi1:{ + audio:true, + trigger:{player:'phaseBegin'}, + direct:true, + content:function(){ + "step 0" + player.addSkill('qingyi3'); + var check= player.countCards('h')>2; + player.chooseTarget(get.prompt('qingyi'),function(card,player,target){ + if(player==target) return false; + return player.canUse({name:'sha'},target); + }).ai=function(target){ + if(!check) return 0; + return get.effect(target,{name:'sha'},_status.event.player); + } + "step 1" + if(result.bool){ + player.logSkill('qingyi1',result.targets); + player.useCard({name:'sha'},result.targets[0],false); + player.skip('phaseJudge'); + player.skip('phaseDraw'); + } + player.removeSkill('qingyi3'); + } + }, + qingyi2:{ + audio:true, + trigger:{player:'phaseUseBefore'}, + direct:true, + filter:function(event,player){ + return player.countCards('he',{type:'equip'})>0; + }, + content:function(){ + "step 0" + player.addSkill('qingyi3'); + var check=player.countCards('h')<=player.hp; + player.chooseCardTarget({ + prompt:get.prompt('qingyi'), + filterCard:function(card,player){ + return get.type(card)=='equip'&&lib.filter.cardDiscardable(card,player); + }, + position:'he', + filterTarget:function(card,player,target){ + if(player==target) return false; + return player.canUse({name:'sha'},target); + }, + ai1:function(card){ + if(!_status.event.check) return 0; + return 6-get.value(card); + }, + ai2:function(target){ + if(!_status.event.check) return 0; + return get.effect(target,{name:'sha'},_status.event.player); + }, + check:check + }); + "step 1" + if(result.bool){ + player.logSkill('qingyi2',result.targets); + player.discard(result.cards[0]); + player.useCard({name:'sha'},result.targets[0]); + trigger.cancel(); + } + player.removeSkill('qingyi3'); + } + }, + qingyi3:{ + mod:{ + targetInRange:function(card,player,target,now){ + return true; + } + }, + }, + shixin:{ + audio:2, + trigger:{player:'damageBefore'}, + filter:function(event){ + return event.nature=='fire'; + }, + forced:true, + content:function(){ + trigger.cancel(); + }, + ai:{ + nofire:true, + effect:{ + target:function(card,player,target,current){ + if(get.tag(card,'fireDamage')) return 0; + } + } + } + }, + fenyin:{ + audio:2, + trigger:{player:'useCard'}, + frequent:true, + usable:3, + filter:function(event,player){ + if(!event.cards||event.cards.length!=1) return false; + if(_status.currentPhase!=player) return false; + if(!player.storage.fenyin) return false; + return get.color(player.storage.fenyin)!=get.color(event.cards[0]); + }, + content:function(){ + player.draw(); + }, + intro:{ + content:'card' + }, + group:['fenyin2','fenyin3'] + }, + fenyin3:{ + trigger:{player:'useCard'}, + priority:-1, + silent:true, + filter:function(event,player){ + if(!event.cards||event.cards.length!=1) return false; + if(_status.currentPhase!=player) return false; + return true; + }, + content:function(){ + player.storage.fenyin=trigger.cards[0]; + } + }, + fenyin2:{ + trigger:{player:'phaseBefore'}, + silent:true, + priority:10, + content:function(){ + player.storage.fenyin=null; + } + }, + dujin:{ + audio:2, + trigger:{player:'phaseDrawBegin'}, + frequent:true, + content:function(){ + trigger.num+=1+Math.floor(player.countCards('e')/2); + } + }, + qirang:{ + audio:2, + trigger:{player:'equipEnd'}, + frequent:true, + content:function(){ + player.gain(get.cardPile(function(card){ + return get.type(card,'trick')=='trick'; + }),'gain2'); + }, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(get.type(card)=='equip') return [1,3]; + } + }, + threaten:1.3 + } + }, + yuhua:{ + trigger:{player:'phaseDiscardBegin'}, + forced:true, + audio:2, + filter:function(event,player){ + return event.parent.name=='phaseDiscard'&&player.countCards('h',{type:'basic'})0){ + var att1=get.attitude(target,player); + var att2=get.attitude(target,trigger.player); + var att3=get.attitude(player,target); + if(att3<0) return 0; + return att1/2+att2+att3; + } + else{ + return 0; + // return get.attitude(player,target); + } + }); + 'step 1' + if(result.bool){ + player.addTempSkill('chenqing2',{player:'phaseBegin'}); + event.target=result.targets[0]; + event.target.draw(4); + player.logSkill('chenqing',event.target); + } + else{ + event.finish(); + } + 'step 2' + var target=event.target; + var tosave=trigger.player; + var att=get.attitude(target,tosave); + var hastao=target.countCards('h','tao'); + target.chooseToDiscard(4,true,'he').set('ai',function(card){ + var hastao=_status.event.hastao; + var att=_status.event.att; + if(!hastao&&att>0){ + var suit=get.suit(card); + for(var i=0;i0&&player.countCards('h')>0; + }, + content:function(){ + if(player.storage.mozhi.length&&player.countCards('h')){ + var card=player.storage.mozhi.shift(); + card={name:card.name,nature:card.nature,suit:card.suit,number:card.number}; + if(lib.filter.cardEnabled(card)){ + if(game.hasPlayer(function(current){ + return player.canUse(card,current); + })){ + lib.skill.mozhix.viewAs=card; + var next=player.chooseToUse(); + if(next.isOnline()){ + player.send(function(card){ + lib.skill.mozhix.viewAs=card; + },card) + } + next.logSkill='mozhi'; + next.set('openskilldialog','默识:将一张手牌当'+get.translation(card)+'使用'); + next.set('norestore',true); + next.set('_backupevent','mozhix'); + next.backup('mozhix'); + } + } + event.redo(); + } + }, + group:['mozhi2','mozhi3'] + }, + mozhix:{ + filterCard:true, + selectCard:1, + popname:true, + }, + mozhi2:{ + trigger:{player:'phaseAfter'}, + silent:true, + content:function(){ + player.storage.mozhi.length=0; + player.unmarkSkill('mozhi'); + } + }, + mozhi3:{ + trigger:{player:'useCard'}, + silent:true, + filter:function(event,player){ + if(_status.currentPhase!=player) return false; + if(event.parent.parent.name!='phaseUse') return false; + var type=get.type(event.card); + return player.storage.mozhi.length<2&&(type=='basic'||type=='trick'); + }, + content:function(){ + player.storage.mozhi.add(trigger.card); + if(player.hasSkill('mozhi')) player.markSkill('mozhi'); + } + }, + chenqing2:{}, + ranshang:{ + audio:2, + trigger:{player:'damageEnd'}, + filter:function(event,player){ + return event.nature=='fire'; + }, + init:function(player){ + player.storage.ranshang=0; + }, + forced:true, + check:function(){ + return false; + }, + content:function(){ + if(player.storage.ranshang){ + player.storage.ranshang++; + } + else{ + player.storage.ranshang=1; + } + player.markSkill('ranshang'); + game.addVideo('storage',player,['ranshang',player.storage.ranshang]); + }, + intro:{ + content:'mark' + }, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(card.name=='sha'){ + if(card.nature=='fire'||player.hasSkill('zhuque_skill')) return 2; + } + if(get.tag(card,'fireDamage')&¤t<0) return 2; + } + } + }, + group:'ranshang2' + }, + ranshang2:{ + audio:2, + trigger:{player:'phaseEnd'}, + forced:true, + filter:function(event,player){ + return player.storage.ranshang>0; + }, + content:function(){ + player.loseHp(player.storage.ranshang); + } + }, + hanyong:{ + trigger:{player:'useCard'}, + filter:function(event,player){ + return game.roundNumber>player.hp&&event.card&& + (event.card.name=='nanman'||event.card.name=='wanjian'); + }, + content:function(){ + player.addTempSkill('hanyong3','useCardAfter'); + }, + }, + hanyong3:{ + audio:false, + trigger:{source:'damageBegin'}, + forced:true, + filter:function(event,player){ + return event.card&&(event.card.name=='nanman'||event.card.name=='wanjian')&&event.notLink(); + }, + content:function(){ + trigger.num++; + } + }, + yishe:{ + trigger:{player:'phaseEnd'}, + init:function(player){ + player.storage.yishe=[]; + }, + filter:function(event,player){ + return !player.storage.yishe||!player.storage.yishe.length; + }, + intro:{ + content:'cards' + }, + content:function(){ + 'step 0' + player.draw(2); + player.chooseCard(2,'he',true,'选择两张牌作为“米”'); + 'step 1' + player.storage.yishe=result.cards; + player.lose(result.cards,ui.special); + player.syncStorage('yishe'); + player.markSkill('yishe'); + } + }, + bushi:{ + trigger:{player:'damageEnd',source:'damageEnd'}, + filter:function(event,player){ + if(event._notrigger.contains(event.player)) return false; + return player.storage.yishe&&player.storage.yishe.length&&event.player.isAlive(); + }, + direct:true, + content:function(){ + 'step 0' + trigger.player.chooseCardButton('选择获得一张“米”',player.storage.yishe); + 'step 1' + if(result.bool){ + player.logSkill('bushi'); + trigger.player.gain(result.links[0],'draw2','log'); + player.storage.yishe.remove(result.links[0]); + player.syncStorage('yishe'); + if(player.storage.yishe.length==0){ + player.recover(); + player.unmarkSkill('yishe'); + } + else{ + player.markSkill('yishe'); + } + } + } + }, + midao:{ + unique:true, + trigger:{global:'judge'}, + direct:true, + filter:function(event,player){ + return player.storage.yishe&&player.storage.yishe.length&&event.player.isAlive(); + }, + content:function(){ + "step 0" + var list=player.storage.yishe; + player.chooseButton([get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+get.translation(trigger.player.judging[0])+ + ','+get.prompt('midao'),list,'hidden'],function(button){ + var card=button.link; + var trigger=_status.event.getTrigger(); + var player=_status.event.player; + var judging=_status.event.judging; + var result=trigger.judge(card)-trigger.judge(judging); + var attitude=get.attitude(player,trigger.player); + return result*attitude; + }).set('judging',trigger.player.judging); + "step 1" + if(result.bool){ + player.logSkill('midao',trigger.player); + var card=result.links[0]; + player.storage.yishe.remove(card); + player.syncStorage('yishe'); + if(player.storage.yishe.length==0){ + player.recover(); + player.unmarkSkill('yishe'); + } + else{ + player.markSkill('yishe'); + } - player.$throw(card); - game.broadcastAll(function(card){ - if(card.clone){ - card.clone.classList.add('thrownhighlight'); - } - },card); - if(trigger.player.judging[0].clone){ - trigger.player.judging[0].clone.classList.remove('thrownhighlight'); - game.broadcast(function(card){ - if(card.clone){ - card.clone.classList.remove('thrownhighlight'); - } - },trigger.player.judging[0]); - game.addVideo('deletenode',player,get.cardsInfo([trigger.player.judging[0].clone])); - } - trigger.player.judging[0]=card; - trigger.position.appendChild(card); - game.log(player,'的判定牌改为',card); - game.delay(2); - } - }, - ai:{ - tag:{ - rejudge:0.6 - } - } - }, - fengpo:{ - audio:2, - trigger:{player:['shaBegin','juedouBegin']}, - filter:function(event,player){ - if(player.hasSkill('fengpo3')) return false; - return event.target&&event.targets&&event.targets.length==1; - }, - direct:true, - content:function(){ - 'step 0' - player.addTempSkill('fengpo3'); - player.chooseControl('draw_card','加伤害','cancel2').set('prompt',get.prompt('fengpo')); - 'step 1' - if(result.control&&result.control!='cancel2'){ - player.logSkill('fengpo'); - var nd=trigger.target.countCards('h',{suit:'diamond'}); - if(result.control=='draw_card'){ - player.draw(nd); - } - else{ - player.addTempSkill('fengpo2','useCardToAfter'); - player.storage.fengpo=nd; - } - } - } - }, - fengpo2:{ - trigger:{source:'damageBegin'}, - filter:function(event){ - return event.card&&(event.card.name=='sha'||event.card.name=='juedou')&&event.notLink(); - }, - forced:true, - audio:false, - content:function(){ - if(typeof player.storage.fengpo=='number'){ - trigger.num+=player.storage.fengpo; - } - } - }, - fengpo3:{}, - biluan:{ - trigger:{player:'phaseDrawBefore'}, - mark:true, - unique:true, - intro:{ - content:function(storage){ - if(storage>0){ - return '防御距离+'+storage; - } - else if(storage<0){ - return '防御距离'+storage; - } - else{ - return '无距离变化'; - } - } - }, - init:function(player){ - player.storage.biluan=0; - }, - check:function(event,player){ - if(player.countCards('h')>player.hp) return true; - if(player.hasJudge('lebu')) return true; - var ng=[]; - var players=game.filterPlayer(); - for(var i=0;i1){ - nai++; - } - } - } - return nai>=2; - }, - filter:function(event,player){ - return game.hasPlayer(function(current){ - return current!=player&&get.distance(current,player)<=1; - }); - }, - content:function(){ - var ng=[]; - var players=game.filterPlayer(); - for(var i=0;i1; - }, - forced:true, - content:function(){ - 'step 0' - player.chooseTarget(function(card,player,target){ - return target==player||target==_status.event.getTrigger().player; - },true,'礼下:选择一个目标摸一张牌').set('ai',function(target){ - return player==target?1:0; - }); - 'step 1' - if(result.targets.length){ - result.targets[0].draw(); - player.line(result.targets[0],'green'); - } - player.storage.biluan--; - player.markSkill('biluan'); - game.addVideo('storage',player,['biluan',player.storage.biluan]); - } - }, - fuji:{ - trigger:{global:'damageBegin'}, - filter:function(event){ - return event.source&&event.nature=='thunder'; - }, - check:function(event,player){ - return get.attitude(player,event.source)>0&&get.attitude(player,event.player)<0; - }, - prompt:function(event){ - return get.translation(event.source)+'即将对'+get.translation(event.player)+'造成伤害,'+get.prompt('fuji'); - }, - logTarget:'source', - content:function(){ - "step 0" - trigger.source.judge(ui.special); - "step 1" - if(result.color=='black'){ - result.card.discard(); - trigger.num++; - } - else{ - trigger.source.gain(result.card); - trigger.source.$gain2(result.card); - } - } - }, - fulu:{ - enable:'chooseToUse', - filterCard:function(card){ - return card.name=='sha'&&!card.nature; - }, - viewAs:{name:'sha',nature:'thunder'}, - ai:{ - order:function(){ - return get.order({name:'sha'})+0.1; - } - } - }, - guiming:{ - unique:true, - zhuSkill:true, - }, - canshi:{ - audio:2, - trigger:{player:'phaseDrawBefore'}, - check:function(event,player){ - var num=game.countPlayer(function(current){ - if(player.hasZhuSkill('guiming')&¤t.group=='wu') return true; - return current.isDamaged(); - }); - return num>3; - }, - prompt:function(event,player){ - var num=game.countPlayer(function(current){ - if(player.hasZhuSkill('guiming')&¤t.group=='wu'&¤t!=player) return true; - return current.isDamaged(); - }); - return '残蚀:是否改为摸'+get.cnNumber(num)+'张牌?'; - }, - content:function(){ - trigger.cancel(); - var num=game.countPlayer(function(current){ - if(player.hasZhuSkill('guiming')&¤t.group=='wu'&¤t!=player) return true; - return current.isDamaged(); - }); - if(num>0){ - player.draw(num); - } - player.addTempSkill('canshi2'); - } - }, - canshi2:{ - trigger:{player:'useCard'}, - forced:true, - filter:function(event,player){ - if(player.countCards('he')==0) return false; - var type=get.type(event.card,'trick'); - return type=='basic'||type=='trick'; - }, - content:function(){ - if(!event.isMine()||_status.connectMode) game.delay(0.5); - player.chooseToDiscard(true,'he'); - } - }, - chouhai:{ - audio:2, - trigger:{player:'damageBegin'}, - forced:true, - check:function(){ - return false; - }, - filter:function(event,player){ - return player.countCards('h')==0; - }, - content:function(){ - trigger.num++; - }, - ai:{ - effect:{ - target:function(card,player,target,current){ - if(get.tag(card,'damage')&&target.countCards('h')==0) return [1,-2]; - } - } - } - }, - kunfen:{ - audio:2, - trigger:{player:'phaseEnd'}, - direct:true, - content:function(){ - "step 0" - if(player.storage.kunfen|| - (get.mode()=='guozhan'&&player.hiddenSkills.contains('kunfen'))){ - if(!player.storage.kunfen){ - event.skillHidden=true; - } - player.chooseBool(get.prompt('kunfen')).set('ai',function(){ - var player=_status.event.player; - if(player.hp>3) return true; - if(player.hp==3&&player.countCards('h')<3) return true; - if(player.hp==2&&player.countCards('h')==0) return true; - return false; - }); - } - else{ - event.forced=true; - } - "step 1" - if(event.forced||result.bool){ - player.logSkill('kunfen'); - player.loseHp(); - } - else{ - event.finish(); - } - "step 2" - player.draw(2); - }, - ai:{ - threaten:1.5 - } - }, - fengliang:{ - skillAnimation:true, - unique:true, - audio:2, - derivation:'tiaoxin', - trigger:{player:'dying'}, - priority:10, - forced:true, - filter:function(event,player){ - return !player.storage.kunfen; - }, - content:function(){ - "step 0" - player.loseMaxHp(); - "step 1" - if(player.hp<2){ - player.recover(2-player.hp); - } - "step 2" - player.addSkill('tiaoxin'); - player.storage.kunfen=true; - player.awakenSkill('fengliang'); - }, - }, - zhuiji:{ - mod:{ - globalFrom:function(from,to){ - if(from.hp>to.hp) return -Infinity; - } - } - }, - cihuai:{ - trigger:{player:'phaseUseBegin'}, - direct:true, - filter:function(event,player){ - return player.countCards('h','sha')==0; - }, - content:function(){ - "step 0" - player.chooseTarget(get.prompt('cihuai'),function(card,player,target){ - return player.canUse({name:'sha'},target); - }).set('ai',function(target){ - var player=_status.event.player; - return get.effect(target,{name:'sha'},player,player); - }); - "step 1" - if(result.bool){ - player.logSkill('cihuai'); - player.showHandcards(); - player.useCard({name:'sha'},result.targets); - } - }, - ai:{ - expose:0.2, - } - }, - jilei:{ - trigger:{player:'damageEnd'}, - priority:9, - audio:2, - direct:true, - filter:function(event){ - return event&&event.source; - }, - content:function(){ - 'step 0' - player.chooseControl('basic','trick','equip','cancel2',function(){ - var source=_status.event.source; - if(get.attitude(_status.event.player,source)>0) return 'cancel2'; - if(_status.currentPhase!=source) return 'trick'; - if(lib.filter.cardUsable({name:'sha'},source)&&source.countCards('h')>=2) return 'basic'; - return 'trick'; - }).set('prompt',get.prompt('jilei',trigger.source)).set('source',trigger.source); - 'step 1' - if(result.control!='cancel2'){ - player.logSkill('jilei',trigger.source); - player.popup(get.translation(result.control)+'牌'); - trigger.source.storage.jilei2=result.control; - trigger.source.addTempSkill('jilei2'); - } - }, - ai:{ - maixie_defend:true, - threaten:0.7 - } - }, - jilei2:{ - unique:true, - intro:{ - content:function(storage){ - return '不能使用、打出或弃置'+get.translation(storage)+'牌'; - } - }, - mark:true, - onremove:true, - mod:{ - cardDiscardable:function(card,player){ - if(player.storage.jilei2==get.type(card,'trick')) return false; - }, - cardEnabled:function(card,player){ - if(player.storage.jilei2==get.type(card,'trick')) return false; - }, - cardUsable:function(card,player){ - if(player.storage.jilei2==get.type(card,'trick')) return false; - }, - cardRespondable:function(card,player){ - if(player.storage.jilei2==get.type(card,'trick')) return false; - }, - cardSavable:function(card,player){ - if(player.storage.jilei2==get.type(card,'trick')) return false; - }, - }, - }, - danlao:{ - priority:9, - audio:2, - filter:function(event,player){ - return event.player!=player&&get.type(event.card)=='trick'&&event.targets&&event.targets.length>1; - }, - check:function(event,player){ - return get.tag(event.card,'multineg')||get.effect(player,event.card,event.player,player)<=0; - }, - trigger:{target:'useCardToBefore'}, - content:function(){ - trigger.cancel(); - player.draw(); - }, - ai:{ - effect:{ - target:function(card){ - if(get.type(card)!='trick') return; - if(card.name=='tiesuo') return [0,0]; - if(card.name=='yihuajiemu') return [0,1]; - if(get.tag(card,'multineg')) return [0,2]; - } - } - } - }, - taichen:{ - enable:'phaseUse', - usable:1, - filterTarget:function(card,player,target){ - return player.canUse('sha',target); - }, - content:function(){ - "step 0" - player.loseHp(); - "step 1" - player.useCard({name:'sha'},target,false); - }, - ai:{ - order:1, - result:{ - target:function(player,target){ - if(player.hp>2&&player.hp>target.hp&&target.countCards('he')<4){ - return get.effect(target,{name:'sha'},player,target); - } - return 0; - } - } - } - }, - manjuan:{ - audio:true, - trigger:{global:'discardAfter'}, - filter:function(event,player){ - if(event.player==player) return false; - if(!player.countCards('he')) return false; - for(var i=0;imaxval){ - maxval=tempval; - } - } - maxval+=cards.length-1; - var next=player.chooseToDiscard('he',{suit:suits}); - next.set('ai',function(card){ - return _status.event.maxval-get.value(card); - }); - next.set('maxval',maxval); - next.set('dialog',[get.prompt(event.name),'hidden',cards]) - next.logSkill=event.name; - event.cards=cards; - } - "step 2" - if(result.bool){ - player.gain(event.cards,'gain2','log'); - } - }, - ai:{ - threaten:1.3 - } - }, - zuixiang:{ - skillAnimation:true, - audio:true, - unique:true, - mark:true, - trigger:{player:'phaseBegin'}, - priority:10, - filter:function(event,player){ - if(player.storage.zuixiang) return false; - return true; - }, - check:function(event,player){ - return player.countCards('h')0; - }, - direct:true, - content:function(){ - "step 0" - var next=player.chooseToDiscard('协穆:是否弃置一张杀并摸两张牌?',{name:'sha'}); - next.set('ai',function(card){ - return 9-get.value(card); - }); - next.logSkill='xiemu'; - "step 1" - if(result.bool){ - player.draw(2); - } - }, - ai:{ - effect:{ - target:function(card,player,target){ - if(get.color(card)=='black'&&target.countCards('h')>0){ - return [1,0.5]; - } - } - } - } - }, - spmengjin:{ - trigger:{player:'shaBegin'}, - filter:function(event,player){ - return event.target.countCards('he')>0; - }, - direct:true, - content:function(){ - "step 0" - var att=get.attitude(player,trigger.target); - player.choosePlayerCard(get.prompt('spmengjin',trigger.target),'he',trigger.target).ai=function(button){ - var val=get.buttonValue(button); - if(att>0) return -val; - return val; - }; - "step 1" - if(result.bool){ - trigger.target.discard(result.links); - player.logSkill('spmengjin',trigger.target); - trigger.target.addTempSkill('mengjin2','shaAfter'); - } - }, - ai:{ - expose:0.2 - } - }, - fenxun_old:{ - audio:2, - trigger:{player:'shaBefore'}, - direct:true, - filter:function(event,player){ - return event.targets.length==1; - }, - position:'he', - content:function(){ - "step 0" - player.chooseCardTarget({ - filterCard:lib.filter.cardDiscardable, - filterTarget:function(card,player,target){ - var trigger=_status.event.getTrigger(); - return lib.filter.targetEnabled(trigger.card,player,target)&&target!=trigger.targets[0]; - }, - ai1:function(card){ - return 6-get.value(card); - }, - ai2:function(target){ - var trigger=_status.event.getTrigger(); - var player=_status.event.player; - return get.effect(target,trigger.card,player,player); - }, - prompt:get.prompt('fenxun') - }); - "step 1" - if(result.bool){ - player.discard(result.cards); - trigger.targets.push(result.targets[0]); - player.logSkill('fenxun',result.targets); - } - } - }, - zhoufu:{ - audio:2, - enable:'phaseUse', - usable:1, - filterCard:true, - filterTarget:function(card,player,target){ - return player!=target&&!target.hasSkill('zhoufu2'); - }, - prepare:'throw', - discard:false, - content:function(){ - target.$gain2(cards); - target.storage.zhoufu2=cards[0]; - target.addSkill('zhoufu2'); - target.storage.zhoufu3=player; - ui.special.appendChild(cards[0]); - target.syncStorage('zhoufu2'); - }, - check:function(card){ - return 6-get.value(card) - }, - ai:{ - expose:0.1, - order:1, - result:{ - player:1 - } - } - }, - zhoufu2:{ - trigger:{player:'judge'}, - forced:true, - priority:10, - mark:'card', - content:function(){ - "step 0" - player.$throw(player.storage.zhoufu2); - game.broadcastAll(function(card){ - if(card.clone){ - card.clone.classList.add('thrownhighlight'); - } - },player.storage.zhoufu2); - if(player.judging[0].clone){ - player.judging[0].clone.classList.remove('thrownhighlight'); - game.broadcast(function(card){ - if(card.clone){ - card.clone.classList.remove('thrownhighlight'); - } - },player.judging[0]); - game.addVideo('deletenode',player,get.cardsInfo([player.judging[0].clone])); - } - player.judging[0]=player.storage.zhoufu2; - trigger.position.appendChild(player.storage.zhoufu2); - game.log(player,'的判定牌改为',player.storage.zhoufu2); - game.delay(2); - player.removeSkill('zhoufu2'); - delete player.storage.zhoufu2; - delete player.storage.zhoufu2_markcount; - if(player.storage.zhoufu3.isIn()){ - player.storage.zhoufu3.line(player,'green'); - } - "step 1" - player.addTempSkill('zhoufu3'); - }, - intro:{ - content:'card' - } - }, - zhoufu3:{ - trigger:{player:'phaseEnd'}, - silent:true, - content:function(){ - if(player.storage.zhoufu3.isIn()){ - player.storage.zhoufu3.logSkill('zhoufu',player); - player.loseHp(); - } - delete player.storage.zhoufu3; - }, - onremove:true - }, - yingbin:{ - audio:2, - trigger:{global:'useCard'}, - filter:function(event,player){ - return event.player.hasSkill('zhoufu2')&&event.player.storage.zhoufu3==player&& - get.suit(event.player.storage.zhoufu2)==get.suit(event.card); - }, - forced:true, - autodelay:true, - content:function(){ - player.draw(); - if(trigger.player.storage.zhoufu2_markcount==1){ - trigger.player.removeSkill('zhoufu2'); - delete trigger.player.storage.zhoufu2; - delete trigger.player.storage.zhoufu2_markcount; - delete trigger.player.storage.zhoufu3; - } - else{ - trigger.player.storage.zhoufu2_markcount=1; - trigger.player.updateMark('zhoufu2'); - } - } - }, - kuiwei:{ - audio:2, - trigger:{player:'phaseEnd'}, - check:function(event,player){ - if(player.isTurnedOver()) return true; - var num=game.countPlayer(function(current){ - return current.getEquip(1); - }); - return num>1; - }, - content:function(){ - "step 0" - player.turnOver(); - "step 1" - var num=game.countPlayer(function(current){ - return current.getEquip(1); - }); - player.draw(2+num); - player.addSkill('kuiwei2'); - }, - ai:{ - effect:{ - target:function(card){ - if(card.name=='guiyoujie') return [0,2]; - } - } - } - }, - kuiwei2:{ - trigger:{player:'phaseDrawBegin'}, - forced:true, - audio:false, - content:function(){ - var num=game.countPlayer(function(current){ - return current.getEquip(1); - }); - if(num>=player.countCards('he')){ - player.discard(player.getCards('he')); - } - else if(num){ - player.chooseToDiscard('he',num,true); - } - player.removeSkill('kuiwei2'); - } - }, - yanzheng:{ - enable:'chooseToUse', - audio:2, - filter:function(event,player){ - return player.hp0; - }, - viewAsFilter:function(player){ - return player.hp0; - }, - filterCard:true, - position:'e', - viewAs:{name:'wuxie'}, - prompt:'将一张装备区内的牌当无懈可击使用', - check:function(card){return 8-get.equipValue(card)}, - threaten:1.2 - }, - tongji:{ - global:'tongji_disable', - unique:true, - gainnable:true, - subSkill:{ - disable:{ - mod:{ - targetEnabled:function(card,player,target){ - if(player.hasSkill('tongji')) return; - if(card.name=='sha'){ - if(target.hasSkill('tongji')) return; - if(game.hasPlayer(function(current){ - return current.hasSkill('tongji')&¤t.hp=0; - }, - content:function(){ - "step 0" - player.draw(); - if(trigger.target!=player){ - player.chooseCard(true,'he','交给'+get.translation(trigger.target)+'一张牌').set('ai',function(card){ - if(get.position(card)=='e') return -1; - if(card.name=='shan') return 1; - if(get.type(card)=='equip') return 0.5; - return 0; - }); - } - else{ - event.finish(); - } - "step 1" - trigger.target.gain(result.cards,player); - player.$give(result.cards,trigger.target); - game.delay(); - event.card=result.cards[0]; - if(get.type(event.card)!='equip') event.finish(); - "step 2" - if(!trigger.target.isMin()){ - trigger.target.chooseBool('是否装备'+get.translation(event.card)+'?').set('ai',function(){ - var current=_status.event.player.getCards('e',{subtype:get.subtype(_status.event.card)}); - if(current&¤t.length){ - return get.equipValue(event.card)>get.equipValue(current[0]); - } - return true; - }).set('card',event.card); - } - else{ - event.finish(); - } - "step 3" - if(result.bool){ - trigger.target.equip(event.card); - } - }, - ai:{ - threaten:1.1 - } - }, - liangzhu:{ - audio:2, - trigger:{global:'recoverAfter'}, - direct:true, - filter:function(event,player){ - return _status.currentPhase==event.player; - }, - content:function(){ - 'step 0' - if(player==trigger.player){ - player.chooseControl('摸一张','摸两张','cancel2',function(){ - return '摸两张'; - }).set('prompt',get.prompt('liangzhu')); - event.single=true; - } - else{ - player.chooseTarget(get.prompt('liangzhu'),function(card,player,target){ - return target==_status.event.player||target==_status.event.target; - }).set('target',trigger.player).set('ai',function(target){ - var player=_status.event.player; - if(player==target) return 1; - return get.attitude(player,target)-1.5; - }); - } - 'step 1' - if(event.single){ - if(result.control!='cancel2'){ - player.logSkill('liangzhu',player); - if(result.control=='摸一张'){ - player.draw(); - } - else{ - player.draw(2); - player.storage.liangzhu=player; - } - } - } - else if(result.bool){ - var target=result.targets[0]; - player.logSkill('liangzhu',target); - if(target==player){ - target.draw(); - } - else{ - target.draw(2); - if(target.storage.liangzhu){ - target.storage.liangzhu.add(player); - } - else{ - target.storage.liangzhu=[player]; - } - } - } - }, - ai:{ - expose:0.1 - } - }, - fanxiang:{ - skillAnimation:true, - animationColor:'fire', - audio:2, - unique:true, - forceunique:true, - derivation:'xiaoji', - trigger:{player:'phaseBegin'}, - filter:function(event,player){ - if(player.storage.fanxiang) return false; - return game.hasPlayer(function(current){ - return current.storage.liangzhu&¤t.storage.liangzhu.contains(player)&¤t.isDamaged(); - }); - }, - forced:true, - content:function(){ - player.storage.fanxiang=true; - player.gainMaxHp(); - player.recover(); - player.removeSkill('liangzhu'); - player.addSkill('xiaoji'); - player.awakenSkill('fanxiang'); - }, - }, - mingshi:{ - audio:2, - trigger:{player:'damageBegin'}, - direct:true, - filter:function(event,player){ - return event.source&&event.source.hp>player.hp; - }, - content:function(){ - "step 0" - var next=player.chooseToDiscard(get.prompt('mingshi'),{color:'black'}); - next.set('ai',function(card){ - return 9-get.value(card); - }); - next.set('logSkill','mingshi'); - "step 1" - if(result.bool){ - trigger.num--; - } - }, - ai:{ - threaten:0.8 - } - }, - lirang:{ - audio:2, - trigger:{player:'discardAfter'}, - filter:function(event,player){ - for(var i=0;i1; - }); - } - player.chooseCardButton(get.prompt('lirang'),event.cards,[1,event.cards.length]).set('ai',function(button){ - if(!_status.event.goon||ui.selected.buttons.length) return 0; - if(button.link.name=='du') return 2; - return 1; - }).set('goon',goon); - } - else{ - event.finish(); - } - "step 2" - if(result.bool){ - event.togive=result.links.slice(0); - player.chooseTarget('将'+get.translation(result.links)+'交给一名角色',true,function(card,player,target){ - return target!=player; - }).set('ai',function(target){ - var att=get.attitude(_status.event.player,target); - if(_status.event.enemy){ - return -att; - } - else{ - if(att>2) return att/Math.sqrt(1+target.countCards('h')); - return att/Math.sqrt(1+target.countCards('h'))/5; - } - }).set('enemy',get.value(event.togive[0])<0); - } - else{ - for(var i=0;i0; - }, - content:function(){ - trigger.target.discardPlayerCard(player,true); - } - }, - shenxian:{ - audio:2, - trigger:{global:'discardAfter'}, - filter:function(event,player){ - if(event.player==player||_status.currentPhase==player) return false; - if(player.hasSkill('shenxian2')) return false; - for(var i=0;iplayer.storage.qiangwu) return Infinity; - } - }, - group:['qiangwu2','qiangwu3'] - }, - qiangwu2:{ - trigger:{player:'phaseUseBegin'}, - silent:true, - content:function(){ - delete player.storage.qiangwu; - } - }, - qiangwu3:{ - trigger:{player:'useCard'}, - filter:function(event,player){ - if(_status.currentPhase==player&&event.card.name=='sha'&& - event.card.number>player.storage.qiangwu) return true; - return false; - }, - forced:true, - popup:false, - content:function(){ - if(player.stat[player.stat.length-1].card.sha>0){ - player.stat[player.stat.length-1].card.sha--; - } - }, - }, - zhendu:{ - audio:2, - trigger:{global:'phaseUseBegin'}, - filter:function(event,player){ - return event.player!=player&&player.countCards('h')>0; - }, - direct:true, - content:function(){ - "step 0" - var nono=(Math.abs(get.attitude(player,trigger.player))<3); - if(get.damageEffect(trigger.player,player,player)<=0){ - nono=true - } - else if(trigger.player.hp>2){ - nono=true; - } - else if(trigger.player.hp>1&&player.countCards('h')<3){ - nono=true; - } - else if(trigger.player.canUse('sha',player)&&!player.countCards('h','shan')&&trigger.player.countCards('h')>=3){ - nono=true; - } - var next=player.chooseToDiscard(get.prompt('zhendu',trigger.player)); - next.set('ai',function(card){ - if(_status.event.nono) return -1; - return 7-get.useful(card); - }); - next.set('logSkill',['zhendu',trigger.player]); - next.set('nono',nono); - "step 1" - if(result.bool){ - trigger.player.damage(); - } - else{ - event.finish(); - } - "step 2" - trigger.player.useCard({name:'jiu'},trigger.player); - }, - ai:{ - threaten:2, - expose:0.3 - } - }, - qiluan:{ - trigger:{source:'dieAfter'}, - priority:-10, - silent:true, - filter:function(event){ - return _status.currentPhase!=event.player; - }, - content:function(){ - if(!player.storage.qiluan){ - player.storage.qiluan=1; - } - else{ - player.storage.qiluan++; - } - }, - group:['qiluan2','qiluan3'] - }, - qiluan2:{ - audio:2, - trigger:{global:'phaseAfter'}, - forced:true, - filter:function(event,player){ - return player.storage.qiluan?true:false; - }, - content:function(){ - if(get.mode()=='guozhan'){ - player.draw(3); - } - else{ - player.draw(3*player.storage.qiluan); - } - player.storage.qiluan=0; - } - }, - qiluan3:{ - trigger:{source:'dieAfter'}, - forced:true, - priority:-10, - filter:function(event){ - return _status.currentPhase==event.player; - }, - content:function(){ - var num=3; - if(player.storage.qiluan){ - num+=3*player.storage.qiluan; - player.storage.qiluan=0; - } - player.draw(num); - }, - }, - shangyi:{ - audio:2, - enable:'phaseUse', - usable:1, - filterTarget:function(card,player,target){ - return player!=target&&target.countCards('h'); - }, - content:function(){ - "step 0" - player.chooseCardButton(target,target.getCards('h')).set('filterButton',function(button){ - return get.color(button.link)=='black'; - }); - "step 1" - if(result.bool){ - target.discard(result.links[0]); - } - }, - ai:{ - order:11, - result:{ - target:function(player,target){ - return -target.countCards('h'); - } - }, - threaten:1.1 - }, - }, - shengxi:{ - trigger:{player:'phaseDiscardBegin'}, - frequent:true, - filter:function(event,player){ - return !player.getStat('damage'); - }, - content:function(){ - player.draw(2); - }, - audio:2, - audioname:['liushan'] - }, - shoucheng:{ - trigger:{global:'loseEnd'}, - audio:2, - check:function(event,player){ - return get.attitude(player,event.player)>0; - }, - filter:function(event,player){ - if(event.player.countCards('h')) return false; - if(_status.currentPhase==event.player) return false; - for(var i=0;i0){ - return true; - } - }); - return num>=2; - }, - content:function(){ - "step 0" - var targets=game.filterPlayer(); - targets.remove(player); - targets.sort(lib.sort.seat); - event.targets=targets; - event.num=0; - trigger.cancel(); - player.line(targets,'green'); - "step 1" - if(num【勇决】
每当其他角色于回合内使用一张杀,若目标不是你,你可以获得之,每回合限一次
'); - "step 1" - player.turnOver(); - }, - intro:{ - content:'limited' - }, - ai:{ - order:4, - result:{ - target:function(player,target){ - if(target.isMin()) return 0; - if(player.hp>1){ - if(game.phaseNumber2) return 0; - if(get.attitude(player,target)<5) return 0; - } - if(get.attitude(player,target)<5) return 0; - if(target.hp==1&&target.maxHp>2) return 0.2; - if(target==game.me) return 1.2; - return 1; - } - }, - expose:0.5, - threaten:1.5 - } - }, - fenming:{ - audio:2, - trigger:{player:'phaseEnd'}, - check:function(event,player){ - var num=game.countPlayer(function(current){ - if(current.isLinked()&¤t.countCards('he')){ - return get.attitude(player,current); - } - }); - return num<0; - }, - filter:function(event,player){ - return player.isLinked(); - }, - content:function(){ - "step 0" - event.targets=game.filterPlayer(function(current){ - if(current.isLinked()&¤t.countCards('he')){ - return true; - } - }); - event.num=0; - event.targets.sort(lib.sort.seat); - "step 1" - if(event.num=0); - trigger.player.chooseToDiscard('he',{type:'equip'}).set('ai',function(card){ - if(_status.event.nono){ - return 0; - } - if(_status.event.player.hp==1) return 10-get.value(card); - return 9-get.value(card); - }).set('nono',nono); - } - else{ - event.finish(); - } - "step 2" - if(result.bool){ - player.draw(); - } - else{ - trigger.player.damage(); - } - }, - ai:{ - expose:0.3, - threaten:1.3 - } - }, - suishi:{ - trigger:{global:'dying'}, - forced:true, - popup:false, - priority:12, - check:function(){ - return false; - }, - filter:function(event,player){ - return event.player!=player&&event.parent.name=='damage'&&event.parent.source&&event.parent.source!=event.player; - }, - content:function(){ - 'step 0' - var str; - if(trigger.parent.source==player){ - str='随势:是否摸一张牌?'; - } - else{ - str='随势:是否令'+get.translation(player)+'摸一张牌?' - } - trigger.parent.source.chooseBool(str).set('ai',function(){ - return get.attitude(_status.event.player,_status.event.target)>0; - }).set('target',player); - 'step 1' - if(result.bool){ - player.logSkill('suishi'); - trigger.parent.source.line(player,'green'); - player.draw(); - } - }, - group:'suishi2' - }, - suishi2:{ - trigger:{global:'dieAfter'}, - forced:true, - popup:false, - check:function(){ - return false; - }, - filter:function(event,player){ - return event.player!=player&&event.source&&event.source!=player&&event.source!=event.player; - }, - content:function(){ - 'step 0' - var str; - if(trigger.source==player){ - str='随势:是否流失一点体力?'; - } - else{ - str='随势:是否令'+get.translation(player)+'流失一点体力?' - } - trigger.source.chooseBool(str).set('ai',function(){ - return get.attitude(_status.event.player,_status.event.target)<0; - }).set('target',player); - 'step 1' - if(result.bool){ - player.logSkill('suishi'); - trigger.source.line(player,'green'); - player.loseHp(); - } - }, - }, - sijian:{ - trigger:{player:'loseEnd'}, - direct:true, - audio:2, - filter:function(event,player){ - if(player.countCards('h')) return false; - for(var i=0;i0; - }).set('ai',function(target){ - return -get.attitude(_status.event.player,target); - }); - "step 1" - if(result.bool){ - player.logSkill('sijian',result.targets); - event.target=result.targets[0]; - player.discardPlayerCard(event.target,true); - } - else{ - event.finish(); - } - }, - ai:{ - expose:0.2, - } - }, - quji:{ - enable:'phaseUse', - usable:1, - position:'he', - filterCard:true, - selectCard:function(){ - var player=_status.event.player; - var num=game.countPlayer(function(current){ - return current.isDamaged(); - }); - return [1,Math.min(num,player.maxHp-player.hp)]; - }, - filterTarget:function(card,player,target){ - return target.hp=game.countPlayer(function(current){ - return get.attitude(player,current)>0&¤t.isDamaged(); - })){ - return -1; - } - if(get.color(card)=='black') return -1; - return 9-get.value(card); - }, - content:function(){ - "step 0" - target.recover(); - "step 1" - if(target==player){ - for(var i=0;i1) return false; - return game.hasPlayer(function(current){ - return current.hasSkill('junbing'); - }); - }, - check:function(event,player){ - var target=game.findPlayer(function(current){ - return current.hasSkill('junbing'); - }); - if(target){ - var num=target.countCards('h'); - var att=get.attitude(player,target); - if(num==0) return true; - if(num==1) return att>-1; - if(num==2) return att>0; - return att>1; - } - return false; - }, - content:function(){ - "step 0" - player.draw(); - if(player.hasSkill('junbing')){ - event.finish(); - } - else{ - event.target=game.findPlayer(function(current){ - return current.hasSkill('junbing'); - }); - } - "step 1" - var cards=player.getCards('h'); - target.gain(cards,player); - event.num=cards.length; - player.$give(event.num,target); - game.delay(); - "step 2" - target.chooseCard('选择还给'+get.translation(player)+'的牌',true,event.num); - game.delay(0.2); - "step 3" - player.gain(result.cards,target); - target.$give(result.cards.length,player); - game.delay(); - } - }, - junbing:{ - global:'junbing2', - unique:true, - forceunique:true - }, - xiongyi:{ - skillAnimation:true, - unique:true, - enable:'phaseUse', - audio:2, - mark:true, - filter:function(event,player){ - return !player.storage.xiongyi; - }, - init:function(player){ - player.storage.xiongyi=false; - }, - filterTarget:function(card,player,target){ - if(get.mode()=='guozhan'){ - if(player==target) return true; - if(player.identity=='ye') return false; - if(player.identity=='unknown'){ - if(_status.yeidentity.contains(player._group)){ - return false; - } - else if(get.zhu(player)||get.population(player._group)+1<=get.population()/2){ - return player._group==target.identity; - } - else{ - return false; - } - } - return player.identity==target.identity; - } - else{ - return true; - } - }, - multitarget:true, - multiline:true, - selectTarget:function(){ - if(get.mode()=='guozhan') return -1; - return [1,3]; - }, - content:function(){ - "step 0" - player.storage.xiongyi=true; - player.awakenSkill('xiongyi'); - game.asyncDraw(targets,3); - "step 1" - if(player.isDamaged()){ - if(get.mode()=='guozhan'){ - if(player.isMinor()){ - player.recover(); - } - } - else if(targets.length<=2){ - player.recover(); - } - } - }, - intro:{ - content:'limited' - }, - ai:{ - order:1, - result:{ - target:function(player){ - var num=player.countCards('h'); - if(player.hp==1) return 1; - if(player.hp==2&&num<=2) return 1; - if(player.hp==3&&num<=1) return 1; - if(game.phaseNumber2) return false; - var cards=player.getCards('h'); - if(cards.length3) return false; - for(var i=0;i7||get.tag(cards[i],'recover')>=1) return false; - } - return true; - }, - filter:function(event,player){ - return player.countCards('h')>0; - }, - content:function(){ - "step 0" - var cards=player.getCards('h'); - event.bool=cards.length>=player.hp; - player.discard(cards); - "step 1" - if(event.bool){ - player.recover(); - } - } - }, - wuji:{ - skillAnimation:true, - audio:2, - trigger:{player:'phaseEnd'}, - forced:true, - filter:function(event,player){ - return player.getStat('damage')>=3&&!player.storage.wuji; - }, - content:function(){ - "step 0" - player.removeSkill('huxiao'); - player.gainMaxHp(); - "step 1" - player.recover(); - player.awakenSkill('wuji'); - player.storage.wuji=true; + player.$throw(card); + game.broadcastAll(function(card){ + if(card.clone){ + card.clone.classList.add('thrownhighlight'); + } + },card); + if(trigger.player.judging[0].clone){ + trigger.player.judging[0].clone.classList.remove('thrownhighlight'); + game.broadcast(function(card){ + if(card.clone){ + card.clone.classList.remove('thrownhighlight'); + } + },trigger.player.judging[0]); + game.addVideo('deletenode',player,get.cardsInfo([trigger.player.judging[0].clone])); + } + trigger.player.judging[0]=card; + trigger.position.appendChild(card); + game.log(player,'的判定牌改为',card); + game.delay(2); + } + }, + ai:{ + tag:{ + rejudge:0.6 + } + } + }, + fengpo:{ + audio:2, + trigger:{player:['shaBegin','juedouBegin']}, + filter:function(event,player){ + if(player.hasSkill('fengpo3')) return false; + return event.target&&event.targets&&event.targets.length==1; + }, + direct:true, + content:function(){ + 'step 0' + player.addTempSkill('fengpo3'); + player.chooseControl('draw_card','加伤害','cancel2').set('prompt',get.prompt('fengpo')); + 'step 1' + if(result.control&&result.control!='cancel2'){ + player.logSkill('fengpo'); + var nd=trigger.target.countCards('h',{suit:'diamond'}); + if(result.control=='draw_card'){ + player.draw(nd); + } + else{ + player.addTempSkill('fengpo2','useCardToAfter'); + player.storage.fengpo=nd; + } + } + } + }, + fengpo2:{ + trigger:{source:'damageBegin'}, + filter:function(event){ + return event.card&&(event.card.name=='sha'||event.card.name=='juedou')&&event.notLink(); + }, + forced:true, + audio:false, + content:function(){ + if(typeof player.storage.fengpo=='number'){ + trigger.num+=player.storage.fengpo; + } + } + }, + fengpo3:{}, + biluan:{ + trigger:{player:'phaseDrawBefore'}, + mark:true, + unique:true, + intro:{ + content:function(storage){ + if(storage>0){ + return '防御距离+'+storage; + } + else if(storage<0){ + return '防御距离'+storage; + } + else{ + return '无距离变化'; + } + } + }, + init:function(player){ + player.storage.biluan=0; + }, + check:function(event,player){ + if(player.countCards('h')>player.hp) return true; + if(player.hasJudge('lebu')) return true; + var ng=[]; + var players=game.filterPlayer(); + for(var i=0;i1){ + nai++; + } + } + } + return nai>=2; + }, + filter:function(event,player){ + return game.hasPlayer(function(current){ + return current!=player&&get.distance(current,player)<=1; + }); + }, + content:function(){ + var ng=[]; + var players=game.filterPlayer(); + for(var i=0;i1; + }, + forced:true, + content:function(){ + 'step 0' + player.chooseTarget(function(card,player,target){ + return target==player||target==_status.event.getTrigger().player; + },true,'礼下:选择一个目标摸一张牌').set('ai',function(target){ + return player==target?1:0; + }); + 'step 1' + if(result.targets.length){ + result.targets[0].draw(); + player.line(result.targets[0],'green'); + } + player.storage.biluan--; + player.markSkill('biluan'); + game.addVideo('storage',player,['biluan',player.storage.biluan]); + } + }, + fuji:{ + trigger:{global:'damageBegin'}, + filter:function(event){ + return event.source&&event.nature=='thunder'; + }, + check:function(event,player){ + return get.attitude(player,event.source)>0&&get.attitude(player,event.player)<0; + }, + prompt:function(event){ + return get.translation(event.source)+'即将对'+get.translation(event.player)+'造成伤害,'+get.prompt('fuji'); + }, + logTarget:'source', + content:function(){ + "step 0" + trigger.source.judge(ui.special); + "step 1" + if(result.color=='black'){ + result.card.discard(); + trigger.num++; + } + else{ + trigger.source.gain(result.card); + trigger.source.$gain2(result.card); + } + } + }, + fulu:{ + enable:'chooseToUse', + filterCard:function(card){ + return card.name=='sha'&&!card.nature; + }, + viewAs:{name:'sha',nature:'thunder'}, + ai:{ + order:function(){ + return get.order({name:'sha'})+0.1; + } + } + }, + guiming:{ + unique:true, + zhuSkill:true, + }, + canshi:{ + audio:2, + trigger:{player:'phaseDrawBefore'}, + check:function(event,player){ + var num=game.countPlayer(function(current){ + if(player.hasZhuSkill('guiming')&¤t.group=='wu') return true; + return current.isDamaged(); + }); + return num>3; + }, + prompt:function(event,player){ + var num=game.countPlayer(function(current){ + if(player.hasZhuSkill('guiming')&¤t.group=='wu'&¤t!=player) return true; + return current.isDamaged(); + }); + return '残蚀:是否改为摸'+get.cnNumber(num)+'张牌?'; + }, + content:function(){ + trigger.cancel(); + var num=game.countPlayer(function(current){ + if(player.hasZhuSkill('guiming')&¤t.group=='wu'&¤t!=player) return true; + return current.isDamaged(); + }); + if(num>0){ + player.draw(num); + } + player.addTempSkill('canshi2'); + } + }, + canshi2:{ + trigger:{player:'useCard'}, + forced:true, + filter:function(event,player){ + if(player.countCards('he')==0) return false; + var type=get.type(event.card,'trick'); + return type=='basic'||type=='trick'; + }, + content:function(){ + if(!event.isMine()||_status.connectMode) game.delay(0.5); + player.chooseToDiscard(true,'he'); + } + }, + chouhai:{ + audio:2, + trigger:{player:'damageBegin'}, + forced:true, + check:function(){ + return false; + }, + filter:function(event,player){ + return player.countCards('h')==0; + }, + content:function(){ + trigger.num++; + }, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(get.tag(card,'damage')&&target.countCards('h')==0) return [1,-2]; + } + } + } + }, + kunfen:{ + audio:2, + trigger:{player:'phaseEnd'}, + direct:true, + content:function(){ + "step 0" + if(player.storage.kunfen|| + (get.mode()=='guozhan'&&player.hiddenSkills.contains('kunfen'))){ + if(!player.storage.kunfen){ + event.skillHidden=true; + } + player.chooseBool(get.prompt('kunfen')).set('ai',function(){ + var player=_status.event.player; + if(player.hp>3) return true; + if(player.hp==3&&player.countCards('h')<3) return true; + if(player.hp==2&&player.countCards('h')==0) return true; + return false; + }); + } + else{ + event.forced=true; + } + "step 1" + if(event.forced||result.bool){ + player.logSkill('kunfen'); + player.loseHp(); + } + else{ + event.finish(); + } + "step 2" + player.draw(2); + }, + ai:{ + threaten:1.5 + } + }, + fengliang:{ + skillAnimation:true, + unique:true, + audio:2, + derivation:'tiaoxin', + trigger:{player:'dying'}, + priority:10, + forced:true, + filter:function(event,player){ + return !player.storage.kunfen; + }, + content:function(){ + "step 0" + player.loseMaxHp(); + "step 1" + if(player.hp<2){ + player.recover(2-player.hp); + } + "step 2" + player.addSkill('tiaoxin'); + player.storage.kunfen=true; + player.awakenSkill('fengliang'); + }, + }, + zhuiji:{ + mod:{ + globalFrom:function(from,to){ + if(from.hp>to.hp) return -Infinity; + } + } + }, + cihuai:{ + trigger:{player:'phaseUseBegin'}, + direct:true, + filter:function(event,player){ + return player.countCards('h','sha')==0; + }, + content:function(){ + "step 0" + player.chooseTarget(get.prompt('cihuai'),function(card,player,target){ + return player.canUse({name:'sha'},target); + }).set('ai',function(target){ + var player=_status.event.player; + return get.effect(target,{name:'sha'},player,player); + }); + "step 1" + if(result.bool){ + player.logSkill('cihuai'); + player.showHandcards(); + player.useCard({name:'sha'},result.targets); + } + }, + ai:{ + expose:0.2, + } + }, + jilei:{ + trigger:{player:'damageEnd'}, + priority:9, + audio:2, + direct:true, + filter:function(event){ + return event&&event.source; + }, + content:function(){ + 'step 0' + player.chooseControl('basic','trick','equip','cancel2',function(){ + var source=_status.event.source; + if(get.attitude(_status.event.player,source)>0) return 'cancel2'; + if(_status.currentPhase!=source) return 'trick'; + if(lib.filter.cardUsable({name:'sha'},source)&&source.countCards('h')>=2) return 'basic'; + return 'trick'; + }).set('prompt',get.prompt('jilei',trigger.source)).set('source',trigger.source); + 'step 1' + if(result.control!='cancel2'){ + player.logSkill('jilei',trigger.source); + player.popup(get.translation(result.control)+'牌'); + trigger.source.storage.jilei2=result.control; + trigger.source.addTempSkill('jilei2'); + } + }, + ai:{ + maixie_defend:true, + threaten:0.7 + } + }, + jilei2:{ + unique:true, + intro:{ + content:function(storage){ + return '不能使用、打出或弃置'+get.translation(storage)+'牌'; + } + }, + mark:true, + onremove:true, + mod:{ + cardDiscardable:function(card,player){ + if(player.storage.jilei2==get.type(card,'trick')) return false; + }, + cardEnabled:function(card,player){ + if(player.storage.jilei2==get.type(card,'trick')) return false; + }, + cardUsable:function(card,player){ + if(player.storage.jilei2==get.type(card,'trick')) return false; + }, + cardRespondable:function(card,player){ + if(player.storage.jilei2==get.type(card,'trick')) return false; + }, + cardSavable:function(card,player){ + if(player.storage.jilei2==get.type(card,'trick')) return false; + }, + }, + }, + danlao:{ + priority:9, + audio:2, + filter:function(event,player){ + return event.player!=player&&get.type(event.card)=='trick'&&event.targets&&event.targets.length>1; + }, + check:function(event,player){ + return get.tag(event.card,'multineg')||get.effect(player,event.card,event.player,player)<=0; + }, + trigger:{target:'useCardToBefore'}, + content:function(){ + trigger.cancel(); + player.draw(); + }, + ai:{ + effect:{ + target:function(card){ + if(get.type(card)!='trick') return; + if(card.name=='tiesuo') return [0,0]; + if(card.name=='yihuajiemu') return [0,1]; + if(get.tag(card,'multineg')) return [0,2]; + } + } + } + }, + taichen:{ + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return player.canUse('sha',target); + }, + content:function(){ + "step 0" + player.loseHp(); + "step 1" + player.useCard({name:'sha'},target,false); + }, + ai:{ + order:1, + result:{ + target:function(player,target){ + if(player.hp>2&&player.hp>target.hp&&target.countCards('he')<4){ + return get.effect(target,{name:'sha'},player,target); + } + return 0; + } + } + } + }, + manjuan:{ + audio:true, + trigger:{global:'discardAfter'}, + filter:function(event,player){ + if(event.player==player) return false; + if(!player.countCards('he')) return false; + for(var i=0;imaxval){ + maxval=tempval; + } + } + maxval+=cards.length-1; + var next=player.chooseToDiscard('he',{suit:suits}); + next.set('ai',function(card){ + return _status.event.maxval-get.value(card); + }); + next.set('maxval',maxval); + next.set('dialog',[get.prompt(event.name),'hidden',cards]) + next.logSkill=event.name; + event.cards=cards; + } + "step 2" + if(result.bool){ + player.gain(event.cards,'gain2','log'); + } + }, + ai:{ + threaten:1.3 + } + }, + zuixiang:{ + skillAnimation:true, + audio:true, + unique:true, + mark:true, + trigger:{player:'phaseBegin'}, + priority:10, + filter:function(event,player){ + if(player.storage.zuixiang) return false; + return true; + }, + check:function(event,player){ + return player.countCards('h')0; + }, + direct:true, + content:function(){ + "step 0" + var next=player.chooseToDiscard('协穆:是否弃置一张杀并摸两张牌?',{name:'sha'}); + next.set('ai',function(card){ + return 9-get.value(card); + }); + next.logSkill='xiemu'; + "step 1" + if(result.bool){ + player.draw(2); + } + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(get.color(card)=='black'&&target.countCards('h')>0){ + return [1,0.5]; + } + } + } + } + }, + spmengjin:{ + trigger:{player:'shaBegin'}, + filter:function(event,player){ + return event.target.countCards('he')>0; + }, + direct:true, + content:function(){ + "step 0" + var att=get.attitude(player,trigger.target); + player.choosePlayerCard(get.prompt('spmengjin',trigger.target),'he',trigger.target).ai=function(button){ + var val=get.buttonValue(button); + if(att>0) return -val; + return val; + }; + "step 1" + if(result.bool){ + trigger.target.discard(result.links); + player.logSkill('spmengjin',trigger.target); + trigger.target.addTempSkill('mengjin2','shaAfter'); + } + }, + ai:{ + expose:0.2 + } + }, + fenxun_old:{ + audio:2, + trigger:{player:'shaBefore'}, + direct:true, + filter:function(event,player){ + return event.targets.length==1; + }, + position:'he', + content:function(){ + "step 0" + player.chooseCardTarget({ + filterCard:lib.filter.cardDiscardable, + filterTarget:function(card,player,target){ + var trigger=_status.event.getTrigger(); + return lib.filter.targetEnabled(trigger.card,player,target)&&target!=trigger.targets[0]; + }, + ai1:function(card){ + return 6-get.value(card); + }, + ai2:function(target){ + var trigger=_status.event.getTrigger(); + var player=_status.event.player; + return get.effect(target,trigger.card,player,player); + }, + prompt:get.prompt('fenxun') + }); + "step 1" + if(result.bool){ + player.discard(result.cards); + trigger.targets.push(result.targets[0]); + player.logSkill('fenxun',result.targets); + } + } + }, + zhoufu:{ + audio:2, + enable:'phaseUse', + usable:1, + filterCard:true, + filterTarget:function(card,player,target){ + return player!=target&&!target.hasSkill('zhoufu2'); + }, + prepare:'throw', + discard:false, + content:function(){ + target.$gain2(cards); + target.storage.zhoufu2=cards[0]; + target.addSkill('zhoufu2'); + target.storage.zhoufu3=player; + ui.special.appendChild(cards[0]); + target.syncStorage('zhoufu2'); + }, + check:function(card){ + return 6-get.value(card) + }, + ai:{ + expose:0.1, + order:1, + result:{ + player:1 + } + } + }, + zhoufu2:{ + trigger:{player:'judge'}, + forced:true, + priority:10, + mark:'card', + content:function(){ + "step 0" + player.$throw(player.storage.zhoufu2); + game.broadcastAll(function(card){ + if(card.clone){ + card.clone.classList.add('thrownhighlight'); + } + },player.storage.zhoufu2); + if(player.judging[0].clone){ + player.judging[0].clone.classList.remove('thrownhighlight'); + game.broadcast(function(card){ + if(card.clone){ + card.clone.classList.remove('thrownhighlight'); + } + },player.judging[0]); + game.addVideo('deletenode',player,get.cardsInfo([player.judging[0].clone])); + } + player.judging[0]=player.storage.zhoufu2; + trigger.position.appendChild(player.storage.zhoufu2); + game.log(player,'的判定牌改为',player.storage.zhoufu2); + game.delay(2); + player.removeSkill('zhoufu2'); + delete player.storage.zhoufu2; + delete player.storage.zhoufu2_markcount; + if(player.storage.zhoufu3.isIn()){ + player.storage.zhoufu3.line(player,'green'); + } + "step 1" + player.addTempSkill('zhoufu3'); + }, + intro:{ + content:'card' + } + }, + zhoufu3:{ + trigger:{player:'phaseEnd'}, + silent:true, + content:function(){ + if(player.storage.zhoufu3.isIn()){ + player.storage.zhoufu3.logSkill('zhoufu',player); + player.loseHp(); + } + delete player.storage.zhoufu3; + }, + onremove:true + }, + yingbin:{ + audio:2, + trigger:{global:'useCard'}, + filter:function(event,player){ + return event.player.hasSkill('zhoufu2')&&event.player.storage.zhoufu3==player&& + get.suit(event.player.storage.zhoufu2)==get.suit(event.card); + }, + forced:true, + autodelay:true, + content:function(){ + player.draw(); + if(trigger.player.storage.zhoufu2_markcount==1){ + trigger.player.removeSkill('zhoufu2'); + delete trigger.player.storage.zhoufu2; + delete trigger.player.storage.zhoufu2_markcount; + delete trigger.player.storage.zhoufu3; + } + else{ + trigger.player.storage.zhoufu2_markcount=1; + trigger.player.updateMark('zhoufu2'); + } + } + }, + kuiwei:{ + audio:2, + trigger:{player:'phaseEnd'}, + check:function(event,player){ + if(player.isTurnedOver()) return true; + var num=game.countPlayer(function(current){ + return current.getEquip(1); + }); + return num>1; + }, + content:function(){ + "step 0" + player.turnOver(); + "step 1" + var num=game.countPlayer(function(current){ + return current.getEquip(1); + }); + player.draw(2+num); + player.addSkill('kuiwei2'); + }, + ai:{ + effect:{ + target:function(card){ + if(card.name=='guiyoujie') return [0,2]; + } + } + } + }, + kuiwei2:{ + trigger:{player:'phaseDrawBegin'}, + forced:true, + audio:false, + content:function(){ + var num=game.countPlayer(function(current){ + return current.getEquip(1); + }); + if(num>=player.countCards('he')){ + player.discard(player.getCards('he')); + } + else if(num){ + player.chooseToDiscard('he',num,true); + } + player.removeSkill('kuiwei2'); + } + }, + yanzheng:{ + enable:'chooseToUse', + audio:2, + filter:function(event,player){ + return player.hp0; + }, + viewAsFilter:function(player){ + return player.hp0; + }, + filterCard:true, + position:'e', + viewAs:{name:'wuxie'}, + prompt:'将一张装备区内的牌当无懈可击使用', + check:function(card){return 8-get.equipValue(card)}, + threaten:1.2 + }, + tongji:{ + global:'tongji_disable', + unique:true, + gainnable:true, + subSkill:{ + disable:{ + mod:{ + targetEnabled:function(card,player,target){ + if(player.hasSkill('tongji')) return; + if(card.name=='sha'){ + if(target.hasSkill('tongji')) return; + if(game.hasPlayer(function(current){ + return current.hasSkill('tongji')&¤t.hp=0; + }, + content:function(){ + "step 0" + player.draw(); + if(trigger.target!=player){ + player.chooseCard(true,'he','交给'+get.translation(trigger.target)+'一张牌').set('ai',function(card){ + if(get.position(card)=='e') return -1; + if(card.name=='shan') return 1; + if(get.type(card)=='equip') return 0.5; + return 0; + }); + } + else{ + event.finish(); + } + "step 1" + trigger.target.gain(result.cards,player); + player.$give(result.cards,trigger.target); + game.delay(); + event.card=result.cards[0]; + if(get.type(event.card)!='equip') event.finish(); + "step 2" + if(!trigger.target.isMin()){ + trigger.target.chooseBool('是否装备'+get.translation(event.card)+'?').set('ai',function(){ + var current=_status.event.player.getCards('e',{subtype:get.subtype(_status.event.card)}); + if(current&¤t.length){ + return get.equipValue(event.card)>get.equipValue(current[0]); + } + return true; + }).set('card',event.card); + } + else{ + event.finish(); + } + "step 3" + if(result.bool){ + trigger.target.equip(event.card); + } + }, + ai:{ + threaten:1.1 + } + }, + liangzhu:{ + audio:2, + trigger:{global:'recoverAfter'}, + direct:true, + filter:function(event,player){ + return _status.currentPhase==event.player; + }, + content:function(){ + 'step 0' + if(player==trigger.player){ + player.chooseControl('摸一张','摸两张','cancel2',function(){ + return '摸两张'; + }).set('prompt',get.prompt('liangzhu')); + event.single=true; + } + else{ + player.chooseTarget(get.prompt('liangzhu'),function(card,player,target){ + return target==_status.event.player||target==_status.event.target; + }).set('target',trigger.player).set('ai',function(target){ + var player=_status.event.player; + if(player==target) return 1; + return get.attitude(player,target)-1.5; + }); + } + 'step 1' + if(event.single){ + if(result.control!='cancel2'){ + player.logSkill('liangzhu',player); + if(result.control=='摸一张'){ + player.draw(); + } + else{ + player.draw(2); + player.storage.liangzhu=player; + } + } + } + else if(result.bool){ + var target=result.targets[0]; + player.logSkill('liangzhu',target); + if(target==player){ + target.draw(); + } + else{ + target.draw(2); + if(target.storage.liangzhu){ + target.storage.liangzhu.add(player); + } + else{ + target.storage.liangzhu=[player]; + } + } + } + }, + ai:{ + expose:0.1 + } + }, + fanxiang:{ + skillAnimation:true, + animationColor:'fire', + audio:2, + unique:true, + forceunique:true, + derivation:'xiaoji', + trigger:{player:'phaseBegin'}, + filter:function(event,player){ + if(player.storage.fanxiang) return false; + return game.hasPlayer(function(current){ + return current.storage.liangzhu&¤t.storage.liangzhu.contains(player)&¤t.isDamaged(); + }); + }, + forced:true, + content:function(){ + player.storage.fanxiang=true; + player.gainMaxHp(); + player.recover(); + player.removeSkill('liangzhu'); + player.addSkill('xiaoji'); + player.awakenSkill('fanxiang'); + }, + }, + mingshi:{ + audio:2, + trigger:{player:'damageBegin'}, + direct:true, + filter:function(event,player){ + return event.source&&event.source.hp>player.hp; + }, + content:function(){ + "step 0" + var next=player.chooseToDiscard(get.prompt('mingshi'),{color:'black'}); + next.set('ai',function(card){ + return 9-get.value(card); + }); + next.set('logSkill','mingshi'); + "step 1" + if(result.bool){ + trigger.num--; + } + }, + ai:{ + threaten:0.8 + } + }, + lirang:{ + audio:2, + trigger:{player:'discardAfter'}, + filter:function(event,player){ + for(var i=0;i1; + }); + } + player.chooseCardButton(get.prompt('lirang'),event.cards,[1,event.cards.length]).set('ai',function(button){ + if(!_status.event.goon||ui.selected.buttons.length) return 0; + if(button.link.name=='du') return 2; + return 1; + }).set('goon',goon); + } + else{ + event.finish(); + } + "step 2" + if(result.bool){ + event.togive=result.links.slice(0); + player.chooseTarget('将'+get.translation(result.links)+'交给一名角色',true,function(card,player,target){ + return target!=player; + }).set('ai',function(target){ + var att=get.attitude(_status.event.player,target); + if(_status.event.enemy){ + return -att; + } + else{ + if(att>2) return att/Math.sqrt(1+target.countCards('h')); + return att/Math.sqrt(1+target.countCards('h'))/5; + } + }).set('enemy',get.value(event.togive[0])<0); + } + else{ + for(var i=0;i0; + }, + content:function(){ + trigger.target.discardPlayerCard(player,true); + } + }, + shenxian:{ + audio:2, + trigger:{global:'discardAfter'}, + filter:function(event,player){ + if(event.player==player||_status.currentPhase==player) return false; + if(player.hasSkill('shenxian2')) return false; + for(var i=0;iplayer.storage.qiangwu) return Infinity; + } + }, + group:['qiangwu2','qiangwu3'] + }, + qiangwu2:{ + trigger:{player:'phaseUseBegin'}, + silent:true, + content:function(){ + delete player.storage.qiangwu; + } + }, + qiangwu3:{ + trigger:{player:'useCard'}, + filter:function(event,player){ + if(_status.currentPhase==player&&event.card.name=='sha'&& + event.card.number>player.storage.qiangwu) return true; + return false; + }, + forced:true, + popup:false, + content:function(){ + if(player.stat[player.stat.length-1].card.sha>0){ + player.stat[player.stat.length-1].card.sha--; + } + }, + }, + zhendu:{ + audio:2, + trigger:{global:'phaseUseBegin'}, + filter:function(event,player){ + return event.player!=player&&player.countCards('h')>0; + }, + direct:true, + content:function(){ + "step 0" + var nono=(Math.abs(get.attitude(player,trigger.player))<3); + if(get.damageEffect(trigger.player,player,player)<=0){ + nono=true + } + else if(trigger.player.hp>2){ + nono=true; + } + else if(trigger.player.hp>1&&player.countCards('h')<3){ + nono=true; + } + else if(trigger.player.canUse('sha',player)&&!player.countCards('h','shan')&&trigger.player.countCards('h')>=3){ + nono=true; + } + var next=player.chooseToDiscard(get.prompt('zhendu',trigger.player)); + next.set('ai',function(card){ + if(_status.event.nono) return -1; + return 7-get.useful(card); + }); + next.set('logSkill',['zhendu',trigger.player]); + next.set('nono',nono); + "step 1" + if(result.bool){ + trigger.player.damage(); + } + else{ + event.finish(); + } + "step 2" + trigger.player.useCard({name:'jiu'},trigger.player); + }, + ai:{ + threaten:2, + expose:0.3 + } + }, + qiluan:{ + trigger:{source:'dieAfter'}, + priority:-10, + silent:true, + filter:function(event){ + return _status.currentPhase!=event.player; + }, + content:function(){ + if(!player.storage.qiluan){ + player.storage.qiluan=1; + } + else{ + player.storage.qiluan++; + } + }, + group:['qiluan2','qiluan3'] + }, + qiluan2:{ + audio:2, + trigger:{global:'phaseAfter'}, + forced:true, + filter:function(event,player){ + return player.storage.qiluan?true:false; + }, + content:function(){ + if(get.mode()=='guozhan'){ + player.draw(3); + } + else{ + player.draw(3*player.storage.qiluan); + } + player.storage.qiluan=0; + } + }, + qiluan3:{ + trigger:{source:'dieAfter'}, + forced:true, + priority:-10, + filter:function(event){ + return _status.currentPhase==event.player; + }, + content:function(){ + var num=3; + if(player.storage.qiluan){ + num+=3*player.storage.qiluan; + player.storage.qiluan=0; + } + player.draw(num); + }, + }, + shangyi:{ + audio:2, + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return player!=target&&target.countCards('h'); + }, + content:function(){ + "step 0" + player.chooseCardButton(target,target.getCards('h')).set('filterButton',function(button){ + return get.color(button.link)=='black'; + }); + "step 1" + if(result.bool){ + target.discard(result.links[0]); + } + }, + ai:{ + order:11, + result:{ + target:function(player,target){ + return -target.countCards('h'); + } + }, + threaten:1.1 + }, + }, + shengxi:{ + trigger:{player:'phaseDiscardBegin'}, + frequent:true, + filter:function(event,player){ + return !player.getStat('damage'); + }, + content:function(){ + player.draw(2); + }, + audio:2, + audioname:['liushan'] + }, + shoucheng:{ + trigger:{global:'loseEnd'}, + audio:2, + check:function(event,player){ + return get.attitude(player,event.player)>0; + }, + filter:function(event,player){ + if(event.player.countCards('h')) return false; + if(_status.currentPhase==event.player) return false; + for(var i=0;i0){ + return true; + } + }); + return num>=2; + }, + content:function(){ + "step 0" + var targets=game.filterPlayer(); + targets.remove(player); + targets.sort(lib.sort.seat); + event.targets=targets; + event.num=0; + trigger.cancel(); + player.line(targets,'green'); + "step 1" + if(num【勇决】
每当其他角色于回合内使用一张杀,若目标不是你,你可以获得之,每回合限一次
'); + "step 1" + player.turnOver(); + }, + intro:{ + content:'limited' + }, + ai:{ + order:4, + result:{ + target:function(player,target){ + if(target.isMin()) return 0; + if(player.hp>1){ + if(game.phaseNumber2) return 0; + if(get.attitude(player,target)<5) return 0; + } + if(get.attitude(player,target)<5) return 0; + if(target.hp==1&&target.maxHp>2) return 0.2; + if(target==game.me) return 1.2; + return 1; + } + }, + expose:0.5, + threaten:1.5 + } + }, + fenming:{ + audio:2, + trigger:{player:'phaseEnd'}, + check:function(event,player){ + var num=game.countPlayer(function(current){ + if(current.isLinked()&¤t.countCards('he')){ + return get.attitude(player,current); + } + }); + return num<0; + }, + filter:function(event,player){ + return player.isLinked(); + }, + content:function(){ + "step 0" + event.targets=game.filterPlayer(function(current){ + if(current.isLinked()&¤t.countCards('he')){ + return true; + } + }); + event.num=0; + event.targets.sort(lib.sort.seat); + "step 1" + if(event.num=0); + trigger.player.chooseToDiscard('he',{type:'equip'}).set('ai',function(card){ + if(_status.event.nono){ + return 0; + } + if(_status.event.player.hp==1) return 10-get.value(card); + return 9-get.value(card); + }).set('nono',nono); + } + else{ + event.finish(); + } + "step 2" + if(result.bool){ + player.draw(); + } + else{ + trigger.player.damage(); + } + }, + ai:{ + expose:0.3, + threaten:1.3 + } + }, + suishi:{ + trigger:{global:'dying'}, + forced:true, + popup:false, + priority:12, + check:function(){ + return false; + }, + filter:function(event,player){ + return event.player!=player&&event.parent.name=='damage'&&event.parent.source&&event.parent.source!=event.player; + }, + content:function(){ + 'step 0' + var str; + if(trigger.parent.source==player){ + str='随势:是否摸一张牌?'; + } + else{ + str='随势:是否令'+get.translation(player)+'摸一张牌?' + } + trigger.parent.source.chooseBool(str).set('ai',function(){ + return get.attitude(_status.event.player,_status.event.target)>0; + }).set('target',player); + 'step 1' + if(result.bool){ + player.logSkill('suishi'); + trigger.parent.source.line(player,'green'); + player.draw(); + } + }, + group:'suishi2' + }, + suishi2:{ + trigger:{global:'dieAfter'}, + forced:true, + popup:false, + check:function(){ + return false; + }, + filter:function(event,player){ + return event.player!=player&&event.source&&event.source!=player&&event.source!=event.player; + }, + content:function(){ + 'step 0' + var str; + if(trigger.source==player){ + str='随势:是否流失一点体力?'; + } + else{ + str='随势:是否令'+get.translation(player)+'流失一点体力?' + } + trigger.source.chooseBool(str).set('ai',function(){ + return get.attitude(_status.event.player,_status.event.target)<0; + }).set('target',player); + 'step 1' + if(result.bool){ + player.logSkill('suishi'); + trigger.source.line(player,'green'); + player.loseHp(); + } + }, + }, + sijian:{ + trigger:{player:'loseEnd'}, + direct:true, + audio:2, + filter:function(event,player){ + if(player.countCards('h')) return false; + for(var i=0;i0; + }).set('ai',function(target){ + return -get.attitude(_status.event.player,target); + }); + "step 1" + if(result.bool){ + player.logSkill('sijian',result.targets); + event.target=result.targets[0]; + player.discardPlayerCard(event.target,true); + } + else{ + event.finish(); + } + }, + ai:{ + expose:0.2, + } + }, + quji:{ + enable:'phaseUse', + usable:1, + position:'he', + filterCard:true, + selectCard:function(){ + var player=_status.event.player; + var num=game.countPlayer(function(current){ + return current.isDamaged(); + }); + return [1,Math.min(num,player.maxHp-player.hp)]; + }, + filterTarget:function(card,player,target){ + return target.hp=game.countPlayer(function(current){ + return get.attitude(player,current)>0&¤t.isDamaged(); + })){ + return -1; + } + if(get.color(card)=='black') return -1; + return 9-get.value(card); + }, + content:function(){ + "step 0" + target.recover(); + "step 1" + if(target==player){ + for(var i=0;i1) return false; + return game.hasPlayer(function(current){ + return current.hasSkill('junbing'); + }); + }, + check:function(event,player){ + var target=game.findPlayer(function(current){ + return current.hasSkill('junbing'); + }); + if(target){ + var num=target.countCards('h'); + var att=get.attitude(player,target); + if(num==0) return true; + if(num==1) return att>-1; + if(num==2) return att>0; + return att>1; + } + return false; + }, + content:function(){ + "step 0" + player.draw(); + if(player.hasSkill('junbing')){ + event.finish(); + } + else{ + event.target=game.findPlayer(function(current){ + return current.hasSkill('junbing'); + }); + } + "step 1" + var cards=player.getCards('h'); + target.gain(cards,player); + event.num=cards.length; + player.$give(event.num,target); + game.delay(); + "step 2" + target.chooseCard('选择还给'+get.translation(player)+'的牌',true,event.num); + game.delay(0.2); + "step 3" + player.gain(result.cards,target); + target.$give(result.cards.length,player); + game.delay(); + } + }, + junbing:{ + global:'junbing2', + unique:true, + forceunique:true + }, + xiongyi:{ + skillAnimation:true, + unique:true, + enable:'phaseUse', + audio:2, + mark:true, + filter:function(event,player){ + return !player.storage.xiongyi; + }, + init:function(player){ + player.storage.xiongyi=false; + }, + filterTarget:function(card,player,target){ + if(get.mode()=='guozhan'){ + if(player==target) return true; + if(player.identity=='ye') return false; + if(player.identity=='unknown'){ + if(_status.yeidentity.contains(player._group)){ + return false; + } + else if(get.zhu(player)||get.population(player._group)+1<=get.population()/2){ + return player._group==target.identity; + } + else{ + return false; + } + } + return player.identity==target.identity; + } + else{ + return true; + } + }, + multitarget:true, + multiline:true, + selectTarget:function(){ + if(get.mode()=='guozhan') return -1; + return [1,3]; + }, + content:function(){ + "step 0" + player.storage.xiongyi=true; + player.awakenSkill('xiongyi'); + game.asyncDraw(targets,3); + "step 1" + if(player.isDamaged()){ + if(get.mode()=='guozhan'){ + if(player.isMinor()){ + player.recover(); + } + } + else if(targets.length<=2){ + player.recover(); + } + } + }, + intro:{ + content:'limited' + }, + ai:{ + order:1, + result:{ + target:function(player){ + var num=player.countCards('h'); + if(player.hp==1) return 1; + if(player.hp==2&&num<=2) return 1; + if(player.hp==3&&num<=1) return 1; + if(game.phaseNumber2) return false; + var cards=player.getCards('h'); + if(cards.length3) return false; + for(var i=0;i7||get.tag(cards[i],'recover')>=1) return false; + } + return true; + }, + filter:function(event,player){ + return player.countCards('h')>0; + }, + content:function(){ + "step 0" + var cards=player.getCards('h'); + event.bool=cards.length>=player.hp; + player.discard(cards); + "step 1" + if(event.bool){ + player.recover(); + } + } + }, + wuji:{ + skillAnimation:true, + audio:2, + trigger:{player:'phaseEnd'}, + forced:true, + filter:function(event,player){ + return player.getStat('damage')>=3&&!player.storage.wuji; + }, + content:function(){ + "step 0" + player.removeSkill('huxiao'); + player.gainMaxHp(); + "step 1" + player.recover(); + player.awakenSkill('wuji'); + player.storage.wuji=true; - var card=get.cardPile('qinglong','field'); - if(card){ - player.gain(card,'gain2','log'); - } - } - }, - xueji_old:{ - audio:2, - enable:'phaseUse', - usable:1, - filter:function(event,player){ - return player.hp0; - }, - filterTarget:function(card,player,target){ - return player!=target&&get.distance(player,target,'attack')<=1; - }, - selectTarget:function(){ - return [1,_status.event.player.maxHp-_status.event.player.hp]; - }, - position:'he', - filterCard:function(card){ - return get.color(card)=='red'; - }, - check:function(card){ - return 8-get.useful(card); - }, - content:function(){ - "step 0" - target.damage(); - "step 1" - target.draw(); - }, - ai:{ - order:7, - result:{ - target:function(player,target){ - return get.damageEffect(target,player); - } - }, - threaten:function(player,target){ - if(target.hp==1) return 2; - if(target.hp==2) return 1.5; - return 0.5; - }, - maixie:true, - effect:{ - target:function(card,player,target){ - if(get.tag(card,'damage')){ - if(target.hp==target.maxHp&&target.hasFriend()) return [0,1]; - } - if(get.tag(card,'recover')&&player.hp>=player.maxHp-1) return [0,0]; - } - } - } - }, - xueji:{ - audio:2, - enable:'phaseUse', - usable:1, - filter:function(event,player){ - return player.countCards('he',{color:'red'})>0; - }, - filterTarget:true, - selectTarget:function(){ - var player=_status.event.player - return [1,Math.max(1,player.maxHp-player.hp)]; - }, - position:'he', - filterCard:{color:'red'}, - check:function(card){ - return 8-get.value(card); - }, - multitarget:true, - multiline:true, - line:'fire', - content:function(){ - 'step 0' - event.delay=false; - for(var i=0;i1; - })>=2); - } - if(get.is.versus()){ - event.versus=true; - player.chooseBool(get.prompt('hongyuan')); - } - else{ - player.chooseTarget(get.prompt('hongyuan'),[1,2],function(card,player,target){ - return player!=target; - },function(target){ - if(!_status.event.check) return 0; - return get.attitude(_status.event.player,target); - }).set('check',check); - } - "step 1" - if(result.bool){ - var targets; - if(event.versus){ - targets=game.filterPlayer(function(current){ - return current!=player&¤t.side==player.side; - }); - } - else{ - targets=result.targets; - } - player.logSkill('hongyuan',targets); - game.asyncDraw(targets); - trigger.num--; - } - }, - }, - huanshi:{ - audio:2, - trigger:{global:'judge'}, - filter:function(event,player){ - return player.countCards('he')>0; - }, - logTarget:'player', - check:function(event,player){ - if(get.attitude(player,event.player)<=0) return false; - var cards=player.getCards('he'); - var judge=event.judge(event.player.judging[0]); - for(var i=0;ijudge) 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){ - var card=button.link; - var judge=_status.event.judge; - var attitude=_status.event.attitude; - var result=trigger.judge(card)-judge; - var player=_status.event.player; - if(result>0){ - return 20+result; - } - if(result==0){ - if(_status.currentPhase==player) return 0; - if(attitude>=0){ - return get.color(card)=='red'?7:0-get.value(card); - } - else{ - return get.color(card)=='black'?10:0+get.value(card); - } - } - if(attitude>=0){ - return get.color(card)=='red'?0:-10+result; - } - else{ - return get.color(card)=='black'?0:-10+result; - } - }).set('judge',judge).set('attitude',attitude); - "step 1" - if(result.bool){ - event.card=result.links[0]; - player.respond(event.card,'highlight'); - } - else{ - event.finish(); - } - "step 2" - if(result.bool){ - if(trigger.player.judging[0].clone){ - trigger.player.judging[0].clone.classList.remove('thrownhighlight'); - game.broadcast(function(card){ - if(card.clone){ - card.clone.classList.remove('thrownhighlight'); - } - },trigger.player.judging[0]); - game.addVideo('deletenode',player,get.cardsInfo([trigger.player.judging[0].clone])); - } - trigger.player.judging[0].discard(); - trigger.player.judging[0]=event.card; - if(!get.owner(event.card,'judge')){ - trigger.position.appendChild(event.card); - } - game.log(trigger.player,'的判定牌改为',event.card); - game.delay(2); - } - }, - ai:{ - tag:{ - rejudge:1, - } - } - }, - mingzhe:{ - audio:2, - trigger:{player:['useCardAfter','respondAfter','discardAfter']}, - frequent:true, - filter:function(event,player){ - if(player==_status.currentPhase) return false; - if(event.cards){ - for(var i=0;i2) return current-1; - }, - globalTo:function(from,to,current){ - if(to.hp<=2) return current+1; - }, - }, - ai:{ - threaten:0.8 - } - }, - yongsi:{ - group:['yongsi1','yongsi2'], - ai:{ - threaten:2.2 - } - }, - yongsi1:{ - audio:2, - trigger:{player:'phaseDrawBegin'}, - forced:true, - content:function(){ - var list=['wei','shu','wu','qun']; - var num=game.countPlayer(function(current){ - if(list.contains(current.group)){ - list.remove(current.group); - return true; - } - }); - trigger.num+=num; - } - }, - yongsi2:{ - audio:2, - trigger:{player:'phaseDiscardBegin'}, - forced:true, - content:function(){ - var list=['wei','shu','wu','qun']; - var num=game.countPlayer(function(current){ - if(list.contains(current.group)){ - list.remove(current.group); - return true; - } - }); - player.chooseToDiscard(num,'he',true); - } - }, - bifa:{ - trigger:{player:'phaseEnd'}, - direct:true, - audio:2, - filter:function(event,player){ - return player.countCards('h')>0; - }, - content:function(){ - "step 0" - var players=game.filterPlayer(); - for(var i=0;itarget.hp){ - target.chooseToDiscard(2,'he',true); - } - else{ - target.draw(2); - } - target.storage.songci=true; - target.markSkill('songci'); - }, - intro:{ - content:'已发动' - }, - ai:{ - order:7, - threaten:1.5, - expose:0.2, - result:{ - target:function(player,target){ - if(target.countCards('h')target.hp){ - if(target.countCards('h')<=3) return -1; - } - } - } - } - }, - baobian:{ - trigger:{player:['phaseBefore','changeHp']}, - forced:true, - popup:false, - unique:true, - derivation:['tiaoxin','paoxiao','xinshensu'], - content:function(){ - player.removeAdditionalSkill('baobian'); - var list=[]; - if(player.hp<=3){ - list.push('tiaoxin'); - } - if(player.hp<=2){ - list.push('paoxiao'); - } - if(player.hp<=1){ - list.push('xinshensu'); - } - if(list.length){ - player.addAdditionalSkill('baobian',list); - } - }, - ai:{ - maixie:true, - effect:{ - target:function(card,player,target){ - if(get.tag(card,'damage')){ - if(!target.hasFriend()) return; - if(target.hp>=4) return [0,1]; - } - if(get.tag(card,'recover')&&player.hp>=player.maxHp-1) return [0,0]; - } - } - } - }, - chongzhen:{ - group:['chongzhen1','chongzhen2'], - ai:{ - combo:'longdan', - mingzhi:false, - effect:{ - target:function(card,player,target,current){ - if(get.tag(card,'respondShan')||get.tag(card,'respondSha')){ - if(get.attitude(target,player)<=0){ - if(current>0) return; - if(target.countCards('h')==0) return 1.6; - if(target.countCards('h')==1) return 1.2; - if(target.countCards('h')==2) return [0.8,0.2,0,-0.2]; - return [0.4,0.7,0,-0.7]; - } - } - }, - }, - } - }, - chongzhen1:{ - audio:2, - trigger:{player:'shaBefore'}, - filter:function(event,player){ - if(event.skill!='longdan_sha'&&event.skill!='fanghun_sha') return false; - return event.target.countCards('h')>0; - }, - logTarget:'target', - content:function(){ - var card=trigger.target.getCards('h').randomGet(); - player.gain(card,trigger.target); - trigger.target.$giveAuto(card,player); - game.delay(); - } - }, - chongzhen2:{ - audio:2, - trigger:{player:'respond'}, - filter:function(event,player){ - if(event.skill!='longdan_shan'&&event.skill!='longdan_sha'&& - event.skill!='fanghun_shan'&&event.skill!='fanghun_sha') return false; - return event.source&&event.source.countCards('h')>0; - }, - logTarget:'source', - content:function(){ - var card=trigger.source.getCards('h').randomGet(); - player.gain(card,trigger.source); - trigger.source.$giveAuto(card,player); - game.delay(); - } - }, - lihun:{ - audio:2, - enable:'phaseUse', - usable:1, - filterTarget:function(card,player,target){ - return player!=target&&target.sex=='male'; - }, - filterCard:true, - position:'he', - content:function(){ - player.gain(target.getCards('h'),target); - target.$give(target.countCards('h'),player); - player.turnOver(); - player.addSkill('lihun2'); - player.storage.lihun=target; - }, - check:function(card){return 8-get.value(card)}, - ai:{ - order:10, - result:{ - player:function(player){ - if(player.classList.contains('turnedover')) return 10; - return 0; - }, - target:function(player,target){ - if(target.countCards('h')>target.hp) return target.hp-target.countCards('h'); - return 0; - } - }, - threaten:1.5, - effect:{ - target:function(card){ - if(card.name=='guiyoujie') return [0,2]; - } - } - }, - }, - lihun2:{ - trigger:{player:'phaseUseEnd'}, - forced:true, - popup:false, - audio:false, - content:function(){ - "step 0" - player.removeSkill('lihun2'); - if(player.storage.lihun.classList.contains('dead')){ - event.finish(); - } - else{ - player.chooseCard('he',true,player.storage.lihun.hp); - } - "step 1" - player.storage.lihun.gain(result.cards,player); - player.$give(result.cards.length,player.storage.lihun); - } - }, - yuanhu:{ - audio:3, - trigger:{player:'phaseEnd'}, - direct:true, - filter:function(event,player){ - return player.countCards('he',{type:'equip'})>0; - }, - content:function(){ - "step 0" - player.chooseCardTarget({ - filterCard:function(card){ - return get.type(card)=='equip'; - }, - position:'he', - filterTarget:function(card,player,target){ - return !target.getEquip(card); - }, - ai1:function(card){ - return 6-get.value(card); - }, - ai2:function(target){ - return get.attitude(_status.event.player,target)-3; - }, - prompt:get.prompt('yuanhu') - }); - "step 1" - if(result.bool){ - player.logSkill('yuanhu',result.targets); - var thisTarget=result.targets[0]; - var thisCard=result.cards[0]; - thisTarget.equip(thisCard); - event.target=thisTarget; - if(thisTarget!=player){ - player.$give(thisCard,thisTarget); - } - switch(get.subtype(thisCard)){ - case 'equip1':{ - if(!game.hasPlayer(function(current){ - return get.distance(thisTarget,current)<=1; - })){ - event.finish(); - return; - } - game.delay(); - player.chooseTarget(true,function(card,player,target){ - return get.distance(_status.event.thisTarget,target)<=1&&target.countCards('hej'); - }).set('ai',function(target){ - var attitude=get.attitude(_status.event.player,target); - if(attitude>0&&target.countCards('j')){ - return attitude*1.5; - } - return -attitude; - }).set('thisTarget',thisTarget); - return; - } - case 'equip2':{ - thisTarget.draw();event.finish(); - return; - } - default:{ - thisTarget.recover(); - event.finish(); - return; - } - } - } - else{ - event.finish(); - } - "step 2" - if(result.targets.length){ - player.discardPlayerCard(true,result.targets[0],'hej'); - } - }, - }, - tianming:{ - audio:2, - trigger:{target:'shaBegin'}, - check:function(event,player){ - var cards=player.getCards('h'); - if(cards.length<=2){ - for(var i=0;iplayers[1].hp&&players[0]!=player){ - players[0].chooseBool(get.prompt('tianming')); - event.player=players[0]; - } - else{ - event.finish(); - } - "step 1" - if(result.bool){ - player.chooseToDiscard(2,true,'he'); - player.draw(2); - } - }, - ai:{ - effect:{ - target:function(card,player,target,current){ - if(card.name=='sha') return [1,0.5]; - } - } - } - }, - mizhao:{ - enable:'phaseUse', - usable:1, - audio:2, - filter:function(event,player){ - return player.countCards('h')>0; - }, - filterCard:true, - selectCard:-1, - filterTarget:function(card,player,target){ - return player!=target; - }, - discard:false, - prepare:'give2', - ai:{ - order:1, - result:{ - player:0, - target:function(player,target){ - if(player.countCards('h')>1){ - return 1; - } - var players=game.filterPlayer(); - for(var i=0;i0){ - return eff-10; - } - return eff; - }).set('target1',event.target1); - "step 2" - if(result.targets.length){ - event.target2=result.targets[0]; - event.target1.line(event.target2); - event.target1.chooseToCompare(event.target2); - } - else{ - event.finish(); - } - "step 3" - if(!result.tie){ - if(result.bool){ - event.target1.useCard({name:'sha'},event.target2); - } - else{ - event.target2.useCard({name:'sha'},event.target1); - } - } - } - }, - gongao:{ - audio:2, - trigger:{global:'dieAfter'}, - forced:true, - unique:true, - content:function(){ - player.gainMaxHp(); - player.recover(); - }, - ai:{ - threaten:1.5 - } - }, - juyi:{ - skillAnimation:true, - audio:true, - derivation:['benghuai','weizhong'], - trigger:{player:'phaseBegin'}, - filter:function(event,player){ - return player.maxHp>game.players.length&&player.hp0){ - player.draw(num); - } - player.addSkill('benghuai'); - player.addSkill('weizhong'); - player.storage.juyi=true; - player.awakenSkill('juyi'); - } - }, - weizhong:{ - audio:true, - trigger:{player:['gainMaxHpEnd','loseMaxHpEnd']}, - forced:true, - content:function(){ - player.draw(); - } - }, - chixin:{ - group:['chixin1','chixin2'], - mod:{ - cardUsable:function(card,player,num){ - if(card.name=='sha'){ - return num+20; - } - }, - }, - trigger:{player:'shaBefore'}, - forced:true, - popup:false, - check:function(event,player){ - return player.countCards('h','sha')>0; - }, - filter:function(event,player){ - return _status.currentPhase==player; - }, - content:function(){ - var target=trigger.target; - if(target.hasSkill('chixin3')){ - target.storage.chixin++; - } - else{ - target.storage.chixin=1; - target.addTempSkill('chixin3','phaseUseEnd'); - } - } - }, - chixin1:{ - enable:['chooseToRespond','chooseToUse'], - filterCard:{suit:'diamond'}, - position:'he', - viewAs:{name:'sha'}, - prompt:'将一张♦牌当杀使用或打出', - check:function(card){return 5-get.value(card)}, - ai:{ - respondSha:true, - } - }, - chixin2:{ - enable:['chooseToRespond'], - filterCard:{suit:'diamond'}, - viewAs:{name:'shan'}, - position:'he', - prompt:'将一张♦牌当闪打出', - check:function(card){return 5-get.value(card)}, - ai:{ - respondShan:true, - effect:{ - target:function(card,player,target,current){ - if(get.tag(card,'respondShan')&¤t<0) return 0.8 - } - }, - } - }, - chixin3:{ - mod:{ - targetEnabled:function(card,player,target){ - if(card.name!='sha') return; - if(player==_status.currentPhase&&player.hasSkill('chixin')){ - var num=player.getCardUsable(card,true)-20; - var players=game.filterPlayer(); - for(var i=0;i1; - } - } - } - }, - suiren:{ - trigger:{player:'phaseBegin'}, - skillAnimation:true, - filter:function(event,player){ - return !player.storage.suiren; - }, - intro:{ - content:'limited', - }, - mark:true, - direct:true, - unique:true, - content:function(){ - "step 0" - var check=(player.hp==1||(player.hp==2&&player.countCards('h')<=1)); - player.chooseTarget(get.prompt('suiren')).set('ai',function(target){ - if(!_status.event.check) return 0; - return get.attitude(_status.event.player,target); - }).set('check',check); - "step 1" - if(result.bool){ - player.storage.suiren=true; - player.awakenSkill('suiren'); - player.logSkill('suiren',result.targets); - player.removeSkill('yicong'); - player.gainMaxHp(); - player.recover(); - result.targets[0].draw(3); - } - } - }, - kuangfu:{ - trigger:{source:'damageEnd'}, - direct:true, - audio:2, - filter:function(event){ - if(event._notrigger.contains(event.player)) return false; - return event.card&&event.card.name=='sha'&&event.player.countCards('e'); - }, - content:function(){ - "step 0" - var neg=get.attitude(player,trigger.player)<=0; - player.choosePlayerCard('e',trigger.player).set('ai',function(button){ - if(_status.event.neg){ - return get.buttonValue(button); - } - return 0; - }).set('neg',neg); - "step 1" - if(result.bool){ - player.logSkill('kuangfu'); - trigger.player.$give(result.links,player); - game.delay(2); - player.equip(result.links[0]); - } - } - }, - }, - translate:{ - zhangren:'张任', - zoushi:'邹氏', - zangba:'臧霸', - jiling:'纪灵', - gz_sp_dongzhuo:'董卓', - gz_zhangjiao:'张角', - litong:'李通', - mizhu:'糜竺', - buzhi:'步骘', - chenlin:'陈琳', - yuanshu:'袁术', - re_yuanshu:'新袁术', - gongsunzan:'公孙瓒', - sp_diaochan:'sp貂蝉', - yangxiu:'杨修', - sp_zhaoyun:'sp赵云', - jsp_zhaoyun:'界sp赵云', - caohong:'曹洪', - liuxie:'刘协', - xiahouba:'夏侯霸', - zhugejin:'诸葛谨', - zhugeke:'诸葛恪', - guanyinping:'关银屏', - ganfuren:'甘夫人', - sunhao:'孙皓', - chengyu:'程昱', - simalang:'司马朗', - zhangliang:'张梁', - tianfeng:'田丰', - sp_pangtong:'sp庞统', - sp_jiaxu:'sp贾诩', - maliang:'马良', - sp_caoren:'sp曹仁', - yuejin:'乐进', - mifuren:'糜夫人', - sp_dongzhuo:'sp董卓', - chendong:'陈武董袭', - jiangfei:'蒋琬费祎', - jiangqing:'蒋钦', - hetaihou:'何太后', - dingfeng:'丁奉', - zhangxingcai:'张星彩', - caoang:'曹昂', - kongrong:'孔融', - fuwan:'伏完', - sp_pangde:'sp庞德', - sp_sunshangxiang:'孙尚香', - zhugedan:'诸葛诞', - sp_machao:'sp马超', - sp_jiangwei:'sp姜维', - zhangbao:'张宝', - yangxiou:'杨修', - shixie:'士燮', - mayunlu:'马云騄', - zhanglu:'张鲁', - wutugu:'兀突骨', - mateng:'马腾', - sp_caiwenji:'sp蔡文姬', - zhugeguo:'诸葛果', - liuzan:'留赞', - lingcao:'凌操', - sunru:'孙茹', - lingju:'灵雎', - lifeng:'李丰', - jsp_guanyu:'sp关羽', - zhuling:'朱灵', - sunluyu:'孙鲁育', - hanba:'旱魃', - panfeng:'潘凤', - zumao:'祖茂', - daxiaoqiao:'大小乔', - sp_daqiao:'sp大乔', - sp_ganning:'sp甘宁', - sp_zhangfei:'sp张飞', - sp_xiahoudun:'sp夏侯惇', - cuiyan:'崔琰', - wenpin:'文聘', - jsp_huangyueying:'sp黄月英', - sp_lvmeng:'sp吕蒙', - wangji:'王基', - guansuo:'关索', - tadun:'蹋顿', - yanbaihu:'严白虎', - wanglang:'王朗', - sp_liubei:'sp刘备', - caochun:'曹纯', - dongbai:'董白', - zhaoxiang:'赵襄', - heqi:'贺齐', - kanze:'阚泽', - dongyun:'董允', - mazhong:'马忠', - huangfusong:'皇甫嵩', - miheng:'祢衡', - taoqian:'陶谦', - wangyun:'王允', - sunqian:'孙乾', - xizhicai:'戏志才', - quyi:'麹义', - liuye:'刘晔', + var card=get.cardPile('qinglong','field'); + if(card){ + player.gain(card,'gain2','log'); + } + } + }, + xueji_old:{ + audio:2, + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.hp0; + }, + filterTarget:function(card,player,target){ + return player!=target&&get.distance(player,target,'attack')<=1; + }, + selectTarget:function(){ + return [1,_status.event.player.maxHp-_status.event.player.hp]; + }, + position:'he', + filterCard:function(card){ + return get.color(card)=='red'; + }, + check:function(card){ + return 8-get.useful(card); + }, + content:function(){ + "step 0" + target.damage(); + "step 1" + target.draw(); + }, + ai:{ + order:7, + result:{ + target:function(player,target){ + return get.damageEffect(target,player); + } + }, + threaten:function(player,target){ + if(target.hp==1) return 2; + if(target.hp==2) return 1.5; + return 0.5; + }, + maixie:true, + effect:{ + target:function(card,player,target){ + if(get.tag(card,'damage')){ + if(target.hp==target.maxHp&&target.hasFriend()) return [0,1]; + } + if(get.tag(card,'recover')&&player.hp>=player.maxHp-1) return [0,0]; + } + } + } + }, + xueji:{ + audio:2, + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.countCards('he',{color:'red'})>0; + }, + filterTarget:true, + selectTarget:function(){ + var player=_status.event.player + return [1,Math.max(1,player.maxHp-player.hp)]; + }, + position:'he', + filterCard:{color:'red'}, + check:function(card){ + return 8-get.value(card); + }, + multitarget:true, + multiline:true, + line:'fire', + content:function(){ + 'step 0' + event.delay=false; + for(var i=0;i1; + })>=2); + } + if(get.is.versus()){ + event.versus=true; + player.chooseBool(get.prompt('hongyuan')); + } + else{ + player.chooseTarget(get.prompt('hongyuan'),[1,2],function(card,player,target){ + return player!=target; + },function(target){ + if(!_status.event.check) return 0; + return get.attitude(_status.event.player,target); + }).set('check',check); + } + "step 1" + if(result.bool){ + var targets; + if(event.versus){ + targets=game.filterPlayer(function(current){ + return current!=player&¤t.side==player.side; + }); + } + else{ + targets=result.targets; + } + player.logSkill('hongyuan',targets); + game.asyncDraw(targets); + trigger.num--; + } + }, + }, + huanshi:{ + audio:2, + trigger:{global:'judge'}, + filter:function(event,player){ + return player.countCards('he')>0; + }, + logTarget:'player', + check:function(event,player){ + if(get.attitude(player,event.player)<=0) return false; + var cards=player.getCards('he'); + var judge=event.judge(event.player.judging[0]); + for(var i=0;ijudge) 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){ + var card=button.link; + var judge=_status.event.judge; + var attitude=_status.event.attitude; + var result=trigger.judge(card)-judge; + var player=_status.event.player; + if(result>0){ + return 20+result; + } + if(result==0){ + if(_status.currentPhase==player) return 0; + if(attitude>=0){ + return get.color(card)=='red'?7:0-get.value(card); + } + else{ + return get.color(card)=='black'?10:0+get.value(card); + } + } + if(attitude>=0){ + return get.color(card)=='red'?0:-10+result; + } + else{ + return get.color(card)=='black'?0:-10+result; + } + }).set('judge',judge).set('attitude',attitude); + "step 1" + if(result.bool){ + event.card=result.links[0]; + player.respond(event.card,'highlight'); + } + else{ + event.finish(); + } + "step 2" + if(result.bool){ + if(trigger.player.judging[0].clone){ + trigger.player.judging[0].clone.classList.remove('thrownhighlight'); + game.broadcast(function(card){ + if(card.clone){ + card.clone.classList.remove('thrownhighlight'); + } + },trigger.player.judging[0]); + game.addVideo('deletenode',player,get.cardsInfo([trigger.player.judging[0].clone])); + } + trigger.player.judging[0].discard(); + trigger.player.judging[0]=event.card; + if(!get.owner(event.card,'judge')){ + trigger.position.appendChild(event.card); + } + game.log(trigger.player,'的判定牌改为',event.card); + game.delay(2); + } + }, + ai:{ + tag:{ + rejudge:1, + } + } + }, + mingzhe:{ + audio:2, + trigger:{player:['useCardAfter','respondAfter','discardAfter']}, + frequent:true, + filter:function(event,player){ + if(player==_status.currentPhase) return false; + if(event.cards){ + for(var i=0;i2) return current-1; + }, + globalTo:function(from,to,current){ + if(to.hp<=2) return current+1; + }, + }, + ai:{ + threaten:0.8 + } + }, + yongsi:{ + group:['yongsi1','yongsi2'], + ai:{ + threaten:2.2 + } + }, + yongsi1:{ + audio:2, + trigger:{player:'phaseDrawBegin'}, + forced:true, + content:function(){ + var list=['wei','shu','wu','qun']; + var num=game.countPlayer(function(current){ + if(list.contains(current.group)){ + list.remove(current.group); + return true; + } + }); + trigger.num+=num; + } + }, + yongsi2:{ + audio:2, + trigger:{player:'phaseDiscardBegin'}, + forced:true, + content:function(){ + var list=['wei','shu','wu','qun']; + var num=game.countPlayer(function(current){ + if(list.contains(current.group)){ + list.remove(current.group); + return true; + } + }); + player.chooseToDiscard(num,'he',true); + } + }, + bifa:{ + trigger:{player:'phaseEnd'}, + direct:true, + audio:2, + filter:function(event,player){ + return player.countCards('h')>0; + }, + content:function(){ + "step 0" + var players=game.filterPlayer(); + for(var i=0;itarget.hp){ + target.chooseToDiscard(2,'he',true); + } + else{ + target.draw(2); + } + target.storage.songci=true; + target.markSkill('songci'); + }, + intro:{ + content:'已发动' + }, + ai:{ + order:7, + threaten:1.5, + expose:0.2, + result:{ + target:function(player,target){ + if(target.countCards('h')target.hp){ + if(target.countCards('h')<=3) return -1; + } + } + } + } + }, + baobian:{ + trigger:{player:['phaseBefore','changeHp']}, + forced:true, + popup:false, + unique:true, + derivation:['tiaoxin','paoxiao','xinshensu'], + content:function(){ + player.removeAdditionalSkill('baobian'); + var list=[]; + if(player.hp<=3){ + list.push('tiaoxin'); + } + if(player.hp<=2){ + list.push('paoxiao'); + } + if(player.hp<=1){ + list.push('xinshensu'); + } + if(list.length){ + player.addAdditionalSkill('baobian',list); + } + }, + ai:{ + maixie:true, + effect:{ + target:function(card,player,target){ + if(get.tag(card,'damage')){ + if(!target.hasFriend()) return; + if(target.hp>=4) return [0,1]; + } + if(get.tag(card,'recover')&&player.hp>=player.maxHp-1) return [0,0]; + } + } + } + }, + chongzhen:{ + group:['chongzhen1','chongzhen2'], + ai:{ + combo:'longdan', + mingzhi:false, + effect:{ + target:function(card,player,target,current){ + if(get.tag(card,'respondShan')||get.tag(card,'respondSha')){ + if(get.attitude(target,player)<=0){ + if(current>0) return; + if(target.countCards('h')==0) return 1.6; + if(target.countCards('h')==1) return 1.2; + if(target.countCards('h')==2) return [0.8,0.2,0,-0.2]; + return [0.4,0.7,0,-0.7]; + } + } + }, + }, + } + }, + chongzhen1:{ + audio:2, + trigger:{player:'shaBefore'}, + filter:function(event,player){ + if(event.skill!='longdan_sha'&&event.skill!='fanghun_sha') return false; + return event.target.countCards('h')>0; + }, + logTarget:'target', + content:function(){ + var card=trigger.target.getCards('h').randomGet(); + player.gain(card,trigger.target); + trigger.target.$giveAuto(card,player); + game.delay(); + } + }, + chongzhen2:{ + audio:2, + trigger:{player:'respond'}, + filter:function(event,player){ + if(event.skill!='longdan_shan'&&event.skill!='longdan_sha'&& + event.skill!='fanghun_shan'&&event.skill!='fanghun_sha') return false; + return event.source&&event.source.countCards('h')>0; + }, + logTarget:'source', + content:function(){ + var card=trigger.source.getCards('h').randomGet(); + player.gain(card,trigger.source); + trigger.source.$giveAuto(card,player); + game.delay(); + } + }, + lihun:{ + audio:2, + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return player!=target&&target.sex=='male'; + }, + filterCard:true, + position:'he', + content:function(){ + player.gain(target.getCards('h'),target); + target.$give(target.countCards('h'),player); + player.turnOver(); + player.addSkill('lihun2'); + player.storage.lihun=target; + }, + check:function(card){return 8-get.value(card)}, + ai:{ + order:10, + result:{ + player:function(player){ + if(player.classList.contains('turnedover')) return 10; + return 0; + }, + target:function(player,target){ + if(target.countCards('h')>target.hp) return target.hp-target.countCards('h'); + return 0; + } + }, + threaten:1.5, + effect:{ + target:function(card){ + if(card.name=='guiyoujie') return [0,2]; + } + } + }, + }, + lihun2:{ + trigger:{player:'phaseUseEnd'}, + forced:true, + popup:false, + audio:false, + content:function(){ + "step 0" + player.removeSkill('lihun2'); + if(player.storage.lihun.classList.contains('dead')){ + event.finish(); + } + else{ + player.chooseCard('he',true,player.storage.lihun.hp); + } + "step 1" + player.storage.lihun.gain(result.cards,player); + player.$give(result.cards.length,player.storage.lihun); + } + }, + yuanhu:{ + audio:3, + trigger:{player:'phaseEnd'}, + direct:true, + filter:function(event,player){ + return player.countCards('he',{type:'equip'})>0; + }, + content:function(){ + "step 0" + player.chooseCardTarget({ + filterCard:function(card){ + return get.type(card)=='equip'; + }, + position:'he', + filterTarget:function(card,player,target){ + return !target.getEquip(card); + }, + ai1:function(card){ + return 6-get.value(card); + }, + ai2:function(target){ + return get.attitude(_status.event.player,target)-3; + }, + prompt:get.prompt('yuanhu') + }); + "step 1" + if(result.bool){ + player.logSkill('yuanhu',result.targets); + var thisTarget=result.targets[0]; + var thisCard=result.cards[0]; + thisTarget.equip(thisCard); + event.target=thisTarget; + if(thisTarget!=player){ + player.$give(thisCard,thisTarget); + } + switch(get.subtype(thisCard)){ + case 'equip1':{ + if(!game.hasPlayer(function(current){ + return get.distance(thisTarget,current)<=1; + })){ + event.finish(); + return; + } + game.delay(); + player.chooseTarget(true,function(card,player,target){ + return get.distance(_status.event.thisTarget,target)<=1&&target.countCards('hej'); + }).set('ai',function(target){ + var attitude=get.attitude(_status.event.player,target); + if(attitude>0&&target.countCards('j')){ + return attitude*1.5; + } + return -attitude; + }).set('thisTarget',thisTarget); + return; + } + case 'equip2':{ + thisTarget.draw();event.finish(); + return; + } + default:{ + thisTarget.recover(); + event.finish(); + return; + } + } + } + else{ + event.finish(); + } + "step 2" + if(result.targets.length){ + player.discardPlayerCard(true,result.targets[0],'hej'); + } + }, + }, + tianming:{ + audio:2, + trigger:{target:'shaBegin'}, + check:function(event,player){ + var cards=player.getCards('h'); + if(cards.length<=2){ + for(var i=0;iplayers[1].hp&&players[0]!=player){ + players[0].chooseBool(get.prompt('tianming')); + event.player=players[0]; + } + else{ + event.finish(); + } + "step 1" + if(result.bool){ + player.chooseToDiscard(2,true,'he'); + player.draw(2); + } + }, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(card.name=='sha') return [1,0.5]; + } + } + } + }, + mizhao:{ + enable:'phaseUse', + usable:1, + audio:2, + filter:function(event,player){ + return player.countCards('h')>0; + }, + filterCard:true, + selectCard:-1, + filterTarget:function(card,player,target){ + return player!=target; + }, + discard:false, + prepare:'give2', + ai:{ + order:1, + result:{ + player:0, + target:function(player,target){ + if(target.hasSkillTag('nogain')) return 0; + if(player.countCards('h')>1){ + return 1; + } + var players=game.filterPlayer(); + for(var i=0;i0){ + return eff-10; + } + return eff; + }).set('target1',event.target1); + "step 2" + if(result.targets.length){ + event.target2=result.targets[0]; + event.target1.line(event.target2); + event.target1.chooseToCompare(event.target2); + } + else{ + event.finish(); + } + "step 3" + if(!result.tie){ + if(result.bool){ + event.target1.useCard({name:'sha'},event.target2); + } + else{ + event.target2.useCard({name:'sha'},event.target1); + } + } + } + }, + gongao:{ + audio:2, + trigger:{global:'dieAfter'}, + forced:true, + unique:true, + content:function(){ + player.gainMaxHp(); + player.recover(); + }, + ai:{ + threaten:1.5 + } + }, + juyi:{ + skillAnimation:true, + audio:true, + derivation:['benghuai','weizhong'], + trigger:{player:'phaseBegin'}, + filter:function(event,player){ + return player.maxHp>game.players.length&&player.hp0){ + player.draw(num); + } + player.addSkill('benghuai'); + player.addSkill('weizhong'); + player.storage.juyi=true; + player.awakenSkill('juyi'); + } + }, + weizhong:{ + audio:true, + trigger:{player:['gainMaxHpEnd','loseMaxHpEnd']}, + forced:true, + content:function(){ + player.draw(); + } + }, + chixin:{ + group:['chixin1','chixin2'], + mod:{ + cardUsable:function(card,player,num){ + if(card.name=='sha'){ + return num+20; + } + }, + }, + trigger:{player:'shaBefore'}, + forced:true, + popup:false, + check:function(event,player){ + return player.countCards('h','sha')>0; + }, + filter:function(event,player){ + return _status.currentPhase==player; + }, + content:function(){ + var target=trigger.target; + if(target.hasSkill('chixin3')){ + target.storage.chixin++; + } + else{ + target.storage.chixin=1; + target.addTempSkill('chixin3','phaseUseEnd'); + } + } + }, + chixin1:{ + enable:['chooseToRespond','chooseToUse'], + filterCard:{suit:'diamond'}, + position:'he', + viewAs:{name:'sha'}, + prompt:'将一张♦牌当杀使用或打出', + check:function(card){return 5-get.value(card)}, + ai:{ + respondSha:true, + } + }, + chixin2:{ + enable:['chooseToRespond'], + filterCard:{suit:'diamond'}, + viewAs:{name:'shan'}, + position:'he', + prompt:'将一张♦牌当闪打出', + check:function(card){return 5-get.value(card)}, + ai:{ + respondShan:true, + effect:{ + target:function(card,player,target,current){ + if(get.tag(card,'respondShan')&¤t<0) return 0.8 + } + }, + } + }, + chixin3:{ + mod:{ + targetEnabled:function(card,player,target){ + if(card.name!='sha') return; + if(player==_status.currentPhase&&player.hasSkill('chixin')){ + var num=player.getCardUsable(card,true)-20; + var players=game.filterPlayer(); + for(var i=0;i1; + } + } + } + }, + suiren:{ + trigger:{player:'phaseBegin'}, + skillAnimation:true, + filter:function(event,player){ + return !player.storage.suiren; + }, + intro:{ + content:'limited', + }, + mark:true, + direct:true, + unique:true, + content:function(){ + "step 0" + var check=(player.hp==1||(player.hp==2&&player.countCards('h')<=1)); + player.chooseTarget(get.prompt('suiren')).set('ai',function(target){ + if(!_status.event.check) return 0; + return get.attitude(_status.event.player,target); + }).set('check',check); + "step 1" + if(result.bool){ + player.storage.suiren=true; + player.awakenSkill('suiren'); + player.logSkill('suiren',result.targets); + player.removeSkill('yicong'); + player.gainMaxHp(); + player.recover(); + result.targets[0].draw(3); + } + } + }, + kuangfu:{ + trigger:{source:'damageEnd'}, + direct:true, + audio:2, + filter:function(event){ + if(event._notrigger.contains(event.player)) return false; + return event.card&&event.card.name=='sha'&&event.player.countCards('e'); + }, + content:function(){ + "step 0" + var neg=get.attitude(player,trigger.player)<=0; + player.choosePlayerCard('e',trigger.player).set('ai',function(button){ + if(_status.event.neg){ + return get.buttonValue(button); + } + return 0; + }).set('neg',neg); + "step 1" + if(result.bool){ + player.logSkill('kuangfu'); + trigger.player.$give(result.links,player); + game.delay(2); + player.equip(result.links[0]); + } + } + }, + }, + translate:{ + zhangren:'张任', + zoushi:'邹氏', + zangba:'臧霸', + jiling:'纪灵', + gz_sp_dongzhuo:'董卓', + gz_zhangjiao:'张角', + litong:'李通', + mizhu:'糜竺', + buzhi:'步骘', + chenlin:'陈琳', + yuanshu:'袁术', + re_yuanshu:'新袁术', + gongsunzan:'公孙瓒', + sp_diaochan:'sp貂蝉', + yangxiu:'杨修', + sp_zhaoyun:'sp赵云', + jsp_zhaoyun:'界sp赵云', + caohong:'曹洪', + liuxie:'刘协', + xiahouba:'夏侯霸', + zhugejin:'诸葛谨', + zhugeke:'诸葛恪', + guanyinping:'关银屏', + ganfuren:'甘夫人', + sunhao:'孙皓', + chengyu:'程昱', + simalang:'司马朗', + zhangliang:'张梁', + tianfeng:'田丰', + sp_pangtong:'sp庞统', + sp_jiaxu:'sp贾诩', + maliang:'马良', + sp_caoren:'sp曹仁', + yuejin:'乐进', + mifuren:'糜夫人', + sp_dongzhuo:'sp董卓', + chendong:'陈武董袭', + jiangfei:'蒋琬费祎', + jiangqing:'蒋钦', + hetaihou:'何太后', + dingfeng:'丁奉', + zhangxingcai:'张星彩', + caoang:'曹昂', + kongrong:'孔融', + fuwan:'伏完', + sp_pangde:'sp庞德', + sp_sunshangxiang:'孙尚香', + zhugedan:'诸葛诞', + sp_machao:'sp马超', + sp_jiangwei:'sp姜维', + zhangbao:'张宝', + yangxiou:'杨修', + shixie:'士燮', + mayunlu:'马云騄', + zhanglu:'张鲁', + wutugu:'兀突骨', + mateng:'马腾', + sp_caiwenji:'sp蔡文姬', + zhugeguo:'诸葛果', + liuzan:'留赞', + lingcao:'凌操', + sunru:'孙茹', + lingju:'灵雎', + lifeng:'李丰', + jsp_guanyu:'sp关羽', + zhuling:'朱灵', + sunluyu:'孙鲁育', + hanba:'旱魃', + panfeng:'潘凤', + zumao:'祖茂', + daxiaoqiao:'大小乔', + sp_daqiao:'sp大乔', + sp_ganning:'sp甘宁', + sp_zhangfei:'sp张飞', + sp_xiahoudun:'sp夏侯惇', + cuiyan:'崔琰', + wenpin:'文聘', + jsp_huangyueying:'sp黄月英', + sp_lvmeng:'sp吕蒙', + wangji:'王基', + guansuo:'关索', + tadun:'蹋顿', + yanbaihu:'严白虎', + wanglang:'王朗', + sp_liubei:'sp刘备', + caochun:'曹纯', + dongbai:'董白', + zhaoxiang:'赵襄', + heqi:'贺齐', + kanze:'阚泽', + dongyun:'董允', + mazhong:'马忠', + huangfusong:'皇甫嵩', + miheng:'祢衡', + taoqian:'陶谦', + wangyun:'王允', + sunqian:'孙乾', + xizhicai:'戏志才', + quyi:'麹义', + liuye:'刘晔', - ly_piliche:'霹雳车', - ly_piliche_info:'当你对其他角色造成伤害后,若造成伤害牌不为延时锦囊牌,你可以弃置其装备区里的防具牌与+1坐骑牌;当你失去此装备时,销毁之', - polu:'破橹', - polu_info:'锁定技,回合开始时,若你的装备区里没有【霹雳车】,你使用之;当你受到1点伤害后,若你的装备区里没有【霹雳车】,你摸一张牌', - choulve:'筹略', - choulve_info:'出牌阶段开始时,你可以令一名其他角色交给你一张牌,若其如此做,视为你使用上一张对你造成伤害且不为延时锦囊牌的牌', - qianya:'谦雅', - qianya_info:'当你成为锦囊牌的目标后,你可以将任意张手牌交给一名其他角色', - shuimeng:'说盟', - shuimeng_info:'出牌阶段结束时,你可以与一名角色拼点,若你赢,视为你使用【无中生有】;若你没赢,视为其对你使用【过河拆桥】', - xianfu:'先辅', - xianfu2:'先辅', - xianfu2_bg:'辅', - xianfu_info:'锁定技,游戏开始时,你选择一名其他角色,当其受到伤害后,你受到等量的伤害,当其回复体力后,你回复等量的体力', - chouce:'筹策', - chouce_info:'当你受到1点伤害后,你可以判定,若结果为:黑色,你弃置一名角色区域里的一张牌;红色,你选择一名角色,其摸一张牌,若其是“先辅”选择的角色,改为其摸两张牌', - fuqi:'伏骑', - fuqi_info:'锁定技,与你距离为1的其他角色不能使用或打出牌响应你使用的牌', - jiaozi:'骄恣', - jiaozi_info:'锁定技,若你的手牌数是全场唯一最多的,你造成或受到的伤害均+1', - wy_meirenji:'美人计', - wy_meirenji_info:'出牌阶段,对一名有手牌的其他男性角色使用。每名女性角色各获得其一张手牌并将一张手牌交给你,然后比较你与其的手牌数,手牌少的角色对手牌多的角色造成1点伤害', - wy_xiaolicangdao:'笑里藏刀', - wy_xiaolicangdao_info:'出牌阶段,对一名其他角色使用。该角色摸X张牌(X为其已损失的体力值且至多为5),然后你对其造成1点伤害', - weikui:'伪溃', - weikui2:'伪溃', - weikui_info:'出牌阶段限一次,你可以失去1点体力并选择一名有手牌的其他角色,你观看其手牌:若其手牌中有【闪】,则视为你对其使用【杀】,且本回合你计算与其的距离视为1;若其手牌中没有【闪】,你弃置其中一张牌', - lizhan:'励战', - lizhan_info:'结束阶段,你可以令任意名已受伤的角色摸一张牌', - wylianji:'连计', - wylianji_info:'出牌阶段限一次,你可以展示一张【杀】或黑色锦囊牌,并令一名其他角色将牌堆中的随机一张武器牌置入装备区(可替换原装备)。然后该角色选择一项:1.对除你以外的角色使用该牌,并将装备区里的武器牌交给该牌的一个目标角色;2.令你对其使用此牌,然后获得此牌,并将装备区内的武器牌交给你。', - // from here - moucheng:'谋逞', - moucheng_info:'觉醒技,当其他角色使用因“连计”交给其的牌累计造成伤害达到3点后,你失去技能“连计”,然后获得技能“矜功”', - jingong:'矜功', - jingong2:'矜功', - jingong_backup:'矜功', - jingong_info:'出牌阶段限一次,你可以将一张装备牌或【杀】当一张随机锦囊牌使用(三选一,其中一张为【美人计】或【笑里藏刀】),然后本回合的结束阶段,若你于本回合内未造成过伤害,你失去1点体力', - zhaohuo:'招祸', - zhaohuo_info:'锁定技,当其他角色进入濒死状态时,你的体力上限变为1点,你每以此法减少1点体力上限,你摸一张牌', - yixiang:'义襄', - yixiang_info:'每名角色的回合限一次,当你成为一名角色使用牌的目标后,若其的体力值大于你的体力值,你可以随机获得牌堆里一张你没有的基本牌', - yirang:'揖让', - yirang_info:'出牌阶段开始时,你可以将所有非基本牌交给一名体力上限大于你的其他角色,然后调整体力上限至与该角色相同,你回复X点体力(X为你以此法交给其的牌的类别数)', - kuangcai:'狂才', - kuangcai_info:'出牌阶段开始时,你可以令你此阶段内的主动出牌时间变为5秒,响应出牌时间也变为5秒。若如此做,你使用牌没距离和次数限制,且每当你于此阶段内使用牌时,你摸一张牌且主动出牌时间-1秒。你一回合通过狂才最多获得5张牌', - shejian:'舌剑', - shejian_info:'弃牌阶段结束时,若你于此阶段弃置的所有牌花色均不相同,你可以弃置一名其他角色的一张牌', - fenyue:'奋钺', - fenyue2:'奋钺', - fenyue2_bg:'钺', - fenyue_info:'出牌阶段限X次,你可以与一名角色拼点,若你赢,你选择一项:1.其不能使用或打出手牌直到回合结束;2.视为你对其使用了【杀】(不计入次数限制)。若你没赢,你结束出牌阶段。(X为存活的忠臣数)', - zhuoshui:'祸水', - zhuoshui_info:'锁定技,准备阶段,你令所有其他角色的非锁定技失效直到回合结束', - zqingcheng:'倾城', - zqingcheng_info:'出牌阶段,你可以弃置一张装备牌,然后令一名角色翻面并摸两张牌', - zfengshi:'锋矢', - zfengshi_info:'你使用杀指定目标后,可以令目标弃置装备区内的一张牌', - chuanxin:'穿心', - chuanxin_info:'当你于出牌阶段内使用【杀】或【决斗】对目标角色造成伤害时,你可以防止此伤害。若如此做,该角色选择一项:1.弃置装备区里的所有牌,若如此做,其失去1点体力;2.随机移除主武将牌上的一个技能', - chuanxin_info_guozhan:'当你于出牌阶段内使用【杀】或【决斗】对目标角色造成伤害时,若其与你势力不同且有副将,你可以防止此伤害。若如此做,该角色选择一项:1.弃置装备区里的所有牌,若如此做,其失去1点体力;2.移除副将', - hengjiang:'横江', - hengjiang2:'横江', - hengjiang_info:'当你受到1点伤害后,你可以令当前回合角色本回合的手牌上限-1。然后若其弃牌阶段内没有弃牌,则你摸一张牌', - shuangren:'双刃', - shuangren_info:'出牌阶段开始时,你可以与一名角色拼点。若你赢,你视为任意一名角色使用一张【杀】(此【杀】不计入限制的次数);若你没赢,你结束出牌阶段', - shuangren_info_guozhan:'出牌阶段开始时,你可以与一名角色拼点。若你赢,你视为对其或与其势力相同的另一名角色使用一张【杀】(此【杀】不计入限制的次数);若你没赢,你结束出牌阶段', - xiashu:'下书', - xiashu_info:'出牌阶段开始时,你可以将所有手牌交给一名其他角色,然后该角色亮出任意数量的手牌(至少一张),令你选择一项:1.获得其亮出的手牌;2.获得其未亮出的手牌', - kuanshi:'宽释', - kuanshi2:'宽释', - kuanshi_info:'结束阶段,你可以选择一名角色。直到你的下回合开始,该角色下一次受到超过1点的伤害时,防止此伤害,然后你跳过下个回合的摸牌阶段', - bingzheng:'秉正', - bingzheng_info:'出牌阶段结束时,你可以令手牌数不等于体力值的一名角色弃置一张手牌或摸一张牌。然后若其手牌数等于体力值,你摸一张牌,且可以交给该角色一张牌', - sheyan:'舍宴', - sheyan_info:'当你成为一张普通锦囊牌的目标时(借刀杀人等带有指向目标的锦囊除外),你可以为此牌增加一个目标或减少一个目标(目标数至少为一)', - fuman:'抚蛮', - fuman2:'抚蛮', - fuman_info:'出牌阶段,你可以将一张【杀】交给一名本回合未获得过“抚蛮”牌的其他角色,然后其于下个回合结束之前使用“抚蛮”牌时,你摸一张牌', - qizhou:'绮胄', - qizhou_info:'锁定技,你根据装备区里牌的花色数获得以下技能:1种或以上-马术;2种或以上-英姿;3种或以上-短兵;4种-奋威', - shanxi:'闪袭', - shanxi_info:'出牌阶段限一次,你可以弃置一张红色基本牌,然后弃置攻击范围内的一名其他角色的一张牌,若弃置的牌是【闪】,你观看其手牌,若弃置的不是【闪】,其观看你的手牌', - duanbing:'短兵', - duanbing_info:'你使用【杀】可以多选择一名距离为1的角色为目标', - fanghun:'芳魂', - fanghun_info:'当你使用【杀】造成伤害后,你获得1个“梅影”标记;你可以移去1个“梅影”标记来发动“龙胆”并摸一张牌', - fuhan:'扶汉', - fuhan_info:'限定技,回合开始时,你可以移去所有“梅影”标记,随机观看五名未登场的蜀势力角色,将武将牌替换为其中一名角色,并将体力上限数调整为本局游戏中移去“梅影”标记的数量(至多为游戏开始时的角色数),然后若你是体力值最低的角色,你回复1点体力', - yjixi:'觊玺', - yjixi_info:'觉醒技,结束阶段,若你连续三回合没有失去过体力,则你增加1点体力上限并回复1点体力,然后选择一项:获得技能“妄尊”或摸两张牌并获得当前主公的主公技', - xinyongsi:'庸肆', - xinyongsi1:'庸肆', - xinyongsi2:'庸肆', - xinyongsi_info:'锁定技,摸牌阶段,你令额定摸牌数为X(X为势力数);弃牌阶段开始时,你选择一项:1.弃置一张牌;2.失去1点体力', - xiehui:'黠慧', - xiehui2:'黠慧', - xiehui_info:'锁定技,你的黑色牌不占用手牌上限;其他角色获得你的黑色牌时,其不能使用、打出、弃置这些牌直到其体力值减少为止', - lianzhu:'连诛', - lianzhu_info:'出牌阶段限一次,你可以展示并交给一名其他角色一张牌,若该牌为黑色,其选择一项:1.你摸两张牌;2.弃置两张牌', - zhaolie:'昭烈', - zhaolie_info:'摸牌阶段摸牌时,你可以少摸一张,指定你攻击范围内的一名角色亮出牌堆顶上3张牌,将其中的非基本牌和【桃】置于弃牌堆,该角色进行二选一:你对其造成X点伤害,然后他获得这些基本牌;或他弃置X张牌,然后你获得这些基本牌。(X为其中非基本牌的数量)', - shichou:'誓仇', - shichou2:'誓仇', - shichou_info:'主公技,限定技,准备阶段,你可指定一名蜀国角色并交给其两张牌。本盘游戏中,每当你受到伤害时,改为该角色替你受到等量的伤害,然后摸等量的牌,直至该角色第一次进入濒死状态', - shanjia:'缮甲', - shanjia_info:'出牌阶段开始时,你可以先摸X张牌再弃置等量的牌,若你以此法弃置了装备区内的牌,视为你使用了一张无视距离的【杀】(X为你于本局游戏内使用过的装备牌数且最大为7)', - tuifeng:'推锋', - tuifeng2:'推锋', - tuifeng_info:'1.当你受到1点伤害后,你可以将一张牌置于武将牌上,称为“锋”。2.准备阶段开始时,若你的武将牌上有“锋”,你移去所有“锋”,摸2X张牌,然后你于此回合的出牌阶段内使用【杀】的次数上限+X(X为你此次移去的“锋”数)', - ziyuan:'资援', - ziyuan_info:'出牌阶段限一次,你可以将任意张点数之和为13的手牌交给一名其他角色,然后该角色回复1点体力', - jugu:'巨贾', - jugu_info:'锁定技,1.你的手牌上限+X。2.游戏开始时,你摸X张牌(X为你的体力上限)', - hongde:'弘德', - hongde_info:'当你一次获得或失去至少两张牌后,你可以令一名其他角色摸一张牌', - dingpan:'定叛', - dingpan_info:'出牌阶段限X次,你可以令一名装备区里有牌的角色摸一张牌,然后其选择一项:1.令你弃置其装备区里的一张牌;2.获得其装备区里的所有牌,若如此做,你对其造成1点伤害(X为场上存活的反贼数,非身份模式改为1)', - weidi:'伪帝', - weidi_info:'锁定技,你视为拥有当前主公的主公技', - juesi:'决死', - juesi_info:'出牌阶段,你可以弃置一张杀并选择你攻击范围内的一名有牌的其他角色,该角色弃置一张牌,然后若弃置的牌不是杀且你的体力值不大于该角色,你视为对其使用决斗', - zhenlue:'缜略', - zhenlue_info:'锁定技,你使用的普通锦囊牌不能被无懈可击响应;你不能成为其他角色的延时类锦囊的目标', - jianshu:'间书', - jianshu_info:'限定技,出牌阶段,你可以将一张黑色手牌交给一名其他角色,并选择一名攻击范围内含有其的另一名其他角色,然后令这两名角色拼点,赢的角色弃置两张牌,没赢的角色失去一点体力', - yongdi:'拥嫡', - yongdi_info:'限定技,当你受到伤害后,你可令一名其他男性角色增加一点体力上限,然后若该角色的武将牌上有主公技且其不为主公,其获得此主公技', - gushe:'鼓舌', - gushe_bg:'舌', - gushe_info:'出牌阶段限一次,你可以用一张手牌与至多三名角色同时拼点,然后依次结算拼点结果,若你赢,对方选择一项:1.弃置一张牌;2.令你摸一张牌。若你没赢,你获得一个“饶舌”标记(你有7个饶舌标记时,你死亡)', - jici:'激词', - jici_info:'当你发动“鼓舌”拼点的牌亮出后,若点数小于X,你可令点数+X;若点数等于X,你可令你本回合发动“鼓舌”的次数上限+1(X为你“饶舌”标记的数量)', - shefu:'设伏', - shefu_bg:'伏', - shefu_info:'结束阶段开始时,你可以将一张手牌移出游戏,称为"伏兵"。然后为"伏兵"记录一个基本牌或锦囊牌名称(须与其他"伏兵"记录的名称均不同)。你的回合外,当有其他角色使用与你记录的"伏兵"牌名相同的牌时,你可以令此牌无效,然后移去该"伏兵"', - benyu:'贲育', - benyu2:'贲育', - benyu_info:'每当你受到伤害后,若你的手牌数不大于伤害来源手牌数,你可以将手牌摸至与伤害来源手牌数相同(最多摸至5张);否则你可以弃置大于伤害来源手牌数的手牌,然后对其造成1点伤害', - zhidao:'雉盗', - zhidao_info:'锁定技,当你于你的回合内第一次对区域里有牌的其他角色造成伤害后,你获得其手牌、装备区和判定区里的各一张牌,然后直到回合结束,其他角色不能被选择为你使用牌的目标', - jili:'寄篱', - jili_info:'锁定技,当一名其他角色成为红色基本牌或红色普通锦囊牌的目标时,若其与你的距离为1且你既不是此牌的使用者也不是目标,你也成为此牌的目标', - luanzhan:'乱战', - luanzhan_info:'你使用【杀】或黑色普通锦囊牌可以额外选择X名角色为目标;当你使用【杀】或黑色普通锦囊牌指定目标后,若此牌的目标角色数小于X,则X减至0。(X为你于本局游戏内造成过伤害的次数)', - zhengnan:'征南', - zhengnan_info:'当其他角色死亡后,你可以摸三张牌。若如此做,你获得下列技能中的任意一个:“武圣”、 “当先”和“制蛮”', - xiefang:'撷芳', - xiefang_info:'锁定技,你的进攻距离+X(X为女性角色数)', - qizhi:'奇制', - qizhi_info:'当你于回合内使用基本牌或锦囊牌指定目标后,你可以弃置不是此牌目标的一名角色的一张牌。若如此做,其摸一张牌', - jinqu:'进趋', - jinqu_info:'结束阶段开始时,你可以摸两张牌,若如此做,你将手牌弃置至X张(X为你于此回合发动过“奇制”的次数)', - tanhu:'探虎', - tanhu2:'探虎', - tanhu3:'探虎', - tanhu_info:'出牌阶段限一次,你可以与一名其他角色拼点。若你赢,你获得以下技能直到回合结束:你与该角色的距离为1,你对该角色使用的普通锦囊牌不能被无懈可击响应', - mouduan:'谋断', - mouduan_info:'通常状态下,你拥有标记“武”并拥有技能“激昂”和“谦逊”。当你的手牌数为2张或以下时,你须将你的标记翻面为“文”,将该两项技能转化为“英姿”和“克己”。任一角色的回合开始前,你可弃一张牌将标记翻回', - jiqiao:'机巧', - jiqiao_info:'出牌阶段开始时,你可以弃置任意张装备牌,然后亮出牌堆顶三倍数量的牌,你获得其中的锦囊牌', - linglong:'玲珑', - linglong_info:'锁定技,若你的装备区没有防具牌,视为你装备着【八卦阵】;若你的装备区没有坐骑牌,你的手牌上限+1;若你的装备区没有宝物牌,你使用锦囊牌无距离限制', - fenyong:'愤勇', - fenyong2:'愤勇', - fenyong2_bg:'勇', - fenyong_info:'每当你受到一次伤害后,你可以获得一枚愤勇标记;当你有愤勇标记时,防止你受到的所有伤害', - xuehen:'雪恨', - xuehen_info:'每个角色的结束阶段开始时,若你有愤勇标记,你须弃置之,然后选择一项:1.弃置当前回合角色X张牌(X为你已损失的体力值);2.视为对一名任意角色使用一张【杀】', - zhenwei:'镇卫', - zhenwei2:'镇卫', - zhenwei_info:'当一名其他角色成为【杀】或黑色锦囊牌的目标时(使用者不是你),若该角色的体力值小于你且此牌的目标角色数为1,你可以弃置一张牌。若如此做,你选择一项:1、摸一张牌,然后将此【杀】或黑色锦囊牌转移给你;2、令此【杀】或黑色锦囊牌无效,然后将此【杀】或黑色锦囊牌置于使用者的武将牌旁,若如此做,当前回合结束后,使用者获得使用者武将牌旁的这些牌', - jie:'嫉恶', - jie_info:'锁定技,你使用的红色【杀】造成的伤害+1', - dahe:'大喝', - dahe2:'大喝', - dahe2_bg:'喝', - dahe_info:'出牌阶段,你可以与一名其他角色拼点。若你赢,该角色的非红心【闪】无效直到回合结束,你可将该角色拼点的牌交给场上一名体力不多于你的角色。若你没赢,你须展示手牌并选择一张弃置。每阶段限一次', - yinling:'银铃', - yinling_bg:'锦', - yinling_info:'出牌阶段,你可以弃置一张黑色牌并指定一名其他角色。若如此做,你获得其一张牌并置于你的武将牌上,称为“锦”(数量最多为四)', - junwei:'军威', - junwei2:'军威', - junwei_info:'结束阶段开始时,你可以移去三张“锦”,若如此做,你须指定一名角色并令其选择一项:1.亮出一张【闪】,然后由你交给任意一名角色。2.该角色失去1点体力,然后由你选择将其装备区的一张牌移出游戏。在该角色的回合结束后,将以此法移出游戏的装备牌移回原处', - yanxiao:'言笑', - yanxiao2:'言笑', - yanxiao_info:'出牌阶段,你可以将一张♦牌置于一名角色的武将牌上,武将牌上有“言笑”牌的角色下个判定阶段开始时,获得言笑牌及其判定区里的所有牌', - anxian:'安娴', - anxian_info:'每当你使用【杀】对目标角色造成伤害时,你可以防止此次伤害,令其弃置一张手牌,然后你摸一张牌;当你成为【杀】的目标时,你可以弃置一张手牌使之无效,然后该【杀】的使用者摸一张牌', - xingwu:'星舞', - xingwu_info:'弃牌阶段开始时,你可以将一张与你本回合使用的牌颜色均不同的手牌置于武将牌上:若你有至少三张“星舞”牌,你移去“星舞”牌并选择一名男性角色,该角色受到2点伤害并弃置其装备区的所有牌', - luoyan:'落雁', - luoyan_info:'锁定技。若你的武将牌上有“星舞牌”,你拥有“天香”和“流离”', - yinbing:'引兵', - yinbing_info:'结束阶段开始时,你可以将至少一张非基本牌置于武将牌上。每当你受到【杀】或【决斗】的伤害后,你移去一张“引兵牌”', - juedi:'绝地', - juedi_info:'锁定技,准备阶段,你选择一项:1.移去“引兵”牌,将手牌补至体力上限数;2.将“引兵”牌交给一名体力值不大于你的其他角色,其回复1点体力,摸等量的牌', - kuangfu:'狂斧', - kuangfu_info:'每当你使用杀造成伤害,可以将对方的一张装备牌移到你的装备区', - xintan:'心惔', - xintan_info:'出牌阶段限一次,你可以移去两张“焚”并选择一名角色,该角色失去一点体', - fentian:'焚天', - fentian_info:'锁定技,结束阶段开始时,若你的手牌数少于体力值,你须选择一名攻击范围内的角色,将其一张牌置于你的武将牌上,称为“焚”。锁定技,你的攻击范围+X(X为“焚”的数量)', - zhiri:'炙日', - zhiri_info:'觉醒技,准备阶段开始时,若“焚”数不小于3,你减1点体力上限,然后获得技能“心惔”', - meibu:'魅步', - meibu_info:'一名其他角色的出牌阶段开始时,若你不在其攻击范围内,你可以令该角色的锦囊牌均视为【杀】,直到该角色以此法使用了一张【杀】或回合结束。若如此做,则直到回合结束,视为你在其攻击范围内', - mumu:'穆穆', - mumu_info:'出牌阶段限一次,你可以弃置一张【杀】或黑色锦囊牌,然后选择一项:弃置场上一张武器牌,然后摸一张牌;或将场上的一张防具牌移动到你的装备区里(可替换原防具)', - zhanyi:'战意', - zhanyi_basic_sha:'战杀', - zhanyi_basic_jiu:'战酒', - zhanyi_basic_tao:'战桃', - zhanyi_info:'出牌阶段限一次,你可以弃置一张牌并失去1点体力,然后根据你弃置的牌获得以下效果直到回合结束:基本牌,你可以将一张基本牌当作杀、酒或桃使用;锦囊牌,摸两张牌且你使用的牌无距离限制;装备牌,你使用【杀】指定目标角色后,其弃置两张牌', - nuzhan:'怒斩', - nuzhan2:'怒斩', - nuzhan_info:'锁定技,你每当你使用由一张锦囊牌转化而来的【杀】时,你可以额外使用一张杀;锁定技,你使用的由一张装备牌转化而来的【杀】的伤害值基数+1', - danji:'单骑', - danji_info:'觉醒技,准备阶段开始时,若你的手牌数大于你的体力值,你减1点体力上限,然后获得“马术”和“怒斩”', - tunchu:'屯储', - tunchu_info:'摸牌阶段摸牌时,若你没有“粮”,你可以额外摸两张牌,然后将任意张手牌置于你的武将上,称为“粮”,只要你的武将牌上有“粮”,你便不能使用【杀】', - shuliang:'输粮', - shuliang_info:'每当一名角色的结束阶段开始时,若其手牌数少于体力值,你可以移去一张“粮”,然后该角色摸两张牌', - jieyuan:'竭缘', - jieyuan_more:'竭缘', - jieyuan_less:'竭缘', - jieyuan_info:'当你对一名其他角色造成伤害时,若其体力值大于或等于你的体力值,你可弃置一张黑色手牌令此伤害+1;当你受到一名其他角色造成的伤害时,若其体力值大于或等于你的体力值,你可弃置一张红色手牌令此伤害-1。', - fenxin:'焚心', - fenxin_old:'焚心', - fenxin_info:'锁定技,一名其他角色死亡后,若其身份为:忠臣,你发动“竭缘”减少伤害无体力值限制;反贼,你发动“竭缘”增加伤害无体力值限制;内奸,将“竭缘”中的黑色手牌和红色手牌改为一张牌。', - fenxin_old_info:'限定技,当你杀死一名非主公角色时,在其翻开身份牌之前,你可以与该角色交换身份牌。(你的身份为主公时不能发动此技能)', - shixin:'释衅', - shixin_info:'锁定技,当你受到火属性伤害时,你防止此伤害', - qingyi:'轻逸', - qingyi1:'轻逸', - qingyi2:'轻逸', - qingyi_info:'你可以跳过摸牌阶段,或跳过出牌阶段并弃置一张装备牌,若如此则视为对任意一名使用一张【杀】', - dujin:'独进', - dujin_info:'摸牌阶段,你可以额外摸X+1张牌(X为你装备区里牌数的一半且向下取整)', - yuhua:'羽化', - yuhua_info:'锁定技,弃牌阶段内,你的非基本牌不计入手牌数,且你不能弃置你的非基本牌', - qirang:'祈禳', - qirang_info:'当有装备牌进入你的装备区时,你可以获得牌堆中的一张锦囊牌', - biluan:'避乱', - biluan_info:'摸牌阶段开始时,若有其他角色与你距离不大于1,则你可以放弃摸牌。若如此做,你的防御距离+X(X为势力数)', - lixia:'礼下', - lixia_info:'锁定技,其他角色结束阶段开始时,若你不在其攻击范围内,你摸一张牌或令其摸一张牌。若如此做,你的防御距离-1', - yishe:'义舍', - yishe_bg:'米', - yishe_info:'结束阶段开始时,若你的武将牌上没有牌,你可以摸两张牌。若如此做,你将两张牌置于武将牌上,称为“米”;当“米”移至其他区域后,若你的武将牌上没有“米”,你回复1点体力', - bushi:'布施', - midao:'米道', - bushi_info:'当你受到1点伤害后,或其他角色受到你造成的1点伤害后,受到伤害的角色可以获得一张“米”', - midao_info:'当一张判定牌生效前,你可以打出一张“米”代替之', - fengpo:'凤魄', - fengpo_info:'当你于出牌阶段内使用第一张【杀】或【决斗】指定目标后,若目标角色数为1,你可以选择一项:1.摸X张牌;2.此牌造成的伤害+X(X为其手牌中方牌的数量)', - chenqing:'陈情', - chenqing_info:'每轮限一次,当一名角色处于濒死状态时,你可以令另一名其他角色摸四张牌,然后弃置四张牌。若其以此法弃置的四张牌花色各不相同,则视为该角色对濒死的角色使用一张【桃】', - mozhi:'默识', - mozhi_info:'结束阶段开始时,你可以将一张手牌当你本回合出牌阶段使用的第一张基本或普通锦囊牌使用。然后,你可以将一张手牌当你本回合出牌阶段使用的第二张基本或普通锦囊牌使用', - ranshang:'燃殇', - ranshang2:'燃殇', - ranshang_info:'锁定技,当你受到1点火焰伤害后,你获得1枚“燃”标记;结束阶段开始时,你失去X点体力(X为“燃”标记的数量)', - hanyong:'悍勇', - hanyong_info:'当你使用【南蛮入侵】或【万箭齐发】时,若你的体力值小于游戏轮数,你可以令此牌造成的伤害+1', + zishu:'自书', + zishu_info:'锁定技,你的回合外,你获得的牌均会在当前回合结束后置入弃牌堆;你的回合内,当你不因此技能效果获得牌时,额外摸一张牌。', + yingyuan:'应援', + yingyuan_info:'当你于回合内使用的牌置入弃牌堆后,你可以将之交给一名其他角色(相同牌名的牌每回合限一次)。', + ly_piliche:'霹雳车', + ly_piliche_info:'当你对其他角色造成伤害后,若造成伤害牌不为延时锦囊牌,你可以弃置其装备区里的防具牌与+1坐骑牌;当你失去此装备时,销毁之', + polu:'破橹', + polu_info:'锁定技,回合开始时,若你的装备区里没有【霹雳车】,你使用之;当你受到1点伤害后,若你的装备区里没有【霹雳车】,你摸一张牌', + choulve:'筹略', + choulve_info:'出牌阶段开始时,你可以令一名其他角色交给你一张牌,若其如此做,视为你使用上一张对你造成伤害且不为延时锦囊牌的牌', + qianya:'谦雅', + qianya_info:'当你成为锦囊牌的目标后,你可以将任意张手牌交给一名其他角色', + shuimeng:'说盟', + shuimeng_info:'出牌阶段结束时,你可以与一名角色拼点,若你赢,视为你使用【无中生有】;若你没赢,视为其对你使用【过河拆桥】', + xianfu:'先辅', + xianfu2:'先辅', + xianfu2_bg:'辅', + xianfu_info:'锁定技,游戏开始时,你选择一名其他角色,当其受到伤害后,你受到等量的伤害,当其回复体力后,你回复等量的体力', + chouce:'筹策', + chouce_info:'当你受到1点伤害后,你可以判定,若结果为:黑色,你弃置一名角色区域里的一张牌;红色,你选择一名角色,其摸一张牌,若其是“先辅”选择的角色,改为其摸两张牌', + fuqi:'伏骑', + fuqi_info:'锁定技,与你距离为1的其他角色不能使用或打出牌响应你使用的牌', + jiaozi:'骄恣', + jiaozi_info:'锁定技,若你的手牌数是全场唯一最多的,你造成或受到的伤害均+1', + wy_meirenji:'美人计', + wy_meirenji_info:'出牌阶段,对一名有手牌的其他男性角色使用。每名女性角色各获得其一张手牌并将一张手牌交给你,然后比较你与其的手牌数,手牌少的角色对手牌多的角色造成1点伤害', + wy_xiaolicangdao:'笑里藏刀', + wy_xiaolicangdao_info:'出牌阶段,对一名其他角色使用。该角色摸X张牌(X为其已损失的体力值且至多为5),然后你对其造成1点伤害', + weikui:'伪溃', + weikui2:'伪溃', + weikui_info:'出牌阶段限一次,你可以失去1点体力并选择一名有手牌的其他角色,你观看其手牌:若其手牌中有【闪】,则视为你对其使用【杀】,且本回合你计算与其的距离视为1;若其手牌中没有【闪】,你弃置其中一张牌', + lizhan:'励战', + lizhan_info:'结束阶段,你可以令任意名已受伤的角色摸一张牌', + wylianji:'连计', + wylianji_info:'出牌阶段限一次,你可以展示一张【杀】或黑色锦囊牌,并令一名其他角色将牌堆中的随机一张武器牌置入装备区(可替换原装备)。然后该角色选择一项:1.对除你以外的角色使用该牌,并将装备区里的武器牌交给该牌的一个目标角色;2.令你对其使用此牌,然后获得此牌,并将装备区内的武器牌交给你。', + // from here + moucheng:'谋逞', + moucheng_info:'觉醒技,当其他角色使用因“连计”交给其的牌累计造成伤害达到3点后,你失去技能“连计”,然后获得技能“矜功”', + jingong:'矜功', + jingong2:'矜功', + jingong_backup:'矜功', + jingong_info:'出牌阶段限一次,你可以将一张装备牌或【杀】当一张随机锦囊牌使用(三选一,其中一张为【美人计】或【笑里藏刀】),然后本回合的结束阶段,若你于本回合内未造成过伤害,你失去1点体力', + zhaohuo:'招祸', + zhaohuo_info:'锁定技,当其他角色进入濒死状态时,你的体力上限变为1点,你每以此法减少1点体力上限,你摸一张牌', + yixiang:'义襄', + yixiang_info:'每名角色的回合限一次,当你成为一名角色使用牌的目标后,若其的体力值大于你的体力值,你可以随机获得牌堆里一张你没有的基本牌', + yirang:'揖让', + yirang_info:'出牌阶段开始时,你可以将所有非基本牌交给一名体力上限大于你的其他角色,然后调整体力上限至与该角色相同,你回复X点体力(X为你以此法交给其的牌的类别数)', + kuangcai:'狂才', + kuangcai_info:'出牌阶段开始时,你可以令你此阶段内的主动出牌时间变为5秒,响应出牌时间也变为5秒。若如此做,你使用牌没距离和次数限制,且每当你于此阶段内使用牌时,你摸一张牌且主动出牌时间-1秒。你一回合通过狂才最多获得5张牌', + shejian:'舌剑', + shejian_info:'弃牌阶段结束时,若你于此阶段弃置的所有牌花色均不相同,你可以弃置一名其他角色的一张牌', + fenyue:'奋钺', + fenyue2:'奋钺', + fenyue2_bg:'钺', + fenyue_info:'出牌阶段限X次,你可以与一名角色拼点,若你赢,你选择一项:1.其不能使用或打出手牌直到回合结束;2.视为你对其使用了【杀】(不计入次数限制)。若你没赢,你结束出牌阶段。(X为存活的忠臣数)', + zhuoshui:'祸水', + zhuoshui_info:'锁定技,准备阶段,你令所有其他角色的非锁定技失效直到回合结束', + zqingcheng:'倾城', + zqingcheng_info:'出牌阶段,你可以弃置一张装备牌,然后令一名角色翻面并摸两张牌', + zfengshi:'锋矢', + zfengshi_info:'你使用杀指定目标后,可以令目标弃置装备区内的一张牌', + chuanxin:'穿心', + chuanxin_info:'当你于出牌阶段内使用【杀】或【决斗】对目标角色造成伤害时,你可以防止此伤害。若如此做,该角色选择一项:1.弃置装备区里的所有牌,若如此做,其失去1点体力;2.随机移除主武将牌上的一个技能', + chuanxin_info_guozhan:'当你于出牌阶段内使用【杀】或【决斗】对目标角色造成伤害时,若其与你势力不同且有副将,你可以防止此伤害。若如此做,该角色选择一项:1.弃置装备区里的所有牌,若如此做,其失去1点体力;2.移除副将', + hengjiang:'横江', + hengjiang2:'横江', + hengjiang_info:'当你受到1点伤害后,你可以令当前回合角色本回合的手牌上限-1。然后若其弃牌阶段内没有弃牌,则你摸一张牌', + shuangren:'双刃', + shuangren_info:'出牌阶段开始时,你可以与一名角色拼点。若你赢,你视为任意一名角色使用一张【杀】(此【杀】不计入限制的次数);若你没赢,你结束出牌阶段', + shuangren_info_guozhan:'出牌阶段开始时,你可以与一名角色拼点。若你赢,你视为对其或与其势力相同的另一名角色使用一张【杀】(此【杀】不计入限制的次数);若你没赢,你结束出牌阶段', + xiashu:'下书', + xiashu_info:'出牌阶段开始时,你可以将所有手牌交给一名其他角色,然后该角色亮出任意数量的手牌(至少一张),令你选择一项:1.获得其亮出的手牌;2.获得其未亮出的手牌', + kuanshi:'宽释', + kuanshi2:'宽释', + kuanshi_info:'结束阶段,你可以选择一名角色。直到你的下回合开始,该角色下一次受到超过1点的伤害时,防止此伤害,然后你跳过下个回合的摸牌阶段', + bingzheng:'秉正', + bingzheng_info:'出牌阶段结束时,你可以令手牌数不等于体力值的一名角色弃置一张手牌或摸一张牌。然后若其手牌数等于体力值,你摸一张牌,且可以交给该角色一张牌', + sheyan:'舍宴', + sheyan_info:'当你成为一张普通锦囊牌的目标时(借刀杀人等带有指向目标的锦囊除外),你可以为此牌增加一个目标或减少一个目标(目标数至少为一)', + fuman:'抚蛮', + fuman2:'抚蛮', + fuman_info:'出牌阶段,你可以将一张【杀】交给一名本回合未获得过“抚蛮”牌的其他角色,然后其于下个回合结束之前使用“抚蛮”牌时,你摸一张牌', + qizhou:'绮胄', + qizhou_info:'锁定技,你根据装备区里牌的花色数获得以下技能:1种或以上-马术;2种或以上-英姿;3种或以上-短兵;4种-奋威', + shanxi:'闪袭', + shanxi_info:'出牌阶段限一次,你可以弃置一张红色基本牌,然后弃置攻击范围内的一名其他角色的一张牌,若弃置的牌是【闪】,你观看其手牌,若弃置的不是【闪】,其观看你的手牌', + duanbing:'短兵', + duanbing_info:'你使用【杀】可以多选择一名距离为1的角色为目标', + fanghun:'芳魂', + fanghun_info:'当你使用【杀】造成伤害后,你获得1个“梅影”标记;你可以移去1个“梅影”标记来发动“龙胆”并摸一张牌', + fuhan:'扶汉', + fuhan_info:'限定技,回合开始时,你可以移去所有“梅影”标记,随机观看五名未登场的蜀势力角色,将武将牌替换为其中一名角色,并将体力上限数调整为本局游戏中移去“梅影”标记的数量(至多为游戏开始时的角色数),然后若你是体力值最低的角色,你回复1点体力', + yjixi:'觊玺', + yjixi_info:'觉醒技,结束阶段,若你连续三回合没有失去过体力,则你增加1点体力上限并回复1点体力,然后选择一项:获得技能“妄尊”或摸两张牌并获得当前主公的主公技', + xinyongsi:'庸肆', + xinyongsi1:'庸肆', + xinyongsi2:'庸肆', + xinyongsi_info:'锁定技,摸牌阶段,你令额定摸牌数为X(X为势力数);弃牌阶段开始时,你选择一项:1.弃置一张牌;2.失去1点体力', + xiehui:'黠慧', + xiehui2:'黠慧', + xiehui_info:'锁定技,你的黑色牌不占用手牌上限;其他角色获得你的黑色牌时,其不能使用、打出、弃置这些牌直到其体力值减少为止', + lianzhu:'连诛', + lianzhu_info:'出牌阶段限一次,你可以展示并交给一名其他角色一张牌,若该牌为黑色,其选择一项:1.你摸两张牌;2.弃置两张牌', + zhaolie:'昭烈', + zhaolie_info:'摸牌阶段摸牌时,你可以少摸一张,指定你攻击范围内的一名角色亮出牌堆顶上3张牌,将其中的非基本牌和【桃】置于弃牌堆,该角色进行二选一:你对其造成X点伤害,然后他获得这些基本牌;或他弃置X张牌,然后你获得这些基本牌。(X为其中非基本牌的数量)', + shichou:'誓仇', + shichou2:'誓仇', + shichou_info:'主公技,限定技,准备阶段,你可指定一名蜀国角色并交给其两张牌。本盘游戏中,每当你受到伤害时,改为该角色替你受到等量的伤害,然后摸等量的牌,直至该角色第一次进入濒死状态', + shanjia:'缮甲', + shanjia_info:'出牌阶段开始时,你可以先摸X张牌再弃置等量的牌,若你以此法弃置了装备区内的牌,视为你使用了一张无视距离的【杀】(X为你于本局游戏内使用过的装备牌数且最大为7)', + tuifeng:'推锋', + tuifeng2:'推锋', + tuifeng_info:'1.当你受到1点伤害后,你可以将一张牌置于武将牌上,称为“锋”。2.准备阶段开始时,若你的武将牌上有“锋”,你移去所有“锋”,摸2X张牌,然后你于此回合的出牌阶段内使用【杀】的次数上限+X(X为你此次移去的“锋”数)', + ziyuan:'资援', + ziyuan_info:'出牌阶段限一次,你可以将任意张点数之和为13的手牌交给一名其他角色,然后该角色回复1点体力', + jugu:'巨贾', + jugu_info:'锁定技,1.你的手牌上限+X。2.游戏开始时,你摸X张牌(X为你的体力上限)', + hongde:'弘德', + hongde_info:'当你一次获得或失去至少两张牌后,你可以令一名其他角色摸一张牌', + dingpan:'定叛', + dingpan_info:'出牌阶段限X次,你可以令一名装备区里有牌的角色摸一张牌,然后其选择一项:1.令你弃置其装备区里的一张牌;2.获得其装备区里的所有牌,若如此做,你对其造成1点伤害(X为场上存活的反贼数,非身份模式改为1)', + weidi:'伪帝', + weidi_info:'锁定技,你视为拥有当前主公的主公技', + juesi:'决死', + juesi_info:'出牌阶段,你可以弃置一张杀并选择你攻击范围内的一名有牌的其他角色,该角色弃置一张牌,然后若弃置的牌不是杀且你的体力值不大于该角色,你视为对其使用决斗', + zhenlue:'缜略', + zhenlue_info:'锁定技,你使用的普通锦囊牌不能被无懈可击响应;你不能成为其他角色的延时类锦囊的目标', + jianshu:'间书', + jianshu_info:'限定技,出牌阶段,你可以将一张黑色手牌交给一名其他角色,并选择一名攻击范围内含有其的另一名其他角色,然后令这两名角色拼点,赢的角色弃置两张牌,没赢的角色失去一点体力', + yongdi:'拥嫡', + yongdi_info:'限定技,当你受到伤害后,你可令一名其他男性角色增加一点体力上限,然后若该角色的武将牌上有主公技且其不为主公,其获得此主公技', + gushe:'鼓舌', + gushe_bg:'舌', + gushe_info:'出牌阶段限一次,你可以用一张手牌与至多三名角色同时拼点,然后依次结算拼点结果,若你赢,对方选择一项:1.弃置一张牌;2.令你摸一张牌。若你没赢,你获得一个“饶舌”标记(你有7个饶舌标记时,你死亡)', + jici:'激词', + jici_info:'当你发动“鼓舌”拼点的牌亮出后,若点数小于X,你可令点数+X;若点数等于X,你可令你本回合发动“鼓舌”的次数上限+1(X为你“饶舌”标记的数量)', + shefu:'设伏', + shefu_bg:'伏', + shefu_info:'结束阶段开始时,你可以将一张手牌移出游戏,称为"伏兵"。然后为"伏兵"记录一个基本牌或锦囊牌名称(须与其他"伏兵"记录的名称均不同)。你的回合外,当有其他角色使用与你记录的"伏兵"牌名相同的牌时,你可以令此牌无效,然后移去该"伏兵"', + benyu:'贲育', + benyu2:'贲育', + benyu_info:'每当你受到伤害后,若你的手牌数不大于伤害来源手牌数,你可以将手牌摸至与伤害来源手牌数相同(最多摸至5张);否则你可以弃置大于伤害来源手牌数的手牌,然后对其造成1点伤害', + zhidao:'雉盗', + zhidao_info:'锁定技,当你于你的回合内第一次对区域里有牌的其他角色造成伤害后,你获得其手牌、装备区和判定区里的各一张牌,然后直到回合结束,其他角色不能被选择为你使用牌的目标', + jili:'寄篱', + jili_info:'锁定技,当一名其他角色成为红色基本牌或红色普通锦囊牌的目标时,若其与你的距离为1且你既不是此牌的使用者也不是目标,你也成为此牌的目标', + luanzhan:'乱战', + luanzhan_info:'你使用【杀】或黑色普通锦囊牌可以额外选择X名角色为目标;当你使用【杀】或黑色普通锦囊牌指定目标后,若此牌的目标角色数小于X,则X减至0。(X为你于本局游戏内造成过伤害的次数)', + zhengnan:'征南', + zhengnan_info:'当其他角色死亡后,你可以摸三张牌。若如此做,你获得下列技能中的任意一个:“武圣”、 “当先”和“制蛮”', + xiefang:'撷芳', + xiefang_info:'锁定技,你的进攻距离+X(X为女性角色数)', + qizhi:'奇制', + qizhi_info:'当你于回合内使用基本牌或锦囊牌指定目标后,你可以弃置不是此牌目标的一名角色的一张牌。若如此做,其摸一张牌', + jinqu:'进趋', + jinqu_info:'结束阶段开始时,你可以摸两张牌,若如此做,你将手牌弃置至X张(X为你于此回合发动过“奇制”的次数)', + tanhu:'探虎', + tanhu2:'探虎', + tanhu3:'探虎', + tanhu_info:'出牌阶段限一次,你可以与一名其他角色拼点。若你赢,你获得以下技能直到回合结束:你与该角色的距离为1,你对该角色使用的普通锦囊牌不能被无懈可击响应', + mouduan:'谋断', + mouduan_info:'通常状态下,你拥有标记“武”并拥有技能“激昂”和“谦逊”。当你的手牌数为2张或以下时,你须将你的标记翻面为“文”,将该两项技能转化为“英姿”和“克己”。任一角色的回合开始前,你可弃一张牌将标记翻回', + jiqiao:'机巧', + jiqiao_info:'出牌阶段开始时,你可以弃置任意张装备牌,然后亮出牌堆顶三倍数量的牌,你获得其中的锦囊牌', + linglong:'玲珑', + linglong_info:'锁定技,若你的装备区没有防具牌,视为你装备着【八卦阵】;若你的装备区没有坐骑牌,你的手牌上限+1;若你的装备区没有宝物牌,你使用锦囊牌无距离限制', + fenyong:'愤勇', + fenyong2:'愤勇', + fenyong2_bg:'勇', + fenyong_info:'每当你受到一次伤害后,你可以获得一枚愤勇标记;当你有愤勇标记时,防止你受到的所有伤害', + xuehen:'雪恨', + xuehen_info:'每个角色的结束阶段开始时,若你有愤勇标记,你须弃置之,然后选择一项:1.弃置当前回合角色X张牌(X为你已损失的体力值);2.视为对一名任意角色使用一张【杀】', + zhenwei:'镇卫', + zhenwei2:'镇卫', + zhenwei_info:'当一名其他角色成为【杀】或黑色锦囊牌的目标时(使用者不是你),若该角色的体力值小于你且此牌的目标角色数为1,你可以弃置一张牌。若如此做,你选择一项:1、摸一张牌,然后将此【杀】或黑色锦囊牌转移给你;2、令此【杀】或黑色锦囊牌无效,然后将此【杀】或黑色锦囊牌置于使用者的武将牌旁,若如此做,当前回合结束后,使用者获得使用者武将牌旁的这些牌', + jie:'嫉恶', + jie_info:'锁定技,你使用的红色【杀】造成的伤害+1', + dahe:'大喝', + dahe2:'大喝', + dahe2_bg:'喝', + dahe_info:'出牌阶段,你可以与一名其他角色拼点。若你赢,该角色的非红心【闪】无效直到回合结束,你可将该角色拼点的牌交给场上一名体力不多于你的角色。若你没赢,你须展示手牌并选择一张弃置。每阶段限一次', + yinling:'银铃', + yinling_bg:'锦', + yinling_info:'出牌阶段,你可以弃置一张黑色牌并指定一名其他角色。若如此做,你获得其一张牌并置于你的武将牌上,称为“锦”(数量最多为四)', + junwei:'军威', + junwei2:'军威', + junwei_info:'结束阶段开始时,你可以移去三张“锦”,若如此做,你须指定一名角色并令其选择一项:1.亮出一张【闪】,然后由你交给任意一名角色。2.该角色失去1点体力,然后由你选择将其装备区的一张牌移出游戏。在该角色的回合结束后,将以此法移出游戏的装备牌移回原处', + yanxiao:'言笑', + yanxiao2:'言笑', + yanxiao_info:'出牌阶段,你可以将一张♦牌置于一名角色的武将牌上,武将牌上有“言笑”牌的角色下个判定阶段开始时,获得言笑牌及其判定区里的所有牌', + anxian:'安娴', + anxian_info:'每当你使用【杀】对目标角色造成伤害时,你可以防止此次伤害,令其弃置一张手牌,然后你摸一张牌;当你成为【杀】的目标时,你可以弃置一张手牌使之无效,然后该【杀】的使用者摸一张牌', + xingwu:'星舞', + xingwu_info:'弃牌阶段开始时,你可以将一张与你本回合使用的牌颜色均不同的手牌置于武将牌上:若你有至少三张“星舞”牌,你移去“星舞”牌并选择一名男性角色,该角色受到2点伤害并弃置其装备区的所有牌', + luoyan:'落雁', + luoyan_info:'锁定技。若你的武将牌上有“星舞牌”,你拥有“天香”和“流离”', + yinbing:'引兵', + yinbing_info:'结束阶段开始时,你可以将至少一张非基本牌置于武将牌上。每当你受到【杀】或【决斗】的伤害后,你移去一张“引兵牌”', + juedi:'绝地', + juedi_info:'锁定技,准备阶段,你选择一项:1.移去“引兵”牌,将手牌补至体力上限数;2.将“引兵”牌交给一名体力值不大于你的其他角色,其回复1点体力,摸等量的牌', + kuangfu:'狂斧', + kuangfu_info:'每当你使用杀造成伤害,可以将对方的一张装备牌移到你的装备区', + xintan:'心惔', + xintan_info:'出牌阶段限一次,你可以移去两张“焚”并选择一名角色,该角色失去一点体', + fentian:'焚天', + fentian_info:'锁定技,结束阶段开始时,若你的手牌数少于体力值,你须选择一名攻击范围内的角色,将其一张牌置于你的武将牌上,称为“焚”。锁定技,你的攻击范围+X(X为“焚”的数量)', + zhiri:'炙日', + zhiri_info:'觉醒技,准备阶段开始时,若“焚”数不小于3,你减1点体力上限,然后获得技能“心惔”', + meibu:'魅步', + meibu_info:'一名其他角色的出牌阶段开始时,若你不在其攻击范围内,你可以令该角色的锦囊牌均视为【杀】,直到该角色以此法使用了一张【杀】或回合结束。若如此做,则直到回合结束,视为你在其攻击范围内', + mumu:'穆穆', + mumu_info:'出牌阶段限一次,你可以弃置一张【杀】或黑色锦囊牌,然后选择一项:弃置场上一张武器牌,然后摸一张牌;或将场上的一张防具牌移动到你的装备区里(可替换原防具)', + zhanyi:'战意', + zhanyi_basic_sha:'战杀', + zhanyi_basic_jiu:'战酒', + zhanyi_basic_tao:'战桃', + zhanyi_info:'出牌阶段限一次,你可以弃置一张牌并失去1点体力,然后根据你弃置的牌获得以下效果直到回合结束:基本牌,你可以将一张基本牌当作杀、酒或桃使用;锦囊牌,摸两张牌且你使用的牌无距离限制;装备牌,你使用【杀】指定目标角色后,其弃置两张牌', + nuzhan:'怒斩', + nuzhan2:'怒斩', + nuzhan_info:'锁定技,你每当你使用由一张锦囊牌转化而来的【杀】时,你可以额外使用一张杀;锁定技,你使用的由一张装备牌转化而来的【杀】的伤害值基数+1', + danji:'单骑', + danji_info:'觉醒技,准备阶段开始时,若你的手牌数大于你的体力值,你减1点体力上限,然后获得“马术”和“怒斩”', + tunchu:'屯储', + tunchu_info:'摸牌阶段摸牌时,若你没有“粮”,你可以额外摸两张牌,然后将任意张手牌置于你的武将上,称为“粮”,只要你的武将牌上有“粮”,你便不能使用【杀】', + shuliang:'输粮', + shuliang_info:'每当一名角色的结束阶段开始时,若其手牌数少于体力值,你可以移去一张“粮”,然后该角色摸两张牌', + jieyuan:'竭缘', + jieyuan_more:'竭缘', + jieyuan_less:'竭缘', + jieyuan_info:'当你对一名其他角色造成伤害时,若其体力值大于或等于你的体力值,你可弃置一张黑色手牌令此伤害+1;当你受到一名其他角色造成的伤害时,若其体力值大于或等于你的体力值,你可弃置一张红色手牌令此伤害-1。', + fenxin:'焚心', + fenxin_old:'焚心', + fenxin_info:'锁定技,一名其他角色死亡后,若其身份为:忠臣,你发动“竭缘”减少伤害无体力值限制;反贼,你发动“竭缘”增加伤害无体力值限制;内奸,将“竭缘”中的黑色手牌和红色手牌改为一张牌。', + fenxin_old_info:'限定技,当你杀死一名非主公角色时,在其翻开身份牌之前,你可以与该角色交换身份牌。(你的身份为主公时不能发动此技能)', + shixin:'释衅', + shixin_info:'锁定技,当你受到火属性伤害时,你防止此伤害', + qingyi:'轻逸', + qingyi1:'轻逸', + qingyi2:'轻逸', + qingyi_info:'你可以跳过摸牌阶段,或跳过出牌阶段并弃置一张装备牌,若如此则视为对任意一名使用一张【杀】', + dujin:'独进', + dujin_info:'摸牌阶段,你可以额外摸X+1张牌(X为你装备区里牌数的一半且向下取整)', + yuhua:'羽化', + yuhua_info:'锁定技,弃牌阶段内,你的非基本牌不计入手牌数,且你不能弃置你的非基本牌', + qirang:'祈禳', + qirang_info:'当有装备牌进入你的装备区时,你可以获得牌堆中的一张锦囊牌', + biluan:'避乱', + biluan_info:'摸牌阶段开始时,若有其他角色与你距离不大于1,则你可以放弃摸牌。若如此做,你的防御距离+X(X为势力数)', + lixia:'礼下', + lixia_info:'锁定技,其他角色结束阶段开始时,若你不在其攻击范围内,你摸一张牌或令其摸一张牌。若如此做,你的防御距离-1', + yishe:'义舍', + yishe_bg:'米', + yishe_info:'结束阶段开始时,若你的武将牌上没有牌,你可以摸两张牌。若如此做,你将两张牌置于武将牌上,称为“米”;当“米”移至其他区域后,若你的武将牌上没有“米”,你回复1点体力', + bushi:'布施', + midao:'米道', + bushi_info:'当你受到1点伤害后,或其他角色受到你造成的1点伤害后,受到伤害的角色可以获得一张“米”', + midao_info:'当一张判定牌生效前,你可以打出一张“米”代替之', + fengpo:'凤魄', + fengpo_info:'当你于出牌阶段内使用第一张【杀】或【决斗】指定目标后,若目标角色数为1,你可以选择一项:1.摸X张牌;2.此牌造成的伤害+X(X为其手牌中方牌的数量)', + chenqing:'陈情', + chenqing_info:'每轮限一次,当一名角色处于濒死状态时,你可以令另一名其他角色摸四张牌,然后弃置四张牌。若其以此法弃置的四张牌花色各不相同,则视为该角色对濒死的角色使用一张【桃】', + mozhi:'默识', + mozhi_info:'结束阶段开始时,你可以将一张手牌当你本回合出牌阶段使用的第一张基本或普通锦囊牌使用。然后,你可以将一张手牌当你本回合出牌阶段使用的第二张基本或普通锦囊牌使用', + ranshang:'燃殇', + ranshang2:'燃殇', + ranshang_info:'锁定技,当你受到1点火焰伤害后,你获得1枚“燃”标记;结束阶段开始时,你失去X点体力(X为“燃”标记的数量)', + hanyong:'悍勇', + hanyong_info:'当你使用【南蛮入侵】或【万箭齐发】时,若你的体力值小于游戏轮数,你可以令此牌造成的伤害+1', - yicong:'义从', - yongsi:'庸肆', - yongsi1:'庸肆', - yongsi2:'庸肆', - bifa:'笔伐', - bifa2:'笔伐', - songci:'颂词', - baobian:'豹变', - lihun:'离魂', - chongzhen:'冲阵', - chongzhen1:'冲阵', - chongzhen2:'冲阵', - yuanhu:'援护', - tianming:'天命', - mizhao:'密诏', - duwu:'黩武', - mingzhe:'明哲', - huanshi:'缓释', - hongyuan:'弘援', - aocai:'傲才', - aocai2:'傲才', - aocai2_backup:'傲才', - aocai3:'傲才', - huxiao:'虎啸', - huxiao3:'虎啸', - xueji:'血祭', - wuji:'武继', - shushen:'淑慎', - shenzhi:'神智', - xiongyi:'雄异', - junbing:'郡兵', - junbing2:'郡兵', - quji:'去疾', - sijian:'死谏', - suishi:'随势', - suishi2:'随势', - xiaoguo:'骁果', - duanxie:'断绁', - fenming:'奋命', - guixiu:'闺秀', - cunsi:'存嗣', - yongjue:'勇决', - hengzheng:'横征', - shengxi:'生息', - shoucheng:'守成', - shangyi:'尚义', - zhendu:'鸩毒', - qiluan:'戚乱', - qiluan2:'戚乱', - qiluan3:'戚乱', - shenxian:'甚贤', - qiangwu:'枪舞', - moukui:'谋溃', - moukui2:'谋溃', - lirang:'礼让', - mingshi:'名士', - liangzhu:'良助', - kaikang:'慷忾', - wangzun:'妄尊', - tongji:'同疾', - kuiwei:'溃围', - kuiwei2:'溃围', - yanzheng:'严整', - zhoufu:'咒缚', - zhoufu2:'咒缚', - zhoufu3:'咒缚', - yingbin:'影兵', - fenxun:'奋迅', - fenxun2:'奋迅', - spmengjin:'猛进', - xiemu:'协穆', - naman:'纳蛮', - zuixiang:'醉乡', - manjuan:'漫卷', - taichen:'抬榇', - jilei:'鸡肋', - jilei2:'鸡肋', - jilei2_bg:'肋', - fulu:'符箓', - fuji:'助祭', - fenyin:'奋音', - yawang:'雅望', - xunzhi:'殉志', - yingjian:'影箭', - fanxiang:'返乡', - fanxiang_info:'觉醒技,准备阶段开始时,若全场有至少一名已受伤且你曾发动【良助】令其摸牌的角色,则你回复1点体力和体力上限,失去技能【良助】并获得技能【枭姬】', - yingjian_info:'准备阶段,你可以视为使用一张无视距离的杀', - xunzhi_info:'准备阶段开始时,若你的上家和下家与你的体力值均不相等,你可以失去1点体力。若如此做,你的手牌上限+2', - yawang_info:'锁定技,摸牌阶段开始时,你改为摸x张牌,然后你于出牌阶段内至多使用x张牌(x为与你体力值相等的角色数)', - fenyin_info:'你的回合内,当你使用牌时,若此牌与你于此回合内使用的上一张牌颜色不同,则你可以摸一张牌,每回合最多发动3次', - fuji_info:'当一名角色造成雷电伤害时,你可以令其进行一次判定,若结果为黑色,此伤害+1;若结果为红色,该角色获得此牌。', - fulu_info:'你可以将【杀】当雷【杀】使用。', - jilei_info:'每当你受到有来源的伤害时,你可以选择一种牌的类别,令伤害来源不能使用、打出或弃置其此类别的手牌,直到回合结束', - danlao:'啖酪', - danlao_info:'当你成为一张指定了多个目标的锦囊牌的目标时,你可以取消之,并摸一张牌。', - gongao:'功獒', - zhuiji:'追击', - chouhai:'仇海', - chouhai_info:'锁定技,当你每次受到伤害时,若你没有手牌,此伤害+1。', - guiming:'归命', - guiming_info:'主公技,锁定技,你将残蚀描述中的“已受伤角色”改为“已受伤角色或其他吴势力角色”', - chixin:'赤心', - chixin1:'赤心', - chixin2:'赤心', - chixin_info:'你可以将♦牌当【杀】或【闪】使用或打出。出牌阶段,你对你攻击范围内的每名角色均可使用一张【杀】。', - suiren:'随仁', - suiren_info:'限定技,准备阶段开始时,你可以失去技能“义从”,然后加1点体力上限并回复1点体力,再令一名角色摸三张牌。', - canshi:'残蚀', - canshi2:'残蚀', - canshi_info:'摸牌阶段开始时,你可以改为摸x张牌(x为已受伤的角色数),若如此做,当你与此回合内使用基本牌或锦囊牌时,你弃置一张牌。', - zhuiji_info:'锁定技,你与体力值低于你的角色距离为1。', - kunfen:'困奋', - kunfen_info:'锁定技,结束阶段开始时,你失去1点体力,然后摸两张牌', - fengliang:'逢亮', - fengliang_info:'觉醒技,当你进入濒死状态时,你减1点体力上限并将体力值回复至2点,然后获得技能挑衅,将困奋改为非锁定技', - cihuai:'刺槐', - cihuai_info:'出牌阶段开始时,若你手牌中没有杀,你可以展示你的手牌,视为对一名角色使用一张杀', - gongao_info:'锁定技,每当一名角色死亡后,你增加一点体力上限,回复一点体力。', - juyi:'举义', - juyi_info:'觉醒技,准备阶段开始时,若你已受伤且体力上限大于存活角色数,你须将手牌摸至体力上限,然后获得技能“崩坏”和“威重”。', - weizhong:'威重', - weizhong_info:'锁定技,每当你的体力上限增加或减少时,你摸一张牌。', - taichen_info:'出牌阶段限一次,你可以自减一点体力,视为对一名角色使用一张杀(不计入回合内出杀限制)', - manjuan_info:'其他角色的卡牌因弃置而进入弃牌堆后,你可以弃置一张花色与之不同的牌,然后获得之', - zuixiang_info:'限定技,准备阶段开始时,你可以展示牌库顶的3张牌并置于你的武将牌上,你不可使用或打出与该些牌同类的牌,所有同类牌对你无效。之后每个你的准备阶段,你须重复展示一次,直至该些牌中任意两张点数相同时,将你武将牌上的全部牌置于你的手上。', - naman_info:'你可以获得其他角色打出的杀', - xiemu_info:'每当你成为其他角色的黑色牌的目标,可以弃置一张杀并摸两张牌', - spmengjin_info:'每当你使用一张杀,可以弃置目标一张牌', - fenxun_info:'出牌阶段限一次,你可以弃置一张牌并选择一名其他角色,然后本回合你计算与其的距离视为1', - yingbin_info:'锁定技,有“咒”的角色使用与“咒”花色相同的牌时,你摸一张牌;当你因同一名角色的同一张“咒”的效果摸第二张牌时,移去该“咒”', - zhoufu_info:'出牌阶段限一次,你可以将一张手牌置于一名没有"咒"的其他角色武将牌旁,称为"咒"。当有“咒”的角色判定时,将"咒"作为判定牌;一名角色回合结束时,若有角色于此回合因判定移除过“咒”,则你令这些角色各失去1点体力', - yanzheng_info:'若你的手牌数大于你的体力值,你可以将你装备区内的牌当【无懈可击】使用', - kuiwei_info:'结束阶段开始时,你可以摸2+X张牌,然后将你的武将牌翻面。在你的下个摸牌阶段开始时,你须弃置X张牌。(X等于当时场上装备区内的武器牌的数量)', - tongji_info:'锁定技。若你的手牌数大于你的体力值,则只要你在任一其他角色的攻击范围内,该角色使用【杀】时便不能指定你以外的角色为目标', - wangzun_info:'其他角色的准备阶段,你可以摸一张牌,然后令该角色此回合的手牌上限-1;直到你的回合开始,你不能再次发动此技', - kaikang_info:'每当你距离1以内的角色成为杀的目标后,你可以摸一张牌。若如此做,你交给其一张牌并展示之,若该牌为装备牌,该角色可以使用此牌。', - liangzhu_info:'当一名角色于其出牌阶段内回复体力时,你可以选择一项:1、摸一张牌;2、令该角色摸两张牌 ', - mingshi_info:'当你即将受到伤害时,若伤害来源的体力值大于你,你可以弃置一张黑色手牌令伤害-1 ', - lirang_info:'当你的牌因弃置而置入弃牌堆时,你可以将其中的任意张牌交给其他角色', - moukui_info:'当你使用【杀】指定一名角色为目标后,你可以选择一项:摸一张牌,或弃置其一张牌。若如此做,此【杀】被【闪】抵消时,该角色弃置你的一张牌。 ', - qiangwu_info:'出牌阶段,你可以进行一次判定。若如此做,则直到回合结束,你使用点数小于判定牌的 【杀】时不受距离限制,且你使用点数大于判定牌的【杀】时不计入出牌阶段的使用次数。', - shenxian_info:'每名角色的回合限一次,你的回合外,每当有其他角色因弃置而失去牌时,若其中有基本牌,你可以摸一张牌。', - qiluan_info:'每当你杀死一名角色后,可以在此回合结束时摸三张牌。', - qiluan_info_guozhan:'当你杀死一名角色后,你可于此回合结束后摸三张牌', - zhendu_info:'其他角色的出牌阶段开始时,你可以弃置一张手牌,视为该角色使用一张【酒】,然后你对其造成一点伤害。', - shangyi_info:'出牌阶段限一次,你可以观看一名其他角色的手牌,然后弃置其中的一张黑色牌', - shoucheng_info:'每当一名其他角色在其回合外失去最后的手牌时,你可令该角色摸一张牌。', - shengxi_info:'若你于出牌阶段未造成伤害,你可在弃牌阶段开始时摸两张牌。', - hengzheng_info:'摸牌阶段开始时,若你的体力值为1或你没有手牌,你可以改为获得每名其他角色区域里的一张牌。', - cunsi_info:'限定技,出牌阶段,你可以将所有手牌交给一名男性角色,令该角色获得技能【勇决】,然后将武将牌翻面', - guixiu_info:'每当你成为杀的目标,若你的手牌数小于体力值,可以摸一张牌', - fenming_info:'结束阶段开始时,若你处于连环状态,你可以弃置处于连环状态的每名角色的一张牌。', - duanxie_info:'出牌阶段限一次,你可以令一名其他角色横置武将牌,若如此做,你横置武将牌。', - xiaoguo_info:'其他角色的结束阶段开始时,你可以弃置一张基本牌,令该角色选择一项:1.弃置一张装备牌并令你摸一张牌;2.受到你对其造成的1点伤害。', - sijian_info:'当你失去最后的手牌时,你可以弃置一名其他角色的一张牌。', - suishi_info:'每当其他角色进入濒死状态时,伤害来源可以令你摸一张牌;每当其他角色死亡时,伤害来源可以令你失去1点体力', - quji_info:'出牌阶段限一次,你可以弃置X张牌(X为你已损失的体力值),然后令至多X名已受伤的角色各回复1点体力。若你以此法弃置的牌中有黑色牌,你失去一点体力。', - junbing_info:'一名角色的结束阶段开始时,若其手牌数少于或者等于1,该角色可以摸一张牌。若如此做,该角色须将所有手牌交给你,然后你交给其等量的牌。', - xiongyi_info:'限定技,出牌阶段,你可以指定至多三名角色与你各摸三张牌;若你指定的角色数不超过2,你回复1点体力', - xiongyi_info_guozhan:'限定技,出牌阶段,你可以令与你势力相同的所有角色各摸三张牌,然后若你的势力是角色最少的势力(或之一),则你回复1点体力', - shenzhi_info:'准备阶段开始时,你可以弃置所有手牌,若你以此法弃置的牌的张数不小于X,你回复1点体力(X为你当前的体力值)。', - shushen_info:'当你回复1点体力时,你可以令一名其他角色回复1点体力或摸两张牌', - wuji_info:'觉醒技,结束阶段,若你于此回合内造成过3点或更多伤害,你加1点体力上限并回复1点体力,失去"虎啸",然后从场上、牌堆或弃牌堆中获得【青龙偃月刀】', - xueji_info:'出牌阶段限一次,你可以弃置一张红色牌,然后选择至多X名角色,横置这些角色并对其中一名角色造成1点火焰伤害。(X为你已损失的体力值数且至少为1)', - huxiao_info:'锁定技,当你造成火焰伤害后,受到此伤害的角色各摸一张牌,本回合你对这些角色使用牌没有次数限制', - aocai_info:'当你于回合外需要使用或打出一张基本牌时,你可以观看牌堆顶的两张牌。若你观看的牌中有此牌,你可以使用打出之。', - hongyuan_info:'摸牌阶段摸牌时,你可以少摸一张牌,然后指定至多两名其他角色各摸一张牌。', - hongyuan_info_combat:'摸牌阶段摸牌时,你可以少摸一张牌,然后令其他友方角色各摸一张牌', - huanshi_info:'一名角色的判定牌生效前,你可令其观看你的手牌。若如此做,该角色选择你的一张牌,令你打出此牌代替之。', - mingzhe_info:'你的回合外,每当你因使用、打出或弃置而失去一张红色牌时,你可以摸一张牌。', - duwu_info:'出牌阶段,你可以弃置X张牌对你攻击范围内的一名其他角色造成1点伤害(X为该角色的体力值)。若你以此法令该角色进入濒死状态,则濒死状态结算后你失去1点体力,且本回合不能再发动黩武。', - tianming_info:'当你成为【杀】的目标时,你可以弃置两张牌(不足则全弃,无牌则不弃),然后摸两张牌;若此时全场体力值最多的角色仅有一名(且不是你),该角色也可以如此做。', - mizhao_info:'出牌阶段,你可以将所有手牌(至少一张)交给一名其他角色。若如此做,你令该角色与你指定的另一名有手牌的角色拼点。视为拼点赢的角色对没赢的角色使用一张【杀】。每阶段限一次。', - yuanhu_info:'结束阶段开始时,你可以将一张装备牌置于一名角色的装备区里,然后根据此装备牌的种类执行以下效果。武器牌:弃置距离该角色1以内的一名角色区域中的一张牌;防具牌:该角色摸一张牌;坐骑牌:该角色回复1点体力。', - lihun_info:'出牌阶段,你可以弃置一张牌并将你的武将牌翻面,若如此做,你指定一名男性角色,获得其所有手牌。出牌阶段结束时,你需为该角色每一点体力分配给其一张牌。每回合限一次。', - chongzhen_info:'每当你发动“龙胆”使用或打出一张手牌时,你可以立即获得对方的一张手牌。', - bifa_info:'结束阶段开始时,你可以将一张手牌移出游戏并指定一名其他角色。该角色的准备阶段,其观看你移出游戏的牌并选择一项:交给你一张与此牌同类型的手牌并获得此牌;或将此牌置入弃牌堆,然后失去1点体力。', - songci_info:'出牌阶段,你可以选择一项:令一名手牌数小于其体力值的角色摸两张牌;或令一名手牌数大于其体力值的角色弃置两张牌。此技能对每名角色只能使用一次。', - yongsi_info:'锁定技,摸牌阶段,你额外摸X张牌,X为场上现存势力数。弃牌阶段,你至少须弃置等同于场上现存势力数的牌(不足则全弃)。', - yicong_info:'锁定技,只要你的体力值大于2点,你的进攻距离+1;只要你的体力值为2点或更低,你的防御距离+1', - baobian_info:'锁定技,若你的体力值为3或更少,你视为拥有技能“挑衅”;若你的体力值为2或更少;你视为拥有技能“咆哮”;若你的体力值为1,你视为拥有技能“神速”。', - }, - }; + yicong:'义从', + yongsi:'庸肆', + yongsi1:'庸肆', + yongsi2:'庸肆', + bifa:'笔伐', + bifa2:'笔伐', + songci:'颂词', + baobian:'豹变', + lihun:'离魂', + chongzhen:'冲阵', + chongzhen1:'冲阵', + chongzhen2:'冲阵', + yuanhu:'援护', + tianming:'天命', + mizhao:'密诏', + duwu:'黩武', + mingzhe:'明哲', + huanshi:'缓释', + hongyuan:'弘援', + aocai:'傲才', + aocai2:'傲才', + aocai2_backup:'傲才', + aocai3:'傲才', + huxiao:'虎啸', + huxiao3:'虎啸', + xueji:'血祭', + wuji:'武继', + shushen:'淑慎', + shenzhi:'神智', + xiongyi:'雄异', + junbing:'郡兵', + junbing2:'郡兵', + quji:'去疾', + sijian:'死谏', + suishi:'随势', + suishi2:'随势', + xiaoguo:'骁果', + duanxie:'断绁', + fenming:'奋命', + guixiu:'闺秀', + cunsi:'存嗣', + yongjue:'勇决', + hengzheng:'横征', + shengxi:'生息', + shoucheng:'守成', + shangyi:'尚义', + zhendu:'鸩毒', + qiluan:'戚乱', + qiluan2:'戚乱', + qiluan3:'戚乱', + shenxian:'甚贤', + qiangwu:'枪舞', + moukui:'谋溃', + moukui2:'谋溃', + lirang:'礼让', + mingshi:'名士', + liangzhu:'良助', + kaikang:'慷忾', + wangzun:'妄尊', + tongji:'同疾', + kuiwei:'溃围', + kuiwei2:'溃围', + yanzheng:'严整', + zhoufu:'咒缚', + zhoufu2:'咒缚', + zhoufu3:'咒缚', + yingbin:'影兵', + fenxun:'奋迅', + fenxun2:'奋迅', + spmengjin:'猛进', + xiemu:'协穆', + naman:'纳蛮', + zuixiang:'醉乡', + manjuan:'漫卷', + taichen:'抬榇', + jilei:'鸡肋', + jilei2:'鸡肋', + jilei2_bg:'肋', + fulu:'符箓', + fuji:'助祭', + fenyin:'奋音', + yawang:'雅望', + xunzhi:'殉志', + yingjian:'影箭', + fanxiang:'返乡', + fanxiang_info:'觉醒技,准备阶段开始时,若全场有至少一名已受伤且你曾发动【良助】令其摸牌的角色,则你回复1点体力和体力上限,失去技能【良助】并获得技能【枭姬】', + yingjian_info:'准备阶段,你可以视为使用一张无视距离的杀', + xunzhi_info:'准备阶段开始时,若你的上家和下家与你的体力值均不相等,你可以失去1点体力。若如此做,你的手牌上限+2', + yawang_info:'锁定技,摸牌阶段开始时,你改为摸x张牌,然后你于出牌阶段内至多使用x张牌(x为与你体力值相等的角色数)', + fenyin_info:'你的回合内,当你使用牌时,若此牌与你于此回合内使用的上一张牌颜色不同,则你可以摸一张牌,每回合最多发动3次', + fuji_info:'当一名角色造成雷电伤害时,你可以令其进行一次判定,若结果为黑色,此伤害+1;若结果为红色,该角色获得此牌。', + fulu_info:'你可以将【杀】当雷【杀】使用。', + jilei_info:'每当你受到有来源的伤害时,你可以选择一种牌的类别,令伤害来源不能使用、打出或弃置其此类别的手牌,直到回合结束', + danlao:'啖酪', + danlao_info:'当你成为一张指定了多个目标的锦囊牌的目标时,你可以取消之,并摸一张牌。', + gongao:'功獒', + zhuiji:'追击', + chouhai:'仇海', + chouhai_info:'锁定技,当你每次受到伤害时,若你没有手牌,此伤害+1。', + guiming:'归命', + guiming_info:'主公技,锁定技,你将残蚀描述中的“已受伤角色”改为“已受伤角色或其他吴势力角色”', + chixin:'赤心', + chixin1:'赤心', + chixin2:'赤心', + chixin_info:'你可以将♦牌当【杀】或【闪】使用或打出。出牌阶段,你对你攻击范围内的每名角色均可使用一张【杀】。', + suiren:'随仁', + suiren_info:'限定技,准备阶段开始时,你可以失去技能“义从”,然后加1点体力上限并回复1点体力,再令一名角色摸三张牌。', + canshi:'残蚀', + canshi2:'残蚀', + canshi_info:'摸牌阶段开始时,你可以改为摸x张牌(x为已受伤的角色数),若如此做,当你与此回合内使用基本牌或锦囊牌时,你弃置一张牌。', + zhuiji_info:'锁定技,你与体力值低于你的角色距离为1。', + kunfen:'困奋', + kunfen_info:'锁定技,结束阶段开始时,你失去1点体力,然后摸两张牌', + fengliang:'逢亮', + fengliang_info:'觉醒技,当你进入濒死状态时,你减1点体力上限并将体力值回复至2点,然后获得技能挑衅,将困奋改为非锁定技', + cihuai:'刺槐', + cihuai_info:'出牌阶段开始时,若你手牌中没有杀,你可以展示你的手牌,视为对一名角色使用一张杀', + gongao_info:'锁定技,每当一名角色死亡后,你增加一点体力上限,回复一点体力。', + juyi:'举义', + juyi_info:'觉醒技,准备阶段开始时,若你已受伤且体力上限大于存活角色数,你须将手牌摸至体力上限,然后获得技能“崩坏”和“威重”。', + weizhong:'威重', + weizhong_info:'锁定技,每当你的体力上限增加或减少时,你摸一张牌。', + taichen_info:'出牌阶段限一次,你可以自减一点体力,视为对一名角色使用一张杀(不计入回合内出杀限制)', + manjuan_info:'其他角色的卡牌因弃置而进入弃牌堆后,你可以弃置一张花色与之不同的牌,然后获得之', + zuixiang_info:'限定技,准备阶段开始时,你可以展示牌库顶的3张牌并置于你的武将牌上,你不可使用或打出与该些牌同类的牌,所有同类牌对你无效。之后每个你的准备阶段,你须重复展示一次,直至该些牌中任意两张点数相同时,将你武将牌上的全部牌置于你的手上。', + naman_info:'你可以获得其他角色打出的杀', + xiemu_info:'每当你成为其他角色的黑色牌的目标,可以弃置一张杀并摸两张牌', + spmengjin_info:'每当你使用一张杀,可以弃置目标一张牌', + fenxun_info:'出牌阶段限一次,你可以弃置一张牌并选择一名其他角色,然后本回合你计算与其的距离视为1', + yingbin_info:'锁定技,有“咒”的角色使用与“咒”花色相同的牌时,你摸一张牌;当你因同一名角色的同一张“咒”的效果摸第二张牌时,移去该“咒”', + zhoufu_info:'出牌阶段限一次,你可以将一张手牌置于一名没有"咒"的其他角色武将牌旁,称为"咒"。当有“咒”的角色判定时,将"咒"作为判定牌;一名角色回合结束时,若有角色于此回合因判定移除过“咒”,则你令这些角色各失去1点体力', + yanzheng_info:'若你的手牌数大于你的体力值,你可以将你装备区内的牌当【无懈可击】使用', + kuiwei_info:'结束阶段开始时,你可以摸2+X张牌,然后将你的武将牌翻面。在你的下个摸牌阶段开始时,你须弃置X张牌。(X等于当时场上装备区内的武器牌的数量)', + tongji_info:'锁定技。若你的手牌数大于你的体力值,则只要你在任一其他角色的攻击范围内,该角色使用【杀】时便不能指定你以外的角色为目标', + wangzun_info:'其他角色的准备阶段,你可以摸一张牌,然后令该角色此回合的手牌上限-1;直到你的回合开始,你不能再次发动此技', + kaikang_info:'每当你距离1以内的角色成为杀的目标后,你可以摸一张牌。若如此做,你交给其一张牌并展示之,若该牌为装备牌,该角色可以使用此牌。', + liangzhu_info:'当一名角色于其出牌阶段内回复体力时,你可以选择一项:1、摸一张牌;2、令该角色摸两张牌 ', + mingshi_info:'当你即将受到伤害时,若伤害来源的体力值大于你,你可以弃置一张黑色手牌令伤害-1 ', + lirang_info:'当你的牌因弃置而置入弃牌堆时,你可以将其中的任意张牌交给其他角色', + moukui_info:'当你使用【杀】指定一名角色为目标后,你可以选择一项:摸一张牌,或弃置其一张牌。若如此做,此【杀】被【闪】抵消时,该角色弃置你的一张牌。 ', + qiangwu_info:'出牌阶段,你可以进行一次判定。若如此做,则直到回合结束,你使用点数小于判定牌的 【杀】时不受距离限制,且你使用点数大于判定牌的【杀】时不计入出牌阶段的使用次数。', + shenxian_info:'每名角色的回合限一次,你的回合外,每当有其他角色因弃置而失去牌时,若其中有基本牌,你可以摸一张牌。', + qiluan_info:'每当你杀死一名角色后,可以在此回合结束时摸三张牌。', + qiluan_info_guozhan:'当你杀死一名角色后,你可于此回合结束后摸三张牌', + zhendu_info:'其他角色的出牌阶段开始时,你可以弃置一张手牌,视为该角色使用一张【酒】,然后你对其造成一点伤害。', + shangyi_info:'出牌阶段限一次,你可以观看一名其他角色的手牌,然后弃置其中的一张黑色牌', + shoucheng_info:'每当一名其他角色在其回合外失去最后的手牌时,你可令该角色摸一张牌。', + shengxi_info:'若你于出牌阶段未造成伤害,你可在弃牌阶段开始时摸两张牌。', + hengzheng_info:'摸牌阶段开始时,若你的体力值为1或你没有手牌,你可以改为获得每名其他角色区域里的一张牌。', + cunsi_info:'限定技,出牌阶段,你可以将所有手牌交给一名男性角色,令该角色获得技能【勇决】,然后将武将牌翻面', + guixiu_info:'每当你成为杀的目标,若你的手牌数小于体力值,可以摸一张牌', + fenming_info:'结束阶段开始时,若你处于连环状态,你可以弃置处于连环状态的每名角色的一张牌。', + duanxie_info:'出牌阶段限一次,你可以令一名其他角色横置武将牌,若如此做,你横置武将牌。', + xiaoguo_info:'其他角色的结束阶段开始时,你可以弃置一张基本牌,令该角色选择一项:1.弃置一张装备牌并令你摸一张牌;2.受到你对其造成的1点伤害。', + sijian_info:'当你失去最后的手牌时,你可以弃置一名其他角色的一张牌。', + suishi_info:'每当其他角色进入濒死状态时,伤害来源可以令你摸一张牌;每当其他角色死亡时,伤害来源可以令你失去1点体力', + quji_info:'出牌阶段限一次,你可以弃置X张牌(X为你已损失的体力值),然后令至多X名已受伤的角色各回复1点体力。若你以此法弃置的牌中有黑色牌,你失去一点体力。', + junbing_info:'一名角色的结束阶段开始时,若其手牌数少于或者等于1,该角色可以摸一张牌。若如此做,该角色须将所有手牌交给你,然后你交给其等量的牌。', + xiongyi_info:'限定技,出牌阶段,你可以指定至多三名角色与你各摸三张牌;若你指定的角色数不超过2,你回复1点体力', + xiongyi_info_guozhan:'限定技,出牌阶段,你可以令与你势力相同的所有角色各摸三张牌,然后若你的势力是角色最少的势力(或之一),则你回复1点体力', + shenzhi_info:'准备阶段开始时,你可以弃置所有手牌,若你以此法弃置的牌的张数不小于X,你回复1点体力(X为你当前的体力值)。', + shushen_info:'当你回复1点体力时,你可以令一名其他角色回复1点体力或摸两张牌', + wuji_info:'觉醒技,结束阶段,若你于此回合内造成过3点或更多伤害,你加1点体力上限并回复1点体力,失去"虎啸",然后从场上、牌堆或弃牌堆中获得【青龙偃月刀】', + xueji_info:'出牌阶段限一次,你可以弃置一张红色牌,然后选择至多X名角色,横置这些角色并对其中一名角色造成1点火焰伤害。(X为你已损失的体力值数且至少为1)', + huxiao_info:'锁定技,当你造成火焰伤害后,受到此伤害的角色各摸一张牌,本回合你对这些角色使用牌没有次数限制', + aocai_info:'当你于回合外需要使用或打出一张基本牌时,你可以观看牌堆顶的两张牌。若你观看的牌中有此牌,你可以使用打出之。', + hongyuan_info:'摸牌阶段摸牌时,你可以少摸一张牌,然后指定至多两名其他角色各摸一张牌。', + hongyuan_info_combat:'摸牌阶段摸牌时,你可以少摸一张牌,然后令其他友方角色各摸一张牌', + huanshi_info:'一名角色的判定牌生效前,你可令其观看你的手牌。若如此做,该角色选择你的一张牌,令你打出此牌代替之。', + mingzhe_info:'你的回合外,每当你因使用、打出或弃置而失去一张红色牌时,你可以摸一张牌。', + duwu_info:'出牌阶段,你可以弃置X张牌对你攻击范围内的一名其他角色造成1点伤害(X为该角色的体力值)。若你以此法令该角色进入濒死状态,则濒死状态结算后你失去1点体力,且本回合不能再发动黩武。', + tianming_info:'当你成为【杀】的目标时,你可以弃置两张牌(不足则全弃,无牌则不弃),然后摸两张牌;若此时全场体力值最多的角色仅有一名(且不是你),该角色也可以如此做。', + mizhao_info:'出牌阶段,你可以将所有手牌(至少一张)交给一名其他角色。若如此做,你令该角色与你指定的另一名有手牌的角色拼点。视为拼点赢的角色对没赢的角色使用一张【杀】。每阶段限一次。', + yuanhu_info:'结束阶段开始时,你可以将一张装备牌置于一名角色的装备区里,然后根据此装备牌的种类执行以下效果。武器牌:弃置距离该角色1以内的一名角色区域中的一张牌;防具牌:该角色摸一张牌;坐骑牌:该角色回复1点体力。', + lihun_info:'出牌阶段,你可以弃置一张牌并将你的武将牌翻面,若如此做,你指定一名男性角色,获得其所有手牌。出牌阶段结束时,你需为该角色每一点体力分配给其一张牌。每回合限一次。', + chongzhen_info:'每当你发动“龙胆”使用或打出一张手牌时,你可以立即获得对方的一张手牌。', + bifa_info:'结束阶段开始时,你可以将一张手牌移出游戏并指定一名其他角色。该角色的准备阶段,其观看你移出游戏的牌并选择一项:交给你一张与此牌同类型的手牌并获得此牌;或将此牌置入弃牌堆,然后失去1点体力。', + songci_info:'出牌阶段,你可以选择一项:令一名手牌数小于其体力值的角色摸两张牌;或令一名手牌数大于其体力值的角色弃置两张牌。此技能对每名角色只能使用一次。', + yongsi_info:'锁定技,摸牌阶段,你额外摸X张牌,X为场上现存势力数。弃牌阶段,你至少须弃置等同于场上现存势力数的牌(不足则全弃)。', + yicong_info:'锁定技,只要你的体力值大于2点,你的进攻距离+1;只要你的体力值为2点或更低,你的防御距离+1', + baobian_info:'锁定技,若你的体力值为3或更少,你视为拥有技能“挑衅”;若你的体力值为2或更少;你视为拥有技能“咆哮”;若你的体力值为1,你视为拥有技能“神速”。', + }, + }; }); diff --git a/character/standard.js b/character/standard.js index f6dcb1917..69c1d61c3 100644 --- a/character/standard.js +++ b/character/standard.js @@ -375,13 +375,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "step 1" if(event.cards.length>1){ player.chooseCardButton('将“遗计”牌分配给任意角色',true,event.cards,[1,event.cards.length]).set('ai',function(button){ - if(ui.selected.buttons.length==0) return 1; - return 0; + if(ui.selected.buttons.length==0) return 1; + return 0; }); } - else if(event.cards.length==1){ - event._result={links:event.cards.slice(0),bool:true}; - } + else if(event.cards.length==1){ + event._result={links:event.cards.slice(0),bool:true}; + } else{ event.finish(); } @@ -392,23 +392,23 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } event.togive=result.links.slice(0); player.chooseTarget('将'+get.translation(result.links)+'交给一名角色',true).set('ai',function(target){ - var att=get.attitude(_status.event.player,target); + var att=get.attitude(_status.event.player,target); if(_status.event.enemy){ - return -att; - } - else if(att>0){ - return att/(1+target.countCards('h')); - } - else{ - return att/100; - } + return -att; + } + else if(att>0){ + return att/(1+target.countCards('h')); + } + else{ + return att/100; + } }).set('enemy',get.value(event.togive[0])<0); } "step 3" if(result.targets.length){ result.targets[0].gain(event.togive,'draw'); player.line(result.targets[0],'green'); - game.log(result.targets[0],'获得了'+get.cnNumber(event.togive.length)+'张牌'); + game.log(result.targets[0],'获得了'+get.cnNumber(event.togive.length)+'张牌'); event.goto(1); } }, @@ -564,6 +564,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, result:{ target:function(player,target){ + if(target.hasSkillTag('nogain')) return 0; if(ui.selected.cards.length&&ui.selected.cards[0].name=='du'){ if(target.hasSkillTag('nodu')) return 0; return -10; @@ -1139,8 +1140,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(!player.countCards('h','shan')) return false; }, order:function(){ - return get.order({name:'sha'})+0.1; - }, + return get.order({name:'sha'})+0.1; + }, useful:-1, value:-1 } diff --git a/character/swd.js b/character/swd.js index 62832d60b..44af2ba84 100644 --- a/character/swd.js +++ b/character/swd.js @@ -1,5275 +1,5275 @@ 'use strict'; game.import('character',function(lib,game,ui,get,ai,_status){ - return { - name:'swd', - character:{ - swd_huzhongxian:['male','wu',3,['daofa','xielv','hujing']], + return { + name:'swd', + character:{ + swd_huzhongxian:['male','wu',3,['daofa','xielv','hujing']], - swd_anka:['male','qun',3,['songci','anlianying']], - swd_septem:['male','qun',4,['jiying','liaoyuan','yishan']], - swd_kama:['female','qun',3,['yueren','shangshi']], - // swd_miles:['male','qun',4,['aojian','miles_xueyi','mohua2']], - swd_nicole:['female','qun',3,['huanjian','lingwu','minjing']], - swd_wangsiyue:['female','wei',3,['duishi','biyue']], - swd_weida:['female','qun',3,['yueren','zhenlie','duijue']], - swd_xuanyuanjianxian:['male','qun',4,['pozhou','huajian','xuanyuan']], + swd_anka:['male','qun',3,['songci','anlianying']], + swd_septem:['male','qun',4,['jiying','liaoyuan','yishan']], + swd_kama:['female','qun',3,['yueren','shangshi']], + // swd_miles:['male','qun',4,['aojian','miles_xueyi','mohua2']], + swd_nicole:['female','qun',3,['huanjian','lingwu','minjing']], + swd_wangsiyue:['female','wei',3,['duishi','biyue']], + swd_weida:['female','qun',3,['yueren','zhenlie','duijue']], + swd_xuanyuanjianxian:['male','qun',4,['pozhou','huajian','xuanyuan']], - swd_chenjingchou:['male','wu',3,['youyin','yihua']], - swd_duguningke:['female','qun',3,['nlianji','touxi']], - swd_guyue:['male','wei',3,['gtiandao','gxianyin','wangchen']], - swd_tuobayuer:['female','shu',4,['liuhong','poyue','niepan']], - swd_yuwentuo:['male','shu',4,['wushuang','xielei','kunlunjing']], - swd_yuxiaoxue:['female','wei',3,['huanhun','daixing','yinyue']], + swd_chenjingchou:['male','wu',3,['youyin','yihua']], + swd_duguningke:['female','qun',3,['nlianji','touxi']], + swd_guyue:['male','wei',3,['gtiandao','gxianyin','wangchen']], + swd_tuobayuer:['female','shu',4,['liuhong','poyue','niepan']], + swd_yuwentuo:['male','shu',4,['wushuang','xielei','kunlunjing']], + swd_yuxiaoxue:['female','wei',3,['huanhun','daixing','yinyue']], - swd_jiliang:['male','wu',3,['yunchou','gongxin','jqimou']], - swd_shuijing:['female','qun',4,['mojian','duanyue','tuzhen']], - swd_quxian:['female','qun',3,['mojian','huanxia']], - swd_xiyan:['male','qun',3,['jiefen','datong']], - swd_cheyun:['female','wu',3,['cyxianjiang','cyqiaoxie','shengong']], - swd_huanyuanzhi:['male','qun',3,['tianshu','lanzhi','mufeng']], - swd_murongshi:['female','shu',4,['duanyi','guxing']], - swd_jipeng:['male','wu',3,['reyingzi','guozao']], - swd_qi:['male','qun',3,['yaotong','heihuo','pojian']], + swd_jiliang:['male','wu',3,['yunchou','gongxin','jqimou']], + swd_shuijing:['female','qun',4,['mojian','duanyue','tuzhen']], + swd_quxian:['female','qun',3,['mojian','huanxia']], + swd_xiyan:['male','qun',3,['jiefen','datong']], + swd_cheyun:['female','wu',3,['cyxianjiang','cyqiaoxie','shengong']], + swd_huanyuanzhi:['male','qun',3,['tianshu','lanzhi','mufeng']], + swd_murongshi:['female','shu',4,['duanyi','guxing']], + swd_jipeng:['male','wu',3,['reyingzi','guozao']], + swd_qi:['male','qun',3,['yaotong','heihuo','pojian']], - swd_luchengxuan:['male','wu',4,['ljifeng','lxianglong']], - swd_xiarou:['female','shu',3,['xianghui','huiqi']], - swd_moye:['female','wu',3,['rexue','liuli','senluo']], + swd_luchengxuan:['male','wu',4,['ljifeng','lxianglong']], + swd_xiarou:['female','shu',3,['xianghui','huiqi']], + swd_moye:['female','wu',3,['rexue','liuli','senluo']], - swd_zhaoyun:['male','shu',4,['longdan','pozhen','tanlin']], - swd_hengai:['female','shu',3,['funiao','ningxian','hlingbo']], - swd_duanmeng:['female','shu',4,['xuanying','lieren']], - swd_jiangwu:['male','shu',4,['yijue','dangping']], - swd_tuwei:['male','shu',3,['zhanlu','susheng']], - swd_yeyaxi:['female','shu',3,['rexue','huopu','shenyan']], + swd_zhaoyun:['male','shu',4,['longdan','pozhen','tanlin']], + swd_hengai:['female','shu',3,['funiao','ningxian','hlingbo']], + swd_duanmeng:['female','shu',4,['xuanying','lieren']], + swd_jiangwu:['male','shu',4,['yijue','dangping']], + swd_tuwei:['male','shu',3,['zhanlu','susheng']], + swd_yeyaxi:['female','shu',3,['rexue','huopu','shenyan']], - swd_muyun:['male','wei',4,['zhuhai','polang','jikong']], - swd_lanyin:['female','wei',3,['xingdian','yulin','luomei']], - swd_zhiyin:['female','wei',3,['xuehuang','ningshuang','zhuyu']], - swd_qiner:['female','wei',3,['huanyin','tianhuo','xuanzhou']], - swd_jiuyou:['male','wei',3,['lexue']], - swd_duopeng:['male','wu',3,['luanji','reyingzi']], + swd_muyun:['male','wei',4,['zhuhai','polang','jikong']], + swd_lanyin:['female','wei',3,['xingdian','yulin','luomei']], + swd_zhiyin:['female','wei',3,['xuehuang','ningshuang','zhuyu']], + swd_qiner:['female','wei',3,['huanyin','tianhuo','xuanzhou']], + swd_jiuyou:['male','wei',3,['lexue']], + swd_duopeng:['male','wu',3,['luanji','reyingzi']], - swd_fengtianling:['male','shu',4,['guiyan','jiang']], - swd_huyue:['female','wu',3,['hyunshen','fengming']], - swd_jialanduo:['male','qun',4,['xianyin','mailun']], - swd_rongshuang:['female','wu',3,['suiyan','duanxing']], - swd_zhuoshanzhu:['male','wu',4,['suiyan','wanjun']], - swd_jiting:['female','wei',4,['guanhu','lingshi']], + swd_fengtianling:['male','shu',4,['guiyan','jiang']], + swd_huyue:['female','wu',3,['hyunshen','fengming']], + swd_jialanduo:['male','qun',4,['xianyin','mailun']], + swd_rongshuang:['female','wu',3,['suiyan','duanxing']], + swd_zhuoshanzhu:['male','wu',4,['suiyan','wanjun']], + swd_jiting:['female','wei',4,['guanhu','lingshi']], - swd_sikongyu:['male','wu',4,['sliufeng','linyun','hutian']], - swd_muyue:['female','wei',3,['xingzhui','lingxian','shouyin']], - swd_ziqiao:['female','shu',3,['guaili','fuyan']], - swd_fengyu:['male','shu',4,['fzhenwei','shangxi']], + swd_sikongyu:['male','wu',4,['sliufeng','linyun','hutian']], + swd_muyue:['female','wei',3,['xingzhui','lingxian','shouyin']], + swd_ziqiao:['female','shu',3,['guaili','fuyan']], + swd_fengyu:['male','shu',4,['fzhenwei','shangxi']], - // swd_wushi:['male','wei',3,['zhoufu','yingbin','xuying']], - // swd_lanmoshen:['female','wei',3,['bingjian','lieren']], - swd_huanglei:['male','qun',3,['jilve','gongshen','gaizao']], - // swd_libai:['female','qun',3,['miaobi','zhexian']], - swd_kendi:['male','qun',3,['zhanxing','kbolan']], - // swd_lijing:['male','qun',4,['tianyi','zhuhai']], - swd_lilian:['female','qun',3,['swd_wuxie','lqingcheng']], - // swd_linming:['male','qun',3,['shelie','bifa']], - // swd_philis:['male','qun',4,['yicong','wangxi']], - // swd_pepin:['male','qun',4,['rejianxiong','quhu']], - swd_kangnalishi:['male','qun',1,['busi','xuying','yinguo']], - swd_xuanyuanjiantong:['male','qun',3,['chengjian','huanling']], - swd_huiyan:['male','qun',4,['hwendao','lingfeng','hxunzhi']], + // swd_wushi:['male','wei',3,['zhoufu','yingbin','xuying']], + // swd_lanmoshen:['female','wei',3,['bingjian','lieren']], + swd_huanglei:['male','qun',3,['jilve','gongshen','gaizao']], + // swd_libai:['female','qun',3,['miaobi','zhexian']], + swd_kendi:['male','qun',3,['zhanxing','kbolan']], + // swd_lijing:['male','qun',4,['tianyi','zhuhai']], + swd_lilian:['female','qun',3,['swd_wuxie','lqingcheng']], + // swd_linming:['male','qun',3,['shelie','bifa']], + // swd_philis:['male','qun',4,['yicong','wangxi']], + // swd_pepin:['male','qun',4,['rejianxiong','quhu']], + swd_kangnalishi:['male','qun',1,['busi','xuying','yinguo']], + swd_xuanyuanjiantong:['male','qun',3,['chengjian','huanling']], + swd_huiyan:['male','qun',4,['hwendao','lingfeng','hxunzhi']], - // swd_chenfu:['male','qun',4,['xuanzhou','bingfeng']], - // swd_chengyaojin:['male','qun',4,['jiuchi','jufu']], - swd_shanxiaoxiao:['female','wu',3,['shehun','xiaomoyu']], - swd_yuchiyanhong:['female','shu',3,['huanxing','meihuo']], - // swd_hanteng:['male','qun',4,['kuangfu']], - // swd_heran:['male','qun',3,['yujian','guiyin','shejie']], - // swd_xingtian:['male','qun',8,[]], - // swd_qinshubao:['male','qun',3,['huajing','pingxu']], - // swd_tuobayueer:['female','shu',3,['shushen','biyue']], - // swd_yangshuo:['male','qun',4,['longdan','luomu']], - // swd_zhanglie:['male','qun',4,['huajin','poxiao']], + // swd_chenfu:['male','qun',4,['xuanzhou','bingfeng']], + // swd_chengyaojin:['male','qun',4,['jiuchi','jufu']], + swd_shanxiaoxiao:['female','wu',3,['shehun','xiaomoyu']], + swd_yuchiyanhong:['female','shu',3,['huanxing','meihuo']], + // swd_hanteng:['male','qun',4,['kuangfu']], + // swd_heran:['male','qun',3,['yujian','guiyin','shejie']], + // swd_xingtian:['male','qun',8,[]], + // swd_qinshubao:['male','qun',3,['huajing','pingxu']], + // swd_tuobayueer:['female','shu',3,['shushen','biyue']], + // swd_yangshuo:['male','qun',4,['longdan','luomu']], + // swd_zhanglie:['male','qun',4,['huajin','poxiao']], - swd_hanluo:['male','qun',5,['tiebi']], - swd_fu:['male','qun',5,['yudun']], - swd_linyue:['male','wei',3,['zhenjiu','lmazui']], - swd_zidashu:['male','wu',3,['shoulie','hudun']], - swd_maixing:['male','wu',3,['toudan','shending']], - swd_fuyan:['male','qun',4,['lianda']], - swd_haidapang:['female','wu',3,['bingjian','rumeng']], - swd_shaowei:['female','shu',3,['jianji','huangyu']], + swd_hanluo:['male','qun',5,['tiebi']], + swd_fu:['male','qun',5,['yudun']], + swd_linyue:['male','wei',3,['zhenjiu','lmazui']], + swd_zidashu:['male','wu',3,['shoulie','hudun']], + swd_maixing:['male','wu',3,['toudan','shending']], + swd_fuyan:['male','qun',4,['lianda']], + swd_haidapang:['female','wu',3,['bingjian','rumeng']], + swd_shaowei:['female','shu',3,['jianji','huangyu']], - swd_youzhao:['male','shu',4,['longdan','yuchen']], - swd_shangzhang:['male','shu',4,['lianwu']], - swd_situqiang:['female','shu',3,['fengze','lingyue','jinlin']], + swd_youzhao:['male','shu',4,['longdan','yuchen']], + swd_shangzhang:['male','shu',4,['lianwu']], + swd_situqiang:['female','shu',3,['fengze','lingyue','jinlin']], - swd_chunyuheng:['male','wei',2,['jueqing','shengshou','xuying']], - swd_hanlong:['male','wei',4,['ciqiu','siji']], - swd_yuli:['female','wu',3,['lingxin','tianxiang']], - swd_zhanggao:['male','wei',4,['yicong','poxing']], - swd_shuwaner:['female','shu',3,['sxianjing','huodan']], - swd_xiaohuanglong:['male','wei',3,['yeying','juxi']], + swd_chunyuheng:['male','wei',2,['jueqing','shengshou','xuying']], + swd_hanlong:['male','wei',4,['ciqiu','siji']], + swd_yuli:['female','wu',3,['lingxin','tianxiang']], + swd_zhanggao:['male','wei',4,['yicong','poxing']], + swd_shuwaner:['female','shu',3,['sxianjing','huodan']], + swd_xiaohuanglong:['male','wei',3,['yeying','juxi']], - swd_hupo:['male','wu',3,['dunxing','guiying']], - swd_jiangziya:['male','wu',3,['mingfu','tianlun']], - }, - characterIntro:{ - swd_kendi:'占星大师老肯迪的孙子,老肯迪死后,他也自称肯迪,伪装成老肯迪,以保护老肯迪的藏书。肯迪平常以接受委托抄书与翻译拉丁文书籍为业,除了占星术以外,其余知识也相当广博。为了增长见闻,什么可怕的地方都敢去,所以认识薇达与不少的军官。后来,肯迪的子孙成为伊斯兰地区的大学者,以因果定律的学说著名于世。', - swd_shuwaner:'第一代祝犁黄汉卿的妻子,二代祝犁黄采儿的母亲。陷阱机关师,擅长火系陷阱,并能驱使一种可爆裂来杀敌之神秘「火丹」技术。', - swd_xiaohuanglong:'龙族之幻兽,后土之神将它送给兰茵避险,以保护她安全。', - swd_huzhongxian:'炼妖壶是女娲神所创,是以开天辟地创造生命的工具,开创出万物后即遗留于某一处水底神殿中。由巴蛇及蛟龟守护该神器,过了约莫千年之久,炼妖壶已可幻化成人形,即为壶中仙。此时正因人类对异类的排斥,巴蛇对此愤愤不平,壶中仙与巴蛇讨论人魔共存的方法,但巴蛇觉得壶中仙是另有所图。自不采用,一日趁壶中仙不注意,将炼妖壶的妖怪全数释放,留下蛟龟看守练妖壶,巴蛇率领魔族大军反攻人类,从此人魔之战一直持续着。', - swd_anka:'安卡在数千年前,曾经是法老王的宠物。在法老王过世后,本来要当陪葬品,却被一位也要被陪葬的祭司带着逃走,安卡借着长期跟随祭司,学得不少后来传到欧洲的黑魔法,成了一只猫精。但在欧洲黑猫很不受欢迎,之后遇上卡玛,成为共患难的好友。安卡有许多癖好,像是收集漂亮的石头把它藏起来,若是日后又发现会很高兴。', - swd_septem:'欧洲梅罗文加王朝高卢出生的东方人与日耳曼混血儿,宇文拓的后人。深受丕平三世的器重,主要担任收集情报等工作,因为屡立大功而被受封为骑士。后因接受丕平三世的任务而秘密离开高卢前往东方寻找所谓的战争不败之术,由此踏上漫漫征途。', - swd_kama:'来自印度的爱情精灵,与一只来自埃及的有翼黑猫一同旅行,黑猫名叫安卡。数百年来,卡玛跟人类有数不尽的爱情故事,大部分都以悲剧收场,她不断的在人间徘徊,为的是寻找永恒的知己。', - swd_nicole:'前世是独孤宁珂,灵魂被古月仙人用伏羲琴净化,因此未受到魔界污染。她没有过去的记忆,因此个性单纯,对许多事都好奇。后来受撒旦派遣来引导赛特,希望赛特能加入撒旦的阵营。', - swd_wangsiyue:'长安名士的孙女,熟读四书以及佛经,有才女之称,还没出嫁就有大批追求者,她的字画就能在市集上以高价卖出。她非常喜欢诗,特别是古朴的诗经的诗句,遇到说不出口的事,就用吟诗的方式表达。', - swd_weida:'阿拉伯女性,凯利宾瓦力德之后裔,女中豪杰,做事干脆利落,不喜欢拖拖拉拉。长期的军旅生涯,使她的行事作风与一般女性不同。阿拉伯世界的女子长年戴着面纱,不能与男子一起走路,薇达则是通通不遵守。', - swd_xuanyuanjianxian:'东汉末年,年幼的徐暮云的神识被应龙之女分离出来时附于野狼尸体上,化作金狼。因总想夺回成年徐暮云神识所控制的肉身而时常袭击徐暮云。在木门道获得剑气后化为人形,前往遥远的云和山的彼端,归隐为轩辕剑仙。平常能言善道,出口成章,甚至杀人出血成“书画”为其一绝。', - swd_xuanyuanjiantong:'由轩辕剑鞘幻化而成的仙童,好奇心很重,完全是个小孩子的心,跟轩辕剑仙成一老一少的对比。', - swd_chenjingchou:'为陈朝后裔。忠臣陈辅以“靖北虏,复国仇”为他命名“靖仇”。将所有的复国重任全都寄托于他身上。虽然师傅对其寄予厚望,但长大后的陈靖仇却个性温柔,只喜欢诗词与音乐,非常讨厌杀戮,无心复国,一心只想过着与世无争的平静生活。因这样的性格,被其师责为软弱无能、胸无大志。', - swd_duguningke:'西方魔王撒旦手下的女魔将。由撒旦派往神州,目的是扩大赤贯星在神州九天结界上所划开的裂痕。是撒旦侵略神州的前锋。与宇文拓自幼相识,对他怀有感情。因不愿在宇文拓面前吃下撒旦之果而变得丑陋,在赤贯星上败给陈靖仇一行人后悲凉死去,后古月圣将她的魂魄放入伏羲琴中净化99年,宇文拓带着她的魂魄一路西行,回到欧洲。经过净化后忘记前世记忆,转世成为妮可。', - swd_guyue:'仙山岛最深处隐居的年轻仙人,飘逸潇洒,气质不凡。据说他的医术在仙界,也堪称是第一、第二位之绝。真身为一只白狐,后与修炼成仙的何然同归仙山岛隐居,二人经常在对弈亭对弈,不问世事。', - swd_tuobayuer:'本是拓跋部落(鲜卑)遗民,世世代代保护拓跋族神器“神农鼎”。年幼的她有一次随族人外出游牧时,隋炀帝为凸显天威而发兵侵略冲袭留守的部民,父母惨死,神鼎被夺。自此对隋人产生极深敌意,苦苦恳求姐夫张烈教她武艺,日夜勤练,打算伺机南下找回神鼎,并替父母报仇。', - swd_yuwentuo:'又名杨拓,本是北周皇室后裔,因国家被隋朝所篡,他自小流落於民间。幸好隋朝名将杨素发现了他,看出他的素质,就收他为徒,并让自己师弟杨义臣收他为义子。12岁那年曾用轩辕剑歼灭南陈旧部叛乱,杨素死後,宇文拓就担负起继续捍卫杨家天下的重责大任。后通过昆仑镜预见未来,得知赤贯将要划破九天神州结界,决定再也不管隋家天下安危,转而全心寻找上古神器,只想阻止这场危机,担负起挽救神州的重任。', - swd_yuxiaoxue:'女娲石转世,自幼孤儿,由月河村客栈老板贺老伯抚养,满头白发被当地村人认为是不祥的象征,备受歧视。后来她村子被村人祭祀的河神所摧毁,村人把责任全归咎于她,她因而被永远逐出了自己故乡。', - swd_jiliang:'故韩王国贵族出身,世代公卿,祖父被封于张邑,因此也以张为氏。喜好思考,心思敏捷聪慧,好奇心非常旺盛。尽管看来手无缚鸡之力,但却能以过人的智慧,凭藉著最少的情报,而去推演出全局;以一人之力,而胜过千军万马。', - swd_shuijing:'墨家的年轻女弟子,故赵王国人。亲人在秦战火中丧生,被协防赵国的墨家弟子在废墟之中发现,带回交由墨家夫人收容抚养。', - swd_quxian:'墨家年轻女弟子,故楚王国人。出身贵族,带有独特高贵气质。由于亲眼目睹全家死于秦人机关部队,心中有难以抹灭之阴影。', - swd_xiyan:'来自云中界的灵犀族,被壶中仙选中做为入室弟子,由他负责整合云中界的种族纠纷。', - swd_cheyun:'令狐国人,祖父是令狐国的大夫。但昔日由于研究“御木为兵”的“木甲术”而被政敌北宫大夫构陷,最后遭到抄家灭族;车芸年幼,因之只被处以刖刑,需以木制义肢来行走。由家臣端木氏抚养,之后她继续秘密研究祖父的木甲术,誓要效忠国家,为祖父及家人平反。', - swd_huanyuanzhi:'东晋名将桓温的亲属,为了改变淝水之战秦灭晋的结局而来到春秋时代,成为了晋国太辰宫的“九龙子”祭司之一,人称“肆龙子”,代号为 “负屃”。设置五岳阵法把王霸之气汇聚晋国,好让一千年后变成晋灭秦,和四百年以前来自不同时空的土耀使者墨老先生是同一个灵魂。', - swd_murongshi:'自称昔日夏朝时负责保管「夏后祭器」的涂山氏后人,实际是从经桓远之改动的历史中穿越回来,目的是在太一之轮上刻下秦克晋生克从而改变历史。和车芸、苻殷是不同历史中同一灵魂的人。', - swd_jipeng:'聒噪自大的鹦鹉国王,鹦鹉王国「多毛国」国王。原是野心家蜀桑子部下,被壶中仙丢入「云中界」后,在那里建立了自己的鹦鹉王国。由于曾偷吃壶中仙的长生丹药,因此老化速度变慢,聒噪威力不减当年。为了保护老主人女儿(墨家夫人),随同水镜返回人间,参与对抗赤松子的战争。', - swd_qi:'上古文明的术者,沉睡千年后醒来,梦想重建古代王朝。古代蜀国的科学家,是一个天才少年。', - swd_luchengxuan:'从小便拥有着强大的力量,可是不懂得控制,被周遭的人当成怪物般的看待,导致养成阴郁犹疑不轻易吐露心声的性格,后来在探索自己拥有力量与生命意义的旅程中,逐渐历练成熟,进而立志发挥自己的力量协助他人。', - swd_xiarou:'纯洁无瑕的气质与温柔婉约的外表,让人以为她手无缚鸡之力,但其实体内蕴藏有相当强的灵力,与生俱来个性温柔娴静,聪慧坚强,带领着族人勇敢面对他族的侵略,希望苍生皆能过着和平安稳的生活。', - swd_moye:'青龙圣者手下,对于青龙圣者有着莫名崇拜,常因沉不住气而搞砸许多事,不过还是很受族人的喜爱,单纯的个性让她丝毫不会烦恼任何事太久。后奉青龙圣者委派携带圣宇盘前往山海界西方寻找继任青龙圣者。', - swd_zhaoyun:'朝云出生于三国时期普通的民家,荆州襄阳人。父亲皇甫疾,乃昔日刘表麾下的水师参军,荆州投降后,被曹魏所征召,后惨死于赤壁,母亲韩氏,则于关羽北伐时,死于逃难途中。朝云为把剩余不多的干粮留给一起逃难的姊弟,决心自我牺牲,趁夜偷偷离开他们,躲在荒野中,后来在饥寒交迫之中昏死,为路过的名将赵云救起。赵云将他带至一收容战火孤儿的组织,让他有栖身之所。后来,朝云在一次支援粮秣运输工作中,意外以剑气救了误入曹贼陷阱中的赵云及所属部队,此后,赵云便夜夜蒙面,把朝云带至营后的山上,传授枪戟武术。最终朝云在天干十杰选拔中获得首位拿下“焉逢”称号,成为蜀汉精英部队“飞羽”的“羽之部”领导人。', - swd_hengai:'充满神秘色彩之女子。聪明而慧黠,凡事颇有自己见地。携上古神器「炼妖壶」在身,不时会同情敌人,又不喜杀戮的姑娘。擅法术,一头异于常人之蓝色长发,据说乃昔日为修练高深法术所造成。她对焉逢甚有好感,却又保持距离,态度甚为微妙。', - swd_duanmeng:'马良之女,本名马蕴。马良死后流落南蛮,后在诸葛亮平定南中时被马良之弟马谡找到并收为义女。马谡因街亭失守被斩,马蕴认为父亲是优秀幕僚而非将帅之才,街亭失守主因在于诸葛亮用人不当。为建立功勋,洗刷父亲的污名,马蕴加入飞羽部队,在「天干十杰」选拔中获得第二名「端蒙」称号,成为飞之部领导人', - swd_jiangwu:'故巴东郡主簿严函之子,因诸葛亮曾为父亲严函洗脱冤情,故对其为人与公忠体国的精神十分景仰,因此将报效朝廷一事,置于个人一己的功业之上。左手持巨弓,右手配强弩,擅远距离攻击,有百步穿杨能力。他与焉逢乃是战场上一起出生入死之多年至交,二人情深谊厚,因此平日彼此之间从不以代号互称,而皆直称对方本名。以自己能身为「飞羽」一员而深深自豪。', - swd_tuwei:'容貌清秀,但沉默寡言的青年。平日常闭目若有所思,偶一说话,也仅简单几个字回应而已。与横艾为同门之师姊弟,但飞羽「十杰」排名却意外地在横艾之上。他与横艾一样,坚不透露所属之道术门派,来历神秘。擅长疗愈系之法术', - swd_yeyaxi:'孙尚香的义女,深色肌肤,大眼睛,天真无邪。是吴帝孙权派人出海寻找传说中之夷洲、亶洲时,所掳回之夷洲当地原住民少女。耶亚希心里偷恋焉逢,于是在孙尚香请托下,随焉逢一行人共同旅行历练。', - swd_muyun:'皇甫朝云之弟,幼时遭逢变故,流落荒野,幸得魏国前御史中丞徐庶所救,将之收为养子,抚养成人。在洛阳的那段童年时光中,暮云与青梅竹马兰茵、以及魏国名将张郃之孙张诰相交甚笃,一同习剑成长。十年匆匆,暮云如今已是英姿焕发、名满洛阳的少年剑客,但为求精进,暮云始终勤练剑术,希望有朝一日能以一身武艺协助恩师张郃,报效朝廷。', - swd_lanyin:'魏国名将张郃,府中之女剑僮。性格温婉可人,剑术高超,身手利落,深为张郃所赏识。与暮云为青梅竹马,二人情投意合,经常一起行动。真实身份为应龙之女。', - swd_zhiyin:'女性法师,自称多年前随师父旅行至洛阳时与兰茵相遇,认作姊妹,实际与兰茵均为应龙之女的分身。个性果决,伶俐慧黠。于并西胡匈之地修习道术、降妖伏魔。', - swd_qiner:'「铜雀尊者」之副领导人,赤衣尊者,虽年纪轻轻,却有着令人难以置信之惊人实力,能施展许多强大而罕见的术法。随身总是抱着一只琵琶,以音律操纵幻术、幻兽来进行各式各样之攻击。天女青儿赠予巫山女神瑶姬的四样乐器中的磬所化。', - swd_jiuyou:'本名久须毗呼,来自东方邪马台国之清秀少年。他乃是多年前邪马台国领袖日御子(卑弥呼)私下派遣至辽东接触的使臣之一,由于对中原风土民情、文化制度深为着迷,便决定留下游历。身手非凡能使术法与剑术,持有剑、镜、玉三大法器。', - swd_duopeng:'来自桃源界之多毛民,自称是多毛国疾鹏大王驾前第一勇士「禽灵天尊铁爪无敌啸风攫魂多毛翔鹏大元帅」。多鹏不小心打碎了留侯夫人夫君(姬良)送给她的最喜爱的琉璃花瓶,担心被留侯夫人(水镜)宰了煮了吃。于是逃离了桃源仙境,来到了轩辕界。遇见了寻找盘古斧的兰茵,带领兰茵到云中界寻找盘古斧。', - swd_fengtianling:'商朝东方最强大的诸侯国──奄国大夫凤千平之子,外貌不俗,时刻流露出强烈的贵族气质与自信,但他脸上仍保有些许少年之青涩。从小生长在商民大族中的凤天凌,家中有一位哥哥,两人从小跟随住在太山上的师父习剑,剑术天分十分被肯定。', - swd_huyue:'九尾狐妖,商亡后狐妖一族被商朝太师诛灭,因年幼未被发现而逃过一劫。与幼时的凤天凌因巧合相遇,与其成为好友。', - swd_jialanduo:'迦兰多来自遥远的身毒国,身为身毒皇室的后裔,他却只身一人千里迢迢来到中原,只为了寻找昔日比他更早之前便独自前来中原、但如今却音信全无的亲姐姐。', - swd_rongshuang:'蓉霜来自中原西南方的古蜀国,是师承古蜀文明“战甲”一派的谜样少女。由于蓉霜初懂中原语言,因此在战甲师群中战力不算特别强大的她,也一起被派遣前来中原执行任务。', - swd_zhuoshanzhu:'战甲技能非常优秀的浊山铸,深受黑火门掌门师尊的重视,并有意指定他为自己的继承人。当师尊得知中原曾出现黑火踪迹,便下令浊山铸率领众徒前往中原,务必将黑火带回蜀国。任务途中,浊山铸为了保蓉霜周全,惨遭敌对门派痛下杀手,被埋葬在异国他乡黄土之下。', - swd_jiting:'周朝王姬,好武且崇尚英雄,擅长于箭术与驭车。其人飒爽英姿、风华绝代,以长弓为贴身武器。逃不开政治婚姻的宿命,因对未来夫君充满好奇并且不愿盲目嫁人,遂毅然离开镐京去寻求真相。', - swd_sikongyu:'来自有熊村,祖先自夏朝被灭后一直四处迁徙躲避战乱。习练的武功是司空一家代代相传的棍术,但也痴迷于研究陷阱、鸣竹等防御外来者入侵的机关,希望通过自己的本领使族人过上安稳的生活。', - swd_muyue:'华胥人,千年前,颛顼帝与华胥国主联手施行“绝地天通”之阵关闭天门,以绝世人登天之妄想,平天下之乱。“绝地天通”阵势浩大,需以华胥族人的魂灵为祭,沐月本欲替代被选为做辅祭的姐姐入阵,却在最后时刻因信念不够坚定,错过了施术时间。最终,天门关闭,华胥国被建木托升至天际,沐月独自留守在华胥。千年后,相柳为重开天门,借助青榆和伏羲琴之力试图破坏结界,沐月因此坠入人间。', - swd_ziqiao:'子国巫人之女,拥有凭神的体质。身材虽然娇小,却拥有常人所没有的力量,能够轻易的挥动巨斧作战。', - swd_fengyu:'商朝王子,化名凤煜四处游历,希望能找到解决商朝内忧外患的局面的方法', - swd_huanglei:'擅长古传的机关术(鲁班一脉),曾经在任官于唐朝政府少府监,因为被李林甫排挤而对政府怀恨在心。他出任高仙芝的参谋,出了主意灭掉石国,又企图干扰大食(阿拉伯)改朝换代,引起怛罗斯之战。当高仙芝返回长安,听其余的部属劝告,又因怛罗斯之战失利跟黄雷脱不了关系,疏远黄雷。黄雷转而投靠安禄山,想藉安禄山的叛乱取得势力。', - swd_lilian:'生长在一个贵族家庭,是第三千金,她父亲已经许婚给其他贵族,但她却迷恋上来做客的骑士麦尔斯,之后麦尔斯出任务到威尼斯,莉莲也偷偷的带着她的爱犬波尔去追随他。', - swd_kangnalishi:'梅罗文加护教骑士的指导教士,直属罗马教皇。在高卢没有一个人喜欢这个神情诡异的人。讲话都会带给人恐惧感。他称麦尔斯是他教出来最完美的骑士。', - swd_huiyan:'慧彦俗名刘书经,从小被誉为神童,一心想金榜题名,由于过于狂妄自大,在考场取笑主考官而被逐出考场,觉得了无生趣,也不敢回乡面对乡亲父老,游荡到嵩山时,对那些会武术的和尚发生兴趣,于是就在少林寺出家。慧彦天资聪颖,无论在武术、佛学上几乎凌驾师辈后来对少林祖师达摩的事迹产生兴趣。当时唐僧玄奘去天竺取经的事迹为世人尊崇,而从天竺来到达摩所教的(禅宗)却还有些出入,于是想亲身去天竺求证,获得唐玄宗支持,让他持使节信符出关。但唐玄宗额外交代一些军事上的任务,慧彦必须协助探查远至大食附近诸国的军事情势。', - swd_shanxiaoxiao:'独孤宁珂的婢女,是宁珂来到中原之后收伏的千年琵琶精。', - swd_yuchiyanhong:'独孤宁珂的婢女,是宁珂来到中原之后收伏之千年狐狸精。', - swd_hanluo:'寒洛是玄武国世子,因与知盈的婚事遭其父玄武侯反对,而与之私奔。', - swd_fu:'福来自毛民国,因助陆承轩、夏柔搭救被毛民抓来做祭品的莫耶而得罪族人,而后随陆承轩等人离开。', - swd_linyue:'来自氐人国的老医生,医术高明。醉心于各种医学技术,因此常外出云游,四处学习。随遇而安的个性让他不过于担心身边的人事物。', - swd_zidashu:'周侥国王子,十分仰慕陆承轩等人的高超武艺,故随其一同游历,磨练自己。', - swd_maixing:'奇肱国老神丁的徒弟。虽然是奇肱族近来难见的天才,但好胜的个性,让他常与旁人发生争执,孤独的他在没有比较之下更以为自己技术高超,另急躁的个性也让他急于试验自己未完成的工艺品,以致于常造成大乌龙。', - swd_fuyan:'俱有满腔的热血与爱国心,外表虽然像其他白虎族人一样勇猛,其实是自幼常生病的药罐子。', - swd_haidapang:'一目民,能在远处就注意到周遭的状况,一有危险马上逃跑!过于小心翼翼的性格,对于外界既害怕又好奇,总是张着大眼睛四处观望,又像惊弓之鸟似的随时保持警戒,做好逃跑的准备。', - swd_shaowei:'生在朱雀国,个性高傲、善变,因与主角战斗受伤,因而忘记过去的朱雀族少女。时而天真迷惘、时而冷漠无情、时而阴狠狡诈,不知何者是她的本性。', - swd_youzhao:'名将赵云之孙,枪法凛冽,胆识过人。一心追求建立不世之功业,期许自己能协助大汉讨灭曹贼,克复中原,以光耀祖先之名声。性格冷傲孤高,对自己在「天干十杰」名次排行战之中,竟输给了籍籍无名之孤儿焉逢,暗自耿耿为怀不已。执行任务时,出手迅疾猛狠,对敌人毫不留情,是极出色之菁英战士。', - swd_shangzhang:'端蒙之弟,马谡之子。由于姊姊不顾家族劝阻,坚持加入飞羽,他十分担忧她的安危,便努力苦练武艺,历经艰难之后,终于在高手如林的飞羽「天干十杰」争夺战之中,以遍体鳞伤却仍力战不懈之姿,撼动所有战友,最后如愿挤入了十天干最末一个名位。他配属于「飞之部」,在姊姊身边默默守护她。', - swd_situqiang:'原籍长安,父亲原是魏国医官,后因治疫不力遭罢,举家放逐。父亲死后,司徒蔷便想运用其自幼所习的知识,行走各地教授防疫知识。', - swd_chunyuheng:'字长生。身拥承袭淳于一脉的绝顶医术,却不轻易替人治病。因淳于一族不长命且无法治好自己的怪病,导致性情古怪孤僻,且言谈之间尽是轻生之词,让人难以亲近。最后知晓原因后,得同伴帮助,消除诅咒。', - swd_hanlong:'魁梧高大,身手矫健,能单手持巨刃而面不改色,是一本事卓绝之勇士。原为并西之地的胡族,因该地官员贪暴,其父反抗却遭杀害,他为照顾母亲,无奈沦为草莽盗匪,靠打劫路过达官显贵以维生。', - swd_yuli:'他人以为是鱼妖而自称是鱼仙的混仙。在徐暮云等人追查鱼妖传闻的真相时,与其相遇,却从此成为助她成仙的伙伴。', - swd_zhanggao:'字柏乔,为大魏名将张郃之孙,同时亦是徐暮云情谊深笃之挚友。暮云视他彷若兄长,十分尊敬。不时与暮云切磋剑术,互相砥砺,同为洛阳著名之少年剑客。', - swd_hupo:'属于山林鬼神一族,全身雪白,眼睛碧蓝,一对长而尖细的耳朵,长着一簇蓬松的大尾巴。它的同族都是力量强大的山林鬼魅,但一般人并看不到它们,只有拥有特殊能力的人才能看得见。', - swd_jiangziya:'周军统帅、周朝开国元勋,是一位尤其擅长法术攻击的权谋大家。曾修改了用于记载宇宙间万物生克关系的神器“太一之轮”,并留下了“周克商”的生克,造就牧野之战的胜利。', - }, - perfectPair:{ - swd_fengtianling:['swd_huyue','swd_jiting'], - swd_rongshuang:['swd_zhuoshanzhu'], - swd_jialanduo:['swd_zhuoshanzhu'], - swd_sikongyu:['swd_muyue'], - swd_fengyu:['swd_ziqiao'], - swd_zhaoyun:['swd_hengai','swd_yeyaxi','zhaoyun'], - swd_hengai:['zhugeliang','sp_zhugeliang'], - swd_duanmeng:['swd_shangzhang'], - swd_shangzhang:['swd_situqiang'], - swd_tuwei:['swd_hengai'], - swd_jiangwu:['swd_zhaoyun'], - swd_muyun:['swd_lanyin','swd_zhiyin','swd_zhanggao','xushu'], - swd_lanyin:['swd_zhiyin'], - swd_yuli:['swd_chunyuheng'], - swd_jiuyou:['swd_zhiyin'], - swd_qiner:['swd_hengai'], - swd_huzhongxian:['swd_jiliang','swd_jipeng','swd_xiyan'], - swd_anka:['swd_kama'], - swd_septem:['swd_nicole','swd_kama','swd_weida','swd_wangsiyue','swd_huiyan'], - swd_nicole:['swd_lilian'], - swd_xuanyuanjianxian:['swd_xuanyuanjiantong'], - swd_chenjingchou:['swd_yuxiaoxue','swd_tuobayuer'], - swd_yuxiaoxue:['swd_yuwentuo'], - swd_zhanglie:['swd_tuobayuer'], - swd_duguningke:['swd_yuwentuo','swd_shanxiaoxiao','swd_yuchiyanhong'], - swd_jiliang:['swd_shuijing','swd_jipeng'], - swd_jipeng:['swd_duopeng'], - swd_cheyun:['swd_huanyuanzhi','swd_murongshi'], - swd_murongshi:['swd_huanyuanzhi','swd_shuijing'], - swd_huanyuanzhi:['swd_jipeng'], - swd_qi:['swd_huzhongxian'], - swd_luchengxuan:['swd_xiarou'], - }, - skill:{ - cyqiaoxie:{ - trigger:{player:['loseEnd','equipEnd']}, - frequent:true, - alter:true, - filter:function(event,player){ - if(event.name=='equip'){ - if(get.is.altered('cyqiaoxie')){ - return event.swapped||player.countCards('h')<=player.hp; - } - return true; - } - else if(!player.equiping){ - for(var i=0;i0; - }).set('autodelay',0.5).ai=function(target){ - return -get.attitude(player,target); - }; - "step 1" - if(result.bool){ - player.logSkill('cyzhencha_shuiyun',result.targets); - player.discardPlayerCard(result.targets[0],'he',true); - } - else{ - event.finish(); - } - }, - onremove:function(player){ - _status.event.insert(lib.skill.cyzhencha_shuiyun.content,{player:player}); - } - }, - cyzhencha_liuzi:{ - trigger:{player:'phaseDrawBegin'}, - frequent:true, - thundertext:true, - content:function(){ - trigger.num++; - }, - onremove:function(player){ - player.draw(); - } - }, - cyzhencha_yijin:{ - trigger:{player:'phaseBegin'}, - direct:true, - thundertext:true, - content:function(){ - "step 0" - player.chooseTarget([1,1],'水云:你可以弃置一名角色的一张牌',function(card,player,target){ - if(player==target) return false; - return target.countCards('he')>0; - }).set('autodelay',0.5).ai=function(target){ - return -get.attitude(player,target); - }; - "step 1" - if(result.bool){ - player.logSkill('cyzhencha_shuiyun',result.targets); - player.discardPlayerCard(result.targets[0],'he',true); - } - else{ - event.finish(); - } - }, - onremove:function(player){ - _status.event.insert(lib.skill.cyzhencha_shuiyun.content,{player:player}); - } - }, - cyzhencha_qingling:{ - inhert:'cyzhencha_shuiyun' - }, - cyzhencha_qiandian:{ - inhert:'cyzhencha_shuiyun' - }, - cyqiaoxie_old:{ - enable:'phaseUse', - filterCard:function(card){ - return get.type(card,'trick')=='trick'; - }, - usable:1, - filter:function(event,player){ - var current=[]; - var es=player.getCards('e'); - for(var i=0;i7){ - map[i]=0;break; - } - else if(val<=5){ - map[i]++; - if(val<=4){ - map[i]+=0.5; - } - if(val<0){ - map[i]+=2; - } - } - } - if(map[i]>max){ - choice=i; - max=map[i]; - } - } - var controls=['heart2','spade2','diamond2','club2']; - for(var i=0;i=3){ - return controls[2]; - } - else{ - return controls[0]; - } - }).set('prompt','选择一个花色从牌堆中获得'+hs.length+'张该花色的牌'); - event.num=hs.length; - 'step 2' - if(result.control){ - var suit=result.control.slice(0,result.control.length-1); - var cards=[]; - for(var i=0;i7){ - bool=false;break; - } - else if(val<=4){ - bool=true; - } - } - if(bool){ - return 1; - } - } - return 0; - } - } - } - }, - yeying:{ - enable:'phaseUse', - usable:1, - viewAs:{name:'qiankunbiao'}, - viewAsFilter:function(player){ - return player.countCards('he',{color:'black'}); - }, - filterCard:{color:'black'}, - position:'he', - check:function(card){ - return 7-get.value(card); - }, - ai:{ - threaten:1.5 - } - }, - juxi:{ - enable:'phaseUse', - usable:1, - filter:function(event,player){ - return player.storage.juxi>=game.countPlayer(); - }, - filterTarget:true, - init:function(player){ - player.storage.juxi=0; - }, - init2:function(player){ - if(get.mode()=='guozhan'){ - player.logSkill('juxi'); - } - }, - intro:{ - content:'mark' - }, - content:function(){ - 'step 0' - player.storage.juxi-=game.countPlayer(); - player.syncStorage('juxi'); - if(player.storage.juxi<=0){ - player.unmarkSkill('juxi'); - } - else{ - player.updateMarks(); - } - if(target.isDamaged()){ - player.chooseControl(function(){ - if(get.attitude(player,target)>0) return 1; - return 0; - }).set('choiceList',[ - '对'+get.translation(target)+'造成一点伤害', - '令'+get.translation(target)+'回复一点体力', - ]) - } - else{ - target.damage(); - event.finish(); - } - 'step 1' - if(result.control=='选项一'){ - target.damage(); - } - else{ - target.recover(); - } - }, - ai:{ - order:7, - result:{ - target:function(player,target){ - if(get.attitude(player,target)>0){ - if(target.isDamaged()) return get.recoverEffect(target,player,target); - return 0; - } - else{ - return get.damageEffect(target,player,target); - } - } - } - }, - group:'juxi_count', - subSkill:{ - count:{ - trigger:{global:'discardAfter'}, - forced:true, - popup:false, - filter:function(event,player){ - return _status.currentPhase!=event.player; - }, - content:function(){ - player.storage.juxi++; - player.syncStorage('juxi'); - player.markSkill('juxi'); - player.updateMarks(); - }, - } - } - }, - jiefen:{ - enable:'phaseUse', - usable:1, - filterTarget:function(card,player,target){ - return target.countCards('h')>player.countCards('h'); - }, - filter:function(event,player){ - return !player.isMaxHandcard(); - }, - content:function(){ - 'step 0' - target.chooseCard('h',true,'交给'+get.translation(player)+'一张牌'); - 'step 1' - if(result.bool){ - player.gain(result.cards,target); - target.$giveAuto(result.cards,player); - } - else{ - event.finish(); - } - 'step 2' - var nh=player.countCards('h'); - if(game.hasPlayer(function(current){ - return current.countCards('h')max){ - max=nh; - } - if(nh0; - }, - filterTarget:true, - selectTarget:[1,2], - position:'he', - check:function(card){ - return 7-get.value(card); - }, - contentBefore:function(){ - player.loseHp(); - }, - alter:true, - content:function(){ - if(targets.length==1){ - target.damage('fire',2); - if(get.is.altered('huodan')) target.draw(); - } - else{ - target.damage('fire'); - } - }, - line:'fire', - ai:{ - order:15, - expose:0.2, - threaten:1.5, - result:{ - target:function(player,target){ - if(player.hp<2) return 0; - if(get.attitude(player,target)>=0) return 0; - if(target.hp>player.hp) return 0; - var eff=get.damageEffect(target,player,target,'fire'); - if(eff<0){ - if(ui.selected.targets.length&&target.hp>1&&ui.selected.targets[0].hp>1){ - return 0; - } - if(target.nodying) return eff/10; - return eff/Math.sqrt(target.hp); - } - return 0; - } - } - } - }, - sxianjing:{ - enable:'phaseUse', - filter:function(event,player){ - var suits=[]; - for(var i=0;i0; - }, - content:function(){ - var card=player.storage.sxianjing.randomGet(); - player.storage.sxianjing.remove(card); - player.gain(card,'draw'); - player.syncStorage('sxianjing'); - if(player.storage.sxianjing.length){ - player.updateMarks(); - } - else{ - player.unmarkSkill('sxianjing'); - } - } - } - } - }, - zhanxing:{ - enable:'phaseUse', - usable:1, - position:'he', - filterCard:true, - selectCard:[1,Infinity], - filter:function(event,player){ - return player.countCards('he')>0; - }, - check:function(card){ - switch(ui.selected.cards.length){ - case 0: return 8-get.value(card); - case 1: return 6-get.value(card); - case 2: return 3-get.value(card); - } - return 0; - }, - content:function(){ - 'step 0' - var list=get.cards(cards.length); - event.list=list; - player.showCards(list); - 'step 1' - var suits=[]; - event.suits=suits; - for(var i=0;i2&& - get.damageEffect(trigger.target,trigger.player,player)<0); - next.ai=function(card){ - if(goon){ - if(trigger.target.hp==1) return 10-get.value(card); - return 7-get.value(card); - } - return 0; - }; - next.logSkill=['tiebi',trigger.target]; - "step 1" - if(result.bool){ - trigger.target.changeHujia(); - } - }, - ai:{ - threaten:1.1 - } - }, - shenyan:{ - trigger:{source:'damageBegin'}, - skillAnimation:true, - animationColor:'fire', - filter:function(event,player){ - return !player.storage.shenyan&&event.nature=='fire'; - }, - intro:{ - content:'limited' - }, - mark:true, - logTarget:'player', - init:function(player){ - player.storage.shenyan=false; - }, - check:function(event,player){ - if(get.attitude(player,event.player)>=0) return 0; - if(player.hasUnknown()) return 0; - var num=0,players=game.filterPlayer(); - for(var i=0;i0){ - num++; - } - else if(eff<0){ - num--; - } - } - } - return num>0; - }, - content:function(){ - trigger.num++; - player.addSkill('shenyan2'); - player.storage.shenyan=true; - player.awakenSkill('shenyan'); - player.storage.shenyan2=[]; - var players=game.filterPlayer(); - for(var i=0;i0; - }, - content:function(){ - 'step 0' - target.chooseToDiscard(2,'h',true).delay=false; - 'step 1' - target.draw(); - }, - selectTarget:-1, - ai:{ - order:9, - result:{ - target:-1 - } - } - }, - xuanying:{ - subSkill:{ - sha:{ - enable:'chooseToUse', - viewAs:{name:'sha'}, - viewAsFilter:function(player){ - if(player.isLinked()) return false; - }, - precontent:function(){ - player.link(); - // player.getStat().card.sha--; - }, - filterCard:function(){return false}, - selectCard:-1, - prompt:'横置武将牌,视为使用一张无视距离的杀', - ai:{ - order:function(){ - // if(_status.event.player.countCards('h',{type:'equip'})) return 9; - return 3.15; - }, - skillTagFilter:function(player,tag,arg){ - if(arg!='use') return false; - if(player.isLinked()) return false; - }, - respondSha:true, - }, - mod:{ - targetInRange:function(card){ - if(_status.event.skill=='xuanying_sha') return true; - } - }, - }, - shan:{ - trigger:{player:'chooseToRespondBegin'}, - filter:function(event,player){ - if(!player.isLinked()) return false; - if(event.responded) return false; - if(!event.filterCard({name:'shan'})) return false; - return true; - }, - check:function(event,player){ - if(get.damageEffect(player,event.player,player)>=0) return false; - return true; - }, - content:function(){ - 'step 0' - player.link(); - 'step 1' - trigger.untrigger(); - trigger.responded=true; - trigger.result={bool:true,card:{name:'shan'}} - }, - ai:{ - target:function(card,player,target,current){ - if(!player.isLinked()&¤t<0) return 1.5; - if(!target.hasFriend()) return; - if(get.tag(card,'loseCard')&&_status.currentPhase!=target&&target.countCards('he')){ - return [0.5,Math.max(2,target.countCards('h'))]; - } - if(get.tag(card,'respondSha')||get.tag(card,'respondShan')){ - if(get.attitude(player,target)>0&&card.name=='juedou') return; - return [0.5,target.countCards('h','sha')+target.countCards('h','shan')]; - } - } - } - }, - damage:{ - trigger:{player:'damageEnd'}, - filter:function(event,player){ - return event.source&&event.source.isAlive()&&player.isLinked()&& - lib.filter.targetEnabled({name:'sha'},player,event.source); - }, - check:function(event,player){ - return get.effect(event.source,{name:'sha'},player,player)>0; - }, - logTarget:'source', - content:function(){ - 'step 0' - player.link(); - 'step 1' - player.useCard({name:'sha'},trigger.source); - } - }, - use:{ - trigger:{player:'loseEnd'}, - direct:true, - filter:function(event,player){ - return _status.currentPhase!=player&&player.isLinked()&&event.cards&&event.cards.length; - }, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('xuanying'),function(card,player,target){ - return lib.filter.targetEnabled({name:'sha'},player,target); - }).set('ai',function(target){ - return get.effect(target,{name:'sha'},_status.event.player); - }).set('autodelay',0.5); - 'step 1' - if(result.bool){ - player.logSkill('xuanying'); - player.link(); - player.useCard({name:'sha'},result.targets,false); - } - }, - } - }, - group:['xuanying_sha','xuanying_use'], - ai:{ - threaten:function(player,target){ - if(target.isLinked()) return 0.7; - return 1.4; - } - } - }, - hwendao:{ - trigger:{player:['useCardAfter','respondAfter',]}, - check:function(event,player){ - return get.attitude(player,_status.currentPhase)<=0; - }, - logTarget:function(){ - return _status.currentPhase; - }, - filter:function(event,player){ - if(player==_status.currentPhase) return false; - if(!_status.currentPhase.countCards('he')) return false; - return event.cards&&event.cards.length==1; - }, - content:function(){ - 'step 0' - var suit=get.suit(trigger.cards[0]); - var goon=(get.attitude(_status.currentPhase,player)<=0); - _status.currentPhase.chooseToDiscard('弃置一张'+get.translation(suit+'2')+ - '牌,或令'+get.translation(player)+'获得你的一张牌',{suit:suit}).ai=function(card){ - if(goon) return 8-get.value(card); - return 0; - } - 'step 1' - if(!result.bool){ - player.gainPlayerCard(_status.currentPhase,'he',true); - } - }, - ai:{ - threaten:0.7 - } - }, - lingfeng:{ - trigger:{player:'phaseEnd'}, - frequent:true, - filter:function(event,player){ - return player.countUsed()>=Math.min(3,player.hp); - }, - content:function(){ - 'step 0' - player.chooseTarget('凌锋:造成一点伤害,或取消并获得一点护甲',function(card,player,target){ - return player!=target&&get.distance(player,target,'attack')<=1; - }).ai=function(target){ - if(player.hp==1) return 0; - if(player.hp==2&&target.hp>=3) return 0; - return get.damageEffect(target,player,player); - } - 'step 1' - if(result.bool){ - player.line(result.targets[0]); - result.targets[0].damage(); - } - else{ - player.changeHujia(); - } - }, - ai:{ - order:-10, - result:{ - target:2 - }, - threaten:1.5 - } - }, - hxunzhi:{ - unique:true, - enable:'phaseUse', - derivation:['wusheng','paoxiao'], - filter:function(event,player){ - return !player.storage.hxunzhi; - }, - alter:true, - init:function(player){ - player.storage.hxunzhi=false; - }, - mark:true, - intro:{ - content:'limited' - }, - skillAnimation:true, - animationColor:'fire', - content:function(){ - 'step 0' - player.awakenSkill('hxunzhi'); - player.storage.hxunzhi=true; - if(!get.is.altered('hxunzhi')){ - var targets=game.filterPlayer(function(current){ - return player.canUse('wanjian',current); - }); - targets.sort(lib.sort.seat); - player.useCard({name:'wanjian'},targets); - } - 'step 1' - player.addSkill('wusheng'); - player.addSkill('paoxiao'); - player.addSkill('hxunzhi2'); - }, - ai:{ - order:2, - result:{ - player:function(player){ - if(get.mode()=='identity'){ - if(player.identity=='zhu') return 0; - if(player.identity=='nei') return 0; - } - else if(get.mode()=='guozhan'){ - if(player.identity=='ye') return 0; - if(player.isUnseen()) return 0; - } - if(player.hp==1) return 1; - if(player.hasUnknown()) return 0; - if(!player.hasFriend()) return 0; - var enemies=player.getEnemies(); - if(enemies.length+1==game.players.length) return 0; - var num=player.hasCard(function(card){ - return card.name=='sha'||get.color(card)=='red'; - }); - if(num<2) return 0; - for(var i=0;i0&& - !enemies[i].getEquip(2)&&num>enemies[i].hp&&enemies[i].hp<=2){ - return 1; - } - } - return 0; - } - } - } - }, - hxunzhi2:{ - trigger:{player:'phaseUseEnd'}, - forced:true, - popup:false, - content:function(){ - player.removeSkill('xunzhi2'); - player.die(); - } - }, - hjifeng:{ - enable:'phaseUse', - filter:function(event,player){ - if(!player.countCards('h')) return false; - if(player.countCards('h',{type:'jiqi'})) return false; - return true; - }, - discard:false, - prepare:'throw2', - usable:1, - check:function(card){ - return 6-get.value(card); - }, - filterCard:true, - content:function(){ - var name=get.suit(cards[0]); - ui.cardPile.insertBefore(cards[0],ui.cardPile.firstChild); - switch(name){ - case 'spade':name='qinglongzhigui';break; - case 'club':name='baishouzhihu';break; - case 'diamond':name='zhuquezhizhang';break; - case 'heart':name='xuanwuzhihuang';break; - } - player.gain(get.cardPile(name)||game.createCard(name),'draw'); - }, - ai:{ - order:4, - result:{ - player:1 - } - } - }, - hjifeng_old:{ - trigger:{player:'phaseEnd'}, - filter:function(event,player){ - if(!player.countCards('he',{type:'equip'})) return false; - if(player.countCards('h',{type:'jiqi'})) return false; - if(get.cardPile(function(card){return get.type(card)=='jiqi'})) return true; - return false; - }, - direct:true, - content:function(){ - 'step 0' - player.chooseToDiscard('he','祭风:是否弃置一张装备牌并获得一张祭器牌?',{type:'equip'}).set('ai',function(card){ - return 6-get.value(card); - }).logSkill='hjifeng'; - 'step 1' - if(result.bool){ - var card=get.cardPile(function(card){ - return get.type(card)=='jiqi'&&card.name.indexOf('yuchan')!=0; - })||get.cardPile(function(card){ - return get.type(card)=='jiqi'; - }); - if(card){ - player.gain(card,'draw'); - } - } - } - }, - lmazui:{ - audio:'mazui', - enable:'phaseUse', - usable:1, - filterCard:{color:'black'}, - filterTarget:function(card,player,target){ - return !target.hasSkill('lmazui2'); - }, - check:function(card){ - return 6-get.value(card); - }, - discard:false, - prepare:'give', - content:function(){ - target.storage.lmazui2=cards[0]; - target.addSkill('lmazui2'); - game.addVideo('storage',target,['lmazui2',get.cardInfo(target.storage.lmazui2),'card']); - }, - ai:{ - expose:0.2, - result:{ - target:function(player,target){ - return -target.hp; - } - }, - order:4, - threaten:1.2 - } - }, - lmazui2:{ - trigger:{source:'damageBegin'}, - forced:true, - mark:'card', - filter:function(event){ - return event.num>0; - }, - content:function(){ - trigger.num--; - player.addSkill('lmazui3'); - player.removeSkill('lmazui2'); - }, - intro:{ - content:'card' - } - }, - lmazui3:{ - trigger:{source:['damageEnd','damageZero']}, - forced:true, - popup:false, - content:function(){ - player.gain(player.storage.lmazui2,'gain2','log'); - player.removeSkill('lmazui3'); - delete player.storage.lmazui2; - } - }, - hyunshen:{ - trigger:{player:'respond'}, - filter:function(event,player){ - return event.card.name=='shan'; - }, - frequent:true, - init:function(player){ - player.storage.hyunshen=0; - }, - content:function(){ - player.storage.hyunshen++; - player.markSkill('hyunshen'); - }, - ai:{ - effect:{ - target:function(card,player,target){ - if(get.tag(card,'respondShan')){ - var shans=target.countCards('h','shan'); - var hs=target.countCards('h'); - if(shans>1) return [1,1]; - if(shans&&hs>2) return [1,1]; - if(shans) return [1,0.5]; - if(hs>2) return [1,0.3]; - if(hs>1) return [1,0.2]; - return [1.2,0]; - } - } - }, - threaten:0.8 - }, - intro:{ - content:'mark' - }, - group:'hyunshen2' - }, - hyunshen2:{ - trigger:{player:'phaseBegin'}, - forced:true, - filter:function(event,player){ - return player.storage.hyunshen>0; - }, - content:function(){ - player.draw(player.storage.hyunshen); - player.storage.hyunshen=0; - player.unmarkSkill('hyunshen'); - }, - mod:{ - globalTo:function(from,to,distance){ - if(typeof to.storage.hyunshen=='number') return distance+to.storage.hyunshen; - } - } - }, - hlingbo:{ - audio:['lingbo',2], - trigger:{player:'respond'}, - filter:function(event,player){ - return event.card.name=='shan'; - }, - frequent:true, - content:function(){ - player.draw(2); - }, - ai:{ - mingzhi:false, - useShan:true, - effect:{ - target:function(card,player,target){ - if(get.tag(card,'respondShan')){ - var shans=target.countCards('h','shan'); - var hs=target.countCards('h'); - if(shans>1) return [0,1]; - if(shans&&hs>2) return [0,1]; - if(shans) return [0,0]; - if(hs>2) return [0,0]; - if(hs>1) return [1,0.5]; - return [1.5,0]; - } - } - }, - threaten:0.8 - } - }, - gtiandao:{ - audio:true, - trigger:{global:'judge'}, - direct:true, - filter:function(event,player){ - return player.countCards('he')>0; - }, - content:function(){ - "step 0" - player.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+ - get.translation(trigger.player.judging[0])+','+get.prompt('gtiandao'),'he').ai=function(card){ - var trigger=_status.event.parent._trigger; - var player=_status.event.player; - var result=trigger.judge(card)-trigger.judge(trigger.player.judging[0]); - var attitude=get.attitude(player,trigger.player); - if(attitude==0||result==0) return 0; - if(attitude>0){ - return result; - } - else{ - return -result; - } - }; - "step 1" - if(result.bool){ - player.respond(result.cards,'highlight'); - } - else{ - event.finish(); - } - "step 2" - if(result.bool){ - player.logSkill('gtiandao'); - player.$gain2(trigger.player.judging[0]); - player.gain(trigger.player.judging[0]); - trigger.player.judging[0]=result.cards[0]; - trigger.position.appendChild(result.cards[0]); - game.log(trigger.player,'的判定牌改为',result.cards[0]); - } - "step 3" - game.delay(2); - }, - ai:{ - tag:{ - rejudge:1 - }, - threaten:1.5 - } - }, - jinlin:{ - enable:'phaseUse', - unique:true, - mark:true, - skillAnimation:true, - animationColor:'metal', - init:function(player){ - player.storage.jinlin=false; - }, - filter:function(event,player){ - if(player.storage.jinlin) return false; - return true; - }, - filterTarget:true, - selectTarget:[1,Infinity], - contentBefore:function(){ - player.awakenSkill('jinlin'); - player.storage.jinlin=true; - }, - content:function(){ - target.changeHujia(3); - target.addSkill('jinlin2'); - target.storage.jinlin2=3; - }, - ai:{ - order:1, - result:{ - target:function(player,target){ - if(player.hp==1) return 1; - var num=0; - var players=game.filterPlayer(); - for(var i=0;i2){ - if(players[i].hp==1) return 1; - if(players[i].hp==2) num++; - } - } - if(player.hasUnknown()) return 0; - if(num>1) return 1; - return 0; - } - }, - }, - intro:{ - content:'limited' - } - }, - jinlin2:{ - trigger:{player:'phaseBegin'}, - forced:true, - popup:false, - content:function(){ - if(player.hujia>0){ - player.changeHujia(-1); - } - player.storage.jinlin2--; - if(player.hujia==0||player.storage.jinlin2==0){ - player.removeSkill('jinlin2'); - delete player.storage.jinlin2; - } - }, - }, - lingyue:{ - trigger:{player:'shaBegin'}, - check:function(event,player){ - return get.attitude(player,event.target)<0; - }, - logTarget:'target', - filter:function(event,player){ - return event.target.countCards('he')>0; - }, - content:function(){ - trigger.target.chooseToDiscard('he',true); - } - }, - fengze:{ - enable:'phaseUse', - filterCard:{color:'black'}, - selectCard:1, - position:'he', - usable:1, - viewAs:{name:'taoyuan'}, - filter:function(event,player){ - return player.countCards('he',{color:'black'})>0; - }, - audio:true, - prompt:'将一张黑色牌当作桃园结义使用', - check:function(card){ - return 7-get.useful(card) - }, - ai:{ - threaten:1.5 - } - }, - zaowu:{ - enable:'phaseUse', - usable:1, - filter:function(event,player){ - return player.countCards('h',{suit:['spade','heart']})>0; - }, - filterCard:{suit:['spade','heart']}, - viewAs:{name:'fengyinzhidan'}, - check:function(card){ - return 7-get.value(card); - }, - ai:{ - order:8.5, - } - }, - huanxia:{ - enable:'chooseToUse', - filterCard:function(card){ - return get.color(card)=='red'; - }, - position:'he', - viewAs:{name:'sha'}, - viewAsFilter:function(player){ - if(!player.countCards('he',{color:'red'})) return false; - }, - prompt:'将一张红色牌当杀使用', - check:function(card){return 5-get.value(card)}, - ai:{ - order:function(){ - return get.order({name:'sha'})+0.1; - }, - respondSha:true, - skillTagFilter:function(player,tag,arg){ - if(arg!='use') return false; - if(!player.countCards('he',{color:'red'})) return false; - }, - }, - group:['huanxia_expire','huanxia_draw','huanxia_gain'], - subSkill:{ - expire:{ - trigger:{source:'damageAfter'}, - forced:true, - popup:false, - filter:function(event){ - return event.parent.skill=='huanxia'; - }, - content:function(){ - player.storage.huanxia=true; - } - }, - draw:{ - trigger:{player:'shaAfter'}, - forced:true, - popup:false, - content:function(){ - if(trigger.parent.skill=='huanxia'){ - var card=trigger.cards[0]; - if(get.itemtype(card)=='card'&&get.position(card)=='d'&&!player.storage.huanxia){ - ui.special.appendChild(card); - if(!player.storage.huanxia_draw){ - player.storage.huanxia_draw=[]; - } - player.storage.huanxia_draw.push(card); - } - } - delete player.storage.huanxia; - } - }, - gain:{ - trigger:{player:'phaseEnd'}, - forced:true, - filter:function(event,player){ - return player.storage.huanxia_draw; - }, - content:function(){ - player.gain(player.storage.huanxia_draw,'gain2'); - delete player.storage.huanxia_draw; - } - } - } - }, - kongmo:{ - trigger:{player:'useCardAfter'}, - forced:true, - filter:function(event,player){ - if(event.parent.name=='kongmo') return false; - if(!event.targets||!event.card) return false; - var type=get.type(event.card); - if(type!='basic'&&type!='trick') return false; - var card=game.createCard(event.card.name,event.card.suit,event.card.number); - for(var i=0;i=0) return 0; - if(get.population('fan')<3) return 0; - return -1; - } - case 'zhong':{ - if(get.population('fan')<3) return 0; - return -1; - } - case 'nei':return 0; - case 'fan':{ - if(get.population('fan')==0) return 0; - if(get.population('zhong')<2) return 0; - return -1; - } - } - break; - } - case 'guozhan':{ - if(player.identity=='unknown') return 0; - return get.population(player.identity)>=3?-1:0; - } - default:{ - return -1; - } - } - }, - } - } - }, - bingfeng2:{ - mod:{ - cardEnabled:function(){ - return false; - }, - cardUsable:function(){ - return false; - }, - cardRespondable:function(){ - return false; - }, - cardSavable:function(){ - return false; - } - }, - trigger:{player:'turnOverAfter'}, - forced:true, - filter:function(event,player){ - return !player.isTurnedOver(); - }, - content:function(){ - player.removeSkill('bingfeng2'); - } - }, - yudun:{ - mod:{ - cardEnabled:function(card,player){ - if(get.type(card,'trick')=='trick') return false; - }, - cardRespondable:function(card,player){ - if(get.type(card,'trick')=='trick') return false; - }, - cardSavable:function(card,player){ - if(get.type(card,'trick')=='trick') return false; - }, - }, - enable:'chooseToUse', - filterCard:function(card){ - return get.type(card,'trick')=='trick'; - }, - selectCard:2, - viewAs:{name:'sha'}, - viewAsFilter:function(player){ - if(player.countCards('h',{type:['trick','delay']})<2) return false; - }, - check:function(){return 1}, - ai:{ - skillTagFilter:function(player,tag,arg){ - if(arg!='use') return false; - if(player.countCards('h',{type:['trick','delay']})<2) return false; - }, - respondSha:true, - order:function(){ - return get.order({name:'sha'})+0.1; - }, - useful:-1, - value:-1 - }, - group:'yudun_count', - subSkill:{ - count:{ - trigger:{player:'useCard'}, - forced:true, - popup:false, - filter:function(event,player){ - return event.skill=='yudun'&&_status.currentPhase==player; - }, - content:function(){ - player.getStat().card.sha--; - } - } - } - }, - guozao:{ - trigger:{global:'damageEnd'}, - forced:true, - logv:false, - alter:true, - check:function(event,player){ - return game.hasPlayer(function(current){ - return get.attitude(player,current)>2&¤t.countCards('h')==1 - }); - }, - filter:function(event,player){ - if(event.source==player) return false; - if(get.distance(player,event.player)>1) return false; - return game.hasPlayer(function(current){ - return current.countCards('h'); - }); - }, - content:function(){ - "step 0" - var cards=[]; - if(ui.cardPile.childNodes.length<3){ - var discardcards=get.cards(3); - for(var i=0;i0&&get.distance(player,target)<=dist; - }).ai=function(target){ - var att=get.attitude(player,target); - var hs=target.getCards('h'); - var num=hs.length; - if(num<=1) return att*2; - if(num==2){ - for(var i=0;i6) return att; - } - if(target==player){ - for(var i=0;i<2;i++){ - if(get.value(cards[i],target,'raw')>6) return -1; - } - } - return att/2; - } - if(num==3){ - if(target==player){ - var num2=0; - for(var i=0;i<3;i++){ - num2+=get.value(cards[i],player,'raw'); - num2-=get.value(hs[i],player,'raw'); - } - if(num2>0) return 0.5; - if(num2<0) return -0.5; - } - return 0; - } - return -att/2; - }; - "step 1" - if(result.bool&&result.targets[0]){ - var target=result.targets[0]; - player.line(target,'green'); - // player.logSkill('guozao',target,'green',true); - var cards=target.getCards('h'); - target.lose(cards)._triggered=null; - game.log(target,'弃置了',cards,',并获得三张牌'); - // target.$draw(3); - target.$throw(cards); - target.gain(event.cards,'draw')._triggered=null; - } - else{ - event.finish(); - } - }, - ai:{ - expose:0.1 - } - }, - heihuo:{ - enable:'phaseUse', - filter:function(event,player){ - return player.countCards('h')>0&&player.countCards('he',{type:'equip'})>0&&!player.hasSkill('heihuo2'); - }, - filterCard:function(card){ - return get.type(card)=='equip'; - }, - position:'he', - check:function(card){ - var player=_status.currentPhase; - var nh=player.countCards('h'); - var pos=get.position(card); - if(nh<2) return 0; - if(nh>4) return 0; - if(nh==4&&pos=='e') return 0; - if(player.countCards('he',{subtype:get.subtype(card)})>1){ - return 11-get.equipValue(card)+(pos=='e'?0.4:0); - } - return 5.5-get.value(card)+(pos=='e'?0.4:0); - }, - content:function(){ - "step 0" - player.draw(player.countCards('h')); - "step 1" - if(player.countCards('h')>=8){ - player.damage(3,'fire'); - player.addTempSkill('heihuo2'); - } - }, - ai:{ - order:10, - threaten:1.4, - result:{ - player:1 - } - } - }, - heihuo2:{}, - yaotong:{ - alter:true, - group:['yaotong1','yaotong2','yaotong3'], - ai:{ - respondSha:true, - respondShan:true, - skillTagFilter:function(player,tag){ - if(tag=='respondShan'&&get.is.altered('yaotong')) return false; - if(player.countCards('h')%2==0) return false; - }, - }, - threaten:1.3 - }, - yaotong1:{ - enable:['chooseToRespond','chooseToUse'], - filterCard:true, - viewAs:{name:'sha'}, - filter:function(event,player){ - var num=player.countCards('h'); - if(num==0) return false; - return num%2==1; - }, - prompt:'将一张手牌当作杀打出', - check:function(card){return 6-get.value(card)} - }, - yaotong2:{ - enable:['chooseToRespond','chooseToUse'], - filterCard:true, - viewAs:{name:'shan'}, - filter:function(event,player){ - if(get.is.altered('yaotong')) return false; - var num=player.countCards('h'); - if(num==0) return false; - return num%2==1; - }, - prompt:'将一张手牌当作闪打出', - check:function(card){return 6-get.value(card)} - }, - yaotong3:{ - enable:'chooseToUse', - filterCard:true, - viewAs:{name:'wuxie'}, - filter:function(event,player){ - var num=player.countCards('h'); - if(num==0) return false; - return num%2==0; - }, - viewAsFilter:function(player){ - var num=player.countCards('h'); - if(num==0) return false; - return num%2==0; - }, - prompt:'将一张手牌当作无懈可击使用', - check:function(card){return 7-get.value(card)}, - }, - yaotong4:{ - enable:'chooseToUse', - filterCard:true, - viewAs:{name:'tao'}, - filter:function(event,player){ - var num=player.countCards('h'); - if(num==0) return false; - return num%2==0; - }, - viewAsFilter:function(player){ - var num=player.countCards('h'); - if(num==0) return false; - return num%2==0; - }, - prompt:'将一张手牌当作桃使用', - check:function(card){return 9-get.value(card)}, - }, - pojian:{ - trigger:{player:'loseEnd'}, - filter:function(event,player){ - if(player.countCards('h')) return false; - for(var i=0;i0; - }, - filterCard:true, - position:'he', - content:function(){ - player.addSkill('huajin2'); - }, - check:function(card){ - return 5-get.value(card); - }, - ai:{ - order:10, - result:{ - player:function(player){ - if(player.countCards('h','juedou')) return 1; - if(player.countCards('h','sha')==0) return 0; - var players=game.filterPlayer(); - for(var i=0;i0){ - return 1; - } - } - return 0; - } - } - } - }, - huajin2:{ - trigger:{source:'damageBegin'}, - forced:true, - content:function(){ - trigger.num++; - }, - group:'huajin3' - }, - huajin3:{ - trigger:{player:'phaseBegin'}, - forced:true, - popup:false, - content:function(){ - player.removeSkill('huajin2'); - } - }, - yuchen:{ - trigger:{player:['useCard','respondAfter']}, - direct:true, - filter:function(event,player){ - if(player==_status.currentPhase) return false; - if(event.cards){ - for(var i=0;i0; - }).set('autodelay',trigger.name=='respond'?0.5:1).ai=function(target){ - return -get.attitude(player,target); - }; - "step 1" - if(result.bool){ - player.logSkill('yuchen',result.targets); - player.discardPlayerCard(result.targets[0],true); - } - }, - ai:{ - threaten:0.7 - } - }, - bingjian:{ - enable:'phaseUse', - usable:1, - filter:function(event,player){ - return player.countCards('he',{color:'black',name:'sha'})>0; - }, - filterCard:function(card){ - return card.name=='sha'&&get.color(card)=='black'; - }, - filterTarget:function(card,player,target){ - return player!=target&&target.countCards('h')>0; - }, - line:'thunder', - content:function(){ - "step 0" - target.showHandcards(); - "step 1" - var cards=target.getCards('h','shan'); - if(cards.length){ - target.discard(cards); - } - else{ - target.damage('thunder'); - } - }, - ai:{ - order:5, - result:{ - target:function(player,target){ - return get.damageEffect(target,player,target,'thunder'); - } - }, - expose:0.2 - } - }, - rumeng:{ - trigger:{global:'phaseUseBefore'}, - direct:true, - filter:function(event,player){ - return event.player!=player&&player.countCards('he',{type:'basic'})2; - var next=player.chooseToDiscard(function(card){ - return get.type(card)!='basic'; - },get.prompt('rumeng',trigger.player),'he'); - next.logSkill=['rumeng',trigger.player]; - next.ai=function(card){ - if(yep){ - return 6-get.value(card); - } - return 0; - } - "step 1" - if(result.bool){ - trigger.player.chooseToDiscard({type:'basic'},'入梦:弃置一张基本牌或跳过出牌及弃牌阶段').ai=function(card){ - return 5-get.value(card); - } - } - else{ - event.finish(); - } - "step 2" - if(!result.bool){ - trigger.cancel(); - trigger.player.skip('phaseDiscard'); - } - }, - ai:{ - expose:0.1 - } - }, - lianda:{ - trigger:{player:'shaAfter'}, - direct:true, - filter:function(event,player){ - return event.target.isAlive()&&player.countCards('he')>0&&!player.hasSkill('lianda2'); - }, - content:function(){ - "step 0" - var next=player.chooseToDiscard('he',get.prompt('lianda')); - next.ai=function(card){ - if(get.effect(trigger.target,{name:'sha'},player,player)>0){ - return 7-get.value(card); - } - return 0; - } - next.logSkill='lianda'; - "step 1" - if(result.bool){ - player.addTempSkill('lianda2'); - player.useCard({name:'sha'},trigger.target); - } - } - }, - lianda2:{}, - huiqi:{ - trigger:{player:'damageEnd'}, - direct:true, - filter:function(event,player){ - return player.hp3){ - return att+Math.max(0,5-target.countCards('h')); - } - return att/4; - } - if(att>3){ - return att+Math.max(0,5-target.countCards('h')); - } - return att; - } - "step 1" - if(result.bool){ - player.logSkill('huiqi',result.targets); - result.targets[0].draw(player.maxHp-player.hp); - } - }, - ai:{ - expose:0.2, - effect:{ - target:function(card,player,target){ - if(get.tag(card,'damage')){ - return [1,0.5]; - } - } - } - } - }, - xianghui:{ - enable:'phaseUse', - usable:1, - filterCard:{color:'red'}, - filter:function(){ - var players=game.filterPlayer(); - var min=players[0].hp; - for(var i=0;i2){ - if(player.countCards('h','shan')||player.getEquip(2)|| - trigger.target.hp==1||player.hp>trigger.target.hp+1){ - if(!trigger.target.countCards('h','shan')||trigger.target.countCards('h')3){ - return 100-target.countCards('h'); - } - return att; - } - "step 1" - if(result.bool){ - player.logSkill('fzhenwei',result.targets); - result.targets[0].gain(event.cards,'gain2','log'); - } - }, - ai:{ - expose:0.1, - threaten:1.6 - } - }, - shangxi:{ - trigger:{player:'phaseUseBegin'}, - direct:true, - filter:function(event,player){ - if(player.countCards('he')==0) return false; - return game.hasPlayer(function(current){ - return (current!=player&&get.distance(player,current,'attack')<=1&&player.hp<=current.hp); - }); - }, - content:function(){ - "step 0" - var next=player.chooseCardTarget({ - position:'he', - filterTarget:function(card,player,target){ - return get.distance(player,target,'attack')<=1&& - player!=target&&player.hp<=target.hp; - }, - filterCard:lib.filter.cardDiscardable, - ai1:function(card){ - return 9-get.value(card); - }, - ai2:function(target){ - return get.damageEffect(target,player,player); - }, - prompt:get.prompt('shangxi') - }); - "step 1" - if(result.bool){ - player.discard(result.cards); - player.logSkill('shangxi',result.targets); - result.targets[0].damage(); - } - }, - ai:{ - expose:0.3 - } - }, - fuyan:{ - trigger:{player:'damageEnd'}, - direct:true, - filter:function(event){ - return event.num>0; - }, - content:function(){ - "step 0" - player.chooseTarget(get.prompt('fuyan'),function(card,player,target){ - return !target.hujia; - }).ai=function(target){ - if(get.attitude(player,target)<=0) return 0; - var eff=-get.damageEffect(target,target,player)+(player==target?2:0); - if(target.hp==1) eff+=2; - return Math.min(1,eff); - }; - "step 1" - if(result.bool){ - player.logSkill('fuyan',result.targets); - var target=result.targets[0]; - target.changeHujia(); - } - }, - ai:{ - effect:{ - target:function(card,player,target){ - if(get.tag(card,'damage')){ - if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; - return 0.7; - } - } - }, - expose:0.2 - } - }, - fuyan2:{ - trigger:{player:'damageBegin'}, - filter:function(event,player){ - return event.num>0; - }, - forced:true, - mark:'card', - content:function(){ - trigger.num--; - player.removeSkill('fuyan2'); - player.storage.fuyan2.discard(); - delete player.storage.fuyan2; - }, - intro:{ - content:'card' - } - }, - pingshen:{ - trigger:{source:'damageBegin'}, - unique:true, - silent:true, - content:function(){ - trigger.player.addSkill('pingshen2'); - trigger.player.storage.pingshen=player; - } - }, - pingshen2:{ - enable:'phaseUse', - unique:true, - mark:true, - init:function(player){ - player.storage.pingshen2=false; - }, - filter:function(event,player){ - return !player.storage.pingshen2&&player.storage.pingshen.isAlive(); - }, - filterCard:true, - filterTarget:function(card,player,target){ - return target==player.storage.pingshen; - }, - selectTarget:-1, - position:'he', - content:function(){ - player.storage.pingshen2=true; - player.unmarkSkill('pingshen2'); - player.gain(target.getCards('h'),target); - target.$give(target.countCards('h'),player); - player.turnOver(); - player.addSkill('pingshen3'); - }, - check:function(card){return 8-get.value(card);}, - intro:{ - content:'limited' - }, - ai:{ - order:10, - result:{ - player:function(player){ - if(player.classList.contains('turnedover')) return 10; - if(get.attitude(player,player.storage.pingshen)>=0){ - return 0; - } - if(player.storage.pingshen.countCards('h')>player.storage.pingshen.hp) return 1; - return 0; - } - }, - effect:{ - target:function(card,player,target){ - if(!target.storage.pingshen2){ - if(card.name=='guiyoujie') return [0,1]; - } - } - } - }, - }, - pingshen3:{ - trigger:{player:'phaseUseEnd'}, - forced:true, - popup:false, - content:function(){ - "step 0" - player.removeSkill('pingshen3'); - if(player.storage.pingshen.classList.contains('dead')){ - event.finish(); - } - else{ - player.chooseCard('he',true,player.storage.pingshen.hp); - } - "step 1" - player.storage.pingshen.gain(result.cards,player); - player.$give(result.cards.length,player.storage.pingshen); - } - }, - guaili:{ - trigger:{source:'damageBegin'}, - filter:function(event){ - return event.card&&event.card.name=='sha'&&event.parent.name!='_lianhuan'&&event.parent.name!='_lianhuan2'; - }, - forced:true, - content:function(){ - trigger.num++; - player.addSkill('guaili2'); - } - }, - guaili2:{ - trigger:{source:'damageEnd'}, - forced:true, - popup:false, - content:function(){ - player.removeSkill('guaili2'); - player.chooseToDiscard(2,true); - } - }, - xingzhui:{ - enable:'phaseUse', - usable:1, - filterCard:true, - position:'he', - filterTarget:function(card,player,target){ - return player!=target&&target.countCards('he')>0; - }, - check:function(card){ - if(get.type(card)=='equip'){ - var distance=get.info(card).distance; - if(distance){ - if(distance.attackFrom<0||distance.globalFrom<0) return 10; - } - } - return 7-get.value(card); - }, - content:function(){ - "step 0" - event.type=get.type(cards[0],'trick'); - var dme=get.damageEffect(target,player,target); - target.chooseToDiscard('he',function(card){ - return get.type(card,'trick')==event.type; - },'弃置一张牌'+get.translation(event.type)+'牌,或受到1点伤害').ai=function(card){ - if(dme<0){ - return 8-get.value(card); - } - return 0; - } - "step 1" - if(!result.bool){ - target.damage(); - } - }, - ai:{ - order:9, - result:{ - target:function(player,target){ - return get.damageEffect(target,player); - } - }, - threaten:2, - expose:0.2 - } - }, - lingxian:{ - trigger:{player:['respond','useCard']}, - direct:true, - filter:function(event,player){ - if(player==_status.currentPhase) return false; - if(get.itemtype(event.cards)!='cards') return false; - return game.hasPlayer(function(current){ - return get.distance(player,current,'attack')>1&&player!=current; - }); - }, - content:function(){ - "step 0" - player.chooseTarget(get.prompt('lingxian'),function(card,player,target){ - return get.distance(player,target,'attack')>1&&player!=target; - }).ai=function(target){ - var att=get.attitude(player,target); - if(att<=-0.5) return 0; - if(att<=3) return att+0.5; - return att+Math.min(0.5,5-target.countCards('h')); - } - "step 1" - if(result.bool){ - game.asyncDraw([player,result.targets[0]]); - player.logSkill('lingxian',result.targets); - } - }, - ai:{ - mingzhi:false, - effect:{ - target:function(card,player,target){ - if(player==_status.currentPhase) return; - if(!game.hasPlayer(function(current){ - return get.distance(player,current,'attack')>1&&player!=current&&get.attitude(player,current)>=0; - })){ - return; - } - if(get.type(card)=='equip'&&player==target){ - var distance=get.info(card).distance; - if(distance){ - if(distance.attackFrom<0||distance.globalFrom<0) return 0; - } - } - else{ - if(!target.hasFriend()) return; - var hs=target.countCards('h'); - if(get.tag(card,'respondShan')){ - var shans=target.countCards('h','shan'); - if(shans>1) return [0,1]; - if(shans&&hs>2) return [0,1]; - if(shans) return [0,0]; - if(hs>2) return [0,0]; - if(hs>1) return [1,0.5]; - return [1.5,0]; - } - if(get.tag(card,'respondSha')){ - var shas=target.countCards('h','sha'); - if(shas>1) return [0,1]; - if(shas&&hs>2) return [0,1]; - if(shas) return [0,0]; - if(hs>2) return [0,0]; - if(hs>1) return [1,0.5]; - return [1.5,0]; - } - } - } - }, - threaten:0.8, - expose:0.1 - } - }, - shouyin:{ - skillAnimation:'epic', - animationColor:'water', - unique:true, - enable:'chooseToUse', - init:function(player){ - player.storage.shouyin=false; - }, - mark:true, - filter:function(event,player){ - if(event.type!='dying') return false; - if(player.storage.shouyin) return false; - if(player.isTurnedOver()) return false; - return true; - }, - content:function(){ - "step 0" - player.awakenSkill('shouyin'); - player.storage.shouyin=true; - player.turnOver(); - "step 1" - event.targets=game.filterPlayer(); - event.targets.sort(lib.sort.seat); - "step 2" - if(event.targets.length){ - var target=event.targets.shift(); - if(target.hp=target.hp){ - return true; - } - } - }, - }, - linyun:{ - enable:'chooseToUse', - filterCard:true, - selectCard:2, - position:'he', - viewAs:{name:'sha'}, - prompt:'将两张牌当杀使用', - check:function(card){ - if(_status.event.player.countCards('h')<4) return 6-get.useful(card); - return 7-get.useful(card); - }, - ai:{ - order:function(){ - return get.order({name:'sha'})+0.1; - } - }, - group:['linyun2'] - }, - linyun2:{ - trigger:{player:'shaBegin'}, - filter:function(event){ - return event.skill=='linyun' - }, - forced:true, - popup:false, - content:function(){ - "step 0" - var next=trigger.target.chooseToRespond({name:'shan'}); - next.autochoose=lib.filter.autoRespondShan; - next.ai=function(card){ - if(trigger.target.countCards('h','shan')>1){ - return get.unuseful2(card); - } - return -1; - }; - "step 1" - if(result.bool==false){ - trigger.untrigger(); - trigger.directHit=true; - } - }, - ai:{ - threaten:1.3 - } - }, - linyun3:{ - trigger:{source:'damageAfter'}, - forced:true, - popup:false, - filter:function(event,player){ - return event.parent.skill=='linyun'&&!player.hasSkill('linyun4'); - }, - content:function(){ - player.draw(); - player.addTempSkill('linyun4','shaAfter') - } - }, - linyun4:[], - bofeng:{ - mod:{ - targetInRange:function(card,player,target){ - if(card.name=='sha'&&player.hp>=target.hp){ - return true; - } - } - }, - trigger:{player:'shaBegin'}, - check:function(event,player){ - return get.attitude(player,event.target)<0; - }, - content:function(){ - "step 0" - trigger.target.chooseToRespond({name:'shan'}); - "step 1" - if(result.bool==false){ - trigger.untrigger(); - trigger.directHit=true; - player.addTempSkill('bofeng2','shaEnd'); - } - }, - ai:{ - threaten:1.3 - } - }, - bofeng2:{ - trigger:{source:'damageBegin'}, - filter:function(event){ - return (event.card&&(event.card.name=='sha')&&event.parent.name!='_lianhuan'&&event.parent.name!='_lianhuan2'); - }, - forced:true, - popup:false, - content:function(){ - trigger.num++; - }, - }, - hutian:{ - trigger:{player:'phaseEnd'}, - direct:true, - filter:function(event,player){ - return player.countCards('h')>0&&!player.storage.hutian; - }, - content:function(){ - "step 0" - var next=player.chooseCardTarget({ - filterTarget:function(card,player,target){ - return target.maxHp>=ui.selected.cards.length; - }, - filterCard:true, - selectCard:[1,player.countCards('he')], - ai1:function(card){ - var useful=get.useful(card); - if(card.name=='du'){ - useful=-5; - } - if(ui.selected.cards.length==0&&player.hp==1) return 11-useful; - if(ui.selected.cards.length>1) return 0; - return 7-useful; - }, - ai2:function(target){ - if(target.hp>ui.selected.cards.length){ - return 0; - } - return get.attitude(player,target); - }, - position:'he', - prompt:get.prompt('hutian') - }); - "step 1" - if(result.bool){ - var target=result.targets[0]; - event.target=target; - player.$give(result.cards,target); - player.lose(result.cards,ui.special); - player.storage.hutian=target; - player.logSkill('hutian',result.targets); - player.addTempSkill('hutian4'); - target.addSkill('hutian2'); - target.storage.hutian2=result.cards; - game.addVideo('storage',target,['hutian2',get.cardsInfo(result.cards),'cards']); - } - else{ - event.finish(); - } - "step 2" - var target=event.target; - if(target.storage.hutian2&&target.hp0; - }, - filter:function(event,player){ - return event.source&&event.card&&event.card.name=='sha'&&event.source!=player; - }, - logTarget:'source', - content:function(){ - trigger.source.draw(); - }, - ai:{ - expose:0.1, - threaten:1.2 - } - }, - huanxing:{ - trigger:{player:'phaseBegin'}, - group:'huanxing2', - direct:true, - content:function(){ - "step 0" - if(player.countCards('he')){ - player.chooseCardTarget({ - prompt:get.prompt('huanxing'), - filterCard:lib.filter.cardDiscardable, - position:'he', - filterTarget:function(card,player,target){ - if(target==player) return false; - if(target.sex!='male') return false; - var name=target.name.indexOf('unknown')==0?target.name2:target.name; - if(name==player.storage.huanxing) return false; - - var info=lib.character[name]; - if(info){ - var skills=info[3]; - for(var j=0;j0) return 0; - return 7-get.value(card); - }, - ai2:function(target){ - if(target.isMin()) return 0; - return 6-target.maxHp; - } - }); - } - else{ - event.finish(); - } - "step 1" - if(result.bool){ - player.unmark(player.storage.huanxing+'_charactermark'); - player.discard(result.cards); - player.logSkill('huanxing',result.targets); - var name=result.targets[0].name; - if(name.indexOf('unknown')==0){ - name=result.targets[0].name2; - } - var list=[]; - var skills=lib.character[name][3]; - for(var j=0;j0; - }, - content:function(){ - player.unmark(player.storage.huanxing+'_charactermark'); - player.removeAdditionalSkill('huanxing'); - delete player.storage.huanxing; - player.checkMarks(); - } - }, - guiying:{ - enable:'chooseToUse', - filterCard:{color:'black'}, - position:'he', - viewAs:{name:'toulianghuanzhu'}, - prompt:'将一张黑色牌当作偷梁换柱使用', - check:function(card){ - if(_status.event.player.countCards('h')>_status.event.player.hp){ - return 5-get.value(card) - } - return 0; - }, - }, - suiyan:{ - trigger:{source:'damageEnd'}, - direct:true, - filter:function(event,player){ - if(event._notrigger.contains(event.player)) return false; - return event.player.countCards('e'); - }, - content:function(){ - "step 0" - var att=get.attitude(player,trigger.player); - var next=player.chooseToDiscard('he',get.prompt('suiyan')); - next.ai=function(card){ - if(att<0) return 7-get.value(card); - return -1; - } - next.logSkill=['suiyan',trigger.player]; - "step 1" - if(result.bool){ - trigger.player.discard(trigger.player.getCards('e')); - } - }, - ai:{ - expose:0.3 - }, - }, - ningxian:{ - trigger:{player:'damageEnd'}, - direct:true, - filter:function(event,player){ - return player.countCards('he',{color:'black'})>0; - }, - content:function(){ - "step 0" - var enemy=game.countPlayer(function(current){ - return current!=player&&get.damageEffect(current,player,player)>0; - }); - var next=player.chooseCardTarget({ - position:'he', - filterTarget:function(card,player,target){ - return player!=target; - }, - selectCard:[1,player.countCards('he',{color:'black'})], - selectTarget:function(){ - if(ui.selected.targets.length>ui.selected.cards.length){ - game.uncheck('target'); - } - return ui.selected.cards.length; - }, - filterCard:function(card,player){ - return get.color(card)=='black'&&lib.filter.cardDiscardable(card,player); - }, - ai1:function(card){ - if(ui.selected.cards.length>=enemy) return 0; - return 9-get.value(card); - }, - ai2:function(target){ - return get.damageEffect(target,player,player); - }, - prompt:get.prompt('ningxian') - }); - "step 1" - if(result.bool){ - player.discard(result.cards); - player.logSkill('ningxian',result.targets); - event.targets=result.targets; - event.targets.sort(lib.sort.seat); - } - else{ - event.finish(); - } - "step 2" - if(event.targets.length){ - event.targets.shift().damage(); - event.redo(); - } - }, - ai:{ - maixie:true, - maixie_hp:true, - effect:function(card,player,target){ - if(get.tag(card,'damage')){ - if(player.hasSkillTag('jueqing',false,target)) return [1,-0.5]; - if(!target.hasFriend()){ - if(get.mode()=='guozhan'){ - if(!player.hasFriend()) return; - } - else{ - return; - } - } - if(target.countCards('h')>2||target.countCards('e',{color:'black'})){ - return [1,0,0,-1]; - } - return [1,-0.5]; - } - }, - } - }, - xuanyuan:{ - trigger:{player:'phaseBegin'}, - unique:true, - forceunique:true, - filter:function(event,player){ - for(var i=0;i=4) return [1,1.5]; - if(target.hp==3) return [1,1]; - if(target.hp==2) return [1,0.5]; - } - } - } - } - }, - pozhou2:{ - enable:'phaseUse', - filter:function(event,player){ - return player.storage.pozhou>0; - }, - filterTarget:function(card,player,target){ - return target!=player&&!target.hasSkill('fengyin'); - }, - selectTarget:function(){ - return [1,_status.event.player.storage.pozhou]; - }, - prompt:'出牌阶段,你可以指定任意名其他角色并弃置等量的破咒标记,令目标的非锁定技失效直到其下一回合结束', - content:function(){ - player.storage.pozhou--; - if(!player.storage.pozhou){ - player.unmarkSkill('pozhou'); - } - else{ - player.updateMarks(); - } - target.addTempSkill('fengyin',{player:'phaseAfter'}); - }, - ai:{ - order:11, - result:{ - target:function(player,target){ - var skills=target.getSkills(); - for(var i=0;i0&&player!=event.player; - }, - prompt:function(event,player){ - return '是否弃置一枚破咒标记令'+get.translation(event.player)+ - '的非锁定技失效?(剩余'+player.storage.pozhou+'枚)'; - }, - logTarget:'player', - content:function(){ - player.storage.pozhou--; - if(!player.storage.pozhou){ - player.unmarkSkill('pozhou'); - } - else{ - player.updateMarks(); - } - trigger.player.addTempSkill('fengyin',{player:'phaseBegin'}); - } - }, - fengmo:{ - enable:'phaseUse', - usable:1, - filter:function(){ - return game.countPlayer(function(current){ - return current.getEquip(1); - })>=1; - }, - filterTarget:function(card,player,target){ - return player!=target&&!target.isTurnedOver(); - }, - content:function(){ - "step 0" - event.targets=[]; - event.num=0; - var players=game.filterPlayer(); - for(var i=0;i1){ - return 12-get.equipValue(card); - } - return 8-get.equipValue(card); - }, - filter:function(event,player){ - return player.countCards('he',{type:'equip'}); - }, - filterTarget:function(card,player,target){ - return player!=target; - }, - content:function(){ - target.damage(); - }, - ai:{ - order:9.5, - expose:0.2, - result:{ - player:function(player,target){ - return get.damageEffect(target,player,player); - } - } - } - }, - tuzhen:{ - trigger:{source:'damageAfter'}, - filter:function(event,player){ - return event.player.isIn()&&event.player!=player&&event.player.hasCard(function(card){ - return get.type(card)!='basic'; - }); - }, - alter:true, - logTarget:'player', - check:function(event,player){ - return get.attitude(player,event.player)<0; - }, - content:function(){ - var hs=trigger.player.getCards('h',function(card){ - return get.type(card)!='basic'; - }); - if(get.is.altered('tuzhen')){ - hs=hs.randomGet(); - } - trigger.player.discard(hs); - } - }, - mojian:{ - trigger:{player:'shaBegin'}, - check:function(event,player){ - if(get.attitude(player,event.target)>0) return true; - return player.hp0){ - player.stat[player.stat.length-1].card.sha--; - } - }, - group:'poyue2' - }, - poyue2:{ - trigger:{player:'shaBegin'}, - forced:true, - popup:false, - filter:function(event,player){ - return event.card&&get.color(event.card)=='red'; - }, - content:function(){ - trigger.directHit=true; - } - }, - jianji:{ - enable:'phaseUse', - filter:function(event,player){ - return player.countCards('he',{type:'equip'})>0&&lib.filter.cardEnabled({name:'sha'},player); - }, - usable:1, - filterCard:{type:'equip'}, - position:'he', - check:function(card){ - var player=_status.currentPhase; - if(player.countCards('he',{subtype:get.subtype(card)})>1){ - return 11-get.equipValue(card); - } - return 6-get.equipValue(card); - }, - discard:false, - prepare:'throw', - delay:false, - filterTarget:function(card,player,target){ - return lib.filter.targetEnabled({name:'sha'},player,target); - }, - content:function(){ - "step 0" - player.addAdditionalSkill('jianji','unequip'); - player.draw(); - player.useCard({name:'sha'},cards,targets,false).animate=false; - player.line(targets,'fire'); - "step 1" - player.removeAdditionalSkill('jianji'); - }, - ai:{ - order:function(){ - return get.order({name:'sha'})+0.1; - }, - result:{ - target:function(player,target){ - player.addAdditionalSkill('jianji_ai','unequip'); - var eff=get.effect(target,{name:'sha'},player,target); - player.removeAdditionalSkill('jianji_ai'); - return eff; - } - }, - effect:{ - player:function(card,player){ - if(_status.currentPhase!=player) return; - if(get.type(card)=='equip'&& - player.countCards('e',{subtype:get.subtype(card)})&& - lib.filter.filterCard({name:'sha'},player)){ - return 0; - } - } - }, - threaten:1.3 - } - }, - huangyu:{ - enable:'phaseUse', - filter:function(event,player){ - if(!lib.card.chiyuxi) return false; - return !player.getStat('skill').huangyu&&player.countCards('he',{color:'red'})>1; - }, - filterCard:{color:'red'}, - selectCard:2, - position:'he', - viewAs:{name:'chiyuxi',nature:'fire'}, - check:function(card){ - var player=_status.event.player; - if(player.hasSkill('jianji')&&get.type(card)=='equip'&& - lib.filter.filterCard({name:'sha'},player)){ - return 0; - } - return 6-get.value(card) - }, - ai:{ - order:8, - expose:0.2, - threaten:1.2 - } - }, - gongshen:{ - trigger:{global:'useCard'}, - priority:15, - filter:function(event,player){ - var type=get.type(event.card,'trick'); - if(type!='basic'&&type!='trick') return false; - return event.player!=player&&player.countCards('he',{type:'equip'})>0&& - event.targets&&event.targets.length>0; - }, - direct:true, - content:function(){ - "step 0" - var effect=0; - for(var i=0;i=7&&get.type(trigger.card)=='trick') return val; - if(nme=='tao') return val; - if(nme=='wuzhong') return val; - if(nme=='zengbin') return val; - if(nme=='wangmeizhike') return val; - if(nme=='shunshou'&&player==trigger.targets[0]) return val; - if(nme=='guohe'&&player==trigger.targets[0]) return val; - if(nme=='liuxinghuoyu') return val; - if(nme=='nanman') return val; - if(nme=='wanjian') return val; - if(nme=='jingleishan') return val; - if(nme=='chiyuxi') return val; - if((nme=='juedou')&&(player==trigger.targets[0]||trigger.targets[0].hp==1)) return val; - if(nme=='chenhuodajie') return val; - if(nme=='lebu'&&trigger.targets[0].countCards('h')>trigger.targets[0].hp) return val; - if(nme=='sha'&&trigger.targets[0].hp==1&&!trigger.targets[0].hasShan()) return val; - if(nme=='jiedao'&&trigger.targets[0]==player) return val; - if(nme=='yihuajiemu'&&trigger.targets[0]==player) return val; - if(nme=='shuiyanqijun'&&trigger.targets.contains(player)) return val; - return 0; - } - return -1; - } - "step 1" - if(result.bool){ - // game.delay(2); - trigger.cancel(); - } - }, - ai:{ - effect:{ - player:function(card,player,target){ - if(player!=target) return; - if(get.type(card)=='equip'&&!player.needsToDiscard()){ - return [0,0,0,0]; - } - } - }, - threaten:2, - expose:0.3 - } - }, - xiaozhan:{ - trigger:{global:'useCard'}, - priority:15, - filter:function(event,player){ - return event.card.name=='sha'&&event.player!=player&& - player.countCards('h','sha')>0&&event.targets.contains(player)==false; - }, - direct:true, - content:function(){ - "step 0" - var effect=0; - for(var i=0;i0; - }, - selectCard:2, - filterCard:true, - discard:false, - prepare:'throw', - filterTarget:function(card,player,target){ - return lib.filter.targetEnabled({name:'juedou'},player,target); - }, - check:function(card){ - return Math.max(7-get.value(card),7-get.useful(card)); - }, - content:function(){ - player.useCard({name:'juedou'},targets,cards).animate=false; - }, - ai:{ - result:{ - target:function(player,target){ - return get.effect(target,{name:'juedou'},player,target); - } - }, - order:8, - } - }, - dangping:{ - trigger:{source:'damageAfter'}, - direct:true, - filter:function(event,player){ - return event.parent.name!='dangping'&&!player.hasSkill('dangping2')&&player.countCards('he')>0; - }, - content:function(){ - "step 0" - var next=player.chooseCardTarget({ - position:'he', - filterTarget:function(card,player,target){ - return player!=target&&trigger.player!=target&&get.distance(trigger.player,target)<=1; - }, - filterCard:lib.filter.cardDiscardable, - ai1:function(card){ - return get.unuseful(card)+9; - }, - ai2:function(target){ - return get.damageEffect(target,player,player); - }, - prompt:get.prompt('dangping') - }); - "step 1" - if(result.bool){ - player.discard(result.cards); - player.logSkill('dangping',result.targets); - player.addTempSkill('dangping2'); - } - "step 2" - if(result.bool){ - result.targets[0].damage(); - } - } - }, - dangping2:{}, - duishi:{ - enable:'phaseUse', - filter:function(event,player){ - return player.countCards('h')>0&&!player.hasSkill('duishi2'); - }, - filterTarget:function(card,player,target){ - return player!=target&&target.countCards('h')>0&&!target.hasSkill('duishi3'); - }, - filterCard:true, - check:function(card){return 8-get.value(card)}, - content:function(){ - "step 0" - var suit=get.suit(cards[0]); - target.chooseToDiscard({suit:suit},'h','对诗:弃置一张'+get.translation(suit)+ - '牌,或令'+get.translation(player)+'获得你一张牌').ai=function(card){ - if(get.attitude(target,player)>0) return 0; - return 9-get.value(card); - } - - "step 1" - if(result.bool){ - target.addTempSkill('duishi3'); - } - else{ - player.gainPlayerCard(target,'he',true); - player.addTempSkill('duishi2'); - } - }, - ai:{ - order:9, - threaten:1.5, - result:{ - target:-2, - player:0.5 - }, - expose:0.2 - } - }, - duishi2:{}, - duishi3:{}, - guisi:{ - trigger:{target:'shaBefore'}, - popup:false, - direct:true, - filter:function(event,player){ - return player.countCards('h'); - }, - content:function(){ - "step 0" - player.chooseCard('是否交给'+get.translation(trigger.player)+'一张牌并取消此杀?').ai=function(card){ - if(get.attitude(player,trigger.player)>0){ - return 9-get.value(card); - } - if(player.countCards('h',{name:'shan'})) return -1; - return 7-get.value(card); - } - "step 1" - if(result.bool){ - player.logSkill('guisi'); - trigger.player.gain(result.cards,player); - player.$give(result.cards,trigger.player); - trigger.cancel(); - } - }, - }, - lianwu:{ - mod:{ - selectTarget:function(card,player,range){ - if(card.name=='sha'&&range[1]!=-1) range[1]++; - }, - }, - trigger:{player:'shaBegin'}, - forced:true, - filter:function(event,player){ - return event.card&&get.color(event.card)=='red'; - }, - content:function(){ - trigger.directHit=true; - } - }, - mingfu:{ - enable:'phaseUse', - usable:1, - filter:function(event,player){ - return player.countCards('he',{suit:'club'})>0; - }, - position:'he', - filterCard:{suit:'club'}, - discard:false, - prepare:'throw', - filterTarget:function(card,player,target){ - return lib.filter.targetEnabled({name:'guiyoujie'},player,target); - }, - check:function(card){ - if(card.name=='du') return 20; - return Math.max(7-get.value(card),7-get.useful(card)); - }, - content:function(){ - target.addJudge('guiyoujie',cards); - }, - ai:{ - result:{ - target:function(player,target){ - return get.effect(target,{name:'guiyoujie'},player,target); - } - }, - order:8, - } - }, - mufeng_old:{ - init:function(player){ - player.storage.mufeng=0; - }, - group:['mufeng_gain','mufeng_lose'], - mark:true, - intro:{ - content:function(storage){ - if(storage>0){ - return '防御距离+'+storage; - } - else if(storage<0){ - return '防御距离'+storage; - } - else{ - return '无距离变化'; - } - } - }, - subSkill:{ - lose:{ - trigger:{global:'dieAfter'}, - forced:true, - filter:function(event,player){ - return player.storage.mufeng>game.players.length/2; - }, - content:function(){ - player.storage.mufeng=0; - player.updateMarks(); - } - }, - gain:{ - trigger:{player:'loseEnd'}, - forced:true, - filter:function(event,player){ - return _status.currentPhase!=player; - }, - content:function(){ - player.storage.mufeng++; - if(player.storage.mufeng>game.players.length/2){ - player.storage.mufeng=0; - } - player.updateMarks(); - } - }, - }, - mod:{ - globalTo:function(from,to,distance){ - if(typeof to.storage.mufeng=='number'){ - return distance+to.storage.mufeng; - } - } - } - }, - mufeng:{ - trigger:{player:'phaseEnd'}, - frequent:true, - alter:true, - filter:function(event,player){ - if(get.is.altered('mufeng')){ - return player.countCards('h')player.countCards('h'); - }, - content:function(){ - player.draw(Math.min(5,trigger.player.countCards('h'))-player.countCards('h')); - player.addTempSkill('mufeng2',{player:'phaseBegin'}); - }, - }, - mufeng2:{}, - jiying:{ - mod:{ - targetInRange:function(card){ - if(card.name=='sha') return true; - } - }, - }, - minjing:{ - trigger:{player:'damageBegin'}, - forced:true, - filter:function(event,player){ - if(player.getEquip(2)) return false; - return lib.skill.guangshatianyi.filter(event,player); - }, - content:function(){ - trigger.num--; - }, - ai:{ - threaten:0.8 - } - }, - touxi:{ - trigger:{global:'phaseEnd'}, - check:function(event,player){ - if(get.damageEffect(event.player,player,player,'thunder')>0){ - if(get.is.altered('touxi')&&get.attitude(player,event.player)<0&&player.countCards('he')){ - if(event.player.hp==1&&player.hp>1){ - return true; - } - } - else{ - return true; - } - } - return false; - }, - alter:true, - filter:function(event,player){ - return event.player!=player&&!player.hasSkill('touxi2')&&event.player.isAlive(); - }, - logTarget:'player', - content:function(){ - "step 0" - player.judge(function(card){ - if(get.color(card)=='black') return 1; - return -1; - }); - "step 1" - if(result.bool){ - trigger.player.damage('thunder'); - player.addSkill('touxi2'); - event.finish(); - } - else{ - if(player.countCards('he')){ - var att=get.attitude(trigger.player,player); - trigger.player[get.is.altered('touxi')?'gainPlayerCard':'discardPlayerCard'](player,'he',function(button){ - if(att>0) return 0; - return get.buttonValue(button); - }); + } + }, + cyxianjiang:{ + trigger:{player:'useCardToBegin'}, + init:function(player){ + player.storage.cyxianjiang=[]; + }, + filter:function(event,player){ + if(event.target!=player&&event.targets&&event.targets.length==1){ + if(player.storage.cyxianjiang.contains(event.target)) return false; + return event.target.countCards('e',function(card){ + return !player.countCards('he',card.name); + }); + } + return false; + }, + direct:true, + content:function(){ + 'step 0' + player.choosePlayerCard(trigger.target,'e',get.prompt('cyxianjiang')).set('ai',get.buttonValue).set('filterButton',function(button){ + return !player.countCards('he',button.link.name); + }); + 'step 1' + if(result.bool){ + player.logSkill('cyxianjiang'); + var card=result.links[0]; + player.equip(game.createCard(card),true); + player.storage.cyxianjiang.add(trigger.target); + } + }, + group:'cyxianjiang_clear', + subSkill:{ + clear:{ + trigger:{global:'phaseAfter'}, + silent:true, + content:function(){ + player.storage.cyxianjiang.length=0; } - } - }, - ai:{ - expose:0.3, - threaten:1.2 - } - }, - touxi2:{ - trigger:{player:'phaseBegin'}, - forced:true, - popup:false, - content:function(){ - player.removeSkill('touxi2'); - } - }, - nlianji:{ - audio:'lianji', - enable:'phaseUse', - usable:1, - filterTarget:function(card,player,target){ - if(player==target) return false; - return target.countCards('h')>0; - }, - selectTarget:2, - multitarget:true, - multiline:true, - filter:function(event,player){ - return player.countCards('h')>0; - }, - prepare:'throw', - discard:false, - filterCard:true, - check:function(card){ - return 6-get.value(card); - }, - content:function(){ - "step 0" - if(targets[0].countCards('h')&&targets[1].countCards('h')){ - targets[0].chooseToCompare(targets[1]); - } - else{ - event.finish(); - } - "step 1" - if(result.bool){ - targets[0].gain(cards,'log'); - targets[0].$gain2(cards); - targets[1].damage(targets[0]); - } - else{ - targets[1].gain(cards,'log'); - targets[1].$gain2(cards); - targets[0].damage(targets[1]); - } - }, - ai:{ - expose:0.3, - threaten:2, - order:9, - result:{ - target:-1 - } - }, - }, - lianji2:{ - group:['lianji3','lianji4'] - }, - lianji3:{ - trigger:{player:'shaHit'}, - forced:true, - popup:false, - content:function(){ - player.storage.lianji2=true; - } - }, - lianji4:{ - trigger:{player:'shaAfter'}, - forced:true, - popup:false, - content:function(){ - if(!player.storage.lianji2){ - player.damage('thunder',player.storage.lianji); - } - delete player.storage.lianji; - delete player.storage.lianji2; - player.removeSkill('lianji2'); - } - }, - yinmo:{}, - miedao:{ - group:['miedao1','miedao2'], - ai:{ - threaten:1.4 - } - }, - miedao1:{ - trigger:{player:'phaseDrawBegin'}, - forced:true, - filter:function(event,player){ - return player.hp=player.maxHp-1) return [0,0]; - } - } - } - }, - moyan:{ - enable:'phaseUse', - usable:1, - filter:function(event,player){ - return player.hp0; - }, - filterTarget:function(card,player,target){ - return player!=target;//&&get.distance(player,target,'attack')<=1; - }, - selectTarget:function(){ - return ui.selected.cards.length; - }, - selectCard:function(){ - var player=_status.currentPhase; - return [1,Math.min(game.players.length-1,player.maxHp-player.hp)]; - }, - filterCard:function(card){ - return get.color(card)=='red'; - }, - check:function(card){ - if(ui.selected.cards.length==0){ - return 8-get.value(card); - } - return 6-get.value(card); - }, - line:'fire', - content:function(){ - "step 0" - target.damage('fire'); - "step 1" - // target.draw(); - }, - ai:{ - order:9, - result:{ - target:function(player,target){ - return get.damageEffect(target,player,target,'fire'); - } - }, - threaten:function(player,target){ - if(target.hp==1) return 2; - if(target.hp==2) return 1.5; - return 0.5; - }, - maixie:true, - effect:{ - target:function(card,player,target){ - 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]; - } - } - } - }, - shejie:{ - trigger:{player:'damageEnd'}, - priority:9, - check:function(event,player){ - return get.attitude(player,event.source)<0; - }, - filter:function(event){ - return event&&event.source; - }, - content:function(){ - trigger.source.addSkill('shejie2'); - }, - ai:{ - threaten:0.4 - } - }, - shejie2:{ - unique:true, - trigger:{player:'phaseBegin'}, - forced:true, - priority:10, - mod:{ - cardEnabled:function(){ - return false; - }, - cardUsable:function(){ - return false; - }, - cardRespondable:function(){ - return false; - }, - cardSavable:function(){ - return false; - } - }, - content:function(){ - player.removeSkill('shejie2') - }, - }, - guiyin:{ - trigger:{player:'phaseDiscardEnd'}, - frequent:true, - filter:function(event,player){ - return event.cards&&event.cards.length>1 - }, - content:function(){ - player.draw(2); - }, - }, - wangchen:{ - trigger:{player:'phaseDiscardEnd'}, - direct:true, - filter:function(event,player){ - if(event.cards){ - // if(!get.is.altered('wangchen')) return true; - for(var i=0;i=2; - }, - content:function(){ - "step 0" - var next=player.chooseToDiscard(get.prompt('yihua',trigger.player),2); - next.ai=function(card){ - if(get.effect(player,trigger.card)<0){ - if(card.name=='liuxinghuoyu') return 7-get.value(card); - return 5-get.value(card); - } - return 0; - }; - next.prompt2='反弹'+get.translation(trigger.player)+'的'+get.translation(trigger.card); - next.logSkill=['yihua',trigger.player]; - "step 1" - if(result.bool){ - // player.discard(result.cards); - trigger.target=trigger.player; - trigger.player=player; - trigger.untrigger(); - trigger.trigger('useCardToBefore'); - } - // "step 2" - // if(result.bool){ - // trigger.target=result.targets[0]; - // trigger.untrigger; - // trigger.trigger('shaBefore'); - // game.delay(); - // } - }, - ai:{ - threaten:function(player,target){ - if(target.countCards('h')<=2){ - return 2; - } - return 2/(target.countCards('h')-1); - } - } - }, - youyin:{ - trigger:{global:'discardAfter'}, - filter:function(event,player){ - if(event.player==player) return false; - if(player.countCards('h')>=5) return false; - for(var i=0;i0; - }, - check:function(card){ - return 10-get.value(card) - }, - filterTarget:function(card,player,target){ - if(target.hp>=target.maxHp) return false; - return true; - }, - selectTarget:[1,3], - content:function(){ - target.recover(); - }, - ai:{ - order:10, - result:{ - target:function(player,target){ - if(player==target&&player.countCards('h')>player.hp) return 20; - return get.recoverEffect(target,player,target); - } - }, - threaten:2 - } - }, - huopu:{ - enable:'phaseUse', - usable:1, - position:'he', - filterCard:function(card){ - return get.suit(card)=='heart'; - }, - viewAs:{name:'liuxinghuoyu'}, - viewAsFilter:function(player){ - if(!player.countCards('he',{suit:'heart'})) return false; - }, - prompt:'将一张红桃手牌当作流星火羽使用', - check:function(card){return 6-get.value(card)}, - ai:{ - threaten:1.4, - order:9, - } - }, - rexue:{ - trigger:{global:'phaseBegin'}, - direct:true, - filter:function(event,player){ - return lib.filter.targetEnabled({name:'sha'},player,event.player)&&player.hasSha(); - }, - content:function(){ - var next=player.chooseToUse({name:'sha'},'热血:是否对'+get.translation(trigger.player)+'使用一张杀',trigger.player,-1); - next.logSkill='rexue'; - next.oncard=function(){ - player.draw(); - } - } - }, - shengshou:{ - enable:'phaseUse', - filterCard:function(card){ - return get.color(card)=='black'; - }, - viewAs:{name:'caoyao'}, - prompt:'将一张黑色手牌当作草药使用', - check:function(card){return 6-get.value(card)}, - ai:{ - threaten:1.6 - } - }, - huanjian:{ - enable:'phaseUse', - filterCard:function(card){ - return get.color(card)=='black'; - }, - viewAs:{name:'bingpotong'}, - position:'he', - filter:function(event,player){ - return player.countCards('h',{color:'black'})>0; - }, - viewAsFilter:function(player){ - if(!player.countCards('he',{color:'black'})) return false; - }, - prompt:'将一张黑色牌当作冰魄针使用', - check:function(card){return 5-get.value(card)}, - ai:{ - threaten:1.1 - } - }, - benlei:{ - enable:'phaseUse', - viewAs:{name:'jingleishan',nature:'thunder'}, - filterCard:function(card,player){ - return true; - }, - selectCard:3, - position:'he', - prompt:'将三张牌当作惊雷闪使用', - check:function(card){ - return 4-get.value(card); - }, - group:'benlei2', - ai:{ - basic:{ - order:10 - } - } - }, - benlei2:{ - trigger:{source:'damageAfter'}, - filter:function(event,player){ - return event.nature=='thunder'&&player.hp0; - } - else{ - return player.countCards('h')>0; - } - }, - content:function(){ - "step 0" - var att=get.attitude(player,trigger.player); - var nh=player.countCards('h'); - var next; - if(get.is.altered('susheng')){ - next=player.chooseToDiscard(get.prompt('susheng',trigger.player),{color:'red'}); - } - else{ - next=player.chooseToDiscard(get.prompt('susheng',trigger.player)); - } - next.logSkill=['susheng',trigger.player]; - next.ai=function(card){ - if(att>3||(att>1&&nh>2)){ - return get.unuseful2(card); - } - return 0; - }; - "step 1" - if(result.bool){ - // player.chooseToDiscard('h',true); - trigger.cancel(); - trigger.player.hp=1; - if(trigger.player.maxHp<1) trigger.player.maxHp=1; - trigger.player.update(); - player.addTempSkill('susheng2'); - } + } + } + }, + cyzhencha:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + if(!game.hasPlayer(function(current){ + return current!=player&¤t.countCards('h'); + })){ + return false; + } + if(!player.countCards('h',{type:'basic'})) return false; + var es=player.getCards('e'); + for(var i=0;i0; + }).set('autodelay',0.5).ai=function(target){ + return -get.attitude(player,target); + }; + "step 1" + if(result.bool){ + player.logSkill('cyzhencha_shuiyun',result.targets); + player.discardPlayerCard(result.targets[0],'he',true); + } + else{ + event.finish(); + } + }, + onremove:function(player){ + _status.event.insert(lib.skill.cyzhencha_shuiyun.content,{player:player}); + } + }, + cyzhencha_liuzi:{ + trigger:{player:'phaseDrawBegin'}, + frequent:true, + thundertext:true, + content:function(){ + trigger.num++; + }, + onremove:function(player){ + player.draw(); + } + }, + cyzhencha_yijin:{ + trigger:{player:'phaseBegin'}, + direct:true, + thundertext:true, + content:function(){ + "step 0" + player.chooseTarget([1,1],'水云:你可以弃置一名角色的一张牌',function(card,player,target){ + if(player==target) return false; + return target.countCards('he')>0; + }).set('autodelay',0.5).ai=function(target){ + return -get.attitude(player,target); + }; + "step 1" + if(result.bool){ + player.logSkill('cyzhencha_shuiyun',result.targets); + player.discardPlayerCard(result.targets[0],'he',true); + } + else{ + event.finish(); + } + }, + onremove:function(player){ + _status.event.insert(lib.skill.cyzhencha_shuiyun.content,{player:player}); + } + }, + cyzhencha_qingling:{ + inhert:'cyzhencha_shuiyun' + }, + cyzhencha_qiandian:{ + inhert:'cyzhencha_shuiyun' + }, + cyqiaoxie_old:{ + enable:'phaseUse', + filterCard:function(card){ + return get.type(card,'trick')=='trick'; + }, + usable:1, + filter:function(event,player){ + var current=[]; + var es=player.getCards('e'); + for(var i=0;i7){ + map[i]=0;break; + } + else if(val<=5){ + map[i]++; + if(val<=4){ + map[i]+=0.5; + } + if(val<0){ + map[i]+=2; + } + } + } + if(map[i]>max){ + choice=i; + max=map[i]; + } + } + var controls=['heart2','spade2','diamond2','club2']; + for(var i=0;i=3){ + return controls[2]; + } + else{ + return controls[0]; + } + }).set('prompt','选择一个花色从牌堆中获得'+hs.length+'张该花色的牌'); + event.num=hs.length; + 'step 2' + if(result.control){ + var suit=result.control.slice(0,result.control.length-1); + var cards=[]; + for(var i=0;i7){ + bool=false;break; + } + else if(val<=4){ + bool=true; + } + } + if(bool){ + return 1; + } + } + return 0; + } + } + } + }, + yeying:{ + enable:'phaseUse', + usable:1, + viewAs:{name:'qiankunbiao'}, + viewAsFilter:function(player){ + return player.countCards('he',{color:'black'}); + }, + filterCard:{color:'black'}, + position:'he', + check:function(card){ + return 7-get.value(card); + }, + ai:{ + threaten:1.5 + } + }, + juxi:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.storage.juxi>=game.countPlayer(); + }, + filterTarget:true, + init:function(player){ + player.storage.juxi=0; + }, + init2:function(player){ + if(get.mode()=='guozhan'){ + player.logSkill('juxi'); + } + }, + intro:{ + content:'mark' + }, + content:function(){ + 'step 0' + player.storage.juxi-=game.countPlayer(); + player.syncStorage('juxi'); + if(player.storage.juxi<=0){ + player.unmarkSkill('juxi'); + } + else{ + player.updateMarks(); + } + if(target.isDamaged()){ + player.chooseControl(function(){ + if(get.attitude(player,target)>0) return 1; + return 0; + }).set('choiceList',[ + '对'+get.translation(target)+'造成一点伤害', + '令'+get.translation(target)+'回复一点体力', + ]) + } + else{ + target.damage(); + event.finish(); + } + 'step 1' + if(result.control=='选项一'){ + target.damage(); + } + else{ + target.recover(); + } + }, + ai:{ + order:7, + result:{ + target:function(player,target){ + if(get.attitude(player,target)>0){ + if(target.isDamaged()) return get.recoverEffect(target,player,target); + return 0; + } + else{ + return get.damageEffect(target,player,target); + } + } + } + }, + group:'juxi_count', + subSkill:{ + count:{ + trigger:{global:'discardAfter'}, + forced:true, + popup:false, + filter:function(event,player){ + return _status.currentPhase!=event.player; + }, + content:function(){ + player.storage.juxi++; + player.syncStorage('juxi'); + player.markSkill('juxi'); + player.updateMarks(); + }, + } + } + }, + jiefen:{ + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return target.countCards('h')>player.countCards('h'); + }, + filter:function(event,player){ + return !player.isMaxHandcard(); + }, + content:function(){ + 'step 0' + target.chooseCard('h',true,'交给'+get.translation(player)+'一张牌'); + 'step 1' + if(result.bool){ + player.gain(result.cards,target); + target.$giveAuto(result.cards,player); + } + else{ + event.finish(); + } + 'step 2' + var nh=player.countCards('h'); + if(game.hasPlayer(function(current){ + return current.countCards('h')max){ + max=nh; + } + if(nh0; + }, + filterTarget:true, + selectTarget:[1,2], + position:'he', + check:function(card){ + return 7-get.value(card); + }, + contentBefore:function(){ + player.loseHp(); + }, + alter:true, + content:function(){ + if(targets.length==1){ + target.damage('fire',2); + if(get.is.altered('huodan')) target.draw(); + } + else{ + target.damage('fire'); + } + }, + line:'fire', + ai:{ + order:15, + expose:0.2, + threaten:1.5, + result:{ + target:function(player,target){ + if(player.hp<2) return 0; + if(get.attitude(player,target)>=0) return 0; + if(target.hp>player.hp) return 0; + var eff=get.damageEffect(target,player,target,'fire'); + if(eff<0){ + if(ui.selected.targets.length&&target.hp>1&&ui.selected.targets[0].hp>1){ + return 0; + } + if(target.nodying) return eff/10; + return eff/Math.sqrt(target.hp); + } + return 0; + } + } + } + }, + sxianjing:{ + enable:'phaseUse', + filter:function(event,player){ + var suits=[]; + for(var i=0;i0; + }, + content:function(){ + var card=player.storage.sxianjing.randomGet(); + player.storage.sxianjing.remove(card); + player.gain(card,'draw'); + player.syncStorage('sxianjing'); + if(player.storage.sxianjing.length){ + player.updateMarks(); + } + else{ + player.unmarkSkill('sxianjing'); + } + } + } + } + }, + zhanxing:{ + enable:'phaseUse', + usable:1, + position:'he', + filterCard:true, + selectCard:[1,Infinity], + filter:function(event,player){ + return player.countCards('he')>0; + }, + check:function(card){ + switch(ui.selected.cards.length){ + case 0: return 8-get.value(card); + case 1: return 6-get.value(card); + case 2: return 3-get.value(card); + } + return 0; + }, + content:function(){ + 'step 0' + var list=get.cards(cards.length); + event.list=list; + player.showCards(list); + 'step 1' + var suits=[]; + event.suits=suits; + for(var i=0;i2&& + get.damageEffect(trigger.target,trigger.player,player)<0); + next.ai=function(card){ + if(goon){ + if(trigger.target.hp==1) return 10-get.value(card); + return 7-get.value(card); + } + return 0; + }; + next.logSkill=['tiebi',trigger.target]; + "step 1" + if(result.bool){ + trigger.target.changeHujia(); + } + }, + ai:{ + threaten:1.1 + } + }, + shenyan:{ + trigger:{source:'damageBegin'}, + skillAnimation:true, + animationColor:'fire', + filter:function(event,player){ + return !player.storage.shenyan&&event.nature=='fire'; + }, + intro:{ + content:'limited' + }, + mark:true, + logTarget:'player', + init:function(player){ + player.storage.shenyan=false; + }, + check:function(event,player){ + if(get.attitude(player,event.player)>=0) return 0; + if(player.hasUnknown()) return 0; + var num=0,players=game.filterPlayer(); + for(var i=0;i0){ + num++; + } + else if(eff<0){ + num--; + } + } + } + return num>0; + }, + content:function(){ + trigger.num++; + player.addSkill('shenyan2'); + player.storage.shenyan=true; + player.awakenSkill('shenyan'); + player.storage.shenyan2=[]; + var players=game.filterPlayer(); + for(var i=0;i0; + }, + content:function(){ + 'step 0' + target.chooseToDiscard(2,'h',true).delay=false; + 'step 1' + target.draw(); + }, + selectTarget:-1, + ai:{ + order:9, + result:{ + target:-1 + } + } + }, + xuanying:{ + subSkill:{ + sha:{ + enable:'chooseToUse', + viewAs:{name:'sha'}, + viewAsFilter:function(player){ + if(player.isLinked()) return false; + }, + precontent:function(){ + player.link(); + // player.getStat().card.sha--; + }, + filterCard:function(){return false}, + selectCard:-1, + prompt:'横置武将牌,视为使用一张无视距离的杀', + ai:{ + order:function(){ + // if(_status.event.player.countCards('h',{type:'equip'})) return 9; + return 3.15; + }, + skillTagFilter:function(player,tag,arg){ + if(arg!='use') return false; + if(player.isLinked()) return false; + }, + respondSha:true, + }, + mod:{ + targetInRange:function(card){ + if(_status.event.skill=='xuanying_sha') return true; + } + }, + }, + shan:{ + trigger:{player:'chooseToRespondBegin'}, + filter:function(event,player){ + if(!player.isLinked()) return false; + if(event.responded) return false; + if(!event.filterCard({name:'shan'})) return false; + return true; + }, + check:function(event,player){ + if(get.damageEffect(player,event.player,player)>=0) return false; + return true; + }, + content:function(){ + 'step 0' + player.link(); + 'step 1' + trigger.untrigger(); + trigger.responded=true; + trigger.result={bool:true,card:{name:'shan'}} + }, + ai:{ + target:function(card,player,target,current){ + if(!player.isLinked()&¤t<0) return 1.5; + if(!target.hasFriend()) return; + if(get.tag(card,'loseCard')&&_status.currentPhase!=target&&target.countCards('he')){ + return [0.5,Math.max(2,target.countCards('h'))]; + } + if(get.tag(card,'respondSha')||get.tag(card,'respondShan')){ + if(get.attitude(player,target)>0&&card.name=='juedou') return; + return [0.5,target.countCards('h','sha')+target.countCards('h','shan')]; + } + } + } + }, + damage:{ + trigger:{player:'damageEnd'}, + filter:function(event,player){ + return event.source&&event.source.isAlive()&&player.isLinked()&& + lib.filter.targetEnabled({name:'sha'},player,event.source); + }, + check:function(event,player){ + return get.effect(event.source,{name:'sha'},player,player)>0; + }, + logTarget:'source', + content:function(){ + 'step 0' + player.link(); + 'step 1' + player.useCard({name:'sha'},trigger.source); + } + }, + use:{ + trigger:{player:'loseEnd'}, + direct:true, + filter:function(event,player){ + return _status.currentPhase!=player&&player.isLinked()&&event.cards&&event.cards.length; + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('xuanying'),function(card,player,target){ + return lib.filter.targetEnabled({name:'sha'},player,target); + }).set('ai',function(target){ + return get.effect(target,{name:'sha'},_status.event.player); + }).set('autodelay',0.5); + 'step 1' + if(result.bool){ + player.logSkill('xuanying'); + player.link(); + player.useCard({name:'sha'},result.targets,false); + } + }, + } + }, + group:['xuanying_sha','xuanying_use'], + ai:{ + threaten:function(player,target){ + if(target.isLinked()) return 0.7; + return 1.4; + } + } + }, + hwendao:{ + trigger:{player:['useCardAfter','respondAfter',]}, + check:function(event,player){ + return get.attitude(player,_status.currentPhase)<=0; + }, + logTarget:function(){ + return _status.currentPhase; + }, + filter:function(event,player){ + if(player==_status.currentPhase) return false; + if(!_status.currentPhase.countCards('he')) return false; + return event.cards&&event.cards.length==1; + }, + content:function(){ + 'step 0' + var suit=get.suit(trigger.cards[0]); + var goon=(get.attitude(_status.currentPhase,player)<=0); + _status.currentPhase.chooseToDiscard('弃置一张'+get.translation(suit+'2')+ + '牌,或令'+get.translation(player)+'获得你的一张牌',{suit:suit}).ai=function(card){ + if(goon) return 8-get.value(card); + return 0; + } + 'step 1' + if(!result.bool){ + player.gainPlayerCard(_status.currentPhase,'he',true); + } + }, + ai:{ + threaten:0.7 + } + }, + lingfeng:{ + trigger:{player:'phaseEnd'}, + frequent:true, + filter:function(event,player){ + return player.countUsed()>=Math.min(3,player.hp); + }, + content:function(){ + 'step 0' + player.chooseTarget('凌锋:造成一点伤害,或取消并获得一点护甲',function(card,player,target){ + return player!=target&&get.distance(player,target,'attack')<=1; + }).ai=function(target){ + if(player.hp==1) return 0; + if(player.hp==2&&target.hp>=3) return 0; + return get.damageEffect(target,player,player); + } + 'step 1' + if(result.bool){ + player.line(result.targets[0]); + result.targets[0].damage(); + } + else{ + player.changeHujia(); + } + }, + ai:{ + order:-10, + result:{ + target:2 + }, + threaten:1.5 + } + }, + hxunzhi:{ + unique:true, + enable:'phaseUse', + derivation:['wusheng','paoxiao'], + filter:function(event,player){ + return !player.storage.hxunzhi; + }, + alter:true, + init:function(player){ + player.storage.hxunzhi=false; + }, + mark:true, + intro:{ + content:'limited' + }, + skillAnimation:true, + animationColor:'fire', + content:function(){ + 'step 0' + player.awakenSkill('hxunzhi'); + player.storage.hxunzhi=true; + if(!get.is.altered('hxunzhi')){ + var targets=game.filterPlayer(function(current){ + return player.canUse('wanjian',current); + }); + targets.sort(lib.sort.seat); + player.useCard({name:'wanjian'},targets); + } + 'step 1' + player.addSkill('wusheng'); + player.addSkill('paoxiao'); + player.addSkill('hxunzhi2'); + }, + ai:{ + order:2, + result:{ + player:function(player){ + if(get.mode()=='identity'){ + if(player.identity=='zhu') return 0; + if(player.identity=='nei') return 0; + } + else if(get.mode()=='guozhan'){ + if(player.identity=='ye') return 0; + if(player.isUnseen()) return 0; + } + if(player.hp==1) return 1; + if(player.hasUnknown()) return 0; + if(!player.hasFriend()) return 0; + var enemies=player.getEnemies(); + if(enemies.length+1==game.players.length) return 0; + var num=player.hasCard(function(card){ + return card.name=='sha'||get.color(card)=='red'; + }); + if(num<2) return 0; + for(var i=0;i0&& + !enemies[i].getEquip(2)&&num>enemies[i].hp&&enemies[i].hp<=2){ + return 1; + } + } + return 0; + } + } + } + }, + hxunzhi2:{ + trigger:{player:'phaseUseEnd'}, + forced:true, + popup:false, + content:function(){ + player.removeSkill('xunzhi2'); + player.die(); + } + }, + hjifeng:{ + enable:'phaseUse', + filter:function(event,player){ + if(!player.countCards('h')) return false; + if(player.countCards('h',{type:'jiqi'})) return false; + return true; + }, + discard:false, + prepare:'throw2', + usable:1, + check:function(card){ + return 6-get.value(card); + }, + filterCard:true, + content:function(){ + var name=get.suit(cards[0]); + ui.cardPile.insertBefore(cards[0],ui.cardPile.firstChild); + switch(name){ + case 'spade':name='qinglongzhigui';break; + case 'club':name='baishouzhihu';break; + case 'diamond':name='zhuquezhizhang';break; + case 'heart':name='xuanwuzhihuang';break; + } + player.gain(get.cardPile(name)||game.createCard(name),'draw'); + }, + ai:{ + order:4, + result:{ + player:1 + } + } + }, + hjifeng_old:{ + trigger:{player:'phaseEnd'}, + filter:function(event,player){ + if(!player.countCards('he',{type:'equip'})) return false; + if(player.countCards('h',{type:'jiqi'})) return false; + if(get.cardPile(function(card){return get.type(card)=='jiqi'})) return true; + return false; + }, + direct:true, + content:function(){ + 'step 0' + player.chooseToDiscard('he','祭风:是否弃置一张装备牌并获得一张祭器牌?',{type:'equip'}).set('ai',function(card){ + return 6-get.value(card); + }).logSkill='hjifeng'; + 'step 1' + if(result.bool){ + var card=get.cardPile(function(card){ + return get.type(card)=='jiqi'&&card.name.indexOf('yuchan')!=0; + })||get.cardPile(function(card){ + return get.type(card)=='jiqi'; + }); + if(card){ + player.gain(card,'draw'); + } + } + } + }, + lmazui:{ + audio:'mazui', + enable:'phaseUse', + usable:1, + filterCard:{color:'black'}, + filterTarget:function(card,player,target){ + return !target.hasSkill('lmazui2'); + }, + check:function(card){ + return 6-get.value(card); + }, + discard:false, + prepare:'give', + content:function(){ + target.storage.lmazui2=cards[0]; + target.addSkill('lmazui2'); + game.addVideo('storage',target,['lmazui2',get.cardInfo(target.storage.lmazui2),'card']); + }, + ai:{ + expose:0.2, + result:{ + target:function(player,target){ + return -target.hp; + } + }, + order:4, + threaten:1.2 + } + }, + lmazui2:{ + trigger:{source:'damageBegin'}, + forced:true, + mark:'card', + filter:function(event){ + return event.num>0; + }, + content:function(){ + trigger.num--; + player.addSkill('lmazui3'); + player.removeSkill('lmazui2'); + }, + intro:{ + content:'card' + } + }, + lmazui3:{ + trigger:{source:['damageEnd','damageZero']}, + forced:true, + popup:false, + content:function(){ + player.gain(player.storage.lmazui2,'gain2','log'); + player.removeSkill('lmazui3'); + delete player.storage.lmazui2; + } + }, + hyunshen:{ + trigger:{player:'respond'}, + filter:function(event,player){ + return event.card.name=='shan'; + }, + frequent:true, + init:function(player){ + player.storage.hyunshen=0; + }, + content:function(){ + player.storage.hyunshen++; + player.markSkill('hyunshen'); + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(get.tag(card,'respondShan')){ + var shans=target.countCards('h','shan'); + var hs=target.countCards('h'); + if(shans>1) return [1,1]; + if(shans&&hs>2) return [1,1]; + if(shans) return [1,0.5]; + if(hs>2) return [1,0.3]; + if(hs>1) return [1,0.2]; + return [1.2,0]; + } + } + }, + threaten:0.8 + }, + intro:{ + content:'mark' + }, + group:'hyunshen2' + }, + hyunshen2:{ + trigger:{player:'phaseBegin'}, + forced:true, + filter:function(event,player){ + return player.storage.hyunshen>0; + }, + content:function(){ + player.draw(player.storage.hyunshen); + player.storage.hyunshen=0; + player.unmarkSkill('hyunshen'); + }, + mod:{ + globalTo:function(from,to,distance){ + if(typeof to.storage.hyunshen=='number') return distance+to.storage.hyunshen; + } + } + }, + hlingbo:{ + audio:['lingbo',2], + trigger:{player:'respond'}, + filter:function(event,player){ + return event.card.name=='shan'; + }, + frequent:true, + content:function(){ + player.draw(2); + }, + ai:{ + mingzhi:false, + useShan:true, + effect:{ + target:function(card,player,target){ + if(get.tag(card,'respondShan')){ + var shans=target.countCards('h','shan'); + var hs=target.countCards('h'); + if(shans>1) return [0,1]; + if(shans&&hs>2) return [0,1]; + if(shans) return [0,0]; + if(hs>2) return [0,0]; + if(hs>1) return [1,0.5]; + return [1.5,0]; + } + } + }, + threaten:0.8 + } + }, + gtiandao:{ + audio:true, + trigger:{global:'judge'}, + direct:true, + filter:function(event,player){ + return player.countCards('he')>0; + }, + content:function(){ + "step 0" + player.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+ + get.translation(trigger.player.judging[0])+','+get.prompt('gtiandao'),'he').ai=function(card){ + var trigger=_status.event.parent._trigger; + var player=_status.event.player; + var result=trigger.judge(card)-trigger.judge(trigger.player.judging[0]); + var attitude=get.attitude(player,trigger.player); + if(attitude==0||result==0) return 0; + if(attitude>0){ + return result; + } + else{ + return -result; + } + }; + "step 1" + if(result.bool){ + player.respond(result.cards,'highlight'); + } + else{ + event.finish(); + } + "step 2" + if(result.bool){ + player.logSkill('gtiandao'); + player.$gain2(trigger.player.judging[0]); + player.gain(trigger.player.judging[0]); + trigger.player.judging[0]=result.cards[0]; + trigger.position.appendChild(result.cards[0]); + game.log(trigger.player,'的判定牌改为',result.cards[0]); + } + "step 3" + game.delay(2); + }, + ai:{ + tag:{ + rejudge:1 + }, + threaten:1.5 + } + }, + jinlin:{ + enable:'phaseUse', + unique:true, + mark:true, + skillAnimation:true, + animationColor:'metal', + init:function(player){ + player.storage.jinlin=false; + }, + filter:function(event,player){ + if(player.storage.jinlin) return false; + return true; + }, + filterTarget:true, + selectTarget:[1,Infinity], + contentBefore:function(){ + player.awakenSkill('jinlin'); + player.storage.jinlin=true; + }, + content:function(){ + target.changeHujia(3); + target.addSkill('jinlin2'); + target.storage.jinlin2=3; + }, + ai:{ + order:1, + result:{ + target:function(player,target){ + if(player.hp==1) return 1; + var num=0; + var players=game.filterPlayer(); + for(var i=0;i2){ + if(players[i].hp==1) return 1; + if(players[i].hp==2) num++; + } + } + if(player.hasUnknown()) return 0; + if(num>1) return 1; + return 0; + } + }, + }, + intro:{ + content:'limited' + } + }, + jinlin2:{ + trigger:{player:'phaseBegin'}, + forced:true, + popup:false, + content:function(){ + if(player.hujia>0){ + player.changeHujia(-1); + } + player.storage.jinlin2--; + if(player.hujia==0||player.storage.jinlin2==0){ + player.removeSkill('jinlin2'); + delete player.storage.jinlin2; + } + }, + }, + lingyue:{ + trigger:{player:'shaBegin'}, + check:function(event,player){ + return get.attitude(player,event.target)<0; + }, + logTarget:'target', + filter:function(event,player){ + return event.target.countCards('he')>0; + }, + content:function(){ + trigger.target.chooseToDiscard('he',true); + } + }, + fengze:{ + enable:'phaseUse', + filterCard:{color:'black'}, + selectCard:1, + position:'he', + usable:1, + viewAs:{name:'taoyuan'}, + filter:function(event,player){ + return player.countCards('he',{color:'black'})>0; + }, + audio:true, + prompt:'将一张黑色牌当作桃园结义使用', + check:function(card){ + return 7-get.useful(card) + }, + ai:{ + threaten:1.5 + } + }, + zaowu:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.countCards('h',{suit:['spade','heart']})>0; + }, + filterCard:{suit:['spade','heart']}, + viewAs:{name:'fengyinzhidan'}, + check:function(card){ + return 7-get.value(card); + }, + ai:{ + order:8.5, + } + }, + huanxia:{ + enable:'chooseToUse', + filterCard:function(card){ + return get.color(card)=='red'; + }, + position:'he', + viewAs:{name:'sha'}, + viewAsFilter:function(player){ + if(!player.countCards('he',{color:'red'})) return false; + }, + prompt:'将一张红色牌当杀使用', + check:function(card){return 5-get.value(card)}, + ai:{ + order:function(){ + return get.order({name:'sha'})+0.1; + }, + respondSha:true, + skillTagFilter:function(player,tag,arg){ + if(arg!='use') return false; + if(!player.countCards('he',{color:'red'})) return false; + }, + }, + group:['huanxia_expire','huanxia_draw','huanxia_gain'], + subSkill:{ + expire:{ + trigger:{source:'damageAfter'}, + forced:true, + popup:false, + filter:function(event){ + return event.parent.skill=='huanxia'; + }, + content:function(){ + player.storage.huanxia=true; + } + }, + draw:{ + trigger:{player:'shaAfter'}, + forced:true, + popup:false, + content:function(){ + if(trigger.parent.skill=='huanxia'){ + var card=trigger.cards[0]; + if(get.itemtype(card)=='card'&&get.position(card)=='d'&&!player.storage.huanxia){ + ui.special.appendChild(card); + if(!player.storage.huanxia_draw){ + player.storage.huanxia_draw=[]; + } + player.storage.huanxia_draw.push(card); + } + } + delete player.storage.huanxia; + } + }, + gain:{ + trigger:{player:'phaseEnd'}, + forced:true, + filter:function(event,player){ + return player.storage.huanxia_draw; + }, + content:function(){ + player.gain(player.storage.huanxia_draw,'gain2'); + delete player.storage.huanxia_draw; + } + } + } + }, + kongmo:{ + trigger:{player:'useCardAfter'}, + forced:true, + filter:function(event,player){ + if(event.parent.name=='kongmo') return false; + if(!event.targets||!event.card) return false; + var type=get.type(event.card); + if(type!='basic'&&type!='trick') return false; + var card=game.createCard(event.card.name,event.card.suit,event.card.number); + for(var i=0;i=0) return 0; + if(get.population('fan')<3) return 0; + return -1; + } + case 'zhong':{ + if(get.population('fan')<3) return 0; + return -1; + } + case 'nei':return 0; + case 'fan':{ + if(get.population('fan')==0) return 0; + if(get.population('zhong')<2) return 0; + return -1; + } + } + break; + } + case 'guozhan':{ + if(player.identity=='unknown') return 0; + return get.population(player.identity)>=3?-1:0; + } + default:{ + return -1; + } + } + }, + } + } + }, + bingfeng2:{ + mod:{ + cardEnabled:function(){ + return false; + }, + cardUsable:function(){ + return false; + }, + cardRespondable:function(){ + return false; + }, + cardSavable:function(){ + return false; + } + }, + trigger:{player:'turnOverAfter'}, + forced:true, + filter:function(event,player){ + return !player.isTurnedOver(); + }, + content:function(){ + player.removeSkill('bingfeng2'); + } + }, + yudun:{ + mod:{ + cardEnabled:function(card,player){ + if(get.type(card,'trick')=='trick') return false; + }, + cardRespondable:function(card,player){ + if(get.type(card,'trick')=='trick') return false; + }, + cardSavable:function(card,player){ + if(get.type(card,'trick')=='trick') return false; + }, + }, + enable:'chooseToUse', + filterCard:function(card){ + return get.type(card,'trick')=='trick'; + }, + selectCard:2, + viewAs:{name:'sha'}, + viewAsFilter:function(player){ + if(player.countCards('h',{type:['trick','delay']})<2) return false; + }, + check:function(){return 1}, + ai:{ + skillTagFilter:function(player,tag,arg){ + if(arg!='use') return false; + if(player.countCards('h',{type:['trick','delay']})<2) return false; + }, + respondSha:true, + order:function(){ + return get.order({name:'sha'})+0.1; + }, + useful:-1, + value:-1 + }, + group:'yudun_count', + subSkill:{ + count:{ + trigger:{player:'useCard'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.skill=='yudun'&&_status.currentPhase==player; + }, + content:function(){ + player.getStat().card.sha--; + } + } + } + }, + guozao:{ + trigger:{global:'damageEnd'}, + forced:true, + logv:false, + alter:true, + check:function(event,player){ + return game.hasPlayer(function(current){ + return get.attitude(player,current)>2&¤t.countCards('h')==1 + }); + }, + filter:function(event,player){ + if(event.source==player) return false; + if(get.distance(player,event.player)>1) return false; + return game.hasPlayer(function(current){ + return current.countCards('h'); + }); + }, + content:function(){ + "step 0" + var cards=[]; + if(ui.cardPile.childNodes.length<3){ + var discardcards=get.cards(3); + for(var i=0;i0&&get.distance(player,target)<=dist; + }).ai=function(target){ + var att=get.attitude(player,target); + var hs=target.getCards('h'); + var num=hs.length; + if(num<=1) return att*2; + if(num==2){ + for(var i=0;i6) return att; + } + if(target==player){ + for(var i=0;i<2;i++){ + if(get.value(cards[i],target,'raw')>6) return -1; + } + } + return att/2; + } + if(num==3){ + if(target==player){ + var num2=0; + for(var i=0;i<3;i++){ + num2+=get.value(cards[i],player,'raw'); + num2-=get.value(hs[i],player,'raw'); + } + if(num2>0) return 0.5; + if(num2<0) return -0.5; + } + return 0; + } + return -att/2; + }; + "step 1" + if(result.bool&&result.targets[0]){ + var target=result.targets[0]; + player.line(target,'green'); + // player.logSkill('guozao',target,'green',true); + var cards=target.getCards('h'); + target.lose(cards)._triggered=null; + game.log(target,'弃置了',cards,',并获得三张牌'); + // target.$draw(3); + target.$throw(cards); + target.gain(event.cards,'draw')._triggered=null; + } + else{ + event.finish(); + } + }, + ai:{ + expose:0.1 + } + }, + heihuo:{ + enable:'phaseUse', + filter:function(event,player){ + return player.countCards('h')>0&&player.countCards('he',{type:'equip'})>0&&!player.hasSkill('heihuo2'); + }, + filterCard:function(card){ + return get.type(card)=='equip'; + }, + position:'he', + check:function(card){ + var player=_status.currentPhase; + var nh=player.countCards('h'); + var pos=get.position(card); + if(nh<2) return 0; + if(nh>4) return 0; + if(nh==4&&pos=='e') return 0; + if(player.countCards('he',{subtype:get.subtype(card)})>1){ + return 11-get.equipValue(card)+(pos=='e'?0.4:0); + } + return 5.5-get.value(card)+(pos=='e'?0.4:0); + }, + content:function(){ + "step 0" + player.draw(player.countCards('h')); + "step 1" + if(player.countCards('h')>=8){ + player.damage(3,'fire'); + player.addTempSkill('heihuo2'); + } + }, + ai:{ + order:10, + threaten:1.4, + result:{ + player:1 + } + } + }, + heihuo2:{}, + yaotong:{ + alter:true, + group:['yaotong1','yaotong2','yaotong3'], + ai:{ + respondSha:true, + respondShan:true, + skillTagFilter:function(player,tag){ + if(tag=='respondShan'&&get.is.altered('yaotong')) return false; + if(player.countCards('h')%2==0) return false; + }, + }, + threaten:1.3 + }, + yaotong1:{ + enable:['chooseToRespond','chooseToUse'], + filterCard:true, + viewAs:{name:'sha'}, + filter:function(event,player){ + var num=player.countCards('h'); + if(num==0) return false; + return num%2==1; + }, + prompt:'将一张手牌当作杀打出', + check:function(card){return 6-get.value(card)} + }, + yaotong2:{ + enable:['chooseToRespond','chooseToUse'], + filterCard:true, + viewAs:{name:'shan'}, + filter:function(event,player){ + if(get.is.altered('yaotong')) return false; + var num=player.countCards('h'); + if(num==0) return false; + return num%2==1; + }, + prompt:'将一张手牌当作闪打出', + check:function(card){return 6-get.value(card)} + }, + yaotong3:{ + enable:'chooseToUse', + filterCard:true, + viewAs:{name:'wuxie'}, + filter:function(event,player){ + var num=player.countCards('h'); + if(num==0) return false; + return num%2==0; + }, + viewAsFilter:function(player){ + var num=player.countCards('h'); + if(num==0) return false; + return num%2==0; + }, + prompt:'将一张手牌当作无懈可击使用', + check:function(card){return 7-get.value(card)}, + }, + yaotong4:{ + enable:'chooseToUse', + filterCard:true, + viewAs:{name:'tao'}, + filter:function(event,player){ + var num=player.countCards('h'); + if(num==0) return false; + return num%2==0; + }, + viewAsFilter:function(player){ + var num=player.countCards('h'); + if(num==0) return false; + return num%2==0; + }, + prompt:'将一张手牌当作桃使用', + check:function(card){return 9-get.value(card)}, + }, + pojian:{ + trigger:{player:'loseEnd'}, + filter:function(event,player){ + if(player.countCards('h')) return false; + for(var i=0;i0; + }, + filterCard:true, + position:'he', + content:function(){ + player.addSkill('huajin2'); + }, + check:function(card){ + return 5-get.value(card); + }, + ai:{ + order:10, + result:{ + player:function(player){ + if(player.countCards('h','juedou')) return 1; + if(player.countCards('h','sha')==0) return 0; + var players=game.filterPlayer(); + for(var i=0;i0){ + return 1; + } + } + return 0; + } + } + } + }, + huajin2:{ + trigger:{source:'damageBegin'}, + forced:true, + content:function(){ + trigger.num++; + }, + group:'huajin3' + }, + huajin3:{ + trigger:{player:'phaseBegin'}, + forced:true, + popup:false, + content:function(){ + player.removeSkill('huajin2'); + } + }, + yuchen:{ + trigger:{player:['useCard','respondAfter']}, + direct:true, + filter:function(event,player){ + if(player==_status.currentPhase) return false; + if(event.cards){ + for(var i=0;i0; + }).set('autodelay',trigger.name=='respond'?0.5:1).ai=function(target){ + return -get.attitude(player,target); + }; + "step 1" + if(result.bool){ + player.logSkill('yuchen',result.targets); + player.discardPlayerCard(result.targets[0],true); + } + }, + ai:{ + threaten:0.7 + } + }, + bingjian:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.countCards('he',{color:'black',name:'sha'})>0; + }, + filterCard:function(card){ + return card.name=='sha'&&get.color(card)=='black'; + }, + filterTarget:function(card,player,target){ + return player!=target&&target.countCards('h')>0; + }, + line:'thunder', + content:function(){ + "step 0" + target.showHandcards(); + "step 1" + var cards=target.getCards('h','shan'); + if(cards.length){ + target.discard(cards); + } + else{ + target.damage('thunder'); + } + }, + ai:{ + order:5, + result:{ + target:function(player,target){ + return get.damageEffect(target,player,target,'thunder'); + } + }, + expose:0.2 + } + }, + rumeng:{ + trigger:{global:'phaseUseBefore'}, + direct:true, + filter:function(event,player){ + return event.player!=player&&player.countCards('he',{type:'basic'})2; + var next=player.chooseToDiscard(function(card){ + return get.type(card)!='basic'; + },get.prompt('rumeng',trigger.player),'he'); + next.logSkill=['rumeng',trigger.player]; + next.ai=function(card){ + if(yep){ + return 6-get.value(card); + } + return 0; + } + "step 1" + if(result.bool){ + trigger.player.chooseToDiscard({type:'basic'},'入梦:弃置一张基本牌或跳过出牌及弃牌阶段').ai=function(card){ + return 5-get.value(card); + } + } + else{ + event.finish(); + } + "step 2" + if(!result.bool){ + trigger.cancel(); + trigger.player.skip('phaseDiscard'); + } + }, + ai:{ + expose:0.1 + } + }, + lianda:{ + trigger:{player:'shaAfter'}, + direct:true, + filter:function(event,player){ + return event.target.isAlive()&&player.countCards('he')>0&&!player.hasSkill('lianda2'); + }, + content:function(){ + "step 0" + var next=player.chooseToDiscard('he',get.prompt('lianda')); + next.ai=function(card){ + if(get.effect(trigger.target,{name:'sha'},player,player)>0){ + return 7-get.value(card); + } + return 0; + } + next.logSkill='lianda'; + "step 1" + if(result.bool){ + player.addTempSkill('lianda2'); + player.useCard({name:'sha'},trigger.target); + } + } + }, + lianda2:{}, + huiqi:{ + trigger:{player:'damageEnd'}, + direct:true, + filter:function(event,player){ + return player.hp3){ + return att+Math.max(0,5-target.countCards('h')); + } + return att/4; + } + if(att>3){ + return att+Math.max(0,5-target.countCards('h')); + } + return att; + } + "step 1" + if(result.bool){ + player.logSkill('huiqi',result.targets); + result.targets[0].draw(player.maxHp-player.hp); + } + }, + ai:{ + expose:0.2, + effect:{ + target:function(card,player,target){ + if(get.tag(card,'damage')){ + return [1,0.5]; + } + } + } + } + }, + xianghui:{ + enable:'phaseUse', + usable:1, + filterCard:{color:'red'}, + filter:function(){ + var players=game.filterPlayer(); + var min=players[0].hp; + for(var i=0;i2){ + if(player.countCards('h','shan')||player.getEquip(2)|| + trigger.target.hp==1||player.hp>trigger.target.hp+1){ + if(!trigger.target.countCards('h','shan')||trigger.target.countCards('h')3){ + return 100-target.countCards('h'); + } + return att; + } + "step 1" + if(result.bool){ + player.logSkill('fzhenwei',result.targets); + result.targets[0].gain(event.cards,'gain2','log'); + } + }, + ai:{ + expose:0.1, + threaten:1.6 + } + }, + shangxi:{ + trigger:{player:'phaseUseBegin'}, + direct:true, + filter:function(event,player){ + if(player.countCards('he')==0) return false; + return game.hasPlayer(function(current){ + return (current!=player&&get.distance(player,current,'attack')<=1&&player.hp<=current.hp); + }); + }, + content:function(){ + "step 0" + var next=player.chooseCardTarget({ + position:'he', + filterTarget:function(card,player,target){ + return get.distance(player,target,'attack')<=1&& + player!=target&&player.hp<=target.hp; + }, + filterCard:lib.filter.cardDiscardable, + ai1:function(card){ + return 9-get.value(card); + }, + ai2:function(target){ + return get.damageEffect(target,player,player); + }, + prompt:get.prompt('shangxi') + }); + "step 1" + if(result.bool){ + player.discard(result.cards); + player.logSkill('shangxi',result.targets); + result.targets[0].damage(); + } + }, + ai:{ + expose:0.3 + } + }, + fuyan:{ + trigger:{player:'damageEnd'}, + direct:true, + filter:function(event){ + return event.num>0; + }, + content:function(){ + "step 0" + player.chooseTarget(get.prompt('fuyan'),function(card,player,target){ + return !target.hujia; + }).ai=function(target){ + if(get.attitude(player,target)<=0) return 0; + var eff=-get.damageEffect(target,target,player)+(player==target?2:0); + if(target.hp==1) eff+=2; + return Math.min(1,eff); + }; + "step 1" + if(result.bool){ + player.logSkill('fuyan',result.targets); + var target=result.targets[0]; + target.changeHujia(); + } + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(get.tag(card,'damage')){ + if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; + return 0.7; + } + } + }, + expose:0.2 + } + }, + fuyan2:{ + trigger:{player:'damageBegin'}, + filter:function(event,player){ + return event.num>0; + }, + forced:true, + mark:'card', + content:function(){ + trigger.num--; + player.removeSkill('fuyan2'); + player.storage.fuyan2.discard(); + delete player.storage.fuyan2; + }, + intro:{ + content:'card' + } + }, + pingshen:{ + trigger:{source:'damageBegin'}, + unique:true, + silent:true, + content:function(){ + trigger.player.addSkill('pingshen2'); + trigger.player.storage.pingshen=player; + } + }, + pingshen2:{ + enable:'phaseUse', + unique:true, + mark:true, + init:function(player){ + player.storage.pingshen2=false; + }, + filter:function(event,player){ + return !player.storage.pingshen2&&player.storage.pingshen.isAlive(); + }, + filterCard:true, + filterTarget:function(card,player,target){ + return target==player.storage.pingshen; + }, + selectTarget:-1, + position:'he', + content:function(){ + player.storage.pingshen2=true; + player.unmarkSkill('pingshen2'); + player.gain(target.getCards('h'),target); + target.$give(target.countCards('h'),player); + player.turnOver(); + player.addSkill('pingshen3'); + }, + check:function(card){return 8-get.value(card);}, + intro:{ + content:'limited' + }, + ai:{ + order:10, + result:{ + player:function(player){ + if(player.classList.contains('turnedover')) return 10; + if(get.attitude(player,player.storage.pingshen)>=0){ + return 0; + } + if(player.storage.pingshen.countCards('h')>player.storage.pingshen.hp) return 1; + return 0; + } + }, + effect:{ + target:function(card,player,target){ + if(!target.storage.pingshen2){ + if(card.name=='guiyoujie') return [0,1]; + } + } + } + }, + }, + pingshen3:{ + trigger:{player:'phaseUseEnd'}, + forced:true, + popup:false, + content:function(){ + "step 0" + player.removeSkill('pingshen3'); + if(player.storage.pingshen.classList.contains('dead')){ + event.finish(); + } + else{ + player.chooseCard('he',true,player.storage.pingshen.hp); + } + "step 1" + player.storage.pingshen.gain(result.cards,player); + player.$give(result.cards.length,player.storage.pingshen); + } + }, + guaili:{ + trigger:{source:'damageBegin'}, + filter:function(event){ + return event.card&&event.card.name=='sha'&&event.parent.name!='_lianhuan'&&event.parent.name!='_lianhuan2'; + }, + forced:true, + content:function(){ + trigger.num++; + player.addSkill('guaili2'); + } + }, + guaili2:{ + trigger:{source:'damageEnd'}, + forced:true, + popup:false, + content:function(){ + player.removeSkill('guaili2'); + player.chooseToDiscard(2,true); + } + }, + xingzhui:{ + enable:'phaseUse', + usable:1, + filterCard:true, + position:'he', + filterTarget:function(card,player,target){ + return player!=target&&target.countCards('he')>0; + }, + check:function(card){ + if(get.type(card)=='equip'){ + var distance=get.info(card).distance; + if(distance){ + if(distance.attackFrom<0||distance.globalFrom<0) return 10; + } + } + return 7-get.value(card); + }, + content:function(){ + "step 0" + event.type=get.type(cards[0],'trick'); + var dme=get.damageEffect(target,player,target); + target.chooseToDiscard('he',function(card){ + return get.type(card,'trick')==event.type; + },'弃置一张牌'+get.translation(event.type)+'牌,或受到1点伤害').ai=function(card){ + if(dme<0){ + return 8-get.value(card); + } + return 0; + } + "step 1" + if(!result.bool){ + target.damage(); + } + }, + ai:{ + order:9, + result:{ + target:function(player,target){ + return get.damageEffect(target,player); + } + }, + threaten:2, + expose:0.2 + } + }, + lingxian:{ + trigger:{player:['respond','useCard']}, + direct:true, + filter:function(event,player){ + if(player==_status.currentPhase) return false; + if(get.itemtype(event.cards)!='cards') return false; + return game.hasPlayer(function(current){ + return get.distance(player,current,'attack')>1&&player!=current; + }); + }, + content:function(){ + "step 0" + player.chooseTarget(get.prompt('lingxian'),function(card,player,target){ + return get.distance(player,target,'attack')>1&&player!=target; + }).ai=function(target){ + var att=get.attitude(player,target); + if(att<=-0.5) return 0; + if(att<=3) return att+0.5; + return att+Math.min(0.5,5-target.countCards('h')); + } + "step 1" + if(result.bool){ + game.asyncDraw([player,result.targets[0]]); + player.logSkill('lingxian',result.targets); + } + }, + ai:{ + mingzhi:false, + effect:{ + target:function(card,player,target){ + if(player==_status.currentPhase) return; + if(!game.hasPlayer(function(current){ + return get.distance(player,current,'attack')>1&&player!=current&&get.attitude(player,current)>=0; + })){ + return; + } + if(get.type(card)=='equip'&&player==target){ + var distance=get.info(card).distance; + if(distance){ + if(distance.attackFrom<0||distance.globalFrom<0) return 0; + } + } + else{ + if(!target.hasFriend()) return; + var hs=target.countCards('h'); + if(get.tag(card,'respondShan')){ + var shans=target.countCards('h','shan'); + if(shans>1) return [0,1]; + if(shans&&hs>2) return [0,1]; + if(shans) return [0,0]; + if(hs>2) return [0,0]; + if(hs>1) return [1,0.5]; + return [1.5,0]; + } + if(get.tag(card,'respondSha')){ + var shas=target.countCards('h','sha'); + if(shas>1) return [0,1]; + if(shas&&hs>2) return [0,1]; + if(shas) return [0,0]; + if(hs>2) return [0,0]; + if(hs>1) return [1,0.5]; + return [1.5,0]; + } + } + } + }, + threaten:0.8, + expose:0.1 + } + }, + shouyin:{ + skillAnimation:'epic', + animationColor:'water', + unique:true, + enable:'chooseToUse', + init:function(player){ + player.storage.shouyin=false; + }, + mark:true, + filter:function(event,player){ + if(event.type!='dying') return false; + if(player.storage.shouyin) return false; + if(player.isTurnedOver()) return false; + return true; + }, + content:function(){ + "step 0" + player.awakenSkill('shouyin'); + player.storage.shouyin=true; + player.turnOver(); + "step 1" + event.targets=game.filterPlayer(); + event.targets.sort(lib.sort.seat); + "step 2" + if(event.targets.length){ + var target=event.targets.shift(); + if(target.hp=target.hp){ + return true; + } + } + }, + }, + linyun:{ + enable:'chooseToUse', + filterCard:true, + selectCard:2, + position:'he', + viewAs:{name:'sha'}, + prompt:'将两张牌当杀使用', + check:function(card){ + if(_status.event.player.countCards('h')<4) return 6-get.useful(card); + return 7-get.useful(card); + }, + ai:{ + order:function(){ + return get.order({name:'sha'})+0.1; + } + }, + group:['linyun2'] + }, + linyun2:{ + trigger:{player:'shaBegin'}, + filter:function(event){ + return event.skill=='linyun' + }, + forced:true, + popup:false, + content:function(){ + "step 0" + var next=trigger.target.chooseToRespond({name:'shan'}); + next.autochoose=lib.filter.autoRespondShan; + next.ai=function(card){ + if(trigger.target.countCards('h','shan')>1){ + return get.unuseful2(card); + } + return -1; + }; + "step 1" + if(result.bool==false){ + trigger.untrigger(); + trigger.directHit=true; + } + }, + ai:{ + threaten:1.3 + } + }, + linyun3:{ + trigger:{source:'damageAfter'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.parent.skill=='linyun'&&!player.hasSkill('linyun4'); + }, + content:function(){ + player.draw(); + player.addTempSkill('linyun4','shaAfter') + } + }, + linyun4:[], + bofeng:{ + mod:{ + targetInRange:function(card,player,target){ + if(card.name=='sha'&&player.hp>=target.hp){ + return true; + } + } + }, + trigger:{player:'shaBegin'}, + check:function(event,player){ + return get.attitude(player,event.target)<0; + }, + content:function(){ + "step 0" + trigger.target.chooseToRespond({name:'shan'}); + "step 1" + if(result.bool==false){ + trigger.untrigger(); + trigger.directHit=true; + player.addTempSkill('bofeng2','shaEnd'); + } + }, + ai:{ + threaten:1.3 + } + }, + bofeng2:{ + trigger:{source:'damageBegin'}, + filter:function(event){ + return (event.card&&(event.card.name=='sha')&&event.parent.name!='_lianhuan'&&event.parent.name!='_lianhuan2'); + }, + forced:true, + popup:false, + content:function(){ + trigger.num++; + }, + }, + hutian:{ + trigger:{player:'phaseEnd'}, + direct:true, + filter:function(event,player){ + return player.countCards('h')>0&&!player.storage.hutian; + }, + content:function(){ + "step 0" + var next=player.chooseCardTarget({ + filterTarget:function(card,player,target){ + return target.maxHp>=ui.selected.cards.length; + }, + filterCard:true, + selectCard:[1,player.countCards('he')], + ai1:function(card){ + var useful=get.useful(card); + if(card.name=='du'){ + useful=-5; + } + if(ui.selected.cards.length==0&&player.hp==1) return 11-useful; + if(ui.selected.cards.length>1) return 0; + return 7-useful; + }, + ai2:function(target){ + if(target.hp>ui.selected.cards.length){ + return 0; + } + return get.attitude(player,target); + }, + position:'he', + prompt:get.prompt('hutian') + }); + "step 1" + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.$give(result.cards,target); + player.lose(result.cards,ui.special); + player.storage.hutian=target; + player.logSkill('hutian',result.targets); + player.addTempSkill('hutian4'); + target.addSkill('hutian2'); + target.storage.hutian2=result.cards; + game.addVideo('storage',target,['hutian2',get.cardsInfo(result.cards),'cards']); + } + else{ + event.finish(); + } + "step 2" + var target=event.target; + if(target.storage.hutian2&&target.hp0; + }, + filter:function(event,player){ + return event.source&&event.card&&event.card.name=='sha'&&event.source!=player; + }, + logTarget:'source', + content:function(){ + trigger.source.draw(); + }, + ai:{ + expose:0.1, + threaten:1.2 + } + }, + huanxing:{ + trigger:{player:'phaseBegin'}, + group:'huanxing2', + direct:true, + content:function(){ + "step 0" + if(player.countCards('he')){ + player.chooseCardTarget({ + prompt:get.prompt('huanxing'), + filterCard:lib.filter.cardDiscardable, + position:'he', + filterTarget:function(card,player,target){ + if(target==player) return false; + if(target.sex!='male') return false; + var name=target.name.indexOf('unknown')==0?target.name2:target.name; + if(name==player.storage.huanxing) return false; + + var info=lib.character[name]; + if(info){ + var skills=info[3]; + for(var j=0;j0) return 0; + return 7-get.value(card); + }, + ai2:function(target){ + if(target.isMin()) return 0; + return 6-target.maxHp; + } + }); + } + else{ + event.finish(); + } + "step 1" + if(result.bool){ + player.unmark(player.storage.huanxing+'_charactermark'); + player.discard(result.cards); + player.logSkill('huanxing',result.targets); + var name=result.targets[0].name; + if(name.indexOf('unknown')==0){ + name=result.targets[0].name2; + } + var list=[]; + var skills=lib.character[name][3]; + for(var j=0;j0; + }, + content:function(){ + player.unmark(player.storage.huanxing+'_charactermark'); + player.removeAdditionalSkill('huanxing'); + delete player.storage.huanxing; + player.checkMarks(); + } + }, + guiying:{ + enable:'chooseToUse', + filterCard:{color:'black'}, + position:'he', + viewAs:{name:'toulianghuanzhu'}, + prompt:'将一张黑色牌当作偷梁换柱使用', + check:function(card){ + if(_status.event.player.countCards('h')>_status.event.player.hp){ + return 5-get.value(card) + } + return 0; + }, + }, + suiyan:{ + trigger:{source:'damageEnd'}, + direct:true, + filter:function(event,player){ + if(event._notrigger.contains(event.player)) return false; + return event.player.countCards('e'); + }, + content:function(){ + "step 0" + var att=get.attitude(player,trigger.player); + var next=player.chooseToDiscard('he',get.prompt('suiyan')); + next.ai=function(card){ + if(att<0) return 7-get.value(card); + return -1; + } + next.logSkill=['suiyan',trigger.player]; + "step 1" + if(result.bool){ + trigger.player.discard(trigger.player.getCards('e')); + } + }, + ai:{ + expose:0.3 + }, + }, + ningxian:{ + trigger:{player:'damageEnd'}, + direct:true, + filter:function(event,player){ + return player.countCards('he',{color:'black'})>0; + }, + content:function(){ + "step 0" + var enemy=game.countPlayer(function(current){ + return current!=player&&get.damageEffect(current,player,player)>0; + }); + var next=player.chooseCardTarget({ + position:'he', + filterTarget:function(card,player,target){ + return player!=target; + }, + selectCard:[1,player.countCards('he',{color:'black'})], + selectTarget:function(){ + if(ui.selected.targets.length>ui.selected.cards.length){ + game.uncheck('target'); + } + return ui.selected.cards.length; + }, + filterCard:function(card,player){ + return get.color(card)=='black'&&lib.filter.cardDiscardable(card,player); + }, + ai1:function(card){ + if(ui.selected.cards.length>=enemy) return 0; + return 9-get.value(card); + }, + ai2:function(target){ + return get.damageEffect(target,player,player); + }, + prompt:get.prompt('ningxian') + }); + "step 1" + if(result.bool){ + player.discard(result.cards); + player.logSkill('ningxian',result.targets); + event.targets=result.targets; + event.targets.sort(lib.sort.seat); + } + else{ + event.finish(); + } + "step 2" + if(event.targets.length){ + event.targets.shift().damage(); + event.redo(); + } + }, + ai:{ + maixie:true, + maixie_hp:true, + effect:function(card,player,target){ + if(get.tag(card,'damage')){ + if(player.hasSkillTag('jueqing',false,target)) return [1,-0.5]; + if(!target.hasFriend()){ + if(get.mode()=='guozhan'){ + if(!player.hasFriend()) return; + } + else{ + return; + } + } + if(target.countCards('h')>2||target.countCards('e',{color:'black'})){ + return [1,0,0,-1]; + } + return [1,-0.5]; + } + }, + } + }, + xuanyuan:{ + trigger:{player:'phaseBegin'}, + unique:true, + forceunique:true, + filter:function(event,player){ + for(var i=0;i=4) return [1,1.5]; + if(target.hp==3) return [1,1]; + if(target.hp==2) return [1,0.5]; + } + } + } + } + }, + pozhou2:{ + enable:'phaseUse', + filter:function(event,player){ + return player.storage.pozhou>0; + }, + filterTarget:function(card,player,target){ + return target!=player&&!target.hasSkill('fengyin'); + }, + selectTarget:function(){ + return [1,_status.event.player.storage.pozhou]; + }, + prompt:'出牌阶段,你可以指定任意名其他角色并弃置等量的破咒标记,令目标的非锁定技失效直到其下一回合结束', + content:function(){ + player.storage.pozhou--; + if(!player.storage.pozhou){ + player.unmarkSkill('pozhou'); + } + else{ + player.updateMarks(); + } + target.addTempSkill('fengyin',{player:'phaseAfter'}); + }, + ai:{ + order:11, + result:{ + target:function(player,target){ + var skills=target.getSkills(); + for(var i=0;i0&&player!=event.player; + }, + prompt:function(event,player){ + return '是否弃置一枚破咒标记令'+get.translation(event.player)+ + '的非锁定技失效?(剩余'+player.storage.pozhou+'枚)'; + }, + logTarget:'player', + content:function(){ + player.storage.pozhou--; + if(!player.storage.pozhou){ + player.unmarkSkill('pozhou'); + } + else{ + player.updateMarks(); + } + trigger.player.addTempSkill('fengyin',{player:'phaseBegin'}); + } + }, + fengmo:{ + enable:'phaseUse', + usable:1, + filter:function(){ + return game.countPlayer(function(current){ + return current.getEquip(1); + })>=1; + }, + filterTarget:function(card,player,target){ + return player!=target&&!target.isTurnedOver(); + }, + content:function(){ + "step 0" + event.targets=[]; + event.num=0; + var players=game.filterPlayer(); + for(var i=0;i1){ + return 12-get.equipValue(card); + } + return 8-get.equipValue(card); + }, + filter:function(event,player){ + return player.countCards('he',{type:'equip'}); + }, + filterTarget:function(card,player,target){ + return player!=target; + }, + content:function(){ + target.damage(); + }, + ai:{ + order:9.5, + expose:0.2, + result:{ + player:function(player,target){ + return get.damageEffect(target,player,player); + } + } + } + }, + tuzhen:{ + trigger:{source:'damageAfter'}, + filter:function(event,player){ + return event.player.isIn()&&event.player!=player&&event.player.hasCard(function(card){ + return get.type(card)!='basic'; + }); + }, + alter:true, + logTarget:'player', + check:function(event,player){ + return get.attitude(player,event.player)<0; + }, + content:function(){ + var hs=trigger.player.getCards('h',function(card){ + return get.type(card)!='basic'; + }); + if(get.is.altered('tuzhen')){ + hs=hs.randomGet(); + } + trigger.player.discard(hs); + } + }, + mojian:{ + trigger:{player:'shaBegin'}, + check:function(event,player){ + if(get.attitude(player,event.target)>0) return true; + return player.hp0){ + player.stat[player.stat.length-1].card.sha--; + } + }, + group:'poyue2' + }, + poyue2:{ + trigger:{player:'shaBegin'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.card&&get.color(event.card)=='red'; + }, + content:function(){ + trigger.directHit=true; + } + }, + jianji:{ + enable:'phaseUse', + filter:function(event,player){ + return player.countCards('he',{type:'equip'})>0&&lib.filter.cardEnabled({name:'sha'},player); + }, + usable:1, + filterCard:{type:'equip'}, + position:'he', + check:function(card){ + var player=_status.currentPhase; + if(player.countCards('he',{subtype:get.subtype(card)})>1){ + return 11-get.equipValue(card); + } + return 6-get.equipValue(card); + }, + discard:false, + prepare:'throw', + delay:false, + filterTarget:function(card,player,target){ + return lib.filter.targetEnabled({name:'sha'},player,target); + }, + content:function(){ + "step 0" + player.addAdditionalSkill('jianji','unequip'); + player.draw(); + player.useCard({name:'sha'},cards,targets,false).animate=false; + player.line(targets,'fire'); + "step 1" + player.removeAdditionalSkill('jianji'); + }, + ai:{ + order:function(){ + return get.order({name:'sha'})+0.1; + }, + result:{ + target:function(player,target){ + player.addAdditionalSkill('jianji_ai','unequip'); + var eff=get.effect(target,{name:'sha'},player,target); + player.removeAdditionalSkill('jianji_ai'); + return eff; + } + }, + effect:{ + player:function(card,player){ + if(_status.currentPhase!=player) return; + if(get.type(card)=='equip'&& + player.countCards('e',{subtype:get.subtype(card)})&& + lib.filter.filterCard({name:'sha'},player)){ + return 0; + } + } + }, + threaten:1.3 + } + }, + huangyu:{ + enable:'phaseUse', + filter:function(event,player){ + if(!lib.card.chiyuxi) return false; + return !player.getStat('skill').huangyu&&player.countCards('he',{color:'red'})>1; + }, + filterCard:{color:'red'}, + selectCard:2, + position:'he', + viewAs:{name:'chiyuxi',nature:'fire'}, + check:function(card){ + var player=_status.event.player; + if(player.hasSkill('jianji')&&get.type(card)=='equip'&& + lib.filter.filterCard({name:'sha'},player)){ + return 0; + } + return 6-get.value(card) + }, + ai:{ + order:8, + expose:0.2, + threaten:1.2 + } + }, + gongshen:{ + trigger:{global:'useCard'}, + priority:15, + filter:function(event,player){ + var type=get.type(event.card,'trick'); + if(type!='basic'&&type!='trick') return false; + return event.player!=player&&player.countCards('he',{type:'equip'})>0&& + event.targets&&event.targets.length>0; + }, + direct:true, + content:function(){ + "step 0" + var effect=0; + for(var i=0;i=7&&get.type(trigger.card)=='trick') return val; + if(nme=='tao') return val; + if(nme=='wuzhong') return val; + if(nme=='zengbin') return val; + if(nme=='wangmeizhike') return val; + if(nme=='shunshou'&&player==trigger.targets[0]) return val; + if(nme=='guohe'&&player==trigger.targets[0]) return val; + if(nme=='liuxinghuoyu') return val; + if(nme=='nanman') return val; + if(nme=='wanjian') return val; + if(nme=='jingleishan') return val; + if(nme=='chiyuxi') return val; + if((nme=='juedou')&&(player==trigger.targets[0]||trigger.targets[0].hp==1)) return val; + if(nme=='chenhuodajie') return val; + if(nme=='lebu'&&trigger.targets[0].countCards('h')>trigger.targets[0].hp) return val; + if(nme=='sha'&&trigger.targets[0].hp==1&&!trigger.targets[0].hasShan()) return val; + if(nme=='jiedao'&&trigger.targets[0]==player) return val; + if(nme=='yihuajiemu'&&trigger.targets[0]==player) return val; + if(nme=='shuiyanqijun'&&trigger.targets.contains(player)) return val; + return 0; + } + return -1; + } + "step 1" + if(result.bool){ + // game.delay(2); + trigger.cancel(); + } + }, + ai:{ + effect:{ + player:function(card,player,target){ + if(player!=target) return; + if(get.type(card)=='equip'&&!player.needsToDiscard()){ + return [0,0,0,0]; + } + } + }, + threaten:2, + expose:0.3 + } + }, + xiaozhan:{ + trigger:{global:'useCard'}, + priority:15, + filter:function(event,player){ + return event.card.name=='sha'&&event.player!=player&& + player.countCards('h','sha')>0&&event.targets.contains(player)==false; + }, + direct:true, + content:function(){ + "step 0" + var effect=0; + for(var i=0;i0; + }, + selectCard:2, + filterCard:true, + discard:false, + prepare:'throw', + filterTarget:function(card,player,target){ + return lib.filter.targetEnabled({name:'juedou'},player,target); + }, + check:function(card){ + return Math.max(7-get.value(card),7-get.useful(card)); + }, + content:function(){ + player.useCard({name:'juedou'},targets,cards).animate=false; + }, + ai:{ + result:{ + target:function(player,target){ + return get.effect(target,{name:'juedou'},player,target); + } + }, + order:8, + } + }, + dangping:{ + trigger:{source:'damageAfter'}, + direct:true, + filter:function(event,player){ + return event.parent.name!='dangping'&&!player.hasSkill('dangping2')&&player.countCards('he')>0; + }, + content:function(){ + "step 0" + var next=player.chooseCardTarget({ + position:'he', + filterTarget:function(card,player,target){ + return player!=target&&trigger.player!=target&&get.distance(trigger.player,target)<=1; + }, + filterCard:lib.filter.cardDiscardable, + ai1:function(card){ + return get.unuseful(card)+9; + }, + ai2:function(target){ + return get.damageEffect(target,player,player); + }, + prompt:get.prompt('dangping') + }); + "step 1" + if(result.bool){ + player.discard(result.cards); + player.logSkill('dangping',result.targets); + player.addTempSkill('dangping2'); + } + "step 2" + if(result.bool){ + result.targets[0].damage(); + } + } + }, + dangping2:{}, + duishi:{ + enable:'phaseUse', + filter:function(event,player){ + return player.countCards('h')>0&&!player.hasSkill('duishi2'); + }, + filterTarget:function(card,player,target){ + return player!=target&&target.countCards('h')>0&&!target.hasSkill('duishi3'); + }, + filterCard:true, + check:function(card){return 8-get.value(card)}, + content:function(){ + "step 0" + var suit=get.suit(cards[0]); + target.chooseToDiscard({suit:suit},'h','对诗:弃置一张'+get.translation(suit)+ + '牌,或令'+get.translation(player)+'获得你一张牌').ai=function(card){ + if(get.attitude(target,player)>0) return 0; + return 9-get.value(card); + } + + "step 1" + if(result.bool){ + target.addTempSkill('duishi3'); + } + else{ + player.gainPlayerCard(target,'he',true); + player.addTempSkill('duishi2'); + } + }, + ai:{ + order:9, + threaten:1.5, + result:{ + target:-2, + player:0.5 + }, + expose:0.2 + } + }, + duishi2:{}, + duishi3:{}, + guisi:{ + trigger:{target:'shaBefore'}, + popup:false, + direct:true, + filter:function(event,player){ + return player.countCards('h'); + }, + content:function(){ + "step 0" + player.chooseCard('是否交给'+get.translation(trigger.player)+'一张牌并取消此杀?').ai=function(card){ + if(get.attitude(player,trigger.player)>0){ + return 9-get.value(card); + } + if(player.countCards('h',{name:'shan'})) return -1; + return 7-get.value(card); + } + "step 1" + if(result.bool){ + player.logSkill('guisi'); + trigger.player.gain(result.cards,player); + player.$give(result.cards,trigger.player); + trigger.cancel(); + } + }, + }, + lianwu:{ + mod:{ + selectTarget:function(card,player,range){ + if(card.name=='sha'&&range[1]!=-1) range[1]++; + }, + }, + trigger:{player:'shaBegin'}, + forced:true, + filter:function(event,player){ + return event.card&&get.color(event.card)=='red'; + }, + content:function(){ + trigger.directHit=true; + } + }, + mingfu:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.countCards('he',{suit:'club'})>0; + }, + position:'he', + filterCard:{suit:'club'}, + discard:false, + prepare:'throw', + filterTarget:function(card,player,target){ + return lib.filter.targetEnabled({name:'guiyoujie'},player,target); + }, + check:function(card){ + if(card.name=='du') return 20; + return Math.max(7-get.value(card),7-get.useful(card)); + }, + content:function(){ + target.addJudge('guiyoujie',cards); + }, + ai:{ + result:{ + target:function(player,target){ + return get.effect(target,{name:'guiyoujie'},player,target); + } + }, + order:8, + } + }, + mufeng_old:{ + init:function(player){ + player.storage.mufeng=0; + }, + group:['mufeng_gain','mufeng_lose'], + mark:true, + intro:{ + content:function(storage){ + if(storage>0){ + return '防御距离+'+storage; + } + else if(storage<0){ + return '防御距离'+storage; + } + else{ + return '无距离变化'; + } + } + }, + subSkill:{ + lose:{ + trigger:{global:'dieAfter'}, + forced:true, + filter:function(event,player){ + return player.storage.mufeng>game.players.length/2; + }, + content:function(){ + player.storage.mufeng=0; + player.updateMarks(); + } + }, + gain:{ + trigger:{player:'loseEnd'}, + forced:true, + filter:function(event,player){ + return _status.currentPhase!=player; + }, + content:function(){ + player.storage.mufeng++; + if(player.storage.mufeng>game.players.length/2){ + player.storage.mufeng=0; + } + player.updateMarks(); + } + }, + }, + mod:{ + globalTo:function(from,to,distance){ + if(typeof to.storage.mufeng=='number'){ + return distance+to.storage.mufeng; + } + } + } + }, + mufeng:{ + trigger:{player:'phaseEnd'}, + frequent:true, + alter:true, + filter:function(event,player){ + if(get.is.altered('mufeng')){ + return player.countCards('h')player.countCards('h'); + }, + content:function(){ + player.draw(Math.min(5,trigger.player.countCards('h'))-player.countCards('h')); + player.addTempSkill('mufeng2',{player:'phaseBegin'}); + }, + }, + mufeng2:{}, + jiying:{ + mod:{ + targetInRange:function(card){ + if(card.name=='sha') return true; + } + }, + }, + minjing:{ + trigger:{player:'damageBegin'}, + forced:true, + filter:function(event,player){ + if(player.getEquip(2)) return false; + return lib.skill.guangshatianyi.filter(event,player); + }, + content:function(){ + trigger.num--; + }, + ai:{ + threaten:0.8 + } + }, + touxi:{ + trigger:{global:'phaseEnd'}, + check:function(event,player){ + if(get.damageEffect(event.player,player,player,'thunder')>0){ + if(get.is.altered('touxi')&&get.attitude(player,event.player)<0&&player.countCards('he')){ + if(event.player.hp==1&&player.hp>1){ + return true; + } + } + else{ + return true; + } + } + return false; + }, + alter:true, + filter:function(event,player){ + return event.player!=player&&!player.hasSkill('touxi2')&&event.player.isAlive(); + }, + logTarget:'player', + content:function(){ + "step 0" + player.judge(function(card){ + if(get.color(card)=='black') return 1; + return -1; + }); + "step 1" + if(result.bool){ + trigger.player.damage('thunder'); + player.addSkill('touxi2'); + event.finish(); + } + else{ + if(player.countCards('he')){ + var att=get.attitude(trigger.player,player); + trigger.player[get.is.altered('touxi')?'gainPlayerCard':'discardPlayerCard'](player,'he',function(button){ + if(att>0) return 0; + return get.buttonValue(button); + }); + } + } + }, + ai:{ + expose:0.3, + threaten:1.2 + } + }, + touxi2:{ + trigger:{player:'phaseBegin'}, + forced:true, + popup:false, + content:function(){ + player.removeSkill('touxi2'); + } + }, + nlianji:{ + audio:'lianji', + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + if(player==target) return false; + return target.countCards('h')>0; + }, + selectTarget:2, + multitarget:true, + multiline:true, + filter:function(event,player){ + return player.countCards('h')>0; + }, + prepare:'throw', + discard:false, + filterCard:true, + check:function(card){ + return 6-get.value(card); + }, + content:function(){ + "step 0" + if(targets[0].countCards('h')&&targets[1].countCards('h')){ + targets[0].chooseToCompare(targets[1]); + } + else{ + event.finish(); + } + "step 1" + if(result.bool){ + targets[0].gain(cards,'log'); + targets[0].$gain2(cards); + targets[1].damage(targets[0]); + } + else{ + targets[1].gain(cards,'log'); + targets[1].$gain2(cards); + targets[0].damage(targets[1]); + } + }, + ai:{ + expose:0.3, + threaten:2, + order:9, + result:{ + target:-1 + } + }, + }, + lianji2:{ + group:['lianji3','lianji4'] + }, + lianji3:{ + trigger:{player:'shaHit'}, + forced:true, + popup:false, + content:function(){ + player.storage.lianji2=true; + } + }, + lianji4:{ + trigger:{player:'shaAfter'}, + forced:true, + popup:false, + content:function(){ + if(!player.storage.lianji2){ + player.damage('thunder',player.storage.lianji); + } + delete player.storage.lianji; + delete player.storage.lianji2; + player.removeSkill('lianji2'); + } + }, + yinmo:{}, + miedao:{ + group:['miedao1','miedao2'], + ai:{ + threaten:1.4 + } + }, + miedao1:{ + trigger:{player:'phaseDrawBegin'}, + forced:true, + filter:function(event,player){ + return player.hp=player.maxHp-1) return [0,0]; + } + } + } + }, + moyan:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.hp0; + }, + filterTarget:function(card,player,target){ + return player!=target;//&&get.distance(player,target,'attack')<=1; + }, + selectTarget:function(){ + return ui.selected.cards.length; + }, + selectCard:function(){ + var player=_status.currentPhase; + return [1,Math.min(game.players.length-1,player.maxHp-player.hp)]; + }, + filterCard:function(card){ + return get.color(card)=='red'; + }, + check:function(card){ + if(ui.selected.cards.length==0){ + return 8-get.value(card); + } + return 6-get.value(card); + }, + line:'fire', + content:function(){ + "step 0" + target.damage('fire'); + "step 1" + // target.draw(); + }, + ai:{ + order:9, + result:{ + target:function(player,target){ + return get.damageEffect(target,player,target,'fire'); + } + }, + threaten:function(player,target){ + if(target.hp==1) return 2; + if(target.hp==2) return 1.5; + return 0.5; + }, + maixie:true, + effect:{ + target:function(card,player,target){ + 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]; + } + } + } + }, + shejie:{ + trigger:{player:'damageEnd'}, + priority:9, + check:function(event,player){ + return get.attitude(player,event.source)<0; + }, + filter:function(event){ + return event&&event.source; + }, + content:function(){ + trigger.source.addSkill('shejie2'); + }, + ai:{ + threaten:0.4 + } + }, + shejie2:{ + unique:true, + trigger:{player:'phaseBegin'}, + forced:true, + priority:10, + mod:{ + cardEnabled:function(){ + return false; + }, + cardUsable:function(){ + return false; + }, + cardRespondable:function(){ + return false; + }, + cardSavable:function(){ + return false; + } + }, + content:function(){ + player.removeSkill('shejie2') + }, + }, + guiyin:{ + trigger:{player:'phaseDiscardEnd'}, + frequent:true, + filter:function(event,player){ + return event.cards&&event.cards.length>1 + }, + content:function(){ + player.draw(2); + }, + }, + wangchen:{ + trigger:{player:'phaseDiscardEnd'}, + direct:true, + filter:function(event,player){ + if(event.cards){ + // if(!get.is.altered('wangchen')) return true; + for(var i=0;i=2; + }, + content:function(){ + "step 0" + var next=player.chooseToDiscard(get.prompt('yihua',trigger.player),2); + next.ai=function(card){ + if(get.effect(player,trigger.card)<0){ + if(card.name=='liuxinghuoyu') return 7-get.value(card); + return 5-get.value(card); + } + return 0; + }; + next.prompt2='反弹'+get.translation(trigger.player)+'的'+get.translation(trigger.card); + next.logSkill=['yihua',trigger.player]; + "step 1" + if(result.bool){ + // player.discard(result.cards); + trigger.target=trigger.player; + trigger.player=player; + trigger.untrigger(); + trigger.trigger('useCardToBefore'); + } + // "step 2" + // if(result.bool){ + // trigger.target=result.targets[0]; + // trigger.untrigger; + // trigger.trigger('shaBefore'); + // game.delay(); + // } + }, + ai:{ + threaten:function(player,target){ + if(target.countCards('h')<=2){ + return 2; + } + return 2/(target.countCards('h')-1); + } + } + }, + youyin:{ + trigger:{global:'discardAfter'}, + filter:function(event,player){ + if(event.player==player) return false; + if(player.countCards('h')>=5) return false; + for(var i=0;i0; + }, + check:function(card){ + return 10-get.value(card) + }, + filterTarget:function(card,player,target){ + if(target.hp>=target.maxHp) return false; + return true; + }, + selectTarget:[1,3], + content:function(){ + target.recover(); + }, + ai:{ + order:10, + result:{ + target:function(player,target){ + if(player==target&&player.countCards('h')>player.hp) return 20; + return get.recoverEffect(target,player,target); + } + }, + threaten:2 + } + }, + huopu:{ + enable:'phaseUse', + usable:1, + position:'he', + filterCard:function(card){ + return get.suit(card)=='heart'; + }, + viewAs:{name:'liuxinghuoyu'}, + viewAsFilter:function(player){ + if(!player.countCards('he',{suit:'heart'})) return false; + }, + prompt:'将一张红桃手牌当作流星火羽使用', + check:function(card){return 6-get.value(card)}, + ai:{ + threaten:1.4, + order:9, + } + }, + rexue:{ + trigger:{global:'phaseBegin'}, + direct:true, + filter:function(event,player){ + return lib.filter.targetEnabled({name:'sha'},player,event.player)&&player.hasSha(); + }, + content:function(){ + var next=player.chooseToUse({name:'sha'},'热血:是否对'+get.translation(trigger.player)+'使用一张杀',trigger.player,-1); + next.logSkill='rexue'; + next.oncard=function(){ + player.draw(); + } + } + }, + shengshou:{ + enable:'phaseUse', + filterCard:function(card){ + return get.color(card)=='black'; + }, + viewAs:{name:'caoyao'}, + prompt:'将一张黑色手牌当作草药使用', + check:function(card){return 6-get.value(card)}, + ai:{ + threaten:1.6 + } + }, + huanjian:{ + enable:'phaseUse', + filterCard:function(card){ + return get.color(card)=='black'; + }, + viewAs:{name:'bingpotong'}, + position:'he', + filter:function(event,player){ + return player.countCards('h',{color:'black'})>0; + }, + viewAsFilter:function(player){ + if(!player.countCards('he',{color:'black'})) return false; + }, + prompt:'将一张黑色牌当作冰魄针使用', + check:function(card){return 5-get.value(card)}, + ai:{ + threaten:1.1 + } + }, + benlei:{ + enable:'phaseUse', + viewAs:{name:'jingleishan',nature:'thunder'}, + filterCard:function(card,player){ + return true; + }, + selectCard:3, + position:'he', + prompt:'将三张牌当作惊雷闪使用', + check:function(card){ + return 4-get.value(card); + }, + group:'benlei2', + ai:{ + basic:{ + order:10 + } + } + }, + benlei2:{ + trigger:{source:'damageAfter'}, + filter:function(event,player){ + return event.nature=='thunder'&&player.hp0; + } + else{ + return player.countCards('h')>0; + } + }, + content:function(){ + "step 0" + var att=get.attitude(player,trigger.player); + var nh=player.countCards('h'); + var next; + if(get.is.altered('susheng')){ + next=player.chooseToDiscard(get.prompt('susheng',trigger.player),{color:'red'}); + } + else{ + next=player.chooseToDiscard(get.prompt('susheng',trigger.player)); + } + next.logSkill=['susheng',trigger.player]; + next.ai=function(card){ + if(att>3||(att>1&&nh>2)){ + return get.unuseful2(card); + } + return 0; + }; + "step 1" + if(result.bool){ + // player.chooseToDiscard('h',true); + trigger.cancel(); + trigger.player.hp=1; + if(trigger.player.maxHp<1) trigger.player.maxHp=1; + trigger.player.update(); + player.addTempSkill('susheng2'); + } + + }, + ai:{ + threaten:2 + } + }, + susheng2:{}, + kunlunjing:{ + unique:true, + alter:true, + group:['kunlunjing1','kunlunjing2'], + video:function(player,data){ for(var i in data){ var current=game.playerMap[i]; current.node.handcards1.innerHTML=''; @@ -5286,2879 +5286,2879 @@ game.import('character',function(lib,game,ui,get,ai,_status){ current.node.judges.appendChild(js[j]); } } - }, - }, - kunlunjing1:{ - trigger:{player:'phaseBegin'}, - priority:10, - filter:function(event,player){ - if(!player.storage.kunlunjing) return false; - return player.hp0){ - num+=num2; - } - else if(att<0){ - num-=num2; - } - } - } - return num>Math.min(2,game.players.length/2); - }, - content:function(){ - "step 0" - game.delay(0.5); - "step 1" - game.animate.window(1); - "step 2" - var storage=event.player.storage.kunlunjing; - for(var i=0;i0){ + num+=num2; + } + else if(att<0){ + num-=num2; + } + } + } + return num>Math.min(2,game.players.length/2); + }, + content:function(){ + "step 0" + game.delay(0.5); + "step 1" + game.animate.window(1); + "step 2" + var storage=event.player.storage.kunlunjing; + for(var i=0;i0 - }, - filterTarget:function(card,player,target){ - return player!=target - }, - filterCard:function(card,player){ - if(ui.selected.cards.length){ - return get.suit(card)==get.suit(ui.selected.cards[0]); - } - var cards=player.getCards('h'); - for(var i=0;i0 - }, - filterTarget:function(card,player,target){ - return player!=target - }, - filterCard:function(card,player){ - if(ui.selected.cards.length){ - return get.suit(card)==get.suit(ui.selected.cards[0]); - } - var cards=player.getCards('h'); - for(var i=0;i0; - }, - filterTarget:function(card,player,target){ - return player!=target&&target.countCards('he')>0; - }, - filterCard:function(card){ - var suit=get.suit(card); - for(var i=0;ilength) return -1.5+eff; - return -1+eff; - } - }, - expose:0.2 - } - }, - liaoyuan:{ - trigger:{player:'shaBegin'}, - direct:true, - filter:function(event,player){ - if(get.itemtype(event.cards)!='cards') return false; - return player.countCards('he',{suit:get.suit(event.cards)})>0; - }, - alter:true, - content:function(){ - "step 0" - player.storage.liaoyuan=0; - event.num=0; - event.cards=[]; - "step 1" - var suit=get.suit(trigger.cards); - event.suit=suit; - player.chooseCard('he',get.prompt('liaoyuan'),function(card,player){ - return get.suit(card)==suit&&lib.filter.cardDiscardable(card,player); - }).ai=function(card){ - if(get.attitude(player,trigger.target)>=0) return 0; - if(get.effect(trigger.target,{name:'sha'},player,player)>0){ - return 7-get.value(card); - } - return 0; - } - "step 2" - if(result.bool){ - if(event.num==0){ - player.logSkill('liaoyuan'); - } - player.discard(result.cards); - event.num++; - if(player.countCards('he',{suit:event.suit})>1&&!get.is.altered('liaoyuan')){ - event.goto(1); - } - } - "step 3" - if(event.num){ - var next=trigger.target.chooseToRespond({name:'shan'},'请打出一张闪响应燎原'); - next.ai=get.unuseful2; - if(event.num>1) next.set('prompt2','共需额外打出'+event.num+'张闪'); - } - else{ - event.finish(); - } - "step 4" - if(result.bool){ - event.num--; - event.goto(3); - } - else{ - trigger.untrigger(); - trigger.directHit=true; - player.storage.liaoyuan=event.num; - } - }, - group:['liaoyuan2','liaoyuan3'] - }, - liaoyuan2:{ - trigger:{source:'damageBegin'}, - forced:true, - popup:false, - filter:function(event,player){ - return event.card&&event.card.name=='sha'&&player.storage.liaoyuan>0&&event.parent.name!='_lianhuan'&&event.parent.name!='_lianhuan2'; - }, - content:function(){ - trigger.num+=player.storage.liaoyuan; - player.storage.liaoyuan=0; - } - }, - liaoyuan3:{ - trigger:{player:'shaEnd'}, - silent:true, - content:function(){ - player.storage.liaoyuan=0; - } - }, - dunxing:{ - direct:true, - filter:function(event,player){ - if(event.player==player) return false; - return player.countCards('he')>0; - }, - trigger:{target:'useCardToBefore'}, - content:function(){ - "step 0" - var next=player.chooseToDiscard('he',get.prompt(event.name)); - next.logSkill=event.name; - next.ai=function(card){ - if(get.tag(trigger.card,'multitarget')&&!get.tag(card,'multineg')) return 0; - if(get.value(trigger.card,trigger.player,'raw')<5) return 0; - if(get.tag(trigger.card,'respondSha')&&player.hasSha()) return 0; - if(get.tag(trigger.card,'respondShan')&&player.hasShan()) return 0; - if(get.effect(player,trigger.card,trigger.player,player)<0){ - return 7-get.value(card); - } - return 0; - } - next.prompt2='弃置一张牌并进行一次判定,若结果不为红桃则'+get.translation(trigger.card)+'失效'; - "step 1" - if(result.bool){ - player.judge(function(card){ - return get.suit(card)=='heart'?-1:1; - }); - } - else{ - event.finish(); - } - "step 2" - if(result.suit!='heart'){ - trigger.cancel(); - } - } - }, - qiaoxie:{ - group:['qiaoxie2','qiaoxie3'], - ai:{ - effect:{ - target:function(card,player,target,current){ - if(get.type(card)=='equip') return [1,3]; - } - }, - reverseEquip:true, - noe:true, - } - }, - qiaoxie2:{ - trigger:{player:'equipEnd'}, - frequent:true, - //filter:function(event,player){ - // for(var i=0;i0; - }).set('autodelay',0.5).ai=function(target){ - return -get.attitude(player,target); - }; - "step 1" - if(result.bool){ - player.logSkill('qiaoxie3',result.targets); - player.discardPlayerCard(result.targets[0],'he',true); - } - else{ - event.finish(); - } - }, - }, - qiaoxie4:{ - trigger:{player:['loseEnd']}, - frequent:true, - filter:function(event,player){ - if(typeof lib.cardType.hslingjian!='number') return false; - if(!player.equiping) return false; - for(var i=0;i0 + }, + filterTarget:function(card,player,target){ + return player!=target + }, + filterCard:function(card,player){ + if(ui.selected.cards.length){ + return get.suit(card)==get.suit(ui.selected.cards[0]); + } + var cards=player.getCards('h'); + for(var i=0;i0 + }, + filterTarget:function(card,player,target){ + return player!=target + }, + filterCard:function(card,player){ + if(ui.selected.cards.length){ + return get.suit(card)==get.suit(ui.selected.cards[0]); + } + var cards=player.getCards('h'); + for(var i=0;i0; + }, + filterTarget:function(card,player,target){ + return player!=target&&target.countCards('he')>0; + }, + filterCard:function(card){ + var suit=get.suit(card); + for(var i=0;ilength) return -1.5+eff; + return -1+eff; + } + }, + expose:0.2 + } + }, + liaoyuan:{ + trigger:{player:'shaBegin'}, + direct:true, + filter:function(event,player){ + if(get.itemtype(event.cards)!='cards') return false; + return player.countCards('he',{suit:get.suit(event.cards)})>0; + }, + alter:true, + content:function(){ + "step 0" + player.storage.liaoyuan=0; + event.num=0; + event.cards=[]; + "step 1" + var suit=get.suit(trigger.cards); + event.suit=suit; + player.chooseCard('he',get.prompt('liaoyuan'),function(card,player){ + return get.suit(card)==suit&&lib.filter.cardDiscardable(card,player); + }).ai=function(card){ + if(get.attitude(player,trigger.target)>=0) return 0; + if(get.effect(trigger.target,{name:'sha'},player,player)>0){ + return 7-get.value(card); + } + return 0; + } + "step 2" + if(result.bool){ + if(event.num==0){ + player.logSkill('liaoyuan'); + } + player.discard(result.cards); + event.num++; + if(player.countCards('he',{suit:event.suit})>1&&!get.is.altered('liaoyuan')){ + event.goto(1); + } + } + "step 3" + if(event.num){ + var next=trigger.target.chooseToRespond({name:'shan'},'请打出一张闪响应燎原'); + next.ai=get.unuseful2; + if(event.num>1) next.set('prompt2','共需额外打出'+event.num+'张闪'); + } + else{ + event.finish(); + } + "step 4" + if(result.bool){ + event.num--; + event.goto(3); + } + else{ + trigger.untrigger(); + trigger.directHit=true; + player.storage.liaoyuan=event.num; + } + }, + group:['liaoyuan2','liaoyuan3'] + }, + liaoyuan2:{ + trigger:{source:'damageBegin'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.card&&event.card.name=='sha'&&player.storage.liaoyuan>0&&event.parent.name!='_lianhuan'&&event.parent.name!='_lianhuan2'; + }, + content:function(){ + trigger.num+=player.storage.liaoyuan; + player.storage.liaoyuan=0; + } + }, + liaoyuan3:{ + trigger:{player:'shaEnd'}, + silent:true, + content:function(){ + player.storage.liaoyuan=0; + } + }, + dunxing:{ + direct:true, + filter:function(event,player){ + if(event.player==player) return false; + return player.countCards('he')>0; + }, + trigger:{target:'useCardToBefore'}, + content:function(){ + "step 0" + var next=player.chooseToDiscard('he',get.prompt(event.name)); + next.logSkill=event.name; + next.ai=function(card){ + if(get.tag(trigger.card,'multitarget')&&!get.tag(card,'multineg')) return 0; + if(get.value(trigger.card,trigger.player,'raw')<5) return 0; + if(get.tag(trigger.card,'respondSha')&&player.hasSha()) return 0; + if(get.tag(trigger.card,'respondShan')&&player.hasShan()) return 0; + if(get.effect(player,trigger.card,trigger.player,player)<0){ + return 7-get.value(card); + } + return 0; + } + next.prompt2='弃置一张牌并进行一次判定,若结果不为红桃则'+get.translation(trigger.card)+'失效'; + "step 1" + if(result.bool){ + player.judge(function(card){ + return get.suit(card)=='heart'?-1:1; + }); + } + else{ + event.finish(); + } + "step 2" + if(result.suit!='heart'){ + trigger.cancel(); + } + } + }, + qiaoxie:{ + group:['qiaoxie2','qiaoxie3'], + ai:{ + effect:{ + target:function(card,player,target,current){ + if(get.type(card)=='equip') return [1,3]; + } + }, + reverseEquip:true, + noe:true, + } + }, + qiaoxie2:{ + trigger:{player:'equipEnd'}, + frequent:true, + //filter:function(event,player){ + // for(var i=0;i0; + }).set('autodelay',0.5).ai=function(target){ + return -get.attitude(player,target); + }; + "step 1" + if(result.bool){ + player.logSkill('qiaoxie3',result.targets); + player.discardPlayerCard(result.targets[0],'he',true); + } + else{ + event.finish(); + } + }, + }, + qiaoxie4:{ + trigger:{player:['loseEnd']}, + frequent:true, + filter:function(event,player){ + if(typeof lib.cardType.hslingjian!='number') return false; + if(!player.equiping) return false; + for(var i=0;i0; - }).ai=function(target){ - var att=get.attitude(player,target); - if(att<=0){ - return 1-att+(target.countCards('e')?2:0); - } - return 0; - }; - "step 1" - if(result.bool){ - event.target=result.targets[0]; - player.logSkill('meihuo',event.target); - player.choosePlayerCard(event.target,'he',true).ai=function(button){ - var card=button.link; - if(get.position(card)=='e') return get.equipValue(card); - return 5; - }; - } - "step 2" - if(result.bool){ - if(get.position(result.buttons[0].link)=='e'){ - player.equip(result.buttons[0].link); - } - else{ - player.gain(result.buttons[0].link,event.target); - } - event.target.$giveAuto(result.buttons[0].link,player); - } - }, - }, - yishan:{ - group:'yishan2', - notemp:true, - trigger:{player:'damageEnd'}, - filter:function(event,player){ - var content=player.storage.yishan; - for(var i=0;i最近失去的牌'); - var cards=[]; - for(var i=0;i=4) break; - } - } - if(cards.length){ - dialog.add(cards); - } - else{ - dialog.add('(无)'); - } - }, - content:function(content,player){ - var str='最近失去的牌:'; - var cards=[]; - for(var i=0;i=4) break; - } - } - if(cards.length){ - str+=get.translation(cards); - } - else{ - str+='无'; - } - return str; - } - } - }, - yishan2:{ - trigger:{player:'loseEnd'}, - silent:true, - content:function(){ - for(var i=0;i1; - }, - content:function(){ - trigger.directHit=true; - } - }, - poxing:{ - trigger:{source:'damageBegin'}, - filter:function(trigger,player){ - return trigger.player.hp>player.hp; - }, - forced:true, - content:function(){ - trigger.num++; - } - }, - luomu:{ - trigger:{source:'damageEnd'}, - forced:true, - filter:function(event,player){ - if(event._notrigger.contains(event.player)) return false; - return event.player.countCards('hej'); - }, - content:function(){ - trigger.player.discard(trigger.player.getCards('hej').randomGet()); - } - }, - huanhun:{ - trigger:{global:'dying'}, - priority:6, - filter:function(event,player){ - if(event.player.hp>0) return false; - if(get.is.altered('huanhun')) return player.countCards('h',{color:'red'})>0; - return player.countCards('he')>0; - }, - alter:true, - direct:true, - content:function(){ - "step 0" - var next=player.chooseToDiscard(get.is.altered('huanhun')?'h':'he',get.prompt2('huanhun',trigger.player),function(card){ - if(get.is.altered('huanhun')){ - return get.color(card)=='red'; - } - else{ - return true; - } - }); - next.logSkill=['huanhun',trigger.player]; - next.ai=function(card){ - if(card.name=='tao') return 0; - if(get.attitude(player,trigger.player)>0){ - return 8-get.value(card); - } - return 0; - }; - "step 1" - if(result.bool){ - event.card=result.cards[0]; - trigger.player.judge(function(card){ - return get.color(card)=='red'?1:0; - }); - } - else{ - event.finish(); - } - "step 2" - if(result.bool){ - trigger.player.recover(); - } - else if(event.card.isInPile()){ - trigger.player.gain(event.card,'gain2'); - } - }, - ai:{ - threaten:1.6, - expose:0.2 - } - }, - huanhun_old:{ - enable:'phaseUse', - forbid:['versus'], - filter:function(){ - return game.dead.length>0 - }, - usable:1, - filterCard:function(card){ - return get.suit(card)=='heart'; - }, - direct:true, - content:function(){ - "step 0" - var list=[]; - for(var i=0;i2) return 3; - } - return 0; - } - }, - threaten:2, - } - }, - yinyue:{ - trigger:{global:'recoverAfter'}, - check:function(event,player){ - return get.attitude(player,event.player)>0; - }, - logTarget:'player', - // alter:true, - content:function(){ - "step 0" - // if(get.is.altered('yinyue')){ - // trigger.player.draw(); - // event.finish(); - // } - // else - if(trigger.player!=player&&trigger.player.countCards('h')>=player.countCards('h')){ - game.asyncDraw([trigger.player,player]); - } - else{ - trigger.player.draw(); - event.finish(); - } - "step 1" - game.delay(); - }, - ai:{ - expose:0.2 - } - }, - daofa:{ - trigger:{global:'damageAfter'}, - check:function(event,player){ - return event.source&&get.attitude(player,event.source)<0; - }, - filter:function(event,player){ - return event.source&&event.source!=player&&event.source.countCards('he'); - }, - logTarget:'source', - content:function(){ - trigger.source.chooseToDiscard('he',true); - }, - ai:{ - expose:0.2, - threaten:1.5 - } - }, - daixing:{ - group:['daixing2','daixing3'], - trigger:{player:'phaseEnd'}, - direct:true, - filter:function(event,player){ - return player.countCards('he')>0; - }, - content:function(){ - "step 0" - var next=player.chooseToDiscard(get.prompt2('daixing'),'he',[1,player.countCards('he')]); - next.logSkill='daixing'; - next.ai=function(card){ - if(ui.selected.cards.length>=2) return 0; - if(ui.selected.cards.length==1){ - if(player.countCards('h')>player.hp){ - return 3-get.value(card); - } - return 0; - } - return 6-get.value(card); - }; - "step 1" - if(result.bool){ - player.changeHujia(result.cards.length); - player.storage.daixing=result.cards.length; - } - }, - ai:{ - effect:{ - target:function(card,player,target){ - if(get.tag(card,'damage')){ - if(player.hasSkillTag('jueqing',false,target)) return; - if(target.storage.daixing>1) return 0.1; - if(target.storage.daixing==1) return 0.5; - } - return 1.5; - } - } - }, - intro:{ - content:'mark' - } - }, - daixing2:{ - trigger:{player:'phaseBegin'}, - silent:true, - content:function(){ - if(player.storage.daixing){ - player.changeHujia(-player.storage.daixing); - player.storage.daixing=0; - } - } - }, - daixing3:{ - trigger:{player:['damageEnd','damageZero']}, - silent:true, - filter:function(event,player){ - return player.storage.daixing>0&&event.hujia>0; - }, - content:function(){ - player.storage.daixing-=trigger.hujia; - if(player.storage.daixing<0){ - player.storage.daixing=0; - } - } - }, - swd_wuxie:{ - mod:{ - targetEnabled:function(card,player,target){ - if(get.type(card)=='delay'&&player!=target){ - return false; - } - } - } - }, - lqingcheng:{ - trigger:{player:'phaseEnd'}, - frequent:true, - content:function(){ - "step 0" - if(event.cards==undefined) event.cards=[]; - player.judge(function(card){ - if(get.color(card)=='red') return 1.5; - return -1.5; - },ui.special); - "step 1" - if(result.judge>0){ - event.cards.push(result.card); - if(event.cards.length==3){ - player.gain(event.cards); - if(event.cards.length){ - player.$draw(event.cards); - } - event.finish(); - } - else if(lib.config.autoskilllist.contains('lqingcheng')){ - player.chooseBool('是否再次发动【倾城】?'); - } - else{ - event._result={bool:true}; - } - } - else{ - player.gain(event.cards); - if(event.cards.length){ - player.$draw(event.cards); - } - event.finish(); - } - "step 2" - if(result.bool){ - event.goto(0); - } - else{ - player.gain(event.cards); - if(event.cards.length){ - player.$draw(event.cards); - } - } - }, - ai:{ - threaten:1.4 - } - }, - lingxin:{ - trigger:{player:'phaseEnd'}, - frequent:true, - content:function(){ - "step 0" - event.cards=get.cards(3); - player.showCards(event.cards); - "step 1" - for(var i=0;i=player.hp&&event.skill!='lingwu'; - }, - content:function(){ - player.insertPhase(); - }, - ai:{ - order:-10, - result:{ - target:2 - }, - threaten:1.5 - } - }, - xianjiang_old:{ - enable:'phaseUse', - position:'he', - usable:1, - filterCard:function(card,player){ - if(player.storage.xianjiang&&player.storage.xianjiang.contains(card)) return false; - return get.type(card)=='equip'; - }, - init:function(player){ - player.storage.xianjiang=[]; - }, - check:function(card){ - return 10-get.value(card); - }, - prompt:'将一张装备牌永久转化为任意一张装备牌', - content:function(){ - "step 0" - var list=[]; - var suit=get.suit(cards[0]); - var number=get.number(cards[0]); - for(var i in lib.card){ - if(lib.card[i].mode&&lib.card[i].mode.contains(lib.config.mode)==false) continue; - if(lib.card[i].type=='equip'&&cards[0].name!=i){ - if(get.equipValue({name:i})<10) list.push([suit,number,i]); - } - } - var dialog=ui.create.dialog([list,'vcard']); - player.chooseButton(dialog,true,function(button){ - return get.value({name:button.link[2]},player); - }); - "step 1" - cards[0].init(result.buttons[0].link); - player.gain(cards[0]); - player.$gain(cards[0]); - game.delay(); - player.storage.xianjiang.add(cards[0]); - }, - ai:{ - order:9, - result:{ - player:1 - }, - threaten:2, - } - }, - xianjiang2:{ - trigger:{player:'phaseUseBegin'}, - forced:true, - popup:false, - filter:function(event,player){ - return player.hasSkill('xianjiang'); - }, - content:function(){ - player.storage.xianjiang=[]; - } - }, - xianjiang:{ - enable:'phaseUse', - alter:true, - filterCard:function(card){ - return get.type(card,'trick')=='trick'; - }, - usable:1, - filter:function(event,player){ - if(get.is.altered('xianjiang')&&player.countCards('e')) return false; - if(player.countCards('h',{type:'trick'})) return true; - if(player.countCards('h',{type:'delay'})) return true; - return false; - }, - selectCard:1, - check:function(card){ - return 8-get.value(card); - }, - content:function(){ - var card=game.createCard(get.inpile('equip').randomGet()); - player.equip(card); - player.$gain2(card); - game.delay(); - }, - ai:{ - result:{ - player:1 - }, - order:9 - } - }, - shengong:{ - trigger:{player:'chooseToRespondBegin'}, - filter:function(event,player){ - if(event.responded) return false; - if(!player.countCards('he')) return false; - if(event.filterCard({name:'shan'})){ - if(game.hasPlayer(function(current){ - return current!=player&¤t.getEquip(2); - })){ - return true; - } - } - if(event.filterCard({name:'sha'})){ - if(game.hasPlayer(function(current){ - return current!=player&¤t.getEquip(1); - })){ - return true; - } - } - return false; - }, - direct:true, - content:function(){ - "step 0" - var list=[]; - var players=game.filterPlayer(); - if(trigger.filterCard({name:'shan'})){ - for(var i=0;i0; - }, - content:function(){ - "step 0" - var next=player.chooseCardTarget({ - position:'he', - filterTarget:function(card,player,target){ - return lib.filter.targetEnabled({name:'sha'},player,target); - }, - filterCard:true, - ai1:function(card){ - return get.unuseful(card)+9; - }, - ai2:function(target){ - return get.effect(target,{name:'sha'},player); - }, - prompt:get.prompt('huajian') - }); - "step 1" - if(result.bool){ - player.logSkill('huajian'); - player.useCard({name:'sha'},result.cards,result.targets,false); - } - }, - ai:{ - expose:0.2, - } - }, - polang:{ - trigger:{source:'damageEnd'}, - filter:function(event,player){ - if(event._notrigger.contains(event.player)) return false; - return event.player.countCards('e'); - }, - direct:true, - logTarget:'player', - content:function(){ - player.discardPlayerCard(trigger.player,'e',get.prompt('polang',trigger.player)).logSkill='polang'; - }, - ai:{ - expose:0.3 - }, - }, - jikong:{ - trigger:{player:['loseEnd','phaseBegin']}, - direct:true, - usable:1, - alter:true, - filter:function(event,player){ - if(event.name=='phase') return true; - if(get.is.altered('jikong')) return false; - if(player.countCards('h')) return false; - for(var i=0;i2&&event.card&&event.card.name=='sha'; - }, - content:function(){ - "step 0" - player.chooseCardTarget({ - prompt:get.prompt('xielei'), - filterCard:lib.filter.cardDiscardable, - position:'he', - filterTarget:function(card,player,target){ - if(player==target) return false; - if(trigger.name=='respond'){ - return trigger.source!=target; - } - else{ - return !trigger.targets.contains(target); - } - }, - ai1:function(card){ - return 8-get.value(card); - }, - ai2:function(target){ - return get.damageEffect(target,player,player,'thunder'); - } - }); - "step 1" - if(result.bool&&!event.isMine()){ - game.delayx(); - } - "step 2" - if(result.bool){ - player.logSkill('xielei',result.targets,'thunder'); - player.discard(result.cards); - result.targets[0].damage('thunder'); - } - }, - ai:{ - expose:0.3, - threaten:1.6 - } - }, - jingjie:{ - enable:'phaseUse', - init:function(player){ - player.storage.jingjie=false; - }, - mark:true, - intro:{ - content:'limited', - }, - filter:function(event,player){ - return !player.storage.jingjie; - }, - content:function(){ - 'step 0' - player.storage.jingjie=true; - player.unmarkSkill('jingjie'); - event.targets=game.filterPlayer(); - for(var i=0;i0; + }).ai=function(target){ + var att=get.attitude(player,target); + if(att<=0){ + return 1-att+(target.countCards('e')?2:0); + } + return 0; + }; + "step 1" + if(result.bool){ + event.target=result.targets[0]; + player.logSkill('meihuo',event.target); + player.choosePlayerCard(event.target,'he',true).ai=function(button){ + var card=button.link; + if(get.position(card)=='e') return get.equipValue(card); + return 5; + }; + } + "step 2" + if(result.bool){ + if(get.position(result.buttons[0].link)=='e'){ + player.equip(result.buttons[0].link); + } + else{ + player.gain(result.buttons[0].link,event.target); + } + event.target.$giveAuto(result.buttons[0].link,player); + } + }, + }, + yishan:{ + group:'yishan2', + notemp:true, + trigger:{player:'damageEnd'}, + filter:function(event,player){ + var content=player.storage.yishan; + for(var i=0;i最近失去的牌'); + var cards=[]; + for(var i=0;i=4) break; + } + } + if(cards.length){ + dialog.add(cards); + } + else{ + dialog.add('(无)'); + } + }, + content:function(content,player){ + var str='最近失去的牌:'; + var cards=[]; + for(var i=0;i=4) break; + } + } + if(cards.length){ + str+=get.translation(cards); + } + else{ + str+='无'; + } + return str; + } + } + }, + yishan2:{ + trigger:{player:'loseEnd'}, + silent:true, + content:function(){ + for(var i=0;i1; + }, + content:function(){ + trigger.directHit=true; + } + }, + poxing:{ + trigger:{source:'damageBegin'}, + filter:function(trigger,player){ + return trigger.player.hp>player.hp; + }, + forced:true, + content:function(){ + trigger.num++; + } + }, + luomu:{ + trigger:{source:'damageEnd'}, + forced:true, + filter:function(event,player){ + if(event._notrigger.contains(event.player)) return false; + return event.player.countCards('hej'); + }, + content:function(){ + trigger.player.discard(trigger.player.getCards('hej').randomGet()); + } + }, + huanhun:{ + trigger:{global:'dying'}, + priority:6, + filter:function(event,player){ + if(event.player.hp>0) return false; + if(get.is.altered('huanhun')) return player.countCards('h',{color:'red'})>0; + return player.countCards('he')>0; + }, + alter:true, + direct:true, + content:function(){ + "step 0" + var next=player.chooseToDiscard(get.is.altered('huanhun')?'h':'he',get.prompt2('huanhun',trigger.player),function(card){ + if(get.is.altered('huanhun')){ + return get.color(card)=='red'; + } + else{ + return true; + } + }); + next.logSkill=['huanhun',trigger.player]; + next.ai=function(card){ + if(card.name=='tao') return 0; + if(get.attitude(player,trigger.player)>0){ + return 8-get.value(card); + } + return 0; + }; + "step 1" + if(result.bool){ + event.card=result.cards[0]; + trigger.player.judge(function(card){ + return get.color(card)=='red'?1:0; + }); + } + else{ + event.finish(); + } + "step 2" + if(result.bool){ + trigger.player.recover(); + } + else if(event.card.isInPile()){ + trigger.player.gain(event.card,'gain2'); + } + }, + ai:{ + threaten:1.6, + expose:0.2 + } + }, + huanhun_old:{ + enable:'phaseUse', + forbid:['versus'], + filter:function(){ + return game.dead.length>0 + }, + usable:1, + filterCard:function(card){ + return get.suit(card)=='heart'; + }, + direct:true, + content:function(){ + "step 0" + var list=[]; + for(var i=0;i2) return 3; + } + return 0; + } + }, + threaten:2, + } + }, + yinyue:{ + trigger:{global:'recoverAfter'}, + check:function(event,player){ + return get.attitude(player,event.player)>0; + }, + logTarget:'player', + // alter:true, + content:function(){ + "step 0" + // if(get.is.altered('yinyue')){ + // trigger.player.draw(); + // event.finish(); + // } + // else + if(trigger.player!=player&&trigger.player.countCards('h')>=player.countCards('h')){ + game.asyncDraw([trigger.player,player]); + } + else{ + trigger.player.draw(); + event.finish(); + } + "step 1" + game.delay(); + }, + ai:{ + expose:0.2 + } + }, + daofa:{ + trigger:{global:'damageAfter'}, + check:function(event,player){ + return event.source&&get.attitude(player,event.source)<0; + }, + filter:function(event,player){ + return event.source&&event.source!=player&&event.source.countCards('he'); + }, + logTarget:'source', + content:function(){ + trigger.source.chooseToDiscard('he',true); + }, + ai:{ + expose:0.2, + threaten:1.5 + } + }, + daixing:{ + group:['daixing2','daixing3'], + trigger:{player:'phaseEnd'}, + direct:true, + filter:function(event,player){ + return player.countCards('he')>0; + }, + content:function(){ + "step 0" + var next=player.chooseToDiscard(get.prompt2('daixing'),'he',[1,player.countCards('he')]); + next.logSkill='daixing'; + next.ai=function(card){ + if(ui.selected.cards.length>=2) return 0; + if(ui.selected.cards.length==1){ + if(player.countCards('h')>player.hp){ + return 3-get.value(card); + } + return 0; + } + return 6-get.value(card); + }; + "step 1" + if(result.bool){ + player.changeHujia(result.cards.length); + player.storage.daixing=result.cards.length; + } + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(get.tag(card,'damage')){ + if(player.hasSkillTag('jueqing',false,target)) return; + if(target.storage.daixing>1) return 0.1; + if(target.storage.daixing==1) return 0.5; + } + return 1.5; + } + } + }, + intro:{ + content:'mark' + } + }, + daixing2:{ + trigger:{player:'phaseBegin'}, + silent:true, + content:function(){ + if(player.storage.daixing){ + player.changeHujia(-player.storage.daixing); + player.storage.daixing=0; + } + } + }, + daixing3:{ + trigger:{player:['damageEnd','damageZero']}, + silent:true, + filter:function(event,player){ + return player.storage.daixing>0&&event.hujia>0; + }, + content:function(){ + player.storage.daixing-=trigger.hujia; + if(player.storage.daixing<0){ + player.storage.daixing=0; + } + } + }, + swd_wuxie:{ + mod:{ + targetEnabled:function(card,player,target){ + if(get.type(card)=='delay'&&player!=target){ + return false; + } + } + } + }, + lqingcheng:{ + trigger:{player:'phaseEnd'}, + frequent:true, + content:function(){ + "step 0" + if(event.cards==undefined) event.cards=[]; + player.judge(function(card){ + if(get.color(card)=='red') return 1.5; + return -1.5; + },ui.special); + "step 1" + if(result.judge>0){ + event.cards.push(result.card); + if(event.cards.length==3){ + player.gain(event.cards); + if(event.cards.length){ + player.$draw(event.cards); + } + event.finish(); + } + else if(lib.config.autoskilllist.contains('lqingcheng')){ + player.chooseBool('是否再次发动【倾城】?'); + } + else{ + event._result={bool:true}; + } + } + else{ + player.gain(event.cards); + if(event.cards.length){ + player.$draw(event.cards); + } + event.finish(); + } + "step 2" + if(result.bool){ + event.goto(0); + } + else{ + player.gain(event.cards); + if(event.cards.length){ + player.$draw(event.cards); + } + } + }, + ai:{ + threaten:1.4 + } + }, + lingxin:{ + trigger:{player:'phaseEnd'}, + frequent:true, + content:function(){ + "step 0" + event.cards=get.cards(3); + player.showCards(event.cards); + "step 1" + for(var i=0;i=player.hp&&event.skill!='lingwu'; + }, + content:function(){ + player.insertPhase(); + }, + ai:{ + order:-10, + result:{ + target:2 + }, + threaten:1.5 + } + }, + xianjiang_old:{ + enable:'phaseUse', + position:'he', + usable:1, + filterCard:function(card,player){ + if(player.storage.xianjiang&&player.storage.xianjiang.contains(card)) return false; + return get.type(card)=='equip'; + }, + init:function(player){ + player.storage.xianjiang=[]; + }, + check:function(card){ + return 10-get.value(card); + }, + prompt:'将一张装备牌永久转化为任意一张装备牌', + content:function(){ + "step 0" + var list=[]; + var suit=get.suit(cards[0]); + var number=get.number(cards[0]); + for(var i in lib.card){ + if(lib.card[i].mode&&lib.card[i].mode.contains(lib.config.mode)==false) continue; + if(lib.card[i].type=='equip'&&cards[0].name!=i){ + if(get.equipValue({name:i})<10) list.push([suit,number,i]); + } + } + var dialog=ui.create.dialog([list,'vcard']); + player.chooseButton(dialog,true,function(button){ + return get.value({name:button.link[2]},player); + }); + "step 1" + cards[0].init(result.buttons[0].link); + player.gain(cards[0]); + player.$gain(cards[0]); + game.delay(); + player.storage.xianjiang.add(cards[0]); + }, + ai:{ + order:9, + result:{ + player:1 + }, + threaten:2, + } + }, + xianjiang2:{ + trigger:{player:'phaseUseBegin'}, + forced:true, + popup:false, + filter:function(event,player){ + return player.hasSkill('xianjiang'); + }, + content:function(){ + player.storage.xianjiang=[]; + } + }, + xianjiang:{ + enable:'phaseUse', + alter:true, + filterCard:function(card){ + return get.type(card,'trick')=='trick'; + }, + usable:1, + filter:function(event,player){ + if(get.is.altered('xianjiang')&&player.countCards('e')) return false; + if(player.countCards('h',{type:'trick'})) return true; + if(player.countCards('h',{type:'delay'})) return true; + return false; + }, + selectCard:1, + check:function(card){ + return 8-get.value(card); + }, + content:function(){ + var card=game.createCard(get.inpile('equip').randomGet()); + player.equip(card); + player.$gain2(card); + game.delay(); + }, + ai:{ + result:{ + player:1 + }, + order:9 + } + }, + shengong:{ + trigger:{player:'chooseToRespondBegin'}, + filter:function(event,player){ + if(event.responded) return false; + if(!player.countCards('he')) return false; + if(event.filterCard({name:'shan'})){ + if(game.hasPlayer(function(current){ + return current!=player&¤t.getEquip(2); + })){ + return true; + } + } + if(event.filterCard({name:'sha'})){ + if(game.hasPlayer(function(current){ + return current!=player&¤t.getEquip(1); + })){ + return true; + } + } + return false; + }, + direct:true, + content:function(){ + "step 0" + var list=[]; + var players=game.filterPlayer(); + if(trigger.filterCard({name:'shan'})){ + for(var i=0;i0; + }, + content:function(){ + "step 0" + var next=player.chooseCardTarget({ + position:'he', + filterTarget:function(card,player,target){ + return lib.filter.targetEnabled({name:'sha'},player,target); + }, + filterCard:true, + ai1:function(card){ + return get.unuseful(card)+9; + }, + ai2:function(target){ + return get.effect(target,{name:'sha'},player); + }, + prompt:get.prompt('huajian') + }); + "step 1" + if(result.bool){ + player.logSkill('huajian'); + player.useCard({name:'sha'},result.cards,result.targets,false); + } + }, + ai:{ + expose:0.2, + } + }, + polang:{ + trigger:{source:'damageEnd'}, + filter:function(event,player){ + if(event._notrigger.contains(event.player)) return false; + return event.player.countCards('e'); + }, + direct:true, + logTarget:'player', + content:function(){ + player.discardPlayerCard(trigger.player,'e',get.prompt('polang',trigger.player)).logSkill='polang'; + }, + ai:{ + expose:0.3 + }, + }, + jikong:{ + trigger:{player:['loseEnd','phaseBegin']}, + direct:true, + usable:1, + alter:true, + filter:function(event,player){ + if(event.name=='phase') return true; + if(get.is.altered('jikong')) return false; + if(player.countCards('h')) return false; + for(var i=0;i2&&event.card&&event.card.name=='sha'; + }, + content:function(){ + "step 0" + player.chooseCardTarget({ + prompt:get.prompt('xielei'), + filterCard:lib.filter.cardDiscardable, + position:'he', + filterTarget:function(card,player,target){ + if(player==target) return false; + if(trigger.name=='respond'){ + return trigger.source!=target; + } + else{ + return !trigger.targets.contains(target); + } + }, + ai1:function(card){ + return 8-get.value(card); + }, + ai2:function(target){ + return get.damageEffect(target,player,player,'thunder'); + } + }); + "step 1" + if(result.bool&&!event.isMine()){ + game.delayx(); + } + "step 2" + if(result.bool){ + player.logSkill('xielei',result.targets,'thunder'); + player.discard(result.cards); + result.targets[0].damage('thunder'); + } + }, + ai:{ + expose:0.3, + threaten:1.6 + } + }, + jingjie:{ + enable:'phaseUse', + init:function(player){ + player.storage.jingjie=false; + }, + mark:true, + intro:{ + content:'limited', + }, + filter:function(event,player){ + return !player.storage.jingjie; + }, + content:function(){ + 'step 0' + player.storage.jingjie=true; + player.unmarkSkill('jingjie'); + event.targets=game.filterPlayer(); + for(var i=0;i0){ - num-=players[i].countCards('he')-2; - } - else if(att<0){ - num+=players[i].countCards('he')-2; - } - } - if(player.hp==1) return num-1; - return num-players.length/2; - } - } - } - }, - ningjian:{ - group:['ningjian1','ningjian2'], - ai:{ - effect:{ - target:function(card,player,target){ - if(target.countCards('he')&&(get.tag(card,'respondShan')||get.tag(card,'respondSha'))) return 0.6 - } - }, - respondSha:true, - respondShan:true, - } - }, - ningjian1:{ - enable:['chooseToRespond','chooseToUse'], - filterCard:{color:'black'}, - viewAs:{name:'sha'}, - position:'he', - prompt:'将一张黑色牌当杀打出', - check:function(card){return 6-get.value(card)} - }, - ningjian2:{ - enable:['chooseToRespond','chooseToUse'], - filterCard:{color:'red'}, - viewAs:{name:'shan'}, - position:'he', - prompt:'将一张红色牌当闪打出', - check:function(card){return 6-get.value(card)} - }, - duoren:{ - trigger:{target:'shaMiss'}, - filter:function(event){ - return event.player.getEquip(1)!=undefined; - }, - check:function(event,player){ - return get.attitude(player,event.player)<0; - }, - priority:5, - content:function(){ - trigger.player.$give(trigger.player.getEquip(1),player); - player.gain(trigger.player.getEquip(1),trigger.player); - }, - ai:{ - effect:{ - target:function(card,player,target,current){ - if(card.name=='sha'&&target.countCards('h')>1&&player.getEquip(1)){ - return [1,0.5,0,-0.5]; - } - } - } - } - // filter:function(event){ - // return event.player.countCards('e')>0; - // }, - // content:function(){ - // "step 0" - // player.choosePlayerCard('是否获得'+get.translation(trigger.player)+'的一张装备牌?', - // 'e',trigger.player).ai=get.buttonValue; - // "step 1" - // if(result.bool){ - // var card=result.buttons[0].link; - // trigger.player.$give(card,player); - // player.gain(card); - // } - // }, - }, - taixu:{ - enable:'phaseUse', - filter:function(event,player){ - return (!player.storage.taixu)&&player.countCards('hej'); - }, - filterTarget:function(card,player,target){ - return player!=target&&target.hp>1; - }, - content:function(){ - player.discard(player.getCards('hej')); - player.storage.taixu=true; - target.damage(player.maxHp-player.hp); - }, - ai:{ - basic:{ - order:1, - }, - result:{ - target:function(player,target){ - if(player.maxHp-player.hp<2) return 0; - return -2; - }, - player:function(player,target){ - return -0.5*player.countCards('he'); - } - } - } - }, - pozhen:{ - trigger:{player:'damageEnd'}, - filter:function(event,player){ - if(!event.source) return false; - if(get.is.altered('pozhen')){ - return event.source.countCards('h')>player.countCards('h'); - } - return event.source.countCards('h')!=player.countCards('h'); - }, - alter:true, - // check:function(event,player){ - // return get.attitude(player,event.source)<0; - // }, - direct:true, - content:function(){ - "step 0" - var num=player.countCards('h')-trigger.source.countCards('h'); - event.num=num; - if(num>0){ - var next=player.chooseToDiscard(num,get.prompt('pozhen',trigger.source),'弃置'+num+'张手牌,并对'+get.translation(trigger.source)+'造成一点伤害'); - next.logSkill=['pozhen',trigger.source]; - next.ai=function(card){ - if(get.damageEffect(trigger.source,player,player)>0&&num<=2){ - return 6-get.value(card); - } - return -1; - } - } - else if(num<0){ - player.chooseBool(get.prompt('pozhen',trigger.source),'弃置'+get.translation(trigger.source)+(-num)+'张手牌').ai=function(){ - return get.attitude(player,trigger.source)<0; - } - } - else{ - event.finish(); - } - "step 1" - if(result.bool){ - if(event.num>0){ - trigger.source.damage(); - } - else{ - player.logSkill('pozhen',trigger.source); - var cards=trigger.source.getCards('h'); - cards.sort(lib.sort.random); - trigger.source.discard(cards.slice(0,-event.num)); - } - } - }, - ai:{ - maixie_defend:true, - effect:{ - target:function(card,player,target){ - if(get.tag(card,'damage')){ - if(player.hasSkillTag('jueqing',false,target)) return [1,-1]; - var num=player.countCards('h')-target.countCards('h'); - if(num>0){ - return [1,0,0,-num/2]; - } - if(num<0&&!get.is.altered('pozhen')){ - return [1,0,0,-0.5]; - } - } - } - } - } - }, - tanlin_defence:{ - trigger:{player:'damageEnd'}, - filter:function(event,player){ - return player.countCards('h')&&event.source&&event.source.countCards('h'); - }, - direct:true, - content:function(){ - "step 0" - player.chooseToDiscard([1,trigger.source.countCards('h')],'弃置任意张手牌并令伤害来源弃置等量手牌').ai=function(card){ - if(ui.selected.cards.length>=trigger.source.countCards('h')) return -1; - if(ui.selected.cards.length==0) return 8-get.value(card); - return 4-get.value(card); - } - "step 1" - if(result.bool){ - player.logSkill('tanlin'); - trigger.source.randomDiscard('h',result.cards.length); - } - else{ - event.finish(); - } - "step 2" - player.draw(); - }, - ai:{ - effect:{ - target:function(card,player,target){ - if(get.tag(card,'damage')&&target.countCards('h')&&target.hp>1&&player!=target) return [1,0.2,0,-0.2]; - } - } - } - }, - tanlin:{ - enable:'phaseUse', - usable:1, - group:'tanlin4', - alter:true, - filterTarget:function(card,player,target){ - return player!=target&&target.countCards('h'); - }, - filter:function(event,player){ - return player.countCards('h')>0; - }, - content:function(){ - "step 0" - player.chooseToCompare(target).set('preserve','win'); - "step 1" - if(result.bool){ - if(target.hasSkill('tanlin2')==false){ - target.addSkill('tanlin2'); - player.addSkill('tanlin3'); - if(get.is.altered('tanlin')){ - player.gain([result.target]); - player.$gain2([result.target]); - } - else{ - player.gain([result.player,result.target]); - player.$gain2([result.player,result.target]); - } - } - } - else{ - player.damage(target); - } - }, - ai:{ - result:{ - target:function(player,target){ - var cards=player.getCards('h'); - var num=target.countCards('h'); - if(num>cards.length+3&&player.hp>1) return -2; - if(num>cards.length+1&&player.hp>1) return -1; - if(num==cards.length-1&&player.hp>1&&!get.is.altered('pozhen')) return -1; - for(var i=0;i9) return num==1?-1:-0.5; - } - return 0; - } - }, - order:9, - } - }, - tanlin2:{ - trigger:{global:'phaseAfter'}, - forced:true, - content:function(){ - player.removeSkill('tanlin2'); - }, - // mod:{ - // cardEnabled:function(){ - // return false; - // }, - // cardUsable:function(){ - // return false; - // }, - // cardRespondable:function(){ - // return false; - // }, - // cardSavable:function(){ - // return false; - // } - // }, - }, - tanlin3:{ - trigger:{global:'phaseAfter'}, - forced:true, - popup:false, - content:function(){ - player.removeSkill('tanlin3'); - }, - mod:{ - cardUsable:function(card,player,num){ - if(card.name=='sha') return num+1; - } - }, - }, - tanlin4:{ - mod:{ - targetInRange:function(card,player,target,now){ - if(target.hasSkill('tanlin2')) return true; - }, - }, - }, - yunchou_old:{ - enable:'phaseUse', - usable:1, - filterTarget:function(card,player,target){ - return player!=target&&target.countCards('h'); - }, - filterCard:true, - selectCard:[1,Infinity], - content:function(){ - "step 0" - var card=target.getCards('h').randomGet(); - if(!card){ - event.finish(); - return; - } - target.discard(card); - var color=get.color(card); - var suit=get.suit(card); - var num1=0,num2=0; - for(var i=0;i0; - }, - content:function(){ - 'step 0' - player.chooseToDiscard('he',get.prompt('tianshu')).ai=function(card){ - if(get.position(card)=='h') return 5-get.useful(card); - return 4-get.value(card); - }.logSkill='tianshu'; - 'step 1' - if(result.bool){ - var list=[]; - for(var i in lib.character){ - if(lib.character[i][4]&&(lib.character[i][4].contains('boss')||lib.character[i][4].contains('hiddenboss'))) continue; - if(i==player.name||i==player.name1||i==player.name2) continue; - for(var j=0;j0; - }, - intro:{ - nocount:true - }, - delay:0, - content:function(){ - 'step 0' - var list=player.storage.tianshu; - if(player.additionalSkills.tianshu){ - player.removeSkill(player.additionalSkills.tianshu); - } - event.skillai=function(list){ - return get.max(list,get.skillRank,'item'); - }; - if(event.isMine()){ - var dialog=ui.create.dialog('forcebutton'); - dialog.add('选择获得一项技能'); - _status.event.list=list; - var clickItem=function(){ - _status.event._result=this.link; - game.resume(); - }; - for(var i=0;i
【'+ - translation+'】
'+lib.translate[list[i]+'_info']+'
'); - item.firstChild.addEventListener('click',clickItem); - item.firstChild.link=list[i]; - } - } - dialog.add(ui.create.div('.placeholder')); - event.dialog=dialog; - event.switchToAuto=function(){ - event._result=event.skillai(list); - game.resume(); - }; - game.pause(); - _status.imchoosing=true; - } - else{ - event._result=event.skillai(list); - } - "step 1" - _status.imchoosing=false; - if(event.dialog){ - event.dialog.close(); - } - var link=result; - player.addSkill(link); - player.skills.remove(link); - player.additionalSkills.tianshu=link; - player.popup(link); - var target=player.storage.tianshu2[player.storage.tianshu.indexOf(link)]; - player.markSkillCharacter('tianshu2',target,get.translation(link),lib.translate[link+'_info']); - player.checkMarks(); - player.addSkill('tianshu3'); - }, - ai:{ - order:10, - result:{ - player:function(player){ - return 1; - } - } - } - }, - tianshu3:{ - trigger:{global:['useCardAfter','useSkillAfter','phaseAfter']}, - silent:true, - filter:function(event){ - return event.skill!='tianshu2'; - }, - content:function(){ - player.removeSkill('tianshu3'); - } - }, - tianshu:{ - unique:true, - enable:'phaseUse', - filterCard:function(card){ - return get.type(card,'trick')=='trick'; - }, - filter:function(event,player){ - return player.countCards('h',{type:['trick','delay']})>0; - }, - filterTarget:function(card,player,target){ - var names=[]; - if(target.name&&!target.isUnseen(0)) names.add(target.name); - if(target.name1&&!target.isUnseen(0)) names.add(target.name1); - if(target.name2&&!target.isUnseen(1)) names.add(target.name2); - var pss=player.getSkills(); - for(var i=0;i
【'+ - translation+'】
'+lib.translate[list[i]+'_info']+'
'); - item.firstChild.addEventListener('click',clickItem); - item.firstChild.link=list[i]; - } - } - dialog.add(ui.create.div('.placeholder')); - return dialog; - }, - check:function(card){ - return 5-get.value(card); - }, - content:function(){ - "step 0" - // target.gain(cards,player); - event.skillai=function(list){ - return get.max(list,get.skillRank,'item'); - }; - if(event.isMine()){ - event.dialog=lib.skill.tianshu.createDialog(player,target); - event.switchToAuto=function(){ - event._result=event.skillai(event.list); - game.resume(); - }; - _status.imchoosing=true; - game.pause(); - } - else{ - event._result=event.skillai(lib.skill.tianshu.createDialog(player,target,true)); - } - "step 1" - _status.imchoosing=false; - if(event.dialog){ - event.dialog.close(); - } - var link=result; - player.addAdditionalSkill('tianshu',link); - player.popup(link); - player.markSkillCharacter('tianshu',target,get.translation(link),lib.translate[link+'_info']); - player.storage.tianshu=target; - player.checkMarks(); - game.log(player,'获得了技能','【'+get.translation(link)+'】'); - }, - ai:{ - order:1, - result:{ - player:function(player,target){ - if(player.countCards('h')>player.hp) return 1; - return 0; - } - } - } - }, - tianshu_remove:{ - trigger:{global:'dieAfter'}, - silent:true, - filter:function(event,player){ - return event.player==player.storage.tianshu; - }, - content:function(){ - player.unmarkSkill('tianshu'); - player.removeAdditionalSkill('tianshu'); - delete player.storage.tianshu; - } - }, - tianshu2_old:{ - trigger:{player:'phaseBegin'}, - direct:true, - priority:-9, - content:function(){ - "step 0" - player.chooseTarget(get.prompt('tianshu'),lib.skill.tianshu.filterTarget).ai=function(target){ - if(target.maxHp<5) return Math.random()*(5-target.maxHp); - return -1; - }; - "step 1" - if(result.bool){ - player.logSkill('tianshu',result.targets); - event.target=result.targets[0]; - if(event.isMine()){ - ui.auto.hide(); - event.dialog=lib.skill.tianshu.createDialog(player,result.targets[0]); - game.pause(); - } - else{ - var target=result.targets[0]; - var names=[]; - var list=[]; - if(target.name&&!target.isUnseen(0)) names.add(target.name); - if(target.name1&&!target.isUnseen(0)) names.add(target.name1); - if(target.name2&&!target.isUnseen(1)) names.add(target.name2); - var pss=player.getSkills(); - for(var i=0;i0; - }, - filterTarget:function(card,player,target){ - return player!=target&&target.countCards('h')>0; - }, - check:function(card){ - return 7-get.value(card); - }, - selectTarget:[1,2], - content:function(){ - target.chooseToDiscard(true,'h'); - }, - ai:{ - order:9, - result:{ - target:function(player,target){ - if(target.countCards('h')==1) return -1.5; - return -1; - } - }, - } - }, - yulin:{ - trigger:{player:'damageBefore'}, - priority:-10, - filter:function(event,player){ - return player.countCards('he',{type:'equip'}); - }, - direct:true, - content:function(){ - "step 0" - var next=player.chooseToDiscard('he','是否弃置一张装备牌抵消伤害?',function(card,player){ - return get.type(card)=='equip'; - }); - next.logSkill='yulin'; - next.ai=function(card){ - if(player.hp==1||trigger.num>1){ - return 9-get.value(card); - } - if(player.hp==2){ - return 8-get.value(card); - } - return 7-get.value(card); - }; - "step 1" - if(result.bool){ - game.delay(); - trigger.cancel(); - } - } - }, - funiao:{ - enable:'phaseUse', - usable:1, - prepare:'give2', - filterTarget:function(card,player,target){ - if(player==target) return false; - return true; - }, - filter:function(event,player){ - return player.countCards('h')>0; - }, - filterCard:true, - check:function(card){ - if(card.name=='du') return 20; - return 7-get.value(card); - }, - discard:false, - content:function(){ - target.gain(cards,player).delay=false; - player.draw(); - }, - ai:{ - result:{ - target:function(player,target){ - if(ui.selected.cards.length&&ui.selected.cards[0].name=='du'){ - return -1; - } - return 1; - }, - }, - order:2 - } - }, - funiao_old:{ - enable:'phaseUse', - discard:false, - prepare:'give2', - filterTarget:function(card,player,target){ - if(player==target) return false; - if(player.countCards('h')==0) return false; - if(target.storage.funiao) return false; - return true; - }, - filterCard:true, - check:function(card){ - if(card.name=='du') return 20; - if(get.owner(card).countCards('h')0; - }, - selectTarget:-1, - content:function(){ - target.damage('fire'); - }, - line:'fire', - ai:{ - order:1, - result:{ - target:function(player,target){ - var eff=get.damageEffect(target,player,target,'fire'); - if(player==target&&player.hp<=1&&eff<0){ - eff*10; - } - return eff; - } - } - } - }, - xuehuang:{ - enable:'phaseUse', - init:function(player){ - player.storage.xuehuang=false; - }, - intro:{ - content:'limited' - }, - mark:true, - unique:true, - skillAnimation:true, - animationColor:'fire', - line:'fire', - filter:function(event,player){ - return !player.storage.xuehuang&& - player.countCards('h',{color:'red'})>0&& - player.countCards('h',{color:'black'})==0; - }, - content:function(){ - 'step 0' - player.storage.xuehuang=true; - player.awakenSkill('xuehuang'); - player.showHandcards(); - var cards=player.getCards('h'); - player.discard(cards); - event.num=cards.length; - 'step 1' - if(event.num){ - var targets=player.getEnemies().randomGets(2); - if(!targets.length){ - event.finish(); - return; - } - player.useCard({name:'sha',nature:'fire'},targets); - event.num--; - event.redo(); - } - }, - ai:{ - order:9, - result:{ - player:function(player){ - if(player.countCards('h',{color:'red'})<2) return 0; - if(player.hasCard(function(card){ - return get.color(card)=='red'&&get.value(card)>8; - })){ - return 0; - } - return 1; - } - } - } - }, - zhuyu:{ - trigger:{global:'damageBegin'}, - filter:function(event,player){ - if(!event.player.isLinked()) return false; - if(!event.notLink()) return false; - if(player.countCards('he',{color:'red'})) return true; - return false; - }, - direct:true, - content:function(){ - "step 0" - var next=player.chooseToDiscard('朱羽:是否弃置一张红色牌使'+get.translation(trigger.player)+'受到的伤害+1?','he',function(card){ - return get.color(card)=='red'; - }); - next.logSkill=['zhuyu',trigger.player,'fire']; - var num=game.countPlayer(function(current){ - if(current.isLinked()){ - if(trigger.nature){ - return get.sgn(get.damageEffect(current,player,player,'fire')); - } - else{ - if(current==trigger.player){ - return get.sgn(get.damageEffect(current,player,player,'fire')); - } - else{ - return 2*get.sgn(get.damageEffect(current,player,player,'fire')); - } - } - } - }); - next.ai=function(card){ - if(trigger.player.hasSkillTag('nofire')) return 0; - if(num>0){ - return 9-get.value(card); - } - return 0; - }; - "step 1" - if(result.bool){ - trigger.num++; - trigger.nature='fire'; - } - } - }, - ningshuang:{ - trigger:{target:'useCardToBegin'}, - filter:function(event,player){ - if(get.color(event.card)!='black') return false; - if(!event.player) return false; - if(event.player==player) return false; - if(event.player.isLinked()&&event.player.isTurnedOver()) return false; - if(player.countCards('he',{color:'black'})) return true; - return false; - }, - direct:true, - content:function(){ - "step 0" - var next=player.chooseToDiscard('凝霜:是否弃置一张黑色牌使'+get.translation(trigger.player)+'横置或翻面?','he',function(card){ - return get.color(card)=='black'; - }); - next.logSkill=['ningshuang',trigger.player]; - next.ai=function(card){ - if(trigger.player.hasSkillTag('noturn')&&trigger.player.isLinked()) return 0; - if(get.attitude(player,trigger.player)<0){ - return 9-get.value(card); - } - return 0; - }; - "step 1" - if(result.bool){ - if(trigger.player.isTurnedOver()){ - trigger.player.loseHp(); - } - if(trigger.player.isLinked()){ - trigger.player.turnOver(); - } - else{ - trigger.player.link(); - player.draw(); - } - } - }, - ai:{ - effect:{ - target:function(card,player,target){ - if(get.color(card)=='black'&&get.attitude(target,player)<0&&target.countCards('h')>0){ - return [1,0.1,0,-target.countCards('h')/4]; - } - } - } - } - }, - zaowu_old:{ - enable:'phaseUse', - usable:1, - position:'he', - filterCard:function(card,player,target){ - if(ui.selected.cards.length==0) return true; - for(var i=0;i=10) continue; - if(i!='list') list.push([suit,number,i]); - } - var dialog=ui.create.dialog([list,'vcard']); - player.chooseButton(dialog,2,true,function(button){ - return get.value({name:button.link[2]},player); - }); - "step 1" - var cards=[ui.create.card(),ui.create.card()]; - cards[0].init(result.buttons[0].link); - cards[1].init(result.buttons[1].link); - player.gain(cards); - player.$gain(cards); - game.delay(); - }, - ai:{ - order:8, - result:{ - player:1 - }, - threaten:1.6 - } - }, - xielv:{ - trigger:{player:'phaseDiscardEnd'}, - filter:function(event,player){ - var cards=player.getCards('h'); - if(cards.length<2) return false; - var color=get.color(cards[0]); - for(var i=1;i0; - }, - content:function(){ - 'step 0' - player.showHandcards(); - 'step 1' - player.recover(); - event.targets=game.filterPlayer(function(current){ - return current.countCards('j'); - }); - event.targets.sortBySeat(); - 'step 2' - if(event.targets.length){ - var current=event.targets.shift(); - var js=current.getCards('j'); - if(js.length){ - current.discard(js); - player.line(current,'green'); - } - event.redo(); - } - }, - ai:{ - expose:0.1, - } - }, - xiaomoyu:{ - trigger:{source:'damageEnd'}, - priority:1, - forced:true, - filter:function(event,player){ - return !player.hasSkill('xiaomoyu2'); - }, - content:function(){ - "step 0" - player.addTempSkill('xiaomoyu2'); - if(player.hp0; - }, - usable:1, - selectTarget:-1, - filter:function(){ - return game.hasPlayer(function(current){ - return current.countCards('j'); - }); - }, - line:'fire', - content:function(){ - "step 0" - event.num=target.countCards('j'); - target.discard(target.getCards('j')); - "step 1" - target.damage(event.num,'fire','nosource') - }, - ai:{ - order:1, - result:{ - target:function(player,target){ - var eff=get.damageEffect(target,player,target,'fire'); - if(eff>=0) return eff+1; - var judges=target.getCards('j'); - if(!judges.length) return 0; - if(target.hp==1||judges.length>1) return -judges.length; - var name=judges[0].viewAs||judges[0].name; - if(name=='shandian'||name=='huoshan'||name=='hongshui') return -judges.length; - return 0; - } - } - } - }, - huanyin:{ - trigger:{target:'useCardToBefore'}, - forced:true, - priority:5.9, - filter:function(event,player){ - return event.player!=player; - }, - content:function(){ - "step 0" - var effect=get.effect(player,trigger.card,trigger.player,player); - player.judge(function(card){ - switch(get.suit(card)){ - case 'spade':return -effect; - case 'heart':return 1; - default:return 0; - } - }); - "step 1" - switch(result.suit){ - case 'spade':{ - trigger.cancel(); - break; - } - case 'heart':{ - player.draw(); - break; - } - } - }, - ai:{ - effect:{ - target:function(card,player,target){ - return 0.7 - } - }, - threaten:0.8 - } - }, - xuanzhou:{ - enable:'phaseUse', - usable:1, - discard:false, - filter:function(event,player){ - return player.countCards('he',{type:'trick'})>0; - }, - prepare:'throw', - position:'he', - filterCard:{type:'trick'}, - filterTarget:function(card,player,target){ - return player!=target; - }, - check:function(card){ - return 7-get.value(card); - }, - content:function(){ - "step 0" - var list=[]; - for(var i in lib.card){ - if(lib.card[i].mode&&lib.card[i].mode.contains(lib.config.mode)==false) continue; - if(lib.card[i].type=='delay') list.push([cards[0].suit,cards[0].number,i]); - } - var dialog=ui.create.dialog('玄咒',[list,'vcard']); - var bing=target.countCards('h')<=1; - player.chooseButton(dialog,true,function(button){ - if(get.effect(target,{name:button.link[2]},player,player)>0){ - if(button.link[2]=='bingliang'){ - if(bing) return 2; - return 0.7; - } - if(button.link[2]=='lebu'){ - return 1; - } - if(button.link[2]=='guiyoujie'){ - return 0.5; - } - if(button.link[2]=='caomu'){ - return 0.3; - } - return 0.2; - } - return 0; - }).filterButton=function(button){ - return !target.hasJudge(button.link[2]); - }; - "step 1" - target.addJudge(result.links[0][2],cards); - }, - ai:{ - result:{ - player:function(player,target){ + }, + ai:{ + threaten:1.3, + order:1, + result:{ + player:function(player){ + var num=0,players=game.filterPlayer(); + for(var i=0;i0){ + num-=players[i].countCards('he')-2; + } + else if(att<0){ + num+=players[i].countCards('he')-2; + } + } + if(player.hp==1) return num-1; + return num-players.length/2; + } + } + } + }, + ningjian:{ + group:['ningjian1','ningjian2'], + ai:{ + effect:{ + target:function(card,player,target){ + if(target.countCards('he')&&(get.tag(card,'respondShan')||get.tag(card,'respondSha'))) return 0.6 + } + }, + respondSha:true, + respondShan:true, + } + }, + ningjian1:{ + enable:['chooseToRespond','chooseToUse'], + filterCard:{color:'black'}, + viewAs:{name:'sha'}, + position:'he', + prompt:'将一张黑色牌当杀打出', + check:function(card){return 6-get.value(card)} + }, + ningjian2:{ + enable:['chooseToRespond','chooseToUse'], + filterCard:{color:'red'}, + viewAs:{name:'shan'}, + position:'he', + prompt:'将一张红色牌当闪打出', + check:function(card){return 6-get.value(card)} + }, + duoren:{ + trigger:{target:'shaMiss'}, + filter:function(event){ + return event.player.getEquip(1)!=undefined; + }, + check:function(event,player){ + return get.attitude(player,event.player)<0; + }, + priority:5, + content:function(){ + trigger.player.$give(trigger.player.getEquip(1),player); + player.gain(trigger.player.getEquip(1),trigger.player); + }, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(card.name=='sha'&&target.countCards('h')>1&&player.getEquip(1)){ + return [1,0.5,0,-0.5]; + } + } + } + } + // filter:function(event){ + // return event.player.countCards('e')>0; + // }, + // content:function(){ + // "step 0" + // player.choosePlayerCard('是否获得'+get.translation(trigger.player)+'的一张装备牌?', + // 'e',trigger.player).ai=get.buttonValue; + // "step 1" + // if(result.bool){ + // var card=result.buttons[0].link; + // trigger.player.$give(card,player); + // player.gain(card); + // } + // }, + }, + taixu:{ + enable:'phaseUse', + filter:function(event,player){ + return (!player.storage.taixu)&&player.countCards('hej'); + }, + filterTarget:function(card,player,target){ + return player!=target&&target.hp>1; + }, + content:function(){ + player.discard(player.getCards('hej')); + player.storage.taixu=true; + target.damage(player.maxHp-player.hp); + }, + ai:{ + basic:{ + order:1, + }, + result:{ + target:function(player,target){ + if(player.maxHp-player.hp<2) return 0; + return -2; + }, + player:function(player,target){ + return -0.5*player.countCards('he'); + } + } + } + }, + pozhen:{ + trigger:{player:'damageEnd'}, + filter:function(event,player){ + if(!event.source) return false; + if(get.is.altered('pozhen')){ + return event.source.countCards('h')>player.countCards('h'); + } + return event.source.countCards('h')!=player.countCards('h'); + }, + alter:true, + // check:function(event,player){ + // return get.attitude(player,event.source)<0; + // }, + direct:true, + content:function(){ + "step 0" + var num=player.countCards('h')-trigger.source.countCards('h'); + event.num=num; + if(num>0){ + var next=player.chooseToDiscard(num,get.prompt('pozhen',trigger.source),'弃置'+num+'张手牌,并对'+get.translation(trigger.source)+'造成一点伤害'); + next.logSkill=['pozhen',trigger.source]; + next.ai=function(card){ + if(get.damageEffect(trigger.source,player,player)>0&&num<=2){ + return 6-get.value(card); + } + return -1; + } + } + else if(num<0){ + player.chooseBool(get.prompt('pozhen',trigger.source),'弃置'+get.translation(trigger.source)+(-num)+'张手牌').ai=function(){ + return get.attitude(player,trigger.source)<0; + } + } + else{ + event.finish(); + } + "step 1" + if(result.bool){ + if(event.num>0){ + trigger.source.damage(); + } + else{ + player.logSkill('pozhen',trigger.source); + var cards=trigger.source.getCards('h'); + cards.sort(lib.sort.random); + trigger.source.discard(cards.slice(0,-event.num)); + } + } + }, + ai:{ + maixie_defend:true, + effect:{ + target:function(card,player,target){ + if(get.tag(card,'damage')){ + if(player.hasSkillTag('jueqing',false,target)) return [1,-1]; + var num=player.countCards('h')-target.countCards('h'); + if(num>0){ + return [1,0,0,-num/2]; + } + if(num<0&&!get.is.altered('pozhen')){ + return [1,0,0,-0.5]; + } + } + } + } + } + }, + tanlin_defence:{ + trigger:{player:'damageEnd'}, + filter:function(event,player){ + return player.countCards('h')&&event.source&&event.source.countCards('h'); + }, + direct:true, + content:function(){ + "step 0" + player.chooseToDiscard([1,trigger.source.countCards('h')],'弃置任意张手牌并令伤害来源弃置等量手牌').ai=function(card){ + if(ui.selected.cards.length>=trigger.source.countCards('h')) return -1; + if(ui.selected.cards.length==0) return 8-get.value(card); + return 4-get.value(card); + } + "step 1" + if(result.bool){ + player.logSkill('tanlin'); + trigger.source.randomDiscard('h',result.cards.length); + } + else{ + event.finish(); + } + "step 2" + player.draw(); + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(get.tag(card,'damage')&&target.countCards('h')&&target.hp>1&&player!=target) return [1,0.2,0,-0.2]; + } + } + } + }, + tanlin:{ + enable:'phaseUse', + usable:1, + group:'tanlin4', + alter:true, + filterTarget:function(card,player,target){ + return player!=target&&target.countCards('h'); + }, + filter:function(event,player){ + return player.countCards('h')>0; + }, + content:function(){ + "step 0" + player.chooseToCompare(target).set('preserve','win'); + "step 1" + if(result.bool){ + if(target.hasSkill('tanlin2')==false){ + target.addSkill('tanlin2'); + player.addSkill('tanlin3'); + if(get.is.altered('tanlin')){ + player.gain([result.target]); + player.$gain2([result.target]); + } + else{ + player.gain([result.player,result.target]); + player.$gain2([result.player,result.target]); + } + } + } + else{ + player.damage(target); + } + }, + ai:{ + result:{ + target:function(player,target){ + var cards=player.getCards('h'); + var num=target.countCards('h'); + if(num>cards.length+3&&player.hp>1) return -2; + if(num>cards.length+1&&player.hp>1) return -1; + if(num==cards.length-1&&player.hp>1&&!get.is.altered('pozhen')) return -1; + for(var i=0;i9) return num==1?-1:-0.5; + } + return 0; + } + }, + order:9, + } + }, + tanlin2:{ + trigger:{global:'phaseAfter'}, + forced:true, + content:function(){ + player.removeSkill('tanlin2'); + }, + // mod:{ + // cardEnabled:function(){ + // return false; + // }, + // cardUsable:function(){ + // return false; + // }, + // cardRespondable:function(){ + // return false; + // }, + // cardSavable:function(){ + // return false; + // } + // }, + }, + tanlin3:{ + trigger:{global:'phaseAfter'}, + forced:true, + popup:false, + content:function(){ + player.removeSkill('tanlin3'); + }, + mod:{ + cardUsable:function(card,player,num){ + if(card.name=='sha') return num+1; + } + }, + }, + tanlin4:{ + mod:{ + targetInRange:function(card,player,target,now){ + if(target.hasSkill('tanlin2')) return true; + }, + }, + }, + yunchou_old:{ + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return player!=target&&target.countCards('h'); + }, + filterCard:true, + selectCard:[1,Infinity], + content:function(){ + "step 0" + var card=target.getCards('h').randomGet(); + if(!card){ + event.finish(); + return; + } + target.discard(card); + var color=get.color(card); + var suit=get.suit(card); + var num1=0,num2=0; + for(var i=0;i0; + }, + content:function(){ + 'step 0' + player.chooseToDiscard('he',get.prompt('tianshu')).ai=function(card){ + if(get.position(card)=='h') return 5-get.useful(card); + return 4-get.value(card); + }.logSkill='tianshu'; + 'step 1' + if(result.bool){ + var list=[]; + for(var i in lib.character){ + if(lib.character[i][4]&&(lib.character[i][4].contains('boss')||lib.character[i][4].contains('hiddenboss'))) continue; + if(i==player.name||i==player.name1||i==player.name2) continue; + for(var j=0;j0; + }, + intro:{ + nocount:true + }, + delay:0, + content:function(){ + 'step 0' + var list=player.storage.tianshu; + if(player.additionalSkills.tianshu){ + player.removeSkill(player.additionalSkills.tianshu); + } + event.skillai=function(list){ + return get.max(list,get.skillRank,'item'); + }; + if(event.isMine()){ + var dialog=ui.create.dialog('forcebutton'); + dialog.add('选择获得一项技能'); + _status.event.list=list; + var clickItem=function(){ + _status.event._result=this.link; + game.resume(); + }; + for(var i=0;i
【'+ + translation+'】
'+lib.translate[list[i]+'_info']+'
'); + item.firstChild.addEventListener('click',clickItem); + item.firstChild.link=list[i]; + } + } + dialog.add(ui.create.div('.placeholder')); + event.dialog=dialog; + event.switchToAuto=function(){ + event._result=event.skillai(list); + game.resume(); + }; + game.pause(); + _status.imchoosing=true; + } + else{ + event._result=event.skillai(list); + } + "step 1" + _status.imchoosing=false; + if(event.dialog){ + event.dialog.close(); + } + var link=result; + player.addSkill(link); + player.skills.remove(link); + player.additionalSkills.tianshu=link; + player.popup(link); + var target=player.storage.tianshu2[player.storage.tianshu.indexOf(link)]; + player.markSkillCharacter('tianshu2',target,get.translation(link),lib.translate[link+'_info']); + player.checkMarks(); + player.addSkill('tianshu3'); + }, + ai:{ + order:10, + result:{ + player:function(player){ + return 1; + } + } + } + }, + tianshu3:{ + trigger:{global:['useCardAfter','useSkillAfter','phaseAfter']}, + silent:true, + filter:function(event){ + return event.skill!='tianshu2'; + }, + content:function(){ + player.removeSkill('tianshu3'); + } + }, + tianshu:{ + unique:true, + enable:'phaseUse', + filterCard:function(card){ + return get.type(card,'trick')=='trick'; + }, + filter:function(event,player){ + return player.countCards('h',{type:['trick','delay']})>0; + }, + filterTarget:function(card,player,target){ + var names=[]; + if(target.name&&!target.isUnseen(0)) names.add(target.name); + if(target.name1&&!target.isUnseen(0)) names.add(target.name1); + if(target.name2&&!target.isUnseen(1)) names.add(target.name2); + var pss=player.getSkills(); + for(var i=0;i
【'+ + translation+'】
'+lib.translate[list[i]+'_info']+'
'); + item.firstChild.addEventListener('click',clickItem); + item.firstChild.link=list[i]; + } + } + dialog.add(ui.create.div('.placeholder')); + return dialog; + }, + check:function(card){ + return 5-get.value(card); + }, + content:function(){ + "step 0" + // target.gain(cards,player); + event.skillai=function(list){ + return get.max(list,get.skillRank,'item'); + }; + if(event.isMine()){ + event.dialog=lib.skill.tianshu.createDialog(player,target); + event.switchToAuto=function(){ + event._result=event.skillai(event.list); + game.resume(); + }; + _status.imchoosing=true; + game.pause(); + } + else{ + event._result=event.skillai(lib.skill.tianshu.createDialog(player,target,true)); + } + "step 1" + _status.imchoosing=false; + if(event.dialog){ + event.dialog.close(); + } + var link=result; + player.addAdditionalSkill('tianshu',link); + player.popup(link); + player.markSkillCharacter('tianshu',target,get.translation(link),lib.translate[link+'_info']); + player.storage.tianshu=target; + player.checkMarks(); + game.log(player,'获得了技能','【'+get.translation(link)+'】'); + }, + ai:{ + order:1, + result:{ + player:function(player,target){ + if(player.countCards('h')>player.hp) return 1; + return 0; + } + } + } + }, + tianshu_remove:{ + trigger:{global:'dieAfter'}, + silent:true, + filter:function(event,player){ + return event.player==player.storage.tianshu; + }, + content:function(){ + player.unmarkSkill('tianshu'); + player.removeAdditionalSkill('tianshu'); + delete player.storage.tianshu; + } + }, + tianshu2_old:{ + trigger:{player:'phaseBegin'}, + direct:true, + priority:-9, + content:function(){ + "step 0" + player.chooseTarget(get.prompt('tianshu'),lib.skill.tianshu.filterTarget).ai=function(target){ + if(target.maxHp<5) return Math.random()*(5-target.maxHp); + return -1; + }; + "step 1" + if(result.bool){ + player.logSkill('tianshu',result.targets); + event.target=result.targets[0]; + if(event.isMine()){ + ui.auto.hide(); + event.dialog=lib.skill.tianshu.createDialog(player,result.targets[0]); + game.pause(); + } + else{ + var target=result.targets[0]; + var names=[]; + var list=[]; + if(target.name&&!target.isUnseen(0)) names.add(target.name); + if(target.name1&&!target.isUnseen(0)) names.add(target.name1); + if(target.name2&&!target.isUnseen(1)) names.add(target.name2); + var pss=player.getSkills(); + for(var i=0;i0; + }, + filterTarget:function(card,player,target){ + return player!=target&&target.countCards('h')>0; + }, + check:function(card){ + return 7-get.value(card); + }, + selectTarget:[1,2], + content:function(){ + target.chooseToDiscard(true,'h'); + }, + ai:{ + order:9, + result:{ + target:function(player,target){ + if(target.countCards('h')==1) return -1.5; + return -1; + } + }, + } + }, + yulin:{ + trigger:{player:'damageBefore'}, + priority:-10, + filter:function(event,player){ + return player.countCards('he',{type:'equip'}); + }, + direct:true, + content:function(){ + "step 0" + var next=player.chooseToDiscard('he','是否弃置一张装备牌抵消伤害?',function(card,player){ + return get.type(card)=='equip'; + }); + next.logSkill='yulin'; + next.ai=function(card){ + if(player.hp==1||trigger.num>1){ + return 9-get.value(card); + } + if(player.hp==2){ + return 8-get.value(card); + } + return 7-get.value(card); + }; + "step 1" + if(result.bool){ + game.delay(); + trigger.cancel(); + } + } + }, + funiao:{ + enable:'phaseUse', + usable:1, + prepare:'give2', + filterTarget:function(card,player,target){ + if(player==target) return false; + return true; + }, + filter:function(event,player){ + return player.countCards('h')>0; + }, + filterCard:true, + check:function(card){ + if(card.name=='du') return 20; + return 7-get.value(card); + }, + discard:false, + content:function(){ + target.gain(cards,player).delay=false; + player.draw(); + }, + ai:{ + result:{ + target:function(player,target){ + if(ui.selected.cards.length&&ui.selected.cards[0].name=='du'){ + return -1; + } + return 1; + }, + }, + order:2 + } + }, + funiao_old:{ + enable:'phaseUse', + discard:false, + prepare:'give2', + filterTarget:function(card,player,target){ + if(player==target) return false; + if(player.countCards('h')==0) return false; + if(target.storage.funiao) return false; + return true; + }, + filterCard:true, + check:function(card){ + if(card.name=='du') return 20; + if(get.owner(card).countCards('h')0; + }, + selectTarget:-1, + content:function(){ + target.damage('fire'); + }, + line:'fire', + ai:{ + order:1, + result:{ + target:function(player,target){ + var eff=get.damageEffect(target,player,target,'fire'); + if(player==target&&player.hp<=1&&eff<0){ + eff*10; + } + return eff; + } + } + } + }, + xuehuang:{ + enable:'phaseUse', + init:function(player){ + player.storage.xuehuang=false; + }, + intro:{ + content:'limited' + }, + mark:true, + unique:true, + skillAnimation:true, + animationColor:'fire', + line:'fire', + filter:function(event,player){ + return !player.storage.xuehuang&& + player.countCards('h',{color:'red'})>0&& + player.countCards('h',{color:'black'})==0; + }, + content:function(){ + 'step 0' + player.storage.xuehuang=true; + player.awakenSkill('xuehuang'); + player.showHandcards(); + var cards=player.getCards('h'); + player.discard(cards); + event.num=cards.length; + 'step 1' + if(event.num){ + var targets=player.getEnemies().randomGets(2); + if(!targets.length){ + event.finish(); + return; + } + player.useCard({name:'sha',nature:'fire'},targets); + event.num--; + event.redo(); + } + }, + ai:{ + order:9, + result:{ + player:function(player){ + if(player.countCards('h',{color:'red'})<2) return 0; + if(player.hasCard(function(card){ + return get.color(card)=='red'&&get.value(card)>8; + })){ + return 0; + } + return 1; + } + } + } + }, + zhuyu:{ + trigger:{global:'damageBegin'}, + filter:function(event,player){ + if(!event.player.isLinked()) return false; + if(!event.notLink()) return false; + if(player.countCards('he',{color:'red'})) return true; + return false; + }, + direct:true, + content:function(){ + "step 0" + var next=player.chooseToDiscard('朱羽:是否弃置一张红色牌使'+get.translation(trigger.player)+'受到的伤害+1?','he',function(card){ + return get.color(card)=='red'; + }); + next.logSkill=['zhuyu',trigger.player,'fire']; + var num=game.countPlayer(function(current){ + if(current.isLinked()){ + if(trigger.nature){ + return get.sgn(get.damageEffect(current,player,player,'fire')); + } + else{ + if(current==trigger.player){ + return get.sgn(get.damageEffect(current,player,player,'fire')); + } + else{ + return 2*get.sgn(get.damageEffect(current,player,player,'fire')); + } + } + } + }); + next.ai=function(card){ + if(trigger.player.hasSkillTag('nofire')) return 0; + if(num>0){ + return 9-get.value(card); + } + return 0; + }; + "step 1" + if(result.bool){ + trigger.num++; + trigger.nature='fire'; + } + } + }, + ningshuang:{ + trigger:{target:'useCardToBegin'}, + filter:function(event,player){ + if(get.color(event.card)!='black') return false; + if(!event.player) return false; + if(event.player==player) return false; + if(event.player.isLinked()&&event.player.isTurnedOver()) return false; + if(player.countCards('he',{color:'black'})) return true; + return false; + }, + direct:true, + content:function(){ + "step 0" + var next=player.chooseToDiscard('凝霜:是否弃置一张黑色牌使'+get.translation(trigger.player)+'横置或翻面?','he',function(card){ + return get.color(card)=='black'; + }); + next.logSkill=['ningshuang',trigger.player]; + next.ai=function(card){ + if(trigger.player.hasSkillTag('noturn')&&trigger.player.isLinked()) return 0; + if(get.attitude(player,trigger.player)<0){ + return 9-get.value(card); + } + return 0; + }; + "step 1" + if(result.bool){ + if(trigger.player.isTurnedOver()){ + trigger.player.loseHp(); + } + if(trigger.player.isLinked()){ + trigger.player.turnOver(); + } + else{ + trigger.player.link(); + player.draw(); + } + } + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(get.color(card)=='black'&&get.attitude(target,player)<0&&target.countCards('h')>0){ + return [1,0.1,0,-target.countCards('h')/4]; + } + } + } + } + }, + zaowu_old:{ + enable:'phaseUse', + usable:1, + position:'he', + filterCard:function(card,player,target){ + if(ui.selected.cards.length==0) return true; + for(var i=0;i=10) continue; + if(i!='list') list.push([suit,number,i]); + } + var dialog=ui.create.dialog([list,'vcard']); + player.chooseButton(dialog,2,true,function(button){ + return get.value({name:button.link[2]},player); + }); + "step 1" + var cards=[ui.create.card(),ui.create.card()]; + cards[0].init(result.buttons[0].link); + cards[1].init(result.buttons[1].link); + player.gain(cards); + player.$gain(cards); + game.delay(); + }, + ai:{ + order:8, + result:{ + player:1 + }, + threaten:1.6 + } + }, + xielv:{ + trigger:{player:'phaseDiscardEnd'}, + filter:function(event,player){ + var cards=player.getCards('h'); + if(cards.length<2) return false; + var color=get.color(cards[0]); + for(var i=1;i0; + }, + content:function(){ + 'step 0' + player.showHandcards(); + 'step 1' + player.recover(); + event.targets=game.filterPlayer(function(current){ + return current.countCards('j'); + }); + event.targets.sortBySeat(); + 'step 2' + if(event.targets.length){ + var current=event.targets.shift(); + var js=current.getCards('j'); + if(js.length){ + current.discard(js); + player.line(current,'green'); + } + event.redo(); + } + }, + ai:{ + expose:0.1, + } + }, + xiaomoyu:{ + trigger:{source:'damageEnd'}, + priority:1, + forced:true, + filter:function(event,player){ + return !player.hasSkill('xiaomoyu2'); + }, + content:function(){ + "step 0" + player.addTempSkill('xiaomoyu2'); + if(player.hp0; + }, + usable:1, + selectTarget:-1, + filter:function(){ + return game.hasPlayer(function(current){ + return current.countCards('j'); + }); + }, + line:'fire', + content:function(){ + "step 0" + event.num=target.countCards('j'); + target.discard(target.getCards('j')); + "step 1" + target.damage(event.num,'fire','nosource') + }, + ai:{ + order:1, + result:{ + target:function(player,target){ + var eff=get.damageEffect(target,player,target,'fire'); + if(eff>=0) return eff+1; + var judges=target.getCards('j'); + if(!judges.length) return 0; + if(target.hp==1||judges.length>1) return -judges.length; + var name=judges[0].viewAs||judges[0].name; + if(name=='shandian'||name=='huoshan'||name=='hongshui') return -judges.length; + return 0; + } + } + } + }, + huanyin:{ + trigger:{target:'useCardToBefore'}, + forced:true, + priority:5.9, + filter:function(event,player){ + return event.player!=player; + }, + content:function(){ + "step 0" + var effect=get.effect(player,trigger.card,trigger.player,player); + player.judge(function(card){ + switch(get.suit(card)){ + case 'spade':return -effect; + case 'heart':return 1; + default:return 0; + } + }); + "step 1" + switch(result.suit){ + case 'spade':{ + trigger.cancel(); + break; + } + case 'heart':{ + player.draw(); + break; + } + } + }, + ai:{ + effect:{ + target:function(card,player,target){ + return 0.7 + } + }, + threaten:0.8 + } + }, + xuanzhou:{ + enable:'phaseUse', + usable:1, + discard:false, + filter:function(event,player){ + return player.countCards('he',{type:'trick'})>0; + }, + prepare:'throw', + position:'he', + filterCard:{type:'trick'}, + filterTarget:function(card,player,target){ + return player!=target; + }, + check:function(card){ + return 7-get.value(card); + }, + content:function(){ + "step 0" + var list=[]; + for(var i in lib.card){ + if(lib.card[i].mode&&lib.card[i].mode.contains(lib.config.mode)==false) continue; + if(lib.card[i].type=='delay') list.push([cards[0].suit,cards[0].number,i]); + } + var dialog=ui.create.dialog('玄咒',[list,'vcard']); + var bing=target.countCards('h')<=1; + player.chooseButton(dialog,true,function(button){ + if(get.effect(target,{name:button.link[2]},player,player)>0){ + if(button.link[2]=='bingliang'){ + if(bing) return 2; + return 0.7; + } + if(button.link[2]=='lebu'){ + return 1; + } + if(button.link[2]=='guiyoujie'){ + return 0.5; + } + if(button.link[2]=='caomu'){ + return 0.3; + } + return 0.2; + } + return 0; + }).filterButton=function(button){ + return !target.hasJudge(button.link[2]); + }; + "step 1" + target.addJudge(result.links[0][2],cards); + }, + ai:{ + result:{ + player:function(player,target){ var eff=0; for(var i in lib.card){ if(lib.card[i].type=='delay'){ @@ -8170,2076 +8170,2076 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } return eff; } - }, - order:9.5, - } - }, - tianlun:{ - unique:true, - trigger:{global:'judge'}, - direct:true, - filter:function(event){ - if(event.card) return true; - return game.hasPlayer(function(current){ - return current.countCards('j'); - }); - }, - content:function(){ - "step 0" - var list=[]; - if(trigger.card) list.push(trigger.card); - var players=game.filterPlayer(); - for(var i=0;i1) return true; - var eff=get.damageEffect(event.player,player,player); - if(player.hp==player.maxHp) return eff<0; - return eff<=0; - }, - content:function(){ - trigger.cancel(); - player.recover(); - }, - }, - lanzhi:{ - trigger:{player:'useCard'}, - filter:function(event,player){ - if(get.suit(event.card)=='club'){ - return game.hasPlayer(function(current){ - return current.hp<=player.hp&¤t.isDamaged(); - }); - } - return false; - }, - prompt:function(event,player){ - var list=game.filterPlayer(function(current){ - return current.hp<=player.hp&¤t.isDamaged(); - }); - return get.prompt('lanzhi',list); - }, - check:function(event,player){ - var list=game.filterPlayer(function(current){ - return current.hp<=player.hp&¤t.isDamaged(); - }); - var num=0; - for(var i=0;i0){ - num++; - } - else{ - num--; - } - } - return num>0; - }, - content:function(){ - "step 0" - var list=game.filterPlayer(function(current){ - return current.hp<=player.hp&¤t.isDamaged(); - }); - player.line(list,'green'); - list.sort(lib.sort.seat); - event.list=list; - "step 1" - if(event.list.length){ - event.list.shift().recover(); - event.redo(); - } - }, - ai:{ - expose:0.3, - threaten:1.5 - } - }, - lanzhi2:{}, - duanyi:{ - enable:'phaseUse', - usable:1, - alter:true, - filter:function(event,player){ - return player.countCards('h','sha')>1; - }, - filterCard:{name:'sha'}, - selectCard:2, - filterTarget:function(card,player,target){ - return player!=target; - }, - check:function(card){ - return 10-get.value(card); - }, - content:function(){ - "step 0" - target.damage(); - if(get.is.altered('duanyi')){ - event.finish(); - } - "step 1" - var he=target.getCards('he'); - target.discard(he.randomGets(target.maxHp-target.hp)); - }, - ai:{ - expose:0.3, - result:{ - target:function(player,target){ - return get.damageEffect(target,player)-(target.maxHp-target.hp)/2; - } - }, - order:5 - } - }, - guxing:{ - group:['guxing1','guxing3'] - }, - guxing1:{ - enable:'phaseUse', - usable:1, - filter:function(event,player){ - var min=Math.max(1,player.maxHp-player.hp); - return player.countCards('h')<=min&&player.countCards('h')>0&& - lib.filter.filterCard({name:'sha'},player); - }, - filterCard:true, - selectCard:-1, - // viewAs:{name:'sha'}, - discard:false, - prepare:'throw', - filterTarget:function(card,player,target){ - return lib.filter.targetEnabled({name:'sha'},player,target); - }, - content:function(){ - "step 0" - delete player.storage.guxing; - targets.sort(lib.sort.seat); - player.useCard({name:'sha'},cards,targets,'guxing').animate=false; - "step 1" - if(player.storage.guxing){ - player.draw(player.storage.guxing); - delete player.storage.guxing; - } - }, - multitarget:true, - multiline:true, - selectTarget:[1,3], - ai:{ - order:function(){ - if(_status.event.player.countCards('h')==1) return 10; - return get.order({name:'sha'})+0.1; - }, - result:{ - target:function(player,target){ - return get.effect(target,{name:'sha'},player,target); - } - }, - threaten:function(player,target){ - if(target.hp=player.maxHp-1) return [0,0]; - } - } - } - }, - jifeng:{ - mod:{ - selectTarget:function(card,player,range){ - if(range[0]!=1||range[1]!=1) return; - var range2=get.select(get.info(card).selectTarget); - if(range2[0]!=1&&range2[1]!=1) return; - if(card.name=='sha'||get.type(card)=='trick') range[1]=Infinity; - }, - }, - trigger:{player:'useCardToBefore'}, - priority:6, - forced:true, - popup:false, - filter:function(event,player){ - if(event.targets.length<=1) return false; - if(event.card.name=='sha') return true; - else if(get.type(event.card)=='trick'){ - var range=get.select(get.info(event.card).selectTarget); - if(range[0]==1&&range[1]==1) return true; - } - return false; - }, - content:function(){ - if(Math.random()>(1.3+trigger.targets.length/5)/trigger.targets.length){ - trigger.target.popup('失误'); - trigger.cancel(); - } - } - }, - mohua2:{ - unique:true, - trigger:{player:'dying'}, - priority:10, - forced:true, - content:function(){ - "step 0" - player.removeSkill('miles_xueyi'); - player.removeSkill('aojian'); - player.removeSkill('mohua2'); - player.addSkill('moyan'); - player.addSkill('miedao'); - player.addSkill('jifeng'); - player.addSkill('swd_xiuluo'); + }, + order:9.5, + } + }, + tianlun:{ + unique:true, + trigger:{global:'judge'}, + direct:true, + filter:function(event){ + if(event.card) return true; + return game.hasPlayer(function(current){ + return current.countCards('j'); + }); + }, + content:function(){ + "step 0" + var list=[]; + if(trigger.card) list.push(trigger.card); + var players=game.filterPlayer(); + for(var i=0;i1) return true; + var eff=get.damageEffect(event.player,player,player); + if(player.hp==player.maxHp) return eff<0; + return eff<=0; + }, + content:function(){ + trigger.cancel(); + player.recover(); + }, + }, + lanzhi:{ + trigger:{player:'useCard'}, + filter:function(event,player){ + if(get.suit(event.card)=='club'){ + return game.hasPlayer(function(current){ + return current.hp<=player.hp&¤t.isDamaged(); + }); + } + return false; + }, + prompt:function(event,player){ + var list=game.filterPlayer(function(current){ + return current.hp<=player.hp&¤t.isDamaged(); + }); + return get.prompt('lanzhi',list); + }, + check:function(event,player){ + var list=game.filterPlayer(function(current){ + return current.hp<=player.hp&¤t.isDamaged(); + }); + var num=0; + for(var i=0;i0){ + num++; + } + else{ + num--; + } + } + return num>0; + }, + content:function(){ + "step 0" + var list=game.filterPlayer(function(current){ + return current.hp<=player.hp&¤t.isDamaged(); + }); + player.line(list,'green'); + list.sort(lib.sort.seat); + event.list=list; + "step 1" + if(event.list.length){ + event.list.shift().recover(); + event.redo(); + } + }, + ai:{ + expose:0.3, + threaten:1.5 + } + }, + lanzhi2:{}, + duanyi:{ + enable:'phaseUse', + usable:1, + alter:true, + filter:function(event,player){ + return player.countCards('h','sha')>1; + }, + filterCard:{name:'sha'}, + selectCard:2, + filterTarget:function(card,player,target){ + return player!=target; + }, + check:function(card){ + return 10-get.value(card); + }, + content:function(){ + "step 0" + target.damage(); + if(get.is.altered('duanyi')){ + event.finish(); + } + "step 1" + var he=target.getCards('he'); + target.discard(he.randomGets(target.maxHp-target.hp)); + }, + ai:{ + expose:0.3, + result:{ + target:function(player,target){ + return get.damageEffect(target,player)-(target.maxHp-target.hp)/2; + } + }, + order:5 + } + }, + guxing:{ + group:['guxing1','guxing3'] + }, + guxing1:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + var min=Math.max(1,player.maxHp-player.hp); + return player.countCards('h')<=min&&player.countCards('h')>0&& + lib.filter.filterCard({name:'sha'},player); + }, + filterCard:true, + selectCard:-1, + // viewAs:{name:'sha'}, + discard:false, + prepare:'throw', + filterTarget:function(card,player,target){ + return lib.filter.targetEnabled({name:'sha'},player,target); + }, + content:function(){ + "step 0" + delete player.storage.guxing; + targets.sort(lib.sort.seat); + player.useCard({name:'sha'},cards,targets,'guxing').animate=false; + "step 1" + if(player.storage.guxing){ + player.draw(player.storage.guxing); + delete player.storage.guxing; + } + }, + multitarget:true, + multiline:true, + selectTarget:[1,3], + ai:{ + order:function(){ + if(_status.event.player.countCards('h')==1) return 10; + return get.order({name:'sha'})+0.1; + }, + result:{ + target:function(player,target){ + return get.effect(target,{name:'sha'},player,target); + } + }, + threaten:function(player,target){ + if(target.hp=player.maxHp-1) return [0,0]; + } + } + } + }, + jifeng:{ + mod:{ + selectTarget:function(card,player,range){ + if(range[0]!=1||range[1]!=1) return; + var range2=get.select(get.info(card).selectTarget); + if(range2[0]!=1&&range2[1]!=1) return; + if(card.name=='sha'||get.type(card)=='trick') range[1]=Infinity; + }, + }, + trigger:{player:'useCardToBefore'}, + priority:6, + forced:true, + popup:false, + filter:function(event,player){ + if(event.targets.length<=1) return false; + if(event.card.name=='sha') return true; + else if(get.type(event.card)=='trick'){ + var range=get.select(get.info(event.card).selectTarget); + if(range[0]==1&&range[1]==1) return true; + } + return false; + }, + content:function(){ + if(Math.random()>(1.3+trigger.targets.length/5)/trigger.targets.length){ + trigger.target.popup('失误'); + trigger.cancel(); + } + } + }, + mohua2:{ + unique:true, + trigger:{player:'dying'}, + priority:10, + forced:true, + content:function(){ + "step 0" + player.removeSkill('miles_xueyi'); + player.removeSkill('aojian'); + player.removeSkill('mohua2'); + player.addSkill('moyan'); + player.addSkill('miedao'); + player.addSkill('jifeng'); + player.addSkill('swd_xiuluo'); - lib.character.swd_satan=['','qun',4,['moyan','miedao','jifeng','swd_xiuluo'],['temp']]; - if(player.name=='swd_miles') player.name='swd_satan'; - if(player.name1=='swd_miles') player.name1='swd_satan'; - if(player.name2=='swd_miles'){ - player.name2='swd_satan'; - player.node.avatar2.setBackground('swd_satan','character'); - } - else{ - player.node.avatar.setBackground('swd_satan','character'); - } + lib.character.swd_satan=['','qun',4,['moyan','miedao','jifeng','swd_xiuluo'],['temp']]; + if(player.name=='swd_miles') player.name='swd_satan'; + if(player.name1=='swd_miles') player.name1='swd_satan'; + if(player.name2=='swd_miles'){ + player.name2='swd_satan'; + player.node.avatar2.setBackground('swd_satan','character'); + } + else{ + player.node.avatar.setBackground('swd_satan','character'); + } - "step 1" - player.recover(2); - "step 2" - player.draw(2); - }, - }, - liexin:{ - trigger:{source:'damageBegin'}, - direct:true, - content:function(){ - "step 0" - player.chooseToDiscard('是否弃置一张牌使伤害+1?','he').ai=function(card){ - if(get.attitude(player,trigger.player)<0){ - return 7-get.value(card); - } - } - "step 1" - if(result.bool){ - player.logSkill('liexin'); - trigger.num++; - } - }, - ai:{ - threaten:1.8 - } - }, - mohua:{ - trigger:{player:'dying'}, - priority:10, - forced:true, - mode:['identity'], - content:function(){ - "step 0" - var skills=['wuying','xiehun','jumo']; - if(lib.config.mode_choice.double_character){ - skills.push('swd_xiuluo'); - } - lib.character.swd_satan=['','qun',6,skills,['temp']]; - if(!_status.ai.customAttitude) _status.ai.customAttitude=[]; - _status.ai.customAttitude.push(function(from,to){ - if(from.storage.xiehun){ - if(to==game.zhu) return 10; - return -10; - } - if(to.storage.xiehun){ - return 0; - } - }); - player.uninit(); - player.init('swd_satan'); - player.hp=game.players.length; - player.update(); - game.zhu=player; - player.identity='zhu'; - player.setIdentity('魔'); - player.identityShown=true; - var players=get.players(false,true); - for(var i=0;i0){ - player.draw(num); - } - }, - }, - duijue:{ - enable:'phaseUse', - mark:true, - unique:true, - forceunique:true, - skillAnimation:true, - filter:function(event,player){ - return !player.storage.duijue; - }, - filterTarget:function(card,player,target){ - if(target.hp<=1) return false; - // if(get.mode()=='identity'&&_status.mode=='zhong'&&game.zhu&&!game.zhu.isZhu){ - // return target==game.zhong; - // } - // if(target.identity=='zhu'||get.is.jun(target)) return false; - return player!=target; - }, - content:function(){ - player.storage.duijue=true; - player.awakenSkill('duijue'); - var evt=_status.event; - for(var i=0;i<10;i++){ - if(evt&&evt.getParent){ - evt=evt.getParent(); - } - if(evt.name=='phaseUse'){ - evt.skipped=true; - break; - } - } - player.storage.duijue3=target; - player.addSkill('duijue3'); - }, - duijueLoop:function(){ - 'step 0' - targets[0].phase('duijue'); - 'step 1' - ui.duijueLoop.round--; - ui.duijueLoop.innerHTML=get.cnNumber(ui.duijueLoop.round)+'回合'; - if(targets[0].isDead()||targets[1].isDead()||ui.duijueLoop.round==0){ - event.goto(3); - } - else{ - targets[1].phase('duijue'); - } - 'step 2' - ui.duijueLoop.round--; - ui.duijueLoop.innerHTML=get.cnNumber(ui.duijueLoop.round)+'回合'; - if(targets[0].isDead()||targets[1].isDead()||ui.duijueLoop.round==0){ - event.goto(3); - } - else{ - event.goto(0); - } - 'step 3' - for(var i=0;i=3) return -1; - if(target.hp0&& - get.attitude(player,trigger.source)<0&& - get.damageEffect(trigger.player,trigger.source,player)< - get.damageEffect(trigger.source,trigger.player,player); - var next=player.chooseToDiscard('是否将伤害来源('+get.translation(trigger.source)+ - ')和目标('+get.translation(trigger.player)+')对调?','he'); - next.ai=function(card){ - if(go){ - return 10-get.value(card); - } - return 0; - }; - next.logSkill='yinguo'; - "step 1" - if(result.bool){ - var target=trigger.player; - trigger.player=trigger.source; - trigger.source=target; - trigger.trigger('damageBefore'); - player.addTempSkill('yinguo2',['damageAfter','damageCancelled']); - } - }, - ai:{ - threaten:10, - expose:0.5, - }, - global:'yinguo3' - }, - yinguo2:{}, - yinguo3:{ - ai:{ - effect:{ - target:function(card,player,target){ - if(!get.tag(card,'damage')) return; - if(target.hasSkill('yinguo')) return; - var source=game.findPlayer(function(current){ - return current.hasSkill('yinguo'); - }); - if(source&&source.countCards('he')){ - if(get.attitude(source,player)<0&&get.attitude(source,target)>0){ - return [0,0,0,-1]; - } - } - } - } - } - }, - guiyan:{ - unique:true, - enable:'phaseUse', - usable:1, - intro:{ - content:'濒死时回复一点体力并失去鬼眼' - }, - mark:true, - filterTarget:function(card,player,target){ - return player!=target&&target.countCards('h'); - }, - content:function(){ - "step 0" - player.chooseCardButton(target,target.getCards('h')).set('ai',function(button){ - return get.value(button.link); - }).filterButton=function(button){ - return get.suit(button.link)=='club'; - } - "step 1" - if(result.bool){ - player.gain(result.links[0],target); - target.$giveAuto(result.links[0],player); - } - }, - ai:{ - order:11, - result:{ - target:-1, - player:1, - }, - threaten:1.3 - }, - group:['guiyan2'], - }, - guiyan2:{ - trigger:{player:'dying'}, - priority:6, - forced:true, - content:function(){ - player.recover(); - player.removeSkill('guiyan'); - player.removeSkill('guiyan2'); - } - }, - yunshen_old:{ - mod:{ - globalFrom:function(from,to,distance){ - if(!from.getEquip(1)) return distance-1; - }, - globalTo:function(from,to,distance){ - if(!to.getEquip(2)) return distance+1; - } - } - }, - suiyan_old:{ - enable:'phaseUse', - usable:1, - filterCard:function(card){ - return get.type(card)=='basic'; - }, - filterTarget:function(card,player,target){ - return player!=target&&target.countCards('e'); - }, - content:function(){ - var num=Math.floor(Math.random()*3); - if(num==0){ - player.draw(); - } - else{ - target.discard(target.getCards('e').sort(lib.sort.random).splice(0,num)); - } - }, - ai:{ - order:7, - result:{ - target:-1, - }, - threaten:1.2 - } - }, - xianyin:{ - enable:'phaseUse', - filter:function(event,player){ - return game.hasPlayer(function(current){ - return current.countCards('j')&¤t!=player; - }); - }, - content:function(){ - "step 0" - event.targets=game.filterPlayer(function(current){ - return current.countCards('j')&¤t!=player; - }); - event.targets.sort(lib.sort.seat); - "step 1" - if(event.targets.length){ - event.target=event.targets.shift(); - event.target.discard(event.target.getCards('j')); - player.line(event.target,'green'); - } - else{ - event.finish(); - } - "step 2" - if(event.target.countCards('h')){ - event.target.chooseCard('选择一张手牌交给'+get.translation(player),true).ai=function(card){ - return -get.value(card); - } - } - else{ - event.goto(1); - } - "step 3" - if(result.bool){ - player.gain(result.cards[0],target); - target.$give(1,player); - } - event.goto(1); - }, - ai:{ - order:9, - result:{ - player:function(player){ - var num=0,players=game.filterPlayer(); - for(var i=0;i=0&& - get.attitude(players[i],player)>=0){ - num++; - } - else{ - num--; - } - } - } - return num; - } - } - } - }, - mailun:{ - unique:true, - trigger:{player:'phaseBegin'}, - direct:true, - intro:{ - content:function(storage){ - if(!storage) return '无'; - return lib.skill.mailun.effects[storage-1]; - } - }, - effects:[ - '减少一点体力并增加一点体力上限', - '增加一点体力并减少一点体力上限', - '令你即将造成和即将受到的首次伤害-1', - '令你即将造成和即将受到的首次伤害+1', - '少摸一张牌并令手牌上限+1', - '多摸一张牌并令手牌上限-1', - '进攻距离+1,防御距离-1', - '进攻距离-1,防御距离+1' - ], - content:function(){ - "step 0" - player.removeSkill('mailun31'); - player.removeSkill('mailun32'); - player.removeSkill('mailun41'); - player.removeSkill('mailun42'); - player.removeSkill('mailun5'); - player.removeSkill('mailun6'); - player.removeSkill('mailun7'); - player.removeSkill('mailun8'); - if(event.isMine()){ - ui.auto.hide(); - event.dialog=ui.create.dialog('脉轮:选择一个效果','forcebutton'); - var effects=lib.skill.mailun.effects; - var clickItem=function(){ - event.choice=this.link; - game.resume(); - } - for(var i=0;i<8;i++){ - if(i==0&&player.maxHp==6) continue; - var item=event.dialog.add(''); - item.addEventListener('click',clickItem); - item.link=i+1; + "step 1" + player.recover(2); + "step 2" + player.draw(2); + }, + }, + liexin:{ + trigger:{source:'damageBegin'}, + direct:true, + content:function(){ + "step 0" + player.chooseToDiscard('是否弃置一张牌使伤害+1?','he').ai=function(card){ + if(get.attitude(player,trigger.player)<0){ + return 7-get.value(card); + } + } + "step 1" + if(result.bool){ + player.logSkill('liexin'); + trigger.num++; + } + }, + ai:{ + threaten:1.8 + } + }, + mohua:{ + trigger:{player:'dying'}, + priority:10, + forced:true, + mode:['identity'], + content:function(){ + "step 0" + var skills=['wuying','xiehun','jumo']; + if(lib.config.mode_choice.double_character){ + skills.push('swd_xiuluo'); + } + lib.character.swd_satan=['','qun',6,skills,['temp']]; + if(!_status.ai.customAttitude) _status.ai.customAttitude=[]; + _status.ai.customAttitude.push(function(from,to){ + if(from.storage.xiehun){ + if(to==game.zhu) return 10; + return -10; + } + if(to.storage.xiehun){ + return 0; + } + }); + player.uninit(); + player.init('swd_satan'); + player.hp=game.players.length; + player.update(); + game.zhu=player; + player.identity='zhu'; + player.setIdentity('魔'); + player.identityShown=true; + var players=get.players(false,true); + for(var i=0;i0){ + player.draw(num); + } + }, + }, + duijue:{ + enable:'phaseUse', + mark:true, + unique:true, + forceunique:true, + skillAnimation:true, + filter:function(event,player){ + return !player.storage.duijue; + }, + filterTarget:function(card,player,target){ + if(target.hp<=1) return false; + // if(get.mode()=='identity'&&_status.mode=='zhong'&&game.zhu&&!game.zhu.isZhu){ + // return target==game.zhong; + // } + // if(target.identity=='zhu'||get.is.jun(target)) return false; + return player!=target; + }, + content:function(){ + player.storage.duijue=true; + player.awakenSkill('duijue'); + var evt=_status.event; + for(var i=0;i<10;i++){ + if(evt&&evt.getParent){ + evt=evt.getParent(); + } + if(evt.name=='phaseUse'){ + evt.skipped=true; + break; + } + } + player.storage.duijue3=target; + player.addSkill('duijue3'); + }, + duijueLoop:function(){ + 'step 0' + targets[0].phase('duijue'); + 'step 1' + ui.duijueLoop.round--; + ui.duijueLoop.innerHTML=get.cnNumber(ui.duijueLoop.round)+'回合'; + if(targets[0].isDead()||targets[1].isDead()||ui.duijueLoop.round==0){ + event.goto(3); + } + else{ + targets[1].phase('duijue'); + } + 'step 2' + ui.duijueLoop.round--; + ui.duijueLoop.innerHTML=get.cnNumber(ui.duijueLoop.round)+'回合'; + if(targets[0].isDead()||targets[1].isDead()||ui.duijueLoop.round==0){ + event.goto(3); + } + else{ + event.goto(0); + } + 'step 3' + for(var i=0;i=3) return -1; + if(target.hp0&& + get.attitude(player,trigger.source)<0&& + get.damageEffect(trigger.player,trigger.source,player)< + get.damageEffect(trigger.source,trigger.player,player); + var next=player.chooseToDiscard('是否将伤害来源('+get.translation(trigger.source)+ + ')和目标('+get.translation(trigger.player)+')对调?','he'); + next.ai=function(card){ + if(go){ + return 10-get.value(card); + } + return 0; + }; + next.logSkill='yinguo'; + "step 1" + if(result.bool){ + var target=trigger.player; + trigger.player=trigger.source; + trigger.source=target; + trigger.trigger('damageBefore'); + player.addTempSkill('yinguo2',['damageAfter','damageCancelled']); + } + }, + ai:{ + threaten:10, + expose:0.5, + }, + global:'yinguo3' + }, + yinguo2:{}, + yinguo3:{ + ai:{ + effect:{ + target:function(card,player,target){ + if(!get.tag(card,'damage')) return; + if(target.hasSkill('yinguo')) return; + var source=game.findPlayer(function(current){ + return current.hasSkill('yinguo'); + }); + if(source&&source.countCards('he')){ + if(get.attitude(source,player)<0&&get.attitude(source,target)>0){ + return [0,0,0,-1]; + } + } + } + } + } + }, + guiyan:{ + unique:true, + enable:'phaseUse', + usable:1, + intro:{ + content:'濒死时回复一点体力并失去鬼眼' + }, + mark:true, + filterTarget:function(card,player,target){ + return player!=target&&target.countCards('h'); + }, + content:function(){ + "step 0" + player.chooseCardButton(target,target.getCards('h')).set('ai',function(button){ + return get.value(button.link); + }).filterButton=function(button){ + return get.suit(button.link)=='club'; + } + "step 1" + if(result.bool){ + player.gain(result.links[0],target); + target.$giveAuto(result.links[0],player); + } + }, + ai:{ + order:11, + result:{ + target:-1, + player:1, + }, + threaten:1.3 + }, + group:['guiyan2'], + }, + guiyan2:{ + trigger:{player:'dying'}, + priority:6, + forced:true, + content:function(){ + player.recover(); + player.removeSkill('guiyan'); + player.removeSkill('guiyan2'); + } + }, + yunshen_old:{ + mod:{ + globalFrom:function(from,to,distance){ + if(!from.getEquip(1)) return distance-1; + }, + globalTo:function(from,to,distance){ + if(!to.getEquip(2)) return distance+1; + } + } + }, + suiyan_old:{ + enable:'phaseUse', + usable:1, + filterCard:function(card){ + return get.type(card)=='basic'; + }, + filterTarget:function(card,player,target){ + return player!=target&&target.countCards('e'); + }, + content:function(){ + var num=Math.floor(Math.random()*3); + if(num==0){ + player.draw(); + } + else{ + target.discard(target.getCards('e').sort(lib.sort.random).splice(0,num)); + } + }, + ai:{ + order:7, + result:{ + target:-1, + }, + threaten:1.2 + } + }, + xianyin:{ + enable:'phaseUse', + filter:function(event,player){ + return game.hasPlayer(function(current){ + return current.countCards('j')&¤t!=player; + }); + }, + content:function(){ + "step 0" + event.targets=game.filterPlayer(function(current){ + return current.countCards('j')&¤t!=player; + }); + event.targets.sort(lib.sort.seat); + "step 1" + if(event.targets.length){ + event.target=event.targets.shift(); + event.target.discard(event.target.getCards('j')); + player.line(event.target,'green'); + } + else{ + event.finish(); + } + "step 2" + if(event.target.countCards('h')){ + event.target.chooseCard('选择一张手牌交给'+get.translation(player),true).ai=function(card){ + return -get.value(card); + } + } + else{ + event.goto(1); + } + "step 3" + if(result.bool){ + player.gain(result.cards[0],target); + target.$give(1,player); + } + event.goto(1); + }, + ai:{ + order:9, + result:{ + player:function(player){ + var num=0,players=game.filterPlayer(); + for(var i=0;i=0&& + get.attitude(players[i],player)>=0){ + num++; + } + else{ + num--; + } + } + } + return num; + } + } + } + }, + mailun:{ + unique:true, + trigger:{player:'phaseBegin'}, + direct:true, + intro:{ + content:function(storage){ + if(!storage) return '无'; + return lib.skill.mailun.effects[storage-1]; + } + }, + effects:[ + '减少一点体力并增加一点体力上限', + '增加一点体力并减少一点体力上限', + '令你即将造成和即将受到的首次伤害-1', + '令你即将造成和即将受到的首次伤害+1', + '少摸一张牌并令手牌上限+1', + '多摸一张牌并令手牌上限-1', + '进攻距离+1,防御距离-1', + '进攻距离-1,防御距离+1' + ], + content:function(){ + "step 0" + player.removeSkill('mailun31'); + player.removeSkill('mailun32'); + player.removeSkill('mailun41'); + player.removeSkill('mailun42'); + player.removeSkill('mailun5'); + player.removeSkill('mailun6'); + player.removeSkill('mailun7'); + player.removeSkill('mailun8'); + if(event.isMine()){ + ui.auto.hide(); + event.dialog=ui.create.dialog('脉轮:选择一个效果','forcebutton'); + var effects=lib.skill.mailun.effects; + var clickItem=function(){ + event.choice=this.link; + game.resume(); + } + for(var i=0;i<8;i++){ + if(i==0&&player.maxHp==6) continue; + var item=event.dialog.add(''); + item.addEventListener('click',clickItem); + item.link=i+1; - } - event.control=ui.create.control('取消',function(){ - event.choice=0; - game.resume(); - }); - event.dialog.add(ui.create.div('.placeholder')); - event.dialog.add(ui.create.div('.placeholder')); - event.dialog.add(ui.create.div('.placeholder')); - game.pause(); - } - else{ - var ctrl; - if(player.hp<=1){ - if(player.maxHp>3){ - ctrl=2; - } - else{ - ctrl=3; - } - } - else if(player.hp==2){ - if(player.maxHp>4){ - ctrl=2; - } - else if(player.countCards('h')==0){ - ctrl=6; - } - else{ - ctrl=3; - } - } - else if(player.countCards('h')player.hp+1){ - ctrl=5; - } - event.choice=ctrl; - } - "step 1" - ui.auto.show(); - player.storage.mailun=event.choice; - game.addVideo('storage',player,['mailun',player.storage.mailun]); - if(event.choice){ - player.logSkill('mailun'); - player.markSkill('mailun'); - switch(event.choice){ - case 1:{ - player.loseHp(); - player.gainMaxHp(); - break; - } - case 2:{ - player.recover(); - player.loseMaxHp(); - break; - } - case 3:{ - player.addSkill('mailun31'); - player.addSkill('mailun32'); - break; - } - case 4:{ - player.addSkill('mailun41'); - player.addSkill('mailun42'); - break; - } - case 5:{ - player.addSkill('mailun5'); - break; - } - case 6:{ - player.addSkill('mailun6'); - break; - } - case 7:{ - player.addSkill('mailun7'); - break; - } - case 8:{ - player.addSkill('mailun8'); - break; - } - } - } - else{ - player.unmarkSkill('mailun'); - } + } + event.control=ui.create.control('取消',function(){ + event.choice=0; + game.resume(); + }); + event.dialog.add(ui.create.div('.placeholder')); + event.dialog.add(ui.create.div('.placeholder')); + event.dialog.add(ui.create.div('.placeholder')); + game.pause(); + } + else{ + var ctrl; + if(player.hp<=1){ + if(player.maxHp>3){ + ctrl=2; + } + else{ + ctrl=3; + } + } + else if(player.hp==2){ + if(player.maxHp>4){ + ctrl=2; + } + else if(player.countCards('h')==0){ + ctrl=6; + } + else{ + ctrl=3; + } + } + else if(player.countCards('h')player.hp+1){ + ctrl=5; + } + event.choice=ctrl; + } + "step 1" + ui.auto.show(); + player.storage.mailun=event.choice; + game.addVideo('storage',player,['mailun',player.storage.mailun]); + if(event.choice){ + player.logSkill('mailun'); + player.markSkill('mailun'); + switch(event.choice){ + case 1:{ + player.loseHp(); + player.gainMaxHp(); + break; + } + case 2:{ + player.recover(); + player.loseMaxHp(); + break; + } + case 3:{ + player.addSkill('mailun31'); + player.addSkill('mailun32'); + break; + } + case 4:{ + player.addSkill('mailun41'); + player.addSkill('mailun42'); + break; + } + case 5:{ + player.addSkill('mailun5'); + break; + } + case 6:{ + player.addSkill('mailun6'); + break; + } + case 7:{ + player.addSkill('mailun7'); + break; + } + case 8:{ + player.addSkill('mailun8'); + break; + } + } + } + else{ + player.unmarkSkill('mailun'); + } - if(event.dialog){ - event.dialog.close(); - } - if(event.control){ - event.control.close(); - } - } - }, - mailun31:{ - trigger:{source:'damageBegin'}, - forced:true, - content:function(){ - trigger.num--; - player.removeSkill('mailun31'); - } - }, - mailun32:{ - trigger:{player:'damageBegin'}, - forced:true, - content:function(){ - trigger.num--; - player.removeSkill('mailun32'); - } - }, - mailun41:{ - trigger:{source:'damageBegin'}, - forced:true, - content:function(){ - trigger.num++; - player.removeSkill('mailun41'); - } - }, - mailun42:{ - trigger:{player:'damageBegin'}, - forced:true, - content:function(){ - trigger.num++; - player.removeSkill('mailun42'); - } - }, - mailun5:{ - trigger:{player:'phaseDrawBegin'}, - forced:true, - popup:false, - content:function(){ - trigger.num--; - }, - mod:{ - maxHandcard:function(player,num){ - return num+1; - } - } - }, - mailun6:{ - trigger:{player:'phaseDrawBegin'}, - forced:true, - popup:false, - content:function(){ - trigger.num++; - }, - mod:{ - maxHandcard:function(player,num){ - return num-1; - } - } - }, - mailun7:{ - mod:{ - globalFrom:function(from,to,distance){ - return distance-1; - }, - globalTo:function(from,to,distance){ - return distance-1; - } - } - }, - mailun8:{ - mod:{ - globalFrom:function(from,to,distance){ - return distance+1; - }, - globalTo:function(from,to,distance){ - return distance+1; - } - } - }, - fengming:{ - enable:'phaseUse', - usable:1, - filter:function(event,player){ - return player.countCards('he',{type:'equip'})>0; - }, - filterCard:{type:'equip'}, - position:'he', - filterTarget:true, - content:function(){ - "step 0" - target.recover(); - "step 1" - target.draw(); - }, - ai:{ - order:9, - result:{ - target:function(player,target){ - if(target.hp0; - }, - filterCard:function(card){ - return get.type(card)=='equip'; - }, - position:'he', - viewAs:{name:'nanman'}, - 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){ - return att+5; - } - return -1; - } - if(player.isTurnedOver()){ - return 5-att; - } - if(att<=-3){ - return -att; - } - return 0; - }; - "step 1" - if(result.bool){ - player.logSkill('huanling',result.targets); - player.turnOver(); - result.targets[0].turnOver(); - } - }, - group:'huanling2', - ai:{ - effect:{ - target:function(card,player,target,current){ - if(card.name=='guiyoujie') return [0,2]; - if(target.isTurnedOver()){ - if(get.tag(card,'damage')) return 0; - } - } - }, - expose:0.2 - } - }, - huanling2:{ - trigger:{player:'damageBefore'}, - filter:function(event,player){ - return player.isTurnedOver(); - }, - forced:true, - content:function(){ - trigger.cancel(); - }, - }, - ljifeng:{ - mod:{ - selectTarget:function(card,player,range){ - if(card.name=='sha'&&range[1]!=-1) range[1]+=player.maxHp-player.hp; - }, - attackFrom:function(from,to,distance){ - return distance+from.hp-from.maxHp; - } - }, - }, - ljifeng_old:{ - trigger:{player:'phaseUseBefore'}, - direct:true, - filter:function(event,player){ - return player.countCards('h')>0; - }, - content:function(){ - "step 0" - var check=player.countCards('h')<=player.hp+(player.hp>2?2:1); - player.chooseCardTarget({ - prompt:get.prompt('ljifeng'), - filterCard:lib.filter.cardDiscardable, - filterTarget:function(card,player,target){ - if(player==target) return false; - return player.canUse({name:'sha'},target,false); - }, - selectTarget:[1,2], - ai1:function(card){ - if(!check) return 0; - return 8-get.value(card); - }, - ai2:function(target){ - if(!check) return 0; - return get.effect(target,{name:'sha'},player); - } - }); - "step 1" - if(result.bool){ - player.logSkill('ljifeng',result.targets); - player.discard(result.cards); - player.useCard({name:'sha'},result.targets).animate=false; - trigger.cancel(); - } - } - }, - lxianglong:{ - trigger:{target:'shaMiss'}, - priority:5, - direct:true, - content:function(){ - "step 0" - player.chooseTarget(function(card,player,target){ - return player.canUse('sha',target); - },get.prompt('lxianglong')).ai=function(target){ - return get.effect(target,{name:'sha'},player,player); - } - "step 1" - if(result.bool){ - player.logSkill('lxianglong',result.targets); - player.useCard({name:'sha'},trigger.cards,result.targets).animate=false; - game.delay(); - } - }, - ai:{ - effect:{ - target:function(card,player,target){ - if(card.name=='sha'&&target.countCards('h')) return 0.7; - } - } - } - }, - zhenjiu:{ - enable:'phaseUse', - usable:1, - filterCard:{color:'red'}, - filterTarget:function(card,player,target){ - return !target.hasSkill('zhenjiu2'); - }, - check:function(card){ - return 8-get.value(card); - }, - discard:false, - prepare:'give', - content:function(){ - target.storage.zhenjiu2=cards[0]; - game.addVideo('storage',target,['zhenjiu2',get.cardInfo(target.storage.zhenjiu2),'card']); - target.addSkill('zhenjiu2'); - }, - ai:{ - result:{ - target:function(player,target){ - if(target.hpplayer.hp) return 0.5; - return 0; - } - }, - order:9, - threaten:1.7 - } - }, - zhenjiu2:{ - trigger:{player:'phaseBegin'}, - forced:true, - mark:'card', - content:function(){ - player.recover(); - player.gain(player.storage.zhenjiu2,'gain2','log'); - player.removeSkill('zhenjiu2'); - delete player.storage.zhenjiu2; - }, - intro:{ - content:'card' - } - }, - shoulie:{ - trigger:{player:'shaBegin'}, - direct:true, - content:function(){ - "step 0" - var dis=trigger.target.countCards('h','shan')||trigger.target.getEquip('bagua')||trigger.target.countCards('h')>2; - var next=player.chooseToDiscard(get.prompt('shoulie',trigger.target)); - next.ai=function(card){ - if(dis) return 7-get.value(card); - return 0; - } - next.logSkill='shoulie'; - "step 1" - if(result.bool){ - trigger.directHit=true; - } - } - }, - hudun:{ - trigger:{source:'damageEnd'}, - forced:true, - filter:function(event,player){ - return !player.hujia&&event.player!=player; - }, - content:function(){ - player.changeHujia(); - player.update(); - }, - }, - toudan:{ - enable:'phaseUse', - usable:1, - filter:function(event,player){ - return player.countCards('he',{suit:'spade'}); - }, - filterTarget:function(card,player,target){ - return player!=target; - }, - filterCard:{suit:'spade'}, - check:function(card){ - return 10-get.value(card); - }, - position:'he', - line:'fire', - content:function(){ - "step 0" - target.damage('fire'); - event.targets=game.filterPlayer(function(current){ - return get.distance(target,current)<=1; - }); - event.targets.sortBySeat(event.target); - event.targets.unshift(player); - "step 1" - if(event.targets.length){ - var current=event.targets.shift(); - if(current.countCards('he')){ - current.chooseToDiscard('he',true); - } - event.redo(); - } - }, - ai:{ - result:{ - target:function(player,target){ - return get.damageEffect(target,player,target,'fire'); - } - }, - order:10, - threaten:1.5 - } - }, - shending:{ - inherit:'longfan', - filter:function(event,player){ - return !player.getEquip(5); - }, - ai:{ - order:11, - result:{ - player:1, - }, - effect:{ - target:function(card,player,target){ - if(player!=target) return; - if(get.subtype(card)=='equip5'){ - if(get.equipValue(card)<=7) return 0; - } - } - }, - threaten:1.2 - } - }, - poxiao:{ - mod:{ - attackFrom:function(from,to,distance){ - if(!from.getEquip(1)) return distance-1; - }, - selectTarget:function(card,player,range){ - if(!player.getEquip(1)&&card.name=='sha') range[1]++; - } - }, - enable:'chooseToUse', - filterCard:{type:'equip'}, - filter:function(event,player){ - return player.countCards('he',{type:'equip'}); - }, - position:'he', - viewAs:{name:'sha'}, - prompt:'将一张闪当杀使用或打出', - check:function(card){ - if(get.subtype(card)=='equip1') return 10-get.value(card); - return 7-get.equipValue(card); - }, - ai:{ - order:function(){ - return get.order({name:'sha'})+0.1; - }, - effect:{ - target:function(card,player){ - if(get.subtype(card)=='equip1'){ - var num=0,players=game.filterPlayer(); - for(var i=0;i1) return 'zeroplayertarget'; - } - } - } - } - } - } - }, - }, - translate:{ - swd_yangshuo:'杨硕', - swd_septem:'赛特', - swd_yuxiaoxue:'于小雪', - swd_lilian:'莉莲', - swd_cheyun:'车芸', - swd_jipeng:'疾鹏', - swd_muyun:'徐暮云', - swd_zhaoyun:'皇甫朝云', - swd_jiliang:'姬良', - swd_lanyin:'兰茵', - swd_zhiyin:'芝茵', - swd_hengai:'横艾', - swd_huzhongxian:'壶中仙', - swd_qiner:'磬儿', - swd_huanyuanzhi:'桓远之', - swd_murongshi:'慕容诗', - swd_hupo:'琥珀', - swd_miles:'麦尔斯', - swd_kangnalishi:'康那里士', - swd_satan:'撒旦', - swd_philis:'菲力斯', - swd_weida:'薇达', - swd_fengtianling:'凤天凌', - swd_huyue:'瑚月', - swd_jiting:'姬亭', - swd_rongshuang:'蓉霜', - swd_zhuoshanzhu:'浊山铸', - swd_jialanduo:'迦兰多', - swd_linming:'林明', - swd_duanmeng:'端蒙', - swd_nicole:'妮可', - swd_kendi:'肯迪', - swd_lijing:'李靖', - swd_hanteng:'韩腾', - swd_yuwentuo:'宇文拓', - swd_shanxiaoxiao:'单小小', - swd_yuchiyanhong:'尉迟嫣红', - swd_pepin:'丕平', - swd_anka:'安卡', - swd_jiangwu:'疆梧', - swd_situqiang:'司徒蔷', - swd_tuwei:'徒维', - swd_yeyaxi:'耶亚希', - swd_chunyuheng:'淳于恒', - swd_duguningke:'独孤宁珂', - swd_duguningke2:'魔化宁珂', - swd_chenjingchou:'陈靖仇', - swd_zhanglie:'张烈', - swd_guyue:'古月圣', - swd_kama:'卡玛', - swd_yuli:'玉澧', - swd_duopeng:'多鹏', - swd_jiangziya:'姜子牙', - swd_heran:'何然', - swd_zhanggao:'张诰', - swd_hanlong:'韩龙', - swd_jiuyou:'久悠', - swd_qingming:'青冥', - swd_shangzhang:'尚章', - swd_youzhao:'游兆', - swd_wangsiyue:'王思月', - swd_huanglei:'黄雷', - swd_tuobayuer:'拓跋玉儿', - swd_tuobayueer:'拓跋月儿', - swd_chengyaojin:'程咬金', - swd_qinshubao:'秦叔宝', - swd_lishimin:'李世民', - swd_shuijing:'水镜', - swd_xuanyuanjianxian:'轩辕剑仙', - swd_xuanyuanjiantong:'轩辕剑童', - swd_luchengxuan:'陆承轩', - swd_xiarou:'夏柔', - swd_moye:'莫耶', - swd_fu:'毛民·福', - swd_hanluo:'寒洛', - swd_linyue:'临月', - swd_zidashu:'子大暑', - swd_maixing:'麦星', - swd_haidapang:'海大胖', - swd_shaowei:'少微', - swd_fuyan:'符验', - swd_huiyan:'慧彦', - swd_sikongyu:'司空宇', - swd_muyue:'沐月', - swd_ziqiao:'子巧', - swd_fengyu:'凤煜', - swd_qi:'柒', - swd_chenfu:'陈辅', - swd_libai:'李白', - swd_xingtian:'刑天', - swd_lanmoshen:'蓝魔神', - swd_wushi:'巫师', - swd_quxian:'屈娴', - swd_xiyan:'犀衍', - swd_shuwaner:'舒莞儿', - swd_xiaohuanglong:'小黄龙', + if(event.dialog){ + event.dialog.close(); + } + if(event.control){ + event.control.close(); + } + } + }, + mailun31:{ + trigger:{source:'damageBegin'}, + forced:true, + content:function(){ + trigger.num--; + player.removeSkill('mailun31'); + } + }, + mailun32:{ + trigger:{player:'damageBegin'}, + forced:true, + content:function(){ + trigger.num--; + player.removeSkill('mailun32'); + } + }, + mailun41:{ + trigger:{source:'damageBegin'}, + forced:true, + content:function(){ + trigger.num++; + player.removeSkill('mailun41'); + } + }, + mailun42:{ + trigger:{player:'damageBegin'}, + forced:true, + content:function(){ + trigger.num++; + player.removeSkill('mailun42'); + } + }, + mailun5:{ + trigger:{player:'phaseDrawBegin'}, + forced:true, + popup:false, + content:function(){ + trigger.num--; + }, + mod:{ + maxHandcard:function(player,num){ + return num+1; + } + } + }, + mailun6:{ + trigger:{player:'phaseDrawBegin'}, + forced:true, + popup:false, + content:function(){ + trigger.num++; + }, + mod:{ + maxHandcard:function(player,num){ + return num-1; + } + } + }, + mailun7:{ + mod:{ + globalFrom:function(from,to,distance){ + return distance-1; + }, + globalTo:function(from,to,distance){ + return distance-1; + } + } + }, + mailun8:{ + mod:{ + globalFrom:function(from,to,distance){ + return distance+1; + }, + globalTo:function(from,to,distance){ + return distance+1; + } + } + }, + fengming:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.countCards('he',{type:'equip'})>0; + }, + filterCard:{type:'equip'}, + position:'he', + filterTarget:true, + content:function(){ + "step 0" + target.recover(); + "step 1" + target.draw(); + }, + ai:{ + order:9, + result:{ + target:function(player,target){ + if(target.hp0; + }, + filterCard:function(card){ + return get.type(card)=='equip'; + }, + position:'he', + viewAs:{name:'nanman'}, + 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){ + return att+5; + } + return -1; + } + if(player.isTurnedOver()){ + return 5-att; + } + if(att<=-3){ + return -att; + } + return 0; + }; + "step 1" + if(result.bool){ + player.logSkill('huanling',result.targets); + player.turnOver(); + result.targets[0].turnOver(); + } + }, + group:'huanling2', + ai:{ + effect:{ + target:function(card,player,target,current){ + if(card.name=='guiyoujie') return [0,2]; + if(target.isTurnedOver()){ + if(get.tag(card,'damage')) return 0; + } + } + }, + expose:0.2 + } + }, + huanling2:{ + trigger:{player:'damageBefore'}, + filter:function(event,player){ + return player.isTurnedOver(); + }, + forced:true, + content:function(){ + trigger.cancel(); + }, + }, + ljifeng:{ + mod:{ + selectTarget:function(card,player,range){ + if(card.name=='sha'&&range[1]!=-1) range[1]+=player.maxHp-player.hp; + }, + attackFrom:function(from,to,distance){ + return distance+from.hp-from.maxHp; + } + }, + }, + ljifeng_old:{ + trigger:{player:'phaseUseBefore'}, + direct:true, + filter:function(event,player){ + return player.countCards('h')>0; + }, + content:function(){ + "step 0" + var check=player.countCards('h')<=player.hp+(player.hp>2?2:1); + player.chooseCardTarget({ + prompt:get.prompt('ljifeng'), + filterCard:lib.filter.cardDiscardable, + filterTarget:function(card,player,target){ + if(player==target) return false; + return player.canUse({name:'sha'},target,false); + }, + selectTarget:[1,2], + ai1:function(card){ + if(!check) return 0; + return 8-get.value(card); + }, + ai2:function(target){ + if(!check) return 0; + return get.effect(target,{name:'sha'},player); + } + }); + "step 1" + if(result.bool){ + player.logSkill('ljifeng',result.targets); + player.discard(result.cards); + player.useCard({name:'sha'},result.targets).animate=false; + trigger.cancel(); + } + } + }, + lxianglong:{ + trigger:{target:'shaMiss'}, + priority:5, + direct:true, + content:function(){ + "step 0" + player.chooseTarget(function(card,player,target){ + return player.canUse('sha',target); + },get.prompt('lxianglong')).ai=function(target){ + return get.effect(target,{name:'sha'},player,player); + } + "step 1" + if(result.bool){ + player.logSkill('lxianglong',result.targets); + player.useCard({name:'sha'},trigger.cards,result.targets).animate=false; + game.delay(); + } + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(card.name=='sha'&&target.countCards('h')) return 0.7; + } + } + } + }, + zhenjiu:{ + enable:'phaseUse', + usable:1, + filterCard:{color:'red'}, + filterTarget:function(card,player,target){ + return !target.hasSkill('zhenjiu2'); + }, + check:function(card){ + return 8-get.value(card); + }, + discard:false, + prepare:'give', + content:function(){ + target.storage.zhenjiu2=cards[0]; + game.addVideo('storage',target,['zhenjiu2',get.cardInfo(target.storage.zhenjiu2),'card']); + target.addSkill('zhenjiu2'); + }, + ai:{ + result:{ + target:function(player,target){ + if(target.hpplayer.hp) return 0.5; + return 0; + } + }, + order:9, + threaten:1.7 + } + }, + zhenjiu2:{ + trigger:{player:'phaseBegin'}, + forced:true, + mark:'card', + content:function(){ + player.recover(); + player.gain(player.storage.zhenjiu2,'gain2','log'); + player.removeSkill('zhenjiu2'); + delete player.storage.zhenjiu2; + }, + intro:{ + content:'card' + } + }, + shoulie:{ + trigger:{player:'shaBegin'}, + direct:true, + content:function(){ + "step 0" + var dis=trigger.target.countCards('h','shan')||trigger.target.getEquip('bagua')||trigger.target.countCards('h')>2; + var next=player.chooseToDiscard(get.prompt('shoulie',trigger.target)); + next.ai=function(card){ + if(dis) return 7-get.value(card); + return 0; + } + next.logSkill='shoulie'; + "step 1" + if(result.bool){ + trigger.directHit=true; + } + } + }, + hudun:{ + trigger:{source:'damageEnd'}, + forced:true, + filter:function(event,player){ + return !player.hujia&&event.player!=player; + }, + content:function(){ + player.changeHujia(); + player.update(); + }, + }, + toudan:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.countCards('he',{suit:'spade'}); + }, + filterTarget:function(card,player,target){ + return player!=target; + }, + filterCard:{suit:'spade'}, + check:function(card){ + return 10-get.value(card); + }, + position:'he', + line:'fire', + content:function(){ + "step 0" + target.damage('fire'); + event.targets=game.filterPlayer(function(current){ + return get.distance(target,current)<=1; + }); + event.targets.sortBySeat(event.target); + event.targets.unshift(player); + "step 1" + if(event.targets.length){ + var current=event.targets.shift(); + if(current.countCards('he')){ + current.chooseToDiscard('he',true); + } + event.redo(); + } + }, + ai:{ + result:{ + target:function(player,target){ + return get.damageEffect(target,player,target,'fire'); + } + }, + order:10, + threaten:1.5 + } + }, + shending:{ + inherit:'longfan', + filter:function(event,player){ + return !player.getEquip(5); + }, + ai:{ + order:11, + result:{ + player:1, + }, + effect:{ + target:function(card,player,target){ + if(player!=target) return; + if(get.subtype(card)=='equip5'){ + if(get.equipValue(card)<=7) return 0; + } + } + }, + threaten:1.2 + } + }, + poxiao:{ + mod:{ + attackFrom:function(from,to,distance){ + if(!from.getEquip(1)) return distance-1; + }, + selectTarget:function(card,player,range){ + if(!player.getEquip(1)&&card.name=='sha') range[1]++; + } + }, + enable:'chooseToUse', + filterCard:{type:'equip'}, + filter:function(event,player){ + return player.countCards('he',{type:'equip'}); + }, + position:'he', + viewAs:{name:'sha'}, + prompt:'将一张闪当杀使用或打出', + check:function(card){ + if(get.subtype(card)=='equip1') return 10-get.value(card); + return 7-get.equipValue(card); + }, + ai:{ + order:function(){ + return get.order({name:'sha'})+0.1; + }, + effect:{ + target:function(card,player){ + if(get.subtype(card)=='equip1'){ + var num=0,players=game.filterPlayer(); + for(var i=0;i1) return 'zeroplayertarget'; + } + } + } + } + } + } + }, + }, + translate:{ + swd_yangshuo:'杨硕', + swd_septem:'赛特', + swd_yuxiaoxue:'于小雪', + swd_lilian:'莉莲', + swd_cheyun:'车芸', + swd_jipeng:'疾鹏', + swd_muyun:'徐暮云', + swd_zhaoyun:'皇甫朝云', + swd_jiliang:'姬良', + swd_lanyin:'兰茵', + swd_zhiyin:'芝茵', + swd_hengai:'横艾', + swd_huzhongxian:'壶中仙', + swd_qiner:'磬儿', + swd_huanyuanzhi:'桓远之', + swd_murongshi:'慕容诗', + swd_hupo:'琥珀', + swd_miles:'麦尔斯', + swd_kangnalishi:'康那里士', + swd_satan:'撒旦', + swd_philis:'菲力斯', + swd_weida:'薇达', + swd_fengtianling:'凤天凌', + swd_huyue:'瑚月', + swd_jiting:'姬亭', + swd_rongshuang:'蓉霜', + swd_zhuoshanzhu:'浊山铸', + swd_jialanduo:'迦兰多', + swd_linming:'林明', + swd_duanmeng:'端蒙', + swd_nicole:'妮可', + swd_kendi:'肯迪', + swd_lijing:'李靖', + swd_hanteng:'韩腾', + swd_yuwentuo:'宇文拓', + swd_shanxiaoxiao:'单小小', + swd_yuchiyanhong:'尉迟嫣红', + swd_pepin:'丕平', + swd_anka:'安卡', + swd_jiangwu:'疆梧', + swd_situqiang:'司徒蔷', + swd_tuwei:'徒维', + swd_yeyaxi:'耶亚希', + swd_chunyuheng:'淳于恒', + swd_duguningke:'独孤宁珂', + swd_duguningke2:'魔化宁珂', + swd_chenjingchou:'陈靖仇', + swd_zhanglie:'张烈', + swd_guyue:'古月圣', + swd_kama:'卡玛', + swd_yuli:'玉澧', + swd_duopeng:'多鹏', + swd_jiangziya:'姜子牙', + swd_heran:'何然', + swd_zhanggao:'张诰', + swd_hanlong:'韩龙', + swd_jiuyou:'久悠', + swd_qingming:'青冥', + swd_shangzhang:'尚章', + swd_youzhao:'游兆', + swd_wangsiyue:'王思月', + swd_huanglei:'黄雷', + swd_tuobayuer:'拓跋玉儿', + swd_tuobayueer:'拓跋月儿', + swd_chengyaojin:'程咬金', + swd_qinshubao:'秦叔宝', + swd_lishimin:'李世民', + swd_shuijing:'水镜', + swd_xuanyuanjianxian:'轩辕剑仙', + swd_xuanyuanjiantong:'轩辕剑童', + swd_luchengxuan:'陆承轩', + swd_xiarou:'夏柔', + swd_moye:'莫耶', + swd_fu:'毛民·福', + swd_hanluo:'寒洛', + swd_linyue:'临月', + swd_zidashu:'子大暑', + swd_maixing:'麦星', + swd_haidapang:'海大胖', + swd_shaowei:'少微', + swd_fuyan:'符验', + swd_huiyan:'慧彦', + swd_sikongyu:'司空宇', + swd_muyue:'沐月', + swd_ziqiao:'子巧', + swd_fengyu:'凤煜', + swd_qi:'柒', + swd_chenfu:'陈辅', + swd_libai:'李白', + swd_xingtian:'刑天', + swd_lanmoshen:'蓝魔神', + swd_wushi:'巫师', + swd_quxian:'屈娴', + swd_xiyan:'犀衍', + swd_shuwaner:'舒莞儿', + swd_xiaohuanglong:'小黄龙', - cyshuiyun:'水云', - cyshuiyun_info:'准备阶段,你可以弃置一名其他角色的一张牌;每当你失去此技能,你可以弃置一名其他角色的一张牌', - cyliuzi:'流紫', - cyliuzi_info:'摸牌阶段,你可以额外摸一张牌;每当你失去此技能,你可以摸一张牌', - cyyijin:'异金', - cyyijin_info:'出牌阶段,你可以对一名体力值为全场最多的角色造成一点伤害;每当你失去此技能,你可以对一名体力值为全场最多的角色造成一点伤害', - cyqingling:'青凌', - cyqingling_info:'弃牌阶段,若你弃置了至少一张牌,你可以获得一点护甲;每当你失去此技能,你可以获得一点护甲', - cyqiandian:'千靛', - cyqiandian_info:'结束阶段,你可以视为使用一张惊雷闪;每当你失去此技能,你可以视为使用一张惊雷闪', - gxianyin:'仙音', - gxianyin_info:'出牌阶段限一次,你可以选择一种花色,将你的手牌中该花色的牌移至弃牌堆,然后选择另一种花色,从牌堆中获得等量的该花色的牌', - // gxianyin_info_alter:'', - cyxianjiang:'仙匠', - cyxianjiang_info:'每当你使用一张牌指定惟一目标时,你可以复制对方装备区内的一张你没有的牌,并置入你的装备区,同一回合对一名角色最多发动一次', - cyqiaoxie:'巧械', - cyqiaoxie_info:'每当你装备一件装备,你可以摸一张牌;每当你失去一件装备牌,你可以随机观看3张机关牌,并使用其中一张', - cyqiaoxie_info_alter:'每当你装备一件装备,若你的手牌数不大于体力值,你可以摸一张牌;每当你失去一件装备牌,你可以随机观看3张机关牌,并使用其中一张', - cyzhencha:'侦察', - cyzhencha_info:'出牌阶段限一次,若你的装备区内的可强化装备,你可以弃置一张基本牌并观看一名其他角色的手牌,若其中有与你弃置的牌颜色相同的牌,你随机升级装备区内的一件装备,否则你摸一张牌;你根据装备区内升级的装备数获得额外技能', - cylingjia:'灵甲', - cylingjia_info:'出牌阶段限一次,你可以弃置一张装备牌,然后令云狐随机装备一件装备(不替换现有装备)并将其强化', - cyqiaobo:'巧补', - cyqiaobo_info:'出牌阶段限一次,你可以弃置一张锦囊牌,然后令云狐回复一点体力', - cqiaoxie:'巧械', - cqiaoxie_info:'出牌阶段限一次,你可以将一张锦囊牌当作零件袋使用;每当你使用一张零件牌,你获得一点技能点数', - xiufu:'修复', - xiufu_info:'出牌阶段,你可以弃置一张装备牌或机关牌,令云狐回复一点体力', - yhshengong:'神工', - yhshengong_info:'游戏开始时,你获得3点技能点数;每当你造成一点伤害,你获得一点技能点数;出牌阶段,你可以通过消耗技能点令云狐获得新的技能(云狐体力为0时无法学习或发动技能)', - juxi:'聚息', - juxi_info:'锁定技,每当一名角色于其回合外弃置牌,你获得一枚聚息标记;出牌阶段限一次,你可以移去X枚聚息标记,然后选择一项:对一名角造成一点伤害,或令一名角色回复一点体力,X为存活角色数', - yeying:'曳影', - yeying_info:'出牌阶段限一次,你可以将一张黑色牌当作乾坤镖使用', - jiefen:'解纷', - jiefen_info:'出牌阶段限一次,你可以令一名手牌数多于你的角色交给你一张牌,然后你交给一名手牌数少于你的角色一张牌', - datong:'大同', - datong_info:'任意一名角色的结束阶段,若全场手牌数最多和最少的角色手牌数之差不超过1,你摸两张牌', - huodan:'火丹', - huodan_info:'出牌阶段限一次,你可以弃置一张红色牌并失去一点体力,然后将两点火属性伤害分配给1~2名角色', - huodan_info_alter:'出牌阶段限一次,你可以弃置一张红色牌并失去一点体力,然后将两点火属性伤害分配给1~2名角色;若你只分配了一名角色,该角色在结算后摸一张牌', - sxianjing:'陷阱', - sxianjing_bg:'阱', - sxianjing_info:'出牌阶段,你可以将一张手牌背面朝上置于你的武将牌上(不能与已有花色相同)。当一名其他角色使用与一张“陷阱”牌花色相同的牌指定你为目标时,你移去对应的“陷阱”牌,然后随机获得该角色的一张牌。每当你受到一次伤害,你随机将一张“陷阱”牌返回手牌', - zhanxing:'占星', - zhanxing_info:'出牌阶段限一次,你可以弃置任意张牌,并亮出牌堆顶的等量的牌,并根据亮出的牌包含的花色执行以下效果:♦︎摸两张牌;♥回复一点体力(若未损失体力改为获得一点护甲);♣令所有敌人随机弃置一张牌;♠令一名角色受到一点无来源的雷属性伤害', - kbolan:'博览', - kbolan_info:'每当你摸牌时,你可以额外摸一张牌,然后摸牌结束时将一张手牌置于牌堆顶', - gaizao:'改造', - gaizao_info:'每当你即将装备一张牌(特殊类装备除外),若你的装备区内对应位置已有牌,你可以永久改变此牌的装备类型使其装备在装备区内的空余位置', - lingshi:'灵矢', - lingshi_info:'你的装备区内每有一张牌,你的攻击范围+2;当你的装备区内有武器牌或防具牌时,你的杀不可闪避;当你的装备区内有马时,你摸牌阶段额外摸一张牌;当你的装备内的宝物牌时,你回合内可以额外使用一张杀', - tiebi:'铁壁', - tiebi_info:'当距离你1以内的一名角色成为杀的目标时,若其没有护甲,你可以弃置一张黑色手牌使其获得一点护甲', - shenyan:'神炎', - shenyan_bg:'炎', - shenyan_info:'限定技,当你即将造成火焰伤害时,你可以令此伤害+1,并对目标距离1以内的所有其他角色各造成一点火焰伤害', - xuanying:'旋影', - xuanying_info:'你可以横置你的武将牌,视为使用一张无视距离的杀;每当你于回合外失去牌,你可以竖置你的武将牌,视为使用一张无视距离的杀', - hwendao:'问道', - hwendao_info:'每当你于回合外使用或打出一张牌,你可以令当前回合角色弃置一张与之花色相同的牌,否则你获得其一张牌', - lingfeng:'凌锋', - lingfeng_info:'结束阶段,若你本回合内使用了至少X张牌,你可以选择一项:获得一点护甲,或对攻击范围内的一名角色造成一点伤害(X为你当前的体力值且最多为3)', - hxunzhi:'殉志', - hxunzhi_info:'限定技,出牌阶段,你可以视为使用一张万箭齐发并获得技能武圣、咆哮,若如此做,你在此阶段结束时死亡', - hxunzhi_info_alter:'限定技,出牌阶段,你可以获得技能武圣、咆哮,若如此做,你在此阶段结束时死亡', - lmazui:'麻醉', - lmazui2:'麻醉', - lmazui_info:'出牌阶段限一次,你可以将一张黑色手牌置于一名角色的武将牌上,该角色造成的下一次伤害-1,然后获得此牌', - hyunshen:'云身', - hyunshen2:'云身', - hyunshen_info:'每当你打出一张闪,你可以令你的防御距离+1;准备阶段,你将累计的防御距离清零,然后摸等量的牌', - hlingbo:'凌波', - hlingbo_info:'每当你使用或打出一张闪,你可以摸两张牌', - gtiandao:'天道', - gtiandao_info:'任意一名角色的判定生效前,你可以打出一张牌替换之', - nlianji:'连计', - nlianji_info:'出牌阶段限一次,你可以选择一张手牌并指定两名角色进行拼点,拼点赢的角色获得此牌,并对没赢的角色造成一点伤害', - fengze:'风泽', - fengze_info:'出牌阶段限一次,你可以将一张黑色牌当作桃园结义使用', - lingyue:'凌月', - lingyue_info:'每当你使用一张杀,你可以令目标弃置一张牌', - jinlin:'金鳞', - jinlin_info:'限定技,出牌阶段,你可以令任意名角色各获得3点护甲,获得护甲的角色于每个准备阶段失去1点护甲直到首次失去所有护甲或累计以此法失去3点护甲', - huanxia:'幻霞', - huanxia_info:'你可以将一张红色牌当作杀使用,若此杀未造成伤害,你在结束阶段收回此牌', - jingjie:'幻镜', - jingjie_info:'准备阶段,你可以流失一点体力,并', - jingjie_old_info:'限定技,出牌阶段,你可以令所有角色弃置所有牌,然后摸两张牌(不触发任何技能)', - kongmo:'恐魔', - kongmo_info:'锁定技,你使用基本牌或普通锦囊牌后将额外结算一次卡牌效果', - jufu:'巨斧', - jufu_info:'锁定技,当你有武器牌时,杀造成的伤害+1', - huajing:'化精', - huajing_info:'每当你使用锦囊牌造成伤害,可以回复一点体力并摸一张牌', - pingxu:'冯虚', - pingxu_info:'锁定技,当你没有武器牌时,你的进攻距离+1;当你没有防具牌时,你的防御距离+1', - yudun:'愚钝', - yudun_info:'锁定技,你无法使用锦囊牌;你可以将两张锦囊牌当作一张不计入出杀次数的杀使用', - bingfeng:'冰封', - bingfeng2:'冰封', - bingfeng2_info:'不能使用或打出手牌', - bingfeng_info:'限定技,出牌阶段,你可以指定至多三个目标与其一同翻面,且处于翻面状态时不能使用或打出手牌;若如此做,你失去技能玄咒并减少一点体力上限', - guozao:'聒噪', - guozao_info:'锁定技,每当距离你1以内的角色受到一次伤害,若伤害来源不你,你须观看牌堆顶的三张牌,然后指定距离2以内的一名有手牌角色将手牌与这些牌交换', - guozao_info_alter:'锁定技,每当距离你1以内的角色受到一次伤害,若伤害来源不你,你须观看牌堆顶的三张牌,然后指定距离1以内的一名有手牌角色将手牌与这些牌交换', - heihuo:'黑火', - heihuo_info:'出牌阶段,你可以弃置一张装备牌,令你的手牌数加倍;若你的手牌因此达到8张或更多,你立即受到3点火焰伤害且本回合内不能再次发动黑火', - yaotong:'妖瞳', - yaotong1:'妖瞳', - yaotong2:'妖瞳', - yaotong3:'妖瞳', - yaotong4:'妖瞳', - yaotong_info:'当你的手牌数为奇数时,你可以将一张手牌当作杀或闪使用或打出,当你的手牌数为偶数时,你可以将一张手牌当作无懈可击使用', - yaotong_info_alter:'当你的手牌数为奇数时,你可以将一张手牌当作杀使用或打出,当你的手牌数为偶数时,你可以将一张手牌当作无懈可击使用', - pojian:'破茧', - pojian_info:'每当你失去最后一张手牌,可以从牌堆中获得一张装备牌并装备之', - huajin:'化金', - huajin2:'化金', - huajin_info:'出牌阶段限一次,你可以弃置一张牌令你造成的伤害+1,直到你的下一回合开始', - poxiao:'破霄', - poxiao_info:'你可以将一张装备牌当杀使用;当你没有武器牌时,你的攻击范围+1,杀可以额外指定一个目标', - jianji:'箭疾', - jianji_info:'你可以将一张装备牌当杀使用,然后摸一张牌,此杀无视距离和防具,且不计入回合内出杀限制', - yuchen:'浴尘', - yuchen_info:'每当你于回合外使用或打出一张黑色牌,你可以弃置一名角色的一张牌', - huangyu:'凰羽', - huangyu_info:'出牌阶段限一次,你可以将两张红色牌当炽羽袭使用', - bingjian:'冰箭', - bingjian_info:'出牌阶段限一次,你可以弃置一张黑色的杀,令一名有手牌的其他角色展示手牌并弃置其中的所有闪,若其没有闪则受到一点雷电伤害', - rumeng:'入梦', - rumeng_info:'其他角色的出牌阶段前,你可以弃置一张非基本牌,并令其选择一项:弃置一张基本牌,或跳过出牌及弃牌阶段', - lianda:'连打', - lianda_info:'当你使用一杀结算完毕后,可以弃置一张牌视为对目标再使用一张杀', - xianghui:'祥晖', - xianghui_info:'出牌阶段限一次,你可以弃置一张红色手牌,然后令场上体力值最少的角色各回复一点体力', - huiqi:'回气', - huiqi_info:'每当你受到一次伤害,可令一名其他角色摸X张牌,X为你已损失的体力值', - toudan:'投弹', - toudan_info:'出牌阶段限一次,你可以弃置一张黑桃牌对一名其他角色造成一点火焰伤害,然后你与距离该角色1以内的所有角色各弃置一张牌', - shending:'神丁', - shending_info:'锁定技,若你没有宝物牌,视为装备了蓝格怪衣', - hzhenwei:'镇卫', - hzhenwei_info:'当一名其他角色成为杀的目标后,若你在杀的使用者的攻击范围内,你可以弃置一张牌将此杀转移给自己,并在杀结算完毕后摸一张牌', - shoulie:'狩猎', - shoulie_info:'当你使用一张杀指定目标后,可以弃置一张手牌令此杀不可闪避', - hudun:'盾甲', - hudun_bg:'盾', - hudun2:'盾甲', - hudun_info:'锁定技,当你对其他角色造成伤害后,若你没有护甲,你获得一点护甲值', - zhenjiu:'针灸', - zhenjiu2:'针灸', - zhenjiu_info:'出牌阶段限一次,你可以将一张红色手牌置于一名角色的武将牌上,该角色于下一个准备阶段回复一点体力,然后获得此牌', - ljifeng:'疾风', - ljifeng_info:'锁定技,你的攻击范围+X,杀可以额外指定X个目标,X为你已损失的体力值', - lxianglong:'翔龙', - lxianglong_info:'每当你闪避一张杀,你可以视为使用一张杀', - shangxi:'伤袭', - shangxi_info:'准备阶段,你可以弃置一张牌,并对攻击范围内一名体力值不小于你的其他角色造成一点伤害', - fzhenwei:'镇威', - fzhenwei_info:'在你的回合内,你可以将其他角色打出的卡牌交给除该角色外的任意一名角色', - fuyan:'覆岩', - fuyan2:'覆岩', - fuyan_info:'每当你受到一次伤害,可以令一名没有护甲的角色获得一点护甲值', - guaili:'怪力', - guaili_info:'锁定技,你的杀造成的伤害+1,造成伤害后需弃置两张手牌', - pingshen:'凭神', - pingshen2:'凭神', - pingshen_info:'锁定技,受到过你的伤害的角色可在回合内对你发动一次【离魂】(每局限发动一次)', - xingzhui:'星坠', - xingzhui_info:'出牌阶段限一次,你可以弃置一张牌,并令一名有牌的其他角色弃置一张类别相同的牌,若则受到一点伤害', - lingxian:'凌仙', - lingxian_info:'每当你于回合外使用或打出一张手牌,你可以选择攻击范围外的一名其他角色与你各摸一张牌', - shouyin:'守印', - shouyin_info:'限定技,当任意一名角色处于濒死状态时,若你的武将牌正朝上,可以将武将牌翻面,然后令场上所有存活角色将体力回复至体力上限', - shouyin_info_alter:'限定技,当任意一名角色处于濒死状态时,若你的武将牌正朝上,可以将武将牌翻面,然后令场上所有存活角色回复两点体力', - bofeng:'搏风', - bofeng_info:'锁定技,体力值不大于你的角色视为在你的攻击范围;当你使用杀指定目标时,可令目标额外打出一张闪,否则此杀不可闪避且造成的伤害+1', - hutian:'护天', - hutian2:'护天', - hutian3:'护天', - hutian_info:'结束阶段,你可以将任意张牌置于一名角色的武将牌上,则该角色的体力值始终不能小于“护天”牌数;在你的下一个结束阶段,该角色获得武将牌上的“护天”牌(在此回合不能再次发动)', - linyun:'凌云', - linyun_info:'你可以将两张牌当作杀使用,此杀需要额外一张闪才能闪避', - sliufeng:'流风', - sliufeng_info:'锁定技,体力值不大于你的角色视为在你的攻击范围', - chengjian:'承剑', - chengjian_info:'每当其他角色使用杀造成一次伤害,你可以令其摸一张牌', - huanling:'幻灵', - huanling2:'幻灵', - huanling_info:'结束阶段,你可以选择一名角色与你同时翻面;翻面状态下,你防止一切伤害', - xiaozhan:'消战', - xiaozhan_info:'其他角色使用杀时,若你不是杀的目标,可以弃置一张杀取消之', - xielei:'挟雷', - xielei_info:'每当你使用或打出一张杀,可以弃置一张牌并对目标以外的一名角色造成一点雷电伤害', - dangping:'荡平', - dangping_info:'每当你造成一次伤害,可以弃置一张手牌对其距离1以内的另一名角色造成一点伤害,每回合限一次', - guisi:'归思', - guisi_info:'每当你成为杀的目标,你可以交给对方一张手牌并取消之', - duishi:'对诗', - duishi_info:'出牌阶段,你可以弃置一张手牌,并指定一名有手牌的角色选择一项:1)弃置一张与之花色相同的手牌,本回合内对诗不能再次指定其为目标,2)令你获得其一张牌,对诗失效直到回合结束', - anlianying:'连营', - anlianying_info:'每当你失去最后一张手牌,可摸两张牌', - lianwu:'连舞', - lianwu_info:'锁定技,你的杀可以额外指定一个目标,你的红杀不可被闪避', - jiying:'疾鹰', - jiying_info:'锁定技,你使用杀无视距离', - daofa:'道法', - daofa_info:'每当有一名其他角色造成伤害,你可以令其弃置一张牌', - xiaomoyu:'魔愈', - xiaomoyu_info:'锁定技,每当你于一个回合内首次造成伤害,你回复一点体力,若你没有受伤,则改为摸一张牌', - yihua:'移花', - yihua_info:'每当你成为其他角色的某张卡牌的惟一目标时,你可以弃置两张手牌,将使用者与目标对调', - youyin:'游吟', - youyin_info:'每当有其他角色弃置卡牌时,若其中有非基本牌且你的手牌数不超过5,你可以摸一张牌', - rexue:'热血', - rexue_info:'任意一名角色的准备阶段,你可以对其使用一张杀,并摸一张牌', - huopu:'火瀑', - huopu_info:'出牌阶段限一次,你可以将一张红桃牌当作流星火羽使用', - benlei:'奔雷', - benlei2:'奔雷', - benlei_info:'你可以将三张牌当惊雷闪使用;每当你造成一次雷属性伤害,你回复一点体力', - lingwu:'灵舞', - lingwu_info:'回合结束后,若你在本回合内使用的牌数不少于当前体力值,你可以进行一个额外的回合(不可重复发动)', - miejing:'灭境', - miejing_info:'限制技,你可以弃置所有黑色牌,然后令所有其他角色受到一点雷电伤害', - lingxin:'灵心', - lingxin_info:'结束阶段,你可以亮出牌堆顶的三张牌,然后获得其中的红桃牌', - fushen:'附身', - fushen_info:'回合开始前,你可以将自己移出游戏,并代替另一名角色进行一回合,然后流失一点体力', - fushen2:'附身', - wangchen:'忘尘', - wangchen_info:'弃牌阶段结束时,若你于此阶段弃置了基本牌,你可以令一名角色翻面', - wangchen_info_alter:'弃牌阶段结束时,若你于此阶段弃置了基本牌,你可以令一名角色翻面并获得一点护甲', - // wangchen_info:'若你于弃牌阶段弃置了基本牌,可令一名角色翻面', - // wangchen_info:'弃牌阶段结束时,若你于此阶段弃置了基本牌,可将一名其他角色移出游戏直到你死亡或下一回合开始', - guiyin:'归隐', - guiyin_info:'若你于弃牌阶段弃置了至少两张牌,你可以摸两张牌', - shejie:'设界', - shejie2:'设界', - shejie_info:'每当你受到一次伤害,可以令伤害来源不能使用或打出其手牌,直到其下一回合开始', - shejie2_info:'不能使用或打出手牌,直到下一回合开始', - yinyue:'引月', - yinyue_info:'每当有一名角色回复一次体力,你可以令其摸一张牌,若你的手牌数不大于该角色,你也摸一张牌', - yinyue_info_alter:'每当有一名角色回复一次体力,你可以令其摸一张牌', - mohua2:'魔化', - mohua2_info:'锁定技,当你进入濒死状态时,你立即变身为撒旦,将体力回复至2,然后摸两张牌', - liexin:'裂心', - liexin_info:'每当你即将造成伤害,你可以弃置一张牌令伤害+1', - swdxueyi:'血裔', - swdxueyi_info:'锁定技,你摸牌阶段额外摸X张牌,X为你已损失的体力值', - moyan:'血焰', - moyan_info:'出牌阶段,你可以弃置X张红色手牌,然后对至多X名角色各造成一点火焰伤害,X为你已损失的体力值。每阶段限一次', - aojian:'傲剑', - aojian_info:'出牌阶段,你可以弃置X张手牌,然后对攻击范围内至多X名角色各造成一点伤害,X为你已损失的体力值。每阶段限一次', - milesxiehun:'邪魂', - milesxiehun_info:'锁定技,出牌阶段结束后,你令随机X名角色各弃置一张牌,X为你已损失的体力值且至少为1 ', - liaochen:'撩尘', - liaochen_info:'锁定技,出牌阶段结束后,所有角色需弃置一张牌', - yinmo:'引魔', - yinmo_info:'锁定技,当你对场上所有角色发动「连计」后,你立即变身为魔化宁珂,然后对所有其他角色造成一点雷电伤害', - huanxing:'幻形', - huanxing2:'幻形', - huanxing_info:'准备阶段,你可以弃置一张牌并选择一名男性角色,获得其所有技能,直到你首次受到伤害', - meihuo:'魅惑', - meihuo_info:'每当你失去最后一张装备牌,你可以获得一名其他角色的一张牌,若此牌来自装备区,你立即装备之', + cyshuiyun:'水云', + cyshuiyun_info:'准备阶段,你可以弃置一名其他角色的一张牌;每当你失去此技能,你可以弃置一名其他角色的一张牌', + cyliuzi:'流紫', + cyliuzi_info:'摸牌阶段,你可以额外摸一张牌;每当你失去此技能,你可以摸一张牌', + cyyijin:'异金', + cyyijin_info:'出牌阶段,你可以对一名体力值为全场最多的角色造成一点伤害;每当你失去此技能,你可以对一名体力值为全场最多的角色造成一点伤害', + cyqingling:'青凌', + cyqingling_info:'弃牌阶段,若你弃置了至少一张牌,你可以获得一点护甲;每当你失去此技能,你可以获得一点护甲', + cyqiandian:'千靛', + cyqiandian_info:'结束阶段,你可以视为使用一张惊雷闪;每当你失去此技能,你可以视为使用一张惊雷闪', + gxianyin:'仙音', + gxianyin_info:'出牌阶段限一次,你可以选择一种花色,将你的手牌中该花色的牌移至弃牌堆,然后选择另一种花色,从牌堆中获得等量的该花色的牌', + // gxianyin_info_alter:'', + cyxianjiang:'仙匠', + cyxianjiang_info:'每当你使用一张牌指定惟一目标时,你可以复制对方装备区内的一张你没有的牌,并置入你的装备区,同一回合对一名角色最多发动一次', + cyqiaoxie:'巧械', + cyqiaoxie_info:'每当你装备一件装备,你可以摸一张牌;每当你失去一件装备牌,你可以随机观看3张机关牌,并使用其中一张', + cyqiaoxie_info_alter:'每当你装备一件装备,若你的手牌数不大于体力值,你可以摸一张牌;每当你失去一件装备牌,你可以随机观看3张机关牌,并使用其中一张', + cyzhencha:'侦察', + cyzhencha_info:'出牌阶段限一次,若你的装备区内的可强化装备,你可以弃置一张基本牌并观看一名其他角色的手牌,若其中有与你弃置的牌颜色相同的牌,你随机升级装备区内的一件装备,否则你摸一张牌;你根据装备区内升级的装备数获得额外技能', + cylingjia:'灵甲', + cylingjia_info:'出牌阶段限一次,你可以弃置一张装备牌,然后令云狐随机装备一件装备(不替换现有装备)并将其强化', + cyqiaobo:'巧补', + cyqiaobo_info:'出牌阶段限一次,你可以弃置一张锦囊牌,然后令云狐回复一点体力', + cqiaoxie:'巧械', + cqiaoxie_info:'出牌阶段限一次,你可以将一张锦囊牌当作零件袋使用;每当你使用一张零件牌,你获得一点技能点数', + xiufu:'修复', + xiufu_info:'出牌阶段,你可以弃置一张装备牌或机关牌,令云狐回复一点体力', + yhshengong:'神工', + yhshengong_info:'游戏开始时,你获得3点技能点数;每当你造成一点伤害,你获得一点技能点数;出牌阶段,你可以通过消耗技能点令云狐获得新的技能(云狐体力为0时无法学习或发动技能)', + juxi:'聚息', + juxi_info:'锁定技,每当一名角色于其回合外弃置牌,你获得一枚聚息标记;出牌阶段限一次,你可以移去X枚聚息标记,然后选择一项:对一名角造成一点伤害,或令一名角色回复一点体力,X为存活角色数', + yeying:'曳影', + yeying_info:'出牌阶段限一次,你可以将一张黑色牌当作乾坤镖使用', + jiefen:'解纷', + jiefen_info:'出牌阶段限一次,你可以令一名手牌数多于你的角色交给你一张牌,然后你交给一名手牌数少于你的角色一张牌', + datong:'大同', + datong_info:'任意一名角色的结束阶段,若全场手牌数最多和最少的角色手牌数之差不超过1,你摸两张牌', + huodan:'火丹', + huodan_info:'出牌阶段限一次,你可以弃置一张红色牌并失去一点体力,然后将两点火属性伤害分配给1~2名角色', + huodan_info_alter:'出牌阶段限一次,你可以弃置一张红色牌并失去一点体力,然后将两点火属性伤害分配给1~2名角色;若你只分配了一名角色,该角色在结算后摸一张牌', + sxianjing:'陷阱', + sxianjing_bg:'阱', + sxianjing_info:'出牌阶段,你可以将一张手牌背面朝上置于你的武将牌上(不能与已有花色相同)。当一名其他角色使用与一张“陷阱”牌花色相同的牌指定你为目标时,你移去对应的“陷阱”牌,然后随机获得该角色的一张牌。每当你受到一次伤害,你随机将一张“陷阱”牌返回手牌', + zhanxing:'占星', + zhanxing_info:'出牌阶段限一次,你可以弃置任意张牌,并亮出牌堆顶的等量的牌,并根据亮出的牌包含的花色执行以下效果:♦︎摸两张牌;♥回复一点体力(若未损失体力改为获得一点护甲);♣令所有敌人随机弃置一张牌;♠令一名角色受到一点无来源的雷属性伤害', + kbolan:'博览', + kbolan_info:'每当你摸牌时,你可以额外摸一张牌,然后摸牌结束时将一张手牌置于牌堆顶', + gaizao:'改造', + gaizao_info:'每当你即将装备一张牌(特殊类装备除外),若你的装备区内对应位置已有牌,你可以永久改变此牌的装备类型使其装备在装备区内的空余位置', + lingshi:'灵矢', + lingshi_info:'你的装备区内每有一张牌,你的攻击范围+2;当你的装备区内有武器牌或防具牌时,你的杀不可闪避;当你的装备区内有马时,你摸牌阶段额外摸一张牌;当你的装备内的宝物牌时,你回合内可以额外使用一张杀', + tiebi:'铁壁', + tiebi_info:'当距离你1以内的一名角色成为杀的目标时,若其没有护甲,你可以弃置一张黑色手牌使其获得一点护甲', + shenyan:'神炎', + shenyan_bg:'炎', + shenyan_info:'限定技,当你即将造成火焰伤害时,你可以令此伤害+1,并对目标距离1以内的所有其他角色各造成一点火焰伤害', + xuanying:'旋影', + xuanying_info:'你可以横置你的武将牌,视为使用一张无视距离的杀;每当你于回合外失去牌,你可以竖置你的武将牌,视为使用一张无视距离的杀', + hwendao:'问道', + hwendao_info:'每当你于回合外使用或打出一张牌,你可以令当前回合角色弃置一张与之花色相同的牌,否则你获得其一张牌', + lingfeng:'凌锋', + lingfeng_info:'结束阶段,若你本回合内使用了至少X张牌,你可以选择一项:获得一点护甲,或对攻击范围内的一名角色造成一点伤害(X为你当前的体力值且最多为3)', + hxunzhi:'殉志', + hxunzhi_info:'限定技,出牌阶段,你可以视为使用一张万箭齐发并获得技能武圣、咆哮,若如此做,你在此阶段结束时死亡', + hxunzhi_info_alter:'限定技,出牌阶段,你可以获得技能武圣、咆哮,若如此做,你在此阶段结束时死亡', + lmazui:'麻醉', + lmazui2:'麻醉', + lmazui_info:'出牌阶段限一次,你可以将一张黑色手牌置于一名角色的武将牌上,该角色造成的下一次伤害-1,然后获得此牌', + hyunshen:'云身', + hyunshen2:'云身', + hyunshen_info:'每当你打出一张闪,你可以令你的防御距离+1;准备阶段,你将累计的防御距离清零,然后摸等量的牌', + hlingbo:'凌波', + hlingbo_info:'每当你使用或打出一张闪,你可以摸两张牌', + gtiandao:'天道', + gtiandao_info:'任意一名角色的判定生效前,你可以打出一张牌替换之', + nlianji:'连计', + nlianji_info:'出牌阶段限一次,你可以选择一张手牌并指定两名角色进行拼点,拼点赢的角色获得此牌,并对没赢的角色造成一点伤害', + fengze:'风泽', + fengze_info:'出牌阶段限一次,你可以将一张黑色牌当作桃园结义使用', + lingyue:'凌月', + lingyue_info:'每当你使用一张杀,你可以令目标弃置一张牌', + jinlin:'金鳞', + jinlin_info:'限定技,出牌阶段,你可以令任意名角色各获得3点护甲,获得护甲的角色于每个准备阶段失去1点护甲直到首次失去所有护甲或累计以此法失去3点护甲', + huanxia:'幻霞', + huanxia_info:'你可以将一张红色牌当作杀使用,若此杀未造成伤害,你在结束阶段收回此牌', + jingjie:'幻镜', + jingjie_info:'准备阶段,你可以流失一点体力,并', + jingjie_old_info:'限定技,出牌阶段,你可以令所有角色弃置所有牌,然后摸两张牌(不触发任何技能)', + kongmo:'恐魔', + kongmo_info:'锁定技,你使用基本牌或普通锦囊牌后将额外结算一次卡牌效果', + jufu:'巨斧', + jufu_info:'锁定技,当你有武器牌时,杀造成的伤害+1', + huajing:'化精', + huajing_info:'每当你使用锦囊牌造成伤害,可以回复一点体力并摸一张牌', + pingxu:'冯虚', + pingxu_info:'锁定技,当你没有武器牌时,你的进攻距离+1;当你没有防具牌时,你的防御距离+1', + yudun:'愚钝', + yudun_info:'锁定技,你无法使用锦囊牌;你可以将两张锦囊牌当作一张不计入出杀次数的杀使用', + bingfeng:'冰封', + bingfeng2:'冰封', + bingfeng2_info:'不能使用或打出手牌', + bingfeng_info:'限定技,出牌阶段,你可以指定至多三个目标与其一同翻面,且处于翻面状态时不能使用或打出手牌;若如此做,你失去技能玄咒并减少一点体力上限', + guozao:'聒噪', + guozao_info:'锁定技,每当距离你1以内的角色受到一次伤害,若伤害来源不你,你须观看牌堆顶的三张牌,然后指定距离2以内的一名有手牌角色将手牌与这些牌交换', + guozao_info_alter:'锁定技,每当距离你1以内的角色受到一次伤害,若伤害来源不你,你须观看牌堆顶的三张牌,然后指定距离1以内的一名有手牌角色将手牌与这些牌交换', + heihuo:'黑火', + heihuo_info:'出牌阶段,你可以弃置一张装备牌,令你的手牌数加倍;若你的手牌因此达到8张或更多,你立即受到3点火焰伤害且本回合内不能再次发动黑火', + yaotong:'妖瞳', + yaotong1:'妖瞳', + yaotong2:'妖瞳', + yaotong3:'妖瞳', + yaotong4:'妖瞳', + yaotong_info:'当你的手牌数为奇数时,你可以将一张手牌当作杀或闪使用或打出,当你的手牌数为偶数时,你可以将一张手牌当作无懈可击使用', + yaotong_info_alter:'当你的手牌数为奇数时,你可以将一张手牌当作杀使用或打出,当你的手牌数为偶数时,你可以将一张手牌当作无懈可击使用', + pojian:'破茧', + pojian_info:'每当你失去最后一张手牌,可以从牌堆中获得一张装备牌并装备之', + huajin:'化金', + huajin2:'化金', + huajin_info:'出牌阶段限一次,你可以弃置一张牌令你造成的伤害+1,直到你的下一回合开始', + poxiao:'破霄', + poxiao_info:'你可以将一张装备牌当杀使用;当你没有武器牌时,你的攻击范围+1,杀可以额外指定一个目标', + jianji:'箭疾', + jianji_info:'你可以将一张装备牌当杀使用,然后摸一张牌,此杀无视距离和防具,且不计入回合内出杀限制', + yuchen:'浴尘', + yuchen_info:'每当你于回合外使用或打出一张黑色牌,你可以弃置一名角色的一张牌', + huangyu:'凰羽', + huangyu_info:'出牌阶段限一次,你可以将两张红色牌当炽羽袭使用', + bingjian:'冰箭', + bingjian_info:'出牌阶段限一次,你可以弃置一张黑色的杀,令一名有手牌的其他角色展示手牌并弃置其中的所有闪,若其没有闪则受到一点雷电伤害', + rumeng:'入梦', + rumeng_info:'其他角色的出牌阶段前,你可以弃置一张非基本牌,并令其选择一项:弃置一张基本牌,或跳过出牌及弃牌阶段', + lianda:'连打', + lianda_info:'当你使用一杀结算完毕后,可以弃置一张牌视为对目标再使用一张杀', + xianghui:'祥晖', + xianghui_info:'出牌阶段限一次,你可以弃置一张红色手牌,然后令场上体力值最少的角色各回复一点体力', + huiqi:'回气', + huiqi_info:'每当你受到一次伤害,可令一名其他角色摸X张牌,X为你已损失的体力值', + toudan:'投弹', + toudan_info:'出牌阶段限一次,你可以弃置一张黑桃牌对一名其他角色造成一点火焰伤害,然后你与距离该角色1以内的所有角色各弃置一张牌', + shending:'神丁', + shending_info:'锁定技,若你没有宝物牌,视为装备了蓝格怪衣', + hzhenwei:'镇卫', + hzhenwei_info:'当一名其他角色成为杀的目标后,若你在杀的使用者的攻击范围内,你可以弃置一张牌将此杀转移给自己,并在杀结算完毕后摸一张牌', + shoulie:'狩猎', + shoulie_info:'当你使用一张杀指定目标后,可以弃置一张手牌令此杀不可闪避', + hudun:'盾甲', + hudun_bg:'盾', + hudun2:'盾甲', + hudun_info:'锁定技,当你对其他角色造成伤害后,若你没有护甲,你获得一点护甲值', + zhenjiu:'针灸', + zhenjiu2:'针灸', + zhenjiu_info:'出牌阶段限一次,你可以将一张红色手牌置于一名角色的武将牌上,该角色于下一个准备阶段回复一点体力,然后获得此牌', + ljifeng:'疾风', + ljifeng_info:'锁定技,你的攻击范围+X,杀可以额外指定X个目标,X为你已损失的体力值', + lxianglong:'翔龙', + lxianglong_info:'每当你闪避一张杀,你可以视为使用一张杀', + shangxi:'伤袭', + shangxi_info:'准备阶段,你可以弃置一张牌,并对攻击范围内一名体力值不小于你的其他角色造成一点伤害', + fzhenwei:'镇威', + fzhenwei_info:'在你的回合内,你可以将其他角色打出的卡牌交给除该角色外的任意一名角色', + fuyan:'覆岩', + fuyan2:'覆岩', + fuyan_info:'每当你受到一次伤害,可以令一名没有护甲的角色获得一点护甲值', + guaili:'怪力', + guaili_info:'锁定技,你的杀造成的伤害+1,造成伤害后需弃置两张手牌', + pingshen:'凭神', + pingshen2:'凭神', + pingshen_info:'锁定技,受到过你的伤害的角色可在回合内对你发动一次【离魂】(每局限发动一次)', + xingzhui:'星坠', + xingzhui_info:'出牌阶段限一次,你可以弃置一张牌,并令一名有牌的其他角色弃置一张类别相同的牌,若则受到一点伤害', + lingxian:'凌仙', + lingxian_info:'每当你于回合外使用或打出一张手牌,你可以选择攻击范围外的一名其他角色与你各摸一张牌', + shouyin:'守印', + shouyin_info:'限定技,当任意一名角色处于濒死状态时,若你的武将牌正朝上,可以将武将牌翻面,然后令场上所有存活角色将体力回复至体力上限', + shouyin_info_alter:'限定技,当任意一名角色处于濒死状态时,若你的武将牌正朝上,可以将武将牌翻面,然后令场上所有存活角色回复两点体力', + bofeng:'搏风', + bofeng_info:'锁定技,体力值不大于你的角色视为在你的攻击范围;当你使用杀指定目标时,可令目标额外打出一张闪,否则此杀不可闪避且造成的伤害+1', + hutian:'护天', + hutian2:'护天', + hutian3:'护天', + hutian_info:'结束阶段,你可以将任意张牌置于一名角色的武将牌上,则该角色的体力值始终不能小于“护天”牌数;在你的下一个结束阶段,该角色获得武将牌上的“护天”牌(在此回合不能再次发动)', + linyun:'凌云', + linyun_info:'你可以将两张牌当作杀使用,此杀需要额外一张闪才能闪避', + sliufeng:'流风', + sliufeng_info:'锁定技,体力值不大于你的角色视为在你的攻击范围', + chengjian:'承剑', + chengjian_info:'每当其他角色使用杀造成一次伤害,你可以令其摸一张牌', + huanling:'幻灵', + huanling2:'幻灵', + huanling_info:'结束阶段,你可以选择一名角色与你同时翻面;翻面状态下,你防止一切伤害', + xiaozhan:'消战', + xiaozhan_info:'其他角色使用杀时,若你不是杀的目标,可以弃置一张杀取消之', + xielei:'挟雷', + xielei_info:'每当你使用或打出一张杀,可以弃置一张牌并对目标以外的一名角色造成一点雷电伤害', + dangping:'荡平', + dangping_info:'每当你造成一次伤害,可以弃置一张手牌对其距离1以内的另一名角色造成一点伤害,每回合限一次', + guisi:'归思', + guisi_info:'每当你成为杀的目标,你可以交给对方一张手牌并取消之', + duishi:'对诗', + duishi_info:'出牌阶段,你可以弃置一张手牌,并指定一名有手牌的角色选择一项:1)弃置一张与之花色相同的手牌,本回合内对诗不能再次指定其为目标,2)令你获得其一张牌,对诗失效直到回合结束', + anlianying:'连营', + anlianying_info:'每当你失去最后一张手牌,可摸两张牌', + lianwu:'连舞', + lianwu_info:'锁定技,你的杀可以额外指定一个目标,你的红杀不可被闪避', + jiying:'疾鹰', + jiying_info:'锁定技,你使用杀无视距离', + daofa:'道法', + daofa_info:'每当有一名其他角色造成伤害,你可以令其弃置一张牌', + xiaomoyu:'魔愈', + xiaomoyu_info:'锁定技,每当你于一个回合内首次造成伤害,你回复一点体力,若你没有受伤,则改为摸一张牌', + yihua:'移花', + yihua_info:'每当你成为其他角色的某张卡牌的惟一目标时,你可以弃置两张手牌,将使用者与目标对调', + youyin:'游吟', + youyin_info:'每当有其他角色弃置卡牌时,若其中有非基本牌且你的手牌数不超过5,你可以摸一张牌', + rexue:'热血', + rexue_info:'任意一名角色的准备阶段,你可以对其使用一张杀,并摸一张牌', + huopu:'火瀑', + huopu_info:'出牌阶段限一次,你可以将一张红桃牌当作流星火羽使用', + benlei:'奔雷', + benlei2:'奔雷', + benlei_info:'你可以将三张牌当惊雷闪使用;每当你造成一次雷属性伤害,你回复一点体力', + lingwu:'灵舞', + lingwu_info:'回合结束后,若你在本回合内使用的牌数不少于当前体力值,你可以进行一个额外的回合(不可重复发动)', + miejing:'灭境', + miejing_info:'限制技,你可以弃置所有黑色牌,然后令所有其他角色受到一点雷电伤害', + lingxin:'灵心', + lingxin_info:'结束阶段,你可以亮出牌堆顶的三张牌,然后获得其中的红桃牌', + fushen:'附身', + fushen_info:'回合开始前,你可以将自己移出游戏,并代替另一名角色进行一回合,然后流失一点体力', + fushen2:'附身', + wangchen:'忘尘', + wangchen_info:'弃牌阶段结束时,若你于此阶段弃置了基本牌,你可以令一名角色翻面', + wangchen_info_alter:'弃牌阶段结束时,若你于此阶段弃置了基本牌,你可以令一名角色翻面并获得一点护甲', + // wangchen_info:'若你于弃牌阶段弃置了基本牌,可令一名角色翻面', + // wangchen_info:'弃牌阶段结束时,若你于此阶段弃置了基本牌,可将一名其他角色移出游戏直到你死亡或下一回合开始', + guiyin:'归隐', + guiyin_info:'若你于弃牌阶段弃置了至少两张牌,你可以摸两张牌', + shejie:'设界', + shejie2:'设界', + shejie_info:'每当你受到一次伤害,可以令伤害来源不能使用或打出其手牌,直到其下一回合开始', + shejie2_info:'不能使用或打出手牌,直到下一回合开始', + yinyue:'引月', + yinyue_info:'每当有一名角色回复一次体力,你可以令其摸一张牌,若你的手牌数不大于该角色,你也摸一张牌', + yinyue_info_alter:'每当有一名角色回复一次体力,你可以令其摸一张牌', + mohua2:'魔化', + mohua2_info:'锁定技,当你进入濒死状态时,你立即变身为撒旦,将体力回复至2,然后摸两张牌', + liexin:'裂心', + liexin_info:'每当你即将造成伤害,你可以弃置一张牌令伤害+1', + swdxueyi:'血裔', + swdxueyi_info:'锁定技,你摸牌阶段额外摸X张牌,X为你已损失的体力值', + moyan:'血焰', + moyan_info:'出牌阶段,你可以弃置X张红色手牌,然后对至多X名角色各造成一点火焰伤害,X为你已损失的体力值。每阶段限一次', + aojian:'傲剑', + aojian_info:'出牌阶段,你可以弃置X张手牌,然后对攻击范围内至多X名角色各造成一点伤害,X为你已损失的体力值。每阶段限一次', + milesxiehun:'邪魂', + milesxiehun_info:'锁定技,出牌阶段结束后,你令随机X名角色各弃置一张牌,X为你已损失的体力值且至少为1 ', + liaochen:'撩尘', + liaochen_info:'锁定技,出牌阶段结束后,所有角色需弃置一张牌', + yinmo:'引魔', + yinmo_info:'锁定技,当你对场上所有角色发动「连计」后,你立即变身为魔化宁珂,然后对所有其他角色造成一点雷电伤害', + huanxing:'幻形', + huanxing2:'幻形', + huanxing_info:'准备阶段,你可以弃置一张牌并选择一名男性角色,获得其所有技能,直到你首次受到伤害', + meihuo:'魅惑', + meihuo_info:'每当你失去最后一张装备牌,你可以获得一名其他角色的一张牌,若此牌来自装备区,你立即装备之', - touxi:'偷袭', - touxi_info:'在其他角色的结束阶段,你可以进行一次判定,若结果为黑色,你对其造成一点雷电伤害,且直到下一回合开始不能再次发动偷袭;若结果为红色,对方可以弃置你的一张牌', - touxi_info_alter:'在其他角色的结束阶段,你可以进行一次判定,若结果为黑色,你对其造成一点雷电伤害,且直到下一回合开始不能再次发动偷袭;若结果为红色,对方可以获得你的一张牌', - minjing:'明镜', - minjing_info:'若你没有防具牌,你视为装备了光纱天衣', - jqimou:'奇谋', - jqimou_info:'每当你于回合外受到一次伤害,你可以摸一张牌,并可以使用一张牌', - mufeng:'沐风', - mufeng_info:'结束阶段,你可以将手牌数补至体力上限', - mufeng_info_alter:'结束阶段,你可以将手牌数补至当前体力值', - mufeng_old2_info:'在一名角色的结束阶段,若你的手牌数比其少,你可以将手牌补至与该角色相同(最多补至5),每轮限一次', - hjifeng:'祭风', - hjifeng_info:'出牌阶段限一次,若你手牌中没有祭器牌,你可以将一张手牌置于牌堆顶,并根据其花色获得对应祭器:黑桃-青龙之圭;梅花-白兽之琥;方片-朱雀之璋;红桃-玄武之璜', - mufeng_old_info:'锁定技,每当你于回合外失去牌,你的防御距离+1;若防御距离的变化值超过了存活角色数的一半,则降至0', - lexue:'乐学', - lexue_info:'回合内,你随机获得制衡、集智、缔盟、驱虎中的一个技能;回合外,你随机获得遗计、急救、鬼道、反馈中的一个技能', - mingfu:'冥缚', - mingfu_info:'出牌阶段限一次,你可以将一张梅花牌当鬼幽结使用', - chuanyue:'穿月', - chuanyue_info:'出牌阶段限一次,你可以将两张手牌当决斗使用', + touxi:'偷袭', + touxi_info:'在其他角色的结束阶段,你可以进行一次判定,若结果为黑色,你对其造成一点雷电伤害,且直到下一回合开始不能再次发动偷袭;若结果为红色,对方可以弃置你的一张牌', + touxi_info_alter:'在其他角色的结束阶段,你可以进行一次判定,若结果为黑色,你对其造成一点雷电伤害,且直到下一回合开始不能再次发动偷袭;若结果为红色,对方可以获得你的一张牌', + minjing:'明镜', + minjing_info:'若你没有防具牌,你视为装备了光纱天衣', + jqimou:'奇谋', + jqimou_info:'每当你于回合外受到一次伤害,你可以摸一张牌,并可以使用一张牌', + mufeng:'沐风', + mufeng_info:'结束阶段,你可以将手牌数补至体力上限', + mufeng_info_alter:'结束阶段,你可以将手牌数补至当前体力值', + mufeng_old2_info:'在一名角色的结束阶段,若你的手牌数比其少,你可以将手牌补至与该角色相同(最多补至5),每轮限一次', + hjifeng:'祭风', + hjifeng_info:'出牌阶段限一次,若你手牌中没有祭器牌,你可以将一张手牌置于牌堆顶,并根据其花色获得对应祭器:黑桃-青龙之圭;梅花-白兽之琥;方片-朱雀之璋;红桃-玄武之璜', + mufeng_old_info:'锁定技,每当你于回合外失去牌,你的防御距离+1;若防御距离的变化值超过了存活角色数的一半,则降至0', + lexue:'乐学', + lexue_info:'回合内,你随机获得制衡、集智、缔盟、驱虎中的一个技能;回合外,你随机获得遗计、急救、鬼道、反馈中的一个技能', + mingfu:'冥缚', + mingfu_info:'出牌阶段限一次,你可以将一张梅花牌当鬼幽结使用', + chuanyue:'穿月', + chuanyue_info:'出牌阶段限一次,你可以将两张手牌当决斗使用', - miedao:'灭道', - miedao1:'灭道', - miedao2:'灭道', - miedao_info:'锁定技,摸牌阶段,你额外摸X张牌;弃牌阶段,你至少须弃X张牌(不足则全弃),X为你已损失的体力值。', + miedao:'灭道', + miedao1:'灭道', + miedao2:'灭道', + miedao_info:'锁定技,摸牌阶段,你额外摸X张牌;弃牌阶段,你至少须弃X张牌(不足则全弃),X为你已损失的体力值。', - senluo:'森罗', - senluo_info:'出牌阶段限一次,若你的手牌数为全场最少或之一,你可以令所有有手牌的其他角色弃置两张手牌然后摸一张牌', - polang:'破浪', - polang_info:'每当你造成一次伤害,可以一张对方的装备牌', - jikong:'亟空', - jikong2:'亟空', - jikong_info:'准备阶段,你可以指定一名角色视为对其使用一张雷杀;每当你失去最后一张手牌,你可以指定一名角色视为对其使用一张雷杀(每回合限发动一次)', - jikong_info_alter:'准备阶段,你可以指定一名角色视为对其使用一张雷杀', - xiangu:'仙骨', - xiangu_info:'锁定技,你的手牌上限不会因体力值的减少而减少。', - hujing:'壶境', - hujing_info:'锁定技,准备阶段,若牌堆或弃牌堆中有炼妖壶,你装备之;当你的装备区内有炼妖壶时,你的手牌上限+2', - huajian:'化剑', - huajian_info:'出牌阶段结束时,你可以将一张牌当作杀对任意一名角色使用', - xuanyuan:'轩辕', - xuanyuan_info:'锁定技,你无视【轩辕剑】的装备条件及流失体力的效果;准备阶段,你可以从场上或弃牌堆中获得【轩辕剑】', - jilve:'极略', - jilve_backup:'极略', - jilve2:'极略', - jilve_info:'出牌阶段,你可以观看牌堆顶的三张牌,然后使用其中的非装备牌。每回合最多发动三次', - jilve_info_alter:'出牌阶段,你可以观看牌堆顶的两张牌,然后使用其中的非装备牌。每回合最多发动三次', - gongshen:'工神', - gongshen_info:'任意一名其他角色使用一张基本牌或锦囊牌指定目标后,你可以弃置一张装备牌令其失效', + senluo:'森罗', + senluo_info:'出牌阶段限一次,若你的手牌数为全场最少或之一,你可以令所有有手牌的其他角色弃置两张手牌然后摸一张牌', + polang:'破浪', + polang_info:'每当你造成一次伤害,可以一张对方的装备牌', + jikong:'亟空', + jikong2:'亟空', + jikong_info:'准备阶段,你可以指定一名角色视为对其使用一张雷杀;每当你失去最后一张手牌,你可以指定一名角色视为对其使用一张雷杀(每回合限发动一次)', + jikong_info_alter:'准备阶段,你可以指定一名角色视为对其使用一张雷杀', + xiangu:'仙骨', + xiangu_info:'锁定技,你的手牌上限不会因体力值的减少而减少。', + hujing:'壶境', + hujing_info:'锁定技,结束阶段,若牌堆或弃牌堆中有炼妖壶,你装备之;当你的装备区内有炼妖壶时,你的手牌上限+2', + huajian:'化剑', + huajian_info:'出牌阶段结束时,你可以将一张牌当作杀对任意一名角色使用', + xuanyuan:'轩辕', + xuanyuan_info:'锁定技,你无视【轩辕剑】的装备条件及流失体力的效果;准备阶段,你可以从场上或弃牌堆中获得【轩辕剑】', + jilve:'极略', + jilve_backup:'极略', + jilve2:'极略', + jilve_info:'出牌阶段,你可以观看牌堆顶的三张牌,然后使用其中的非装备牌。每回合最多发动三次', + jilve_info_alter:'出牌阶段,你可以观看牌堆顶的两张牌,然后使用其中的非装备牌。每回合最多发动三次', + gongshen:'工神', + gongshen_info:'任意一名其他角色使用一张基本牌或锦囊牌指定目标后,你可以弃置一张装备牌令其失效', - liuhong:'流虹', - liuhong_info:'每当你使用一张杀,可以摸一张牌', - poyue:'破月', - poyue_info:'锁定技,你的黑杀无视距离,红色杀不计入回合内的出杀限制且不可闪避', - poyue_info_alter:'锁定技,你的黑杀无视距离,红色杀不可闪避', - mojian:'墨剑', - mojian_info:'每当你使用杀并指定目标后,你可以令其摸一张牌,然后你回复一点体力', - duanyue:'断月', - duanyue_info:'出牌阶段限一次,你可以弃置一张装备牌,对一名其他角色造成一点伤害', - tuzhen:'突阵', - tuzhen_info:'当你造成一次伤害后,你可以弃置对方手牌中的非基本牌', - tuzhen_info_alter:'当你造成一次伤害后,你可以弃置对方手牌中的一张非基本牌', - fengmo:'封魔', - fengmo_info:'出牌阶段限一次,你可以弃置场所有武器牌(至少两张),然后令一名未翻面的角色摸等量的牌并翻面', - pozhou:'破咒', - pozhou_bg:'破', - pozhou2:'破咒', - pozhou_info:'每当你受到一次伤害,你获得一枚破咒标记。出牌阶段,你可以指定任意名其他角色并弃置等量的破咒标记,令目标的非锁定技失效直到其下一回合结束', - xuanzhou:'玄咒', - xuanzhou_info:'出牌阶段限一次,你可以将一张普通锦囊牌当作任意一张延时锦囊,对任意一名角色使用(无视锦囊使用范围限制)', - ningxian:'凝霰', - ningxian_info:'每当你受到一次伤害,你可以弃置任意张黑色牌并选择等量其他角色对其各造成一点伤害', - guanhu:'贯鹄', - guanhu_info:'每当你使用杀造成伤害,你可以弃置对方一张手牌和一张装备牌', - chuanyang:'穿杨', - chuanyang_info:'每当你使用一张杀,若你不在目标的攻击范围,你可以令此杀不可闪避', - fengming:'凤鸣', - fengming_info:'出牌阶段限一次,你可以弃置一张装备牌,令一名角色恢复一点体力并摸一张牌', - duanxing:'锻星', - duanxing_info:'每当你装备一张未强化的装备牌,可以视为一名角色使用一张杀', - wanjun:'万钧', - wanjun_info:'你可以将一张装备牌当作南蛮入侵使用', - dunxing:'遁形', - dunxing_info:'当你成为其他角色卡牌的目标时,你可以弃置一张牌并进行一次判定,若不为红桃,则取消之', - guiying:'鬼影', - guiying_info:'你可以将一张黑色牌当偷梁换柱使用', - shehun:'摄魂', - shehun_info:'出牌阶段限一次,你可以弃置任意张花色不同的牌,另一名其他角色弃置等量的牌,若其弃置的牌中有牌的花色与你弃置的牌相同,你对其造成一点伤害', + liuhong:'流虹', + liuhong_info:'每当你使用一张杀,可以摸一张牌', + poyue:'破月', + poyue_info:'锁定技,你的黑杀无视距离,红色杀不计入回合内的出杀限制且不可闪避', + poyue_info_alter:'锁定技,你的黑杀无视距离,红色杀不可闪避', + mojian:'墨剑', + mojian_info:'每当你使用杀并指定目标后,你可以令其摸一张牌,然后你回复一点体力', + duanyue:'断月', + duanyue_info:'出牌阶段限一次,你可以弃置一张装备牌,对一名其他角色造成一点伤害', + tuzhen:'突阵', + tuzhen_info:'当你造成一次伤害后,你可以弃置对方手牌中的非基本牌', + tuzhen_info_alter:'当你造成一次伤害后,你可以弃置对方手牌中的一张非基本牌', + fengmo:'封魔', + fengmo_info:'出牌阶段限一次,你可以弃置场所有武器牌(至少两张),然后令一名未翻面的角色摸等量的牌并翻面', + pozhou:'破咒', + pozhou_bg:'破', + pozhou2:'破咒', + pozhou_info:'每当你受到一次伤害,你获得一枚破咒标记。出牌阶段,你可以指定任意名其他角色并弃置等量的破咒标记,令目标的非锁定技失效直到其下一回合结束', + xuanzhou:'玄咒', + xuanzhou_info:'出牌阶段限一次,你可以将一张普通锦囊牌当作任意一张延时锦囊,对任意一名角色使用(无视锦囊使用范围限制)', + ningxian:'凝霰', + ningxian_info:'每当你受到一次伤害,你可以弃置任意张黑色牌并选择等量其他角色对其各造成一点伤害', + guanhu:'贯鹄', + guanhu_info:'每当你使用杀造成伤害,你可以弃置对方一张手牌和一张装备牌', + chuanyang:'穿杨', + chuanyang_info:'每当你使用一张杀,若你不在目标的攻击范围,你可以令此杀不可闪避', + fengming:'凤鸣', + fengming_info:'出牌阶段限一次,你可以弃置一张装备牌,令一名角色恢复一点体力并摸一张牌', + duanxing:'锻星', + duanxing_info:'每当你装备一张未强化的装备牌,可以视为一名角色使用一张杀', + wanjun:'万钧', + wanjun_info:'你可以将一张装备牌当作南蛮入侵使用', + dunxing:'遁形', + dunxing_info:'当你成为其他角色卡牌的目标时,你可以弃置一张牌并进行一次判定,若不为红桃,则取消之', + guiying:'鬼影', + guiying_info:'你可以将一张黑色牌当偷梁换柱使用', + shehun:'摄魂', + shehun_info:'出牌阶段限一次,你可以弃置任意张花色不同的牌,另一名其他角色弃置等量的牌,若其弃置的牌中有牌的花色与你弃置的牌相同,你对其造成一点伤害', - zhanlu:'沾露', - luomu:'落木', - jifeng:'魔影', - liaoyuan:'燎原', - huanhun:'唤魂', - daixing:'代形', - yishan:'异闪', - yishan2:'异闪', - swd_wuxie:'无邪', - lqingcheng:'倾城', - xianjiang:'仙匠', - xianjiang3:'仙匠', - shengong:'神工', - ningjian:'凝剑', - ningjian1:'凝剑', - ningjian2:'凝剑', - taixu:'太虚', - duoren:'夺刃', - tanlin:'探麟', - tanlin2:'探麟', - pozhen:'破阵', - yunchou:'运筹', - tianshu:'天书', - tianshu_bg:'书', - tianshu2:'天书', - xingdian:'星点', - luomei:'落梅', - yulin:'玉鳞', - funiao:'符鸟', - xuehuang:'血凰', - xuehuang_bg:'凰', - zhuyu:'朱羽', - ningshuang:'凝霜', - zaowu:'造物', - // shouhua:'收化', - xielv:'谐率', - tianhuo:'天火', - huanyin:'幻音', - tianlun:'天轮', - hlongyin:'龙吟', - lanzhi:'兰芷', - duanyi:'断意', - miesheng:'灭生', - guxing:'孤星', - guxing1:'孤星', - guxing2:'孤星', - poxing:'破星', - mohua:'魔化', - miles_xueyi:'血裔', - wuying:'无影', - xiehun:'邪魂', - xiehun1:'邪魂', - xiehun2:'邪魂', - xiehun3:'邪魂', - jumo:'聚魔', - duijue:'对决', - duijue_bg:'决', - yueren:'月刃', - busi:'不死', - xuying:'虚影', - yinguo:'因果', - guiyan:'鬼眼', - guiyan2:'鬼眼', - swd_xiuluo:'修罗', - suiyan:'碎岩', - suiyan_info:'每当你造成一次伤害,可以弃置一张牌并弃置对方的全部装备牌', - xianyin:'散结', - qiaoxie:'巧械', - qiaoxie2:'巧械', - qiaoxie3:'巧械', - qiaoxie4:'巧械', - mailun:'脉轮', - mailun31:'脉轮', - mailun32:'脉轮', - mailun41:'脉轮', - mailun42:'脉轮', - kunlunjing:'幻镜', - kunlunjing1:'幻镜', - kunlunjing2:'幻镜', - susheng:'苏生', - shengshou:'圣手', - huanjian:'幻箭', - huanjian_info:'出牌阶段,你可以将一张黑色牌当作冰魄针使用', - shengshou_info:'你可以将一张黑色手牌当作草药使用', - susheng_info:'在任意一名角色即将死亡时,你可以弃置一张手牌防止其死亡,并将其体力回复至1,每回合限发动一次', - susheng_info_alter:'在任意一名角色即将死亡时,你可以弃置一张红色手牌防止其死亡,并将其体力回复至1,每回合限发动一次', - zhanlu_info:'出牌阶段限一次,你可以弃置一张黑桃牌令至多3名角色各回复一点体力', - kunlunjing_info:'准备阶段,若你的体力值小于上回合结束时的体力值,你可以将场上所有牌还原到你上一回合结束时的位置', - kunlunjing_info_alter:'准备阶段,若你的体力值小于上回合结束时的体力值,你可以将场上所有牌还原到你上一回合结束时的位置,然后流失一点体力', - swd_xiuluo_info:'准备阶段,你可以弃一张手牌来弃置你判断区里的一张延时类锦囊(必须花色相同)', - xianyin_info:'出牌阶段,你可以令所有判定区内有牌的角色弃置判定区内的牌,然后交给你一张手牌', - qiaoxie_info:'每当你装备一张牌,可摸一张牌;每当你失去一张装备牌(不含替换),你可以弃置其他角色的一张牌', - mailun_info:'准备阶段,你可以选择一个脉轮效果直到下一回合开始', - guiyan_info:'出牌阶段,你可以观看一名角色的手牌,并获得其中一张梅花牌,每阶段限一次。当你首次进入濒死状态时,你须回复一点体力并失去技能鬼眼', - busi_info:'锁定技,当你进入濒死状态时,你进行一次判定,若结果不为黑桃,你将体力回复至1并将武将牌翻至背面', - xuying_info:'锁定技,每当你即将受到伤害,你防止此伤害,若你此时有手牌,你流失一点体力', - yinguo_info:'除你之外的任意一名角色即将受到受到伤害时,若有伤害来源,你可以弃置一张牌将伤害来源和目标对调', - yueren_info:'每当你使用一张杀,可以进行一次判定,若结果为黑色,你弃置目标一张牌,若结果为红色,你将此杀收回,每回合限发动一次', - duijue_info:'限定技,出牌阶段,你可以指定一名体力值大于1的其他角色,你结束出牌阶段,并在回合结束后将所有其他角色移出游戏,然后该角色与你轮流进行回合,直到有一方死亡或一共进行六个回合为止', - wuying_info:'锁定技,你的杀和单体x锦囊目标锁定为范围内的所有角色', - xiehun_info:'锁定技,受到来自你伤害的角色进入混乱状态,行为不受控制,且会攻击队友,直到你的下一回合开始', - jumo_info:'锁定技,结束阶段,你摸X-1张牌,X为未进入混乱状态的角色数与进入混乱状态的角色数之差(若为双将则改为X)', - jifeng_info:'你的杀和单体锦囊可以额外指定任意个目标,若如此做,此卡牌有一定机率失效,指定的目标越多失效的概率越大', - mohua_info:'锁定技,在身份局中,当你进入濒死状态时,你立即变身为撒旦,体力上限变为现存角色数(至少为4),并成为其他所有角色的共同敌人', - miles_xueyi_info:'锁定技,你防止即将受到的伤害,然后流失一点体力', - duanyi_info:'出牌阶段限一次,你可以弃置两张杀,对一名角色造成一点伤害,然后其随机弃置X张牌,X为其已损失的体力值', - duanyi_info_alter:'出牌阶段限一次,你可以弃置两张杀,并对一名角色造成一点伤害', - guxing_info:'出牌阶段,你可以将最后至多X张手牌当杀使用,此杀无视距离且可以指定至多3个目标,每造成一次伤害,你摸一张牌,X为你已损失的体力值且至少为1。', - tianlun_info:'任意一名角色的判定生效前,你可以弃置一张场上角色的判定牌代替之', - hlongyin_info:'出牌阶段,你可以弃置任意张颜色相同且点数不同的牌,并获得逆时针座位距离与卡牌点数相同的角色区域内的一张牌。每阶段限一次', - lanzhi_info:'每当你使用一张梅花牌,你可以令所有体力值不大于你的角色回复一点体力', - lanzhi_old_info:'每当你即将造成伤害,可以防止此伤害,然后摸两张牌。每回合限发动一次。', - tianhuo_info:'出牌阶段,你可以令所有角色弃置其判定区域内的牌,并受到没有来源的等量火焰伤害,每阶段限一次', - huanyin_info:'锁定技,每当你成为其他角色的卡牌的目标时,你进行一次判定,若为黑桃则取消之,若为红桃你摸一张牌', - luomu_info:'锁定技,每当你造成伤害时,受伤害角色随机弃置一张牌', - poxing_info:'锁定技,每当你即将造成伤害,若目标的体力值大于你,你令伤害+1', - liaoyuan_info:'每当你使用一张杀指定目标后,你可以弃置任意张与此杀花色相同的牌,若如此做,目标需额外打出等量的闪,每少打出一张闪,此杀的伤害+1', - liaoyuan_info_alter:'每当你使用一张杀指定目标后,你可以弃置一张与此杀花色相同的牌,若如此做,目标需额外打出一张闪,若目标没打出闪,此杀的伤害+1', - yishan_info:'每当你受到一次伤害,你可以重新获得最近失去的两张牌', - huanhun_info:'当一名角色进入濒死状态时,你可以弃置一张牌并令其进行一次判定,若结果为红色,其回复一点体力,否则其获得你弃置的牌', - huanhun_info_alter:'当一名角色进入濒死状态时,你可以弃置一张红色手牌并令其进行一次判定,若结果为红色,其回复一点体力,否则其获得你弃置的牌', - daixing_info:'结束阶段,你可以弃置任意张牌并获得等量的护甲;这些护甲将在你的下个准备阶段消失', - swd_wuxie_info:'锁定技,你不能成为其他角色的延时锦囊的目标', - lqingcheng_info:'结束阶段,你可以进行判定,若为红色则可以继续判定,最多判定3次,判定结束后将判定成功的牌收入手牌', - xianjiang_old_info:'出牌阶段,你可以将一张装备牌永久转化为任意一张其它装备牌,一张牌在一个阶段只能转化一次', - xianjiang_info:'出牌阶段限一次,你可以弃置一张锦囊牌并随机装备一件装备', - xianjiang_info_alter:'出牌阶段限一次,若你装备内没有牌,你可以弃置一张锦囊牌并随机装备一件装备', - shengong_info:'每当你需要打出一张杀或闪时,你可以弃置一名其他角色装备区内的一张武器牌或防具牌,视为打出一张杀或闪,然后该角色摸一张牌,你弃一张牌', - ningjian_info:'你可以将一张红色牌当闪、黑色牌当杀使用或打出', - taixu_info:'限定技,你可以弃置你的所有牌(至少1张),并对一名体力值大于1为其他角色造成X点火焰伤害,X为你已损失的体力值且至少为1', - duoren_info:'每当你闪避一张杀,你可以立即获得来源的武器牌', - tanlin_info:'出牌阶段限一次,你可以与一名其他角色进行拼点,若你赢,你获得双方拼点牌、对该角色使用卡牌无视距离且可以额外使用一张杀直到回合结束,若你没赢,你受到该角色的一点伤害。', - tanlin_info_alter:'出牌阶段限一次,你可以与一名其他角色进行拼点,若你赢,你获得对方拼点牌、对该角色使用卡牌无视距离且可以额外使用一张杀直到回合结束,若你没赢,你受到该角色的一点伤害。', - pozhen_info:'每当你受到一次伤害,若你的手牌数大于伤害来源,你可以弃置X张手牌对其造成一点伤害;若你的手牌数小于伤害来源,你可以弃置其X张手牌。X为你与伤害来源的手牌数之差。', - pozhen_info_alter:'每当你受到一次伤害,若你的手牌数小于伤害来源,你可以弃置其X张手牌。X为你与伤害来源的手牌数之差。', - yunchou_info:'出牌阶段限一次,你可以弃置一张手牌,并弃置一名其他角色的一张手牌,若两张牌颜色相同,你摸一张牌,否则对方摸一张牌', - yunchou_info_alter:'出牌阶段限一次,你可以弃置一张非基本手牌,并弃置一名其他角色的一张手牌,若两张牌颜色相同,你摸一张牌,否则对方摸一张牌', - tianshu_old_info:'结束阶段,你可以弃置一张牌并从三名随机武将中选择一个,在2X回合后你将其所有技能加入你的天书列表,X为其技能数;在技能加入天书列表时,或于出牌阶段,你可以装备一项天书列表中的技能', - tianshu_info:'出牌阶段,你可以弃置一张锦囊牌,然后获得一名其他角色的一项技能直到该角色死亡(替换以此法获得的前一个技能)', - zaowu_info:'出牌阶段限一次,你可以将一张黑桃或红桃手牌当作封印之蛋使用', - luomei_info:'每当你使用或打出一张梅花花色的牌,你可以摸一张牌', - xingdian_info:'出牌阶段限一次,你可以弃置一张手牌,然后指定至多两名角色令其各弃置一张手牌', - yulin_info:'每当你即将受到伤害,你可以弃置一张装备牌抵消此伤害', - funiao_info:'出牌阶段限一次,你可以将一张手牌交给一名其他角色,然后摸一张牌', - funiao_old_info:'出牌阶段,你可以交给一名角色一张手牌,然后观看其手牌,每个阶段对一名角色只能发动一次', - xuehuang_info:'限定技,出牌阶段,若你没有黑色手牌,你可以展示并弃置所有手牌,每弃置一张牌视为使用一张火杀,随机指定两名敌人为目标', - zhuyu_info:'每当一名横置的角色即将受到伤害时,你可以弃置一张红色牌令此伤害+1并变为火属性', - ningshuang_info:'每当你成为黑色牌的目标,你可以弃置一张黑色牌将其横置,并摸一张牌,若其已经模置则改为将其翻面', - zaowu_old_info:'出牌阶段,你可以弃置三张不同类型的牌,创造任意两张牌并获得之', - xielv_info:'弃牌阶段结束后,若你的所有手牌(至少两张)颜色均相同,你可以展示所有手牌,然后回复一点体力并弃置场上的所有判定牌', - }, - }; + zhanlu:'沾露', + luomu:'落木', + jifeng:'魔影', + liaoyuan:'燎原', + huanhun:'唤魂', + daixing:'代形', + yishan:'异闪', + yishan2:'异闪', + swd_wuxie:'无邪', + lqingcheng:'倾城', + xianjiang:'仙匠', + xianjiang3:'仙匠', + shengong:'神工', + ningjian:'凝剑', + ningjian1:'凝剑', + ningjian2:'凝剑', + taixu:'太虚', + duoren:'夺刃', + tanlin:'探麟', + tanlin2:'探麟', + pozhen:'破阵', + yunchou:'运筹', + tianshu:'天书', + tianshu_bg:'书', + tianshu2:'天书', + xingdian:'星点', + luomei:'落梅', + yulin:'玉鳞', + funiao:'符鸟', + xuehuang:'血凰', + xuehuang_bg:'凰', + zhuyu:'朱羽', + ningshuang:'凝霜', + zaowu:'造物', + // shouhua:'收化', + xielv:'谐率', + tianhuo:'天火', + huanyin:'幻音', + tianlun:'天轮', + hlongyin:'龙吟', + lanzhi:'兰芷', + duanyi:'断意', + miesheng:'灭生', + guxing:'孤星', + guxing1:'孤星', + guxing2:'孤星', + poxing:'破星', + mohua:'魔化', + miles_xueyi:'血裔', + wuying:'无影', + xiehun:'邪魂', + xiehun1:'邪魂', + xiehun2:'邪魂', + xiehun3:'邪魂', + jumo:'聚魔', + duijue:'对决', + duijue_bg:'决', + yueren:'月刃', + busi:'不死', + xuying:'虚影', + yinguo:'因果', + guiyan:'鬼眼', + guiyan2:'鬼眼', + swd_xiuluo:'修罗', + suiyan:'碎岩', + suiyan_info:'每当你造成一次伤害,可以弃置一张牌并弃置对方的全部装备牌', + xianyin:'散结', + qiaoxie:'巧械', + qiaoxie2:'巧械', + qiaoxie3:'巧械', + qiaoxie4:'巧械', + mailun:'脉轮', + mailun31:'脉轮', + mailun32:'脉轮', + mailun41:'脉轮', + mailun42:'脉轮', + kunlunjing:'幻镜', + kunlunjing1:'幻镜', + kunlunjing2:'幻镜', + susheng:'苏生', + shengshou:'圣手', + huanjian:'幻箭', + huanjian_info:'出牌阶段,你可以将一张黑色牌当作冰魄针使用', + shengshou_info:'你可以将一张黑色手牌当作草药使用', + susheng_info:'在任意一名角色即将死亡时,你可以弃置一张手牌防止其死亡,并将其体力回复至1,每回合限发动一次', + susheng_info_alter:'在任意一名角色即将死亡时,你可以弃置一张红色手牌防止其死亡,并将其体力回复至1,每回合限发动一次', + zhanlu_info:'出牌阶段限一次,你可以弃置一张黑桃牌令至多3名角色各回复一点体力', + kunlunjing_info:'准备阶段,若你的体力值小于上回合结束时的体力值,你可以将场上所有牌还原到你上一回合结束时的位置', + kunlunjing_info_alter:'准备阶段,若你的体力值小于上回合结束时的体力值,你可以将场上所有牌还原到你上一回合结束时的位置,然后流失一点体力', + swd_xiuluo_info:'准备阶段,你可以弃一张手牌来弃置你判断区里的一张延时类锦囊(必须花色相同)', + xianyin_info:'出牌阶段,你可以令所有判定区内有牌的角色弃置判定区内的牌,然后交给你一张手牌', + qiaoxie_info:'每当你装备一张牌,可摸一张牌;每当你失去一张装备牌(不含替换),你可以弃置其他角色的一张牌', + mailun_info:'准备阶段,你可以选择一个脉轮效果直到下一回合开始', + guiyan_info:'出牌阶段,你可以观看一名角色的手牌,并获得其中一张梅花牌,每阶段限一次。当你首次进入濒死状态时,你须回复一点体力并失去技能鬼眼', + busi_info:'锁定技,当你进入濒死状态时,你进行一次判定,若结果不为黑桃,你将体力回复至1并将武将牌翻至背面', + xuying_info:'锁定技,每当你即将受到伤害,你防止此伤害,若你此时有手牌,你流失一点体力', + yinguo_info:'除你之外的任意一名角色即将受到受到伤害时,若有伤害来源,你可以弃置一张牌将伤害来源和目标对调', + yueren_info:'每当你使用一张杀,可以进行一次判定,若结果为黑色,你弃置目标一张牌,若结果为红色,你将此杀收回,每回合限发动一次', + duijue_info:'限定技,出牌阶段,你可以指定一名体力值大于1的其他角色,你结束出牌阶段,并在回合结束后将所有其他角色移出游戏,然后该角色与你轮流进行回合,直到有一方死亡或一共进行六个回合为止', + wuying_info:'锁定技,你的杀和单体x锦囊目标锁定为范围内的所有角色', + xiehun_info:'锁定技,受到来自你伤害的角色进入混乱状态,行为不受控制,且会攻击队友,直到你的下一回合开始', + jumo_info:'锁定技,结束阶段,你摸X-1张牌,X为未进入混乱状态的角色数与进入混乱状态的角色数之差(若为双将则改为X)', + jifeng_info:'你的杀和单体锦囊可以额外指定任意个目标,若如此做,此卡牌有一定机率失效,指定的目标越多失效的概率越大', + mohua_info:'锁定技,在身份局中,当你进入濒死状态时,你立即变身为撒旦,体力上限变为现存角色数(至少为4),并成为其他所有角色的共同敌人', + miles_xueyi_info:'锁定技,你防止即将受到的伤害,然后流失一点体力', + duanyi_info:'出牌阶段限一次,你可以弃置两张杀,对一名角色造成一点伤害,然后其随机弃置X张牌,X为其已损失的体力值', + duanyi_info_alter:'出牌阶段限一次,你可以弃置两张杀,并对一名角色造成一点伤害', + guxing_info:'出牌阶段,你可以将最后至多X张手牌当杀使用,此杀无视距离且可以指定至多3个目标,每造成一次伤害,你摸一张牌,X为你已损失的体力值且至少为1。', + tianlun_info:'任意一名角色的判定生效前,你可以弃置一张场上角色的判定牌代替之', + hlongyin_info:'出牌阶段,你可以弃置任意张颜色相同且点数不同的牌,并获得逆时针座位距离与卡牌点数相同的角色区域内的一张牌。每阶段限一次', + lanzhi_info:'每当你使用一张梅花牌,你可以令所有体力值不大于你的角色回复一点体力', + lanzhi_old_info:'每当你即将造成伤害,可以防止此伤害,然后摸两张牌。每回合限发动一次。', + tianhuo_info:'出牌阶段,你可以令所有角色弃置其判定区域内的牌,并受到没有来源的等量火焰伤害,每阶段限一次', + huanyin_info:'锁定技,每当你成为其他角色的卡牌的目标时,你进行一次判定,若为黑桃则取消之,若为红桃你摸一张牌', + luomu_info:'锁定技,每当你造成伤害时,受伤害角色随机弃置一张牌', + poxing_info:'锁定技,每当你即将造成伤害,若目标的体力值大于你,你令伤害+1', + liaoyuan_info:'每当你使用一张杀指定目标后,你可以弃置任意张与此杀花色相同的牌,若如此做,目标需额外打出等量的闪,每少打出一张闪,此杀的伤害+1', + liaoyuan_info_alter:'每当你使用一张杀指定目标后,你可以弃置一张与此杀花色相同的牌,若如此做,目标需额外打出一张闪,若目标没打出闪,此杀的伤害+1', + yishan_info:'每当你受到一次伤害,你可以重新获得最近失去的两张牌', + huanhun_info:'当一名角色进入濒死状态时,你可以弃置一张牌并令其进行一次判定,若结果为红色,其回复一点体力,否则其获得你弃置的牌', + huanhun_info_alter:'当一名角色进入濒死状态时,你可以弃置一张红色手牌并令其进行一次判定,若结果为红色,其回复一点体力,否则其获得你弃置的牌', + daixing_info:'结束阶段,你可以弃置任意张牌并获得等量的护甲;这些护甲将在你的下个准备阶段消失', + swd_wuxie_info:'锁定技,你不能成为其他角色的延时锦囊的目标', + lqingcheng_info:'结束阶段,你可以进行判定,若为红色则可以继续判定,最多判定3次,判定结束后将判定成功的牌收入手牌', + xianjiang_old_info:'出牌阶段,你可以将一张装备牌永久转化为任意一张其它装备牌,一张牌在一个阶段只能转化一次', + xianjiang_info:'出牌阶段限一次,你可以弃置一张锦囊牌并随机装备一件装备', + xianjiang_info_alter:'出牌阶段限一次,若你装备内没有牌,你可以弃置一张锦囊牌并随机装备一件装备', + shengong_info:'每当你需要打出一张杀或闪时,你可以弃置一名其他角色装备区内的一张武器牌或防具牌,视为打出一张杀或闪,然后该角色摸一张牌,你弃一张牌', + ningjian_info:'你可以将一张红色牌当闪、黑色牌当杀使用或打出', + taixu_info:'限定技,你可以弃置你的所有牌(至少1张),并对一名体力值大于1为其他角色造成X点火焰伤害,X为你已损失的体力值且至少为1', + duoren_info:'每当你闪避一张杀,你可以立即获得来源的武器牌', + tanlin_info:'出牌阶段限一次,你可以与一名其他角色进行拼点,若你赢,你获得双方拼点牌、对该角色使用卡牌无视距离且可以额外使用一张杀直到回合结束,若你没赢,你受到该角色的一点伤害。', + tanlin_info_alter:'出牌阶段限一次,你可以与一名其他角色进行拼点,若你赢,你获得对方拼点牌、对该角色使用卡牌无视距离且可以额外使用一张杀直到回合结束,若你没赢,你受到该角色的一点伤害。', + pozhen_info:'每当你受到一次伤害,若你的手牌数大于伤害来源,你可以弃置X张手牌对其造成一点伤害;若你的手牌数小于伤害来源,你可以弃置其X张手牌。X为你与伤害来源的手牌数之差。', + pozhen_info_alter:'每当你受到一次伤害,若你的手牌数小于伤害来源,你可以弃置其X张手牌。X为你与伤害来源的手牌数之差。', + yunchou_info:'出牌阶段限一次,你可以弃置一张手牌,并弃置一名其他角色的一张手牌,若两张牌颜色相同,你摸一张牌,否则对方摸一张牌', + yunchou_info_alter:'出牌阶段限一次,你可以弃置一张非基本手牌,并弃置一名其他角色的一张手牌,若两张牌颜色相同,你摸一张牌,否则对方摸一张牌', + tianshu_old_info:'结束阶段,你可以弃置一张牌并从三名随机武将中选择一个,在2X回合后你将其所有技能加入你的天书列表,X为其技能数;在技能加入天书列表时,或于出牌阶段,你可以装备一项天书列表中的技能', + tianshu_info:'出牌阶段,你可以弃置一张锦囊牌,然后获得一名其他角色的一项技能直到该角色死亡(替换以此法获得的前一个技能)', + zaowu_info:'出牌阶段限一次,你可以将一张黑桃或红桃手牌当作封印之蛋使用', + luomei_info:'每当你使用或打出一张梅花花色的牌,你可以摸一张牌', + xingdian_info:'出牌阶段限一次,你可以弃置一张手牌,然后指定至多两名角色令其各弃置一张手牌', + yulin_info:'每当你即将受到伤害,你可以弃置一张装备牌抵消此伤害', + funiao_info:'出牌阶段限一次,你可以将一张手牌交给一名其他角色,然后摸一张牌', + funiao_old_info:'出牌阶段,你可以交给一名角色一张手牌,然后观看其手牌,每个阶段对一名角色只能发动一次', + xuehuang_info:'限定技,出牌阶段,若你没有黑色手牌,你可以展示并弃置所有手牌,每弃置一张牌视为使用一张火杀,随机指定两名敌人为目标', + zhuyu_info:'每当一名横置的角色即将受到伤害时,你可以弃置一张红色牌令此伤害+1并变为火属性', + ningshuang_info:'每当你成为黑色牌的目标,你可以弃置一张黑色牌将其横置,并摸一张牌,若其已经模置则改为将其翻面', + zaowu_old_info:'出牌阶段,你可以弃置三张不同类型的牌,创造任意两张牌并获得之', + xielv_info:'弃牌阶段结束后,若你的所有手牌(至少两张)颜色均相同,你可以展示所有手牌,然后回复一点体力并弃置场上的所有判定牌', + }, + }; }); diff --git a/character/xiake.js b/character/xiake.js index 7cff04896..6ef2cc00d 100644 --- a/character/xiake.js +++ b/character/xiake.js @@ -2,124 +2,124 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return { name:'xiake', - character:{ + character:{ // xk_dongfangweiming:['male','shu',4,[]], xk_guyuexuan:['male','qun',4,['rouquan','gzhenji']], xk_jinji:['male','shu',4,['zhongzhan','lianpo']], - // xk_shenxiangyun:['female','wei',3,['zhenjiu']], + // xk_shenxiangyun:['female','wei',3,['zhenjiu']], xk_fujianhan:['male','qun',4,['zuijian','zitong']], - }, - skill:{ - zhongzhan:{ - trigger:{source:'damageBegin'}, - logTarget:'player', - check:function(event,player){ - if(get.damageEffect(event.player,player,player)>0&& - get.attitude(player,event.player)<0){ - return player.hp>event.player.hp&&player.hp>=2; - } - return false; - }, - content:function(){ - player.loseHp(); - trigger.num++; - } - }, - rouquan:{ - mod:{ + }, + skill:{ + zhongzhan:{ + trigger:{source:'damageBegin'}, + logTarget:'player', + check:function(event,player){ + if(get.damageEffect(event.player,player,player)>0&& + get.attitude(player,event.player)<0){ + return player.hp>event.player.hp&&player.hp>=2; + } + return false; + }, + content:function(){ + player.loseHp(); + trigger.num++; + } + }, + rouquan:{ + mod:{ selectTarget:function(card,player,range){ if(card.name=='sha'&&!player.getEquip(1)&&range[1]!=-1) range[1]=Infinity; } }, - enable:'phaseUse', - position:'e', - filter:function(event,player){ - return player.countCards('e')>0; - }, - filterCard:true, - prompt:'将要重铸的牌置入弃牌堆并摸一张牌', - discard:false, - delay:0.5, - check:function(card,player){ - var val=get.equipValue(card); - var player=_status.event.player; - var cards=player.getCards('h',{subtype:get.subtype(card)}); - for(var i=0;i=val){ - return 1; - } - } - return 0; - }, - prepare:function(cards,player){ - player.$throw(cards,1000); - }, - content:function(){ - "step 0" - player.draw(); - "step 1" - for(var i=0;i0; + }, + filterCard:true, + prompt:'将要重铸的牌置入弃牌堆并摸一张牌', + discard:false, + delay:0.5, + check:function(card,player){ + var val=get.equipValue(card); + var player=_status.event.player; + var cards=player.getCards('h',{subtype:get.subtype(card)}); + for(var i=0;i=val){ + return 1; + } + } + return 0; + }, + prepare:function(cards,player){ + player.$throw(cards,1000); + }, + content:function(){ + "step 0" + player.draw(); + "step 1" + for(var i=0;i=3&&player.countUsed()>player.hp; - }, - content:function(){ + filter:function(event,player){ + return game.roundNumber>=3&&player.countUsed()>player.hp; + }, + content:function(){ 'step 0' - player.awakenSkill('lingquan'); + player.awakenSkill('lingquan'); player.draw(3); player.addSkill('shuiyun'); 'step 1' game.createTrigger('phaseEnd','shuiyun',player,trigger); - }, - }, + }, + }, shenwu:{ - trigger:{global:'phaseEnd'}, + trigger:{global:'phaseEnd'}, forced:true, skillAnimation:true, animationColor:'water', @@ -156,26 +156,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, txianqu:{ - trigger:{source:'damageBefore'}, - logTarget:'player', + trigger:{source:'damageBefore'}, + logTarget:'player', filter:function(event,player){ if(player.hasSkill('txianqu2')) return false; var evt=event.getParent('phaseUse'); if(evt&&evt.player==player) return true; return false; }, - check:function(event,player){ - var target=event.player; + check:function(event,player){ + var target=event.player; if(get.attitude(player,target)>=0||get.damageEffect(target,player,player)<=0) return true; if(target.hp>player.hp&&player.isDamaged()) return true; - return false; - }, - content:function(){ - trigger.cancel(); - player.draw(2); + return false; + }, + content:function(){ + trigger.cancel(); + player.draw(2); player.recover(); player.addTempSkill('txianqu2'); - }, + }, ai:{ jueqing:true, skillTagFilter:function(player,tag,arg){ @@ -187,15 +187,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return false; }, effect:{ - player:function(card,player,target){ - if(get.tag(card,'damage')&&get.attitude(player,target)>0){ - if(player.hp==player.maxHp||get.recoverEffect(player,player,player)<=0) return 'zeroplayertarget'; - return [0,0,0,0.5]; - } - } - } + player:function(card,player,target){ + if(get.tag(card,'damage')&&get.attitude(player,target)>0){ + if(player.hp==player.maxHp||get.recoverEffect(player,player,player)<=0) return 'zeroplayertarget'; + return [0,0,0,0.5]; + } + } + } } - }, + }, txianqu2:{}, xunying:{ trigger:{player:'shaAfter'}, @@ -240,9 +240,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(nh<2){ player.draw(2-nh); player.addSkill('counttrigger'); - if(!player.storage.counttrigger){ - player.storage.counttrigger={}; - } + if(!player.storage.counttrigger){ + player.storage.counttrigger={}; + } player.storage.counttrigger.yufeng=1; } } @@ -462,19 +462,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, huanlei:{ trigger:{player:'damageEnd'}, - check:function(event,player){ - return get.damageEffect(event.source,player,player,'thunder')>0; - }, - filter:function(event,player){ - return event.source&&event.source.isIn()&&event.source.hp>player.hp; - }, - logTarget:'source', - content:function(){ + check:function(event,player){ + return get.damageEffect(event.source,player,player,'thunder')>0; + }, + filter:function(event,player){ + return event.source&&event.source.isIn()&&event.source.hp>player.hp; + }, + logTarget:'source', + content:function(){ 'step 0' - trigger.source.damage('thunder'); + trigger.source.damage('thunder'); 'step 1' trigger.source.draw(); - } + } }, anwugu:{ trigger:{source:'damageEnd'}, @@ -482,7 +482,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return get.attitude(player,event.player)<0; }, filter:function(event,player){ - if(event._notrigger.contains(event.player)) return false; + if(event._notrigger.contains(event.player)) return false; return event.player!=player&&event.player.isIn()&&!event.player.hasSkill('anwugu2'); }, logTarget:'player', @@ -492,14 +492,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, anwugu2:{ mod:{ - cardEnabled:function(card,player){ - if(_status.currentPhase!=player) return; - if(player.countUsed()>=player.storage.anwugu2) return false; - }, + cardEnabled:function(card,player){ + if(_status.currentPhase!=player) return; + if(player.countUsed()>=player.storage.anwugu2) return false; + }, maxHandcard:function(player,num){ return num-1; } - }, + }, mark:true, intro:{ content:'手牌上限-1,每回合最多使用$张牌(剩余$回合)' @@ -707,50 +707,50 @@ game.import('character',function(lib,game,ui,get,ai,_status){ chengxin:{ round:4, enable:'chooseToUse', - filter:function(event,player){ - return event.type=='dying'; - }, - filterTarget:function(card,player,target){ - return target==_status.event.dying; - }, - selectTarget:-1, - content:function(){ - target.recover(1-target.hp); + filter:function(event,player){ + return event.type=='dying'; + }, + filterTarget:function(card,player,target){ + return target==_status.event.dying; + }, + selectTarget:-1, + content:function(){ + target.recover(1-target.hp); target.addTempSkill('chengxin2',{player:'phaseAfter'}); - }, - ai:{ - order:6, + }, + ai:{ + order:6, threaten:1.4, - skillTagFilter:function(player){ + skillTagFilter:function(player){ if(4-(game.roundNumber-player.storage.chengxin)>0) return false; - if(!_status.event.dying) return false; - }, - save:true, - result:{ - target:3 - }, - } + if(!_status.event.dying) return false; + }, + save:true, + result:{ + target:3 + }, + } }, chengxin2:{ trigger:{player:'damageBefore'}, - mark:true, - forced:true, - content:function(){ - trigger.cancel(); - }, - ai:{ - nofire:true, - nothunder:true, - nodamage:true, - effect:{ - target:function(card,player,target,current){ - if(get.tag(card,'damage')) return [0,0]; - } - }, - }, - intro:{ - content:'防止一切伤害' - } + mark:true, + forced:true, + content:function(){ + trigger.cancel(); + }, + ai:{ + nofire:true, + nothunder:true, + nodamage:true, + effect:{ + target:function(card,player,target,current){ + if(get.tag(card,'damage')) return [0,0]; + } + }, + }, + intro:{ + content:'防止一切伤害' + } }, tianwu:{ trigger:{player:'useCardToBegin'}, @@ -767,25 +767,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, tianwu2:{}, shiying:{ - trigger:{global:'dieBefore'}, + trigger:{global:'dieBefore'}, skillAnimation:'epic', - animationColor:'water', - unique:true, - init:function(player){ - player.storage.shiying=false; - }, - mark:true, + animationColor:'water', + unique:true, + init:function(player){ + player.storage.shiying=false; + }, + mark:true, intro:{ content:'limited' }, check:function(event,player){ return get.attitude(player,event.player)>=3; }, - filter:function(event,player){ + filter:function(event,player){ return !player.storage.shiying&&event.player!=player; - }, + }, logTarget:'player', - content:function(){ + content:function(){ 'step 0' trigger.cancel(); player.awakenSkill('shiying'); @@ -808,24 +808,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger.player.lose(trigger.player.getCards('hej'))._triggered=null; 'step 3' game.asyncDraw([player,trigger.player],3); - }, + }, ai:{ threaten:1.5 } - }, + }, liguang:{ trigger:{player:'phaseEnd'}, - filter:function(event,player){ + filter:function(event,player){ if(!player.canMoveCard()) return false; if(!game.hasPlayer(function(current){ return current.countCards('ej'); })){ return false; } - return player.countCards('h')>0; - }, - direct:true, - content:function(){ + return player.countCards('h')>0; + }, + direct:true, + content:function(){ "step 0" player.chooseToDiscard(get.prompt('liguang'),'弃置一张手牌并移动场上的一张牌',lib.filter.cardDiscardable).set('ai',function(card){ if(!_status.event.check) return 0; @@ -838,11 +838,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else{ event.finish(); } - }, - ai:{ - expose:0.2, + }, + ai:{ + expose:0.2, threaten:1.3 - } + } }, xiepan:{ trigger:{player:'loseEnd'}, @@ -868,10 +868,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, yujia:{ trigger:{player:'useCardAfter'}, - frequent:true, - filter:function(event){ - return get.type(event.card)=='equip'&&lib.inpile.contains(event.card.name); - }, + frequent:true, + filter:function(event){ + return get.type(event.card)=='equip'&&lib.inpile.contains(event.card.name); + }, init:function(player){ player.storage.yujia=0; }, @@ -991,14 +991,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yanshi2:{}, tanhua:{ trigger:{player:'recoverBefore'}, - forced:true, - filter:function(event,player){ - return player.hp>0&&event.num>0; - }, - content:function(){ - trigger.cancel(); - player.draw(2*trigger.num); - }, + forced:true, + filter:function(event,player){ + return player.hp>0&&event.num>0; + }, + content:function(){ + trigger.cancel(); + player.draw(2*trigger.num); + }, group:'tanhua_remove', subSkill:{ remove:{ @@ -1014,22 +1014,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, yingfeng:{ trigger:{player:'useCardAfter'}, - filter:function(event,player){ - if(event.card.name!='sha') return false; + filter:function(event,player){ + if(event.card.name!='sha') return false; if(event.parent.name=='yingfeng') return false; var enemies=player.getEnemies(); - return game.hasPlayer(function(current){ - return enemies.contains(current)&&!event.targets.contains(current)&&player.canUse('sha',current,false); - }); - }, - forced:true, - content:function(){ - var enemies=player.getEnemies(); + return game.hasPlayer(function(current){ + return enemies.contains(current)&&!event.targets.contains(current)&&player.canUse('sha',current,false); + }); + }, + forced:true, + content:function(){ + var enemies=player.getEnemies(); enemies.remove(trigger.targets); if(enemies.length){ player.useCard({name:'sha'},enemies.randomGet().addExpose(0.2)); } - }, + }, }, ywuhun:{ trigger:{player:'phaseBefore'}, @@ -1058,44 +1058,44 @@ game.import('character',function(lib,game,ui,get,ai,_status){ current.node.judges.appendChild(js[j]); } } - }, + }, content:function(){ 'step 0' var handcards1,handcards2,judges,equips,viewAs,i,j; - event.data=[]; + event.data=[]; event.cardPile=[]; - for(i=0;i2&& + var num=0; + var players=game.filterPlayer(); + for(var i=0;i2&& get.recoverEffect(players[i],player,player)>0){ - if(players[i].hp==1){ + if(players[i].hp==1){ if(player.hp=3) return 1; - return 0; - } - }, - }, - intro:{ - content:'limited' - } - }, + } + } + if(num>=3) return 1; + return 0; + } + }, + }, + intro:{ + content:'limited' + } + }, binxin:{ trigger:{global:'phaseEnd'}, check:function(event,player){ @@ -1534,17 +1534,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ subSkill:{ phase:{ trigger:{global:'phaseAfter'}, - priority:-50, + priority:-50, forced:true, filter:function(event,player){ return player.storage.qixia.length>=4; }, - content:function(){ + content:function(){ player.insertPhase(); player.storage.qixia.length=0; player.syncStorage('qixia'); player.unmarkSkill('qixia'); - } + } } } }, @@ -1801,8 +1801,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ group:'yanzhan2', ai:{ order:function(){ - return get.order({name:'sha'})+0.15; - }, + return get.order({name:'sha'})+0.15; + }, }, }, yanzhan2:{ @@ -1826,10 +1826,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, yanzhan4:{ mod:{ - cardUsable:function(card,player,num){ - if(card.name=='sha') return num+1; - } - }, + cardUsable:function(card,player,num){ + if(card.name=='sha') return num+1; + } + }, }, yufeng:{ trigger:{player:'loseEnd'}, @@ -1941,7 +1941,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{source:'damageEnd'}, forced:true, filter:function(event){ - if(event._notrigger.contains(event.player)) return false; + if(event._notrigger.contains(event.player)) return false; if(get.is.altered('tianjian')) return false; return event.parent.skill=='tianjian'&&event.player.countCards('he'); }, @@ -2401,39 +2401,39 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.removeSkill('zhangmu_ai'); } }, - leiyu:{ - trigger:{player:'phaseEnd'}, + leiyu:{ + trigger:{player:'phaseEnd'}, direct:true, - filter:function(event,player){ + filter:function(event,player){ if(!player.countCards('h',{color:'black'})) return false; if(player.storage.leiyu){ for(var i=0;i0){ - num2++; - } - else if(eff<0){ - num2--; - } - } - var next=player.chooseToDiscard(get.prompt('leiyu',player.storage.leiyu),{color:'black'}); + var eff=get.effect(player.storage.leiyu[i],{name:'jingleishan',nature:'thunder'},player,player); + num+=eff; + if(eff>0){ + num2++; + } + else if(eff<0){ + num2--; + } + } + var next=player.chooseToDiscard(get.prompt('leiyu',player.storage.leiyu),{color:'black'}); next.ai=function(card){ if(num>0&&num2>=2){ return 7-get.value(card); @@ -2441,48 +2441,48 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return 0; }; next.logSkill=['leiyu',player.storage.leiyu]; - 'step 1' + 'step 1' if(result.bool){ player.storage.leiyu.sort(lib.sort.seat); - player.useCard({name:'jingleishan',nature:'thunder'},player.storage.leiyu).animate=false; + player.useCard({name:'jingleishan',nature:'thunder'},player.storage.leiyu).animate=false; } - }, - group:['leiyu2','leiyu4'], - ai:{ - threaten:1.3 - } - }, - leiyu2:{ - trigger:{player:'phaseUseBegin'}, - silent:true, - content:function(){ - player.storage.leiyu=[]; - } - }, - leiyu3:{ - trigger:{source:'dieAfter'}, - forced:true, - popup:false, - filter:function(event,player){ - return player.storage.leiyu2?true:false; - }, - content:function(){ - player.recover(); - delete player.storage.leiyu2; - } - }, - leiyu4:{ - trigger:{player:'useCardToBegin'}, - silent:true, - filter:function(event,player){ - return _status.currentPhase==player&&Array.isArray(player.storage.leiyu)&&event.target&&event.target!=player; - }, - content:function(){ - player.storage.leiyu.add(trigger.target); - } - }, + }, + group:['leiyu2','leiyu4'], + ai:{ + threaten:1.3 + } + }, + leiyu2:{ + trigger:{player:'phaseUseBegin'}, + silent:true, + content:function(){ + player.storage.leiyu=[]; + } + }, + leiyu3:{ + trigger:{source:'dieAfter'}, + forced:true, + popup:false, + filter:function(event,player){ + return player.storage.leiyu2?true:false; + }, + content:function(){ + player.recover(); + delete player.storage.leiyu2; + } + }, + leiyu4:{ + trigger:{player:'useCardToBegin'}, + silent:true, + filter:function(event,player){ + return _status.currentPhase==player&&Array.isArray(player.storage.leiyu)&&event.target&&event.target!=player; + }, + content:function(){ + player.storage.leiyu.add(trigger.target); + } + }, feizhua:{ - trigger:{player:'useCard'}, + trigger:{player:'useCard'}, filter:function(event,player){ if(event.card.name!='sha') return false; if(event.targets.length!=1) return false; @@ -2498,8 +2498,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return false; }, prompt:function(event,player){ - var targets=[]; - var target=event.targets[0]; + var targets=[]; + var target=event.targets[0]; var players=game.filterPlayer(function(current){ return get.distance(target,current,'pure')==1; }); @@ -2510,9 +2510,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } return get.prompt('feizhua',targets); }, - check:function(event,player){ - var target=event.targets[0]; - var num=0; + check:function(event,player){ + var target=event.targets[0]; + var num=0; var players=game.filterPlayer(function(current){ return get.distance(target,current,'pure')==1; }); @@ -2521,18 +2521,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ num+=get.effect(players[i],{name:'sha'},player,player); } } - return num>0; - }, + return num>0; + }, content:function(){ "step 0" - var target=trigger.targets[0]; + var target=trigger.targets[0]; var players=game.filterPlayer(function(current){ return get.distance(target,current,'pure')==1; }); for(var i=0;i0; - }, - filterTarget:function(card,player,target){ - return target==_status.event.dying; - }, - delay:0, - selectTarget:-1, - content:function(){ - "step 0" - player.chooseCardButton(get.translation('shuiyun'),player.storage.shuiyun,true); + filter:function(event,player){ + return event.type=='dying'&&event.dying&&event.dying.hp<=0&&player.storage.shuiyun.length>0; + }, + filterTarget:function(card,player,target){ + return target==_status.event.dying; + }, + delay:0, + selectTarget:-1, + content:function(){ + "step 0" + player.chooseCardButton(get.translation('shuiyun'),player.storage.shuiyun,true); "step 1" if(result.bool){ player.storage.shuiyun.remove(result.links[0]); @@ -3109,18 +3109,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else{ event.finish(); } - }, - ai:{ - order:6, - skillTagFilter:function(player){ - return player.storage.shuiyun.length>0; - }, - save:true, - result:{ - target:3 - }, - threaten:1.6 - } + }, + ai:{ + order:6, + skillTagFilter:function(player){ + return player.storage.shuiyun.length>0; + }, + save:true, + result:{ + target:3 + }, + threaten:1.6 + } }, wangyou:{ trigger:{global:'phaseEnd'}, @@ -3338,7 +3338,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var players=game.filterPlayer(); for(var i=0;i0){ + get.damageEffect(players[i],player,player)>0){ return [1,3]; } } @@ -3551,7 +3551,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{source:'damageEnd'}, alter:true, filter:function(event,player){ - if(event._notrigger.contains(event.player)) return false; + if(event._notrigger.contains(event.player)) return false; return player.storage.xuanning>0&&event.player.countCards('he')>0; }, direct:true, diff --git a/character/yijiang.js b/character/yijiang.js index 01e936878..59d696a82 100644 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -1,884 +1,954 @@ 'use strict'; game.import('character',function(lib,game,ui,get,ai,_status){ - return { - name:'yijiang', - connect:true, - character:{ - caozhang:['male','wei',4,['jiangchi']], - guohuai:['male','wei',4,['jingce']], - zhangchunhua:['female','wei',3,['jueqing','shangshi']], - caozhi:['male','wei',3,['luoying','jiushi']], - caochong:['male','wei',3,['renxin','chengxiang']], - xunyou:['male','wei',3,['zhiyu','qice']], - xin_xushu:['male','shu',3,['xinwuyan','xinjujian']], - xin_masu:['male','shu',3,['sanyao','zhiman']], - xin_fazheng:['male','shu',3,['xinenyuan','xinxuanhuo']], - zhuran:['male','wu',4,['danshou']], - xusheng:['male','wu',4,['xinpojun']], - wuguotai:['female','wu',3,['ganlu','buyi']], - lingtong:['male','wu',4,['xuanfeng']], - liubiao:['male','qun',3,['zongshi','zishou']], - huaxiong:['male','qun',6,['yaowu']], - wangyi:['female','wei',3,['zhenlie','miji']], - yufan:['male','wu',3,['zhiyan','zongxuan']], - chengong:['male','qun',3,['mingce','zhichi']], - bulianshi:['female','wu',3,['anxu','zhuiyi']], - handang:['male','wu',4,['gongji','jiefan']], - fuhuanghou:['female','qun',3,['zhuikong','qiuyuan']], - zhonghui:['male','wei',4,['quanji','zili']], - jianyong:['male','shu',3,['qiaoshui','jyzongshi']], - madai:['male','shu',4,['mashu','qianxi']], - liufeng:['male','shu',4,['xiansi']], - manchong:['male','wei',3,['junxing','yuce']], - guanzhang:['male','shu',4,['fuhun']], - chenqun:['male','wei',3,['dingpin','faen']], - sunluban:['female','wu',3,['chanhui','jiaojin']], - guyong:['male','wu',3,['shenxing','bingyi']], - caifuren:['female','qun',3,['qieting','xianzhou']], - yj_jushou:['male','qun',3,['jianying','shibei']], - zhangsong:['male','shu',3,['qiangzhi','xiantu']], - zhuhuan:['male','wu',4,['youdi']], - xiahoushi:['female','shu',3,['qiaoshi','yanyu']], + return { + name:'yijiang', + connect:true, + character:{ + caozhang:['male','wei',4,['jiangchi']], + guohuai:['male','wei',4,['jingce']], + zhangchunhua:['female','wei',3,['jueqing','shangshi']], + caozhi:['male','wei',3,['luoying','jiushi']], + caochong:['male','wei',3,['renxin','chengxiang']], + xunyou:['male','wei',3,['zhiyu','qice']], + xin_xushu:['male','shu',3,['xinwuyan','xinjujian']], + xin_masu:['male','shu',3,['sanyao','zhiman']], + xin_fazheng:['male','shu',3,['xinenyuan','xinxuanhuo']], + zhuran:['male','wu',4,['danshou']], + xusheng:['male','wu',4,['xinpojun']], + wuguotai:['female','wu',3,['ganlu','buyi']], + lingtong:['male','wu',4,['xuanfeng']], + liubiao:['male','qun',3,['zongshi','zishou']], + huaxiong:['male','qun',6,['yaowu']], + wangyi:['female','wei',3,['zhenlie','miji']], + yufan:['male','wu',3,['zhiyan','zongxuan']], + chengong:['male','qun',3,['mingce','zhichi']], + bulianshi:['female','wu',3,['anxu','zhuiyi']], + handang:['male','wu',4,['gongji','jiefan']], + fuhuanghou:['female','qun',3,['zhuikong','qiuyuan']], + zhonghui:['male','wei',4,['quanji','zili']], + jianyong:['male','shu',3,['qiaoshui','jyzongshi']], + madai:['male','shu',4,['mashu','qianxi']], + liufeng:['male','shu',4,['xiansi']], + manchong:['male','wei',3,['junxing','yuce']], + guanzhang:['male','shu',4,['fuhun']], + chenqun:['male','wei',3,['pindi','faen']], + sunluban:['female','wu',3,['chanhui','jiaojin']], + guyong:['male','wu',3,['shenxing','bingyi']], + caifuren:['female','qun',3,['qieting','xianzhou']], + yj_jushou:['male','qun',3,['jianying','shibei']], + zhangsong:['male','shu',3,['qiangzhi','xiantu']], + zhuhuan:['male','wu',4,['youdi']], + xiahoushi:['female','shu',3,['qiaoshi','yanyu']], - panzhangmazhong:['male','wu',4,['anjian','duodao']], - zhoucang:['male','shu',4,['xinzhongyong']], - guanping:['male','shu',4,['longyin']], - liaohua:['male','shu',4,['dangxian','fuli']], - chengpu:['male','wu',4,['lihuo','chunlao']], - gaoshun:['male','qun',4,['xianzhen','jinjiu']], - caozhen:['male','wei',4,['xinsidi']], - wuyi:['male','shu',4,['benxi']], - hanhaoshihuan:['male','wei',4,['shenduan','yonglve']], + panzhangmazhong:['male','wu',4,['anjian','duodao']], + zhoucang:['male','shu',4,['xinzhongyong']], + guanping:['male','shu',4,['longyin']], + liaohua:['male','shu',4,['dangxian','fuli']], + chengpu:['male','wu',4,['lihuo','chunlao']], + gaoshun:['male','qun',4,['xianzhen','jinjiu']], + caozhen:['male','wei',4,['xinsidi']], + wuyi:['male','shu',4,['benxi']], + hanhaoshihuan:['male','wei',4,['shenduan','yonglve']], - caorui:['male','wei',3,['huituo','mingjian','xingshuai'],['zhu']], - caoxiu:['male','wei',4,['qianju','qingxi']], - zhongyao:['male','wei',3,['huomo','zuoding']], - liuchen:['male','shu',4,['zhanjue','qinwang'],['zhu']], - zhangyi:['male','shu',4,['wurong','shizhi']], - sunxiu:['male','wu',3,['yanzhu','xingxue','zhaofu'],['zhu']], - zhuzhi:['male','wu',4,['anguo']], - quancong:['male','wu',4,['yaoming']], - gongsunyuan:['male','qun',4,['huaiyi']], - guotufengji:['male','qun',3,['jigong','shifei']], + caorui:['male','wei',3,['huituo','mingjian','xingshuai'],['zhu']], + caoxiu:['male','wei',4,['qianju','qingxi']], + zhongyao:['male','wei',3,['huomo','zuoding']], + liuchen:['male','shu',4,['zhanjue','qinwang'],['zhu']], + zhangyi:['male','shu',4,['wurong','shizhi']], + sunxiu:['male','wu',3,['yanzhu','xingxue','zhaofu'],['zhu']], + zhuzhi:['male','wu',4,['anguo']], + quancong:['male','wu',4,['yaoming']], + gongsunyuan:['male','qun',4,['huaiyi']], + guotufengji:['male','qun',3,['jigong','shifei']], - xin_yujin:['male','wei',4,['jieyue']], - xin_liru:['male','qun',3,['xinjuece','xinmieji','xinfencheng']], + xin_yujin:['male','wei',4,['jieyue']], + xin_liru:['male','qun',3,['xinjuece','xinmieji','xinfencheng']], - guohuanghou:['female','wei',3,['jiaozhao','danxin']], - liuyu:['male','qun',2,['zhige','zongzuo']], - liyan:['male','shu',3,['duliang','fulin']], - sundeng:['male','wu',4,['kuangbi']], + guohuanghou:['female','wei',3,['jiaozhao','danxin']], + liuyu:['male','qun',2,['zhige','zongzuo']], + liyan:['male','shu',3,['duliang','fulin']], + sundeng:['male','wu',4,['kuangbi']], - cenhun:['male','wu',3,['jishe','lianhuo']], - huanghao:['male','shu',3,['qinqing','huisheng']], - zhangrang:['male','qun',3,['taoluan']], - sunziliufang:['male','wei',3,['guizao','jiyu']], + cenhun:['male','wu',3,['jishe','lianhuo']], + huanghao:['male','shu',3,['qinqing','huisheng']], + zhangrang:['male','qun',3,['taoluan']], + sunziliufang:['male','wei',3,['guizao','jiyu']], - xinxianying:['female','wei',3,['zhongjian','caishi']], - wuxian:['female','shu',3,['fumian','daiyan']], - xushi:['female','wu',3,['wengua','fuzhu']], - caojie:['female','qun',3,['shouxi','huimin']], + xinxianying:['female','wei',3,['zhongjian','caishi']], + wuxian:['female','shu',3,['fumian','daiyan']], + xushi:['female','wu',3,['wengua','fuzhu']], + caojie:['female','qun',3,['shouxi','huimin']], - caiyong:['male','qun',3,['bizhuan','tongbo']], - jikang:['male','wei',3,['qingxian','juexiang']], - qinmi:['male','shu',3,['jianzheng','zhuandui','tianbian']], - xuezong:['male','wu',3,['funan','jiexun']], - }, - characterIntro:{ - huaxiong:'董卓旗下名将,自荐抵抗山东地区反对董卓的诸侯联军于汜水关前,他先后斩杀济北相鲍信之弟鲍忠和孙坚部将祖茂、以及袁术部将俞涉和韩馥手下潘凤等人,最后关东联军派出关羽与之一对一决斗而被杀。', - caozhi:'字子建,沛国谯人,三国曹魏著名文学家,建安文学代表人物。魏武帝曹操之子,魏文帝曹丕之弟,生前曾为陈王,去世后谥号“思”,因此又称陈思王。南朝宋文学家谢灵运更有“天下才有一石,曹子建独占八斗”的评价。王士祯尝论汉魏以来二千年间诗家堪称“仙才”者,曹植、李白、苏轼三人耳。', - gaoshun:'中国东汉末年将领,吕布帐下中郎将。史载高顺为人清白有威严,不好饮酒,所统率的部队精锐非常,号称“陷阵营”。屡进忠言于吕布,吕布虽知其忠而不能用。曹操击破吕布后,高顺被曹操所杀。', - chengong:'字公台,东汉末年吕布帐下谋士,东郡东武阳人。性情刚直,足智多谋,年少时与海内知名之士相互结交。192年,陈宫等人主张曹操接任兖州牧。但此后陈宫因曹操杀害边让而与曹操反目,并游说张邈等人背叛曹操迎吕布入兖州,辅助吕布攻打曹操。吕布战败后,随吕布等一同被曹操所擒,决意赴死。', - lingtong:'字公绩,吴郡馀杭人,三国时期吴国名将。凌操之子,官至偏将军。', - masu:'字幼常,襄阳宜城人,三国时期蜀汉大臣,侍中马良之弟。初以荆州从事跟随刘备取蜀入川,曾任绵竹、成都令、越嶲太守。诸葛亮北伐时因作战失误而失守街亭,因而被诸葛亮所斩。', - wuguotai:'吴国太,小说《三国演义》中的人物,不见于正史记载。在小说中,吴国太被描述为孙坚的次妻,孙坚正妻武烈皇后(小说中写作吴太夫人)的妹妹,孙朗、孙仁(孙尚香)的母亲。', - xusheng:'字文向,琅邪莒县人。三国时期吴将。徐盛最初因讨伐山贼有功而被加为中郎将,后于濡须口之战中表现出色,得到孙权的赞赏。魏文帝曹丕伐吴时,徐盛以疑城之计退去魏军。', - yujin:'字文则,泰山钜平人。三国时期曹魏武将。本为鲍信部将,后属曹操,曹操称赞他可与古代名将相比。然而在建安二十四年的襄樊之战中,于禁在败给关羽后投降,致使一代名将晚节不保。', - zhangchunhua:'西晋宣穆皇后张春华(189-247),河内平皋(今河南温县)人。她是晋宣帝司马懿之妻,晋景帝司马师、晋文帝司马昭的母亲。后被追尊为皇后。', - fazheng:'字孝直,本为刘璋部下,刘备围成都时劝说刘璋投降,而后又与刘备进取汉中,献计将曹操大将夏侯渊斩首。法正善奇谋,深受刘备信任和敬重。', - xushu:'字元直,与司马徽、诸葛亮等人为友。先化名单福仕官于新野的刘备,后因曹操囚禁其母而不得不弃备投操,临行前向刘备推荐诸葛亮之才。入曹营后,一言不发,不曾为曹操进献过一计半策。后人形容徐庶“身在曹营心在汉”。', - caozhang:'字子文,是曹操与武宣卞皇后所生第二子,曹丕之弟,曹植之兄,曹魏任城王。曹彰武艺过人,曹操问诸子志向时自言“好为将”,因此得到曹操的赞赏。其胡须黄色,被曹操称为“黄须儿”。', - xunyou:'字公达,颍川颍阴人。东汉末年曹操的五谋臣之一,荀彧从子,被曹操称为“谋主”。官至尚书令。正始五年被追谥为敬侯。', - liaohua:'本名淳,字元俭,襄阳中卢(今湖北襄樊)人。三国时期蜀国后期将领,以勇敢果断著称。廖化是三国时代中经历了魏、蜀、吴整个兴衰过程极少数人中的一个,与严颜、黄忠共称为蜀汉三老将。', - bulianshi:'步夫人(?-238),讳练师,临淮淮阴人。东吴丞相步骘同族,吴大帝孙权之妃,在孙权众夫人中最受孙权的宠爱(宠冠后庭),生有二女:孙鲁班、孙鲁育。赤乌元年卒,追封为皇后,葬于蒋陵。', - chengpu:'字德谋,右北平土垠人。历仕孙坚、孙策、孙权三任君主。孙策死后,他与张昭等人共同辅佐孙权,并讨伐江东境内的山贼,功勋卓著。被人们尊称为“程公”。', - handang:'字义公,辽西令支(今河北迁安)人,吴国将领。韩当因为长于弓箭、骑术并且膂力过人而被孙坚赏识,追随他四处征伐周旋,数次冒险犯难,攻陷敌人、擒拿俘虏。对江东基业的逐渐稳固和吴国的建立有着重要影响。', - liubiao:'刘表,字景升,山阳郡高平(今山东微山)人。东汉末年名士,汉室宗亲,荆州牧,汉末群雄之一。', - zhonghui:'字士季。魏名将,太傅钟繇之子。公元263年,他与邓艾带兵攻打蜀国,最终导致蜀国灭亡。之后钟会设计害死邓艾,联合姜维准备自立,最终因部下反叛失败,与姜维一同死于兵变。', - wangyi:'益州刺史赵昂之妻,赵英、赵月之母。马超作乱凉州时,王异协助丈夫守城,多有功勋,自马超攻冀城至祁山坚守,赵昂曾出奇计九条,王异皆有参与。', - guanzhang:'关兴,名将关羽之子,继承了父亲汉寿亭侯的爵位。年少时即受诸葛亮器重,在蜀汉担任侍中、中监军之职,后在夷陵之战中报了杀父之仇。张苞,张飞的长子,使用父亲的家传蛇矛为兵器,勇猛剽悍不弱其父。', - madai:'名将马超的从弟。早年他曾经从曹操手中死里逃生,后跟随马超大战曹操。后在诸葛亮病逝后受杨仪派遣斩杀了蜀将魏延。曾率领军队出师北伐,被魏将牛金击败而退还。', - caochong:'字仓舒,曹操之子。从小聪明仁爱,与众不同,深受曹操喜爱。留有“曹冲称象”的典故。曹操几次对群臣夸耀他,有让他继嗣之意。可惜曹冲在建安十三病逝,年仅13岁。', - guohuai:'魏国名将,夏侯渊战死时郭淮收集残兵,与杜袭共推张郃为主将而得以稳定局势。曹丕称帝后,赐郭淮爵关内侯,又任镇西长史。诸葛亮伐魏时,郭淮料敌准确,多立战功,而后亦曾击退姜维。', - manchong:'初在曹操手下任许县县令,掌管司法,以执法严格著称;转任汝南太守,开始参与军事,曾参与赤壁之战。后关羽围攻樊城,满宠协助曹仁守城,劝阻了弃城而逃的计划,成功坚持到援军到来。曹丕在位期间,满宠驻扎在新野,负责荆州侧的对吴作战。曹叡在位期间,满宠转任到扬州,接替曹休负责东侧对吴作战,屡有功劳。', - guanping:'关平是关羽在战乱中所收之义子。关羽脱离曹军后,与刘备于关定家中重逢,关定欲使年仅十八岁的关平随关羽同行,刘备便主张让关羽与关平结为义父子。自此后关平随侍在关羽身边,一生东征西讨。他武勇过人,不逊乃父,曾跟随刘备出征西川,立下战功,后来又与曹魏猛将庞德大战三十回合,不分胜负。', - jianyong:'简雍为刘备同乡,年少时与刘备相识。黄巾之乱时,刘备加入对抗黄巾军的战争,简雍便跟随他奔走。常作为谈客,往来使命,刘备围成都时简雍作为刘备使臣成功劝说刘璋投降。简雍擅于辩论、议事。性情简单直接、不拘小节。', - liufeng:'刘备义子。性格刚猛,气力过人。随赵云、张飞等扫荡西川,颇有战功,而后又统领孟达攻取上庸,深为刘备信任。但是后来关羽北伐曹魏,多次要求刘封起兵相助,刘封不从。而后又侵凌孟达,迫其降魏。孟达与魏徐晃共袭刘封,并劝刘封投降,刘封不降,又遭部下叛变,败归成都。刘备在诸葛亮的建议下赐死刘封,刘封自裁,刘备深表痛惜。', - panzhangmazhong:'马忠为潘璋部将。于麦城之战中设伏擒获关羽及关平。刘备伐吴时,马忠随潘璋等往拒,突袭射伤蜀将黄忠,导致黄忠阵亡。不久,潘璋为关兴所杀,马忠领兵围击,击退张苞援军。后降将糜、傅发动兵变,刺杀了马忠,将首级献于刘备。', - yufan:'虞翻初在会稽被太守王朗任命为功曹,曾劝谏王朗躲开孙策未果。后孙策占江东仍任命他为功曹。吕蒙袭取荆州时,虞翻提醒其躲过了埋伏,成功占领城池。后因为直言进谏被孙权发配到交州。', - zhuran:'吴国著名将领,吕蒙白衣渡江取荆州,朱然协助潘璋捉住了关羽。黄武元年,刘备兵伐东吴,朱然与孙桓抵抗刘备大军。后又参加夷陵之战,追击刘备,被前来接应的赵云一枪刺死。', - fuhuanghou:'执金吾伏完之女,汉献帝的皇后,后因怨恨曹操诛董承,与父伏完密谋曹操,事情泄漏,曹将伏皇后禁闭冷宫逼其自缢,所生二位皇子亦被鸩杀。', - liru:'董卓的首席谋士,为董卓所亲信,大小事宜皆与其商议。董卓趁乱进京、说降吕布、废立皇帝、迁都长安等举动,均离不开李儒的参谋之功,并奉命毒杀皇帝刘辩。李傕被曹操击败后,李儒从此不知所踪,消失在历史长河中。', - caozhen:'曹操族子,官至大将军、大司马。其父为曹操招募人马时被州郡所杀,曹操因怜悯曹真少年丧父而待其如亲子一般,因赞赏曹真的勇猛而让他率领虎豹骑。曹真在镇守曹魏西北边境时表现突出,魏文帝时期督众将大破羌胡联军,平定河西;魏明帝时期屡次对抗诸葛亮的北伐。', - hanhaoshihuan:'韩浩和史涣都以忠勇著称,两人皆是曹操心腹将领,共同掌管禁兵。', - chenqun:'陈群一直位居要职,先后受曹操、曹丕托孤,成为魏国重臣,官至司空。其子陈泰,亦是魏国后期名将。最大的贡献为创立了九品中正制,为后期的人才选拔和管理打好了基础。', - wuyi:'初为益州牧刘璋的部将,刘备进攻益州时,泠苞在雒城大败,吴懿自告奋勇,领兵前往救援。不料被赵云和张飞生擒,吴懿于是归降。刘备自称汉中王,迎娶吴懿之妹。诸葛亮出师北伐,吴懿以左将军、高阳侯的身份跟随出征,屡立战功。诸葛亮逝世后,吴懿随姜维一并镇守汉中。', - zhoucang:'原为张宝部将。关羽千里走单骑时,周仓投降关羽,成为了关羽的贴身护卫。建安十六年(公元211年),刘备攻打成都时,周仓跟随关羽镇守荆州。关羽水淹七军时,周仓曾生擒魏军的立义将军庞德,关羽被孙权斩首之后,周仓在麦城大哭失声,拔剑自刎而死。', - zhangsong:'刘璋的部下,长相丑陋但有过目不忘的本领。张松奉命出使许都被曹操赶出,归蜀时为刘备所厚待,于是将西川地理图献予刘备,劝刘备取益州,愿为内应,并派好友孟达、法正帮助刘备。', - sunluban:'孙权之女。孙鲁班与孙权二子孙和不睦。孙权长子孙登死后,孙和被立为太子。孙鲁班向孙权进谗言废孙和太子之位,孙和被废后忧愤而死。', - zhuhuan:'字休穆,吴郡吴县(今江苏苏州)人,吴国名将,官至前将军、青州牧,假节,封为嘉兴侯。有一子朱异。', - guyong:'为蔡邕之徒。其为人少言语,不饮酒,严厉正大,被张纮推荐仕于孙权。孙权任命他为会稽郡丞,行太守事,后不断升迁,官至吴国丞相。顾雍为官,多进良言,有功于吴。', - jushou:'袁绍帐下谋士。史载他“少有大志,擅于谋略”。曾为冀州别驾,举茂才,并当过两次县令。后来又当韩馥别驾,被韩馥表为骑都尉。袁绍占据冀州后任用沮授为从事。经常对袁绍提出良策,但很多时候袁绍并不听从。官渡之战时袁绍大败,沮授未及逃走,被曹操所获,因拒降被曹操处死。', - caifuren:'原是刘表的小妾,正室死后,成为了刘表的后妻。因刘琮娶了自己的侄女所以对其偏爱有加。刘备客居荆州时险些受其所害。刘表死后为了让刘琮即位不惜献州于曹操。', - caorui:'魏文帝曹丕长子,曹魏第二位皇帝。在位期间指挥曹真、司马懿等人成功防御了吴、蜀的多次攻伐,并且平定鲜卑,攻灭公孙渊,颇有建树。', - caoxiu:'曹操族子,曹操大宴铜雀台之时,射箭夺袍。曹休随曹操四处征伐,在攻蜀汉中之战,伐吴濡须口之战均有登场,曾放冷箭射倒凌统的马匹,后又协助夏侯惇平息洛阳纵火叛乱,总管御林兵马,协助曹丕代汉。', - zhongyao:'初为长安郡守,马超反叛时,引军攻打长安,钟繇率军防卫。后城破,钟繇从东门弃城而走,退守潼关。后奉献帝令繇草拟诏令,册立曹操为魏王,曹操以钟繇为相国。明帝即位时,钟繇为太傅。诸葛亮北伐,钟繇举荐司马懿前往抵御。', - liuchen:'刘禅第五子,自幼聪明,英敏过人。魏军兵临城下时,刘禅准备投降,刘谌劝阻刘禅投降不成后悲愤不已,遂自杀于昭烈庙。', - xiahoushi:'夏侯渊从女,夏侯霸从妹,出城拾柴时被张飞所得,取其为妻。后生有二女,其中一人为星彩。', - zhangyi:'曾随诸葛亮南征孟获,七擒孟获的战斗中立下赫赫战功,与祝融夫人单挑。诸葛亮病死五丈原,告诉姜维张嶷忠贞勇猛,经验丰富,是可以依靠的武将,后于征伐魏国时为掩护姜维撤退阵亡。', - sunxiu:'孙权第六子,孙綝发动政变罢黜孙亮后,迎立孙休为帝。后孙綝专权,孙休遣使丁奉等人将其诛杀。孙休在位期间,颁布良制,嘉惠百姓,促进了东吴的繁荣。', - zhuzhi:'孙坚旧将,朱然嗣父,孙坚阵亡后,孙策附袁术,朱治、吕范为之定计,用玉玺向袁术借兵夺取江东。孙策平定东路后,任命朱治为吴郡太守,收军返回江东。后来赤壁之战,大都督周瑜令朱治、吕范为四方巡警使,催督六郡官军。', - quancong:'吴国名将,孙策进兵江东时归顺之,深得孙权赏识,孙权甚至将孙鲁班许配之。', - gongsunyuan:'辽东太守公孙度之孙,辽东割据首领。趁魏、吴骚乱之际自称燕王,发动叛乱,与魏对抗。败给司马懿率领的讨伐大军,被围困后乞降不被接受,与子修在欲出城逃跑时被斩杀。', - guotufengji:'两人均是袁绍帐下谋士。曾联手献计,利用公孙瓒攻击韩馥,又劝说韩馥请袁绍抵挡公孙瓒,终替袁绍拿下冀州。官渡之战期间,两人进谗逼反张郃高览,逼死田丰。使得袁绍的实力大损。', - guohuanghou:'明元郭皇后(并非郭女王),在三国志有正传。曹叡夫人,曹丕的儿媳妇,曹芳,曹髦,曹奂三朝太后,是唯一经历了曹魏全部皇帝时代的贵族女性。曹魏后三帝时期,由于皇帝年少,太后与重臣一同处理政务。史书上对郭皇后有两种截然不同的记载,一种是曹芳被废和曹髦死后郭太后发诏书斥责他们不配人君,另一种却提及曹芳被夺权期间,太后与曹芳相拥而泣,曹髦讨伐司马昭前,曾向太后禀报。', - liyan:'字正方,蜀汉重臣。初为刘表部下,曹操入主荆州时,李严西奔入蜀。刘备入川,李严率众投降,深得刘备器重,受命与诸葛亮、法正等人一同编制《蜀科》,又率军平定了蜀中盗贼。白帝城托孤,与诸葛亮共受遗诏同扶幼主。其人性格矜高难近,终因督粮不利且谎报实情而被流放,后在当地去世。', - sundeng:'字子高,孙权长子。孙权称帝后其被立为太子,受诸葛恪等人辅佐。其人性情温和而能礼贤下士,加之爱民如子,因此深受爱戴。曾劝服孙权在孙虑之死时节哀,并劝谏孙权勿用吕壹苛政。后不幸早逝,临终前上书建言,推荐了多位良臣。其亡故令孙权极为悲伤,也为南鲁党争的祸乱埋下了伏笔。', - liuyu:'伯安,幽州牧,汉室宗亲。在幽州两度任职,颇有威望。张纯、张举叛乱,刘虞恩威并施将其平定,又鼓励农商,大大改善了当地经济民生,青徐二州流民纷纷前来避难。后坚拒袁绍等人立其为帝的请求,派兵迎接献帝,却为袁术所扣,并因此事激化了与公孙瓒的矛盾,最终被击败,为其所害。', - cenhun:'岑昏为宦官,官列中常侍,孙皓即位后得到宠幸。280年,晋龙骧将军王濬率军伐吴,岑昏建议以铁锁链封锁长江,阻挡晋军进攻。王濬以火船烧锁链破其计,沿途东吴将士或死或降。群臣上奏东吴衰败之因在于岑昏,将他与蜀汉的黄皓并列为误国之奸臣。', - sunziliufang:'孙资在曹操手下历任县令,参丞相军事;刘放曾有劝王松归顺曹操之举,为曹操所欣赏,遂招为司空府官,又外放历任几处县令。魏国初建之际,孙资与刘放俱任秘书郎。曹丕继位后,二人一同掌握机密。曹睿病危时,二人力荐曹爽,又推荐招回司马懿辅政。最后,曹睿独召曹爽、司马懿、刘放、孙资同受诏命,而免去曹宇、夏侯献、曹肇、秦朗的官职。', - huanghao:'宦官。为后主刘禅所宠,专秉朝政。黄皓与大将军姜维不睦,维启后主杀之,后主不从。皓阴以心腹阎宇替维。景耀六年,蜀亡,邓艾预欲杀之,皓贿赂左右得免。及后主迁洛阳,皓为司马昭凌迟处死。', - zhangrang:'汉中常侍。同赵忠、曹节、段珪等为“十常侍”,为灵帝所宠。让等专权乱政、卖官索财,朝野皆痛恨之。郎中张钧上书奏请诛杀十常侍,帝不允,让等阴杀钧。及灵帝崩,大将军何进欲杀让等,让阴结何太后,招进入宫,斩杀之。部将袁绍引兵攻让,让等劫帝走河上。追急,让投水自尽。', - }, - perfectPair:{ - wuguotai:['sunjian','sunshangxiang'], - zhangchunhua:['simayi'], - caozhi:['zhenji'], - xunyou:['xunyu'], - xushu:['liubei'], - lingtong:['ganning'], - chengong:['lvbu'], - bulianshi:['sunquan'], - fuhuanghou:['liuxie'], - sunluban:['quancong'], - caifuren:['liubiao'], - xiahoushi:['zhangfei'], - zhoucang:['guanyu'], - guanping:['guanyu'], - sundeng:['sunquan'], - liru:['dongzhuo'], - liuchen:['liushan'], - }, - skill:{ - funan:{ - trigger:{global:['respondAfter','useCardAfter']}, - filter:function(event,player){ - if(!event.respondTo) return false; - if(event.player==player) return false; - if(player!=event.respondTo[0]) return false; - if(get.itemtype(event.cards)!='cards') return false; - if(['h','e','j'].contains(get.position(event.cards[0]))) return false; - if(get.itemtype(event.respondTo[1])!='card') return false; - if(['h','e','j'].contains(get.position(event.respondTo[1]))) return false; - return true; - }, - logTarget:'player', - check:function(event,player){ - if(get.attitude(player,event.player)>=0) return true; - if(player.hasSkill('funan_jiexun')&&player.storage.funan_jiexun==event.player) return true; - if(event.cards.length>1) return true; - return get.value(event.cards[0])>get.value(event.respondTo[1]); - }, - content:function(){ - 'step 0' - if(!player.hasSkill('funan_jiexun')||player.storage.funan_jiexun!=trigger.player){ - trigger.player.gain(trigger.respondTo[1],'gain2'); - trigger.player.addTempSkill('funan_use'); - if(!trigger.player.storage.funan_use){ - trigger.player.storage.funan_use=[]; - } - trigger.player.storage.funan_use.add(trigger.respondTo[1]); - } - 'step 1' - player.gain(trigger.cards,'gain2'); - }, - subSkill:{ - jiexun:{ - mark:'character', - intro:{ - content:'你发动“复难”时,无须令$获得你使用的牌' - }, - trigger:{global:'dieAfter'}, - silent:true, - filter:function(event,player){ - return player.storage.funan_jiexun==event.player; - }, - onremove:true, - content:function(){ - player.removeSkill('funan_jiexun'); - } - }, - use:{ - onremove:true, - mod:{ - cardEnabled:function(card,player){ - if(player.storage.funan_use&&player.storage.funan_use.contains(card)){ - return false; - } - } - } - } - } - }, - jiexun:{ - trigger:{player:'phaseEnd'}, - filter:function(event,player){ - return game.hasPlayer(function(current){ - return current.countCards('ej',{suit:'diamond'}); - }); - }, - init:function(player){ - player.storage.jiexun=0; - }, - onremove:true, - direct:true, - content:function(){ - 'step 0' - var num1=game.countPlayer(function(current){ - return current.countCards('ej',{suit:'diamond'}); - }); - var num2=player.storage.jiexun; - event.num1=num1; - event.num2=num2; - var str='令目标摸'+get.cnNumber(num1)+'张牌'; - if(num2){ - str+=',然后弃置'+get.cnNumber(num2)+'张牌;若目标因此法弃置了所有牌,则你失去“诫训”,然后你发动“复难”时,无须令其获得你使用的牌'; - } - player.chooseTarget(get.prompt('jiexun')).set('ai',function(target){ - return _status.event.coeff*get.attitude(_status.event.player,target); - }).set('coeff',num1>=num2?1:-1).set('prompt2',str); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - event.target=target; - player.logSkill('jiexun',target); - target.draw(event.num1); - player.storage.jiexun++; - } - else{ - event.finish(); - } - 'step 2' - if(event.num2){ - event.target.chooseToDiscard(event.num2,true,'he'); - } - else{ - event.finish(); - } - 'step 3' - if(!event.target.countCards('he')){ - player.removeSkill('jiexun'); - player.storage.funan_jiexun=event.target; - player.addSkill('funan_jiexun'); - } - } - }, - zhuandui:{ - group:['zhuandui_respond','zhuandui_use'], - subSkill:{ - use:{ - trigger:{player:'shaBegin'}, - check:function(event,player){ - return get.attitude(player,event.target)<0; - }, - filter:function(event,player){ - return player.countCards('h')>0&&event.target.countCards('h')>0&&event.target!=player; - }, - logTarget:'target', - content:function(){ - 'step 0' - player.chooseToCompare(trigger.target); - 'step 1' - if(result.bool){ - trigger.directHit=true; - } - } - }, - respond:{ - trigger:{target:'shaBegin'}, - check:function(event,player){ - return get.effect(player,event.card,event.player,player)<0; - }, - filter:function(event,player){ - return player.countCards('h')>0&&event.player.countCards('h')>0&&event.player!=player; - }, - logTarget:'player', - content:function(){ - 'step 0' - player.chooseToCompare(trigger.player); - 'step 1' - if(result.bool){ - trigger.skipShan=true; - } - } - } - }, - ai:{ - effect:{ - target:function(card,player,target,current){ - if(card.name=='sha'&¤t<0) return 0.7; - } - } - } - }, - tianbian:{ - trigger:{player:'chooseCardBegin'}, - check:function(event,player){ - return player.hasCard(function(card){ - var val=get.value(card); - return val<0||(val<=4&&card.number>=11); - }); - }, - filter:function(event){ - return event.type=='compare'&&!event.directresult; - }, - content:function(){ - var cards=get.cards(); - cards[0].discard(); - cards[0].vanishtag.add('tianbian'); - trigger.directresult=cards; - trigger.untrigger(); - }, - group:'tianbian_number', - subSkill:{ - number:{ - trigger:{player:'compare',target:'compare'}, - filter:function(event,player){ - if(event.iwhile) return false; - if(event.player==player){ - return get.suit(event.card1)=='heart';//&&event.card1.vanishtag.contains('tianbian'); - } - else{ - return get.suit(event.card2)=='heart';//&&event.card2.vanishtag.contains('tianbian'); - } - }, - silent:true, - content:function(){ - game.log(player,'拼点牌点数视为','#y13'); - if(player==trigger.player){ - trigger.num1=13; - } - else{ - trigger.num2=13; - } - } - } - } - }, - jianzheng:{ - trigger:{global:'useCard'}, - filter:function(event,player){ - if(!player.countCards('h')) return false; - return event.player!=player&&event.card.name=='sha'&&!event.targets.contains(player)&& - get.distance(event.player,player,'attack')<=1; - }, - direct:true, - content:function(){ - "step 0" + caiyong:['male','qun',3,['bizhuan','tongbo']], + jikang:['male','wei',3,['qingxian','juexiang']], + qinmi:['male','shu',3,['jianzheng','zhuandui','tianbian']], + xuezong:['male','wu',3,['funan','jiexun']], + }, + characterIntro:{ + huaxiong:'董卓旗下名将,自荐抵抗山东地区反对董卓的诸侯联军于汜水关前,他先后斩杀济北相鲍信之弟鲍忠和孙坚部将祖茂、以及袁术部将俞涉和韩馥手下潘凤等人,最后关东联军派出关羽与之一对一决斗而被杀。', + caozhi:'字子建,沛国谯人,三国曹魏著名文学家,建安文学代表人物。魏武帝曹操之子,魏文帝曹丕之弟,生前曾为陈王,去世后谥号“思”,因此又称陈思王。南朝宋文学家谢灵运更有“天下才有一石,曹子建独占八斗”的评价。王士祯尝论汉魏以来二千年间诗家堪称“仙才”者,曹植、李白、苏轼三人耳。', + gaoshun:'中国东汉末年将领,吕布帐下中郎将。史载高顺为人清白有威严,不好饮酒,所统率的部队精锐非常,号称“陷阵营”。屡进忠言于吕布,吕布虽知其忠而不能用。曹操击破吕布后,高顺被曹操所杀。', + chengong:'字公台,东汉末年吕布帐下谋士,东郡东武阳人。性情刚直,足智多谋,年少时与海内知名之士相互结交。192年,陈宫等人主张曹操接任兖州牧。但此后陈宫因曹操杀害边让而与曹操反目,并游说张邈等人背叛曹操迎吕布入兖州,辅助吕布攻打曹操。吕布战败后,随吕布等一同被曹操所擒,决意赴死。', + lingtong:'字公绩,吴郡馀杭人,三国时期吴国名将。凌操之子,官至偏将军。', + masu:'字幼常,襄阳宜城人,三国时期蜀汉大臣,侍中马良之弟。初以荆州从事跟随刘备取蜀入川,曾任绵竹、成都令、越嶲太守。诸葛亮北伐时因作战失误而失守街亭,因而被诸葛亮所斩。', + wuguotai:'吴国太,小说《三国演义》中的人物,不见于正史记载。在小说中,吴国太被描述为孙坚的次妻,孙坚正妻武烈皇后(小说中写作吴太夫人)的妹妹,孙朗、孙仁(孙尚香)的母亲。', + xusheng:'字文向,琅邪莒县人。三国时期吴将。徐盛最初因讨伐山贼有功而被加为中郎将,后于濡须口之战中表现出色,得到孙权的赞赏。魏文帝曹丕伐吴时,徐盛以疑城之计退去魏军。', + yujin:'字文则,泰山钜平人。三国时期曹魏武将。本为鲍信部将,后属曹操,曹操称赞他可与古代名将相比。然而在建安二十四年的襄樊之战中,于禁在败给关羽后投降,致使一代名将晚节不保。', + zhangchunhua:'西晋宣穆皇后张春华(189-247),河内平皋(今河南温县)人。她是晋宣帝司马懿之妻,晋景帝司马师、晋文帝司马昭的母亲。后被追尊为皇后。', + fazheng:'字孝直,本为刘璋部下,刘备围成都时劝说刘璋投降,而后又与刘备进取汉中,献计将曹操大将夏侯渊斩首。法正善奇谋,深受刘备信任和敬重。', + xushu:'字元直,与司马徽、诸葛亮等人为友。先化名单福仕官于新野的刘备,后因曹操囚禁其母而不得不弃备投操,临行前向刘备推荐诸葛亮之才。入曹营后,一言不发,不曾为曹操进献过一计半策。后人形容徐庶“身在曹营心在汉”。', + caozhang:'字子文,是曹操与武宣卞皇后所生第二子,曹丕之弟,曹植之兄,曹魏任城王。曹彰武艺过人,曹操问诸子志向时自言“好为将”,因此得到曹操的赞赏。其胡须黄色,被曹操称为“黄须儿”。', + xunyou:'字公达,颍川颍阴人。东汉末年曹操的五谋臣之一,荀彧从子,被曹操称为“谋主”。官至尚书令。正始五年被追谥为敬侯。', + liaohua:'本名淳,字元俭,襄阳中卢(今湖北襄樊)人。三国时期蜀国后期将领,以勇敢果断著称。廖化是三国时代中经历了魏、蜀、吴整个兴衰过程极少数人中的一个,与严颜、黄忠共称为蜀汉三老将。', + bulianshi:'步夫人(?-238),讳练师,临淮淮阴人。东吴丞相步骘同族,吴大帝孙权之妃,在孙权众夫人中最受孙权的宠爱(宠冠后庭),生有二女:孙鲁班、孙鲁育。赤乌元年卒,追封为皇后,葬于蒋陵。', + chengpu:'字德谋,右北平土垠人。历仕孙坚、孙策、孙权三任君主。孙策死后,他与张昭等人共同辅佐孙权,并讨伐江东境内的山贼,功勋卓著。被人们尊称为“程公”。', + handang:'字义公,辽西令支(今河北迁安)人,吴国将领。韩当因为长于弓箭、骑术并且膂力过人而被孙坚赏识,追随他四处征伐周旋,数次冒险犯难,攻陷敌人、擒拿俘虏。对江东基业的逐渐稳固和吴国的建立有着重要影响。', + liubiao:'刘表,字景升,山阳郡高平(今山东微山)人。东汉末年名士,汉室宗亲,荆州牧,汉末群雄之一。', + zhonghui:'字士季。魏名将,太傅钟繇之子。公元263年,他与邓艾带兵攻打蜀国,最终导致蜀国灭亡。之后钟会设计害死邓艾,联合姜维准备自立,最终因部下反叛失败,与姜维一同死于兵变。', + wangyi:'益州刺史赵昂之妻,赵英、赵月之母。马超作乱凉州时,王异协助丈夫守城,多有功勋,自马超攻冀城至祁山坚守,赵昂曾出奇计九条,王异皆有参与。', + guanzhang:'关兴,名将关羽之子,继承了父亲汉寿亭侯的爵位。年少时即受诸葛亮器重,在蜀汉担任侍中、中监军之职,后在夷陵之战中报了杀父之仇。张苞,张飞的长子,使用父亲的家传蛇矛为兵器,勇猛剽悍不弱其父。', + madai:'名将马超的从弟。早年他曾经从曹操手中死里逃生,后跟随马超大战曹操。后在诸葛亮病逝后受杨仪派遣斩杀了蜀将魏延。曾率领军队出师北伐,被魏将牛金击败而退还。', + caochong:'字仓舒,曹操之子。从小聪明仁爱,与众不同,深受曹操喜爱。留有“曹冲称象”的典故。曹操几次对群臣夸耀他,有让他继嗣之意。可惜曹冲在建安十三病逝,年仅13岁。', + guohuai:'魏国名将,夏侯渊战死时郭淮收集残兵,与杜袭共推张郃为主将而得以稳定局势。曹丕称帝后,赐郭淮爵关内侯,又任镇西长史。诸葛亮伐魏时,郭淮料敌准确,多立战功,而后亦曾击退姜维。', + manchong:'初在曹操手下任许县县令,掌管司法,以执法严格著称;转任汝南太守,开始参与军事,曾参与赤壁之战。后关羽围攻樊城,满宠协助曹仁守城,劝阻了弃城而逃的计划,成功坚持到援军到来。曹丕在位期间,满宠驻扎在新野,负责荆州侧的对吴作战。曹叡在位期间,满宠转任到扬州,接替曹休负责东侧对吴作战,屡有功劳。', + guanping:'关平是关羽在战乱中所收之义子。关羽脱离曹军后,与刘备于关定家中重逢,关定欲使年仅十八岁的关平随关羽同行,刘备便主张让关羽与关平结为义父子。自此后关平随侍在关羽身边,一生东征西讨。他武勇过人,不逊乃父,曾跟随刘备出征西川,立下战功,后来又与曹魏猛将庞德大战三十回合,不分胜负。', + jianyong:'简雍为刘备同乡,年少时与刘备相识。黄巾之乱时,刘备加入对抗黄巾军的战争,简雍便跟随他奔走。常作为谈客,往来使命,刘备围成都时简雍作为刘备使臣成功劝说刘璋投降。简雍擅于辩论、议事。性情简单直接、不拘小节。', + liufeng:'刘备义子。性格刚猛,气力过人。随赵云、张飞等扫荡西川,颇有战功,而后又统领孟达攻取上庸,深为刘备信任。但是后来关羽北伐曹魏,多次要求刘封起兵相助,刘封不从。而后又侵凌孟达,迫其降魏。孟达与魏徐晃共袭刘封,并劝刘封投降,刘封不降,又遭部下叛变,败归成都。刘备在诸葛亮的建议下赐死刘封,刘封自裁,刘备深表痛惜。', + panzhangmazhong:'马忠为潘璋部将。于麦城之战中设伏擒获关羽及关平。刘备伐吴时,马忠随潘璋等往拒,突袭射伤蜀将黄忠,导致黄忠阵亡。不久,潘璋为关兴所杀,马忠领兵围击,击退张苞援军。后降将糜、傅发动兵变,刺杀了马忠,将首级献于刘备。', + yufan:'虞翻初在会稽被太守王朗任命为功曹,曾劝谏王朗躲开孙策未果。后孙策占江东仍任命他为功曹。吕蒙袭取荆州时,虞翻提醒其躲过了埋伏,成功占领城池。后因为直言进谏被孙权发配到交州。', + zhuran:'吴国著名将领,吕蒙白衣渡江取荆州,朱然协助潘璋捉住了关羽。黄武元年,刘备兵伐东吴,朱然与孙桓抵抗刘备大军。后又参加夷陵之战,追击刘备,被前来接应的赵云一枪刺死。', + fuhuanghou:'执金吾伏完之女,汉献帝的皇后,后因怨恨曹操诛董承,与父伏完密谋曹操,事情泄漏,曹将伏皇后禁闭冷宫逼其自缢,所生二位皇子亦被鸩杀。', + liru:'董卓的首席谋士,为董卓所亲信,大小事宜皆与其商议。董卓趁乱进京、说降吕布、废立皇帝、迁都长安等举动,均离不开李儒的参谋之功,并奉命毒杀皇帝刘辩。李傕被曹操击败后,李儒从此不知所踪,消失在历史长河中。', + caozhen:'曹操族子,官至大将军、大司马。其父为曹操招募人马时被州郡所杀,曹操因怜悯曹真少年丧父而待其如亲子一般,因赞赏曹真的勇猛而让他率领虎豹骑。曹真在镇守曹魏西北边境时表现突出,魏文帝时期督众将大破羌胡联军,平定河西;魏明帝时期屡次对抗诸葛亮的北伐。', + hanhaoshihuan:'韩浩和史涣都以忠勇著称,两人皆是曹操心腹将领,共同掌管禁兵。', + chenqun:'陈群一直位居要职,先后受曹操、曹丕托孤,成为魏国重臣,官至司空。其子陈泰,亦是魏国后期名将。最大的贡献为创立了九品中正制,为后期的人才选拔和管理打好了基础。', + wuyi:'初为益州牧刘璋的部将,刘备进攻益州时,泠苞在雒城大败,吴懿自告奋勇,领兵前往救援。不料被赵云和张飞生擒,吴懿于是归降。刘备自称汉中王,迎娶吴懿之妹。诸葛亮出师北伐,吴懿以左将军、高阳侯的身份跟随出征,屡立战功。诸葛亮逝世后,吴懿随姜维一并镇守汉中。', + zhoucang:'原为张宝部将。关羽千里走单骑时,周仓投降关羽,成为了关羽的贴身护卫。建安十六年(公元211年),刘备攻打成都时,周仓跟随关羽镇守荆州。关羽水淹七军时,周仓曾生擒魏军的立义将军庞德,关羽被孙权斩首之后,周仓在麦城大哭失声,拔剑自刎而死。', + zhangsong:'刘璋的部下,长相丑陋但有过目不忘的本领。张松奉命出使许都被曹操赶出,归蜀时为刘备所厚待,于是将西川地理图献予刘备,劝刘备取益州,愿为内应,并派好友孟达、法正帮助刘备。', + sunluban:'孙权之女。孙鲁班与孙权二子孙和不睦。孙权长子孙登死后,孙和被立为太子。孙鲁班向孙权进谗言废孙和太子之位,孙和被废后忧愤而死。', + zhuhuan:'字休穆,吴郡吴县(今江苏苏州)人,吴国名将,官至前将军、青州牧,假节,封为嘉兴侯。有一子朱异。', + guyong:'为蔡邕之徒。其为人少言语,不饮酒,严厉正大,被张纮推荐仕于孙权。孙权任命他为会稽郡丞,行太守事,后不断升迁,官至吴国丞相。顾雍为官,多进良言,有功于吴。', + jushou:'袁绍帐下谋士。史载他“少有大志,擅于谋略”。曾为冀州别驾,举茂才,并当过两次县令。后来又当韩馥别驾,被韩馥表为骑都尉。袁绍占据冀州后任用沮授为从事。经常对袁绍提出良策,但很多时候袁绍并不听从。官渡之战时袁绍大败,沮授未及逃走,被曹操所获,因拒降被曹操处死。', + caifuren:'原是刘表的小妾,正室死后,成为了刘表的后妻。因刘琮娶了自己的侄女所以对其偏爱有加。刘备客居荆州时险些受其所害。刘表死后为了让刘琮即位不惜献州于曹操。', + caorui:'魏文帝曹丕长子,曹魏第二位皇帝。在位期间指挥曹真、司马懿等人成功防御了吴、蜀的多次攻伐,并且平定鲜卑,攻灭公孙渊,颇有建树。', + caoxiu:'曹操族子,曹操大宴铜雀台之时,射箭夺袍。曹休随曹操四处征伐,在攻蜀汉中之战,伐吴濡须口之战均有登场,曾放冷箭射倒凌统的马匹,后又协助夏侯惇平息洛阳纵火叛乱,总管御林兵马,协助曹丕代汉。', + zhongyao:'初为长安郡守,马超反叛时,引军攻打长安,钟繇率军防卫。后城破,钟繇从东门弃城而走,退守潼关。后奉献帝令繇草拟诏令,册立曹操为魏王,曹操以钟繇为相国。明帝即位时,钟繇为太傅。诸葛亮北伐,钟繇举荐司马懿前往抵御。', + liuchen:'刘禅第五子,自幼聪明,英敏过人。魏军兵临城下时,刘禅准备投降,刘谌劝阻刘禅投降不成后悲愤不已,遂自杀于昭烈庙。', + xiahoushi:'夏侯渊从女,夏侯霸从妹,出城拾柴时被张飞所得,取其为妻。后生有二女,其中一人为星彩。', + zhangyi:'曾随诸葛亮南征孟获,七擒孟获的战斗中立下赫赫战功,与祝融夫人单挑。诸葛亮病死五丈原,告诉姜维张嶷忠贞勇猛,经验丰富,是可以依靠的武将,后于征伐魏国时为掩护姜维撤退阵亡。', + sunxiu:'孙权第六子,孙綝发动政变罢黜孙亮后,迎立孙休为帝。后孙綝专权,孙休遣使丁奉等人将其诛杀。孙休在位期间,颁布良制,嘉惠百姓,促进了东吴的繁荣。', + zhuzhi:'孙坚旧将,朱然嗣父,孙坚阵亡后,孙策附袁术,朱治、吕范为之定计,用玉玺向袁术借兵夺取江东。孙策平定东路后,任命朱治为吴郡太守,收军返回江东。后来赤壁之战,大都督周瑜令朱治、吕范为四方巡警使,催督六郡官军。', + quancong:'吴国名将,孙策进兵江东时归顺之,深得孙权赏识,孙权甚至将孙鲁班许配之。', + gongsunyuan:'辽东太守公孙度之孙,辽东割据首领。趁魏、吴骚乱之际自称燕王,发动叛乱,与魏对抗。败给司马懿率领的讨伐大军,被围困后乞降不被接受,与子修在欲出城逃跑时被斩杀。', + guotufengji:'两人均是袁绍帐下谋士。曾联手献计,利用公孙瓒攻击韩馥,又劝说韩馥请袁绍抵挡公孙瓒,终替袁绍拿下冀州。官渡之战期间,两人进谗逼反张郃高览,逼死田丰。使得袁绍的实力大损。', + guohuanghou:'明元郭皇后(并非郭女王),在三国志有正传。曹叡夫人,曹丕的儿媳妇,曹芳,曹髦,曹奂三朝太后,是唯一经历了曹魏全部皇帝时代的贵族女性。曹魏后三帝时期,由于皇帝年少,太后与重臣一同处理政务。史书上对郭皇后有两种截然不同的记载,一种是曹芳被废和曹髦死后郭太后发诏书斥责他们不配人君,另一种却提及曹芳被夺权期间,太后与曹芳相拥而泣,曹髦讨伐司马昭前,曾向太后禀报。', + liyan:'字正方,蜀汉重臣。初为刘表部下,曹操入主荆州时,李严西奔入蜀。刘备入川,李严率众投降,深得刘备器重,受命与诸葛亮、法正等人一同编制《蜀科》,又率军平定了蜀中盗贼。白帝城托孤,与诸葛亮共受遗诏同扶幼主。其人性格矜高难近,终因督粮不利且谎报实情而被流放,后在当地去世。', + sundeng:'字子高,孙权长子。孙权称帝后其被立为太子,受诸葛恪等人辅佐。其人性情温和而能礼贤下士,加之爱民如子,因此深受爱戴。曾劝服孙权在孙虑之死时节哀,并劝谏孙权勿用吕壹苛政。后不幸早逝,临终前上书建言,推荐了多位良臣。其亡故令孙权极为悲伤,也为南鲁党争的祸乱埋下了伏笔。', + liuyu:'伯安,幽州牧,汉室宗亲。在幽州两度任职,颇有威望。张纯、张举叛乱,刘虞恩威并施将其平定,又鼓励农商,大大改善了当地经济民生,青徐二州流民纷纷前来避难。后坚拒袁绍等人立其为帝的请求,派兵迎接献帝,却为袁术所扣,并因此事激化了与公孙瓒的矛盾,最终被击败,为其所害。', + cenhun:'岑昏为宦官,官列中常侍,孙皓即位后得到宠幸。280年,晋龙骧将军王濬率军伐吴,岑昏建议以铁锁链封锁长江,阻挡晋军进攻。王濬以火船烧锁链破其计,沿途东吴将士或死或降。群臣上奏东吴衰败之因在于岑昏,将他与蜀汉的黄皓并列为误国之奸臣。', + sunziliufang:'孙资在曹操手下历任县令,参丞相军事;刘放曾有劝王松归顺曹操之举,为曹操所欣赏,遂招为司空府官,又外放历任几处县令。魏国初建之际,孙资与刘放俱任秘书郎。曹丕继位后,二人一同掌握机密。曹睿病危时,二人力荐曹爽,又推荐招回司马懿辅政。最后,曹睿独召曹爽、司马懿、刘放、孙资同受诏命,而免去曹宇、夏侯献、曹肇、秦朗的官职。', + huanghao:'宦官。为后主刘禅所宠,专秉朝政。黄皓与大将军姜维不睦,维启后主杀之,后主不从。皓阴以心腹阎宇替维。景耀六年,蜀亡,邓艾预欲杀之,皓贿赂左右得免。及后主迁洛阳,皓为司马昭凌迟处死。', + zhangrang:'汉中常侍。同赵忠、曹节、段珪等为“十常侍”,为灵帝所宠。让等专权乱政、卖官索财,朝野皆痛恨之。郎中张钧上书奏请诛杀十常侍,帝不允,让等阴杀钧。及灵帝崩,大将军何进欲杀让等,让阴结何太后,招进入宫,斩杀之。部将袁绍引兵攻让,让等劫帝走河上。追急,让投水自尽。', + }, + perfectPair:{ + wuguotai:['sunjian','sunshangxiang'], + zhangchunhua:['simayi'], + caozhi:['zhenji'], + xunyou:['xunyu'], + xushu:['liubei'], + lingtong:['ganning'], + chengong:['lvbu'], + bulianshi:['sunquan'], + fuhuanghou:['liuxie'], + sunluban:['quancong'], + caifuren:['liubiao'], + xiahoushi:['zhangfei'], + zhoucang:['guanyu'], + guanping:['guanyu'], + sundeng:['sunquan'], + liru:['dongzhuo'], + liuchen:['liushan'], + }, + skill:{ + pindi:{ + enable:'phaseUse', + filterTarget:function(card,player,target){ + if(player==target) return false; + if(player.storage.pindi_target&& + player.storage.pindi_target.contains(target)){ + return false; + } + return true; + }, + filterCard:function(card,player){ + if(player.storage.pindi_type&& + player.storage.pindi_type.contains(get.type2(card))){ + return false; + } + return true; + }, + subSkill:{ + clear:{ + trigger:{player:'phaseAfter'}, + silent:true, + content:function(){ + delete player.storage.pindi_target; + delete player.storage.pindi_type; + } + } + }, + group:'pindi_clear', + check:function(card){ + var num=_status.event.player.getStat('skill').pindi||0; + return 6+num-get.value(card); + }, + position:'he', + content:function(){ + 'step 0' + if(!player.storage.pindi_target){ + player.storage.pindi_target=[]; + } + if(!player.storage.pindi_type){ + player.storage.pindi_type=[]; + } + 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); + 'step 1' + if(result.index==0){ + target.draw(event.num); + } + else{ + target.chooseToDiscard(event.num,'he',true); + } + 'step 2' + if(target.isDamaged()){ + player.link(true); + } + }, + ai:{ + order:8, + threaten:1.8, + result:{ + player:1 + } + } + }, + funan:{ + trigger:{global:['respondAfter','useCardAfter']}, + filter:function(event,player){ + if(!event.respondTo) return false; + if(event.player==player) return false; + if(player!=event.respondTo[0]) return false; + if(get.itemtype(event.cards)!='cards') return false; + if(['h','e','j'].contains(get.position(event.cards[0]))) return false; + if(get.itemtype(event.respondTo[1])!='card') return false; + if(['h','e','j'].contains(get.position(event.respondTo[1]))) return false; + return true; + }, + logTarget:'player', + check:function(event,player){ + if(get.attitude(player,event.player)>=0) return true; + if(player.hasSkill('funan_jiexun')&&player.storage.funan_jiexun==event.player) return true; + if(event.cards.length>1) return true; + return get.value(event.cards[0])>get.value(event.respondTo[1]); + }, + content:function(){ + 'step 0' + if(!player.hasSkill('funan_jiexun')||player.storage.funan_jiexun!=trigger.player){ + trigger.player.gain(trigger.respondTo[1],'gain2'); + trigger.player.addTempSkill('funan_use'); + if(!trigger.player.storage.funan_use){ + trigger.player.storage.funan_use=[]; + } + trigger.player.storage.funan_use.add(trigger.respondTo[1]); + } + 'step 1' + player.gain(trigger.cards,'gain2'); + }, + subSkill:{ + jiexun:{ + mark:'character', + intro:{ + content:'你发动“复难”时,无须令$获得你使用的牌' + }, + trigger:{global:'dieAfter'}, + silent:true, + filter:function(event,player){ + return player.storage.funan_jiexun==event.player; + }, + onremove:true, + content:function(){ + player.removeSkill('funan_jiexun'); + } + }, + use:{ + onremove:true, + mod:{ + cardEnabled:function(card,player){ + if(player.storage.funan_use&&player.storage.funan_use.contains(card)){ + return false; + } + } + } + } + } + }, + jiexun:{ + trigger:{player:'phaseEnd'}, + filter:function(event,player){ + return game.hasPlayer(function(current){ + return current.countCards('ej',{suit:'diamond'}); + }); + }, + init:function(player){ + player.storage.jiexun=0; + }, + onremove:true, + direct:true, + content:function(){ + 'step 0' + var num1=game.countPlayer(function(current){ + return current.countCards('ej',{suit:'diamond'}); + }); + var num2=player.storage.jiexun; + event.num1=num1; + event.num2=num2; + var str='令目标摸'+get.cnNumber(num1)+'张牌'; + if(num2){ + str+=',然后弃置'+get.cnNumber(num2)+'张牌;若目标因此法弃置了所有牌,则你失去“诫训”,然后你发动“复难”时,无须令其获得你使用的牌'; + } + player.chooseTarget(get.prompt('jiexun')).set('ai',function(target){ + return _status.event.coeff*get.attitude(_status.event.player,target); + }).set('coeff',num1>=num2?1:-1).set('prompt2',str); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('jiexun',target); + target.draw(event.num1); + player.storage.jiexun++; + } + else{ + event.finish(); + } + 'step 2' + if(event.num2){ + event.target.chooseToDiscard(event.num2,true,'he'); + } + else{ + event.finish(); + } + 'step 3' + if(!event.target.countCards('he')){ + player.removeSkill('jiexun'); + player.storage.funan_jiexun=event.target; + player.addSkill('funan_jiexun'); + } + } + }, + zhuandui:{ + group:['zhuandui_respond','zhuandui_use'], + subSkill:{ + use:{ + trigger:{player:'shaBegin'}, + check:function(event,player){ + return get.attitude(player,event.target)<0; + }, + filter:function(event,player){ + return player.countCards('h')>0&&event.target.countCards('h')>0&&event.target!=player; + }, + logTarget:'target', + content:function(){ + 'step 0' + player.chooseToCompare(trigger.target); + 'step 1' + if(result.bool){ + trigger.directHit=true; + } + } + }, + respond:{ + trigger:{target:'shaBegin'}, + check:function(event,player){ + return get.effect(player,event.card,event.player,player)<0; + }, + filter:function(event,player){ + return player.countCards('h')>0&&event.player.countCards('h')>0&&event.player!=player; + }, + logTarget:'player', + content:function(){ + 'step 0' + player.chooseToCompare(trigger.player); + 'step 1' + if(result.bool){ + trigger.skipShan=true; + } + } + } + }, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(card.name=='sha'&¤t<0) return 0.7; + } + } + } + }, + tianbian:{ + trigger:{player:'chooseCardBegin'}, + check:function(event,player){ + return player.hasCard(function(card){ + var val=get.value(card); + return val<0||(val<=4&&card.number>=11); + }); + }, + filter:function(event){ + return event.type=='compare'&&!event.directresult; + }, + content:function(){ + var cards=get.cards(); + cards[0].discard(); + cards[0].vanishtag.add('tianbian'); + trigger.directresult=cards; + trigger.untrigger(); + }, + group:'tianbian_number', + subSkill:{ + number:{ + trigger:{player:'compare',target:'compare'}, + filter:function(event,player){ + if(event.iwhile) return false; + if(event.player==player){ + return get.suit(event.card1)=='heart';//&&event.card1.vanishtag.contains('tianbian'); + } + else{ + return get.suit(event.card2)=='heart';//&&event.card2.vanishtag.contains('tianbian'); + } + }, + silent:true, + content:function(){ + game.log(player,'拼点牌点数视为','#y13'); + if(player==trigger.player){ + trigger.num1=13; + } + else{ + trigger.num2=13; + } + } + } + } + }, + jianzheng:{ + trigger:{global:'useCard'}, + filter:function(event,player){ + if(!player.countCards('h')) return false; + return event.player!=player&&event.card.name=='sha'&&!event.targets.contains(player)&& + get.distance(event.player,player,'attack')<=1; + }, + direct:true, + content:function(){ + "step 0" var effect=0; - for(var i=0;i0){ - if(get.color(trigger.card)!='black'){ - effect=0; - } - else{ - effect=1; - } - if(trigger.targets.length==1){ - if(trigger.targets[0].hp==1){ - effect++; - } - if(effect>0&&trigger.targets[0].countCards('h')0){ - effect+=6; - } - } + if(effect>0){ + if(get.color(trigger.card)!='black'){ + effect=0; + } + else{ + effect=1; + } + if(trigger.targets.length==1){ + if(trigger.targets[0].hp==1){ + effect++; + } + if(effect>0&&trigger.targets[0].countCards('h')0){ + effect+=6; + } + } player.chooseCard('h',get.prompt2('jianzheng',trigger.player)).set('ai',function(card){ - if(_status.event.effect>=0){ - var val=get.value(card); - if(val<0) return 10-val; - return _status.event.effect-val; - } - return 0; - }).set('effect',effect).set('logSkill',['jianzheng',trigger.player]); + if(_status.event.effect>=0){ + var val=get.value(card); + if(val<0) return 10-val; + return _status.event.effect-val; + } + return 0; + }).set('effect',effect).set('logSkill',['jianzheng',trigger.player]); "step 1" - if(result.bool&&result.cards){ - event.card=result.cards[0]; - trigger.targets.length=0; - trigger.untrigger(); - } - else{ - event.finish(); - } - "step 2" - if(!event.isMine()) game.delayx(); - "step 3" - if(event.card){ - player.logSkill('jianzheng',trigger.player); - player.lose(result.cards,ui.special); - game.broadcastAll(function(player){ - var cardx=ui.create.card(); - cardx.classList.add('infohidden'); - cardx.classList.add('infoflip'); - player.$throw(cardx,1000,'nobroadcast'); - },player); - } - "step 4" - if(event.card){ - event.card.fix(); - ui.cardPile.insertBefore(event.card,ui.cardPile.firstChild); - } - "step 5" - if(get.color(trigger.card)!='black'){ - trigger.targets.push(player); - trigger.player.line(player); - game.delay(); - trigger.trigger('useCard'); - } - } - }, - qingxian:{ - group:['qingxian_jilie','qingxian_rouhe'], - ai:{ - threaten:0.8, - maixie:true, - maixie_hp:true, - maixie_defend:true, - effect:{ - target:function(card,player,target){ - if(get.tag(card,'damage')){ - if(target.hp>1&&target.hasFriend()) return 0.8; - } - } - } - }, - subSkill:{ - rouhe:{ - trigger:{player:'recoverEnd'}, - direct:true, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('qingxian'),function(card,player,target){ - return target!=player; - }).set('ai',function(target){ - var att=get.attitude(_status.event.player,target); - if(target.isHealthy()&&att>0) return 0; - if(target.hp==1&&att!=0){ - if(att>0) return 9; - else return 10; - } - else{ - return Math.sqrt(Math.abs(att)); - } - }).set('prompt2','当你回复体力后,你可以令一名其他角色执行一项:失去1点体力,随机使用一张装备牌;回复1点体力,弃置一张装备牌。若其以此法使用或弃置的牌为梅花,你回复1点体力'); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - player.logSkill('qingxian',target); - event.insert(lib.skill.qingxian.content_choose,{target:target,player:player}); + if(result.bool&&result.cards){ + event.card=result.cards[0]; + trigger.targets.length=0; + trigger.untrigger(); + } + else{ + event.finish(); + } + "step 2" + if(!event.isMine()) game.delayx(); + "step 3" + if(event.card){ + player.logSkill('jianzheng',trigger.player); + player.lose(result.cards,ui.special); + game.broadcastAll(function(player){ + var cardx=ui.create.card(); + cardx.classList.add('infohidden'); + cardx.classList.add('infoflip'); + player.$throw(cardx,1000,'nobroadcast'); + },player); + } + "step 4" + if(event.card){ + event.card.fix(); + ui.cardPile.insertBefore(event.card,ui.cardPile.firstChild); + } + "step 5" + if(get.color(trigger.card)!='black'){ + trigger.targets.push(player); + trigger.player.line(player); + game.delay(); + trigger.trigger('useCard'); + } + } + }, + qingxian:{ + group:['qingxian_jilie','qingxian_rouhe'], + ai:{ + threaten:0.8, + maixie:true, + maixie_hp:true, + maixie_defend:true, + effect:{ + target:function(card,player,target){ + if(get.tag(card,'damage')){ + if(target.hp>1&&target.hasFriend()) return 0.8; + } + } + } + }, + subSkill:{ + rouhe:{ + trigger:{player:'recoverEnd'}, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('qingxian'),function(card,player,target){ + return target!=player; + }).set('ai',function(target){ + var att=get.attitude(_status.event.player,target); + if(target.isHealthy()&&att>0) return 0; + if(target.hp==1&&att!=0){ + if(att>0) return 9; + else return 10; + } + else{ + return Math.sqrt(Math.abs(att)); + } + }).set('prompt2','当你回复体力后,你可以令一名其他角色执行一项:失去1点体力,随机使用一张装备牌;回复1点体力,弃置一张装备牌。若其以此法使用或弃置的牌为梅花,你回复1点体力'); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('qingxian',target); + event.insert(lib.skill.qingxian.content_choose,{target:target,player:player}); - } - } - }, - jilie:{ - trigger:{player:'damageEnd'}, - filter:function(event,player){ - return event.source&&event.source.isIn()&&event.source!=player; - }, - check:function(event,player){ - if(get.attitude(player,event.source)>0&&event.source.isHealthy()){ - return false; - } - return true; - }, - logTarget:'source', - prompt2:'当你受到伤害后,你可以令伤害来源执行一项:失去1点体力,随机使用一张装备牌;回复1点体力,弃置一张装备牌。若其以此法使用或弃置的牌为梅花,你回复1点体力', - content:function(){ - event.insert(lib.skill.qingxian.content_choose,{target:trigger.source,player:player}); - } - } - }, - content_choose:function(){ - 'step 0' - var index; - if(get.attitude(player,target)>0){ - if(target.isHealthy()){ - index=0; - } - else{ - index=1; - } - } - else{ - if(target.isHealthy()&&target.countCards('e')){ - index=1; - } - else{ - index=0; - } - } - player.chooseControlList( - ['令'+get.translation(target)+'失去1点体力,随机使用一张装备牌', - '令'+get.translation(target)+'回复1点体力,弃置一张装备牌'], - true,function(event,player){ - return _status.event.index; - }).set('index',index); - 'step 1' - if(result.index==0){ - target.loseHp(); - event.card=get.cardPile(function(card){ - return get.type(card)=='equip'; - }); - if(event.card){ - target.equip(event.card,true).set('delay',true); - event.goto(3); - } - else{ - event.finish(); - } - } - else{ - target.recover(); - if(target.countCards('he',{type:'equip'})){ - target.chooseToDiscard('he',true,'弃置一张装备牌',function(card){ - return get.type(card)=='equip'; - }).set('ai',function(card){ - var val=-get.value(card); - if(get.suit(card)=='club'){ - val+=_status.event.att*10; - } - return val; - }).set('att',get.sgnAttitude(target,player)); - } - else{ - event.finish(); - } - } - 'step 2' - if(result&&result.cards){ - event.card=result.cards[0]; - } - 'step 3' - if(event.card&&get.suit(event.card)=='club'){ - player.recover(); - } - } - }, - juexiang:{ - trigger:{player:'dieBegin'}, - direct:true, - skillAnimation:true, - animationColor:'thunder', - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('juexiang'),function(card,player,target){ - return target!=player; - }).set('ai',function(target){ - return get.attitude(_status.event.player,target)/Math.sqrt(target.hp+1); - }); - 'step 1' - if(result.bool){ - var target=result.targets[0] - player.logSkill('juexiang',target); - target.addSkill(lib.skill.juexiang.derivation.randomGet()); - target.addTempSkill('juexiang_club',{player:'phaseBegin'}); - } - }, - derivation:['juexiang_ji','juexiang_lie','juexiang_rou','juexiang_he'], - subSkill:{ - ji:{ - mark:true, - nopop:true, - intro:{ - content:'info' - }, - trigger:{player:'damageEnd'}, - filter:function(event,player){ - return event.source&&event.source.isIn()&&event.source!=player; - }, - check:function(event,player){ - return get.attitude(player,event.source)<0; - }, - logTarget:'source', - content:function(){ - trigger.source.loseHp(); - var card=get.cardPile(function(card){ - return get.type(card)=='equip'; - }); - if(card){ - trigger.source.equip(card,true).set('delay',true); - } - }, - ai:{ - maixie_defend:true, - } - }, - lie:{ - mark:true, - nopop:true, - intro:{ - content:'info' - }, - trigger:{player:'recoverEnd'}, - direct:true, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt2('juexiang_lie'),function(card,player,target){ - return target!=player; - }).set('ai',function(target){ - return -get.attitude(player,target)/(1+target.hp); - }); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - player.logSkill('juexiang_lie',target); - target.loseHp(); - var card=get.cardPile(function(card){ - return get.type(card)=='equip'; - }); - if(card){ - target.equip(card,true).set('delay',true); - } - } - } - }, - rou:{ - mark:true, - nopop:true, - intro:{ - content:'info' - }, - trigger:{player:'damageEnd'}, - filter:function(event,player){ - return event.source&&event.source.isIn()&&event.source!=player; - }, - check:function(event,player){ - var att=get.attitude(player,event.source); - if(player.isHealthy()){ - return att<0; - } - else{ - return att>0 - } - }, - logTarget:'source', - content:function(){ - trigger.source.recover(); - if(trigger.source.countCards('he',{type:'equip'})){ - trigger.source.chooseToDiscard('he',true,'弃置一张装备牌',function(card){ - return get.type(card)=='equip'; - }); - } - }, - ai:{ - maixie_defend:true, - } - }, - he:{ - mark:true, - nopop:true, - intro:{ - content:'info' - }, - trigger:{player:'recoverEnd'}, - direct:true, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt2('juexiang_he'),function(card,player,target){ - return target!=player; - }).set('ai',function(target){ - var att=get.attitude(_status.event.player,target); - if(target.isHealthy()&&target.countCards('he')){ - return -att; - } - else{ - return 10*att/(1+target.hp); - } - }); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - player.logSkill('juexiang_he',target); - target.recover(); - if(target.countCards('he',{type:'equip'})){ - target.chooseToDiscard('he',true,'弃置一张装备牌',function(card){ - return get.type(card)=='equip'; - }); - } - } - } - }, - club:{ - mark:true, - nopop:true, - intro:{ - content:'info' - }, - mod:{ - targetEnabled:function(card,player,target){ - if(get.suit(card)=='club'&&player!=target){ - return false; - } - } - } - } - } - }, - bizhuan:{ - trigger:{player:'useCardAfter',target:'useCardToBegin'}, - filter:function(event,player){ - if(event.name!='useCard'&&event.player==event.target) return false; - if(player.storage.bizhuan.length>=4) return false; - return get.suit(event.card)=='spade'; - }, - init:function(player){ - player.storage.bizhuan=[]; - }, - intro:{ - content:'cards' - }, - frequent:true, - content:function(){ - var card=get.cards()[0]; - ui.special.appendChild(card); - player.$draw(card); - game.delay(); - player.storage.bizhuan.push(card); - player.markSkill('bizhuan'); - }, - mod:{ - maxHandcard:function(player,num){ - return num+player.storage.bizhuan.length; - } - } - }, - tongbo:{ - trigger:{player:'phaseDrawAfter'}, + } + } + }, + jilie:{ + trigger:{player:'damageEnd'}, + filter:function(event,player){ + return event.source&&event.source.isIn()&&event.source!=player; + }, + check:function(event,player){ + if(get.attitude(player,event.source)>0&&event.source.isHealthy()){ + return false; + } + return true; + }, + logTarget:'source', + prompt2:'当你受到伤害后,你可以令伤害来源执行一项:失去1点体力,随机使用一张装备牌;回复1点体力,弃置一张装备牌。若其以此法使用或弃置的牌为梅花,你回复1点体力', + content:function(){ + event.insert(lib.skill.qingxian.content_choose,{target:trigger.source,player:player}); + } + } + }, + content_choose:function(){ + 'step 0' + var index; + if(get.attitude(player,target)>0){ + if(target.isHealthy()){ + index=0; + } + else{ + index=1; + } + } + else{ + if(target.isHealthy()&&target.countCards('e')){ + index=1; + } + else{ + index=0; + } + } + player.chooseControlList( + ['令'+get.translation(target)+'失去1点体力,随机使用一张装备牌', + '令'+get.translation(target)+'回复1点体力,弃置一张装备牌'], + true,function(event,player){ + return _status.event.index; + }).set('index',index); + 'step 1' + if(result.index==0){ + target.loseHp(); + event.card=get.cardPile(function(card){ + return get.type(card)=='equip'; + }); + if(event.card){ + target.equip(event.card,true).set('delay',true); + event.goto(3); + } + else{ + event.finish(); + } + } + else{ + target.recover(); + if(target.countCards('he',{type:'equip'})){ + target.chooseToDiscard('he',true,'弃置一张装备牌',function(card){ + return get.type(card)=='equip'; + }).set('ai',function(card){ + var val=-get.value(card); + if(get.suit(card)=='club'){ + val+=_status.event.att*10; + } + return val; + }).set('att',get.sgnAttitude(target,player)); + } + else{ + event.finish(); + } + } + 'step 2' + if(result&&result.cards){ + event.card=result.cards[0]; + } + 'step 3' + if(event.card&&get.suit(event.card)=='club'){ + player.recover(); + } + } + }, + juexiang:{ + trigger:{player:'dieBegin'}, + direct:true, + skillAnimation:true, + animationColor:'thunder', + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('juexiang'),function(card,player,target){ + return target!=player; + }).set('ai',function(target){ + return get.attitude(_status.event.player,target)/Math.sqrt(target.hp+1); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0] + player.logSkill('juexiang',target); + target.addSkill(lib.skill.juexiang.derivation.randomGet()); + target.addTempSkill('juexiang_club',{player:'phaseBegin'}); + } + }, + derivation:['juexiang_ji','juexiang_lie','juexiang_rou','juexiang_he'], + subSkill:{ + ji:{ + mark:true, + nopop:true, + intro:{ + content:'info' + }, + trigger:{player:'damageEnd'}, + filter:function(event,player){ + return event.source&&event.source.isIn()&&event.source!=player; + }, + check:function(event,player){ + return get.attitude(player,event.source)<0; + }, + logTarget:'source', + content:function(){ + trigger.source.loseHp(); + var card=get.cardPile(function(card){ + return get.type(card)=='equip'; + }); + if(card){ + trigger.source.equip(card,true).set('delay',true); + } + }, + ai:{ + maixie_defend:true, + } + }, + lie:{ + mark:true, + nopop:true, + intro:{ + content:'info' + }, + trigger:{player:'recoverEnd'}, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('juexiang_lie'),function(card,player,target){ + return target!=player; + }).set('ai',function(target){ + return -get.attitude(player,target)/(1+target.hp); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('juexiang_lie',target); + target.loseHp(); + var card=get.cardPile(function(card){ + return get.type(card)=='equip'; + }); + if(card){ + target.equip(card,true).set('delay',true); + } + } + } + }, + rou:{ + mark:true, + nopop:true, + intro:{ + content:'info' + }, + trigger:{player:'damageEnd'}, + filter:function(event,player){ + return event.source&&event.source.isIn()&&event.source!=player; + }, + check:function(event,player){ + var att=get.attitude(player,event.source); + if(player.isHealthy()){ + return att<0; + } + else{ + return att>0 + } + }, + logTarget:'source', + content:function(){ + trigger.source.recover(); + if(trigger.source.countCards('he',{type:'equip'})){ + trigger.source.chooseToDiscard('he',true,'弃置一张装备牌',function(card){ + return get.type(card)=='equip'; + }); + } + }, + ai:{ + maixie_defend:true, + } + }, + he:{ + mark:true, + nopop:true, + intro:{ + content:'info' + }, + trigger:{player:'recoverEnd'}, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('juexiang_he'),function(card,player,target){ + return target!=player; + }).set('ai',function(target){ + var att=get.attitude(_status.event.player,target); + if(target.isHealthy()&&target.countCards('he')){ + return -att; + } + else{ + return 10*att/(1+target.hp); + } + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('juexiang_he',target); + target.recover(); + if(target.countCards('he',{type:'equip'})){ + target.chooseToDiscard('he',true,'弃置一张装备牌',function(card){ + return get.type(card)=='equip'; + }); + } + } + } + }, + club:{ + mark:true, + nopop:true, + intro:{ + content:'info' + }, + mod:{ + targetEnabled:function(card,player,target){ + if(get.suit(card)=='club'&&player!=target){ + return false; + } + } + } + } + } + }, + bizhuan:{ + trigger:{player:'useCardAfter',target:'useCardToBegin'}, + filter:function(event,player){ + if(event.name!='useCard'&&event.player==event.target) return false; + if(player.storage.bizhuan.length>=4) return false; + return get.suit(event.card)=='spade'; + }, + init:function(player){ + player.storage.bizhuan=[]; + }, + intro:{ + content:'cards' + }, + frequent:true, + content:function(){ + var card=get.cards()[0]; + ui.special.appendChild(card); + player.$draw(card); + game.delay(); + player.storage.bizhuan.push(card); + player.markSkill('bizhuan'); + }, + mod:{ + maxHandcard:function(player,num){ + return num+player.storage.bizhuan.length; + } + } + }, + tongbo:{ + trigger:{player:'phaseDrawAfter'}, direct:true, filter:function(event,player){ return player.storage.bizhuan&&player.storage.bizhuan.length&&event.num>0; }, - locked:false, + locked:false, content:function(){ "step 0" - var four=false; - var nofour=!player.hasFriend(); - if(player.storage.bizhuan.length==4){ - var suits=['club','spade','heart','diamond']; - var list=player.getCards('h').concat(player.storage.bizhuan); - for(var i=0;i1){ - if(val<=0) return 0.01; - return val; - } - else{ - return 0; - } - } - } - else{ - if(val<0) return -10; - if(_status.event.player.skipList.contains('phaseUse')){ - return -val; - } - return val; - } + var val=get.value(button.link); + if(_status.event.four||_status.event.nofour){ + var suits=get.copy(_status.event.suits2); + for(var i=0;i1){ + if(val<=0) return 0.01; + return val; + } + else{ + return 0; + } + } + } + else{ + if(val<0) return -10; + if(_status.event.player.skipList.contains('phaseUse')){ + return -val; + } + return val; + } }).set('four',event.four).set('suits2',suits2).set('nofour',event.nofour); if(player==game.me&&!event.isMine()){ game.delay(0.5); @@ -892,28 +962,28 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(player==game.me&&_status.auto){ game.delay(0.5); } - "step 4" - suits2=['club','spade','heart','diamond']; - for(var i=0;i0){ - event.finish(); - } - "step 5" - event.cards=player.storage.bizhuan.slice(0); - player.storage.bizhuan.length=0; - player.unmarkSkill('bizhuan'); - "step 6" + "step 4" + suits2=['club','spade','heart','diamond']; + for(var i=0;i0){ + event.finish(); + } + "step 5" + event.cards=player.storage.bizhuan.slice(0); + player.storage.bizhuan.length=0; + player.unmarkSkill('bizhuan'); + "step 6" if(event.cards.length>1){ player.chooseCardButton('将所有“书”交给任意名其他角色',true,event.cards,[1,event.cards.length]).set('ai',function(button){ - if(ui.selected.buttons.length==0) return 1; - return 0; + if(ui.selected.buttons.length==0) return 1; + return 0; }); } - else if(event.cards.length==1){ - event._result={links:event.cards.slice(0),bool:true}; - } + else if(event.cards.length==1){ + event._result={links:event.cards.slice(0),bool:true}; + } else{ event.finish(); } @@ -924,18 +994,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } event.togive=result.links.slice(0); player.chooseTarget('将'+get.translation(result.links)+'交给一名其他角色',true,function(card,player,target){ - return target!=player; - }).set('ai',function(target){ - var att=get.attitude(_status.event.player,target); + return target!=player; + }).set('ai',function(target){ + var att=get.attitude(_status.event.player,target); if(_status.event.enemy){ - return -att; - } - else if(att>0){ - return att/(1+target.countCards('h')); - } - else{ - return att/100; - } + return -att; + } + else if(att>0){ + return att/(1+target.countCards('h')); + } + else{ + return att/100; + } }).set('enemy',get.value(event.togive[0])<0); } else{ @@ -945,8574 +1015,8598 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.targets.length){ result.targets[0].gain(event.togive,'draw'); player.line(result.targets[0],'green'); - game.log(result.targets[0],'获得了'+get.cnNumber(event.togive.length)+'张','#g“书”'); + game.log(result.targets[0],'获得了'+get.cnNumber(event.togive.length)+'张','#g“书”'); event.goto(6); } }, - ai:{ - combo:'bizhuan' - } - }, - shouxi:{ - trigger:{target:'shaBefore'}, - direct:true, - init:function(player){ - player.storage.shouxi=[]; - }, - content:function(){ - 'step 0' - var list=['sha','shan','tao','jiu','taoyuan','wugu','juedou','huogong','jiedao','tiesuo','guohe','shunshou','wuzhong','wanjian','nanman','lebu','bingliang','shandian']; - for(var i=0;i=0; - }, - content:function(){ - 'step 0' - event.list=game.filterPlayer(function(current){ - return current.countCards('h')=0; + }, + content:function(){ + 'step 0' + event.list=game.filterPlayer(function(current){ + return current.countCards('h')0; - }, - logTarget:'player', - skillAnimation:true, - content:function(){ - 'step 0' - var list=[]; - for(var i=0;i1) str+='中的一人'; - return str; - }, - check:function(card){ - if(card.name=='sha') return 5; - return 8-get.value(card); - }, - content:function(){ - "step 0" - var targets=game.filterPlayer(function(current){ - return current.hasSkill('wengua'); - }); - if(targets.length==1){ - event.target=targets[0]; - event.goto(2); - } - else if(targets.length>0){ - player.chooseTarget(true,'选择【问卦】的目标',function(card,player,target){ - return _status.event.list.contains(target); - }).set('list',targets).set('ai',function(target){ - var player=_status.event.player; - return get.attitude(player,target); - }); - } - else{ - event.finish(); - } - "step 1" - if(result.bool&&result.targets.length){ - event.target=result.targets[0]; - } - else{ - event.finish(); - } - "step 2" - if(event.target){ - player.logSkill('wengua',event.target); - player.addTempSkill('wengua3'); - event.card=cards[0]; - if(event.target!=player){ - player.give(cards,event.target); - } - } - else{ - event.finish(); - } - "step 3" - if(event.target.getCards('h').contains(event.card)){ - event.target.chooseControlList('问卦','将'+get.translation(event.card)+'置于牌堆顶','将'+get.translation(event.card)+'置于牌堆底',true,function(){ - return 1; - }); - } - else{ - event.finish(); - } - "step 4" - event.target.lose(event.card,ui.special); - event.index=result.index; - game.broadcastAll(function(player){ - var cardx=ui.create.card(); - cardx.classList.add('infohidden'); - cardx.classList.add('infoflip'); - player.$throw(cardx,1000,'nobroadcast'); - },event.target); - "step 5" - game.delay(); - "step 6" - event.card.fix(); - if(event.index==1){ - game.log(event.target,'将获得的牌置于牌堆底'); - ui.cardPile.appendChild(event.card); - if(ui.cardPile.childElementCount==1||player==event.target){ - event.togain=[ui.cardPile.firstChild]; - ui.cardPile.firstChild.remove(); - } - else{ - event.togain=get.cards(2); - } - } - else{ - game.log(player,'将获得的牌置于牌堆顶'); - ui.cardPile.insertBefore(event.card,ui.cardPile.firstChild); - if(ui.cardPile.childElementCount==1||player==event.target){ - event.togain=[ui.cardPile.lastChild]; - ui.cardPile.lastChild.remove(); - } - else{ - event.togain=[ui.cardPile.lastChild,ui.cardPile.lastChild.previousSibling]; - ui.cardPile.lastChild.remove(); - ui.cardPile.lastChild.remove(); - } - } - if(event.togain.length){ - player.gain(event.togain.shift()); - player.$draw(); - } - if(event.togain.length){ - event.target.gain(event.togain.shift()); - event.target.$draw(); - } - }, - ai:{ - order:2, - threaten:1.5, - result:{ - player:function(player,target){ - var target=game.findPlayer(function(current){ - return current.hasSkill('wengua'); - }); - if(target){ - return get.attitude(player,target); - } - } - } - } - }, - wengua3:{}, - daiyan:{ - trigger:{player:'phaseEnd'}, - direct:true, - init:function(){ - lib.onwash.push(function(){ - delete _status.daiyan_notao; - }); - }, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('daiyan'),function(card,player,target){ - return target!=player; - }).set('ai',function(target){ - var player=_status.event.player; - var att=get.attitude(player,target); - if(att>0){ - if(_status.daiyan_notao){ - return 0; - } - else{ - if(target==player.storage.daiyan) return 0; - return 2*att/Math.sqrt(1+target.hp); - } - } - else{ - if(_status.daiyan_notao){ - if(target==player.storage.daiyan) return -3*att; - return -att; - } - else{ - return 0; - } - } - }); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - player.logSkill('daiyan',target); - var tao=get.cardPile2(function(card){ - return get.suit(card)=='heart'&&get.type(card)=='basic'; - }); - if(tao){ - target.gain(tao,'gain2'); - } - else{ - _status.daiyan_notao=true; - } - if(target==player.storage.daiyan){ - target.loseHp(); - } - player.storage.daiyan=target; - } - else{ - delete player.storage.daiyan; - } - }, - ai:{ - threaten:1.5, - expose:0.2 - } - }, - fumian:{ - trigger:{player:'phaseBegin'}, - direct:true, - content:function(){ - 'step 0' - if(player.storage.fumian_choice=='draw'){ - player.chooseControlList(get.prompt('fumian'),'摸牌阶段多摸一张牌','使用红色牌可以多选择两个目标(限一次)',function(event,player){ - if(player.hp==1||player.countCards('h')<=1) return 0; - return 1; - }); - } - else if(player.storage.fumian_choice=='red'){ - player.chooseControlList(get.prompt('fumian'),'摸牌阶段多摸两张牌','使用红色牌可以多选择一个目标(限一次)',function(event,player){ - return 0; - }); - } - else{ - player.chooseControlList(get.prompt('fumian'),'摸牌阶段多摸一张牌','使用红色牌可以多选择一个目标(限一次)',function(event,player){ - if(player.hp==1||player.countCards('h')current.hp; - }); - }, - filterCard:true, - check:function(){ - return Math.random(); - }, - discard:false, - lose:false, - filterTarget:function(card,player,target){ - return target!=player&&target.countCards('h')>target.hp; - }, - content:function(){ - 'step 0' - player.showCards(cards); - 'step 1' - var num=target.countCards('h')-target.hp; - if(num<=0){ - event.finish(); - return; - } - var hs=target.getCards('h').randomGets(num); - target.showCards(hs); - var colors=[]; - var numbers=[]; - for(var i=0;i=0||player.countCards('h')0) return '手牌上限+'+storage; - if(storage<0) return '手牌上限'+storage; - return '手牌上限无变化'; - }, - }, - content:function(){ - 'step 0' - if(player.isHealthy()){ - event.type=0; - player.chooseBool(get.prompt('caishi'),'手牌上限+1,然后本回合你的牌不能对其他角色使用',function(event,player){ - return player.skipList.contains('phaseUse')||!player.needsToDiscard(1); - }); - } - else{ - event.type=1; - player.chooseControlList(get.prompt('caishi'),'手牌上限+1,然后本回合你的牌不能对其他角色使用','回复1点体力,然后本回合你的牌不能对自己使用',function(){ - return 1; - }); - } - 'step 1' - if(event.type){ - if(result.control!='cancel2'){ - player.logSkill('caishi'); - if(result.index==0){ - player.addTempSkill('caishi2'); - player.storage.caishi++; - if(player.storage.caishi>=0){ - player.unmarkSkill('zhongjian'); - if(player.storage.caishi>0){ - player.markSkill('caishi'); - } - } - else{ - player.updateMarks(); - } - } - else if(result.index==1){ - player.recover(); - player.addTempSkill('caishi3'); - } - } - } - else{ - if(result.bool){ - player.logSkill('caishi'); - player.addTempSkill('caishi2'); - player.storage.caishi++; - if(player.storage.caishi>=0){ - player.unmarkSkill('zhongjian'); - if(player.storage.caishi>0){ - player.markSkill('caishi'); - } - } - else{ - player.updateMarks(); - } - } - } - }, - mod:{ - maxHandcard:function(player,num){ - if(typeof player.storage.caishi=='number') return num+player.storage.caishi; - }, - } - }, - caishi2:{ - mod:{ - playerEnabled:function(card,player,target){ - if(player!=target) return false; - } - } - }, - caishi3:{ - mod:{ - playerEnabled:function(card,player,target){ - if(player==target) return false; - } - } - }, - ttt:{ - mod:{ - targetEnabled:function(card){ - if(card.name=='tao') return false; - } - } - }, - jyzongshi:{ - audio:2, - trigger:{player:['chooseToCompareAfter','compareMultipleAfter'],target:['chooseToCompareAfter','compareMultipleAfter']}, - filter:function(event,player){ - if(event.preserve) return false; - if(player==event.player){ - if(event.card1.number>event.card2.number){ - return !get.owner(event.card2); - } - else{ - return !get.owner(event.card1); - } - } - else{ - if(event.card1.numberevent.card2.number){ - return event.card2.name!='du'; - } - else{ - return event.card1.name!='du'; - } - } - else{ - if(event.card1.numbertrigger.card2.number){ - player.gain(trigger.card2,'gain2'); - } - else{ - player.gain(trigger.card1,'gain2'); - } - } - else{ - if(trigger.card1.number0; - }, - content:function(){ - 'step 0' - var goon=true; - if(get.attitude(player,trigger.player)>=-0.8) goon=false; - else if(trigger.player.countCards('h')<=3) goon=false; - else if(player.countCards('h','shan')==0) goon=false; - var es=player.getCards('e'); - var color=[]; - for(var i=0;i0){ - return 1+Math.random(); - } - return 0; - } - if(button.link=='nanman'||button.link=='wanjian'||button.link=='taoyuan'||button.link=='wugu'){ - var eff=0; - for(var i=0;i0){ - return 1+Math.random(); - } - return 0; - } - return Math.random(); + event.goto(5); + } + }, + fuzhu:{ + trigger:{global:'phaseEnd'}, + filter:function(event,player){ + return event.player!=player&&event.player.sex=='male'&&ui.cardPile.childElementCount<=player.hp*10; + }, + check:function(event,player){ + return get.attitude(player,event.player)<0&&get.effect(event.player,{name:'sha'},player,player)>0; + }, + logTarget:'player', + skillAnimation:true, + content:function(){ + 'step 0' + var list=[]; + for(var i=0;i1) str+='中的一人'; + return str; + }, + check:function(card){ + if(card.name=='sha') return 5; + return 8-get.value(card); + }, + content:function(){ + "step 0" + var targets=game.filterPlayer(function(current){ + return current.hasSkill('wengua'); + }); + if(targets.length==1){ + event.target=targets[0]; + event.goto(2); + } + else if(targets.length>0){ + player.chooseTarget(true,'选择【问卦】的目标',function(card,player,target){ + return _status.event.list.contains(target); + }).set('list',targets).set('ai',function(target){ + var player=_status.event.player; + return get.attitude(player,target); + }); + } + else{ + event.finish(); + } + "step 1" + if(result.bool&&result.targets.length){ + event.target=result.targets[0]; + } + else{ + event.finish(); + } + "step 2" + if(event.target){ + player.logSkill('wengua',event.target); + player.addTempSkill('wengua3'); + event.card=cards[0]; + if(event.target!=player){ + player.give(cards,event.target); + } + } + else{ + event.finish(); + } + "step 3" + if(event.target.getCards('h').contains(event.card)){ + event.target.chooseControlList('问卦','将'+get.translation(event.card)+'置于牌堆顶','将'+get.translation(event.card)+'置于牌堆底',true,function(){ + return 1; + }); + } + else{ + event.finish(); + } + "step 4" + event.target.lose(event.card,ui.special); + event.index=result.index; + game.broadcastAll(function(player){ + var cardx=ui.create.card(); + cardx.classList.add('infohidden'); + cardx.classList.add('infoflip'); + player.$throw(cardx,1000,'nobroadcast'); + },event.target); + "step 5" + game.delay(); + "step 6" + event.card.fix(); + if(event.index==1){ + game.log(event.target,'将获得的牌置于牌堆底'); + ui.cardPile.appendChild(event.card); + if(ui.cardPile.childElementCount==1||player==event.target){ + event.togain=[ui.cardPile.firstChild]; + ui.cardPile.firstChild.remove(); + } + else{ + event.togain=get.cards(2); + } + } + else{ + game.log(player,'将获得的牌置于牌堆顶'); + ui.cardPile.insertBefore(event.card,ui.cardPile.firstChild); + if(ui.cardPile.childElementCount==1||player==event.target){ + event.togain=[ui.cardPile.lastChild]; + ui.cardPile.lastChild.remove(); + } + else{ + event.togain=[ui.cardPile.lastChild,ui.cardPile.lastChild.previousSibling]; + ui.cardPile.lastChild.remove(); + ui.cardPile.lastChild.remove(); + } + } + if(event.togain.length){ + player.gain(event.togain.shift()); + player.$draw(); + } + if(event.togain.length){ + event.target.gain(event.togain.shift()); + event.target.$draw(); + } + }, + ai:{ + order:2, + threaten:1.5, + result:{ + player:function(player,target){ + var target=game.findPlayer(function(current){ + return current.hasSkill('wengua'); + }); + if(target){ + return get.attitude(player,target); + } + } + } + } + }, + wengua3:{}, + daiyan:{ + trigger:{player:'phaseEnd'}, + direct:true, + init:function(){ + lib.onwash.push(function(){ + delete _status.daiyan_notao; + }); + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('daiyan'),function(card,player,target){ + return target!=player; + }).set('ai',function(target){ + var player=_status.event.player; + var att=get.attitude(player,target); + if(att>0){ + if(_status.daiyan_notao){ + return 0; + } + else{ + if(target==player.storage.daiyan) return 0; + return 2*att/Math.sqrt(1+target.hp); + } + } + else{ + if(_status.daiyan_notao){ + if(target==player.storage.daiyan) return -3*att; + return -att; + } + else{ + return 0; + } + } + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('daiyan',target); + var tao=get.cardPile2(function(card){ + return get.suit(card)=='heart'&&get.type(card)=='basic'; + }); + if(tao){ + target.gain(tao,'gain2'); + } + else{ + _status.daiyan_notao=true; + } + if(target==player.storage.daiyan){ + target.loseHp(); + } + player.storage.daiyan=target; + } + else{ + delete player.storage.daiyan; + } + }, + ai:{ + threaten:1.5, + expose:0.2 + } + }, + fumian:{ + trigger:{player:'phaseBegin'}, + direct:true, + content:function(){ + 'step 0' + if(player.storage.fumian_choice=='draw'){ + player.chooseControlList(get.prompt('fumian'),'摸牌阶段多摸一张牌','使用红色牌可以多选择两个目标(限一次)',function(event,player){ + if(player.hp==1||player.countCards('h')<=1) return 0; + return 1; + }); + } + else if(player.storage.fumian_choice=='red'){ + player.chooseControlList(get.prompt('fumian'),'摸牌阶段多摸两张牌','使用红色牌可以多选择一个目标(限一次)',function(event,player){ + return 0; + }); + } + else{ + player.chooseControlList(get.prompt('fumian'),'摸牌阶段多摸一张牌','使用红色牌可以多选择一个目标(限一次)',function(event,player){ + if(player.hp==1||player.countCards('h')current.hp; + }); + }, + filterCard:true, + check:function(){ + return Math.random(); + }, + discard:false, + lose:false, + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('h')>target.hp; + }, + content:function(){ + 'step 0' + player.showCards(cards); + 'step 1' + var num=target.countCards('h')-target.hp; + if(num<=0){ + event.finish(); + return; + } + var hs=target.getCards('h').randomGets(num); + target.showCards(hs); + var colors=[]; + var numbers=[]; + for(var i=0;i=0||player.countCards('h')0) return '手牌上限+'+storage; + if(storage<0) return '手牌上限'+storage; + return '手牌上限无变化'; + }, + }, + content:function(){ + 'step 0' + if(player.isHealthy()){ + event.type=0; + player.chooseBool(get.prompt('caishi'),'手牌上限+1,然后本回合你的牌不能对其他角色使用',function(event,player){ + return player.skipList.contains('phaseUse')||!player.needsToDiscard(1); + }); + } + else{ + event.type=1; + player.chooseControlList(get.prompt('caishi'),'手牌上限+1,然后本回合你的牌不能对其他角色使用','回复1点体力,然后本回合你的牌不能对自己使用',function(){ + return 1; + }); + } + 'step 1' + if(event.type){ + if(result.control!='cancel2'){ + player.logSkill('caishi'); + if(result.index==0){ + player.addTempSkill('caishi2'); + player.storage.caishi++; + if(player.storage.caishi>=0){ + player.unmarkSkill('zhongjian'); + if(player.storage.caishi>0){ + player.markSkill('caishi'); + } + } + else{ + player.updateMarks(); + } + } + else if(result.index==1){ + player.recover(); + player.addTempSkill('caishi3'); + } + } + } + else{ + if(result.bool){ + player.logSkill('caishi'); + player.addTempSkill('caishi2'); + player.storage.caishi++; + if(player.storage.caishi>=0){ + player.unmarkSkill('zhongjian'); + if(player.storage.caishi>0){ + player.markSkill('caishi'); + } + } + else{ + player.updateMarks(); + } + } + } + }, + mod:{ + maxHandcard:function(player,num){ + if(typeof player.storage.caishi=='number') return num+player.storage.caishi; + }, + } + }, + caishi2:{ + mod:{ + playerEnabled:function(card,player,target){ + if(player!=target) return false; + } + } + }, + caishi3:{ + mod:{ + playerEnabled:function(card,player,target){ + if(player==target) return false; + } + } + }, + ttt:{ + mod:{ + targetEnabled:function(card){ + if(card.name=='tao') return false; + } + } + }, + jyzongshi:{ + audio:2, + trigger:{player:['chooseToCompareAfter','compareMultipleAfter'],target:['chooseToCompareAfter','compareMultipleAfter']}, + filter:function(event,player){ + if(event.preserve) return false; + if(player==event.player){ + if(event.card1.number>event.card2.number){ + return !get.owner(event.card2); + } + else{ + return !get.owner(event.card1); + } + } + else{ + if(event.card1.numberevent.card2.number){ + return event.card2.name!='du'; + } + else{ + return event.card1.name!='du'; + } + } + else{ + if(event.card1.numbertrigger.card2.number){ + player.gain(trigger.card2,'gain2'); + } + else{ + player.gain(trigger.card1,'gain2'); + } + } + else{ + if(trigger.card1.number0; + }, + content:function(){ + 'step 0' + var goon=true; + if(get.attitude(player,trigger.player)>=-0.8) goon=false; + else if(trigger.player.countCards('h')<=3) goon=false; + else if(player.countCards('h','shan')==0) goon=false; + var es=player.getCards('e'); + var color=[]; + for(var i=0;i0){ + return 1+Math.random(); + } + return 0; + } + if(button.link=='nanman'||button.link=='wanjian'||button.link=='taoyuan'||button.link=='wugu'){ + var eff=0; + for(var i=0;i0){ + return 1+Math.random(); + } + return 0; + } + return Math.random(); - }, - backup:function(links,player){ - return { - filterCard:false, - selectCard:0, - popname:true, - viewAs:{name:links[0][2]}, - onuse:function(result,player){ - player.storage.taoluan.push(result.card.name); - }, - } - }, - prompt:function(links,player){ - return '选择'+get.translation(links[0][2])+'的目标'; - } - }, - ai:{ - order:4, - result:{ - player:function(player){ - var allshown=true,players=game.filterPlayer(); - for(var i=0;i0){ - return 1; - } - } - if(allshown) return 1; - return 0; - } - }, - threaten:1.6, - }, - group:['taoluan2'] - }, - taoluan2:{ - trigger:{player:['useCardAfter','respondAfter']}, - forced:true, - popup:false, - filter:function(event,player){ - return event.skill=='taoluan_backup'||event.skill=='taoluan5'; - }, - content:function(){ - 'step 0' - player.chooseTarget(true,function(card,player,target){ - return target!=player; - },'滔乱

令一名其他角色选择一项:1.交给你一张与你以此法使用的牌类别相同的牌;2.你失去1点体力').set('ai',function(target){ - var player=_status.event.player; - if(get.attitude(player,target)>0){ - if(get.attitude(target,player)>0){ - return target.countCards('h'); - } - return target.countCards('h')/2; - } - return 0; - }); - 'step 1' - var target=result.targets[0]; - event.target=target; - player.line(target,'green'); - var type=get.type(trigger.card,'trick'); - target.chooseCard('滔乱

交给'+get.translation(player)+'一张'+get.translation(type)+'牌,或令其失去一点体力且滔乱无效直到回合',function(card,player,target){ - return get.type(card,'trick')==_status.event.cardType; - }).set('cardType',type).set('ai',function(card){ - if(_status.event.att){ - return 11-get.value(card); - } - return 0; - }).set('att',get.attitude(target,player)>0); - 'step 2' - var target=event.target; - if(result.bool){ - player.gain(result.cards,target); - target.$give(result.cards,player); - } - else{ - player.addTempSkill('taoluan3'); - player.loseHp(); - } - } - }, - taoluan3:{}, - taoluan4:{ - trigger:{player:'chooseToRespondBegin'}, - filter:function(event,player){ - if(event.responded) return false; - if(!event.filterCard({name:'shan'})) return false; - if(player.storage.taoluan.contains('shan')) return false; - return true; - }, - check:function(event,player){ - var allshown=true,players=game.filterPlayer(); - for(var i=0;i1&&get.attitude(player,players[i])>0){ - return 1; - } - } - return 0; - }, - content:function(){ - trigger.untrigger(); - trigger.responded=true; - trigger.result={bool:true,card:{name:'shan'},skill:'taoluan_backup'}; - player.storage.taoluan.push('shan'); - }, - }, - taoluan5:{ - enable:'chooseToUse', - filter:function(event,player){ - return event.type=='dying'&&!player.storage.taoluan.contains('tao'); - }, - onuse:function(result,player){ - player.storage.taoluan.push('tao'); - }, - filterCard:function(){ - return false; - }, - selectCard:-1, - viewAs:{name:'tao'}, - ai:{ - skillTagFilter:function(player){ - return !player.storage.taoluan.contains('tao'); - }, - threaten:1.5, - save:true, - } - }, - taoluan_backup:{}, - jishe:{ - enable:'phaseUse', - filter:function(event,player){ - return player.getHandcardLimit()>0; - }, - init:function(player){ - player.storage.jishe=0; - }, - usable:20, - content:function(){ - player.draw(); - player.storage.jishe++; - }, - ai:{ - order:10, - result:{ - player:function(player){ - if(player.countCards('h')0); - var goon=false; - if(player.hp==1){ - goon=true; - } - else{ - var he=player.getCards('he'); - var num=0; - for(var i=0;i=2){ - goon=true;break; - } - } - } - } - player.chooseCard('he',[1,player.countCards('he')],get.prompt('huisheng',trigger.source)).set('ai',function(card){ - if(_status.event.att){ - return 10-get.value(card); - } - if(_status.event.goon){ - return 8-get.value(card); - } - return 0; - }).set('goon',goon).set('att',att); - 'step 1' - if(result.bool){ - player.logSkill('huisheng'); - event.num=result.cards.length; - var goon=false; - if(event.num>2||get.attitude(trigger.source,player)>=0){ - goon=true; - } - var forced=false; - var str='获得其中一张牌并防止伤害'; - if(trigger.source.countCards('he')0; - }).set('ai',function(target){ - var player=_status.event.player; - var zhu=_status.event.zhu; - if(get.attitude(player,target)>0) return 0; - var nh=target.countCards('h'); - var nh2=zhu.countCards('h'); - if(nh>nh2) return 2; - if(nh==nh2&&target.countCards('e')) return 1.5; - return 1; - }).set('zhu',get.zhu(player)); - 'step 1' - if(result.bool){ - event.target=result.targets[0]; - player.logSkill('qinqing',event.target); - player.discardPlayerCard(event.target,'he',true); - } - else{ - event.finish(); - } - 'step 2' - event.target.draw(); - 'step 3' - if(event.target.countCards('h')>get.zhu(player).countCards('h')){ - player.draw(); - } - }, - ai:{ - threaten:1.2 - } - }, - guizao:{ - trigger:{player:'phaseDiscardEnd'}, - direct:true, - filter:function(event,player){ - if(event.cards&&event.cards.length>1){ - var suits=[]; - for(var i=0;i0||target.hp<=2){ - spade=false; - } - target.chooseToDiscard('h',true).set('ai',function(card){ - if(get.suit(card)=='spade'){ - if(_status.event.spade){ - return 10-get.value(card); - } - else{ - return -10-get.value(card); - } - } - if(_status.event.getParent().player.storage.jiyu2.contains(get.suit(card))){ - return -3-get.value(card); - } - return -get.value(card); - }).set('spade',spade); - 'step 1' - var card=result.cards[0]; - if(get.suit(card)=='spade'){ - player.turnOver(); - target.loseHp(); - } - player.storage.jiyu.push(target); - player.storage.jiyu2.add(get.suit(card)); - }, - ai:{ - order:9, - result:{ - target:function(player,target){ - if(player.isTurnedOver()||target.countCards('h')<=3) return -1; - return 0; - } - } - }, - group:'jiyu2', - mod:{ - cardEnabled:function(card,player){ - if(player.storage.jiyu2&&player.storage.jiyu2.contains(get.suit(card))) return false; - } - } - }, - jiyu2:{ - trigger:{player:['phaseUseBegin','phaseAfter']}, - silent:true, - content:function(){ - player.storage.jiyu=[]; - player.storage.jiyu2=[]; - } - }, - jiaozhao:{ - enable:'phaseUse', - usable:1, - audio:2, - check:function(card){ - return 8-get.value(card); - }, - filterCard:true, - discard:false, - lose:false, - content:function(){ - 'step 0' - player.showCards(cards); - 'step 1' - if(player.storage.jiaozhao2){ - event.target=player; - } - else{ - var targets=game.filterPlayer(); - targets.remove(player); - targets.sort(function(a,b){ - return Math.max(1,get.distance(player,a))-Math.max(1,get.distance(player,b)); - }); - var distance=Math.max(1,get.distance(player,targets[0])); - for(var i=1;idistance){ - targets.splice(i);break; - } - } - player.chooseTarget(true,function(card,player,target){ - return _status.event.targets.contains(target); - }).set('ai',function(target){ - return get.attitude(_status.event.player,target); - }).set('targets',targets); - } - 'step 2' - if(!event.target){ - event.target=result.targets[0]; - player.line(result.targets,'green'); - } - if(!event.target){ - event.finish(); - return; - } - var list=['sha','sha','sha','shan','tao','jiu']; - if(player.storage.jiaozhao1){ - list=list.concat(['taoyuan','wugu','juedou','huogong','jiedao','tiesuo','guohe','shunshou','wuzhong','wanjian','nanman']); - } - for(var i=0;i=5){ - choice='jiu'; - } - else if(nh<=2){ - choice='sha'; - } - else{ - choice=Math.random()<0.5?'sha':'jiu'; - } - } - else{ - var recover=0,lose=1,players=game.filterPlayer(); - for(var i=0;i0){ - if(players[i].hp<2){ - lose--; - recover+=0.5; - } - lose--; - recover++; - } - else if(get.attitude(player,players[i])<0){ - if(players[i].hp<2){ - lose++; - recover-=0.5; - } - lose++; - recover--; - } - } - else{ - if(get.attitude(player,players[i])>0){ - lose--; - } - else if(get.attitude(player,players[i])<0){ - lose++; - } - } - } - } - if(lose>recover&&lose>0){ - choice=Math.random()<0.7?'nanman':'wanjian'; - } - else if(lose0){ - choice='taoyuan'; - } - else{ - choice=Math.random()<0.5?'wuzhong':'shunshou'; - } - } - } - event.target.chooseButton(['矫诏',[list,'vcard']],true).set('ai',function(button){ - return button.link[2]==_status.event.choice?1:0; - }).set('choice',choice); - 'step 3' - var chosen=result.links[0][2]; - var nature=result.links[0][3]; - var fakecard={name:chosen,suit:cards[0].suit,number:cards[0].number,nature:nature}; - event.target.showCards(game.createCard(fakecard),get.translation(event.target)+'声明了'+get.translation(chosen)); - player.storage.jiaozhao=cards[0]; - player.storage.jiaozhao_card=fakecard; - game.broadcastAll(function(name){ - lib.skill.jiaozhao2.viewAs=fakecard; - },fakecard); - }, - ai:{ - order:9, - result:{ - player:1 - } - }, - intro:{ - content:function(storage,player){ - if(player.storage.jiaozhao2){ - return '出牌阶段限一次,你可以展示一张手牌,然后你声明一张基本牌或普通锦囊牌的牌名。在此出牌阶段内,你可以将此手牌当声明的牌使用且你不能被选择为目标'; - } - else{ - return '出牌阶段限一次,你可以展示一张手牌,然后选择距离最近的一名其他角色,该角色声明一张基本牌或普通锦囊牌的牌名。在此出牌阶段内,你可以将此手牌当声明的牌使用且你不能被选择为目标'; - } - } - }, - group:['jiaozhao2','jiaozhao3'] - }, - jiaozhao2:{ - enable:'phaseUse', - audio:'jiaozhao', - filter:function(event,player){ - if(!player.storage.jiaozhao) return false; - var name=player.storage.jiaozhao_card.name; - if(name=='tao'||name=='shan'||name=='wuzhong'||name=='jiu') return false; - return player.getCards('h').contains(player.storage.jiaozhao); - }, - filterCard:function(card,player){ - return card==player.storage.jiaozhao; - }, - selectCard:-1, - popname:true, - filterTarget:function(card,player,target){ - if(player==target) return false; - return lib.filter.filterTarget(player.storage.jiaozhao_card,player,target); - }, - check:function(card){ - return 8-get.value(card); - }, - ai:{ - order:6 - } - }, - jiaozhao3:{ - trigger:{player:'phaseEnd'}, - silent:true, - content:function(){ - delete player.storage.jiaozhao; - delete player.storage.jiaozhao_card; - } - }, - danxin:{ - trigger:{player:'damageEnd'}, - frequent:true, - audio:2, - content:function(){ - 'step 0' - if(player.storage.jiaozhao1&&player.storage.jiaozhao2){ - player.draw(); - event.finish(); - } - else{ - var list=['draw_card','更改描述']; - var prompt; - if(player.storage.jiaozhao1){ - prompt='摸一张牌或更改矫诏的描述

更改描述:将“选择距离最近的一名其他角色,该角色”改为“你”'; - } - else{ - prompt='摸一张牌或更改矫诏的描述

更改描述:将“基本牌”改为“基本牌或普通锦囊牌”'; - } - player.chooseControl(list,function(){ - if(!_status.event.player.hasSkill('jiaozhao')) return 'draw_card'; - return '更改描述'; - }).set('prompt',prompt); - } - 'step 1' - if(result.control=='draw_card'){ - player.draw(); - } - else{ - game.log(player,'更改了','【矫诏】','的描述'); - player.popup('更改描述'); - player.markSkill('jiaozhao'); - if(player.storage.jiaozhao1){ - player.storage.jiaozhao2=true; - } - else{ - player.storage.jiaozhao1=true; - } - } - } - }, - zongzuo:{ - trigger:{global:'phaseBefore'}, - forced:true, - priority:10, - audio:2, - filter:function(event,player){ - return !player.storage.zongzuo; - }, - content:function(){ - 'step 0' - player.storage.zongzuo=true; - var list=['wei','shu','wu','qun']; - var num=game.countPlayer(function(current){ - if(list.contains(current.group)){ - list.remove(current.group); - return true; - } - }); - player.gainMaxHp(num); - event.num=num; - 'step 1' - player.hp+=event.num; - player.update(); - }, - group:'zongzuo_lose', - subSkill:{ - lose:{ - trigger:{global:'dieAfter'}, - forced:true, - audio:'zongzuo', - filter:function(event,player){ - var list=['wei','shu','wu','qun']; - if(!list.contains(event.player.group)) return false; - if(game.hasPlayer(function(current){ - return current.group==event.player.group; - })){ - return false; - } - return true; - }, - content:function(){ - player.loseMaxHp(); - } - } - } - }, - zhige:{ - enable:'phaseUse', - usable:1, - audio:2, - filter:function(event,player){ - return player.countCards('h')>player.hp; - }, - filterTarget:function(card,player,target){ - return get.distance(target,player,'attack')<=1&&target.countCards('e')>0; - }, - content:function(){ - 'step 0' - target.chooseToUse({name:'sha'},'止戈:使用一张杀,或将其装备区里的一张牌交给'+get.translation(player)); - 'step 1' - if(!result.bool&&target.countCards('e')){ - target.chooseCard('e',true,'将其装备区里的一张牌交给'+get.translation(player)); - } - else{ - event.finish(); - } - 'step 2' - if(result.bool&&result.cards&&result.cards.length){ - player.gain(result.cards,target); - target.$give(result.cards,player); - } - }, - ai:{ - expose:0.2, - order:5, - result:{ - target:-1, - player:function(player,target){ - if(target.countCards('h')==0) return 0; - if(target.countCards('h')==1) return -0.1; - if(player.hp<=2) return -2; - if(player.countCards('h','shan')==0) return -1; - return -0.5; - } - } - } - }, - kuangbi:{ - enable:'phaseUse', - usable:1, - audio:2, - filterTarget:function(card,player,target){ - return target!=player&&target.countCards('he')>0; - }, - content:function(){ - 'step 0' - target.chooseCard('he',[1,3],'匡弼:将1~3张牌置于'+get.translation(player)+'的武将牌上',true).set('ai',function(card){ - if(get.attitude(_status.event.player,_status.event.getParent().player)>0){ - return 7-get.value(card); - } - return -get.value(card); - }); - 'step 1' - if(result.bool){ - target.$give(result.cards,player); - target.lose(result.cards,ui.special); - player.storage.kuangbi_draw=result.cards; - player.storage.kuangbi_draw_source=target; - player.syncStorage('kuangbi_draw'); - player.addSkill('kuangbi_draw'); - } - }, - ai:{ - order:1, - result:{ - target:function(player,target){ - if(get.attitude(player,target)>0){ - return Math.sqrt(target.countCards('he')); - } - return 0; - }, - player:1 - } - }, - subSkill:{ - draw:{ - trigger:{player:'phaseBegin'}, - forced:true, - mark:true, - intro:{ - content:'cards' - }, - content:function(){ - var cards=player.storage.kuangbi_draw; - if(cards){ - player.gain(cards,'gain2'); - var target=player.storage.kuangbi_draw_source; - if(target&&target.isAlive()){ - target.draw(cards.length); - } - } - delete player.storage.kuangbi_draw; - delete player.storage.kuangbi_draw_source; - player.removeSkill('kuangbi_draw'); - } - } - } - }, - fulin:{ - trigger:{player:'phaseDiscardBegin'}, - silent:true, - content:function(){ - player.addTempSkill('fulin2','phaseDiscardAfter'); - }, - group:['fulin_count','fulin_reset'], - subSkill:{ - reset:{ - trigger:{player:['phaseBegin','phaseEnd']}, - silent:true, - priority:10, - content:function(){ - player.storage.fulin=[]; - } - }, - count:{ - trigger:{player:'gainEnd'}, - silent:true, - filter:function(event,player){ - return _status.currentPhase==player; - }, - content:function(){ - if(!player.storage.fulin){ - player.storage.fulin=[]; - } - for(var i=0;i0; - }, - audio:2, - content:function(){ - 'step 0' - var card=target.getCards('h').randomGet(); - player.gain(card,target); - target.$giveAuto(card,player); - 'step 1' - var name=get.translation(target.name); - player.chooseControl(function(){ - return Math.random()<0.5?'选项一':'选项二'; - }).set('prompt','督粮').set('choiceList',['令'+name+'观看牌堆顶的两张牌,然后获得其中的基本牌','令'+name+'于下个摸牌阶段额外摸一张牌']); - 'step 2' - if(result.control=='选项一'){ - var cards=get.cards(2); - target.viewCards('督粮',cards); - event.cards2=[]; - for(var i=0;i=_status.event.getParent().num) return -1; - if(_status.event.player.hasSkillTag('nofire')) return -1; - if(_status.event.res>=0) return 6-get.value(card); - if(get.type(card)!='basic'){ - return 10-get.value(card); - } - return 8-get.value(card); - }).set('res',res); - } - else{ - event.finish(); - } - "step 2" - if(!result.bool){ - event.target.damage(2,'fire'); - event.num=1; - } - else{ - event.num=result.cards.length+1; - } - event.goto(1); - }, - ai:{ - order:1, - result:{ - player:function(player){ - var num=0,players=game.filterPlayer(); - for(var i=0;i0){ - num--; - } - else if(att<0){ - num++; - } - } - } - if(game.players.length<5){ - return num-1; - } - else{ - return num-2; - } - } - } - }, - init:function(player){ - player.storage.xinfencheng=false; - }, - intro:{ - content:'limited' - } - }, - xinjuece:{ - audio:2, - trigger:{player:'phaseEnd'}, - direct:true, - filter:function(event,player){ - return game.hasPlayer(function(player){ - return player.countCards('h')==0; - }); - }, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('xinjuece'),function(card,player,target){ - return target.countCards('h')==0; - }).set('ai',function(target){ - var player=_status.event.player; - return get.damageEffect(target,player,player); - }); - 'step 1' - if(result.bool){ - player.logSkill('juece',result.targets); - result.targets[0].damage(); - } - } - }, - xinmieji:{ - audio:2, - enable:'phaseUse', - usable:1, - filter:function(event,player){ - return player.countCards('h',{type:['trick','delay'],color:'black'}); - }, - filterCard:function(card){ - return get.color(card)=='black'&&get.type(card,'trick')=='trick'; - }, - filterTarget:function(card,player,target){ - return target!=player&&target.countCards('h')>0; - }, - discard:false, - delay:false, - check:function(card){ - return 8-get.value(card); - }, - content:function(){ - 'step 0' - player.showCards(cards); - 'step 1' - ui.cardPile.insertBefore(cards[0],ui.cardPile.firstChild); - var n1=target.getCards('he',function(card){ - if(!lib.filter.cardDiscardable(card,player)) return false; - return get.type(card,'trick')=='trick'; - }); - var n2=target.getCards('he',function(card){ - if(!lib.filter.cardDiscardable(card,player)) return false; - return get.type(card,'trick')!='trick'; - }); - if(n1.length>1||n2.length>2||(n1.length==1&&n2.length==2)){ - target.chooseToDiscard('弃置一张锦囊牌,或两张非锦囊牌',true,'he',function(card,player){ - if(!lib.filter.cardDiscardable(card,player)) return false; - if(!_status.event.nontrick){ - return get.type(card,'trick')=='trick'; - } - if(ui.selected.cards.length){ - return get.type(card,'trick')!='trick'; - } - return true; - }).set('ai',function(card){ - if(get.type(card,'trick')=='trick'){ - return 8-get.value(card); - } - return -get.value(card); - }).set('selectCard',function(){ - if(ui.selected.cards.length==1&&get.type(ui.selected.cards[0],'trick')=='trick'){ - return 1; - } - return 2; - }).set('nontrick',n2.length>=2).set('complexCard',true); - } - else{ - if(n1.length){ - target.discard(n1); - } - else if(n2.length){ - target.discard(n2); - } - } - }, - ai:{ - order:9, - result:{ - target:-1 - } - } - }, - qianju:{ - mod:{ - globalFrom:function(from,to,distance){ - return distance-(from.maxHp-from.hp); - } - } - }, - qingxi:{ - trigger:{source:'damageBegin'}, - check:function(event,player){ - return get.attitude(player,event.player)<0; - }, - filter:function(event,player){ - return event.card&&event.card.name=='sha'&&player.getEquip(1); - }, - content:function(){ - 'step 0' - var num=1; - var info=get.info(player.getEquip(1)); - if(info&&info.distance&&info.distance.attackFrom){ - num-=info.distance.attackFrom; - } - if(trigger.player.countCards('h')2){ - return 0; - } - return 8-get.value(card); - } - }); - } - 'step 1' - if(!event.directfalse&&result.bool){ - var e1=player.getEquip(1); - if(e1){ - player.discard(e1); - } - } - else{ - trigger.num++; - } - } - }, - jieyue:{ - group:'jieyue1' - }, - jieyue1:{ - audio:2, - trigger:{player:'phaseEnd'}, - direct:true, - content:function(){ - 'step 0' - player.chooseCardTarget({ - filterTarget:function(card,player,target){ - return target!=player&&target.countCards('he')>0; - }, - filterCard:lib.filter.cardDiscardable, - ai1:function(card){ - return 7-get.useful(card); - }, - ai2:function(target){ - return 1-get.attitude(_status.event.player,target); - }, - prompt:get.prompt('jieyue') - }); - 'step 1' - if(result.bool){ - player.logSkill('jieyue1',result.targets); - player.discard(result.cards); - var target=result.targets[0]; - event.target=target; - target.chooseCard('将一张牌置于'+get.translation(player)+'的武将牌上,或令其弃置你的一张牌','he').set('ai',function(card){ - if(card.name=='du') return 20; - var player=_status.event.player; - if(get.attitude(player,_status.event.getParent().player)>0){ - return 8-get.value(card); - } - var nh=player.countCards('h'); - if(nh<=2){ - return 6-get.value(card); - } - if(nh<=3){ - return 2-get.value(card); - } - return 0; - }); - } - else{ - event.finish(); - } - 'step 2' - if(result.bool&&result.cards&&result.cards.length){ - event.target.$give(result.cards,player); - player.storage.jieyue2=result.cards[0]; - event.target.lose(result.cards[0],ui.special); - player.syncStorage('jieyue2'); - player.addSkill('jieyue2'); - } - else if(event.target.countCards('he')){ - player.discardPlayerCard(event.target,true); - } - }, - ai:{ - expose:0.1 - } - }, - jieyue2:{ - mark:'card', - intro:{ - content:'card' - }, - audio:true, - enable:'chooseToUse', - filterCard:function(card){ - return get.color(card)=='black'; - }, - viewAsFilter:function(player){ - return player.countCards('h',{color:'black'})>0; - }, - viewAs:{name:'wuxie'}, - prompt:'将一张黑色手牌当无懈可击使用', - check:function(card){return 8-get.value(card)}, - threaten:1.2, - group:['jieyue3','jieyue4'] - }, - jieyue3:{ - enable:['chooseToRespond'], - filterCard:function(card){ - return get.color(card)=='red'; - }, - viewAs:{name:'shan'}, - viewAsFilter:function(player){ - if(!player.countCards('h',{color:'red'})) return false; - }, - audio:true, - prompt:'将一张红色手牌当闪打出', - check:function(){return 1}, - ai:{ - respondShan:true, - skillTagFilter:function(player){ - if(!player.countCards('h',{color:'red'})) return false; - }, - effect:{ - target:function(card,player,target,current){ - if(get.tag(card,'respondShan')&¤t<0) return 0.8 - } - } - } - }, - jieyue4:{ - trigger:{player:'phaseBegin'}, - forced:true, - content:function(){ - player.gain(player.storage.jieyue2,'gain2'); - player.storage.jieyue2=null; - player.removeSkill('jieyue2'); - } - }, - jinjiu:{ - mod:{ - cardEnabled:function(card,player){ - if(card.name=='jiu'&&_status.event.skill!='jinjiu') return false; - }, - cardUsable:function(card,player){ - if(card.name=='jiu'&&_status.event.skill!='jinjiu') return false; - }, - cardRespondable:function(card,player){ - if(card.name=='jiu'&&_status.event.skill!='jinjiu') return false; - }, - cardSavable:function(card,player){ - if(card.name=='jiu'&&_status.event.skill!='jinjiu') return false; - }, - }, - enable:['chooseToUse','chooseToRespond'], - filter:function(event,player){ - return player.countCards('h','jiu')>0; - }, - filterCard:{name:'jiu'}, - viewAs:{name:'sha'}, - viewAsFilter:function(player){ - if(!player.countCards('h','jiu')) return false; - }, - check:function(){return 1}, - ai:{ - skillTagFilter:function(player){ - if(!player.countCards('h','jiu')) return false; - }, - respondSha:true, - order:4, - useful:-1, - value:-1 - } - }, - xianzhen:{ - audio:2, - enable:'phaseUse', - usable:1, - filterTarget:function(card,player,target){ - return player!=target&&target.countCards('h')>0; - }, - filter:function(event,player){ - return player.countCards('h')>0; - }, - content:function(){ - "step 0" - player.chooseToCompare(target); - "step 1" - if(result.bool){ - player.storage.xianzhen=target; - player.addTempSkill('xianzhen2'); - } - else{ - player.addTempSkill('xianzhen3'); - } - }, - 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 - } - }, - xianzhen2:{ - mod:{ - targetInRange:function(card,player,target,now){ - if(player.storage.xianzhen==target) return true; - }, - cardUsable:function(card,player,num){ - if(card.name=='sha') return Infinity; - } - }, - ai:{ - unequip:true - } - }, - xianzhen3:{ - mod:{ - cardEnabled:function(card){if(card.name=='sha') return false} - } - }, - lihuo:{ - enable:'phaseUse', - usable:1, - filterCard:function(card){ - return card.name=='sha'&&!card.nature; - }, - filter:function(event,player){ - return player.countCards('h','sha')>0 - }, - viewAs:{name:'sha',nature:'fire'}, - mod:{ - selectTarget:function(card,player,range){ - if(card.name=='sha'&&card.nature=='fire'&&range[1]!=-1){ - range[1]++; - } - }, - }, - group:'lihuo2' - }, - lihuo2:{ - trigger:{source:'damageEnd'}, - forced:true, - popup:false, - filter:function(event,player){ - return event.parent.skill=='lihuo'; - }, - content:function(){ - player.addSkill('lihuo3'); - } - }, - lihuo3:{ - trigger:{player:'useCardAfter'}, - vanish:true, - filter:function(event,player){ - return event.card.name=='sha'; - }, - forced:true, - audio:false, - content:function(){ - player.loseHp(); - player.removeSkill('lihuo3'); - } - }, - chunlao:{ - trigger:{player:'phaseEnd'}, - direct:true, - audio:2, - filter:function(event,player){ - return player.countCards('h','sha')>0&&!player.storage.chunlao.length; - }, - init:function(player){ - player.storage.chunlao=[]; - }, - intro:{ - content:'cards', - }, - content:function(){ - 'step 0' - player.chooseCard([1,player.countCards('h','sha')],get.prompt('chunlao'),{name:'sha'}).set('ai',function(){ - return 1; - }); - 'step 1' - if(result.bool){ - player.logSkill('chunlao'); - player.storage.chunlao=player.storage.chunlao.concat(result.cards); - player.syncStorage('chunlao'); - player.markSkill('chunlao'); - player.lose(result.cards,ui.special); - player.$give(result.cards,player); - } - }, - ai:{ - effect:{ - player:function(card,player,target){ - if(_status.currentPhase!=player) return; - if(card.name=='sha'&&!player.needsToDiscard()&& - !player.storage.chunlao.length&&target.hp>1){ - return 'zeroplayertarget'; - } - } - }, - threaten:1.4 - }, - group:'chunlao2' - }, - chunlao2:{ - enable:'chooseToUse', - filter:function(event,player){ - return event.type=='dying'&&event.dying&&event.dying.hp<=0&&player.storage.chunlao.length>0; - }, - filterTarget:function(card,player,target){ - return target==_status.event.dying; - }, - direct:true, - delay:0, - selectTarget:-1, - content:function(){ - "step 0" - player.chooseCardButton(get.translation('chunlao'),player.storage.chunlao,true); - "step 1" - if(result.bool){ - player.logSkill('chunlao'); - player.$throw(result.links); - player.storage.chunlao.remove(result.links[0]); - result.links[0].discard(); - player.syncStorage('chunlao'); - target.useCard({name:'jiu'},target); - if(!player.storage.chunlao.length){ - player.unmarkSkill('chunlao'); - } - else{ - player.markSkill('chunlao'); - } - } - }, - ai:{ - order:6, - skillTagFilter:function(player){ - return player.storage.chunlao.length>0; - }, - save:true, - result:{ - target:3 - }, - threaten:1.6 - }, - }, - chunlao2_old:{ - trigger:{global:'dying'}, - priority:6, - filter:function(event,player){ - return event.player.hp<=0&&player.storage.chunlao.length>0; - }, - direct:true, - content:function(){ - "step 0" - var att=get.attitude(player,trigger.player); - player.chooseCardButton(get.prompt('chunlao',trigger.player),player.storage.chunlao).set('ai',function(button){ - if(_status.event.att>0) return 1; - return 0; - }).set('att',att); - "step 1" - if(result.bool){ - player.logSkill('chunlao',trigger.player); - player.$throw(result.links); - player.storage.chunlao.remove(result.links[0]); - result.links[0].discard(); - player.syncStorage('chunlao'); - trigger.player.useCard({name:'jiu'},trigger.player); - if(!player.storage.chunlao.length){ - player.unmarkSkill('chunlao'); - } - else{ - player.markSkill('chunlao'); - } - } - }, - ai:{ - expose:0.2 - } - }, - shenduan:{ - trigger:{player:'discardAfter'}, - filter:function(event,player){ - for(var i=0;i0&&get.distance(player,event.player,'attack')<=1; - }, - content:function(){ - 'step 0' - var att=get.attitude(player,trigger.player); - var nh=trigger.player.countCards('h'); - var eff=get.effect(trigger.player,{name:'sha'},player,player); - player.chooseCardButton(get.prompt('yonglve',trigger.player),trigger.player.getCards('j')).set('ai',function(button){ - var name=button.link.viewAs||button.link.name; - var att=_status.event.att; - var nh=_status.event.nh; - var eff=_status.event.eff; - var trigger=_status.event.getTrigger(); - if(att>0&&eff>=0) return 1; - if(att>=0&&eff>0) return 1; - if(att>0&&(trigger.player.hp>=3||trigger.player.getEquip('bagua')||trigger.player.countCards('h','shan'))){ - if(name=='lebu'&&nh>trigger.player.hp) return 1; - if(name=='bingliang'&&nh1; - })){ - range[1]++; - } - } - } - } - }, - ai:{ - unequip:true, - skillTagFilter:function(player){ - if(game.hasPlayer(function(current){ - return get.distance(player,current)>1; - })){ - return false; - } - } - } - }, - sidi:{ - trigger:{global:'respondEnd'}, - filter:function(event,player){ - if(event.parent.parent.name!='sha') return false; - if(event.player==player) return true; - return _status.currentPhase==player; - }, - frequent:true, - init:function(player){ - player.storage.sidi=[]; - }, - intro:{ - content:'cards' - }, - content:function(){ - var card=get.cards()[0]; - game.log(player,'将',card,'置于武将牌上'); - player.$gain2(card); - player.storage.sidi.add(card); - player.markSkill('sidi'); - player.syncStorage('sidi'); - }, - group:'sidi2' - }, - sidi2:{ - trigger:{global:'phaseUseBegin'}, - filter:function(event,player){ - if(event.player==player) return false; - if(!player.storage.sidi.length) return false; - return true; - }, - check:function(event,player){ - if(get.attitude(player,event.player)>=0) return false; - if(event.player.getEquip('zhuge')) return false; - if(event.player.hasSkill('paoxiao')) return false; - var players=game.filterPlayer(); - for(var i=0;i0) break; - } - if(i==players.length) return false; - var nh=event.player.countCards('h'); - var nsha=event.player.countCards('h','sha'); - if(nh<2) return false; - switch(nh){ - case 2: - if(nsha) return Math.random()<0.4; - return Math.random()<0.2; - case 3: - if(nsha) return Math.random()<0.8; - return Math.random()<0.3; - case 4: - if(nsha>1) return true; - if(nsha) return Math.random()<0.9; - return Math.random()<0.5; - default:return true; - } - }, - content:function(){ - 'step 0' - if(player.storage.sidi.length==1){ - event.directbutton=player.storage.sidi[0]; - } - else{ - player.chooseCardButton('弃置武将牌上的一张牌',player.storage.sidi,true); - } - 'step 1' - var button; - if(event.directbutton){ - button=event.directbutton; - } - else if(result.bool&&result.links&&result.links.length){ - button=result.links[0]; - } - if(button){ - player.$throw([button]); - player.line(trigger.player,'green'); - game.log(player,'将',button,'置于弃牌堆'); - button.discard(); - trigger.player.addTempSkill('sidi3'); - player.storage.sidi.remove(button); - player.syncStorage('sidi'); - if(player.storage.sidi.length==0){ - player.unmarkSkill('sidi'); - } - else{ - player.markSkill('sidi'); - } - game.delayx(); - } - } - }, - sidi3:{ - mod:{ - cardUsable:function(card,player,num){ - if(card.name=='sha') return num-1; - } - } - }, - zhongyong:{ - trigger:{player:'shaMiss'}, - direct:true, - filter:function(event,player){ - return event.responded&&get.itemtype(event.responded.cards)=='cards'; - }, - content:function(){ - "step 0" - var cards=trigger.responded.cards; - event.cards=cards; - player.chooseTarget('忠勇:将'+get.translation(trigger.responded.cards)+'交给一名角色',function(card,player,target){ - return target!=_status.event.getTrigger().target; - }).set('ai',function(target){ - var att=get.attitude(_status.event.player,target); - if(target.countCards('h','shan')&&target.countCards('h')>=2){ - att/=1.5; - } - return att; - }); - "step 1" - if(result.bool){ - player.logSkill('zhongyong',result.targets); - result.targets[0].gain(event.cards,'gain2'); - if(result.targets[0]==player){ - event.finish(); - } - } - else{ - event.finish(); - } - "step 2" - if(player.hasSkill('jiu')){ - game.broadcastAll(function(player){ - player.removeSkill('jiu'); - },player); - event.jiu=true; - } - player.chooseToUse('是否对'+get.translation(trigger.target)+'再使用一张杀?', - {name:'sha'},trigger.target,-1).logSkill='qinglong_skill'; - "step 3" - if(result.bool); - else if(event.jiu){ - player.addSkill('jiu'); - } - } - }, - xinzhongyong:{ - trigger:{player:'shaAfter'}, - direct:true, - filter:function(event,player){ - return get.itemtype(event.cards)=='cards'||(event.responded&&get.itemtype(event.responded.cards)=='cards'); - }, - content:function(){ - "step 0" - event.cards1=trigger.cards.slice(0); - if(trigger.responded&&trigger.responded.cards&&trigger.responded.cards.length){ - event.cards2=trigger.responded.cards.slice(0); - } - player.chooseTarget(get.prompt('zhongyong'),function(card,player,target){ - return target!=_status.event.getTrigger().target&&target!=player; - }).set('ai',function(target){ - return get.attitude(_status.event.player,target); - }); - "step 1" - if(result.bool){ - event.target=result.targets[0]; - if(!event.cards2){ - player.logSkill('zhongyong',event.target); - event.sha=false; - event.target.gain(event.cards1,'gain2'); - if(get.color(event.cards1)=='red'){ - event.sha=true; - } - event.goto(3); - } - else{ - var sha=false; - if(event.cards1.length==1&&get.color(event.cards1[0])=='red'){ - sha=true; - } - player.chooseControl('杀','闪',function(event,player){ - if(_status.event.choosesha) return '杀'; - return '闪'; - }).set('prompt','选择交给'+get.translation(result.targets)+'的牌').set('choosesha',sha); - } - } - else{ - event.finish(); - } - "step 2" - player.logSkill('zhongyong',event.target); - event.sha=false; - if(result.control=='杀'){ - event.target.gain(event.cards1,'gain2'); - if(get.color(event.cards1)=='red'){ - event.sha=true; - } - } - else{ - event.target.gain(event.cards2,'gain2'); - if(get.color(event.cards2)=='red'){ - event.sha=true; - } - } - "step 3" - if(event.sha){ - event.target.chooseToUse('是否使用一张杀?',{name:'sha'}).set('filterTarget',function(card,player,target){ - return target!=_status.event.source&&get.distance(_status.event.source,target,'attack')<=1&&player.canUse('sha',target,false); - }).set('source',player); - } - } - }, - dangxian:{ - trigger:{player:'phaseBegin'}, - forced:true, - content:function(){ - 'step 0' - player.phaseUse(); - 'step 1' - player.getStat().card={}; - } - }, - longyin:{ - trigger:{global:'shaBegin'}, - direct:true, - filter:function(event,player){ - return event.target==event.targets[0]&&player.countCards('he')>0&&event.card.name=='sha'&& - _status.currentPhase==event.player&&event.parent.parent.parent.name=='phaseUse'; - }, - content:function(){ - 'step 0' - var go=false; - if(get.attitude(player,trigger.player)>0){ - if(get.color(trigger.card)=='red'){ - go=true; - } - else if(!trigger.player.hasSkill('paoxiao')&& - !trigger.player.hasSkill('tanlin3')&& - !trigger.player.hasSkill('zhaxiang2')&& - !trigger.player.hasSkill('fengnu')&& - !trigger.player.getEquip('zhuge')){ - var nh=trigger.player.countCards('h'); - if(player==trigger.player){ - go=(player.countCards('h','sha')>0); - } - else if(nh>=4){ - go=true; - } - else if(player.countCards('h','sha')){ - if(nh==3){ - go=Math.random()<0.8; - } - else if(nh==2){ - go=Math.random()<0.5; - } - } - else if(nh>=3){ - if(nh==3){ - go=Math.random()<0.5; - } - else if(nh==2){ - go=Math.random()<0.2; - } - } - } - } - var next=player.chooseToDiscard(get.prompt('longyin'),'he'); - next.logSkill=['longyin',trigger.player]; - next.set('ai',function(card){ - if(_status.event.go){ - return 6-get.value(card); - } - return 0; - }); - next.set('go',go); - 'step 1' - if(result.bool){ - trigger.player.getStat().card.sha--; - if(get.color(trigger.card)=='red'){ - player.draw(); - } - // player.logSkill('longyin',trigger.player); - } - }, - ai:{ - expose:0.2 - } - }, - jigong:{ - audio:2, - trigger:{player:'phaseUseBegin'}, - check:function(event,player){ - var nh=player.countCards('h')-player.countCards('h',{type:'equip'}); - if(nh<=1) return true; - if(player.countCards('h','tao')) return false; - if(nh<=2) return Math.random()<0.7; - if(nh<=3) return Math.random()<0.4; - return false; - }, - content:function(){ - player.draw(2); - player.addTempSkill('jigong2'); - } - }, - jigong2:{ - mod:{ - maxHandcard:function(player,num){ - var damage=player.getStat().damage; - if(typeof damage=='number') return num-player.hp+damage; - return 0; - } - } - }, - shifei:{ - audio:2, - trigger:{player:'chooseToRespondBegin'}, - filter:function(event,player){ - if(event.responded) return false; - if(!event.filterCard({name:'shan'})) return false; - return true; - }, - check:function(event,player){ - if(get.attitude(player,_status.currentPhase)>0) return true; - var nh=_status.currentPhase.countCards('h')+1; - var players=game.filterPlayer(); - for(var i=0;inh){ - if(!player.hasShan()||get.attitude(player,players[i])<=0) return true; - } - } - return false; - }, - content:function(){ - 'step 0' - player.line(_status.currentPhase,'green'); - _status.currentPhase.draw(); - 'step 1' - var nh=_status.currentPhase.countCards('h'); - var nmax=nh+1; - var targets=[]; - var players=game.filterPlayer(); - for(var i=0;inmax){ - nmax=nh2; - targets.length=0; - targets.push(players[i]); - } - else if(nh2==nmax){ - targets.push(players[i]); - } - } - if(targets.length==1){ - event.onlytarget=targets[0]; - } - else if(targets.length){ - player.chooseTarget('选择一名角色弃置其一张牌',true,function(card,player,target){ - return _status.event.targets.contains(target); - }).set('ai',function(target){ - return -get.attitude(_status.event.player,target); - }).set('targets',targets); - } - else{ - event.finish(); - } - 'step 2' - var target; - if(event.onlytarget){ - target=event.onlytarget; - } - else if(result.targets&&result.targets.length){ - target=result.targets[0]; - } - if(target){ - player.line(target,'green'); - player.discardPlayerCard(target,'he',true); - trigger.untrigger(); - trigger.responded=true; - trigger.result={bool:true,card:{name:'shan'}} - } - }, - ai:{ - effect:{ - target:function(card,player,target,current){ - if(get.tag(card,'respondShan')&¤t<0){ - var nh=player.countCards('h'); - var players=game.filterPlayer(); - for(var i=0;inh) return 0.4; - } - } - } - } - } - }, - huaiyi:{ - audio:2, - enable:'phaseUse', - usable:1, - delay:0, - filter:function(event,player){ - return player.countCards('h',{color:'red'})&&player.countCards('h',{color:'black'}); - }, - content:function(){ - 'step 0' - player.chooseControl('红色','黑色').set('ai',function(){ - var player=_status.event.player; - if(player.countCards('h',{color:'red'})==1&& - player.countCards('h',{color:'black'})>1) return '红色'; - return '黑色'; - }); - 'step 1' - event.control=result.control; - player.showHandcards(); - 'step 2' - var cards; - if(event.control=='红色'){ - cards=player.getCards('h',{color:'red'}); - } - else{ - cards=player.getCards('h',{color:'black'}); - } - player.discard(cards); - event.num=cards.length; - 'step 3' - player.chooseTarget([1,event.num],function(card,player,target){ - return target!=player&&target.countCards('he')>0; - }).set('ai',function(target){ - return -get.attitude(_status.event.player,target)+0.5; - }); - 'step 4' - if(result.bool&&result.targets){ - player.line(result.targets,'green'); - event.targets=result.targets; - event.targets.sort(lib.sort.seat); - event.gained=event.targets.length; - } - else{ - event.finish(); - } - 'step 5' - if(event.targets.length){ - player.gainPlayerCard(event.targets.shift(),'he',true); - event.redo(); - } - 'step 6' - if(event.gained>=2){ - player.loseHp(); - } - }, - ai:{ - order:function(item,player){ - if(player.countCards('h',{color:'red'})==1) return 10; - if(player.countCards('h',{color:'black'})==1) return 10; - return 1; - }, - result:{ - player:1 - } - } - }, - yaoming:{ - audio:2, - trigger:{player:'damageEnd',source:'damageEnd'}, - direct:true, - filter:function(event,player){ - if(player.hasSkill('yaoming2')) return false; - var nh=player.countCards('h'); - return game.hasPlayer(function(current){ - return current.countCards('h')!=nh; - }); - }, - content:function(){ - 'step 0' - var nh=player.countCards('h'); - player.chooseTarget(get.prompt('yaoming'),function(card,player,target){ - return _status.event.nh!=target.countCards('h'); - }).set('ai',function(target){ - var att=get.attitude(_status.event.player,target); - if(target.countCards('h')>_status.event.nh) return -att; - return att; - }).set('nh',nh); - 'step 1' - if(result.bool){ - player.logSkill('yaoming',result.targets); - player.addTempSkill('yaoming2'); - var target=result.targets[0]; - if(target.countCards('h')0; - }, - content:function(){ - 'step 0' - player.choosePlayerCard(target,'e',true); - 'step 1' - if(result.links){ - var num=0,players=game.filterPlayer(); - for(var i=0;inum2){ - player.draw(); - } - }, - ai:{ - order:7, - result:{ - target:function(player,target){ - if(target.hasSkillTag('noe')) return 1; - if(target.getEquip(1)||target.getEquip(4)) return -1; - if(target.getEquip(2)) return -0.7; - return -0.5; - } - } - } - }, - zhaofu:{ - unique:true, - global:'zhaofu2', - zhuSkill:true - }, - zhaofu2:{ - mod:{ - attackTo:function(from,to,distance){ - if(from.group!='wu') return; - var players=game.filterPlayer(); - for(var i=0;i0&&target!=player; - }, - content:function(){ - 'step 0' - if(target.countCards('e')){ - target.chooseBool('是否将装备区内的所有牌交给'+get.translation(player)+'?').set('ai',function(){ - if(_status.event.player.countCards('e')>=3) return false; - return true; - }); - } - else{ - target.chooseToDiscard(true,'he'); - event.finish(); - } - 'step 1' - if(result.bool){ - var es=target.getCards('e'); - player.gain(es,target); - target.$give(es,player); - player.removeSkill('yanzhu'); - } - else{ - target.chooseToDiscard(true,'he'); - } - }, - ai:{ - order:6, - result:{ - target:function(player,target){ - var ne=target.countCards('e'); - if(!ne) return -2; - if(ne>=2) return -ne; - return 0; - } - } - } - }, - shizhi:{ - mod:{ - cardRespondable:function(card,player){ - if(card.name=='shan'&&player.hp==1&&_status.event.skill!='shizhi') return false; - }, - }, - enable:['chooseToUse','chooseToRespond'], - filter:function(event,player){ - return player.hp==1; - }, - filterCard:{name:'shan'}, - viewAs:{name:'sha'}, - viewAsFilter:function(player){ - if(!player.countCards('h','shan')) return false; - if(player.hp!=1) return false; - }, - check:function(){return 1}, - ai:{ - skillTagFilter:function(player){ - if(!player.countCards('h','shan')) return false; - if(player.hp!=1) return false; - }, - respondSha:true, - order:4, - useful:-1, - value:-1 - } - }, - wurong:{ - enable:'phaseUse', - usable:1, - filter:function(event,player){ - return player.countCards('h')>0; - }, - filterTarget:function(card,player,target){ - return target.countCards('h')>0&&target!=player; - }, - content:function(){ - "step 0" - if(target.countCards('h')==0||player.countCards('h')==0){ - event.finish(); - return; - } - "step 1" - var sendback=function(){ - if(_status.event!=event){ - return function(){ - event.resultOL=_status.event.resultOL; - }; - } - }; - if(player.isOnline()){ - player.wait(sendback); - event.ol=true; - player.send(function(){ - game.me.chooseCard(true).set('glow_result',true).ai=function(){ - return Math.random(); - }; - game.resume(); - }); - } - else{ - event.localPlayer=true; - player.chooseCard(true).set('glow_result',true).ai=function(){ - return Math.random(); - }; - } - if(target.isOnline()){ - target.wait(sendback); - event.ol=true; - target.send(function(){ - var rand=Math.random()<0.4; - game.me.chooseCard(true).set('glow_result',true).ai=function(card){ - if(rand) return card.name=='shan'?1:0; - return card.name=='shan'?0:1; - }; - game.resume(); - }); - } - else{ - event.localTarget=true; - } - "step 2" - if(event.localPlayer){ - event.card1=result.cards[0]; - } - if(event.localTarget){ - var rand=Math.random()<0.4; - target.chooseCard(true).set('glow_result',true).ai=function(card){ - if(rand) return card.name=='shan'?1:0; - return card.name=='shan'?0:1; - }; - } - "step 3" - if(event.localTarget){ - event.card2=result.cards[0]; - } - if(!event.resultOL&&event.ol){ - game.pause(); - } - "step 4" - try{ - if(!event.card1) event.card1=event.resultOL[player.playerid].cards[0]; - if(!event.card2) event.card2=event.resultOL[target.playerid].cards[0]; - if(!event.card1||!event.card2){ - throw('err'); - } - } - catch(e){ - console.log(e); - event.finish(); - return; - } - if(event.card2.number>=10||event.card2.number<=4){ - if(target.countCards('h')>2){ - event.addToAI=true; - } - } - game.broadcastAll(function(card1,card2){ - card1.classList.remove('glow'); - card2.classList.remove('glow'); - },event.card1,event.card2); - "step 5" - game.broadcastAll(function(){ - ui.arena.classList.add('thrownhighlight'); - }); - game.addVideo('thrownhighlight1'); - player.$compare(event.card1,target,event.card2); - game.delay(4); - "step 6" - game.log(player,'展示了',event.card1); - game.log(target,'展示了',event.card2); - var name1=event.card1.name; - if(player.hp==1&&name1=='shan'){ - name1='sha'; - } - if(name1=='sha'&&event.card2.name!='shan'){ - player.discard(event.card1).set('animate',false); - target.$gain2(event.card2); - var clone=event.card1.clone; - if(clone){ - clone.style.transition='all 0.5s'; - clone.style.transform='scale(1.2)'; - clone.delete(); - game.addVideo('deletenode',player,get.cardsInfo([clone])); - } - game.broadcast(function(card){ - var clone=card.clone; - if(clone){ - clone.style.transition='all 0.5s'; - clone.style.transform='scale(1.2)'; - clone.delete(); - } - },event.card1); - target.damage(); - } - else if(name1!='sha'&&event.card2.name=='shan'){ - player.discard(event.card1).set('animate',false); - target.$gain2(event.card2); - var clone=event.card1.clone; - if(clone){ - clone.style.transition='all 0.5s'; - clone.style.transform='scale(1.2)'; - clone.delete(); - game.addVideo('deletenode',player,get.cardsInfo([clone])); - } - game.broadcast(function(card){ - var clone=card.clone; - if(clone){ - clone.style.transition='all 0.5s'; - clone.style.transform='scale(1.2)'; - clone.delete(); - } - },event.card1); - player.gainPlayerCard(target,true,'he'); - } - else{ - player.$gain2(event.card1); - target.$gain2(event.card2); - } - game.broadcastAll(function(){ - ui.arena.classList.remove('thrownhighlight'); - }); - game.addVideo('thrownhighlight2'); - }, - ai:{ - order:6, - result:{ - target:-1, - } - } - }, - zhanjue:{ - audio:2, - enable:'phaseUse', - filterCard:true, - selectCard:-1, - filter:function(event,player){ - if(!player.countCards('h')) return false; - if(player.storage.zhanjue>=2) return false; - return true; - }, - viewAs:{name:'juedou'}, - group:['zhanjue2','zhanjue3','zhanjue4'], - ai:{ - damage:true, - order:1, - effect:{ - player:function(card,player,target){ - if(_status.event.skill=='zhanjue'){ - if(player.countCards('h')>=3||target.countCards('h')>=3) return 'zeroplayertarget'; - if(player.countCards('h','tao')) return 'zeroplayertarget'; - if(target.countCards('h','sha')>1) return 'zeroplayertarget'; - } - } - } - } - }, - zhanjue2:{ - audio:false, - trigger:{player:'phaseBefore'}, - silent:true, - content:function(){ - player.storage.zhanjue=0; - } - }, - zhanjue3:{ - audio:false, - trigger:{player:'damageAfter',source:'damageAfter'}, - forced:true, - popup:false, - filter:function(event,player){ - return event.parent.skill=='zhanjue'; - }, - content:function(){ - player.storage.zhanjue2=trigger.player; - } - }, - zhanjue4:{ - audio:false, - trigger:{player:'juedouAfter'}, - forced:true, - popup:false, - filter:function(event,player){ - return event.skill=='zhanjue'; - }, - content:function(){ - if(typeof player.storage.zhanjue!='number'){ - player.storage.zhanjue=0; - } - if(player.storage.zhanjue2==player){ - player.draw(2); - player.storage.zhanjue+=2; - } - else if(player.storage.zhanjue2){ - if(player.storage.zhanjue2.isAlive()){ - game.asyncDraw([player,player.storage.zhanjue2]); - } - else{ - player.draw(); - } - player.storage.zhanjue++; - } - else{ - player.draw(); - player.storage.zhanjue++; - } - delete player.storage.zhanjue2; - } - }, - qinwang:{ - unique:true, - group:['qinwang1','qinwang2'], - zhuSkill:true, - subSkill:{ - ai:{} - } - }, - qinwang1:{ - audio:2, - trigger:{player:'chooseToRespondBegin'}, - filter:function(event,player){ - if(event.responded) return false; - if(!player.hasZhuSkill('qinwang')) return false; - if(!player.countCards('he')) return false; - if(event.filterCard({name:'sha'},player,event)==false) return false; - return game.hasPlayer(function(current){ - return current!=player&¤t.group=='shu'; - }); - }, - direct:true, - content:function(){ - "step 0" - var yep=false; - if(!player.storage.jijianging){ - var players=game.filterPlayer(); - for(var i=0;i1&&(nh>=4||(nh>=3&&players[i].countCards('h','sha')))){ - yep=true;break; - } - } - } - var next=player.chooseToDiscard(get.prompt('qinwang'),'he'); - next.set('ai',function(card){ - if(_status.event.yep) return 5-get.value(card); - return 0; - }); - next.set('yep',yep); - next.logSkill='qinwang' - "step 1" - if(!result.bool){ - event.finish(); - } - "step 2" - if(event.current==undefined) event.current=player.next; - if(event.current==player){ - event.finish(); - } - else if(event.current.group=='shu'){ - player.storage.jijianging=true; - var next=event.current.chooseToRespond('是否替'+get.translation(player)+'打出一张杀?',{name:'sha'}); - next.set('ai',function(){ - var event=_status.event; - return (get.attitude(event.player,event.source)-2); - }); - next.set('source',player); - next.autochoose=lib.filter.autoRespondSha; - } - else{ - event.current=event.current.next; - event.redo(); - } - "step 3" - player.storage.jijianging=false; - if(result.bool){ - event.finish(); - trigger.result=result; - trigger.responded=true; - trigger.animate=false; - event.current.draw(); - if(typeof event.current.ai.shown=='number'&&event.current.ai.shown<0.95){ - event.current.ai.shown+=0.3; - if(event.current.ai.shown>0.95) event.current.ai.shown=0.95; - } - } - else{ - event.current=event.current.next; - event.goto(2); - } - } - }, - qinwang2:{ - audio:2, - enable:'chooseToUse', - filter:function(event,player){ - if(event.filterCard&&!event.filterCard({name:'sha'},player,event)) return false; - if(!player.hasZhuSkill('qinwang')) return false; - if(!lib.filter.cardUsable({name:'sha'},player)) return false; - return game.hasPlayer(function(current){ - return current!=player&¤t.group=='shu'; - }); - }, - filterCard:true, - position:'he', - check:function(card){ - var player=_status.event.player,players=game.filterPlayer(); - for(var i=0;i1&&(nh>=4||(nh>=3&&players[i].countCards('h','sha')))){ - return 5-get.value(card); - } - } - return 0; - }, - filterTarget:function(card,player,target){ - if(_status.event._backup&& - typeof _status.event._backup.filterTarget=='function'&& - !_status.event._backup.filterTarget({name:'sha'},player,target)){ - return false; - } - return player.canUse({name:'sha'},target); - }, - content:function(){ - "step 0" - if(event.current==undefined) event.current=player.next; - if(event.current==player){ - player.addSkill('jijiang3'); - player.addTempSkill('qinwang_ai'); - event.getParent(2).step=0; - event.finish(); - } - else if(event.current.group=='shu'){ - var next=event.current.chooseToRespond('是否替'+get.translation(player)+'对'+get.translation(target)+'使用一张杀', - function(card){ - var evt=_status.event.getParent(); - return evt.player.canUse(card,evt.target)&&card.name=='sha'; - }); - next.set('ai',function(card){ - var event=_status.event; - return get.effect(event.target,card,event.source,event.player); - }); - next.set('source',player); - next.set('target',target); - next.autochoose=lib.filter.autoRespondSha; - } - else{ - event.current=event.current.next; - event.redo(); - } - "step 1" - if(result.bool){ - event.finish(); - event.current.draw(); - if(result.cards&&result.cards.length==1&&result.cards[0].name=='sha'){ - player.useCard(result.cards[0],target).animate=false; - } - else{ - player.useCard({name:'sha'},target).animate=false; - } - if(typeof event.current.ai.shown=='number'&&event.current.ai.shown<0.95){ - event.current.ai.shown+=0.3; - if(event.current.ai.shown>0.95) event.current.ai.shown=0.95; - } - } - else{ - event.current=event.current.next; - event.goto(0); - } - }, - ai:{ - result:{ - target:function(player,target){ - if(player.hasSkill('jijiang3')) return 0; - if(player.hasSkill('qinwang_ai')) return 0; - return get.effect(target,{name:'sha'},player,target); - } - }, - order:function(){ - return get.order({name:'sha'})-0.1; - }, - } - }, - zuoding:{ - trigger:{global:'useCard'}, - filter:function(event,player){ - return !player.hasSkill('zuoding2')&&get.suit(event.card)=='spade'&& - _status.currentPhase==event.player&&event.targets&&event.targets.length&& - event.player!=player; - }, - direct:true, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('zuoding'),function(card,player,target){ - return _status.event.getTrigger().targets.contains(target); - }).set('ai',function(target){ - return get.attitude(_status.event.player,target); - }); - 'step 1' - if(result.bool){ - player.logSkill('zuoding',result.targets); - result.targets[0].draw(); - } - }, - ai:{ - expose:0.2 - }, - group:'zuoding3' - }, - zuoding2:{}, - zuoding3:{ - trigger:{global:'damageEnd'}, - silent:true, - content:function(){ - player.addTempSkill('zuoding2'); - } - }, - huomo:{ - audio:2, - trigger:{player:'chooseToRespondBegin'}, - filter:function(event,player){ - if(event.responded) return false; - if(!event.filterCard({name:'shan'})) return false; - if(player.hasSkill('huomo2')) return false; - if(event.parent.name!='sha') return false; - var hs=player.getCards('he',{color:'black'}); - for(var i=0;i0; - })){ - switch(button.link[2]){ - case 'tao':return 5; - case 'jiu':return 3.01; - case 'sha': - if(button.link[3]=='fire') return 2.95; - else if(button.link[3]=='fire') return 2.92; - else return 2.9; - } - } - return 0; - }, - backup:function(links,player){ - return { - filterCard:function(card){ - return get.type(card)!='basic'&&get.color(card)=='black'; - }, - viewAs:{name:links[0][2],nature:links[0][3]}, - position:'he', - popname:true, - precontent:function(){ - 'step 0' - var card=event.result.cards[0]; - event.card=card; - player.$throw(card,1000); - game.log(player,'将',card,'置于牌堆顶'); - event.result.cards.length=0; - player.lose(card); - 'step 1' - game.delay(); - 'step 2' - ui.cardPile.insertBefore(event.card,ui.cardPile.firstChild); - }, - } - }, - prompt:function(links,player){ - return '将一张黑色非基本牌置于牌堆顶并视为使用一张'+get.translation(links[0][3]||'')+get.translation(links[0][2]); - } - }, - ai:{ - order:function(){ - var player=_status.event.player; - var event=_status.event; - if(!player.storage.huomo.jiu&&event.filterCard({name:'jiu'},player,event)&&get.effect(player,{name:'jiu'})>0){ - return 3.1; - } - return 2.9; - }, - save:true, - respondSha:true, - skillTagFilter:function(player,tag,arg){ - if(player.hasCard(function(card){ - return get.color(card)=='black'&&get.type(card)!='basic'; - },'he')){ - if(!player.storage.huomo) player.storage.huomo={}; - if(tag=='respondSha'){ - if(arg!='use') return false; - if(player.storage.huomo.sha) return false; - } - else{ - if(player.storage.huomo.tao&&player.storage.huomo.jiu) return false; - } - } - else{ - return false; - } - }, - result:{ - player:1 - } - } - }, - taoxi:{ - audio:2, - trigger:{player:'useCardToBegin'}, - filter:function(event,player){ - return _status.currentPhase==player&&event.targets.length==1&& - event.target.countCards('h')>0&&!player.hasSkill('taoxi4')&&player!=event.target; - }, - check:function(event,player){ - return get.attitude(player,event.target)<0; - }, - intro:{ - content:'card' - }, - content:function(){ - var card=trigger.target.getCards('h').randomGet(); - player.showCards([card]); - player.storage.taoxi=card; - player.storage.taoxi2=trigger.target; - player.syncStorage('taoxi'); - player.markSkill('taoxi'); - player.addTempSkill('taoxi4'); - }, - group:['taoxi2','taoxi3'] - }, - taoxi2:{ - audio:false, - enable:'phaseUse', - filter:function(event,player){ - if(player.storage.taoxi&&player.storage.taoxi2&& - get.owner(player.storage.taoxi)==player.storage.taoxi2&& - lib.filter.filterCard(player.storage.taoxi,player,event)){ - return true; - } - return false; - }, - filterTarget:function(card,player,target){ - return player.canUse(player.storage.taoxi,target); - }, - selectTarget:function(){ - var info=get.info(_status.event.player.storage.taoxi); - if(info.notarget) return -1; - return get.select(info.selectTarget); - }, - multitarget:true, - multiline:true, - content:function(){ - 'step 0' - var card=player.storage.taoxi; - if(!card){ - event.finish(); - return; - } - var owner=get.owner(card); - if(owner){ - owner.lose(card,ui.special); - } - event.card=card; - player.$throw(card); - 'step 1' - player.useCard(event.card,targets).animate=false; - delete player.storage.taoxi; - delete player.storage.taoxi2; - player.unmarkSkill('taoxi'); - }, - ai:{ - order:8, - result:{ - target:function(player,target){ - return get.effect(target,player.storage.taoxi,player,target); - }, - player:1 - } - } - }, - taoxi3:{ - trigger:{player:'phaseEnd'}, - forced:true, - popup:false, - filter:function(event,player){ - return player.storage.taoxi?true:false; - }, - content:function(){ - if(get.owner(player.storage.taoxi)==player.storage.taoxi2){ - player.loseHp(); - } - delete player.storage.taoxi; - delete player.storage.taoxi2; - player.unmarkSkill('taoxi'); - } - }, - taoxi4:{}, - xingshuai:{ - skillAnimation:true, - audio:2, - trigger:{player:'dying'}, - priority:6, - zhuSkill:true, - filter:function(event,player){ - if(player.storage.xingshuai) return false; - if(player.hp>0) return false; - if(!player.hasZhuSkill('xingshuai')) return false; - return game.hasPlayer(function(current){ - return current!=player&¤t.group=='wei'; - }); - }, - init:function(player){ - if(player.hasZhuSkill('xingshuai')){ - player.markSkill('xingshuai'); - player.storage.xingshuai=false; - } - }, - intro:{ - content:'limited' - }, - unique:true, - content:function(){ - 'step 0' - player.storage.xingshuai=true; - player.awakenSkill('xingshuai'); - var targets=game.filterPlayer(); - targets.remove(player); - event.targets=targets; - event.damages=[]; - 'step 1' - if(event.targets.length){ - var current=event.targets.shift(); - if(current.group=='wei'){ - current.chooseBool('是否令'+get.translation(player)+'回复一点体力?').set('ai',function(){ - return get.attitude(_status.event.player,_status.event.target)>2; - }).set('target',player); - event.current=current; - } - else{ - event.redo(); - } - } - else{ - event.goto(3); - } - 'step 2' - if(result.bool){ - event.damages.push(event.current); - event.current.line(player,'green'); - game.log(event.current,'令',player,'回复一点体力'); - } - if(event.targets.length){ - event.goto(1); - } - 'step 3' - if(event.damages.length){ - player.recover(event.damages.length); - } - 'step 4' - if(event.damages.length){ - event.damages.shift().damage('nosource'); - event.redo(); - } - } - }, - mingjian:{ - enable:'phaseUse', - usable:1, - filterTarget:function(card,player,target){ - return player!=target; - }, - filter:function(event,player){ - return player.countCards('h')>0; - }, - filterCard:true, - selectCard:-1, - discard:false, - lose:true, - content:function(){ - player.$give(cards.length,target); - target.gain(cards,player); - target.addTempSkill('mingjian2',{player:'phaseAfter'}); - }, - ai:{ - order:1, - result:{ - target:function(player,target){ - if(player.countCards('h')==1&&player.countCards('h','du')) return -1; - if(player.hp<=2&&player.countCards('h','shan')) return 0; - if(target.countCards('h')+player.countCards('h')>target.hp+2) return 0; - if(get.attitude(player,target)>3) return 1; - return 0; - } - } - } - }, - mingjian2:{ - mark:true, - intro:{ - content:'手牌上限+1,出杀次数+1' - }, - mod:{ - maxHandcard:function(player,num){ - return num+1; - }, - cardUsable:function(card,player,num){ - if(card.name=='sha') return num+1; - } - }, - }, - mingjian_old:{ - audio:2, - trigger:{player:'phaseUseBefore'}, - direct:true, - filter:function(event,player){ - return player.countCards('h')>0; - }, - content:function(){ - 'step 0' - var go=Math.random()<0.5; - player.chooseTarget(get.prompt('mingjian'),function(card,player,target){ - return player!=target - }).ai=function(target){ - var att=get.attitude(player,target); - if(att>3){ - if(player.countCards('h')>player.hp) return att; - if(go) return att; - } - return 0; - } - 'step 1' - if(result.bool){ - player.logSkill('mingjian',result.targets); - trigger.cancel(); - var target=result.targets[0]; - target.addSkill('mingjian2'); - var hs=player.getCards('h'); - target.gain(hs,player); - player.$give(hs.length,target); - } - } - }, - mingjian2_old:{ - audio:false, - trigger:{global:'phaseAfter'}, - forced:true, - popup:false, - content:function(){ - if(lib.config.glow_phase){ - if(_status.currentPhase){ - _status.currentPhase.classList.remove('glow_phase'); - } - player.classList.add('glow_phase'); - } - game.addVideo('phaseChange',player); - _status.currentPhase=player; - player.ai.tempIgnore=[]; - player.stat.push({card:{},skill:{}}); - player.phaseUse(); - player.removeSkill('mingjian2'); - } - }, - huituo:{ - audio:2, - trigger:{player:'damageEnd'}, - direct:true, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('huituo')).set('ai',function(target){ - var player=_status.event.player; - if(get.attitude(player,target)>0){ - return get.recoverEffect(target,player,player)+1; - } - return 0; - }); - 'step 1' - if(result.bool){ - player.logSkill('huituo',result.targets); - var target=result.targets[0]; - event.target=target; - target.judge(function(card){ - if(target.hp==target.maxHp){ - if(get.color(card)=='red') return -1; - } - if(get.color(card)=='red') return 1; - return 0; - }); - } - else{ - event.finish(); - } - 'step 2' - if(result.color){ - if(result.color=='red'){ - if(event.target.hp0&&event.source&&event.source.getEquip(1)!=undefined&& - event.card&&event.card.name=='sha'; - }, - direct:true, - priority:5, - audio:2, - content:function(){ - 'step 0' - var next=player.chooseToDiscard('he',get.prompt('duodao')); - next.logSkill=['duodao',trigger.source]; - next.set('ai',function(card){ - if(get.attitude(_status.event.player,_status.event.getTrigger().source)<=0){ - return 6-get.value(card); - } - return 0; - }); - 'step 1' - if(result.bool){ - trigger.source.$give(trigger.source.getEquip(1),player); - player.gain(trigger.source.getEquip(1),trigger.source); - } - }, - ai:{ - maixie_defend:true, - } - }, - anjian:{ - audio:2, - trigger:{source:'damageBegin'}, - check:function(event,player){ - return get.attitude(player,event.player)<=0; - }, - forced:true, - filter:function(event,player){ - return event.card&&event.card.name=='sha'&&get.distance(event.player,player,'attack')>1&& - event.parent.name!='_lianhuan'&&event.parent.name!='_lianhuan2'; - }, - content:function(){ - trigger.num++; - } - }, - xinpojun:{ - trigger:{player:'shaBegin'}, - direct:true, - filter:function(event,player){ - return event.target.hp>0&&event.target.countCards('he')>0; - }, - audio:2, - logTarget:'target', - content:function(){ - 'step 0' - player.choosePlayerCard(trigger.target,'he', - [1,Math.min(trigger.target.countCards('he'),trigger.target.hp)],get.prompt('pojun',trigger.target)); - 'step 1' - if(result.bool&&result.links.length){ - player.logSkill('xinpojun'); - if(trigger.target.storage.xinpojun2){ - trigger.target.storage.xinpojun2=trigger.target.storage.xinpojun2.concat(result.links); - } - else{ - trigger.target.storage.xinpojun2=result.links; - } - game.addVideo('storage',trigger.target,['xinpojun2',get.cardsInfo(trigger.target.storage.xinpojun2),'cards']); - trigger.target.addSkill('xinpojun2'); - trigger.target.lose(result.links,ui.special); - } - }, - ai:{ - expose:0.2 - } - }, - xinpojun2:{ - trigger:{global:'phaseEnd'}, - forced:true, - audio:false, - mark:true, - intro:{ - content:'cardCount' - }, - content:function(){ - if(player.storage.xinpojun2){ - player.gain(player.storage.xinpojun2); - delete player.storage.xinpojun2; - } - player.removeSkill('xinpojun2'); - }, - group:'xinpojun3' - }, - xinpojun3:{ - trigger:{player:'dieBegin'}, - forced:true, - popup:false, - content:function(){ - player.$throw(player.storage.xinpojun2,1000); - for(var i=0;i=0; - }, - priority:-5, - logTarget:'player', - content:function(){ - game.asyncDraw([trigger.player,player]); - }, - ai:{ - expose:0.1 - } - }, - yanyu:{ - audio:2, - enable:'phaseUse', - filter:function(event,player){ - return player.countCards('h','sha')>0; - }, - filterCard:{name:'sha'}, - prepare:function(cards,player){ - player.$throw(cards,1000); - }, - discard:false, - delay:0.5, - content:function(){ - "step 0" - player.draw(); - "step 1" - for(var i=0;i=2; - }, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('yanyu'),function(card,player,target){ - return target.sex=='male'&&target!=player; - }).set('ai',function(target){ - return get.attitude(_status.event.player,target); - }); - 'step 1' - if(result.bool){ - player.logSkill('yanyu',result.targets); - result.targets[0].draw(2); - } - } - }, - youdi:{ - audio:true, - trigger:{player:'phaseEnd'}, - direct:true, - filter:function(event,player){ - return player.countCards('he')>0; - }, - content:function(){ - "step 0" - player.chooseTarget(get.prompt('youdi'),function(card,player,target){ - return player!=target; - }).set('ai',function(target){ - if(!_status.event.goon) return 0; - if(target.countCards('he')==0) return 0; - return -get.attitude(_status.event.player,target); - }).set('goon',player.countCards('h','sha')<=player.countCards('h')/3); - "step 1" - if(result.bool){ - game.delay(); - player.logSkill('youdi',result.targets); - event.target=result.targets[0]; - event.target.discardPlayerCard(player,'he',true); - } - else{ - event.finish(); - } - "step 2" - if(result.links[0].name!='sha'&&event.target.countCards('he')){ - player.gainPlayerCard('he',event.target,true); - } - }, - ai:{ - expose:0.2, - threaten:1.4 - } - }, - fuhun:{ - enable:['chooseToUse','chooseToRespond'], - filterCard:true, - selectCard:2, - position:'h', - audio:2, - derivation:['wusheng','paoxiao'], - viewAs:{name:'sha'}, - prompt:'将两张手牌当杀使用或打出', - check:function(card){ - if(_status.event.player.hasSkill('wusheng')&&get.color(card)=='red') return 0; - if(_status.event.name=='chooseToRespond'){ - if(card.name=='sha') return 0; - return 6-get.useful(card); - } - if(_status.event.player.countCards('h')<4) return 6-get.useful(card); - return 7-get.useful(card); - }, - ai:{ - respondSha:true, - order:function(item,player){ - if(player.hasSkill('wusheng')&&player.hasSkill('paoxiao')){ - return 1; - } - if(player.countCards('h')<4){ - return 1; - } - return 4; - }, - }, - group:'fuhun2' - }, - fuhun2:{ - trigger:{source:'damageAfter'}, - forced:true, - filter:function(event,player){ - if(player.hasSkill('fuhun3')) return false; - return event.getParent().skill=='fuhun'; - }, - content:function(){ - player.addTempSkill('wusheng'); - player.addTempSkill('paoxiao'); - player.addTempSkill('fuhun3'); - } - }, - fuhun3:{}, - fencheng:{ - skillAnimation:'epic', - animationColor:'fire', - audio:2, - enable:'phaseUse', - filter:function(event,player){ - return !player.storage.fencheng; - }, - filterTarget:function(card,player,target){ - return player!=target; - }, - unique:true, - selectTarget:-1, - mark:true, - line:'fire', - content:function(){ - "step 0" - player.storage.fencheng=true; - player.awakenSkill('fencheng'); - var res=get.damageEffect(target,player,target,'fire'); - var num=Math.max(1,target.countCards('e')); - target.chooseToDiscard(num,'he','弃置'+get.cnNumber(num)+'张牌或受到1点火焰伤害').set('ai',function(card){ - var res=_status.event.res; - var num=_status.event.num; - var player=_status.event.player; - if(res>=0) return -1; - if(num>2&&player.hp>1) return -1; - if(num>1&&player.hp>2) return -1; - if(get.position(card)=='e'){ - return 10-get.value(card); - } - return 6-get.value(card); - }).set('res',res).set('num',num); - "step 1" - if(!result.bool){ - target.damage('fire'); - } - }, - ai:{ - order:1, - result:{ - player:function(player){ - var num=0,players=game.filterPlayer(); - for(var i=0;i0){ - num-=Math.max(1,players[i].countCards('e')); - } - else if(att<0){ - num+=Math.max(1,players[i].countCards('e')); - } - } - } - if(players.length<5){ - return num-1; - } - else{ - return num-2; - } - } - } - }, - init:function(player){ - player.storage.fencheng=false; - }, - intro:{ - content:'limited' - } - }, - mieji:{ - trigger:{player:'useCard'}, - direct:true, - audio:2, - filter:function(event,player){ - return event.targets.length==1&&get.type(event.card)=='trick'&&get.color(event.card)=='black'; - }, - position:'he', - content:function(){ - "step 0" - player.chooseTarget(get.prompt('mieji'),function(card,player,target){ - var trigger=_status.event.getTrigger(); - return lib.filter.filterTarget(trigger.card,player,target)&&target!=trigger.targets[0]; - }).set('autodelay',true).set('ai',function(target){ - var trigger=_status.event.getTrigger(); - var player=_status.event.player; - return get.effect(target,trigger.card,player,player); - }); - "step 1" - if(result.bool){ - trigger.targets.push(result.targets[0]); - player.logSkill('mieji',result.targets); - } - } - }, - junxing:{ - enable:'phaseUse', - audio:2, - usable:1, - filterCard:true, - selectCard:[1,Infinity], - filter:function(event,player){ - return player.countCards('h')>0; - }, - check:function(card){ - if(ui.selected.cards.length) return -1; - var val=get.value(card); - if(get.type(card)=='basic') return 8-get.value(card); - return 5-get.value(card); - }, - filterTarget:function(card,player,target){ - return player!=target; - }, - content:function(){ - "step 0" - var types=[]; - for(var i=0;i0; - }, - filter:function(event,player){ - if(event.player.countCards('h')) return false; - if(_status.currentPhase!=player) return false; - if(event.player==player) return false; - for(var i=0;i2){ - if(game.phaseNumber0&&event.player.countCards('j')) return true; - if(event.num>1){ - if(att<0) return false; - if(att>0) return true; - } - var cards=event.player.getCards('e'); - for(var i=0;i=6) return true; - } - return false; - }, - content:function(){ - if(trigger.player.countCards('ej')){ - player.gainPlayerCard(trigger.player,'ej',true); - } - trigger.cancel(); - } - }, - sanyao:{ - audio:2, - enable:'phaseUse', - usable:1, - filterTarget:function(card,player,target){ - return target.isMaxHp(); - }, - check:function(card){return 7-get.value(card);}, - position:'he', - filterCard:true, - content:function(){ - target.damage(); - }, - ai:{ - result:{ - target:function(player,target){ - if(target.countCards('j')&&get.attitude(player,target)>0){ - return 1; - } - if(target.countCards('e')){ - return -1; - } - return get.damageEffect(target,player); - }, - }, - order:7 - } - }, - qiaoshui:{ - audio:2, - trigger:{player:'phaseUseBegin'}, - direct:true, - filter:function(event,player){ - return player.countCards('h')>0; - }, - content:function(){ - "step 0" - player.chooseTarget(get.prompt('qiaoshui'),function(card,player,target){ - return player!=target&&target.countCards('h')>0; - }).set('ai',function(target){ - return -get.attitude(_status.event.player,target)/target.countCards('h'); - }); - "step 1" - if(result.bool){ - player.logSkill('qiaoshui',result.targets[0]); - player.chooseToCompare(result.targets[0]); - } - else{ - event.finish(); - } - "step 2" - if(result.bool){ - player.addTempSkill('qiaoshui3'); - } - else{ - player.addTempSkill('qiaoshui2'); - } - }, - ai:{ - expose:0.1 - } - }, - qiaoshui2:{ - mod:{ - cardEnabled:function(card){ - if(get.type(card,'trick')=='trick') return false; - } - } - }, - qiaoshui3:{ - trigger:{player:'useCard'}, - direct:true, - filter:function(event,player){ - var type=get.type(event.card); - return type=='basic'||type=='trick'; - }, - content:function(){ - 'step 0' - player.removeSkill('qiaoshui3'); - var goon=false; - var info=get.info(trigger.card); - if(trigger.targets&&!info.multitarget){ - var players=game.filterPlayer(); - for(var i=0;i1){ - event.goto(3); - } - } - 'step 1' - if(result.bool){ - if(!event.isMine()) game.delayx(); - event.target=result.targets[0]; - } - else{ - event.finish(); - } - 'step 2' - if(event.target){ - player.logSkill('qiaoshui',event.target); - trigger.targets.add(event.target); - } - event.finish(); - 'step 3' - player.chooseTarget('巧说:是否减少一名'+get.translation(trigger.card)+'的目标?',function(card,player,target){ - return _status.event.getTrigger().targets.contains(target); - }).set('ai',function(target){ - var trigger=_status.event.getTrigger(); - return -get.effect(target,trigger.card,trigger.player,_status.event.player); - }); - 'step 4' - if(result.bool){ - event.targets=result.targets; - if(event.isMine()){ - player.logSkill('qiaoshui',event.targets); - event.finish(); - } - for(var i=0;i1) return false; - return event.card&&get.type(event.card)=='trick'&&event.player!=player; - }, - frequent:true, - content:function(){ - player.draw(); - }, - ai:{ - effect:function(card,player,target){ - if(get.type(card)=='trick') return [1,1]; - }, - } - }, - shenxing:{ - audio:2, - enable:'phaseUse', - position:'he', - filterCard:true, - selectCard:2, - prompt:'弃置两张牌并摸一张牌', - check:function(card){return 4-get.useful(card)}, - content:function(){ - player.draw(); - }, - ai:{ - order:1, - result:{ - player:1 - }, - }, - }, - bingyi:{ - audio:2, - trigger:{player:'phaseDiscardEnd'}, - filter:function(event,player){ - var cards=player.getCards('h'); - if(cards.length<1) return false; - var color=get.color(cards[0]); - for(var i=1;i=2) return false; - if(player.hp==1) return false; - if(player.hp==2&&player.countCards('h')<2) return false; - if(event.player.countCards('h')>=event.player.hp) return false; - return true; - }, - content:function(){ - "step 0" - player.draw(2); - "step 1" - player.chooseCard(2,'he',true,'交给'+get.translation(trigger.player)+'两张牌').set('ai',function(card){ - if(ui.selected.cards.length&&card.name==ui.selected.cards[0].name) return -1; - if(get.tag(card,'damage')) return 1; - if(get.type(card)=='equip') return 1; - return 0; - }); - "step 2" - trigger.player.gain(result.cards,player); - if(player==game.me||trigger.player==game.me) - player.$give(result.cards,trigger.player); - else - player.$give(2,trigger.player); - game.delay(); - trigger.player.addSkill('xiantu2'); - trigger.player.storage.xiantu=player; - }, - ai:{ - threaten:1.1, - expose:0.3 - } - }, - xiantu2:{ - trigger:{player:'phaseUseEnd'}, - forced:true, - audio:false, - content:function(){ - if(player.storage.xiantu){ - player.storage.xiantu.loseHp(); - delete player.storage.xiantu; - } - player.removeSkill('xiantu2'); - }, - group:'xiantu3' - }, - xiantu3:{ - trigger:{source:'dieAfter'}, - forced:true, - audio:false, - content:function(){ - delete player.storage.xiantu; - player.removeSkill('xiantu2'); - } - }, - qiangzhi:{ - audio:2, - trigger:{player:'phaseUseBegin'}, - direct:true, - filterTarget:function(card,player,target){ - return target!=player&&target.countCards('h')>0; - }, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('qiangzhi'),function(card,player,target){ - return target!=player&&target.countCards('h')>0; - }).set('ai',function(){ - return Math.random(); - }); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - player.logSkill('qiangzhi',target); - var card=target.getCards('h').randomGet(); - player.showCards(card); - player.storage.qiangzhi=get.type(card,'trick'); - game.addVideo('storage',player,['qiangzhi',player.storage.qiangzhi]); - player.markSkill('qiangzhi'); - } - }, - intro:{ - content:function(type){ - return get.translation(type)+'牌'; - } - }, - group:['qiangzhi2','qiangzhi3'], - ai:{ - order:11, - result:{ - player:1 - } - } - }, - qiangzhi2:{ - trigger:{player:'useCard'}, - frequent:true, - filter:function(event,player){ - // return (get.type(event.card,'trick')==player.storage.qiangzhi&&event.cards[0]&&event.cards[0]==event.card); - return get.type(event.card,'trick')==player.storage.qiangzhi; - }, - content:function(){ - player.draw(); - }, - ai:{ - threaten:1.4 - } - }, - qiangzhi3:{ - trigger:{player:'phaseUseEnd'}, - silent:true, - content:function(){ - delete player.storage.qiangzhi; - player.unmarkSkill('qiangzhi'); - } - }, - dingpin:{ - enable:'phaseUse', - usable:3, - audio:2, - filter:function(event,player){ - return player.countCards('h')>0; - }, - filterTarget:function(card,player,target){ - return target.hp0; - }, - logTarget:'player', - content:function(){ - trigger.player.draw(); - }, - ai:{ - expose:0.2 - } - }, - jiaojin:{ - audio:2, - trigger:{player:'damageBegin'}, - filter:function(event,player){ - return player.countCards('he',{type:'equip'})&&event.source&&event.source.sex=='male'; - }, - direct:true, - content:function(){ - "step 0" - var next=player.chooseToDiscard('he','骄矜:是否弃置一张装备牌令伤害-1?',function(card,player){ - return get.type(card)=='equip'; - }); - next.set('ai',function(card){ - var player=_status.event.player; - if(player.hp==1||_status.event.getTrigger().num>1){ - return 9-get.value(card); - } - if(player.hp==2){ - return 8-get.value(card); - } - return 7-get.value(card); - }); - next.logSkill='jiaojin'; - "step 1" - if(result.bool){ - game.delay(0.5); - trigger.num--; - } - } - }, - chanhui:{ - audio:2, - trigger:{player:'useCard'}, - filter:function(event,player){ - if(_status.currentPhase!=player) return false; - if(player.hasSkill('chanhui2')) return false; - if(event.targets.length>1) return false; - var card=event.card; - if(card.name=='sha') return true; - if(get.color(card)=='black'&&get.type(card)=='trick') return true; - return false; - }, - direct:true, - content:function(){ - "step 0" - player.chooseTarget(get.prompt('chanhui'),function(card,player,target){ - if(player==target) return false; - var trigger=_status.event.getTrigger(); - return player.canUse(trigger.card,target)&&trigger.targets.contains(target)==false; - }).set('ai',function(target){ - var trigger=_status.event.getTrigger(); - var player=_status.event.player; - return get.effect(target,trigger.card,player,player)+0.01; - }); - "step 1" - if(result.bool){ - game.delay(0,200); - event.target=result.targets[0]; - } - else{ - event.finish(); - } - "step 2" - game.delay(); - player.addSkill('chanhui2'); - player.logSkill('chanhui',event.target); - event.target.chooseCard('交给'+get.translation(player)+'一张手牌,或成为'+ - get.translation(trigger.card)+'的额外目标').set('ai',function(card){ - return 5-get.value(card); - }); - "step 3" - if(result.bool){ - player.gain(result.cards,event.target); - event.target.$give(1,player); - game.delay(); - trigger.untrigger(); - trigger.player=event.target; - trigger.trigger('useCard'); - game.log(event.target,'成为了',trigger.card,'的使用者'); - } - else{ - game.log(event.target,'成为了',trigger.card,'的额外目标'); - trigger.targets.push(event.target); - } - } - }, - chanhui2:{ - trigger:{player:'phaseEnd'}, - forced:true, - popup:false, - audio:false, - content:function(){ - player.removeSkill('chanhui2'); - } - }, - quanji:{ - audio:2, - trigger:{player:'damageEnd'}, - frequent:true, - locked:false, - notemp:true, - init:function(player){ - player.storage.quanji=[]; - }, - filter:function(event){ - return event.num>0; - }, - content:function(){ - "step 0" - player.draw(trigger.num); - "step 1" - if(player.countCards('he')){ - player.chooseCard('将'+get.cnNumber(trigger.num)+'张手牌置于武将牌上作为“权”',trigger.num,true); - } - else{ - event.finish(); - } - "step 2" - if(result.cards&&result.cards.length){ - player.lose(result.cards,ui.special); - player.storage.quanji=player.storage.quanji.concat(result.cards); - player.syncStorage('quanji'); - player.markSkill('quanji'); - game.log(player,'将',result.cards,'置于武将牌上作为“权”'); - } - }, - intro:{ - content:'cards' - }, - mod:{ - maxHandcard:function(player,num){ - return num+player.storage.quanji.length; - } - }, - ai:{ - maixie:true, - maixie_hp:true, - threaten:0.8, - effect:{ - target:function(card,player,target){ - if(get.tag(card,'damage')){ - if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; - if(!target.hasFriend()) return; - if(target.hp>=4) return [0.5,get.tag(card,'damage')*2]; - if(!target.hasSkill('paiyi')&&target.hp>1) return [0.5,get.tag(card,'damage')*1.5]; - if(target.hp==3) return [0.5,get.tag(card,'damage')*1.5]; - if(target.hp==2) return [1,get.tag(card,'damage')*0.5]; - } - } - } - } - }, - zili:{ - skillAnimation:true, - audio:3, - unique:true, - trigger:{player:'phaseBegin'}, - forced:true, - filter:function(event,player){ - return !player.hasSkill('paiyi')&&player.storage.quanji&&player.storage.quanji.length>=3; - }, - content:function(){ - "step 0" - player.chooseDrawRecover(2,true,function(event,player){ - if(player.hp==1&&player.isDamaged()) return 'recover_hp'; - return 'draw_card'; - }); - "step 1" - player.loseMaxHp(); - player.addSkill('paiyi'); - player.awakenSkill('zili'); - } - }, - paiyi:{ - enable:'phaseUse', - usable:1, - audio:2, - filterTarget:true, - filter:function(event,player){ - return player.storage.quanji.length>0; - }, - content:function(){ - "step 0" - player.chooseCardButton(player.storage.quanji,true); - "step 1" - var card=result.links[0]; - card.discard(); - player.$throw(card); - player.storage.quanji.remove(card); - if(!player.storage.quanji.length){ - player.unmarkSkill('quanji'); - } - else{ - player.markSkill('quanji'); - } - player.syncStorage('quanji'); - "step 2" - target.draw(2); - "step 3" - if(target.countCards('h')>player.countCards('h')){ - target.damage(); - } - }, - ai:{ - order:1, - result:{ - target:function(player,target){ - if(player!=target) return 0; - if(player.countCards('h')+2<=player.hp+player.storage.quanji.length) return 1; - return 0; - } - } - } - }, - xianzhou:{ - skillAnimation:true, - audio:2, - unique:true, - enable:'phaseUse', - filter:function(event,player){ - return !player.storage.xianzhou&&player.countCards('e')>0; - }, - init:function(player){ - player.storage.xianzhou=false; - }, - filterTarget:function(card,player,target){ - return player!=target; - }, - mark:true, - content:function(){ - "step 0" - player.awakenSkill('xianzhou'); - var cards=player.getCards('e'); - target.gain(cards,player); - event.num=cards.length; - player.$give(cards,target); - player.storage.xianzhou=true; - game.delay(); - "step 1" - target.chooseTarget([1,event.num],'令'+get.translation(player)+'回复'+ - event.num+'点体力,或对攻击范围内的'+event.num+'名角色造成一点伤害',function(card,player,target2){ - return get.distance(_status.event.player,target2,'attack')<=1; - }).set('ai',function(target2){ - var target=_status.event.player; - var player=_status.event.getParent().player; - if(get.attitude(target,player)>0){ - if(player.hp+event.num<=player.maxHp||player.hp==1) return -1; - } - return get.damageEffect(target2,target,target); - }); - "step 2" - if(result.bool){ - target.line(result.targets,'green'); - event.targets=result.targets; - event.num2=0; - } - else{ - player.recover(event.num); - event.finish(); - } - "step 3" - if(event.num22&&get.attitude(players[i],player)>2){ - bool=false;break; - } - } - if(bool) return -10; - if(player.hp==1) return 1; - if(game.phaseNumber0){ - return '移动装备'; - } - } - else{ - if(att<=0){ - return '移动装备'; - } - } - return 'draw_card'; - }).set('source',trigger.player); - } - else{ - next=player.chooseControl('draw_card','cancel2',function(){ - return 'draw_card'; - }); - } - next.set('prompt',get.prompt('qieting',trigger.player)); - "step 1" - if(result.control=='移动装备'){ - player.logSkill('qieting',trigger.player); - player.choosePlayerCard(trigger.player,'e','将一张装备牌移至你的装备区').set('filterButton',function(button){ - return !_status.event.player.getEquip(button.link); - }); - } - else{ - if(result.control=='draw_card'){ - player.logSkill('qieting'); - player.draw(); - } - event.finish(); - } - "step 2" - if(result&&result.links&&result.links.length){ - game.delay(2); - trigger.player.$give(result.links[0],player); - player.equip(result.links[0]); - player.addExpose(0.2); - } - }, - }, - qieting2:{ - 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('qieting3'); - } - }, - qieting3:{}, - zhuikong:{ - audio:2, - trigger:{global:'phaseBegin'}, - check:function(event,player){ - if(get.attitude(player,event.player)<-2){ - var cards=player.getCards('h'); - if(cards.length>player.hp) return true; - for(var i=0;i9&&useful<7) return true; - } - } - return false; - }, - logTarget:'player', - filter:function(event,player){ - return player.hp0&&event.player.countCards('h')>0; - }, - content:function(){ - "step 0" - player.chooseToCompare(trigger.player); - "step 1" - if(result.bool){ - trigger.player.addTempSkill('zishou2'); - } - }, - }, - qiuyuan:{ - audio:2, - trigger:{target:'shaBefore'}, - direct:true, - priority:11, - content:function(){ - "step 0" - player.chooseTarget(get.prompt('qiuyuan'),function(card,player,target){ - return target!=player&&_status.event.getTrigger().player.canUse('sha',target,false); - }).set('ai',function(target){ - var trigger=_status.event.getTrigger(); - var player=_status.event.player; - return get.effect(target,trigger.card,trigger.player,player)+0.1; - }); - "step 1" - if(result.bool){ - var target=result.targets[0]; - player.logSkill('qiuyuan',target); - event.target=target; - target.chooseCard({name:'shan'},'交给'+get.translation(player)+ - '一张闪,或成为此杀的额外目标').set('ai',function(card){ - return get.attitude(target,_status.event.source)>=0?1:-1; - }).set('source',player); - game.delay(); - } - else{ - event.finish(); - } - "step 2" - if(result.bool){ - player.gain(result.cards,event.target); - event.target.$give(result.cards,player); - game.delay(); - } - else{ - trigger.targets.push(event.target); - game.log(event.target,'成为了额外目标'); - } - }, - ai:{ - expose:0.2, - effect:{ - target:function(card,player,target){ - if(card.name!='sha') return; - var players=game.filterPlayer(); - for(var i=0;i1){ - return 11-get.equipValue(card); - } - return 6-get.equipValue(card); - }, - content:function(){ - "step 0" - player.addTempSkill('gongji2'); - "step 1" - if(get.type(cards[0])=='equip'){ - player.chooseTarget('是否弃置一名角色的一张牌?',function(card,player,target){ - return player!=target&&target.countCards('he')>0; - }).set('ai',function(target){ - var player=_status.event.player; - if(get.attitude(player,target)<0){ - return Math.max(0.5,get.effect(target,{name:'sha'},player,player)); - } - return 0; - }); - } - else{ - event.finish(); - } - "step 2" - if(result.bool){ - player.line(result.targets,'green'); - event.target=result.targets[0]; - player.discardPlayerCard(event.target,'he',true).ai=get.buttonValue; - } - }, - ai:{ - order:9, - result:{ - player:1 - } - } - }, - gongji2:{ - mod:{ - attackFrom:function(){ - return -Infinity; - }, - }, - }, - zhuiyi:{ - audio:2, - trigger:{player:'dieBegin'}, - direct:true, - content:function(){ - "step 0" - player.chooseTarget(get.prompt('zhuiyi'),function(card,player,target){ - return player!=target&&_status.event.source!=target; - }).set('ai',function(target){ - var num=get.attitude(_status.event.player,target); - if(num>0){ - if(target.hp==1){ - num+=2; - } - if(target.hpplayers[i].countCards('h')) return true; - } - return false; - }, - selectTarget:2, - content:function(){ - 'step 0' - var gainner,giver; - if(targets[0].countCards('h')0) return -1; - var players=game.filterPlayer(); - for(var i=0;i=0&&num20||player.countCards('he',{type:'equip'})>0; - }, - check:function(card){return 8-get.value(card)}, - selectTarget:2, - multitarget:true, - discard:false, - targetprompt:['得到牌','出杀目标'], - prepare:'give', - filterTarget:function(card,player,target){ - if(ui.selected.targets.length==0){ - return player!=target; - } - else{ - return lib.filter.filterTarget({name:'sha'},ui.selected.targets[0],target); - } - }, - content:function(){ - "step 0" - targets[0].gain(cards,player); - "step 1" - targets[0].chooseControl('draw_card','出杀',function(){ - var player=_status.event.player; - var target=_status.event.target; - if(get.effect(_status.event.target,{name:'sha'},player,player)>0){ - return 1; - } - return 0; - }).set('target',targets[1]).set('prompt','对'+get.translation(targets[1])+'使用一张杀,或摸一张牌'); - "step 2" - if(result.control=='draw_card'){ - targets[0].draw(); - } - else{ - targets[0].useCard({name:'sha'},targets[1]); - } - }, - ai:{ - result:{ - player:function(player){ - var players=game.filterPlayer(); - for(var i=0;i1&&get.attitude(players[i],player)>1){ - return 1; - } - } - return 0; - }, - target:function(player,target){ - if(ui.selected.targets.length){ - return -0.1; - } - return 1; - } - }, - order:8.5, - expose:0.2 - } - }, - xinxuanhuo:{ - audio:2, - trigger:{player:'phaseDrawBegin'}, - direct:true, - content:function(){ - "step 0" - player.chooseTarget(get.prompt('xinxuanhuo'),function(card,player,target){ - return player!=target; - }).set('ai',function(target){ - var att=get.attitude(_status.event.player,target); - if(att>0){ - if(target.countCards('h')1&&check<2) return 0; - return get.unuseful(card)+9; - }, - ai2:function(target){ - var att=get.attitude(_status.event.player,target); - if(ui.selected.cards.length==1&&ui.selected.cards[0].name=='du') return 1-att; - return att-2; - }, - prompt:'将'+get.cnNumber(event.num)+'张手牌交给一名其他角色', - }).set('check',check); - "step 2" - if(result.bool){ - result.targets[0].gain(result.cards,event.player); - event.player.$give(result.cards.length,result.targets[0]); - player.line(result.targets,'green'); - } - }, - ai:{ - 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(get.tag(card,'recover')&&player.hp>=player.maxHp-1) return [0,0]; - } - } - } - }, - zhenlie:{ - audio:2, - filter:function(event,player){ - return event.player!=player&&event.card&&(event.card.name=='sha'||get.type(event.card)=='trick'); - }, - logTarget:'player', - check:function(event,player){ - if(get.attitude(player,event.player)>0){ - return false; - } - if(get.tag(event.card,'respondSha')){ - if(player.countCards('h',{name:'sha'})==0){ - return true; - } - } - else if(get.tag(event.card,'respondShan')){ - if(player.countCards('h',{name:'shan'})==0){ - return true; - } - } - else if(get.tag(event.card,'damage')){ - if(player.countCards('h')<2) return true; - } - else if(event.card.name=='shunshou'&&player.hp>2){ - return true; - } - return false; - }, - priority:10, - trigger:{target:'useCardToBefore'}, - content:function(){ - "step 0" - player.loseHp(); - "step 1" - trigger.cancel(); - "step 2" - if(trigger.player.countCards('he')){ - player.discardPlayerCard(trigger.player,'he',true); - } - }, - ai:{ - expose:0.3 - } - }, - wuyan:{ - audio:2, - trigger:{target:'useCardToBefore',player:'useCardToBefore'}, - forced:true, - priority:15, - check:function(event,player){ - return get.effect(event.target,event.card,event.player,player)<0; - }, - filter:function(event,player){ - if(!event.target) return false; - if(event.player==player&&event.target==player) return false; - return (get.type(event.card)=='trick'); - }, - content:function(){ - trigger.cancel(); - }, - ai:{ - effect:{ - target:function(card,player,target,current){ - if(get.type(card)=='trick'&&player!=target) return 'zeroplayertarget'; - }, - player:function(card,player,target,current){ - if(get.type(card)=='trick'&&player!=target) return 'zeroplayertarget'; - } - } - } - }, - xinwuyan:{ - audio:2, - trigger:{source:'damageBefore',player:'damageBefore'}, - forced:true, - priority:15, - check:function(event,player){ - if(player==event.player) return true; - return false; - }, - filter:function(event,player){ - return get.type(event.card,'trick')=='trick'; - }, - content:function(){ - trigger.cancel(); - }, - ai:{ - notrick:true, - notricksource:true, - effect:{ - target:function(card,player,target,current){ - if(get.type(card)=='trick'&&get.tag(card,'damage')){ - return 'zeroplayertarget'; - } - }, - player:function(card,player,target,current){ - if(get.type(card)=='trick'&&get.tag(card,'damage')){ - return 'zeroplayertarget'; - } - } - } - } - }, - xinjujian:{ - trigger:{player:'phaseEnd'}, - direct:true, - audio:2, - filter:function(event,player){ - return player.countCards('he')>player.countCards('he',{type:'basic'}); - }, - content:function(){ - "step 0" - player.chooseCardTarget({ - filterTarget:function(card,player,target){ - return player!=target; - }, - filterCard:function(card,player){ - return get.type(card)!='basic'&&lib.filter.cardDiscardable(card,player); - }, - ai1:function(card){ - if(get.tag(card,'damage')&&get.type(card)=='trick'){ - return 20; - } - return 9-get.value(card); - }, - ai2:function(target){ - var att=get.attitude(_status.event.player,target); - if(att>0){ - if(target.isTurnedOver()) att+=3; - if(target.hp==1) att+=3; - } - return att; - }, - position:'he', - prompt:get.prompt('xinjujian') - }); - "step 1" - if(result.bool){ - var target=result.targets[0]; - event.target=target; - player.logSkill('xinjujian',target); - player.discard(result.cards); - if(target.hp==target.maxHp&& - !target.isTurnedOver()&& - !target.isLinked()){ - target.draw(2); - event.finish(); - } - else{ - var controls=['draw_card']; - if(target.hp2){ - return 'recover_hp'; - } - else if(target.hp==2&&target.maxHp>2&&target.countCards('h')>1){ - return 'recover_hp'; - } - else{ - return 'draw_card'; - } - } - } - } - else{ - event.finish(); - } - "step 2" - event.control=result.control; - switch(event.control){ - case 'recover_hp':event.target.recover();event.finish();break; - case 'draw_card':event.target.draw(2);event.finish();break; - case 'reset_character':if(event.target.isTurnedOver()) event.target.turnOver();break; - } - "step 3" - if(event.control=='reset_character'&&event.target.isLinked()){ - event.target.link(); - } - }, - ai:{ - expose:0.2, - threaten:1.4 - } - }, - jujian:{ - enable:'phaseUse', - usable:1, - audio:2, - filterCard:true, - position:'he', - selectCard:[1,3], - check:function(card){ - var player=get.owner(card); - if(get.type(card)=='trick') return 10; - if(player.countCards('h')-player.hp-ui.selected.cards.length>0){ - return 8-get.value(card); - } - return 4-get.value(card); - }, - filterTarget:function(card,player,target){ - return player!=target; - }, - content:function(){ - target.draw(cards.length); - if(cards.length==3){ - if(get.type(cards[0],'trick')==get.type(cards[1],'trick')&& - get.type(cards[0],'trick')==get.type(cards[2],'trick')){ - player.recover(); - } - } - }, - ai:{ - expose:0.2, - order:1, - result:{ - target:1 - } - } - }, - yizhong:{ - trigger:{target:'shaBefore'}, - forced:true, - audio:2, - filter:function(event,player){ - if(player.getEquip(2)) return false; - return (event.card.name=='sha'&&get.color(event.card)=='black') - }, - content:function(){ - trigger.cancel(); - }, - ai:{ - effect:{ - target:function(card,player,target){ - if(player==target&&get.subtype(card)=='equip2'){ - if(get.equipValue(card)<=8) return 0; - } - if(target.getEquip(2)) return; - if(card.name=='sha'&&get.color(card)=='black') return 'zerotarget'; - } - } - } - }, - jueqing:{ - trigger:{source:'damageBefore'}, - forced:true, - audio:2, - priority:16, - check:function(){return false;}, - content:function(){ - trigger.cancel(); - var ex=0; - if(trigger.card&&trigger.card.name=='sha'){ - if(player.hasSkill('jiu')) ex++; - if(player.hasSkill('luoyi2')) ex++; - if(player.hasSkill('reluoyi2')) ex++; - } - trigger.player.loseHp(trigger.num+ex); - }, - ai:{ - jueqing:true - } - }, - shangshi:{ - audio:2, - trigger:{player:['loseEnd','changeHp']}, - forced:true, - filter:function(event,player){ - return (player.countCards('h')0) return 0; - if(player.getEquip('zhuge')&&player.countCards('h','sha')>1) return 0; - if(!player.countCards('h','sha')) return 0; - var targets=[]; - var target; - var players=game.filterPlayer(); - for(var i=0;inum){ - target=targets[i]; - num=num2; - } - } - if(num<=0) return 0; - var e2=target.getEquip(2); - if(e2){ - if(e2.name=='tengjia'){ - if(!player.countCards('h',{name:'sha',nature:'fire'})&&!player.getEquip('zhuque')) return 0; - } - if(e2.name=='renwang'){ - if(!player.countCards('h',{name:'sha',color:'red'})) return 0; - } - if(e2.name=='baiyin') return 0; - } - if(player.getEquip('guanshi')&&player.countCards('he')>2) return 1; - return target.countCards('h')>3?0:1; - } - if(player==_status.event.dying||player.isTurnedOver()) return 3; - } - }, - effect:{ - target:function(card,player,target){ - if(card.name=='guiyoujie') return [0,0.5]; - if(target.isTurnedOver()){ - if(get.tag(card,'damage')){ - if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; - if(target.hp==1) return; - return [1,target.countCards('h')/2]; - } - } - } - } - }, - }, - jiushi2:{ - trigger:{player:'damageBegin'}, - silent:true, - filter:function(event,player){ - return player.classList.contains('turnedover'); - }, - content:function(){ - player.storage.jiushi=true; - } - }, - jiushi3:{ - audio:2, - trigger:{player:'damageAfter'}, - check:function(event,player){ - return player.isTurnedOver(); - }, - filter:function(event,player){ - if(player.storage.jiushi){ - return true; - } - return false; - }, - content:function(){ - player.storage.jiushi=false; - player.turnOver(); - } - }, - zongshi:{ - mod:{ - maxHandcard:function(player,num){ - var list=['wei','shu','wu','qun']; - var num2=game.countPlayer(function(current){ - if(list.contains(current.group)){ - list.remove(current.group); - return true; - } - }); - return num+num2; - } - } - }, - zishou:{ - audio:2, - trigger:{player:'phaseDrawBegin'}, - check:function(event,player){ - return player.countCards('h')<=player.maxHp||player.skipList.contains('phaseUse'); - }, - content:function(){ - var list=['wei','shu','wu','qun']; - var num=game.countPlayer(function(current){ - if(list.contains(current.group)){ - list.remove(current.group); - return true; - } - }); - trigger.num+=num; - player.addTempSkill('zishou2'); + }, + backup:function(links,player){ + return { + filterCard:false, + selectCard:0, + popname:true, + viewAs:{name:links[0][2]}, + onuse:function(result,player){ + player.storage.taoluan.push(result.card.name); + }, + } + }, + prompt:function(links,player){ + return '选择'+get.translation(links[0][2])+'的目标'; + } + }, + ai:{ + order:4, + result:{ + player:function(player){ + var allshown=true,players=game.filterPlayer(); + for(var i=0;i0){ + return 1; + } + } + if(allshown) return 1; + return 0; + } + }, + threaten:1.6, + }, + group:['taoluan2'] + }, + taoluan2:{ + trigger:{player:['useCardAfter','respondAfter']}, + forced:true, + popup:false, + filter:function(event,player){ + return event.skill=='taoluan_backup'||event.skill=='taoluan5'; + }, + content:function(){ + 'step 0' + player.chooseTarget(true,function(card,player,target){ + return target!=player; + },'滔乱

令一名其他角色选择一项:1.交给你一张与你以此法使用的牌类别相同的牌;2.你失去1点体力').set('ai',function(target){ + var player=_status.event.player; + if(get.attitude(player,target)>0){ + if(get.attitude(target,player)>0){ + return target.countCards('h'); + } + return target.countCards('h')/2; + } + return 0; + }); + 'step 1' + var target=result.targets[0]; + event.target=target; + player.line(target,'green'); + var type=get.type(trigger.card,'trick'); + target.chooseCard('滔乱

交给'+get.translation(player)+'一张'+get.translation(type)+'牌,或令其失去一点体力且滔乱无效直到回合',function(card,player,target){ + return get.type(card,'trick')==_status.event.cardType; + }).set('cardType',type).set('ai',function(card){ + if(_status.event.att){ + return 11-get.value(card); + } + return 0; + }).set('att',get.attitude(target,player)>0); + 'step 2' + var target=event.target; + if(result.bool){ + player.gain(result.cards,target); + target.$give(result.cards,player); + } + else{ + player.addTempSkill('taoluan3'); + player.loseHp(); + } + } + }, + taoluan3:{}, + taoluan4:{ + trigger:{player:'chooseToRespondBegin'}, + filter:function(event,player){ + if(event.responded) return false; + if(!event.filterCard({name:'shan'})) return false; + if(player.storage.taoluan.contains('shan')) return false; + return true; + }, + check:function(event,player){ + var allshown=true,players=game.filterPlayer(); + for(var i=0;i1&&get.attitude(player,players[i])>0){ + return 1; + } + } + return 0; + }, + content:function(){ + trigger.untrigger(); + trigger.responded=true; + trigger.result={bool:true,card:{name:'shan'},skill:'taoluan_backup'}; + player.storage.taoluan.push('shan'); + }, + }, + taoluan5:{ + enable:'chooseToUse', + filter:function(event,player){ + return event.type=='dying'&&!player.storage.taoluan.contains('tao'); + }, + onuse:function(result,player){ + player.storage.taoluan.push('tao'); + }, + filterCard:function(){ + return false; + }, + selectCard:-1, + viewAs:{name:'tao'}, + ai:{ + skillTagFilter:function(player){ + return !player.storage.taoluan.contains('tao'); + }, + threaten:1.5, + save:true, + } + }, + taoluan_backup:{}, + jishe:{ + enable:'phaseUse', + filter:function(event,player){ + return player.getHandcardLimit()>0; + }, + init:function(player){ + player.storage.jishe=0; + }, + usable:20, + content:function(){ + player.draw(); + player.storage.jishe++; + }, + ai:{ + order:10, + result:{ + player:function(player){ + if(player.countCards('h')0); + var goon=false; + if(player.hp==1){ + goon=true; + } + else{ + var he=player.getCards('he'); + var num=0; + for(var i=0;i=2){ + goon=true;break; + } + } + } + } + player.chooseCard('he',[1,player.countCards('he')],get.prompt2('huisheng',trigger.source)).set('ai',function(card){ + if(_status.event.att){ + return 10-get.value(card); + } + if(_status.event.goon){ + return 8-get.value(card); + } + if(!ui.selected.cards.length){ + return 7-get.value(card); + } + return 0; + }).set('goon',goon).set('att',att); + 'step 1' + if(result.bool){ + player.logSkill('huisheng',trigger.source); + game.delay(); + event.num=result.cards.length; + var goon=false; + if(event.num>2||get.attitude(trigger.source,player)>=0){ + goon=true; + } + var forced=false; + var str='获得其中一张牌并防止伤害'; + if(trigger.source.countCards('he')0){ + if(he==0) return 1; + if(target.countCards('h')>get.zhu(player).countCards('h')) return 1; + } + else{ + if(he>0) return 1; + } + return 0; + }); + 'step 1' + if(result.bool){ + event.targets=result.targets.slice(0).sortBySeat(); + event.list=event.targets.slice(0); + player.logSkill('qinqing',event.targets); + } + else{ + event.finish(); + } + 'step 2' + if(event.targets.length){ + var target=event.targets.shift(); + if(target.countCards('he')){ + player.discardPlayerCard(target,'he',true); + } + target.draw(); + event.redo(); + } + 'step 3' + var num=0; + var zhu=get.zhu(player); + if(zhu){ + var nh=zhu.countCards('h'); + for(var i=0;inh){ + num++; + } + } + if(num){ + player.draw(num); + } + } + }, + ai:{ + threaten:1.2 + } + }, + guizao:{ + trigger:{player:'phaseDiscardEnd'}, + direct:true, + filter:function(event,player){ + if(event.cards&&event.cards.length>1){ + var suits=[]; + for(var i=0;i0||target.hp<=2){ + spade=false; + } + target.chooseToDiscard('h',true).set('ai',function(card){ + if(get.suit(card)=='spade'){ + if(_status.event.spade){ + return 10-get.value(card); + } + else{ + return -10-get.value(card); + } + } + if(_status.event.getParent().player.storage.jiyu2.contains(get.suit(card))){ + return -3-get.value(card); + } + return -get.value(card); + }).set('spade',spade); + 'step 1' + var card=result.cards[0]; + if(get.suit(card)=='spade'){ + player.turnOver(); + target.loseHp(); + } + player.storage.jiyu.push(target); + player.storage.jiyu2.add(get.suit(card)); + }, + ai:{ + order:9, + result:{ + target:function(player,target){ + if(player.isTurnedOver()||target.countCards('h')<=3) return -1; + return 0; + } + } + }, + group:'jiyu2', + mod:{ + cardEnabled:function(card,player){ + if(player.storage.jiyu2&&player.storage.jiyu2.contains(get.suit(card))) return false; + } + } + }, + jiyu2:{ + trigger:{player:['phaseUseBegin','phaseAfter']}, + silent:true, + content:function(){ + player.storage.jiyu=[]; + player.storage.jiyu2=[]; + } + }, + jiaozhao:{ + enable:'phaseUse', + usable:1, + audio:2, + check:function(card){ + return 8-get.value(card); + }, + filterCard:true, + discard:false, + lose:false, + content:function(){ + 'step 0' + player.showCards(cards); + 'step 1' + if(player.storage.jiaozhao2){ + event.target=player; + } + else{ + var targets=game.filterPlayer(); + targets.remove(player); + targets.sort(function(a,b){ + return Math.max(1,get.distance(player,a))-Math.max(1,get.distance(player,b)); + }); + var distance=Math.max(1,get.distance(player,targets[0])); + for(var i=1;idistance){ + targets.splice(i);break; + } + } + player.chooseTarget(true,function(card,player,target){ + return _status.event.targets.contains(target); + }).set('ai',function(target){ + return get.attitude(_status.event.player,target); + }).set('targets',targets); + } + 'step 2' + if(!event.target){ + event.target=result.targets[0]; + player.line(result.targets,'green'); + } + if(!event.target){ + event.finish(); + return; + } + var list=['sha','sha','sha','shan','tao','jiu']; + if(player.storage.jiaozhao1){ + list=list.concat(['taoyuan','wugu','juedou','huogong','jiedao','tiesuo','guohe','shunshou','wuzhong','wanjian','nanman']); + } + for(var i=0;i=5){ + choice='jiu'; + } + else if(nh<=2){ + choice='sha'; + } + else{ + choice=Math.random()<0.5?'sha':'jiu'; + } + } + else{ + var recover=0,lose=1,players=game.filterPlayer(); + for(var i=0;i0){ + if(players[i].hp<2){ + lose--; + recover+=0.5; + } + lose--; + recover++; + } + else if(get.attitude(player,players[i])<0){ + if(players[i].hp<2){ + lose++; + recover-=0.5; + } + lose++; + recover--; + } + } + else{ + if(get.attitude(player,players[i])>0){ + lose--; + } + else if(get.attitude(player,players[i])<0){ + lose++; + } + } + } + } + if(lose>recover&&lose>0){ + choice=Math.random()<0.7?'nanman':'wanjian'; + } + else if(lose0){ + choice='taoyuan'; + } + else{ + choice=Math.random()<0.5?'wuzhong':'shunshou'; + } + } + } + event.target.chooseButton(['矫诏',[list,'vcard']],true).set('ai',function(button){ + return button.link[2]==_status.event.choice?1:0; + }).set('choice',choice); + 'step 3' + var chosen=result.links[0][2]; + var nature=result.links[0][3]; + var fakecard={name:chosen,suit:cards[0].suit,number:cards[0].number,nature:nature}; + event.target.showCards(game.createCard(fakecard),get.translation(event.target)+'声明了'+get.translation(chosen)); + player.storage.jiaozhao=cards[0]; + player.storage.jiaozhao_card=fakecard; + game.broadcastAll(function(name){ + lib.skill.jiaozhao2.viewAs=fakecard; + },fakecard); + }, + ai:{ + order:9, + result:{ + player:1 + } + }, + intro:{ + content:function(storage,player){ + if(player.storage.jiaozhao2){ + return '出牌阶段限一次,你可以展示一张手牌,然后你声明一张基本牌或普通锦囊牌的牌名。在此出牌阶段内,你可以将此手牌当声明的牌使用且你不能被选择为目标'; + } + else{ + return '出牌阶段限一次,你可以展示一张手牌,然后选择距离最近的一名其他角色,该角色声明一张基本牌或普通锦囊牌的牌名。在此出牌阶段内,你可以将此手牌当声明的牌使用且你不能被选择为目标'; + } + } + }, + group:['jiaozhao2','jiaozhao3'] + }, + jiaozhao2:{ + enable:'phaseUse', + audio:'jiaozhao', + filter:function(event,player){ + if(!player.storage.jiaozhao) return false; + var name=player.storage.jiaozhao_card.name; + if(name=='tao'||name=='shan'||name=='wuzhong'||name=='jiu') return false; + return player.getCards('h').contains(player.storage.jiaozhao); + }, + filterCard:function(card,player){ + return card==player.storage.jiaozhao; + }, + selectCard:-1, + popname:true, + filterTarget:function(card,player,target){ + if(player==target) return false; + return lib.filter.filterTarget(player.storage.jiaozhao_card,player,target); + }, + check:function(card){ + return 8-get.value(card); + }, + ai:{ + order:6 + } + }, + jiaozhao3:{ + trigger:{player:'phaseEnd'}, + silent:true, + content:function(){ + delete player.storage.jiaozhao; + delete player.storage.jiaozhao_card; + } + }, + danxin:{ + trigger:{player:'damageEnd'}, + frequent:true, + audio:2, + content:function(){ + 'step 0' + if(player.storage.jiaozhao1&&player.storage.jiaozhao2){ + player.draw(); + event.finish(); + } + else{ + var list=['draw_card','更改描述']; + var prompt; + if(player.storage.jiaozhao1){ + prompt='摸一张牌或更改矫诏的描述

更改描述:将“选择距离最近的一名其他角色,该角色”改为“你”'; + } + else{ + prompt='摸一张牌或更改矫诏的描述

更改描述:将“基本牌”改为“基本牌或普通锦囊牌”'; + } + player.chooseControl(list,function(){ + if(!_status.event.player.hasSkill('jiaozhao')) return 'draw_card'; + return '更改描述'; + }).set('prompt',prompt); + } + 'step 1' + if(result.control=='draw_card'){ + player.draw(); + } + else{ + game.log(player,'更改了','【矫诏】','的描述'); + player.popup('更改描述'); + player.markSkill('jiaozhao'); + if(player.storage.jiaozhao1){ + player.storage.jiaozhao2=true; + } + else{ + player.storage.jiaozhao1=true; + } + } + } + }, + zongzuo:{ + trigger:{global:'phaseBefore'}, + forced:true, + priority:10, + audio:2, + filter:function(event,player){ + return !player.storage.zongzuo; + }, + content:function(){ + 'step 0' + player.storage.zongzuo=true; + var list=['wei','shu','wu','qun']; + var num=game.countPlayer(function(current){ + if(list.contains(current.group)){ + list.remove(current.group); + return true; + } + }); + player.gainMaxHp(num); + event.num=num; + 'step 1' + player.hp+=event.num; + player.update(); + }, + group:'zongzuo_lose', + subSkill:{ + lose:{ + trigger:{global:'dieAfter'}, + forced:true, + audio:'zongzuo', + filter:function(event,player){ + var list=['wei','shu','wu','qun']; + if(!list.contains(event.player.group)) return false; + if(game.hasPlayer(function(current){ + return current.group==event.player.group; + })){ + return false; + } + return true; + }, + content:function(){ + player.loseMaxHp(); + } + } + } + }, + zhige:{ + enable:'phaseUse', + usable:1, + audio:2, + filter:function(event,player){ + return player.countCards('h')>player.hp; + }, + filterTarget:function(card,player,target){ + return get.distance(target,player,'attack')<=1&&target.countCards('e')>0; + }, + content:function(){ + 'step 0' + target.chooseToUse({name:'sha'},'止戈:使用一张杀,或将其装备区里的一张牌交给'+get.translation(player)); + 'step 1' + if(!result.bool&&target.countCards('e')){ + target.chooseCard('e',true,'将其装备区里的一张牌交给'+get.translation(player)); + } + else{ + event.finish(); + } + 'step 2' + if(result.bool&&result.cards&&result.cards.length){ + player.gain(result.cards,target); + target.$give(result.cards,player); + } + }, + ai:{ + expose:0.2, + order:5, + result:{ + target:-1, + player:function(player,target){ + if(target.countCards('h')==0) return 0; + if(target.countCards('h')==1) return -0.1; + if(player.hp<=2) return -2; + if(player.countCards('h','shan')==0) return -1; + return -0.5; + } + } + } + }, + kuangbi:{ + enable:'phaseUse', + usable:1, + audio:2, + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('he')>0; + }, + content:function(){ + 'step 0' + target.chooseCard('he',[1,3],'匡弼:将1~3张牌置于'+get.translation(player)+'的武将牌上',true).set('ai',function(card){ + if(get.attitude(_status.event.player,_status.event.getParent().player)>0){ + return 7-get.value(card); + } + return -get.value(card); + }); + 'step 1' + if(result.bool){ + target.$give(result.cards,player); + target.lose(result.cards,ui.special); + player.storage.kuangbi_draw=result.cards; + player.storage.kuangbi_draw_source=target; + player.syncStorage('kuangbi_draw'); + player.addSkill('kuangbi_draw'); + } + }, + ai:{ + order:1, + result:{ + target:function(player,target){ + if(get.attitude(player,target)>0){ + return Math.sqrt(target.countCards('he')); + } + return 0; + }, + player:1 + } + }, + subSkill:{ + draw:{ + trigger:{player:'phaseBegin'}, + forced:true, + mark:true, + intro:{ + content:'cards' + }, + content:function(){ + var cards=player.storage.kuangbi_draw; + if(cards){ + player.gain(cards,'gain2'); + var target=player.storage.kuangbi_draw_source; + if(target&&target.isAlive()){ + target.draw(cards.length); + } + } + delete player.storage.kuangbi_draw; + delete player.storage.kuangbi_draw_source; + player.removeSkill('kuangbi_draw'); + } + } + } + }, + fulin:{ + trigger:{player:'phaseDiscardBegin'}, + silent:true, + content:function(){ + player.addTempSkill('fulin2','phaseDiscardAfter'); + }, + group:['fulin_count','fulin_reset'], + subSkill:{ + reset:{ + trigger:{player:['phaseBegin','phaseEnd']}, + silent:true, + priority:10, + content:function(){ + player.storage.fulin=[]; + } + }, + count:{ + trigger:{player:'gainEnd'}, + silent:true, + filter:function(event,player){ + return _status.currentPhase==player; + }, + content:function(){ + if(!player.storage.fulin){ + player.storage.fulin=[]; + } + for(var i=0;i0; + }, + audio:2, + content:function(){ + 'step 0' + var card=target.getCards('h').randomGet(); + player.gain(card,target); + target.$giveAuto(card,player); + 'step 1' + var name=get.translation(target.name); + player.chooseControl(function(){ + return Math.random()<0.5?'选项一':'选项二'; + }).set('prompt','督粮').set('choiceList',['令'+name+'观看牌堆顶的两张牌,然后获得其中的基本牌','令'+name+'于下个摸牌阶段额外摸一张牌']); + 'step 2' + if(result.control=='选项一'){ + var cards=get.cards(2); + target.viewCards('督粮',cards); + event.cards2=[]; + for(var i=0;i=_status.event.getParent().num) return -1; + if(_status.event.player.hasSkillTag('nofire')) return -1; + if(_status.event.res>=0) return 6-get.value(card); + if(get.type(card)!='basic'){ + return 10-get.value(card); + } + return 8-get.value(card); + }).set('res',res); + } + else{ + event.finish(); + } + "step 2" + if(!result.bool){ + event.target.damage(2,'fire'); + event.num=1; + } + else{ + event.num=result.cards.length+1; + } + event.goto(1); + }, + ai:{ + order:1, + result:{ + player:function(player){ + var num=0,players=game.filterPlayer(); + for(var i=0;i0){ + num--; + } + else if(att<0){ + num++; + } + } + } + if(game.players.length<5){ + return num-1; + } + else{ + return num-2; + } + } + } + }, + init:function(player){ + player.storage.xinfencheng=false; + }, + intro:{ + content:'limited' + } + }, + xinjuece:{ + audio:2, + trigger:{player:'phaseEnd'}, + direct:true, + filter:function(event,player){ + return game.hasPlayer(function(player){ + return player.countCards('h')==0; + }); + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('xinjuece'),function(card,player,target){ + return target.countCards('h')==0; + }).set('ai',function(target){ + var player=_status.event.player; + return get.damageEffect(target,player,player); + }); + 'step 1' + if(result.bool){ + player.logSkill('juece',result.targets); + result.targets[0].damage(); + } + } + }, + xinmieji:{ + audio:2, + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.countCards('h',{type:['trick','delay'],color:'black'}); + }, + filterCard:function(card){ + return get.color(card)=='black'&&get.type(card,'trick')=='trick'; + }, + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('h')>0; + }, + discard:false, + delay:false, + check:function(card){ + return 8-get.value(card); + }, + content:function(){ + 'step 0' + player.showCards(cards); + 'step 1' + ui.cardPile.insertBefore(cards[0],ui.cardPile.firstChild); + var n1=target.getCards('he',function(card){ + if(!lib.filter.cardDiscardable(card,player)) return false; + return get.type(card,'trick')=='trick'; + }); + var n2=target.getCards('he',function(card){ + if(!lib.filter.cardDiscardable(card,player)) return false; + return get.type(card,'trick')!='trick'; + }); + if(n1.length>1||n2.length>2||(n1.length==1&&n2.length==2)){ + target.chooseToDiscard('弃置一张锦囊牌,或两张非锦囊牌',true,'he',function(card,player){ + if(!lib.filter.cardDiscardable(card,player)) return false; + if(!_status.event.nontrick){ + return get.type(card,'trick')=='trick'; + } + if(ui.selected.cards.length){ + return get.type(card,'trick')!='trick'; + } + return true; + }).set('ai',function(card){ + if(get.type(card,'trick')=='trick'){ + return 8-get.value(card); + } + return -get.value(card); + }).set('selectCard',function(){ + if(ui.selected.cards.length==1&&get.type(ui.selected.cards[0],'trick')=='trick'){ + return 1; + } + return 2; + }).set('nontrick',n2.length>=2).set('complexCard',true); + } + else{ + if(n1.length){ + target.discard(n1); + } + else if(n2.length){ + target.discard(n2); + } + } + }, + ai:{ + order:9, + result:{ + target:-1 + } + } + }, + qianju:{ + mod:{ + globalFrom:function(from,to,distance){ + return distance-(from.maxHp-from.hp); + } + } + }, + qingxi:{ + trigger:{source:'damageBegin'}, + check:function(event,player){ + return get.attitude(player,event.player)<0; + }, + filter:function(event,player){ + return event.card&&event.card.name=='sha'&&player.getEquip(1); + }, + content:function(){ + 'step 0' + var num=1; + var info=get.info(player.getEquip(1)); + if(info&&info.distance&&info.distance.attackFrom){ + num-=info.distance.attackFrom; + } + if(trigger.player.countCards('h')2){ + return 0; + } + return 8-get.value(card); + } + }); + } + 'step 1' + if(!event.directfalse&&result.bool){ + var e1=player.getEquip(1); + if(e1){ + player.discard(e1); + } + } + else{ + trigger.num++; + } + } + }, + jieyue:{ + group:'jieyue1' + }, + jieyue1:{ + audio:2, + trigger:{player:'phaseEnd'}, + direct:true, + content:function(){ + 'step 0' + player.chooseCardTarget({ + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('he')>0; + }, + filterCard:lib.filter.cardDiscardable, + ai1:function(card){ + return 7-get.useful(card); + }, + ai2:function(target){ + return 1-get.attitude(_status.event.player,target); + }, + prompt:get.prompt('jieyue') + }); + 'step 1' + if(result.bool){ + player.logSkill('jieyue1',result.targets); + player.discard(result.cards); + var target=result.targets[0]; + event.target=target; + target.chooseCard('将一张牌置于'+get.translation(player)+'的武将牌上,或令其弃置你的一张牌','he').set('ai',function(card){ + if(card.name=='du') return 20; + var player=_status.event.player; + if(get.attitude(player,_status.event.getParent().player)>0){ + return 8-get.value(card); + } + var nh=player.countCards('h'); + if(nh<=2){ + return 6-get.value(card); + } + if(nh<=3){ + return 2-get.value(card); + } + return 0; + }); + } + else{ + event.finish(); + } + 'step 2' + if(result.bool&&result.cards&&result.cards.length){ + event.target.$give(result.cards,player); + player.storage.jieyue2=result.cards[0]; + event.target.lose(result.cards[0],ui.special); + player.syncStorage('jieyue2'); + player.addSkill('jieyue2'); + } + else if(event.target.countCards('he')){ + player.discardPlayerCard(event.target,true); + } + }, + ai:{ + expose:0.1 + } + }, + jieyue2:{ + mark:'card', + intro:{ + content:'card' + }, + audio:true, + enable:'chooseToUse', + filterCard:function(card){ + return get.color(card)=='black'; + }, + viewAsFilter:function(player){ + return player.countCards('h',{color:'black'})>0; + }, + viewAs:{name:'wuxie'}, + prompt:'将一张黑色手牌当无懈可击使用', + check:function(card){return 8-get.value(card)}, + threaten:1.2, + group:['jieyue3','jieyue4'] + }, + jieyue3:{ + enable:['chooseToRespond'], + filterCard:function(card){ + return get.color(card)=='red'; + }, + viewAs:{name:'shan'}, + viewAsFilter:function(player){ + if(!player.countCards('h',{color:'red'})) return false; + }, + audio:true, + prompt:'将一张红色手牌当闪打出', + check:function(){return 1}, + ai:{ + respondShan:true, + skillTagFilter:function(player){ + if(!player.countCards('h',{color:'red'})) return false; + }, + effect:{ + target:function(card,player,target,current){ + if(get.tag(card,'respondShan')&¤t<0) return 0.8 + } + } + } + }, + jieyue4:{ + trigger:{player:'phaseBegin'}, + forced:true, + content:function(){ + player.gain(player.storage.jieyue2,'gain2'); + player.storage.jieyue2=null; + player.removeSkill('jieyue2'); + } + }, + jinjiu:{ + mod:{ + cardEnabled:function(card,player){ + if(card.name=='jiu'&&_status.event.skill!='jinjiu') return false; + }, + cardUsable:function(card,player){ + if(card.name=='jiu'&&_status.event.skill!='jinjiu') return false; + }, + cardRespondable:function(card,player){ + if(card.name=='jiu'&&_status.event.skill!='jinjiu') return false; + }, + cardSavable:function(card,player){ + if(card.name=='jiu'&&_status.event.skill!='jinjiu') return false; + }, + }, + enable:['chooseToUse','chooseToRespond'], + filter:function(event,player){ + return player.countCards('h','jiu')>0; + }, + filterCard:{name:'jiu'}, + viewAs:{name:'sha'}, + viewAsFilter:function(player){ + if(!player.countCards('h','jiu')) return false; + }, + check:function(){return 1}, + ai:{ + skillTagFilter:function(player){ + if(!player.countCards('h','jiu')) return false; + }, + respondSha:true, + order:4, + useful:-1, + value:-1 + } + }, + xianzhen:{ + audio:2, + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return player!=target&&target.countCards('h')>0; + }, + filter:function(event,player){ + return player.countCards('h')>0; + }, + content:function(){ + "step 0" + player.chooseToCompare(target); + "step 1" + if(result.bool){ + player.storage.xianzhen=target; + player.addTempSkill('xianzhen2'); + } + else{ + player.addTempSkill('xianzhen3'); + } + }, + 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 + } + }, + xianzhen2:{ + mod:{ + targetInRange:function(card,player,target,now){ + if(player.storage.xianzhen==target) return true; + }, + cardUsable:function(card,player,num){ + if(card.name=='sha') return Infinity; + } + }, + ai:{ + unequip:true + } + }, + xianzhen3:{ + mod:{ + cardEnabled:function(card){if(card.name=='sha') return false} + } + }, + lihuo:{ + enable:'phaseUse', + usable:1, + filterCard:function(card){ + return card.name=='sha'&&!card.nature; + }, + filter:function(event,player){ + return player.countCards('h','sha')>0 + }, + viewAs:{name:'sha',nature:'fire'}, + mod:{ + selectTarget:function(card,player,range){ + if(card.name=='sha'&&card.nature=='fire'&&range[1]!=-1){ + range[1]++; + } + }, + }, + group:'lihuo2' + }, + lihuo2:{ + trigger:{source:'damageEnd'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.parent.skill=='lihuo'; + }, + content:function(){ + player.addSkill('lihuo3'); + } + }, + lihuo3:{ + trigger:{player:'useCardAfter'}, + vanish:true, + filter:function(event,player){ + return event.card.name=='sha'; + }, + forced:true, + audio:false, + content:function(){ + player.loseHp(); + player.removeSkill('lihuo3'); + } + }, + chunlao:{ + trigger:{player:'phaseEnd'}, + direct:true, + audio:2, + filter:function(event,player){ + return player.countCards('h','sha')>0&&!player.storage.chunlao.length; + }, + init:function(player){ + player.storage.chunlao=[]; + }, + intro:{ + content:'cards', + }, + content:function(){ + 'step 0' + player.chooseCard([1,player.countCards('h','sha')],get.prompt('chunlao'),{name:'sha'}).set('ai',function(){ + return 1; + }); + 'step 1' + if(result.bool){ + player.logSkill('chunlao'); + player.storage.chunlao=player.storage.chunlao.concat(result.cards); + player.syncStorage('chunlao'); + player.markSkill('chunlao'); + player.lose(result.cards,ui.special); + player.$give(result.cards,player); + } + }, + ai:{ + effect:{ + player:function(card,player,target){ + if(_status.currentPhase!=player) return; + if(card.name=='sha'&&!player.needsToDiscard()&& + !player.storage.chunlao.length&&target.hp>1){ + return 'zeroplayertarget'; + } + } + }, + threaten:1.4 + }, + group:'chunlao2' + }, + chunlao2:{ + enable:'chooseToUse', + filter:function(event,player){ + return event.type=='dying'&&event.dying&&event.dying.hp<=0&&player.storage.chunlao.length>0; + }, + filterTarget:function(card,player,target){ + return target==_status.event.dying; + }, + direct:true, + delay:0, + selectTarget:-1, + content:function(){ + "step 0" + player.chooseCardButton(get.translation('chunlao'),player.storage.chunlao,true); + "step 1" + if(result.bool){ + player.logSkill('chunlao'); + player.$throw(result.links); + player.storage.chunlao.remove(result.links[0]); + result.links[0].discard(); + player.syncStorage('chunlao'); + target.useCard({name:'jiu'},target); + if(!player.storage.chunlao.length){ + player.unmarkSkill('chunlao'); + } + else{ + player.markSkill('chunlao'); + } + } + }, + ai:{ + order:6, + skillTagFilter:function(player){ + return player.storage.chunlao.length>0; + }, + save:true, + result:{ + target:3 + }, + threaten:1.6 + }, + }, + chunlao2_old:{ + trigger:{global:'dying'}, + priority:6, + filter:function(event,player){ + return event.player.hp<=0&&player.storage.chunlao.length>0; + }, + direct:true, + content:function(){ + "step 0" + var att=get.attitude(player,trigger.player); + player.chooseCardButton(get.prompt('chunlao',trigger.player),player.storage.chunlao).set('ai',function(button){ + if(_status.event.att>0) return 1; + return 0; + }).set('att',att); + "step 1" + if(result.bool){ + player.logSkill('chunlao',trigger.player); + player.$throw(result.links); + player.storage.chunlao.remove(result.links[0]); + result.links[0].discard(); + player.syncStorage('chunlao'); + trigger.player.useCard({name:'jiu'},trigger.player); + if(!player.storage.chunlao.length){ + player.unmarkSkill('chunlao'); + } + else{ + player.markSkill('chunlao'); + } + } + }, + ai:{ + expose:0.2 + } + }, + shenduan:{ + trigger:{player:'discardAfter'}, + filter:function(event,player){ + for(var i=0;i0&&get.distance(player,event.player,'attack')<=1; + }, + content:function(){ + 'step 0' + var att=get.attitude(player,trigger.player); + var nh=trigger.player.countCards('h'); + var eff=get.effect(trigger.player,{name:'sha'},player,player); + player.chooseCardButton(get.prompt('yonglve',trigger.player),trigger.player.getCards('j')).set('ai',function(button){ + var name=button.link.viewAs||button.link.name; + var att=_status.event.att; + var nh=_status.event.nh; + var eff=_status.event.eff; + var trigger=_status.event.getTrigger(); + if(att>0&&eff>=0) return 1; + if(att>=0&&eff>0) return 1; + if(att>0&&(trigger.player.hp>=3||trigger.player.getEquip('bagua')||trigger.player.countCards('h','shan'))){ + if(name=='lebu'&&nh>trigger.player.hp) return 1; + if(name=='bingliang'&&nh1; + })){ + range[1]++; + } + } + } + } + }, + ai:{ + unequip:true, + skillTagFilter:function(player){ + if(game.hasPlayer(function(current){ + return get.distance(player,current)>1; + })){ + return false; + } + } + } + }, + sidi:{ + trigger:{global:'respondEnd'}, + filter:function(event,player){ + if(event.parent.parent.name!='sha') return false; + if(event.player==player) return true; + return _status.currentPhase==player; + }, + frequent:true, + init:function(player){ + player.storage.sidi=[]; + }, + intro:{ + content:'cards' + }, + content:function(){ + var card=get.cards()[0]; + game.log(player,'将',card,'置于武将牌上'); + player.$gain2(card); + player.storage.sidi.add(card); + player.markSkill('sidi'); + player.syncStorage('sidi'); + }, + group:'sidi2' + }, + sidi2:{ + trigger:{global:'phaseUseBegin'}, + filter:function(event,player){ + if(event.player==player) return false; + if(!player.storage.sidi.length) return false; + return true; + }, + check:function(event,player){ + if(get.attitude(player,event.player)>=0) return false; + if(event.player.getEquip('zhuge')) return false; + if(event.player.hasSkill('paoxiao')) return false; + var players=game.filterPlayer(); + for(var i=0;i0) break; + } + if(i==players.length) return false; + var nh=event.player.countCards('h'); + var nsha=event.player.countCards('h','sha'); + if(nh<2) return false; + switch(nh){ + case 2: + if(nsha) return Math.random()<0.4; + return Math.random()<0.2; + case 3: + if(nsha) return Math.random()<0.8; + return Math.random()<0.3; + case 4: + if(nsha>1) return true; + if(nsha) return Math.random()<0.9; + return Math.random()<0.5; + default:return true; + } + }, + content:function(){ + 'step 0' + if(player.storage.sidi.length==1){ + event.directbutton=player.storage.sidi[0]; + } + else{ + player.chooseCardButton('弃置武将牌上的一张牌',player.storage.sidi,true); + } + 'step 1' + var button; + if(event.directbutton){ + button=event.directbutton; + } + else if(result.bool&&result.links&&result.links.length){ + button=result.links[0]; + } + if(button){ + player.$throw([button]); + player.line(trigger.player,'green'); + game.log(player,'将',button,'置于弃牌堆'); + button.discard(); + trigger.player.addTempSkill('sidi3'); + player.storage.sidi.remove(button); + player.syncStorage('sidi'); + if(player.storage.sidi.length==0){ + player.unmarkSkill('sidi'); + } + else{ + player.markSkill('sidi'); + } + game.delayx(); + } + } + }, + sidi3:{ + mod:{ + cardUsable:function(card,player,num){ + if(card.name=='sha') return num-1; + } + } + }, + zhongyong:{ + trigger:{player:'shaMiss'}, + direct:true, + filter:function(event,player){ + return event.responded&&get.itemtype(event.responded.cards)=='cards'; + }, + content:function(){ + "step 0" + var cards=trigger.responded.cards; + event.cards=cards; + player.chooseTarget('忠勇:将'+get.translation(trigger.responded.cards)+'交给一名角色',function(card,player,target){ + return target!=_status.event.getTrigger().target; + }).set('ai',function(target){ + var att=get.attitude(_status.event.player,target); + if(target.countCards('h','shan')&&target.countCards('h')>=2){ + att/=1.5; + } + return att; + }); + "step 1" + if(result.bool){ + player.logSkill('zhongyong',result.targets); + result.targets[0].gain(event.cards,'gain2'); + if(result.targets[0]==player){ + event.finish(); + } + } + else{ + event.finish(); + } + "step 2" + if(player.hasSkill('jiu')){ + game.broadcastAll(function(player){ + player.removeSkill('jiu'); + },player); + event.jiu=true; + } + player.chooseToUse('是否对'+get.translation(trigger.target)+'再使用一张杀?', + {name:'sha'},trigger.target,-1).logSkill='qinglong_skill'; + "step 3" + if(result.bool); + else if(event.jiu){ + player.addSkill('jiu'); + } + } + }, + xinzhongyong:{ + trigger:{player:'shaAfter'}, + direct:true, + filter:function(event,player){ + return get.itemtype(event.cards)=='cards'||(event.responded&&get.itemtype(event.responded.cards)=='cards'); + }, + content:function(){ + "step 0" + event.cards1=trigger.cards.slice(0); + if(trigger.responded&&trigger.responded.cards&&trigger.responded.cards.length){ + event.cards2=trigger.responded.cards.slice(0); + } + player.chooseTarget(get.prompt('zhongyong'),function(card,player,target){ + return target!=_status.event.getTrigger().target&&target!=player; + }).set('ai',function(target){ + return get.attitude(_status.event.player,target); + }); + "step 1" + if(result.bool){ + event.target=result.targets[0]; + if(!event.cards2){ + player.logSkill('zhongyong',event.target); + event.sha=false; + event.target.gain(event.cards1,'gain2'); + if(get.color(event.cards1)=='red'){ + event.sha=true; + } + event.goto(3); + } + else{ + var sha=false; + if(event.cards1.length==1&&get.color(event.cards1[0])=='red'){ + sha=true; + } + player.chooseControl('杀','闪',function(event,player){ + if(_status.event.choosesha) return '杀'; + return '闪'; + }).set('prompt','选择交给'+get.translation(result.targets)+'的牌').set('choosesha',sha); + } + } + else{ + event.finish(); + } + "step 2" + player.logSkill('zhongyong',event.target); + event.sha=false; + if(result.control=='杀'){ + event.target.gain(event.cards1,'gain2'); + if(get.color(event.cards1)=='red'){ + event.sha=true; + } + } + else{ + event.target.gain(event.cards2,'gain2'); + if(get.color(event.cards2)=='red'){ + event.sha=true; + } + } + "step 3" + if(event.sha){ + event.target.chooseToUse('是否使用一张杀?',{name:'sha'}).set('filterTarget',function(card,player,target){ + return target!=_status.event.source&&get.distance(_status.event.source,target,'attack')<=1&&player.canUse('sha',target,false); + }).set('source',player); + } + } + }, + dangxian:{ + trigger:{player:'phaseBegin'}, + forced:true, + content:function(){ + 'step 0' + player.phaseUse(); + 'step 1' + player.getStat().card={}; + } + }, + longyin:{ + trigger:{global:'shaBegin'}, + direct:true, + filter:function(event,player){ + return event.target==event.targets[0]&&player.countCards('he')>0&&event.card.name=='sha'&& + _status.currentPhase==event.player&&event.parent.parent.parent.name=='phaseUse'; + }, + content:function(){ + 'step 0' + var go=false; + if(get.attitude(player,trigger.player)>0){ + if(get.color(trigger.card)=='red'){ + go=true; + } + else if(!trigger.player.hasSkill('paoxiao')&& + !trigger.player.hasSkill('tanlin3')&& + !trigger.player.hasSkill('zhaxiang2')&& + !trigger.player.hasSkill('fengnu')&& + !trigger.player.getEquip('zhuge')){ + var nh=trigger.player.countCards('h'); + if(player==trigger.player){ + go=(player.countCards('h','sha')>0); + } + else if(nh>=4){ + go=true; + } + else if(player.countCards('h','sha')){ + if(nh==3){ + go=Math.random()<0.8; + } + else if(nh==2){ + go=Math.random()<0.5; + } + } + else if(nh>=3){ + if(nh==3){ + go=Math.random()<0.5; + } + else if(nh==2){ + go=Math.random()<0.2; + } + } + } + } + var next=player.chooseToDiscard(get.prompt('longyin'),'he'); + next.logSkill=['longyin',trigger.player]; + next.set('ai',function(card){ + if(_status.event.go){ + return 6-get.value(card); + } + return 0; + }); + next.set('go',go); + 'step 1' + if(result.bool){ + trigger.player.getStat().card.sha--; + if(get.color(trigger.card)=='red'){ + player.draw(); + } + // player.logSkill('longyin',trigger.player); + } + }, + ai:{ + expose:0.2 + } + }, + jigong:{ + audio:2, + trigger:{player:'phaseUseBegin'}, + check:function(event,player){ + var nh=player.countCards('h')-player.countCards('h',{type:'equip'}); + if(nh<=1) return true; + if(player.countCards('h','tao')) return false; + if(nh<=2) return Math.random()<0.7; + if(nh<=3) return Math.random()<0.4; + return false; + }, + content:function(){ + player.draw(2); + player.addTempSkill('jigong2'); + } + }, + jigong2:{ + mod:{ + maxHandcard:function(player,num){ + var damage=player.getStat().damage; + if(typeof damage=='number') return num-player.hp+damage; + return 0; + } + } + }, + shifei:{ + audio:2, + trigger:{player:'chooseToRespondBegin'}, + filter:function(event,player){ + if(event.responded) return false; + if(!event.filterCard({name:'shan'})) return false; + return true; + }, + check:function(event,player){ + if(get.attitude(player,_status.currentPhase)>0) return true; + var nh=_status.currentPhase.countCards('h')+1; + var players=game.filterPlayer(); + for(var i=0;inh){ + if(!player.hasShan()||get.attitude(player,players[i])<=0) return true; + } + } + return false; + }, + content:function(){ + 'step 0' + player.line(_status.currentPhase,'green'); + _status.currentPhase.draw(); + 'step 1' + var nh=_status.currentPhase.countCards('h'); + var nmax=nh+1; + var targets=[]; + var players=game.filterPlayer(); + for(var i=0;inmax){ + nmax=nh2; + targets.length=0; + targets.push(players[i]); + } + else if(nh2==nmax){ + targets.push(players[i]); + } + } + if(targets.length==1){ + event.onlytarget=targets[0]; + } + else if(targets.length){ + player.chooseTarget('选择一名角色弃置其一张牌',true,function(card,player,target){ + return _status.event.targets.contains(target); + }).set('ai',function(target){ + return -get.attitude(_status.event.player,target); + }).set('targets',targets); + } + else{ + event.finish(); + } + 'step 2' + var target; + if(event.onlytarget){ + target=event.onlytarget; + } + else if(result.targets&&result.targets.length){ + target=result.targets[0]; + } + if(target){ + player.line(target,'green'); + player.discardPlayerCard(target,'he',true); + trigger.untrigger(); + trigger.responded=true; + trigger.result={bool:true,card:{name:'shan'}} + } + }, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(get.tag(card,'respondShan')&¤t<0){ + var nh=player.countCards('h'); + var players=game.filterPlayer(); + for(var i=0;inh) return 0.4; + } + } + } + } + } + }, + huaiyi:{ + audio:2, + enable:'phaseUse', + usable:1, + delay:0, + filter:function(event,player){ + return player.countCards('h',{color:'red'})&&player.countCards('h',{color:'black'}); + }, + content:function(){ + 'step 0' + player.chooseControl('红色','黑色').set('ai',function(){ + var player=_status.event.player; + if(player.countCards('h',{color:'red'})==1&& + player.countCards('h',{color:'black'})>1) return '红色'; + return '黑色'; + }); + 'step 1' + event.control=result.control; + player.showHandcards(); + 'step 2' + var cards; + if(event.control=='红色'){ + cards=player.getCards('h',{color:'red'}); + } + else{ + cards=player.getCards('h',{color:'black'}); + } + player.discard(cards); + event.num=cards.length; + 'step 3' + player.chooseTarget([1,event.num],function(card,player,target){ + return target!=player&&target.countCards('he')>0; + }).set('ai',function(target){ + return -get.attitude(_status.event.player,target)+0.5; + }); + 'step 4' + if(result.bool&&result.targets){ + player.line(result.targets,'green'); + event.targets=result.targets; + event.targets.sort(lib.sort.seat); + event.gained=event.targets.length; + } + else{ + event.finish(); + } + 'step 5' + if(event.targets.length){ + player.gainPlayerCard(event.targets.shift(),'he',true); + event.redo(); + } + 'step 6' + if(event.gained>=2){ + player.loseHp(); + } + }, + ai:{ + order:function(item,player){ + if(player.countCards('h',{color:'red'})==1) return 10; + if(player.countCards('h',{color:'black'})==1) return 10; + return 1; + }, + result:{ + player:1 + } + } + }, + yaoming:{ + audio:2, + trigger:{player:'damageEnd',source:'damageEnd'}, + direct:true, + filter:function(event,player){ + if(player.hasSkill('yaoming2')) return false; + var nh=player.countCards('h'); + return game.hasPlayer(function(current){ + return current.countCards('h')!=nh; + }); + }, + content:function(){ + 'step 0' + var nh=player.countCards('h'); + player.chooseTarget(get.prompt('yaoming'),function(card,player,target){ + return _status.event.nh!=target.countCards('h'); + }).set('ai',function(target){ + var att=get.attitude(_status.event.player,target); + if(target.countCards('h')>_status.event.nh) return -att; + return att; + }).set('nh',nh); + 'step 1' + if(result.bool){ + player.logSkill('yaoming',result.targets); + player.addTempSkill('yaoming2'); + var target=result.targets[0]; + if(target.countCards('h')0; + }, + content:function(){ + 'step 0' + player.choosePlayerCard(target,'e',true); + 'step 1' + if(result.links){ + var num=0,players=game.filterPlayer(); + for(var i=0;inum2){ + player.draw(); + } + }, + ai:{ + order:7, + result:{ + target:function(player,target){ + if(target.hasSkillTag('noe')) return 1; + if(target.getEquip(1)||target.getEquip(4)) return -1; + if(target.getEquip(2)) return -0.7; + return -0.5; + } + } + } + }, + zhaofu:{ + unique:true, + global:'zhaofu2', + zhuSkill:true + }, + zhaofu2:{ + mod:{ + attackTo:function(from,to,distance){ + if(from.group!='wu') return; + var players=game.filterPlayer(); + for(var i=0;i0&&target!=player; + }, + content:function(){ + 'step 0' + if(target.countCards('e')){ + target.chooseBool('是否将装备区内的所有牌交给'+get.translation(player)+'?').set('ai',function(){ + if(_status.event.player.countCards('e')>=3) return false; + return true; + }); + } + else{ + target.chooseToDiscard(true,'he'); + event.finish(); + } + 'step 1' + if(result.bool){ + var es=target.getCards('e'); + player.gain(es,target); + target.$give(es,player); + player.removeSkill('yanzhu'); + } + else{ + target.chooseToDiscard(true,'he'); + } + }, + ai:{ + order:6, + result:{ + target:function(player,target){ + var ne=target.countCards('e'); + if(!ne) return -2; + if(ne>=2) return -ne; + return 0; + } + } + } + }, + shizhi:{ + mod:{ + cardRespondable:function(card,player){ + if(card.name=='shan'&&player.hp==1&&_status.event.skill!='shizhi') return false; + }, + }, + enable:['chooseToUse','chooseToRespond'], + filter:function(event,player){ + return player.hp==1; + }, + filterCard:{name:'shan'}, + viewAs:{name:'sha'}, + viewAsFilter:function(player){ + if(!player.countCards('h','shan')) return false; + if(player.hp!=1) return false; + }, + check:function(){return 1}, + ai:{ + skillTagFilter:function(player){ + if(!player.countCards('h','shan')) return false; + if(player.hp!=1) return false; + }, + respondSha:true, + order:4, + useful:-1, + value:-1 + } + }, + wurong:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.countCards('h')>0; + }, + filterTarget:function(card,player,target){ + return target.countCards('h')>0&&target!=player; + }, + content:function(){ + "step 0" + if(target.countCards('h')==0||player.countCards('h')==0){ + event.finish(); + return; + } + "step 1" + var sendback=function(){ + if(_status.event!=event){ + return function(){ + event.resultOL=_status.event.resultOL; + }; + } + }; + if(player.isOnline()){ + player.wait(sendback); + event.ol=true; + player.send(function(){ + game.me.chooseCard(true).set('glow_result',true).ai=function(){ + return Math.random(); + }; + game.resume(); + }); + } + else{ + event.localPlayer=true; + player.chooseCard(true).set('glow_result',true).ai=function(){ + return Math.random(); + }; + } + if(target.isOnline()){ + target.wait(sendback); + event.ol=true; + target.send(function(){ + var rand=Math.random()<0.4; + game.me.chooseCard(true).set('glow_result',true).ai=function(card){ + if(rand) return card.name=='shan'?1:0; + return card.name=='shan'?0:1; + }; + game.resume(); + }); + } + else{ + event.localTarget=true; + } + "step 2" + if(event.localPlayer){ + event.card1=result.cards[0]; + } + if(event.localTarget){ + var rand=Math.random()<0.4; + target.chooseCard(true).set('glow_result',true).ai=function(card){ + if(rand) return card.name=='shan'?1:0; + return card.name=='shan'?0:1; + }; + } + "step 3" + if(event.localTarget){ + event.card2=result.cards[0]; + } + if(!event.resultOL&&event.ol){ + game.pause(); + } + "step 4" + try{ + if(!event.card1) event.card1=event.resultOL[player.playerid].cards[0]; + if(!event.card2) event.card2=event.resultOL[target.playerid].cards[0]; + if(!event.card1||!event.card2){ + throw('err'); + } + } + catch(e){ + console.log(e); + event.finish(); + return; + } + if(event.card2.number>=10||event.card2.number<=4){ + if(target.countCards('h')>2){ + event.addToAI=true; + } + } + game.broadcastAll(function(card1,card2){ + card1.classList.remove('glow'); + card2.classList.remove('glow'); + },event.card1,event.card2); + "step 5" + game.broadcastAll(function(){ + ui.arena.classList.add('thrownhighlight'); + }); + game.addVideo('thrownhighlight1'); + player.$compare(event.card1,target,event.card2); + game.delay(4); + "step 6" + game.log(player,'展示了',event.card1); + game.log(target,'展示了',event.card2); + var name1=event.card1.name; + if(player.hp==1&&name1=='shan'){ + name1='sha'; + } + if(name1=='sha'&&event.card2.name!='shan'){ + player.discard(event.card1).set('animate',false); + target.$gain2(event.card2); + var clone=event.card1.clone; + if(clone){ + clone.style.transition='all 0.5s'; + clone.style.transform='scale(1.2)'; + clone.delete(); + game.addVideo('deletenode',player,get.cardsInfo([clone])); + } + game.broadcast(function(card){ + var clone=card.clone; + if(clone){ + clone.style.transition='all 0.5s'; + clone.style.transform='scale(1.2)'; + clone.delete(); + } + },event.card1); + target.damage(); + } + else if(name1!='sha'&&event.card2.name=='shan'){ + player.discard(event.card1).set('animate',false); + target.$gain2(event.card2); + var clone=event.card1.clone; + if(clone){ + clone.style.transition='all 0.5s'; + clone.style.transform='scale(1.2)'; + clone.delete(); + game.addVideo('deletenode',player,get.cardsInfo([clone])); + } + game.broadcast(function(card){ + var clone=card.clone; + if(clone){ + clone.style.transition='all 0.5s'; + clone.style.transform='scale(1.2)'; + clone.delete(); + } + },event.card1); + player.gainPlayerCard(target,true,'he'); + } + else{ + player.$gain2(event.card1); + target.$gain2(event.card2); + } + game.broadcastAll(function(){ + ui.arena.classList.remove('thrownhighlight'); + }); + game.addVideo('thrownhighlight2'); + }, + ai:{ + order:6, + result:{ + target:-1, + } + } + }, + zhanjue:{ + audio:2, + enable:'phaseUse', + filterCard:true, + selectCard:-1, + filter:function(event,player){ + if(!player.countCards('h')) return false; + if(player.storage.zhanjue>=2) return false; + return true; + }, + viewAs:{name:'juedou'}, + group:['zhanjue2','zhanjue3','zhanjue4'], + ai:{ + damage:true, + order:1, + effect:{ + player:function(card,player,target){ + if(_status.event.skill=='zhanjue'){ + if(player.countCards('h')>=3||target.countCards('h')>=3) return 'zeroplayertarget'; + if(player.countCards('h','tao')) return 'zeroplayertarget'; + if(target.countCards('h','sha')>1) return 'zeroplayertarget'; + } + } + } + } + }, + zhanjue2:{ + audio:false, + trigger:{player:'phaseBefore'}, + silent:true, + content:function(){ + player.storage.zhanjue=0; + } + }, + zhanjue3:{ + audio:false, + trigger:{player:'damageAfter',source:'damageAfter'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.parent.skill=='zhanjue'; + }, + content:function(){ + player.storage.zhanjue2=trigger.player; + } + }, + zhanjue4:{ + audio:false, + trigger:{player:'juedouAfter'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.skill=='zhanjue'; + }, + content:function(){ + if(typeof player.storage.zhanjue!='number'){ + player.storage.zhanjue=0; + } + if(player.storage.zhanjue2==player){ + player.draw(2); + player.storage.zhanjue+=2; + } + else if(player.storage.zhanjue2){ + if(player.storage.zhanjue2.isAlive()){ + game.asyncDraw([player,player.storage.zhanjue2]); + } + else{ + player.draw(); + } + player.storage.zhanjue++; + } + else{ + player.draw(); + player.storage.zhanjue++; + } + delete player.storage.zhanjue2; + } + }, + qinwang:{ + unique:true, + group:['qinwang1','qinwang2'], + zhuSkill:true, + subSkill:{ + ai:{} + } + }, + qinwang1:{ + audio:2, + trigger:{player:'chooseToRespondBegin'}, + filter:function(event,player){ + if(event.responded) return false; + if(!player.hasZhuSkill('qinwang')) return false; + if(!player.countCards('he')) return false; + if(event.filterCard({name:'sha'},player,event)==false) return false; + return game.hasPlayer(function(current){ + return current!=player&¤t.group=='shu'; + }); + }, + direct:true, + content:function(){ + "step 0" + var yep=false; + if(!player.storage.jijianging){ + var players=game.filterPlayer(); + for(var i=0;i1&&(nh>=4||(nh>=3&&players[i].countCards('h','sha')))){ + yep=true;break; + } + } + } + var next=player.chooseToDiscard(get.prompt('qinwang'),'he'); + next.set('ai',function(card){ + if(_status.event.yep) return 5-get.value(card); + return 0; + }); + next.set('yep',yep); + next.logSkill='qinwang' + "step 1" + if(!result.bool){ + event.finish(); + } + "step 2" + if(event.current==undefined) event.current=player.next; + if(event.current==player){ + event.finish(); + } + else if(event.current.group=='shu'){ + player.storage.jijianging=true; + var next=event.current.chooseToRespond('是否替'+get.translation(player)+'打出一张杀?',{name:'sha'}); + next.set('ai',function(){ + var event=_status.event; + return (get.attitude(event.player,event.source)-2); + }); + next.set('source',player); + next.autochoose=lib.filter.autoRespondSha; + } + else{ + event.current=event.current.next; + event.redo(); + } + "step 3" + player.storage.jijianging=false; + if(result.bool){ + event.finish(); + trigger.result=result; + trigger.responded=true; + trigger.animate=false; + event.current.draw(); + if(typeof event.current.ai.shown=='number'&&event.current.ai.shown<0.95){ + event.current.ai.shown+=0.3; + if(event.current.ai.shown>0.95) event.current.ai.shown=0.95; + } + } + else{ + event.current=event.current.next; + event.goto(2); + } + } + }, + qinwang2:{ + audio:2, + enable:'chooseToUse', + filter:function(event,player){ + if(event.filterCard&&!event.filterCard({name:'sha'},player,event)) return false; + if(!player.hasZhuSkill('qinwang')) return false; + if(!lib.filter.cardUsable({name:'sha'},player)) return false; + return game.hasPlayer(function(current){ + return current!=player&¤t.group=='shu'; + }); + }, + filterCard:true, + position:'he', + check:function(card){ + var player=_status.event.player,players=game.filterPlayer(); + for(var i=0;i1&&(nh>=4||(nh>=3&&players[i].countCards('h','sha')))){ + return 5-get.value(card); + } + } + return 0; + }, + filterTarget:function(card,player,target){ + if(_status.event._backup&& + typeof _status.event._backup.filterTarget=='function'&& + !_status.event._backup.filterTarget({name:'sha'},player,target)){ + return false; + } + return player.canUse({name:'sha'},target); + }, + content:function(){ + "step 0" + if(event.current==undefined) event.current=player.next; + if(event.current==player){ + player.addSkill('jijiang3'); + player.addTempSkill('qinwang_ai'); + event.getParent(2).step=0; + event.finish(); + } + else if(event.current.group=='shu'){ + var next=event.current.chooseToRespond('是否替'+get.translation(player)+'对'+get.translation(target)+'使用一张杀', + function(card){ + var evt=_status.event.getParent(); + return evt.player.canUse(card,evt.target)&&card.name=='sha'; + }); + next.set('ai',function(card){ + var event=_status.event; + return get.effect(event.target,card,event.source,event.player); + }); + next.set('source',player); + next.set('target',target); + next.autochoose=lib.filter.autoRespondSha; + } + else{ + event.current=event.current.next; + event.redo(); + } + "step 1" + if(result.bool){ + event.finish(); + event.current.draw(); + if(result.cards&&result.cards.length==1&&result.cards[0].name=='sha'){ + player.useCard(result.cards[0],target).animate=false; + } + else{ + player.useCard({name:'sha'},target).animate=false; + } + if(typeof event.current.ai.shown=='number'&&event.current.ai.shown<0.95){ + event.current.ai.shown+=0.3; + if(event.current.ai.shown>0.95) event.current.ai.shown=0.95; + } + } + else{ + event.current=event.current.next; + event.goto(0); + } + }, + ai:{ + result:{ + target:function(player,target){ + if(player.hasSkill('jijiang3')) return 0; + if(player.hasSkill('qinwang_ai')) return 0; + return get.effect(target,{name:'sha'},player,target); + } + }, + order:function(){ + return get.order({name:'sha'})-0.1; + }, + } + }, + zuoding:{ + trigger:{global:'useCard'}, + filter:function(event,player){ + return !player.hasSkill('zuoding2')&&get.suit(event.card)=='spade'&& + _status.currentPhase==event.player&&event.targets&&event.targets.length&& + event.player!=player; + }, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('zuoding'),function(card,player,target){ + return _status.event.getTrigger().targets.contains(target); + }).set('ai',function(target){ + return get.attitude(_status.event.player,target); + }); + 'step 1' + if(result.bool){ + player.logSkill('zuoding',result.targets); + result.targets[0].draw(); + } + }, + ai:{ + expose:0.2 + }, + group:'zuoding3' + }, + zuoding2:{}, + zuoding3:{ + trigger:{global:'damageEnd'}, + silent:true, + content:function(){ + player.addTempSkill('zuoding2'); + } + }, + huomo:{ + audio:2, + trigger:{player:'chooseToRespondBegin'}, + filter:function(event,player){ + if(event.responded) return false; + if(!event.filterCard({name:'shan'})) return false; + if(player.hasSkill('huomo2')) return false; + if(event.parent.name!='sha') return false; + var hs=player.getCards('he',{color:'black'}); + for(var i=0;i0; + })){ + switch(button.link[2]){ + case 'tao':return 5; + case 'jiu':return 3.01; + case 'sha': + if(button.link[3]=='fire') return 2.95; + else if(button.link[3]=='fire') return 2.92; + else return 2.9; + } + } + return 0; + }, + backup:function(links,player){ + return { + filterCard:function(card){ + return get.type(card)!='basic'&&get.color(card)=='black'; + }, + viewAs:{name:links[0][2],nature:links[0][3]}, + position:'he', + popname:true, + precontent:function(){ + 'step 0' + var card=event.result.cards[0]; + event.card=card; + player.$throw(card,1000); + game.log(player,'将',card,'置于牌堆顶'); + event.result.cards.length=0; + player.lose(card); + 'step 1' + game.delay(); + 'step 2' + ui.cardPile.insertBefore(event.card,ui.cardPile.firstChild); + }, + } + }, + prompt:function(links,player){ + return '将一张黑色非基本牌置于牌堆顶并视为使用一张'+get.translation(links[0][3]||'')+get.translation(links[0][2]); + } + }, + ai:{ + order:function(){ + var player=_status.event.player; + var event=_status.event; + if(!player.storage.huomo.jiu&&event.filterCard({name:'jiu'},player,event)&&get.effect(player,{name:'jiu'})>0){ + return 3.1; + } + return 2.9; + }, + save:true, + respondSha:true, + skillTagFilter:function(player,tag,arg){ + if(player.hasCard(function(card){ + return get.color(card)=='black'&&get.type(card)!='basic'; + },'he')){ + if(!player.storage.huomo) player.storage.huomo={}; + if(tag=='respondSha'){ + if(arg!='use') return false; + if(player.storage.huomo.sha) return false; + } + else{ + if(player.storage.huomo.tao&&player.storage.huomo.jiu) return false; + } + } + else{ + return false; + } + }, + result:{ + player:1 + } + } + }, + taoxi:{ + audio:2, + trigger:{player:'useCardToBegin'}, + filter:function(event,player){ + return _status.currentPhase==player&&event.targets.length==1&& + event.target.countCards('h')>0&&!player.hasSkill('taoxi4')&&player!=event.target; + }, + check:function(event,player){ + return get.attitude(player,event.target)<0; + }, + intro:{ + content:'card' + }, + content:function(){ + var card=trigger.target.getCards('h').randomGet(); + player.showCards([card]); + player.storage.taoxi=card; + player.storage.taoxi2=trigger.target; + player.syncStorage('taoxi'); + player.markSkill('taoxi'); + player.addTempSkill('taoxi4'); + }, + group:['taoxi2','taoxi3'] + }, + taoxi2:{ + audio:false, + enable:'phaseUse', + filter:function(event,player){ + if(player.storage.taoxi&&player.storage.taoxi2&& + get.owner(player.storage.taoxi)==player.storage.taoxi2&& + lib.filter.filterCard(player.storage.taoxi,player,event)){ + return true; + } + return false; + }, + filterTarget:function(card,player,target){ + return player.canUse(player.storage.taoxi,target); + }, + selectTarget:function(){ + var info=get.info(_status.event.player.storage.taoxi); + if(info.notarget) return -1; + return get.select(info.selectTarget); + }, + multitarget:true, + multiline:true, + content:function(){ + 'step 0' + var card=player.storage.taoxi; + if(!card){ + event.finish(); + return; + } + var owner=get.owner(card); + if(owner){ + owner.lose(card,ui.special); + } + event.card=card; + player.$throw(card); + 'step 1' + player.useCard(event.card,targets).animate=false; + delete player.storage.taoxi; + delete player.storage.taoxi2; + player.unmarkSkill('taoxi'); + }, + ai:{ + order:8, + result:{ + target:function(player,target){ + return get.effect(target,player.storage.taoxi,player,target); + }, + player:1 + } + } + }, + taoxi3:{ + trigger:{player:'phaseEnd'}, + forced:true, + popup:false, + filter:function(event,player){ + return player.storage.taoxi?true:false; + }, + content:function(){ + if(get.owner(player.storage.taoxi)==player.storage.taoxi2){ + player.loseHp(); + } + delete player.storage.taoxi; + delete player.storage.taoxi2; + player.unmarkSkill('taoxi'); + } + }, + taoxi4:{}, + xingshuai:{ + skillAnimation:true, + audio:2, + trigger:{player:'dying'}, + priority:6, + zhuSkill:true, + filter:function(event,player){ + if(player.storage.xingshuai) return false; + if(player.hp>0) return false; + if(!player.hasZhuSkill('xingshuai')) return false; + return game.hasPlayer(function(current){ + return current!=player&¤t.group=='wei'; + }); + }, + init:function(player){ + if(player.hasZhuSkill('xingshuai')){ + player.markSkill('xingshuai'); + player.storage.xingshuai=false; + } + }, + intro:{ + content:'limited' + }, + unique:true, + content:function(){ + 'step 0' + player.storage.xingshuai=true; + player.awakenSkill('xingshuai'); + var targets=game.filterPlayer(); + targets.remove(player); + event.targets=targets; + event.damages=[]; + 'step 1' + if(event.targets.length){ + var current=event.targets.shift(); + if(current.group=='wei'){ + current.chooseBool('是否令'+get.translation(player)+'回复一点体力?').set('ai',function(){ + return get.attitude(_status.event.player,_status.event.target)>2; + }).set('target',player); + event.current=current; + } + else{ + event.redo(); + } + } + else{ + event.goto(3); + } + 'step 2' + if(result.bool){ + event.damages.push(event.current); + event.current.line(player,'green'); + game.log(event.current,'令',player,'回复一点体力'); + } + if(event.targets.length){ + event.goto(1); + } + 'step 3' + if(event.damages.length){ + player.recover(event.damages.length); + } + 'step 4' + if(event.damages.length){ + event.damages.shift().damage('nosource'); + event.redo(); + } + } + }, + mingjian:{ + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return player!=target; + }, + filter:function(event,player){ + return player.countCards('h')>0; + }, + filterCard:true, + selectCard:-1, + discard:false, + lose:true, + content:function(){ + player.$give(cards.length,target); + target.gain(cards,player); + target.addTempSkill('mingjian2',{player:'phaseAfter'}); + }, + ai:{ + order:1, + result:{ + target:function(player,target){ + if(target.hasSkillTag('nogain')) return 0; + if(player.countCards('h')==1&&player.countCards('h','du')) return -1; + if(player.hp<=2&&player.countCards('h','shan')) return 0; + if(target.countCards('h')+player.countCards('h')>target.hp+2) return 0; + if(get.attitude(player,target)>3) return 1; + return 0; + } + } + } + }, + mingjian2:{ + mark:true, + intro:{ + content:'手牌上限+1,出杀次数+1' + }, + mod:{ + maxHandcard:function(player,num){ + return num+1; + }, + cardUsable:function(card,player,num){ + if(card.name=='sha') return num+1; + } + }, + }, + mingjian_old:{ + audio:2, + trigger:{player:'phaseUseBefore'}, + direct:true, + filter:function(event,player){ + return player.countCards('h')>0; + }, + content:function(){ + 'step 0' + var go=Math.random()<0.5; + player.chooseTarget(get.prompt('mingjian'),function(card,player,target){ + return player!=target + }).ai=function(target){ + var att=get.attitude(player,target); + if(att>3){ + if(player.countCards('h')>player.hp) return att; + if(go) return att; + } + return 0; + } + 'step 1' + if(result.bool){ + player.logSkill('mingjian',result.targets); + trigger.cancel(); + var target=result.targets[0]; + target.addSkill('mingjian2'); + var hs=player.getCards('h'); + target.gain(hs,player); + player.$give(hs.length,target); + } + } + }, + mingjian2_old:{ + audio:false, + trigger:{global:'phaseAfter'}, + forced:true, + popup:false, + content:function(){ + if(lib.config.glow_phase){ + if(_status.currentPhase){ + _status.currentPhase.classList.remove('glow_phase'); + } + player.classList.add('glow_phase'); + } + game.addVideo('phaseChange',player); + _status.currentPhase=player; + player.ai.tempIgnore=[]; + player.stat.push({card:{},skill:{}}); + player.phaseUse(); + player.removeSkill('mingjian2'); + } + }, + huituo:{ + audio:2, + trigger:{player:'damageEnd'}, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('huituo')).set('ai',function(target){ + var player=_status.event.player; + if(get.attitude(player,target)>0){ + return get.recoverEffect(target,player,player)+1; + } + return 0; + }); + 'step 1' + if(result.bool){ + player.logSkill('huituo',result.targets); + var target=result.targets[0]; + event.target=target; + target.judge(function(card){ + if(target.hp==target.maxHp){ + if(get.color(card)=='red') return -1; + } + if(get.color(card)=='red') return 1; + return 0; + }); + } + else{ + event.finish(); + } + 'step 2' + if(result.color){ + if(result.color=='red'){ + if(event.target.hp0&&event.source&&event.source.getEquip(1)!=undefined&& + event.card&&event.card.name=='sha'; + }, + direct:true, + priority:5, + audio:2, + content:function(){ + 'step 0' + var next=player.chooseToDiscard('he',get.prompt('duodao')); + next.logSkill=['duodao',trigger.source]; + next.set('ai',function(card){ + if(get.attitude(_status.event.player,_status.event.getTrigger().source)<=0){ + return 6-get.value(card); + } + return 0; + }); + 'step 1' + if(result.bool){ + trigger.source.$give(trigger.source.getEquip(1),player); + player.gain(trigger.source.getEquip(1),trigger.source); + } + }, + ai:{ + maixie_defend:true, + } + }, + anjian:{ + audio:2, + trigger:{source:'damageBegin'}, + check:function(event,player){ + return get.attitude(player,event.player)<=0; + }, + forced:true, + filter:function(event,player){ + return event.card&&event.card.name=='sha'&&get.distance(event.player,player,'attack')>1&& + event.parent.name!='_lianhuan'&&event.parent.name!='_lianhuan2'; + }, + content:function(){ + trigger.num++; + } + }, + xinpojun:{ + trigger:{player:'shaBegin'}, + direct:true, + filter:function(event,player){ + return event.target.hp>0&&event.target.countCards('he')>0; + }, + audio:2, + logTarget:'target', + content:function(){ + 'step 0' + player.choosePlayerCard(trigger.target,'he', + [1,Math.min(trigger.target.countCards('he'),trigger.target.hp)],get.prompt('pojun',trigger.target)); + 'step 1' + if(result.bool&&result.links.length){ + player.logSkill('xinpojun'); + if(trigger.target.storage.xinpojun2){ + trigger.target.storage.xinpojun2=trigger.target.storage.xinpojun2.concat(result.links); + } + else{ + trigger.target.storage.xinpojun2=result.links; + } + game.addVideo('storage',trigger.target,['xinpojun2',get.cardsInfo(trigger.target.storage.xinpojun2),'cards']); + trigger.target.addSkill('xinpojun2'); + trigger.target.lose(result.links,ui.special); + } + }, + ai:{ + expose:0.2 + } + }, + xinpojun2:{ + trigger:{global:'phaseEnd'}, + forced:true, + audio:false, + mark:true, + intro:{ + content:'cardCount' + }, + content:function(){ + if(player.storage.xinpojun2){ + player.gain(player.storage.xinpojun2); + delete player.storage.xinpojun2; + } + player.removeSkill('xinpojun2'); + }, + group:'xinpojun3' + }, + xinpojun3:{ + trigger:{player:'dieBegin'}, + forced:true, + popup:false, + content:function(){ + player.$throw(player.storage.xinpojun2,1000); + for(var i=0;i=0; + }, + priority:-5, + logTarget:'player', + content:function(){ + game.asyncDraw([trigger.player,player]); + }, + ai:{ + expose:0.1 + } + }, + yanyu:{ + audio:2, + enable:'phaseUse', + filter:function(event,player){ + return player.countCards('h','sha')>0; + }, + filterCard:{name:'sha'}, + prepare:function(cards,player){ + player.$throw(cards,1000); + }, + discard:false, + delay:0.5, + content:function(){ + "step 0" + player.draw(); + "step 1" + for(var i=0;i=2; + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('yanyu'),function(card,player,target){ + return target.sex=='male'&&target!=player; + }).set('ai',function(target){ + return get.attitude(_status.event.player,target); + }); + 'step 1' + if(result.bool){ + player.logSkill('yanyu',result.targets); + result.targets[0].draw(2); + } + } + }, + youdi:{ + audio:true, + trigger:{player:'phaseEnd'}, + direct:true, + filter:function(event,player){ + return player.countCards('he')>0; + }, + content:function(){ + "step 0" + player.chooseTarget(get.prompt('youdi'),function(card,player,target){ + return player!=target; + }).set('ai',function(target){ + if(!_status.event.goon) return 0; + if(target.countCards('he')==0) return 0; + return -get.attitude(_status.event.player,target); + }).set('goon',player.countCards('h','sha')<=player.countCards('h')/3); + "step 1" + if(result.bool){ + game.delay(); + player.logSkill('youdi',result.targets); + event.target=result.targets[0]; + event.target.discardPlayerCard(player,'he',true); + } + else{ + event.finish(); + } + "step 2" + if(result.links[0].name!='sha'&&event.target.countCards('he')){ + player.gainPlayerCard('he',event.target,true); + } + }, + ai:{ + expose:0.2, + threaten:1.4 + } + }, + fuhun:{ + enable:['chooseToUse','chooseToRespond'], + filterCard:true, + selectCard:2, + position:'h', + audio:2, + derivation:['wusheng','paoxiao'], + viewAs:{name:'sha'}, + prompt:'将两张手牌当杀使用或打出', + check:function(card){ + if(_status.event.player.hasSkill('wusheng')&&get.color(card)=='red') return 0; + if(_status.event.name=='chooseToRespond'){ + if(card.name=='sha') return 0; + return 6-get.useful(card); + } + if(_status.event.player.countCards('h')<4) return 6-get.useful(card); + return 7-get.useful(card); + }, + ai:{ + respondSha:true, + order:function(item,player){ + if(player.hasSkill('wusheng')&&player.hasSkill('paoxiao')){ + return 1; + } + if(player.countCards('h')<4){ + return 1; + } + return 4; + }, + }, + group:'fuhun2' + }, + fuhun2:{ + trigger:{source:'damageAfter'}, + forced:true, + filter:function(event,player){ + if(player.hasSkill('fuhun3')) return false; + return event.getParent().skill=='fuhun'; + }, + content:function(){ + player.addTempSkill('wusheng'); + player.addTempSkill('paoxiao'); + player.addTempSkill('fuhun3'); + } + }, + fuhun3:{}, + fencheng:{ + skillAnimation:'epic', + animationColor:'fire', + audio:2, + enable:'phaseUse', + filter:function(event,player){ + return !player.storage.fencheng; + }, + filterTarget:function(card,player,target){ + return player!=target; + }, + unique:true, + selectTarget:-1, + mark:true, + line:'fire', + content:function(){ + "step 0" + player.storage.fencheng=true; + player.awakenSkill('fencheng'); + var res=get.damageEffect(target,player,target,'fire'); + var num=Math.max(1,target.countCards('e')); + target.chooseToDiscard(num,'he','弃置'+get.cnNumber(num)+'张牌或受到1点火焰伤害').set('ai',function(card){ + var res=_status.event.res; + var num=_status.event.num; + var player=_status.event.player; + if(res>=0) return -1; + if(num>2&&player.hp>1) return -1; + if(num>1&&player.hp>2) return -1; + if(get.position(card)=='e'){ + return 10-get.value(card); + } + return 6-get.value(card); + }).set('res',res).set('num',num); + "step 1" + if(!result.bool){ + target.damage('fire'); + } + }, + ai:{ + order:1, + result:{ + player:function(player){ + var num=0,players=game.filterPlayer(); + for(var i=0;i0){ + num-=Math.max(1,players[i].countCards('e')); + } + else if(att<0){ + num+=Math.max(1,players[i].countCards('e')); + } + } + } + if(players.length<5){ + return num-1; + } + else{ + return num-2; + } + } + } + }, + init:function(player){ + player.storage.fencheng=false; + }, + intro:{ + content:'limited' + } + }, + mieji:{ + trigger:{player:'useCard'}, + direct:true, + audio:2, + filter:function(event,player){ + return event.targets.length==1&&get.type(event.card)=='trick'&&get.color(event.card)=='black'; + }, + position:'he', + content:function(){ + "step 0" + player.chooseTarget(get.prompt('mieji'),function(card,player,target){ + var trigger=_status.event.getTrigger(); + return lib.filter.filterTarget(trigger.card,player,target)&&target!=trigger.targets[0]; + }).set('autodelay',true).set('ai',function(target){ + var trigger=_status.event.getTrigger(); + var player=_status.event.player; + return get.effect(target,trigger.card,player,player); + }); + "step 1" + if(result.bool){ + trigger.targets.push(result.targets[0]); + player.logSkill('mieji',result.targets); + } + } + }, + junxing:{ + enable:'phaseUse', + audio:2, + usable:1, + filterCard:true, + selectCard:[1,Infinity], + filter:function(event,player){ + return player.countCards('h')>0; + }, + check:function(card){ + if(ui.selected.cards.length) return -1; + var val=get.value(card); + if(get.type(card)=='basic') return 8-get.value(card); + return 5-get.value(card); + }, + filterTarget:function(card,player,target){ + return player!=target; + }, + content:function(){ + "step 0" + var types=[]; + for(var i=0;i0; + }, + filter:function(event,player){ + if(event.player.countCards('h')) return false; + if(_status.currentPhase!=player) return false; + if(event.player==player) return false; + for(var i=0;i2){ + if(game.phaseNumber0&&event.player.countCards('j')) return true; + if(event.num>1){ + if(att<0) return false; + if(att>0) return true; + } + var cards=event.player.getCards('e'); + for(var i=0;i=6) return true; + } + return false; + }, + content:function(){ + if(trigger.player.countCards('ej')){ + player.gainPlayerCard(trigger.player,'ej',true); + } + trigger.cancel(); + } + }, + sanyao:{ + audio:2, + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return target.isMaxHp(); + }, + check:function(card){return 7-get.value(card);}, + position:'he', + filterCard:true, + content:function(){ + target.damage(); + }, + ai:{ + result:{ + target:function(player,target){ + if(target.countCards('j')&&get.attitude(player,target)>0){ + return 1; + } + if(target.countCards('e')){ + return -1; + } + return get.damageEffect(target,player); + }, + }, + order:7 + } + }, + qiaoshui:{ + audio:2, + trigger:{player:'phaseUseBegin'}, + direct:true, + filter:function(event,player){ + return player.countCards('h')>0; + }, + content:function(){ + "step 0" + player.chooseTarget(get.prompt('qiaoshui'),function(card,player,target){ + return player!=target&&target.countCards('h')>0; + }).set('ai',function(target){ + return -get.attitude(_status.event.player,target)/target.countCards('h'); + }); + "step 1" + if(result.bool){ + player.logSkill('qiaoshui',result.targets[0]); + player.chooseToCompare(result.targets[0]); + } + else{ + event.finish(); + } + "step 2" + if(result.bool){ + player.addTempSkill('qiaoshui3'); + } + else{ + player.addTempSkill('qiaoshui2'); + } + }, + ai:{ + expose:0.1 + } + }, + qiaoshui2:{ + mod:{ + cardEnabled:function(card){ + if(get.type(card,'trick')=='trick') return false; + } + } + }, + qiaoshui3:{ + trigger:{player:'useCard'}, + direct:true, + filter:function(event,player){ + var type=get.type(event.card); + return type=='basic'||type=='trick'; + }, + content:function(){ + 'step 0' + player.removeSkill('qiaoshui3'); + var goon=false; + var info=get.info(trigger.card); + if(trigger.targets&&!info.multitarget){ + var players=game.filterPlayer(); + for(var i=0;i1){ + event.goto(3); + } + } + 'step 1' + if(result.bool){ + if(!event.isMine()) game.delayx(); + event.target=result.targets[0]; + } + else{ + event.finish(); + } + 'step 2' + if(event.target){ + player.logSkill('qiaoshui',event.target); + trigger.targets.add(event.target); + } + event.finish(); + 'step 3' + player.chooseTarget('巧说:是否减少一名'+get.translation(trigger.card)+'的目标?',function(card,player,target){ + return _status.event.getTrigger().targets.contains(target); + }).set('ai',function(target){ + var trigger=_status.event.getTrigger(); + return -get.effect(target,trigger.card,trigger.player,_status.event.player); + }); + 'step 4' + if(result.bool){ + event.targets=result.targets; + if(event.isMine()){ + player.logSkill('qiaoshui',event.targets); + event.finish(); + } + for(var i=0;i1) return false; + return event.card&&get.type(event.card)=='trick'&&event.player!=player; + }, + frequent:true, + content:function(){ + player.draw(); + }, + ai:{ + effect:function(card,player,target){ + if(get.type(card)=='trick') return [1,1]; + }, + } + }, + shenxing:{ + audio:2, + enable:'phaseUse', + position:'he', + filterCard:true, + selectCard:2, + prompt:'弃置两张牌并摸一张牌', + check:function(card){return 4-get.useful(card)}, + content:function(){ + player.draw(); + }, + ai:{ + order:1, + result:{ + player:1 + }, + }, + }, + bingyi:{ + audio:2, + trigger:{player:'phaseDiscardEnd'}, + filter:function(event,player){ + var cards=player.getCards('h'); + if(cards.length<1) return false; + var color=get.color(cards[0]); + for(var i=1;i=2) return false; + if(player.hp==1) return false; + if(player.hp==2&&player.countCards('h')<2) return false; + if(event.player.countCards('h')>=event.player.hp) return false; + return true; + }, + content:function(){ + "step 0" + player.draw(2); + "step 1" + player.chooseCard(2,'he',true,'交给'+get.translation(trigger.player)+'两张牌').set('ai',function(card){ + if(ui.selected.cards.length&&card.name==ui.selected.cards[0].name) return -1; + if(get.tag(card,'damage')) return 1; + if(get.type(card)=='equip') return 1; + return 0; + }); + "step 2" + trigger.player.gain(result.cards,player); + if(player==game.me||trigger.player==game.me) + player.$give(result.cards,trigger.player); + else + player.$give(2,trigger.player); + game.delay(); + trigger.player.addSkill('xiantu2'); + trigger.player.storage.xiantu=player; + }, + ai:{ + threaten:1.1, + expose:0.3 + } + }, + xiantu2:{ + trigger:{player:'phaseUseEnd'}, + forced:true, + audio:false, + content:function(){ + if(player.storage.xiantu){ + player.storage.xiantu.loseHp(); + delete player.storage.xiantu; + } + player.removeSkill('xiantu2'); + }, + group:'xiantu3' + }, + xiantu3:{ + trigger:{source:'dieAfter'}, + forced:true, + audio:false, + content:function(){ + delete player.storage.xiantu; + player.removeSkill('xiantu2'); + } + }, + qiangzhi:{ + audio:2, + trigger:{player:'phaseUseBegin'}, + direct:true, + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('h')>0; + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('qiangzhi'),function(card,player,target){ + return target!=player&&target.countCards('h')>0; + }).set('ai',function(){ + return Math.random(); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('qiangzhi',target); + var card=target.getCards('h').randomGet(); + player.showCards(card); + player.storage.qiangzhi=get.type(card,'trick'); + game.addVideo('storage',player,['qiangzhi',player.storage.qiangzhi]); + player.markSkill('qiangzhi'); + } + }, + intro:{ + content:function(type){ + return get.translation(type)+'牌'; + } + }, + group:['qiangzhi2','qiangzhi3'], + ai:{ + order:11, + result:{ + player:1 + } + } + }, + qiangzhi2:{ + trigger:{player:'useCard'}, + frequent:true, + filter:function(event,player){ + // return (get.type(event.card,'trick')==player.storage.qiangzhi&&event.cards[0]&&event.cards[0]==event.card); + return get.type(event.card,'trick')==player.storage.qiangzhi; + }, + content:function(){ + player.draw(); + }, + ai:{ + threaten:1.4 + } + }, + qiangzhi3:{ + trigger:{player:'phaseUseEnd'}, + silent:true, + content:function(){ + delete player.storage.qiangzhi; + player.unmarkSkill('qiangzhi'); + } + }, + dingpin:{ + enable:'phaseUse', + usable:3, + audio:2, + filter:function(event,player){ + return player.countCards('h')>0; + }, + filterTarget:function(card,player,target){ + return target.hp0; + }, + logTarget:'player', + content:function(){ + trigger.player.draw(); + }, + ai:{ + expose:0.2 + } + }, + jiaojin:{ + audio:2, + trigger:{player:'damageBegin'}, + filter:function(event,player){ + return player.countCards('he',{type:'equip'})&&event.source&&event.source.sex=='male'; + }, + direct:true, + content:function(){ + "step 0" + var next=player.chooseToDiscard('he','骄矜:是否弃置一张装备牌令伤害-1?',function(card,player){ + return get.type(card)=='equip'; + }); + next.set('ai',function(card){ + var player=_status.event.player; + if(player.hp==1||_status.event.getTrigger().num>1){ + return 9-get.value(card); + } + if(player.hp==2){ + return 8-get.value(card); + } + return 7-get.value(card); + }); + next.logSkill='jiaojin'; + "step 1" + if(result.bool){ + game.delay(0.5); + trigger.num--; + } + } + }, + chanhui:{ + audio:2, + trigger:{player:'useCard'}, + filter:function(event,player){ + if(_status.currentPhase!=player) return false; + if(player.hasSkill('chanhui2')) return false; + if(event.targets.length>1) return false; + var card=event.card; + if(card.name=='sha') return true; + if(get.color(card)=='black'&&get.type(card)=='trick') return true; + return false; + }, + direct:true, + content:function(){ + "step 0" + player.chooseTarget(get.prompt('chanhui'),function(card,player,target){ + if(player==target) return false; + var trigger=_status.event.getTrigger(); + return player.canUse(trigger.card,target)&&trigger.targets.contains(target)==false; + }).set('ai',function(target){ + var trigger=_status.event.getTrigger(); + var player=_status.event.player; + return get.effect(target,trigger.card,player,player)+0.01; + }); + "step 1" + if(result.bool){ + game.delay(0,200); + event.target=result.targets[0]; + } + else{ + event.finish(); + } + "step 2" + game.delay(); + player.addSkill('chanhui2'); + player.logSkill('chanhui',event.target); + event.target.chooseCard('交给'+get.translation(player)+'一张手牌,或成为'+ + get.translation(trigger.card)+'的额外目标').set('ai',function(card){ + return 5-get.value(card); + }); + "step 3" + if(result.bool){ + player.gain(result.cards,event.target); + event.target.$give(1,player); + game.delay(); + trigger.untrigger(); + trigger.player=event.target; + trigger.trigger('useCard'); + game.log(event.target,'成为了',trigger.card,'的使用者'); + } + else{ + game.log(event.target,'成为了',trigger.card,'的额外目标'); + trigger.targets.push(event.target); + } + } + }, + chanhui2:{ + trigger:{player:'phaseEnd'}, + forced:true, + popup:false, + audio:false, + content:function(){ + player.removeSkill('chanhui2'); + } + }, + quanji:{ + audio:2, + trigger:{player:'damageEnd'}, + frequent:true, + locked:false, + notemp:true, + init:function(player){ + player.storage.quanji=[]; + }, + filter:function(event){ + return event.num>0; + }, + content:function(){ + "step 0" + player.draw(trigger.num); + "step 1" + if(player.countCards('he')){ + player.chooseCard('将'+get.cnNumber(trigger.num)+'张手牌置于武将牌上作为“权”',trigger.num,true); + } + else{ + event.finish(); + } + "step 2" + if(result.cards&&result.cards.length){ + player.lose(result.cards,ui.special); + player.storage.quanji=player.storage.quanji.concat(result.cards); + player.syncStorage('quanji'); + player.markSkill('quanji'); + game.log(player,'将',result.cards,'置于武将牌上作为“权”'); + } + }, + intro:{ + content:'cards' + }, + mod:{ + maxHandcard:function(player,num){ + return num+player.storage.quanji.length; + } + }, + ai:{ + maixie:true, + maixie_hp:true, + threaten:0.8, + effect:{ + target:function(card,player,target){ + if(get.tag(card,'damage')){ + if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; + if(!target.hasFriend()) return; + if(target.hp>=4) return [0.5,get.tag(card,'damage')*2]; + if(!target.hasSkill('paiyi')&&target.hp>1) return [0.5,get.tag(card,'damage')*1.5]; + if(target.hp==3) return [0.5,get.tag(card,'damage')*1.5]; + if(target.hp==2) return [1,get.tag(card,'damage')*0.5]; + } + } + } + } + }, + zili:{ + skillAnimation:true, + audio:3, + unique:true, + trigger:{player:'phaseBegin'}, + forced:true, + filter:function(event,player){ + return !player.hasSkill('paiyi')&&player.storage.quanji&&player.storage.quanji.length>=3; + }, + content:function(){ + "step 0" + player.chooseDrawRecover(2,true,function(event,player){ + if(player.hp==1&&player.isDamaged()) return 'recover_hp'; + return 'draw_card'; + }); + "step 1" + player.loseMaxHp(); + player.addSkill('paiyi'); + player.awakenSkill('zili'); + } + }, + paiyi:{ + enable:'phaseUse', + usable:1, + audio:2, + filterTarget:true, + filter:function(event,player){ + return player.storage.quanji.length>0; + }, + content:function(){ + "step 0" + player.chooseCardButton(player.storage.quanji,true); + "step 1" + var card=result.links[0]; + card.discard(); + player.$throw(card); + player.storage.quanji.remove(card); + if(!player.storage.quanji.length){ + player.unmarkSkill('quanji'); + } + else{ + player.markSkill('quanji'); + } + player.syncStorage('quanji'); + "step 2" + target.draw(2); + "step 3" + if(target.countCards('h')>player.countCards('h')){ + target.damage(); + } + }, + ai:{ + order:1, + result:{ + target:function(player,target){ + if(player!=target) return 0; + if(player.countCards('h')+2<=player.hp+player.storage.quanji.length) return 1; + return 0; + } + } + } + }, + xianzhou:{ + skillAnimation:true, + audio:2, + unique:true, + enable:'phaseUse', + filter:function(event,player){ + return !player.storage.xianzhou&&player.countCards('e')>0; + }, + init:function(player){ + player.storage.xianzhou=false; + }, + filterTarget:function(card,player,target){ + return player!=target; + }, + mark:true, + content:function(){ + "step 0" + player.awakenSkill('xianzhou'); + var cards=player.getCards('e'); + target.gain(cards,player); + event.num=cards.length; + player.$give(cards,target); + player.storage.xianzhou=true; + game.delay(); + "step 1" + target.chooseTarget([1,event.num],'令'+get.translation(player)+'回复'+ + event.num+'点体力,或对攻击范围内的'+event.num+'名角色造成一点伤害',function(card,player,target2){ + return get.distance(_status.event.player,target2,'attack')<=1; + }).set('ai',function(target2){ + var target=_status.event.player; + var player=_status.event.getParent().player; + if(get.attitude(target,player)>0){ + if(player.hp+event.num<=player.maxHp||player.hp==1) return -1; + } + return get.damageEffect(target2,target,target); + }); + "step 2" + if(result.bool){ + target.line(result.targets,'green'); + event.targets=result.targets; + event.num2=0; + } + else{ + player.recover(event.num); + event.finish(); + } + "step 3" + if(event.num22&&get.attitude(players[i],player)>2){ + bool=false;break; + } + } + if(bool) return -10; + if(player.hp==1) return 1; + if(game.phaseNumber0){ + return '移动装备'; + } + } + else{ + if(att<=0){ + return '移动装备'; + } + } + return 'draw_card'; + }).set('source',trigger.player); + } + else{ + next=player.chooseControl('draw_card','cancel2',function(){ + return 'draw_card'; + }); + } + next.set('prompt',get.prompt('qieting',trigger.player)); + "step 1" + if(result.control=='移动装备'){ + player.logSkill('qieting',trigger.player); + player.choosePlayerCard(trigger.player,'e','将一张装备牌移至你的装备区').set('filterButton',function(button){ + return !_status.event.player.getEquip(button.link); + }); + } + else{ + if(result.control=='draw_card'){ + player.logSkill('qieting'); + player.draw(); + } + event.finish(); + } + "step 2" + if(result&&result.links&&result.links.length){ + game.delay(2); + trigger.player.$give(result.links[0],player); + player.equip(result.links[0]); + player.addExpose(0.2); + } + }, + }, + qieting2:{ + 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('qieting3'); + } + }, + qieting3:{}, + zhuikong:{ + audio:2, + trigger:{global:'phaseBegin'}, + check:function(event,player){ + if(get.attitude(player,event.player)<-2){ + var cards=player.getCards('h'); + if(cards.length>player.hp) return true; + for(var i=0;i9&&useful<7) return true; + } + } + return false; + }, + logTarget:'player', + filter:function(event,player){ + return player.hp0&&event.player.countCards('h')>0; + }, + content:function(){ + "step 0" + player.chooseToCompare(trigger.player); + "step 1" + if(result.bool){ + trigger.player.addTempSkill('zishou2'); + } + }, + }, + qiuyuan:{ + audio:2, + trigger:{target:'shaBefore'}, + direct:true, + priority:11, + content:function(){ + "step 0" + player.chooseTarget(get.prompt('qiuyuan'),function(card,player,target){ + return target!=player&&_status.event.getTrigger().player.canUse('sha',target,false); + }).set('ai',function(target){ + var trigger=_status.event.getTrigger(); + var player=_status.event.player; + return get.effect(target,trigger.card,trigger.player,player)+0.1; + }); + "step 1" + if(result.bool){ + var target=result.targets[0]; + player.logSkill('qiuyuan',target); + event.target=target; + target.chooseCard({name:'shan'},'交给'+get.translation(player)+ + '一张闪,或成为此杀的额外目标').set('ai',function(card){ + return get.attitude(target,_status.event.source)>=0?1:-1; + }).set('source',player); + game.delay(); + } + else{ + event.finish(); + } + "step 2" + if(result.bool){ + player.gain(result.cards,event.target); + event.target.$give(result.cards,player); + game.delay(); + } + else{ + trigger.targets.push(event.target); + game.log(event.target,'成为了额外目标'); + } + }, + ai:{ + expose:0.2, + effect:{ + target:function(card,player,target){ + if(card.name!='sha') return; + var players=game.filterPlayer(); + for(var i=0;i1){ + return 11-get.equipValue(card); + } + return 6-get.equipValue(card); + }, + content:function(){ + "step 0" + player.addTempSkill('gongji2'); + "step 1" + if(get.type(cards[0])=='equip'){ + player.chooseTarget('是否弃置一名角色的一张牌?',function(card,player,target){ + return player!=target&&target.countCards('he')>0; + }).set('ai',function(target){ + var player=_status.event.player; + if(get.attitude(player,target)<0){ + return Math.max(0.5,get.effect(target,{name:'sha'},player,player)); + } + return 0; + }); + } + else{ + event.finish(); + } + "step 2" + if(result.bool){ + player.line(result.targets,'green'); + event.target=result.targets[0]; + player.discardPlayerCard(event.target,'he',true).ai=get.buttonValue; + } + }, + ai:{ + order:9, + result:{ + player:1 + } + } + }, + gongji2:{ + mod:{ + attackFrom:function(){ + return -Infinity; + }, + }, + }, + zhuiyi:{ + audio:2, + trigger:{player:'dieBegin'}, + direct:true, + content:function(){ + "step 0" + player.chooseTarget(get.prompt('zhuiyi'),function(card,player,target){ + return player!=target&&_status.event.source!=target; + }).set('ai',function(target){ + var num=get.attitude(_status.event.player,target); + if(num>0){ + if(target.hp==1){ + num+=2; + } + if(target.hpplayers[i].countCards('h')) return true; + } + return false; + }, + selectTarget:2, + content:function(){ + 'step 0' + var gainner,giver; + if(targets[0].countCards('h')0) return -1; + var players=game.filterPlayer(); + for(var i=0;i=0&&num20||player.countCards('he',{type:'equip'})>0; + }, + check:function(card){return 8-get.value(card)}, + selectTarget:2, + multitarget:true, + discard:false, + targetprompt:['得到牌','出杀目标'], + prepare:'give', + filterTarget:function(card,player,target){ + if(ui.selected.targets.length==0){ + return player!=target; + } + else{ + return lib.filter.filterTarget({name:'sha'},ui.selected.targets[0],target); + } + }, + content:function(){ + "step 0" + targets[0].gain(cards,player); + "step 1" + targets[0].chooseControl('draw_card','出杀',function(){ + var player=_status.event.player; + var target=_status.event.target; + if(get.effect(_status.event.target,{name:'sha'},player,player)>0){ + return 1; + } + return 0; + }).set('target',targets[1]).set('prompt','对'+get.translation(targets[1])+'使用一张杀,或摸一张牌'); + "step 2" + if(result.control=='draw_card'){ + targets[0].draw(); + } + else{ + targets[0].useCard({name:'sha'},targets[1]); + } + }, + ai:{ + result:{ + player:function(player){ + var players=game.filterPlayer(); + for(var i=0;i1&&get.attitude(players[i],player)>1){ + return 1; + } + } + return 0; + }, + target:function(player,target){ + if(ui.selected.targets.length){ + return -0.1; + } + return 1; + } + }, + order:8.5, + expose:0.2 + } + }, + xinxuanhuo:{ + audio:2, + trigger:{player:'phaseDrawBegin'}, + direct:true, + content:function(){ + "step 0" + player.chooseTarget(get.prompt('xinxuanhuo'),function(card,player,target){ + return player!=target; + }).set('ai',function(target){ + var att=get.attitude(_status.event.player,target); + if(att>0){ + if(target.countCards('h')1&&check<2) return 0; + return get.unuseful(card)+9; + }, + ai2:function(target){ + var att=get.attitude(_status.event.player,target); + if(ui.selected.cards.length==1&&ui.selected.cards[0].name=='du') return 1-att; + return att-2; + }, + prompt:'将'+get.cnNumber(event.num)+'张手牌交给一名其他角色', + }).set('check',check); + "step 2" + if(result.bool){ + result.targets[0].gain(result.cards,event.player); + event.player.$give(result.cards.length,result.targets[0]); + player.line(result.targets,'green'); + } + }, + ai:{ + 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(get.tag(card,'recover')&&player.hp>=player.maxHp-1) return [0,0]; + } + } + } + }, + zhenlie:{ + audio:2, + filter:function(event,player){ + return event.player!=player&&event.card&&(event.card.name=='sha'||get.type(event.card)=='trick'); + }, + logTarget:'player', + check:function(event,player){ + if(get.attitude(player,event.player)>0){ + return false; + } + if(get.tag(event.card,'respondSha')){ + if(player.countCards('h',{name:'sha'})==0){ + return true; + } + } + else if(get.tag(event.card,'respondShan')){ + if(player.countCards('h',{name:'shan'})==0){ + return true; + } + } + else if(get.tag(event.card,'damage')){ + if(player.countCards('h')<2) return true; + } + else if(event.card.name=='shunshou'&&player.hp>2){ + return true; + } + return false; + }, + priority:10, + trigger:{target:'useCardToBefore'}, + content:function(){ + "step 0" + player.loseHp(); + "step 1" + trigger.cancel(); + "step 2" + if(trigger.player.countCards('he')){ + player.discardPlayerCard(trigger.player,'he',true); + } + }, + ai:{ + expose:0.3 + } + }, + wuyan:{ + audio:2, + trigger:{target:'useCardToBefore',player:'useCardToBefore'}, + forced:true, + priority:15, + check:function(event,player){ + return get.effect(event.target,event.card,event.player,player)<0; + }, + filter:function(event,player){ + if(!event.target) return false; + if(event.player==player&&event.target==player) return false; + return (get.type(event.card)=='trick'); + }, + content:function(){ + trigger.cancel(); + }, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(get.type(card)=='trick'&&player!=target) return 'zeroplayertarget'; + }, + player:function(card,player,target,current){ + if(get.type(card)=='trick'&&player!=target) return 'zeroplayertarget'; + } + } + } + }, + xinwuyan:{ + audio:2, + trigger:{source:'damageBefore',player:'damageBefore'}, + forced:true, + priority:15, + check:function(event,player){ + if(player==event.player) return true; + return false; + }, + filter:function(event,player){ + return get.type(event.card,'trick')=='trick'; + }, + content:function(){ + trigger.cancel(); + }, + ai:{ + notrick:true, + notricksource:true, + effect:{ + target:function(card,player,target,current){ + if(get.type(card)=='trick'&&get.tag(card,'damage')){ + return 'zeroplayertarget'; + } + }, + player:function(card,player,target,current){ + if(get.type(card)=='trick'&&get.tag(card,'damage')){ + return 'zeroplayertarget'; + } + } + } + } + }, + xinjujian:{ + trigger:{player:'phaseEnd'}, + direct:true, + audio:2, + filter:function(event,player){ + return player.countCards('he')>player.countCards('he',{type:'basic'}); + }, + content:function(){ + "step 0" + player.chooseCardTarget({ + filterTarget:function(card,player,target){ + return player!=target; + }, + filterCard:function(card,player){ + return get.type(card)!='basic'&&lib.filter.cardDiscardable(card,player); + }, + ai1:function(card){ + if(get.tag(card,'damage')&&get.type(card)=='trick'){ + return 20; + } + return 9-get.value(card); + }, + ai2:function(target){ + var att=get.attitude(_status.event.player,target); + if(att>0){ + if(target.isTurnedOver()) att+=3; + if(target.hp==1) att+=3; + } + return att; + }, + position:'he', + prompt:get.prompt('xinjujian') + }); + "step 1" + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('xinjujian',target); + player.discard(result.cards); + if(target.hp==target.maxHp&& + !target.isTurnedOver()&& + !target.isLinked()){ + target.draw(2); + event.finish(); + } + else{ + var controls=['draw_card']; + if(target.hp2){ + return 'recover_hp'; + } + else if(target.hp==2&&target.maxHp>2&&target.countCards('h')>1){ + return 'recover_hp'; + } + else{ + return 'draw_card'; + } + } + } + } + else{ + event.finish(); + } + "step 2" + event.control=result.control; + switch(event.control){ + case 'recover_hp':event.target.recover();event.finish();break; + case 'draw_card':event.target.draw(2);event.finish();break; + case 'reset_character':if(event.target.isTurnedOver()) event.target.turnOver();break; + } + "step 3" + if(event.control=='reset_character'&&event.target.isLinked()){ + event.target.link(); + } + }, + ai:{ + expose:0.2, + threaten:1.4 + } + }, + jujian:{ + enable:'phaseUse', + usable:1, + audio:2, + filterCard:true, + position:'he', + selectCard:[1,3], + check:function(card){ + var player=get.owner(card); + if(get.type(card)=='trick') return 10; + if(player.countCards('h')-player.hp-ui.selected.cards.length>0){ + return 8-get.value(card); + } + return 4-get.value(card); + }, + filterTarget:function(card,player,target){ + return player!=target; + }, + content:function(){ + target.draw(cards.length); + if(cards.length==3){ + if(get.type(cards[0],'trick')==get.type(cards[1],'trick')&& + get.type(cards[0],'trick')==get.type(cards[2],'trick')){ + player.recover(); + } + } + }, + ai:{ + expose:0.2, + order:1, + result:{ + target:1 + } + } + }, + yizhong:{ + trigger:{target:'shaBefore'}, + forced:true, + audio:2, + filter:function(event,player){ + if(player.getEquip(2)) return false; + return (event.card.name=='sha'&&get.color(event.card)=='black') + }, + content:function(){ + trigger.cancel(); + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(player==target&&get.subtype(card)=='equip2'){ + if(get.equipValue(card)<=8) return 0; + } + if(target.getEquip(2)) return; + if(card.name=='sha'&&get.color(card)=='black') return 'zerotarget'; + } + } + } + }, + jueqing:{ + trigger:{source:'damageBefore'}, + forced:true, + audio:2, + priority:16, + check:function(){return false;}, + content:function(){ + trigger.cancel(); + var ex=0; + if(trigger.card&&trigger.card.name=='sha'){ + if(player.hasSkill('jiu')) ex++; + if(player.hasSkill('luoyi2')) ex++; + if(player.hasSkill('reluoyi2')) ex++; + } + trigger.player.loseHp(trigger.num+ex); + }, + ai:{ + jueqing:true + } + }, + shangshi:{ + audio:2, + trigger:{player:['loseEnd','changeHp']}, + forced:true, + filter:function(event,player){ + return (player.countCards('h')0) return 0; + if(player.getEquip('zhuge')&&player.countCards('h','sha')>1) return 0; + if(!player.countCards('h','sha')) return 0; + var targets=[]; + var target; + var players=game.filterPlayer(); + for(var i=0;inum){ + target=targets[i]; + num=num2; + } + } + if(num<=0) return 0; + var e2=target.getEquip(2); + if(e2){ + if(e2.name=='tengjia'){ + if(!player.countCards('h',{name:'sha',nature:'fire'})&&!player.getEquip('zhuque')) return 0; + } + if(e2.name=='renwang'){ + if(!player.countCards('h',{name:'sha',color:'red'})) return 0; + } + if(e2.name=='baiyin') return 0; + } + if(player.getEquip('guanshi')&&player.countCards('he')>2) return 1; + return target.countCards('h')>3?0:1; + } + if(player==_status.event.dying||player.isTurnedOver()) return 3; + } + }, + effect:{ + target:function(card,player,target){ + if(card.name=='guiyoujie') return [0,0.5]; + if(target.isTurnedOver()){ + if(get.tag(card,'damage')){ + if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; + if(target.hp==1) return; + return [1,target.countCards('h')/2]; + } + } + } + } + }, + }, + jiushi2:{ + trigger:{player:'damageBegin'}, + silent:true, + filter:function(event,player){ + return player.classList.contains('turnedover'); + }, + content:function(){ + player.storage.jiushi=true; + } + }, + jiushi3:{ + audio:2, + trigger:{player:'damageAfter'}, + check:function(event,player){ + return player.isTurnedOver(); + }, + filter:function(event,player){ + if(player.storage.jiushi){ + return true; + } + return false; + }, + content:function(){ + player.storage.jiushi=false; + player.turnOver(); + } + }, + zongshi:{ + mod:{ + maxHandcard:function(player,num){ + var list=['wei','shu','wu','qun']; + var num2=game.countPlayer(function(current){ + if(list.contains(current.group)){ + list.remove(current.group); + return true; + } + }); + return num+num2; + } + } + }, + zishou:{ + audio:2, + trigger:{player:'phaseDrawBegin'}, + check:function(event,player){ + return player.countCards('h')<=player.maxHp||player.skipList.contains('phaseUse'); + }, + content:function(){ + var list=['wei','shu','wu','qun']; + var num=game.countPlayer(function(current){ + if(list.contains(current.group)){ + list.remove(current.group); + return true; + } + }); + trigger.num+=num; + player.addTempSkill('zishou2'); - }, - ai:{ - threaten:1.5 - } - }, - zishou2:{ - mod:{ - playerEnabled:function(card,player,target){ - if(player!=target) return false; - } - } - }, - yaowu:{ - trigger:{player:'damageEnd'}, - priority:1, - audio:2, - filter:function(event){ - if(event.card&&(event.card.name=='sha')){ - if(get.color(event.card)=='red') return true; - } - return false; - }, - forced:true, - check:function(){ - return false; - }, - content:function(){ - trigger.source.chooseDrawRecover(true); - }, - ai:{ - effect:{ - target:function(card,player,target,current){ - if(card.name=='sha'&&(get.color(card)=='red')){ - return [1,-2]; - } - } - } - } - }, - olddanshou:{ - trigger:{source:'damageEnd'}, - priority:9, - check:function(event,player){ - return get.attitude(player,event.player)<=0; - }, - content:function(){ - "step 0" - player.draw(); - "step 1" - var evt=_status.event.getParent('phase'); - if(evt){ - game.resetSkills(); - _status.event=evt; - _status.event.finish(); - _status.event.untrigger(true); - } - }, - ai:{ - jueqing:true - } - }, - danshou:{ - enable:'phaseUse', - filterCard:true, - position:'he', - audio:2, - filter:function(event,player){ - var num=player.getStat().skill.danshou; - if(num){ - num++; - } - else{ - num=1; - } - return player.countCards('he')>=num; - }, - check:function(card){ - if(ui.selected.cards.length>=2){ - return 4-get.value(card); - } - return 6-get.value(card); - }, - selectCard:function(card){ - var num=_status.event.player.getStat().skill.danshou; - if(num) return num+1; - return 1; - }, - filterTarget:function(card,player,target){ - if(player==target) return false; - var num=player.getStat().skill.danshou; - if(num){ - num++; - } - else{ - num=1; - } - if(num<=2&&!target.countCards('he')) return false; - return get.distance(player,target,'attack')<=1; - }, - content:function(){ - 'step 0' - var num=player.getStat().skill.danshou; - switch(num){ - case 1:player.discardPlayerCard(target,true);break; - case 2:target.chooseCard('选择一张牌交给'+get.translation(player),'he',true);break; - case 3:target.damage();break; - default:game.asyncDraw([player,target],2); - } - if(num!=2) event.finish(); - 'step 1' - if(result.cards){ - player.gain(result.cards,target); - target.$give(result.cards.length,player); - } - }, - ai:{ - order:8.6, - result:{ - target:function(player,target){ - var num=player.getStat().skill.danshou; - if(num){ - num++; - } - else{ - num=1; - } - if(num>3) return 0; - if(num==3) return get.damageEffect(target,player,target); - return -1; - } - } - } - }, - qice:{ - enable:'phaseUse', - usable:1, - audio:2, - filter:function(event,player){ - return player.countCards('h')>0 - }, - chooseButton:{ - dialog:function(){ - var list=['taoyuan','wugu','juedou','huogong','jiedao','tiesuo','guohe','shunshou','wuzhong','wanjian','nanman']; - for(var i=0;i0){ - if(players[i].hp<2){ - lose--; - recover+=0.5; - } - lose--; - recover++; - } - else if(get.attitude(player,players[i])<0){ - if(players[i].hp<2){ - lose++; - recover-=0.5; - } - lose++; - recover--; - } - } - else{ - if(get.attitude(player,players[i])>0){ - lose--; - } - else if(get.attitude(player,players[i])<0){ - lose++; - } - } - } - } - if(lose>recover&&lose>0) return (button.link[2]=='nanman')?1:-1; - if(lose0) return (button.link[2]=='taoyuan')?1:-1; - return (button.link[2]=='wuzhong')?1:-1; - }, - backup:function(links,player){ - return { - filterCard:true, - selectCard:-1, - audio:2, - popname:true, - viewAs:{name:links[0][2]}, - } - }, - prompt:function(links,player){ - return '将全部手牌当作'+get.translation(links[0][2])+'使用'; - } - }, - ai:{ - order:1, - result:{ - player:function(player){ - var num=0; - var cards=player.getCards('h'); - if(cards.length>=3&&player.hp>=3) return 0; - for(var i=0;i1 - } - else{ - for(var i=0;i3&&player.countCards('h','sha')>1){ - return 'jiangchi_less'; - } - if(player.countCards('h','sha')>2){ - return 'jiangchi_less'; - } - if(player.hp-player.countCards('h')>1){ - return 'jiangchi_more'; - } - return 'cancel2'; - }); - "step 1" - if(result.control=='jiangchi_less'){ - trigger.num--; - player.addTempSkill('jiangchi2','phaseUseEnd'); - player.logSkill('jiangchi'); - } - else if(result.control=='jiangchi_more'){ - trigger.num++; - player.addTempSkill('jiangchi3','phaseUseEnd'); - player.logSkill('jiangchi'); - } - } - }, - jiangchi2:{ - mod:{ - targetInRange:function(card,player,target,now){ - if(card.name=='sha') return true; - }, - cardUsable:function(card,player,num){ - if(card.name=='sha') return num+1; - } - } - }, - jiangchi3:{ - mod:{ - cardEnabled:function(card){if(card.name=='sha') return false} - } - }, - xinzhan:{ - audio:2, - enable:'phaseUse', - filter:function(event,player){ - return true;//player.countCards('h')>player.maxHp; - }, - usable:1, - content:function(){ - "step 0" - var cards=get.cards(3); - event.cards=cards; - var next=player.chooseCardButton(cards,'选择获得的红桃牌',[1,Infinity]).set('filterButton',function(button){ - return get.suit(button.link)=='heart'; - }); - "step 1" - if(result.bool){ - player.gain(result.links); - player.$draw(result.links); - game.delay(2); - } - for(var i=event.cards.length-1;i>=0;i--){ - if(!result.bool||!result.links.contains(event.cards[i])){ - ui.cardPile.insertBefore(event.cards[i],ui.cardPile.firstChild); - } - } - }, - ai:{ - order:11, - result:{ - player:1 - } - } - }, - huilei:{ - audio:2, - trigger:{player:'dieBegin'}, - forced:true, - filter:function(event){ - return event.source!=undefined; - }, - content:function(){ - trigger.source.discard(trigger.source.getCards('he')); - }, - ai:{ - threaten:0.7 - } - }, - xinenyuan:{ - audio:true, - trigger:{player:'damageEnd'}, - check:function(event,player){ - var att=get.attitude(player,event.source); - var num=event.source.countCards('h'); - if(att<=0) return true; - if(num>2) return true; - if(num) return att<4; - return false; - }, - filter:function(event,player){ - return event.source&&event.source!=player&&event.num>0&&event.source.isAlive(); - }, - content:function(){ - "step 0" - event.num=trigger.num; - "step 1" - trigger.source.chooseCard('交给'+get.translation(player)+'一张手牌或流失一点体力').set('ai',function(card){ - if(get.attitude(_status.event.player,_status.event.getParent().player)>0){ - return 11-get.value(card); - } - else{ - return 7-get.value(card); - } - }); - "step 2" - if(result.bool){ - player.gain(result.cards[0],trigger.source); - trigger.source.$give(1,player); - } - else{ - trigger.source.loseHp(); - } - if(event.num>1){ - event.num--; - event.goto(1); - } - }, - ai:{ - maixie_defend:true, - effect:{ - target:function(card,player,target){ - if(player.hasSkillTag('jueqing',false,target)) return [1,-1.5]; - if(!target.hasFriend()) return; - if(get.tag(card,'damage')) return [1,0,0,-0.7]; - } - } - }, - group:'xinenyuan2' - }, - xinenyuan2:{ - trigger:{player:'gainEnd'}, - filter:function(event,player){ - return event.source&&event.source.isAlive()&&event.source!=player&&event.cards.length>=2; - }, - logTarget:'source', - check:function(event,player){ - return get.attitude(player,event.source)>0; - }, - content:function(){ - trigger.source.draw(); - } - }, - enyuan:{ - locked:true, - group:['enyuan1','enyuan2'], - ai:{ - maixie_defend:true, - effect:{ - target:function(card,player,target){ - if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; - if(!target.hasFriend()) return; - if(get.tag(card,'damage')) return [1,0,0,-1]; - } - } - } - }, - enyuan1:{ - trigger:{player:'recoverEnd'}, - forced:true, - audio:2, - filter:function(event,player){ - return event.source&&event.source!=player; - }, - content:function(){ - trigger.source.draw(); - } - }, - enyuan2:{ - trigger:{player:'damageEnd'}, - forced:true, - audio:true, - filter:function(event,player){ - return event.source&&event.source!=player; - }, - content:function(){ - "step 0" - trigger.source.chooseCard('交出一张红桃牌或流失一点体力',function(card){ - return get.suit(card)=='heart'; - }).set('ai',function(card){ - if(get.attitude(_status.event.player,_status.event.getParent().player)>0){ - return 11-get.value(card); - } - else{ - return 7-get.value(card); - } - }); - "step 1" - if(result.bool){ - player.gain(result.cards[0],trigger.source); - trigger.source.$give(1,player); - } - else{ - trigger.source.loseHp(); - } - } - }, - xuanhuo:{ - audio:2, - enable:'phaseUse', - usable:1, - discard:false, - prepare:'give2', - filter:function(event,player){ - return player.countCards('he',{suit:'heart'}); - }, - filterCard:function(card){ - return get.suit(card)=='heart'; - }, - filterTarget:function(card,player,target){ - if(game.countPlayer()==2) return false; - return player!=target; - }, - check:function(card){ - var player=get.owner(card); - var players=game.filterPlayer(); - for(var i=0;i3) break; - } - if(i==players.length) return -1; - return 5-get.value(card); - }, - content:function(){ - "step 0" - target.gain(cards,player); - // game.delay(); - "step 1" - player.gainPlayerCard(target,'he',true); - "step 2" - var source=target; - event.card=result.links[0]; - player.chooseTarget('选择一个目标送出'+get.translation(event.card),function(card,player,target){ - return target!=_status.event.source&&target!=player; - }).set('ai',function(target){ - return get.attitude(_status.event.player,target); - }).set('source',target); - "step 3" - if(result.bool){ - result.targets[0].gain(card,player); - player.$give(1,result.targets[0]); - game.delay(); - } - }, - ai:{ - result:{ - target:-0.5, - }, - basic:{ - order:9, - } - } - }, - ganlu:{ - enable:'phaseUse', - usable:1, - audio:2, - selectTarget:2, - 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 Math.abs(ui.selected.targets[0].countCards('e')-target.countCards('e'))<=player.maxHp-player.hp; - }, - multitarget:true, - content:function(){ - "step 0" - event.cards=[targets[0].getCards('e'),targets[1].getCards('e')]; - targets[0].lose(event.cards[0],ui.special); - targets[1].lose(event.cards[1],ui.special); - if(event.cards[0].length) targets[0].$give(event.cards[0],targets[1]); - if(event.cards[1].length) targets[1].$give(event.cards[1],targets[0]); - "step 1" - 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;i0; - }, - direct:true, - content:function(){ - "step 0" - var check; - if(trigger.player.isUnderControl(true,player)){ - check=player.hasCard(function(card){ - return get.type(card)!='basic'; - }); - } - else{ - check=(get.attitude(player,trigger.player)>0); - } - player.choosePlayerCard(trigger.player,get.prompt('buyi',trigger.player),'h').set('ai',function(button){ - if(!_status.event.check) return 0; - if(_status.event.target.isUnderControl(true,_status.event.player)){ - if(get.type(button.link)!='basic'){ - return 10-get.value(button.link); - } - return 0; - } - else{ - return Math.random(); - } - }).set('check',check).set('filterButton',function(button){ - if(_status.event.player==_status.event.target){ - return lib.filter.cardDiscardable(button.link,_status.event.player); - } - return true; - }); - "step 1" - if(result.bool){ - player.logSkill('buyi',trigger.player); - event.card=result.links[0]; - player.showCards([event.card],get.translation(player)+'展示的手牌'); - } - else{ - event.finish(); - } - "step 2" - if(get.type(event.card)!='basic'){ - trigger.player.recover(); - trigger.player.discard(event.card); - } - }, - ai:{ - threaten:1.4 - } - }, - pojun:{ - audio:2, - trigger:{source:'damageEnd'}, - check:function(event,player){ - if(event.player.isTurnedOver()) return get.attitude(player,event.player)>0; - if(event.player.hp<3){ - return get.attitude(player,event.player)<0; - } - return get.attitude(player,event.player)>0; - }, - filter:function(event){ - if(event._notrigger.contains(event.player)) return false; - return event.card&&event.card.name=='sha'&&event.player.isAlive(); - }, - logTarget:'player', - content:function(){ - "step 0" - trigger.player.draw(Math.min(5,trigger.player.hp)); - "step 1" - trigger.player.turnOver(); - } - }, - jingce:{ - trigger:{player:'phaseUseEnd'}, - frequent:true, - filter:function(event,player){ - return player.countUsed()>=player.hp; - }, - content:function(){ - player.draw(2); - }, - audio:2, - init:function(player){player.storage.jingce=true}, - intro:{ - content:function(storage,player){ - if(_status.currentPhase==player) return '已使用'+player.countUsed()+'张牌'; - } - } - }, - chengxiang:{ - trigger:{player:'damageEnd'}, - direct:true, - audio:2, - content:function(){ - "step 0" - event.cards=get.cards(4); - event.videoId=lib.status.videoId++; - game.broadcastAll(function(player,id,cards){ - var str; - if(player==game.me&&!_status.auto){ - str='称象:选择任意张点数不大于13的牌'; - } - else{ - str='称象'; - } - var dialog=ui.create.dialog(str,cards); - dialog.videoId=id; - },player,event.videoId,event.cards); - event.time=get.utc(); - game.addVideo('showCards',player,['称象',get.cardsInfo(event.cards)]); - game.addVideo('delay',null,2); - "step 1" - var next=player.chooseButton([0,4]); - next.set('dialog',event.videoId); - next.set('filterButton',function(button){ - var num=0 - for(var i=0;i0){ - game.delay(0,time); - } - "step 3" - game.broadcastAll('closeDialog',event.videoId); - var cards2=event.cards2; - player.gain(cards2,'log'); - player.$draw(cards2); - game.delay(); - }, - ai:{ - maixie:true, - maixie_hp:true, - effect:{ - target:function(card,player,target){ - if(get.tag(card,'damage')){ - if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; - if(!target.hasFriend()) return; - if(target.hp>=4) return [1,2]; - if(target.hp==3) return [1,1.5]; - if(target.hp==2) return [1,0.5]; - } - } - } - } - }, - renxin:{ - trigger:{global:'damageBefore'}, - audio:3, - priority:6, - filter:function(event,player){ - return event.player!=player&&event.player.hp==1&&player.countCards('he',{type:'equip'})>0; - }, - direct:true, - content:function(){ - "step 0" - var next=player.chooseToDiscard(get.prompt('renxin',trigger.player),{type:'equip'},'he'); - next.logSkill=['renxin',trigger.player]; - next.set('ai',function(card){ - var player=_status.event.player; - if(get.attitude(player,_status.event.getTrigger().player)>3){ - return 11-get.value(card); - } - return -1; - }); - "step 1" - if(result.bool){ - player.turnOver(); - } - else{ - event.finish(); - } - "step 2" - trigger.cancel(); - }, - ai:{ - expose:0.5 - } - }, - yuce:{ - audio:2, - trigger:{player:'damageAfter'}, - direct:true, - filter:function(event,player){ - return player.countCards('h')>0&&player.isDamaged(); - }, - content:function(){ - "step 0" - var next=player.chooseToDiscard(get.prompt('yuce')); - next.logSkill='yuce'; - next.set('ai',function(card){ - return 7-get.value(card); - }); - "step 1" - if(result.bool){ - var type=get.type(result.cards[0],'trick'); - if(trigger.source){ - trigger.source.chooseToDiscard('弃置一张'+get.translation(type)+'牌或令'+get.translation(player)+'回复一点体力',function(card){ - return get.type(card,'trick')==_status.event.type; - }).set('ai',function(card){ - if(get.recoverEffect(_status.event.getParent().player,_status.event.player,_status.event.player)<0){ - return 7-get.value(card); - } - return 0; - }).set('type',type); - } - else{ - event.recover=true; - } - } - else{ - event.finish(); - } - "step 2" - if(event.recover){ - player.recover(); - } - else if(result.bool){ - player.draw(); - } - else{ - player.recover(); - } - }, - ai:{ - effect:{ - target:function(card,player,target){ - if(get.tag(card,'damage'&&target.countCards('h'))){ - return 0.8 - } - } - } - } - }, - xiansi:{ - audio:2, - trigger:{player:'phaseBegin'}, - direct:true, - init:function(player){ - player.storage.xiansi=[]; - }, - content:function(){ - "step 0" - player.chooseTarget(get.prompt('xiansi'),[1,2],function(card,player,target){ - return target.countCards('he')>0; - },function(target){ - return -get.attitude(_status.event.player,target); - }); - "step 1" - if(result.bool){ - player.logSkill('xiansi',result.targets); - event.targets=result.targets; - } - else{ - event.finish(); - } - "step 2" - if(event.targets.length){ - var target=event.targets.shift(); - event.current=target; - player.choosePlayerCard(target,true); - } - else{ - event.finish(); - } - "step 3" - if(result.bool){ - player.storage.xiansi=player.storage.xiansi.concat(result.links); - player.markSkill('xiansi'); - player.syncStorage('xiansi'); - event.current.lose(result.links,ui.special); - event.current.$give(result.links,player); - event.goto(2); - } - }, - intro:{ - content:'cards', - onunmark:function(storage,player){ - if(storage&&storage.length){ - for(var i=0;i1&&player.canUse('sha',players[i],true,true); - } - } - return false; - }, - direct:true, - delay:0, - content:function(){ - "step 0" - var targets=game.filterPlayer(function(current){ - if(current.storage.xiansi){ - return current.storage.xiansi.length>1&&player.canUse('sha',current,true,true); - } - return false; - }); - if(targets.length==1){ - event.target=targets[0]; - event.goto(2); - } - else if(targets.length>0){ - player.chooseTarget(true,'选择【陷嗣】的目标',function(card,player,target){ - return _status.event.list.contains(target); - }).set('list',targets).set('ai',function(target){ - var player=_status.event.player; - return get.effect(target,{name:'sha'},player,player); - }); - } - else{ - event.finish(); - } - "step 1" - if(result.bool&&result.targets.length){ - event.target=result.targets[0]; - } - else{ - event.finish(); - } - "step 2" - if(event.target){ - if(event.target.storage.xiansi.length==2){ - event.directresult=event.target.storage.xiansi.slice(0); - } - else{ - player.chooseCardButton('移去两张“逆”',2,event.target.storage.xiansi,true); - } - } - else{ - event.finish(); - } - "step 3" - if(event.directresult||result.bool){ - player.logSkill('xiansi2'); - var links=event.directresult||result.links; - for(var i=0;i0&&target.hp>1){ - return 0; - } - if(get.attitude(player,target)<0&&!player.hasSkillTag('damageBonus')){ - if(card.name=='sha') return; - var sha=false; - player._shibei_tmp=true; - var num=player.countCards('h',function(card){ - if(card.name=='sha'){ - if(sha){ - return false; - } - else{ - sha=true; - } - } - return get.tag(card,'damage')&&player.canUse(card,target)&&get.effect(target,card,player,player)>0; - }); - delete player._shibei_tmp; - if(player.hasSkillTag('damage')){ - num++; - } - if(num<2){ - var enemies=player.getEnemies(); - if(enemies.length==1&&enemies[0]==target&&player.needsToDiscard()){ - return; - } - return 0; - } - } - } - } - } - } - } - }, - shibei_old:{ - audio:2, - trigger:{player:'damageAfter'}, - forced:true, - content:function(){ - "step 0" - player.judge(function(card){ - if(player.hasSkill('shibei2')){ - if(get.color(card)=='black') return -1; - } - else{ - if(get.color(card)=='red') return 1; - } - return 0; - }) - "step 1" - if(result.judge>0){ - player.recover(); - } - else if(result.judge<0){ - player.loseHp(); - } - if(!player.hasSkill('shibei2')){ - player.addTempSkill('shibei2'); - } - } - }, - shibei2:{}, - jianying:{ - audio:2, - trigger:{player:'useCard'}, - frequent:true, - filter:function(event,player){ - if(!event.cards||event.cards.length!=1) return false; - if(_status.currentPhase!=player) return false; - if(!player.storage.jianying) return false; - return get.suit(player.storage.jianying)==get.suit(event.cards[0])|| - player.storage.jianying.number==event.cards[0].number; - }, - content:function(){ - player.draw(); - }, - intro:{ - content:'card' - }, - group:['jianying2','jianying3'] - }, - jianying3:{ - trigger:{player:'useCard'}, - priority:-1, - silent:true, - filter:function(event,player){ - if(!event.cards||event.cards.length!=1) return false; - if(_status.currentPhase!=player) return false; - return true; - }, - content:function(){ - player.storage.jianying=trigger.cards[0]; - } - }, - jianying2:{ - trigger:{player:'phaseAfter'}, - silent:true, - content:function(){ - player.storage.jianying=null; - } - }, - zzhenggong:{ - trigger:{player:'damageEnd'}, - direct:true, - filter:function(event,player){ - return event.source&&event.source.countCards('e')>0; - }, - content:function(){ - "step 0" - var att=get.attitude(player,trigger.source); - player.choosePlayerCard('e',get.prompt('zzhenggong'),trigger.source).ai=function(button){ - if(att<=0){ - return get.equipValue(button.link); - } - return 0; - } - "step 1" - if(result.bool){ - player.logSkill('zzhenggong',trigger.source); - player.equip(result.links[0]); - trigger.source.$give(result.links[0],player); - } - }, - ai:{ - maixie_defend:true, - } - }, - zquanji:{ - trigger:{global:'phaseBegin'}, - priority:15, - check:function(event,player){ - var att=get.attitude(player,event.player); - if(att<0){ - var nh1=event.player.countCards('h'); - var nh2=player.countCards('h'); - return nh1<=2&&nh2>nh1+1; - } - if(att>0&&event.player.hasJudge('lebu')&&event.player.countCards('h')>event.player.hp+1) return true; - return false; - }, - logTarget:'player', - filter:function(event,player){ - return event.player!=player&&event.player.countCards('h')>0&&player.countCards('h')>0; - }, - content:function(){ - "step 0" - player.chooseToCompare(trigger.player); - "step 1" - if(result.bool){ - trigger.player.skip('phaseJudge'); - trigger.untrigger(); - } - }, - ai:{ - expose:0.2 - } - }, - zbaijiang:{ - skillAnimation:true, - trigger:{player:'phaseBegin'}, - forced:true, - unique:true, - derivation:['zyexin','zzili'], - init:function(player){ - player.storage.zbaijiang=false; - }, - // intro:{ - // content:'limited' - // }, - filter:function(event,player){ - return !player.storage.zbaijiang&&player.countCards('e')>=2; - }, - content:function(){ - player.storage.zbaijiang=true; - player.removeSkill('zzhenggong'); - player.removeSkill('zquanji'); - player.removeSkill('zbaijiang'); - player.addSkill('zyexin'); - player.addSkill('zzili'); - player.gainMaxHp(); - } - }, - zyexin:{ - trigger:{player:'damageEnd',source:'damageEnd'}, - frequent:true, - init:function(player){ - player.storage.zyexin=[]; - }, - intro:{ - content:'cards' - }, - content:function(){ - var card=get.cards()[0]; - player.storage.zyexin.push(card); - player.$draw(card); - player.markSkill('zyexin'); - game.addVideo('storage',player,['zyexin',get.cardsInfo(player.storage.zyexin),'cards']); - }, - group:'zyexin2' - }, - zyexin2:{ - enable:'phaseUse', - usable:1, - lose:false, - delay:false, - selectCard:[1,Infinity], - filterCard:true, - filter:function(event,player){ - return player.storage.zyexin.length>0; - }, - prompt:'用任意数量的手牌与等量的“权”交换', - content:function(){ - "step 0" - player.lose(cards,ui.special)._triggered=null; - player.storage.zyexin=player.storage.zyexin.concat(cards); - player.chooseCardButton(player.storage.zyexin,'选择'+cards.length+'张牌作为手牌',cards.length,true).ai=function(button){ - return get.value(button.link); - } - if(player==game.me&&_status.auto){ - game.delay(); - } - "step 1" - player.gain(result.links)._triggered=null; - for(var i=0;i=4&&!player.storage.zzili; - }, - forced:true, - content:function(){ - player.storage.zzili=true; - player.loseMaxHp(); - player.addSkill('zpaiyi'); - player.removeSkill('zzili'); - }, - // intro:{ - // content:'limited' - // } - }, - zpaiyi:{ - trigger:{player:'phaseEnd'}, - filter:function(event,player){ - for(var i=0;i=num; + }, + check:function(card){ + if(ui.selected.cards.length>=2){ + return 4-get.value(card); + } + return 6-get.value(card); + }, + selectCard:function(card){ + var num=_status.event.player.getStat().skill.danshou; + if(num) return num+1; + return 1; + }, + filterTarget:function(card,player,target){ + if(player==target) return false; + var num=player.getStat().skill.danshou; + if(num){ + num++; + } + else{ + num=1; + } + if(num<=2&&!target.countCards('he')) return false; + return get.distance(player,target,'attack')<=1; + }, + content:function(){ + 'step 0' + var num=player.getStat().skill.danshou; + switch(num){ + case 1:player.discardPlayerCard(target,true);break; + case 2:target.chooseCard('选择一张牌交给'+get.translation(player),'he',true);break; + case 3:target.damage();break; + default:game.asyncDraw([player,target],2); + } + if(num!=2) event.finish(); + 'step 1' + if(result.cards){ + player.gain(result.cards,target); + target.$give(result.cards.length,player); + } + }, + ai:{ + order:8.6, + result:{ + target:function(player,target){ + var num=player.getStat().skill.danshou; + if(num){ + num++; + } + else{ + num=1; + } + if(num>3) return 0; + if(num==3) return get.damageEffect(target,player,target); + return -1; + } + } + } + }, + qice:{ + enable:'phaseUse', + usable:1, + audio:2, + filter:function(event,player){ + return player.countCards('h')>0 + }, + chooseButton:{ + dialog:function(){ + var list=['taoyuan','wugu','juedou','huogong','jiedao','tiesuo','guohe','shunshou','wuzhong','wanjian','nanman']; + for(var i=0;i0){ + if(players[i].hp<2){ + lose--; + recover+=0.5; + } + lose--; + recover++; + } + else if(get.attitude(player,players[i])<0){ + if(players[i].hp<2){ + lose++; + recover-=0.5; + } + lose++; + recover--; + } + } + else{ + if(get.attitude(player,players[i])>0){ + lose--; + } + else if(get.attitude(player,players[i])<0){ + lose++; + } + } + } + } + if(lose>recover&&lose>0) return (button.link[2]=='nanman')?1:-1; + if(lose0) return (button.link[2]=='taoyuan')?1:-1; + return (button.link[2]=='wuzhong')?1:-1; + }, + backup:function(links,player){ + return { + filterCard:true, + selectCard:-1, + audio:2, + popname:true, + viewAs:{name:links[0][2]}, + } + }, + prompt:function(links,player){ + return '将全部手牌当作'+get.translation(links[0][2])+'使用'; + } + }, + ai:{ + order:1, + result:{ + player:function(player){ + var num=0; + var cards=player.getCards('h'); + if(cards.length>=3&&player.hp>=3) return 0; + for(var i=0;i1 + } + else{ + for(var i=0;i3&&player.countCards('h','sha')>1){ + return 'jiangchi_less'; + } + if(player.countCards('h','sha')>2){ + return 'jiangchi_less'; + } + if(player.hp-player.countCards('h')>1){ + return 'jiangchi_more'; + } + return 'cancel2'; + }); + "step 1" + if(result.control=='jiangchi_less'){ + trigger.num--; + player.addTempSkill('jiangchi2','phaseUseEnd'); + player.logSkill('jiangchi'); + } + else if(result.control=='jiangchi_more'){ + trigger.num++; + player.addTempSkill('jiangchi3','phaseUseEnd'); + player.logSkill('jiangchi'); + } + } + }, + jiangchi2:{ + mod:{ + targetInRange:function(card,player,target,now){ + if(card.name=='sha') return true; + }, + cardUsable:function(card,player,num){ + if(card.name=='sha') return num+1; + } + } + }, + jiangchi3:{ + mod:{ + cardEnabled:function(card){if(card.name=='sha') return false} + } + }, + xinzhan:{ + audio:2, + enable:'phaseUse', + filter:function(event,player){ + return true;//player.countCards('h')>player.maxHp; + }, + usable:1, + content:function(){ + "step 0" + var cards=get.cards(3); + event.cards=cards; + var next=player.chooseCardButton(cards,'选择获得的红桃牌',[1,Infinity]).set('filterButton',function(button){ + return get.suit(button.link)=='heart'; + }); + "step 1" + if(result.bool){ + player.gain(result.links); + player.$draw(result.links); + game.delay(2); + } + for(var i=event.cards.length-1;i>=0;i--){ + if(!result.bool||!result.links.contains(event.cards[i])){ + ui.cardPile.insertBefore(event.cards[i],ui.cardPile.firstChild); + } + } + }, + ai:{ + order:11, + result:{ + player:1 + } + } + }, + huilei:{ + audio:2, + trigger:{player:'dieBegin'}, + forced:true, + filter:function(event){ + return event.source!=undefined; + }, + content:function(){ + trigger.source.discard(trigger.source.getCards('he')); + }, + ai:{ + threaten:0.7 + } + }, + xinenyuan:{ + audio:true, + trigger:{player:'damageEnd'}, + check:function(event,player){ + var att=get.attitude(player,event.source); + var num=event.source.countCards('h'); + if(att<=0) return true; + if(num>2) return true; + if(num) return att<4; + return false; + }, + filter:function(event,player){ + return event.source&&event.source!=player&&event.num>0&&event.source.isAlive(); + }, + content:function(){ + "step 0" + event.num=trigger.num; + "step 1" + trigger.source.chooseCard('交给'+get.translation(player)+'一张手牌或流失一点体力').set('ai',function(card){ + if(get.attitude(_status.event.player,_status.event.getParent().player)>0){ + return 11-get.value(card); + } + else{ + return 7-get.value(card); + } + }); + "step 2" + if(result.bool){ + player.gain(result.cards[0],trigger.source); + trigger.source.$give(1,player); + } + else{ + trigger.source.loseHp(); + } + if(event.num>1){ + event.num--; + event.goto(1); + } + }, + ai:{ + maixie_defend:true, + effect:{ + target:function(card,player,target){ + if(player.hasSkillTag('jueqing',false,target)) return [1,-1.5]; + if(!target.hasFriend()) return; + if(get.tag(card,'damage')) return [1,0,0,-0.7]; + } + } + }, + group:'xinenyuan2' + }, + xinenyuan2:{ + trigger:{player:'gainEnd'}, + filter:function(event,player){ + return event.source&&event.source.isAlive()&&event.source!=player&&event.cards.length>=2; + }, + logTarget:'source', + check:function(event,player){ + return get.attitude(player,event.source)>0; + }, + content:function(){ + trigger.source.draw(); + } + }, + enyuan:{ + locked:true, + group:['enyuan1','enyuan2'], + ai:{ + maixie_defend:true, + effect:{ + target:function(card,player,target){ + if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; + if(!target.hasFriend()) return; + if(get.tag(card,'damage')) return [1,0,0,-1]; + } + } + } + }, + enyuan1:{ + trigger:{player:'recoverEnd'}, + forced:true, + audio:2, + filter:function(event,player){ + return event.source&&event.source!=player; + }, + content:function(){ + trigger.source.draw(); + } + }, + enyuan2:{ + trigger:{player:'damageEnd'}, + forced:true, + audio:true, + filter:function(event,player){ + return event.source&&event.source!=player; + }, + content:function(){ + "step 0" + trigger.source.chooseCard('交出一张红桃牌或流失一点体力',function(card){ + return get.suit(card)=='heart'; + }).set('ai',function(card){ + if(get.attitude(_status.event.player,_status.event.getParent().player)>0){ + return 11-get.value(card); + } + else{ + return 7-get.value(card); + } + }); + "step 1" + if(result.bool){ + player.gain(result.cards[0],trigger.source); + trigger.source.$give(1,player); + } + else{ + trigger.source.loseHp(); + } + } + }, + xuanhuo:{ + audio:2, + enable:'phaseUse', + usable:1, + discard:false, + prepare:'give2', + filter:function(event,player){ + return player.countCards('he',{suit:'heart'}); + }, + filterCard:function(card){ + return get.suit(card)=='heart'; + }, + filterTarget:function(card,player,target){ + if(game.countPlayer()==2) return false; + return player!=target; + }, + check:function(card){ + var player=get.owner(card); + var players=game.filterPlayer(); + for(var i=0;i3) break; + } + if(i==players.length) return -1; + return 5-get.value(card); + }, + content:function(){ + "step 0" + target.gain(cards,player); + // game.delay(); + "step 1" + player.gainPlayerCard(target,'he',true); + "step 2" + var source=target; + event.card=result.links[0]; + player.chooseTarget('选择一个目标送出'+get.translation(event.card),function(card,player,target){ + return target!=_status.event.source&&target!=player; + }).set('ai',function(target){ + return get.attitude(_status.event.player,target); + }).set('source',target); + "step 3" + if(result.bool){ + result.targets[0].gain(card,player); + player.$give(1,result.targets[0]); + game.delay(); + } + }, + ai:{ + result:{ + target:-0.5, + }, + basic:{ + order:9, + } + } + }, + ganlu:{ + enable:'phaseUse', + usable:1, + audio:2, + selectTarget:2, + 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 Math.abs(ui.selected.targets[0].countCards('e')-target.countCards('e'))<=player.maxHp-player.hp; + }, + multitarget:true, + content:function(){ + "step 0" + event.cards=[targets[0].getCards('e'),targets[1].getCards('e')]; + targets[0].lose(event.cards[0],ui.special); + targets[1].lose(event.cards[1],ui.special); + if(event.cards[0].length) targets[0].$give(event.cards[0],targets[1]); + if(event.cards[1].length) targets[1].$give(event.cards[1],targets[0]); + "step 1" + 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;i0; + }, + direct:true, + content:function(){ + "step 0" + var check; + if(trigger.player.isUnderControl(true,player)){ + check=player.hasCard(function(card){ + return get.type(card)!='basic'; + }); + } + else{ + check=(get.attitude(player,trigger.player)>0); + } + player.choosePlayerCard(trigger.player,get.prompt('buyi',trigger.player),'h').set('ai',function(button){ + if(!_status.event.check) return 0; + if(_status.event.target.isUnderControl(true,_status.event.player)){ + if(get.type(button.link)!='basic'){ + return 10-get.value(button.link); + } + return 0; + } + else{ + return Math.random(); + } + }).set('check',check).set('filterButton',function(button){ + if(_status.event.player==_status.event.target){ + return lib.filter.cardDiscardable(button.link,_status.event.player); + } + return true; + }); + "step 1" + if(result.bool){ + player.logSkill('buyi',trigger.player); + event.card=result.links[0]; + player.showCards([event.card],get.translation(player)+'展示的手牌'); + } + else{ + event.finish(); + } + "step 2" + if(get.type(event.card)!='basic'){ + trigger.player.recover(); + trigger.player.discard(event.card); + } + }, + ai:{ + threaten:1.4 + } + }, + pojun:{ + audio:2, + trigger:{source:'damageEnd'}, + check:function(event,player){ + if(event.player.isTurnedOver()) return get.attitude(player,event.player)>0; + if(event.player.hp<3){ + return get.attitude(player,event.player)<0; + } + return get.attitude(player,event.player)>0; + }, + filter:function(event){ + if(event._notrigger.contains(event.player)) return false; + return event.card&&event.card.name=='sha'&&event.player.isAlive(); + }, + logTarget:'player', + content:function(){ + "step 0" + trigger.player.draw(Math.min(5,trigger.player.hp)); + "step 1" + trigger.player.turnOver(); + } + }, + jingce:{ + trigger:{player:'phaseUseEnd'}, + frequent:true, + filter:function(event,player){ + return player.countUsed()>=player.hp; + }, + content:function(){ + player.draw(2); + }, + audio:2, + init:function(player){player.storage.jingce=true}, + intro:{ + content:function(storage,player){ + if(_status.currentPhase==player) return '已使用'+player.countUsed()+'张牌'; + } + } + }, + chengxiang:{ + trigger:{player:'damageEnd'}, + direct:true, + audio:2, + content:function(){ + "step 0" + event.cards=get.cards(4); + event.videoId=lib.status.videoId++; + game.broadcastAll(function(player,id,cards){ + var str; + if(player==game.me&&!_status.auto){ + str='称象:选择任意张点数不大于13的牌'; + } + else{ + str='称象'; + } + var dialog=ui.create.dialog(str,cards); + dialog.videoId=id; + },player,event.videoId,event.cards); + event.time=get.utc(); + game.addVideo('showCards',player,['称象',get.cardsInfo(event.cards)]); + game.addVideo('delay',null,2); + "step 1" + var next=player.chooseButton([0,4]); + next.set('dialog',event.videoId); + next.set('filterButton',function(button){ + var num=0 + for(var i=0;i0){ + game.delay(0,time); + } + "step 3" + game.broadcastAll('closeDialog',event.videoId); + var cards2=event.cards2; + player.gain(cards2,'log'); + player.$draw(cards2); + game.delay(); + }, + ai:{ + maixie:true, + maixie_hp:true, + effect:{ + target:function(card,player,target){ + if(get.tag(card,'damage')){ + if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; + if(!target.hasFriend()) return; + if(target.hp>=4) return [1,2]; + if(target.hp==3) return [1,1.5]; + if(target.hp==2) return [1,0.5]; + } + } + } + } + }, + renxin:{ + trigger:{global:'damageBefore'}, + audio:3, + priority:6, + filter:function(event,player){ + return event.player!=player&&event.player.hp==1&&player.countCards('he',{type:'equip'})>0; + }, + direct:true, + content:function(){ + "step 0" + var next=player.chooseToDiscard(get.prompt('renxin',trigger.player),{type:'equip'},'he'); + next.logSkill=['renxin',trigger.player]; + next.set('ai',function(card){ + var player=_status.event.player; + if(get.attitude(player,_status.event.getTrigger().player)>3){ + return 11-get.value(card); + } + return -1; + }); + "step 1" + if(result.bool){ + player.turnOver(); + } + else{ + event.finish(); + } + "step 2" + trigger.cancel(); + }, + ai:{ + expose:0.5 + } + }, + yuce:{ + audio:2, + trigger:{player:'damageAfter'}, + direct:true, + filter:function(event,player){ + return player.countCards('h')>0&&player.isDamaged(); + }, + content:function(){ + "step 0" + var next=player.chooseToDiscard(get.prompt('yuce')); + next.logSkill='yuce'; + next.set('ai',function(card){ + return 7-get.value(card); + }); + "step 1" + if(result.bool){ + var type=get.type(result.cards[0],'trick'); + if(trigger.source){ + trigger.source.chooseToDiscard('弃置一张'+get.translation(type)+'牌或令'+get.translation(player)+'回复一点体力',function(card){ + return get.type(card,'trick')==_status.event.type; + }).set('ai',function(card){ + if(get.recoverEffect(_status.event.getParent().player,_status.event.player,_status.event.player)<0){ + return 7-get.value(card); + } + return 0; + }).set('type',type); + } + else{ + event.recover=true; + } + } + else{ + event.finish(); + } + "step 2" + if(event.recover){ + player.recover(); + } + else if(result.bool){ + player.draw(); + } + else{ + player.recover(); + } + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(get.tag(card,'damage'&&target.countCards('h'))){ + return 0.8 + } + } + } + } + }, + xiansi:{ + audio:2, + trigger:{player:'phaseBegin'}, + direct:true, + init:function(player){ + player.storage.xiansi=[]; + }, + content:function(){ + "step 0" + player.chooseTarget(get.prompt('xiansi'),[1,2],function(card,player,target){ + return target.countCards('he')>0; + },function(target){ + return -get.attitude(_status.event.player,target); + }); + "step 1" + if(result.bool){ + player.logSkill('xiansi',result.targets); + event.targets=result.targets; + } + else{ + event.finish(); + } + "step 2" + if(event.targets.length){ + var target=event.targets.shift(); + event.current=target; + player.choosePlayerCard(target,true); + } + else{ + event.finish(); + } + "step 3" + if(result.bool){ + player.storage.xiansi=player.storage.xiansi.concat(result.links); + player.markSkill('xiansi'); + player.syncStorage('xiansi'); + event.current.lose(result.links,ui.special); + event.current.$give(result.links,player); + event.goto(2); + } + }, + intro:{ + content:'cards', + onunmark:function(storage,player){ + if(storage&&storage.length){ + for(var i=0;i1&&player.canUse('sha',players[i],true,true); + } + } + return false; + }, + direct:true, + delay:0, + content:function(){ + "step 0" + var targets=game.filterPlayer(function(current){ + if(current.storage.xiansi){ + return current.storage.xiansi.length>1&&player.canUse('sha',current,true,true); + } + return false; + }); + if(targets.length==1){ + event.target=targets[0]; + event.goto(2); + } + else if(targets.length>0){ + player.chooseTarget(true,'选择【陷嗣】的目标',function(card,player,target){ + return _status.event.list.contains(target); + }).set('list',targets).set('ai',function(target){ + var player=_status.event.player; + return get.effect(target,{name:'sha'},player,player); + }); + } + else{ + event.finish(); + } + "step 1" + if(result.bool&&result.targets.length){ + event.target=result.targets[0]; + } + else{ + event.finish(); + } + "step 2" + if(event.target){ + if(event.target.storage.xiansi.length==2){ + event.directresult=event.target.storage.xiansi.slice(0); + } + else{ + player.chooseCardButton('移去两张“逆”',2,event.target.storage.xiansi,true); + } + } + else{ + event.finish(); + } + "step 3" + if(event.directresult||result.bool){ + player.logSkill('xiansi2'); + var links=event.directresult||result.links; + for(var i=0;i0&&target.hp>1){ + return 0; + } + if(get.attitude(player,target)<0&&!player.hasSkillTag('damageBonus')){ + if(card.name=='sha') return; + var sha=false; + player._shibei_tmp=true; + var num=player.countCards('h',function(card){ + if(card.name=='sha'){ + if(sha){ + return false; + } + else{ + sha=true; + } + } + return get.tag(card,'damage')&&player.canUse(card,target)&&get.effect(target,card,player,player)>0; + }); + delete player._shibei_tmp; + if(player.hasSkillTag('damage')){ + num++; + } + if(num<2){ + var enemies=player.getEnemies(); + if(enemies.length==1&&enemies[0]==target&&player.needsToDiscard()){ + return; + } + return 0; + } + } + } + } + } + } + } + }, + shibei_old:{ + audio:2, + trigger:{player:'damageAfter'}, + forced:true, + content:function(){ + "step 0" + player.judge(function(card){ + if(player.hasSkill('shibei2')){ + if(get.color(card)=='black') return -1; + } + else{ + if(get.color(card)=='red') return 1; + } + return 0; + }) + "step 1" + if(result.judge>0){ + player.recover(); + } + else if(result.judge<0){ + player.loseHp(); + } + if(!player.hasSkill('shibei2')){ + player.addTempSkill('shibei2'); + } + } + }, + shibei2:{}, + jianying:{ + audio:2, + trigger:{player:'useCard'}, + frequent:true, + filter:function(event,player){ + if(!event.cards||event.cards.length!=1) return false; + if(_status.currentPhase!=player) return false; + if(!player.storage.jianying) return false; + return get.suit(player.storage.jianying)==get.suit(event.cards[0])|| + player.storage.jianying.number==event.cards[0].number; + }, + content:function(){ + player.draw(); + }, + intro:{ + content:'card' + }, + group:['jianying2','jianying3'] + }, + jianying3:{ + trigger:{player:'useCard'}, + priority:-1, + silent:true, + filter:function(event,player){ + if(!event.cards||event.cards.length!=1) return false; + if(_status.currentPhase!=player) return false; + return true; + }, + content:function(){ + player.storage.jianying=trigger.cards[0]; + } + }, + jianying2:{ + trigger:{player:'phaseAfter'}, + silent:true, + content:function(){ + player.storage.jianying=null; + } + }, + zzhenggong:{ + trigger:{player:'damageEnd'}, + direct:true, + filter:function(event,player){ + return event.source&&event.source.countCards('e')>0; + }, + content:function(){ + "step 0" + var att=get.attitude(player,trigger.source); + player.choosePlayerCard('e',get.prompt('zzhenggong'),trigger.source).ai=function(button){ + if(att<=0){ + return get.equipValue(button.link); + } + return 0; + } + "step 1" + if(result.bool){ + player.logSkill('zzhenggong',trigger.source); + player.equip(result.links[0]); + trigger.source.$give(result.links[0],player); + } + }, + ai:{ + maixie_defend:true, + } + }, + zquanji:{ + trigger:{global:'phaseBegin'}, + priority:15, + check:function(event,player){ + var att=get.attitude(player,event.player); + if(att<0){ + var nh1=event.player.countCards('h'); + var nh2=player.countCards('h'); + return nh1<=2&&nh2>nh1+1; + } + if(att>0&&event.player.hasJudge('lebu')&&event.player.countCards('h')>event.player.hp+1) return true; + return false; + }, + logTarget:'player', + filter:function(event,player){ + return event.player!=player&&event.player.countCards('h')>0&&player.countCards('h')>0; + }, + content:function(){ + "step 0" + player.chooseToCompare(trigger.player); + "step 1" + if(result.bool){ + trigger.player.skip('phaseJudge'); + trigger.untrigger(); + } + }, + ai:{ + expose:0.2 + } + }, + zbaijiang:{ + skillAnimation:true, + trigger:{player:'phaseBegin'}, + forced:true, + unique:true, + derivation:['zyexin','zzili'], + init:function(player){ + player.storage.zbaijiang=false; + }, + // intro:{ + // content:'limited' + // }, + filter:function(event,player){ + return !player.storage.zbaijiang&&player.countCards('e')>=2; + }, + content:function(){ + player.storage.zbaijiang=true; + player.removeSkill('zzhenggong'); + player.removeSkill('zquanji'); + player.removeSkill('zbaijiang'); + player.addSkill('zyexin'); + player.addSkill('zzili'); + player.gainMaxHp(); + } + }, + zyexin:{ + trigger:{player:'damageEnd',source:'damageEnd'}, + frequent:true, + init:function(player){ + player.storage.zyexin=[]; + }, + intro:{ + content:'cards' + }, + content:function(){ + var card=get.cards()[0]; + player.storage.zyexin.push(card); + player.$draw(card); + player.markSkill('zyexin'); + game.addVideo('storage',player,['zyexin',get.cardsInfo(player.storage.zyexin),'cards']); + }, + group:'zyexin2' + }, + zyexin2:{ + enable:'phaseUse', + usable:1, + lose:false, + delay:false, + selectCard:[1,Infinity], + filterCard:true, + filter:function(event,player){ + return player.storage.zyexin.length>0; + }, + prompt:'用任意数量的手牌与等量的“权”交换', + content:function(){ + "step 0" + player.lose(cards,ui.special)._triggered=null; + player.storage.zyexin=player.storage.zyexin.concat(cards); + player.chooseCardButton(player.storage.zyexin,'选择'+cards.length+'张牌作为手牌',cards.length,true).ai=function(button){ + return get.value(button.link); + } + if(player==game.me&&_status.auto){ + game.delay(); + } + "step 1" + player.gain(result.links)._triggered=null; + for(var i=0;i=4&&!player.storage.zzili; + }, + forced:true, + content:function(){ + player.storage.zzili=true; + player.loseMaxHp(); + player.addSkill('zpaiyi'); + player.removeSkill('zzili'); + }, + // intro:{ + // content:'limited' + // } + }, + zpaiyi:{ + trigger:{player:'phaseEnd'}, + filter:function(event,player){ + for(var i=0;iplayers[1].hp&&players[0]!=player; - }, - check:function(event,player){ - var players=game.players.slice(0); + }, + check:function(event,player){ + var players=game.players.slice(0); players.sort(function(a,b){ return b.hp-a.hp; }); return get.damageEffect(players[0],player,player,'fire')>0; - }, - prompt:function(){ - var players=game.players.slice(0); + }, + prompt:function(){ + var players=game.players.slice(0); players.sort(function(a,b){ return b.hp-a.hp; }); - return '枭首:是否对'+get.translation(players[0])+'造成一点火焰伤害?'; - }, - content:function(){ - var players=game.players.slice(0); + return '枭首:是否对'+get.translation(players[0])+'造成一点火焰伤害?'; + }, + content:function(){ + var players=game.players.slice(0); players.sort(function(a,b){ return b.hp-a.hp; }); - if(players[0].hp>players[1].hp&&players[0]!=player){ - players[0].damage('fire'); - player.line(players[0],'fire'); - } - }, - ai:{ - expose:0.2 - } - }, - guiji:{ - trigger:{player:'phaseJudgeBegin'}, - forced:true, - content:function(){ - player.discard(player.getCards('j').randomGet()); - }, - filter:function(event ,player){ - return player.countCards('j')>0; - }, - ai:{ - effect:{ - target:function(card,player,target,current){ - if(get.type(card)=='delay'&&target.countCards('j')==0) return 0.1; - } - } - } - }, - qiangzheng:{ - audio:2, - trigger:{player:'phaseEnd'}, - direct:true, - forced:true, - filter:function(event,player){ - for(var i=0;i0; - }).ai=function(target){ - return -get.attitude(player,target); - }; - "step 1" - if(result.targets&&result.targets.length){ - player.logSkill('qiangzheng',result.targets); - player.gain(result.targets[0].getCards('h').randomGet(),result.targets[0]); - result.targets[0].$give(1,player); - game.delay(); - } - }, - ai:{ - threaten:1.7 - } - }, - suoling:{ - trigger:{player:'phaseEnd'}, - forced:true, - filter:function(event,player){ - if(player.isLinked()) return true; - for(var i=0;iplayers[1].hp&&players[0]!=player){ + players[0].damage('fire'); + player.line(players[0],'fire'); + } + }, + ai:{ + expose:0.2 + } + }, + guiji:{ + trigger:{player:'phaseJudgeBegin'}, + forced:true, + content:function(){ + player.discard(player.getCards('j').randomGet()); + }, + filter:function(event ,player){ + return player.countCards('j')>0; + }, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(get.type(card)=='delay'&&target.countCards('j')==0) return 0.1; + } + } + } + }, + qiangzheng:{ + audio:2, + trigger:{player:'phaseEnd'}, + direct:true, + forced:true, + filter:function(event,player){ + for(var i=0;i0; + }).ai=function(target){ + return -get.attitude(player,target); + }; + "step 1" + if(result.targets&&result.targets.length){ + player.logSkill('qiangzheng',result.targets); + player.gain(result.targets[0].getCards('h').randomGet(),result.targets[0]); + result.targets[0].$give(1,player); + game.delay(); + } + }, + ai:{ + threaten:1.7 + } + }, + suoling:{ + trigger:{player:'phaseEnd'}, + forced:true, + filter:function(event,player){ + if(player.isLinked()) return true; + for(var i=0;i1000) dn=1000; - if(dn>0){ - var p=0; - for(var i in data){ - for(var j in data[i]){ - var n=Math.round(dn*getn(i,j)/num); - while(n--){ - if(i=='huosha'){ - lib.card.list.push([j,rand(),'sha','fire']); - } + var num=0; + for(var i in data){ + for(var j in data[i]){ + num+=getn(i,j); + } + } + var dn=num*(lib.card.list.length-data.total)/(data.total-num); + if(dn>1000) dn=1000; + if(dn>0){ + var p=0; + for(var i in data){ + for(var j in data[i]){ + var n=Math.round(dn*getn(i,j)/num); + while(n--){ + if(i=='huosha'){ + lib.card.list.push([j,rand(),'sha','fire']); + } else if(i=='leisha'){ lib.card.list.push([j,rand(),'sha','thunder']); } - else{ - lib.card.list.push([j,rand(),i]); - } - } - } - } - } + else{ + lib.card.list.push([j,rand(),i]); + } + } + } + } + } }, }; }); diff --git a/extension/coin/extension.js b/extension/coin/extension.js index b25c9a28b..e7d840d01 100644 --- a/extension/coin/extension.js +++ b/extension/coin/extension.js @@ -8,7 +8,7 @@ game.import('play',function(lib,game,ui,get,ai,_status){ } }, arenaReady:function(){ - if(_status.video||_status.connectMode) return; + if(_status.video||_status.connectMode) return; if(lib.config.mode!='chess'||get.config('chess_mode')!='leader'){ var str; if(lib.config.coin_display_playpackconfig=='text'){ @@ -106,7 +106,7 @@ game.import('play',function(lib,game,ui,get,ai,_status){ return uiintro; },220,400); } - }, + }, game:{ changeCoin:function(num){ if(typeof num=='number'&&ui.coin){ @@ -299,21 +299,21 @@ game.import('play',function(lib,game,ui,get,ai,_status){ //****************************************************** // Yet Another Particle Engine var cos = Math.cos, - sin = Math.sin, - sqrt = Math.sqrt, - abs = Math.abs, - atan2 = Math.atan2, - log = Math.log, - random = Math.random, - PI = Math.PI, - sqr = function(v){return v*v;}, - particles = [], - drawScale = 1, - emitters = [], - forces = [], - collidedMass = 0, - maxParticles = 100, - emissionRate = 1, + sin = Math.sin, + sqrt = Math.sqrt, + abs = Math.abs, + atan2 = Math.atan2, + log = Math.log, + random = Math.random, + PI = Math.PI, + sqr = function(v){return v*v;}, + particles = [], + drawScale = 1, + emitters = [], + forces = [], + collidedMass = 0, + maxParticles = 100, + emissionRate = 1, minParticleSize = 2; //------------------------------------------------------- @@ -325,65 +325,65 @@ game.import('play',function(lib,game,ui,get,ai,_status){ } Vector.prototype = { add : function(vector) { - this.x += vector.x; - this.y += vector.y; - this.z += vector.z; - return this; + this.x += vector.x; + this.y += vector.y; + this.z += vector.z; + return this; }, subtract : function(vector) { - this.x -= vector.x; - this.y -= vector.y; - this.z -= vector.z; - return this; + this.x -= vector.x; + this.y -= vector.y; + this.z -= vector.z; + return this; }, multiply : function(another) { - this.x /= another.x; - this.y /= another.y; - this.z /= another.z; - return this; + this.x /= another.x; + this.y /= another.y; + this.z /= another.z; + return this; }, divide : function(another) { - this.x /= another.x; - this.y /= another.y; - this.z /= another.z; - return this; + this.x /= another.x; + this.y /= another.y; + this.z /= another.z; + return this; }, scale : function(factor) { - this.x *= factor; - this.y *= factor; - this.z *= factor; - return this; + this.x *= factor; + this.y *= factor; + this.z *= factor; + return this; }, magnitude : function () { - return sqrt(sqr(this.x + this.y)); + return sqrt(sqr(this.x + this.y)); }, distance : function (another) { - return abs(sqrt(sqr(this.x - another.x) + sqr(this.y - another.y))); + return abs(sqrt(sqr(this.x - another.x) + sqr(this.y - another.y))); }, angle : function (angle, magnitude) { - if(angle && magnitude) - return Vector.fromAngle(angle, magnitude); - return atan2(this.y, this.x); + if(angle && magnitude) + return Vector.fromAngle(angle, magnitude); + return atan2(this.y, this.x); }, clone : function() { - return new Vector(this.x, this.y, this.z); + return new Vector(this.x, this.y, this.z); }, equals : function(another) { - return this.x === another.x&& + return this.x === another.x&& this.y === another.y&& this.z === another.z; }, random : function(r) { - this.x += (random() * r * 2) - r; - this.y += (random() * r * 2) - r; - return this; + this.x += (random() * r * 2) - r; + this.y += (random() * r * 2) - r; + return this; } }; Vector.fromAngle = function (angle, magnitude) { return new Vector( - magnitude * cos(angle), - magnitude * sin(angle), - magnitude * sin(angle)); + magnitude * cos(angle), + magnitude * sin(angle), + magnitude * sin(angle)); }; //****************************************************** @@ -404,41 +404,41 @@ game.import('play',function(lib,game,ui,get,ai,_status){ var totalAccelerationY = 0; for (var i = 0; i < fields.length; i++) { - var field = fields[i]; - var vectorX = field.pos.x - this.pos.x; - var vectorY = field.pos.y - this.pos.y; - var distance = this.pos.distance(field.pos); - if(distance < 1) field.grow(this); - if(distance < 100) this.doubleSize = true; - var force = G(this.forceBetween(field, distance)); - totalAccelerationX += vectorX * force; - totalAccelerationY += vectorY * force; + var field = fields[i]; + var vectorX = field.pos.x - this.pos.x; + var vectorY = field.pos.y - this.pos.y; + var distance = this.pos.distance(field.pos); + if(distance < 1) field.grow(this); + if(distance < 100) this.doubleSize = true; + var force = G(this.forceBetween(field, distance)); + totalAccelerationX += vectorX * force; + totalAccelerationY += vectorY * force; } this.ac = new Vector(totalAccelerationX, totalAccelerationY); totalAccelerationX = 0; totalAccelerationY = 0; for (var i = 0; i < particles.length; i++) { - var field = particles[i]; - if(field === this || !field.alive) continue; - var vectorX = field.pos.x - this.pos.x; - var vectorY = field.pos.y - this.pos.y; - var distance = this.pos.distance(field.pos); - if(distance < 1) { - if(this.mass >= field.mass) { - var massRatio = this.mass / field.mass; - if(particles.length <= maxParticles && this.mass>40) { - this.alive = false; - this.nova = true; - collidedMass += this.mass; - } else this.grow(field); - } else this.alive = false; - } - if(this.alive) { - var force = G(this.forceBetween(field, distance)); - totalAccelerationX += vectorX * G(force); - totalAccelerationY += vectorY * G(force); - } + var field = particles[i]; + if(field === this || !field.alive) continue; + var vectorX = field.pos.x - this.pos.x; + var vectorY = field.pos.y - this.pos.y; + var distance = this.pos.distance(field.pos); + if(distance < 1) { + if(this.mass >= field.mass) { + var massRatio = this.mass / field.mass; + if(particles.length <= maxParticles && this.mass>40) { + this.alive = false; + this.nova = true; + collidedMass += this.mass; + } else this.grow(field); + } else this.alive = false; + } + if(this.alive) { + var force = G(this.forceBetween(field, distance)); + totalAccelerationX += vectorX * G(force); + totalAccelerationY += vectorY * G(force); + } } var travelDist = this.pos.distance(this.lastPos ? this.lastPos : this.pos); @@ -471,12 +471,12 @@ game.import('play',function(lib,game,ui,get,ai,_status){ var remainingMass = this.mass; var num = 0; while(remainingMass > 0) { - var np = new Particle(this.pos.clone().random(this.mass), new Vector(0,0)); - np.mass = 1 + Math.random() * (remainingMass - 1); - if(num>=maxParts-1) np.mass = remainingMass; - np.mass = np.mass < minMass ? minMass : np.mass; - remainingMass -= np.mass; - num++; + var np = new Particle(this.pos.clone().random(this.mass), new Vector(0,0)); + np.mass = 1 + Math.random() * (remainingMass - 1); + if(num>=maxParts-1) np.mass = remainingMass; + np.mass = np.mass < minMass ? minMass : np.mass; + remainingMass -= np.mass; + num++; } this.nova = true; delete this.size; @@ -498,14 +498,14 @@ game.import('play',function(lib,game,ui,get,ai,_status){ } ParticleEmitter.prototype.emit = function() { var angle = this.vc.angle() + - this.ang - (Math.random() * this.ang * 2); + this.ang - (Math.random() * this.ang * 2); var magnitude = this.vc.magnitude(); var position = this.pos.clone(); - position.add( - new Vector( - ~~((Math.random() * 100) - 50) * drawScale, - ~~((Math.random() * 100) - 50) * drawScale - )); + position.add( + new Vector( + ~~((Math.random() * 100) - 50) * drawScale, + ~~((Math.random() * 100) - 50) * drawScale + )); var velocity = Vector.fromAngle(angle, magnitude); return new Particle(position,velocity); }; @@ -546,11 +546,11 @@ game.import('play',function(lib,game,ui,get,ai,_status){ }); var renderToCanvas = function (width, height, renderFunction) { - var buffer = document.createElement('canvas'); - buffer.width = width; - buffer.height = height; - renderFunction(buffer.getContext('2d')); - return buffer; + var buffer = document.createElement('canvas'); + buffer.width = width; + buffer.height = height; + renderFunction(buffer.getContext('2d')); + return buffer; }; maxParticles = 500; @@ -560,12 +560,12 @@ game.import('play',function(lib,game,ui,get,ai,_status){ emitters = [ //br new ParticleEmitter( - new Vector( - canvasWidth / 2 * drawScale + 400, - canvasHeight / 2 * drawScale - ), - Vector.fromAngle(2, 5), - 1 + new Vector( + canvasWidth / 2 * drawScale + 400, + canvasHeight / 2 * drawScale + ), + Vector.fromAngle(2, 5), + 1 ), // // bl // new ParticleEmitter( @@ -576,14 +576,14 @@ game.import('play',function(lib,game,ui,get,ai,_status){ // Vector.fromAngle(1.5, 1), // 1 // ), - // tl + // tl new ParticleEmitter( - new Vector( - canvasWidth / 2 * drawScale - 400, - canvasHeight / 2 * drawScale - ), - Vector.fromAngle(5, 5), - 1 + new Vector( + canvasWidth / 2 * drawScale - 400, + canvasHeight / 2 * drawScale + ), + Vector.fromAngle(5, 5), + 1 ), // // tr // new ParticleEmitter( @@ -597,8 +597,8 @@ game.import('play',function(lib,game,ui,get,ai,_status){ ]; forces = [ new Force( - new Vector((canvasWidth / 2 * drawScale) , - (canvasHeight / 2 * drawScale)), 1800) + new Vector((canvasWidth / 2 * drawScale) , + (canvasHeight / 2 * drawScale)), 1800) ]; var loop=function() { @@ -635,35 +635,35 @@ game.import('play',function(lib,game,ui,get,ai,_status){ var c2 = 'rgba(255,64,32,'; var addNewParticles=function() { var _emit = function() { - var ret = 0; - for (var i = 0; i < emitters.length; i++) { - for (var j = 0; j < emissionRate; j++) { - var p = emitters[i].emit(); - p.color = ( ctr % 10 === 0 )? + var ret = 0; + for (var i = 0; i < emitters.length; i++) { + for (var j = 0; j < emissionRate; j++) { + var p = emitters[i].emit(); + p.color = ( ctr % 10 === 0 )? ( Math.random() * 5 <= 1 ? c2 : rndc() ) - : rndc(); - p.mass = ~~(Math.random() * 5); - particles.push(p); - ret += p.mass; - ctr++; - } - } - return ret; + : rndc(); + p.mass = ~~(Math.random() * 5); + particles.push(p); + ret += p.mass; + ctr++; + } + } + return ret; }; if(collidedMass !== 0) { - while(collidedMass !== 0) { - collidedMass -= _emit(); - collidedMass = collidedMass<0 ? 0 :collidedMass; - } + while(collidedMass !== 0) { + collidedMass -= _emit(); + collidedMass = collidedMass<0 ? 0 :collidedMass; + } } if (particles.length > maxParticles) - return; + return; _emit(); } var CLIPOFFSCREEN = 1, - BUFFEROFFSCREEN = 2, - LOOPSCREEN = 3; + BUFFEROFFSCREEN = 2, + LOOPSCREEN = 3; var isPositionAliveAndAdjust=function(particle,check) { return true; @@ -693,77 +693,77 @@ game.import('play',function(lib,game,ui,get,ai,_status){ var plotParticles=function(boundsX, boundsY) { var currentParticles = []; for (var i = 0; i < particles.length; i++) { - var particle = particles[i]; - particle.reactToForces(forces); - if(!isPositionAliveAndAdjust(particle)) - continue; - particle.move(); - currentParticles.push(particle); + var particle = particles[i]; + particle.reactToForces(forces); + if(!isPositionAliveAndAdjust(particle)) + continue; + particle.move(); + currentParticles.push(particle); } } var offscreenCache = {}; var renderParticle=function(p) { - var position = p.pos; - if(!p.size) p.size = Math.floor(p.mass / 100); + var position = p.pos; + if(!p.size) p.size = Math.floor(p.mass / 100); - if(!p.opacity) p.opacity = 0.05; - if(p.velocity > 0) { - if(p.opacity<=0.18) - p.opacity += 0.04; - } - if(p.opacity>0.08) - p.opacity -= 0.02; + if(!p.opacity) p.opacity = 0.05; + if(p.velocity > 0) { + if(p.opacity<=0.18) + p.opacity += 0.04; + } + if(p.opacity>0.08) + p.opacity -= 0.02; - var actualSize = p.size / drawScale; - actualSize = actualSize < minParticleSize ? minParticleSize : actualSize; - if(p.mass>8) actualSize *= 2; - if(p.nova) { - actualSize *= 4; - p.nova = false; - } - if(p.doubleSize) { - p.doubleSize = false; - actualSize *= 2; - } - // if(p.supernova) { - // actualSize *= 6; - // opacity = 0.15; - // p.supernovaDur = p.supernovaDur - 1; - // if(p.supernovaDur === 0) - // p.supernova = false; - // } - var cacheKey = actualSize + '_' + p.opacity + '_' + p.color; - var cacheValue = offscreenCache[cacheKey]; - if(!cacheValue) { - cacheValue = renderToCanvas(actualSize * 32, actualSize * 32, function(ofsContext) { - var opacity = p.opacity; - var fills = [ - {size:actualSize/2, opacity:1}, - {size:actualSize, opacity:opacity}, - {size:actualSize * 2, opacity:opacity / 2}, - {size:actualSize * 4, opacity:opacity / 3}, - {size:actualSize * 8, opacity:opacity / 5}, - {size:actualSize * 16, opacity:opacity / 16} - ]; - ofsContext.beginPath(); - for(var f in fills) { - f = fills[f]; - ofsContext.fillStyle = p.color + f.opacity + ')'; - ofsContext.arc( - actualSize * 16, - actualSize * 16, - f.size , 0, Math.PI*2, true); - ofsContext.fill(); - } - ofsContext.closePath(); - }); - offscreenCache[cacheKey] = cacheValue; - } - var posX = p.pos.x / drawScale; - var posY = p.pos.y / drawScale; - ctx.drawImage(cacheValue, posX, posY); + var actualSize = p.size / drawScale; + actualSize = actualSize < minParticleSize ? minParticleSize : actualSize; + if(p.mass>8) actualSize *= 2; + if(p.nova) { + actualSize *= 4; + p.nova = false; + } + if(p.doubleSize) { + p.doubleSize = false; + actualSize *= 2; + } + // if(p.supernova) { + // actualSize *= 6; + // opacity = 0.15; + // p.supernovaDur = p.supernovaDur - 1; + // if(p.supernovaDur === 0) + // p.supernova = false; + // } + var cacheKey = actualSize + '_' + p.opacity + '_' + p.color; + var cacheValue = offscreenCache[cacheKey]; + if(!cacheValue) { + cacheValue = renderToCanvas(actualSize * 32, actualSize * 32, function(ofsContext) { + var opacity = p.opacity; + var fills = [ + {size:actualSize/2, opacity:1}, + {size:actualSize, opacity:opacity}, + {size:actualSize * 2, opacity:opacity / 2}, + {size:actualSize * 4, opacity:opacity / 3}, + {size:actualSize * 8, opacity:opacity / 5}, + {size:actualSize * 16, opacity:opacity / 16} + ]; + ofsContext.beginPath(); + for(var f in fills) { + f = fills[f]; + ofsContext.fillStyle = p.color + f.opacity + ')'; + ofsContext.arc( + actualSize * 16, + actualSize * 16, + f.size , 0, Math.PI*2, true); + ofsContext.fill(); + } + ofsContext.closePath(); + }); + offscreenCache[cacheKey] = cacheValue; + } + var posX = p.pos.x / drawScale; + var posY = p.pos.y / drawScale; + ctx.drawImage(cacheValue, posX, posY); } var fills = [ @@ -773,27 +773,27 @@ game.import('play',function(lib,game,ui,get,ai,_status){ var renderScene=function(ofsContext) { for (var i = 0; i < forces.length; i++) { - var p = forces[i]; - var position = p.pos; - var opacity = 1; + var p = forces[i]; + var position = p.pos; + var opacity = 1; - ofsContext.beginPath(); - for(var f in fills) { - f = fills[f]; - var o = p.burp === true ? 1 : f.opacity; - p.burp = false; - // ofsContext.fillStyle = 'rgba(255,255,255,' + o + ')'; - // ofsContext.arc(position.x / drawScale, - // position.y / drawScale, - // f.size / drawScale, 0, Math.PI*2, true); - // ofsContext.fill(); - } - ofsContext.closePath(); + ofsContext.beginPath(); + for(var f in fills) { + f = fills[f]; + var o = p.burp === true ? 1 : f.opacity; + p.burp = false; + // ofsContext.fillStyle = 'rgba(255,255,255,' + o + ')'; + // ofsContext.arc(position.x / drawScale, + // position.y / drawScale, + // f.size / drawScale, 0, Math.PI*2, true); + // ofsContext.fill(); + } + ofsContext.closePath(); } for (var i = 0; i < particles.length; i++) { - var p = particles[i]; - renderParticle(p); + var p = particles[i]; + renderParticle(p); } } @@ -933,7 +933,7 @@ game.import('play',function(lib,game,ui,get,ai,_status){ flakeMove.prototype.update = function() { var x = this.x, - y = this.y; + y = this.y; // 左右摆动(余弦) this.velX *= 0.98; diff --git a/game/asset.js b/game/asset.js index e6ae6cc9a..62ce90354 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,66 +1,66 @@ (function(){ - if(typeof require !== 'function'||typeof document !== 'undefined') return; - global.window=global; - require(__dirname+'/update.js'); - var fs=require('fs'); - var path=require('path'); - fs.readFile('game/asset.js','utf-8',function(err, current){ - var assetlist='\t\''+window.noname_update.version+'\''; - var skinlist='\nwindow.noname_skin_list={\n'; - var get = function(dir,callback){ - fs.readdir(dir,function(err,list){ - var shift=function(){ - if(list.length){ - var filename=list.shift(); - var delay=false; - if(!/\.|~|_/.test(filename[0])){ - var url=dir+'/'+filename; - var stat=fs.statSync(url); - if(stat.isFile()){ - if(['.jpg','.png','.mp3','.ttf'].indexOf(path.extname(url))!=-1){ - assetlist+=',\n\t\''+path.relative(path.dirname(__dirname),url)+'\''; - } - } - else if(stat.isDirectory()){ - if(dir==path.dirname(__dirname)+'/image/skin'){ - fs.readdir(url,function(err,list){ - var num=0; - for(var i=0;i=20){ - this.sendl('eventsdenied','total'); - } - else if(cfg.utc<=time){ - this.sendl('eventsdenied','time'); - } - else{ - cfg.nickname=cfg.nickname||'无名玩家'; - cfg.avatar=cfg.nickname||'caocao'; - cfg.creator=id; - cfg.id=util.getid(); - cfg.members=[id]; - events.unshift(cfg); - changed=true; - } - } - } - if(changed){ - util.updateevents(); - } - }, - config:function(config){ - var room=this.room; - if(room&&room.owner==this){ - if(room.servermode){ - room.servermode=false; - if(this._onconfig){ - if(clients[this._onconfig.wsid]){ - this._onconfig.owner=this; - this.sendl('onconnection',this._onconfig.wsid); - } - delete this._onconfig; - } - } - room.config=config; - } - util.updaterooms(); - }, - status:function(str){ - if(typeof str=='string'){ - this.status=str; - } - else{ - delete this.status; - } - util.updateclients(); - }, - send:function(id,message){ - if(clients[id]&&clients[id].owner==this){ - try{ - clients[id].send(message); - } - catch(e){ - clients[id].close(); - } - } - }, - close:function(id){ - if(clients[id]&&clients[id].owner==this){ - clients[id].close(); - } - }, - }; - var util={ - sendl:function(){ - var args=[]; - for(var i=0;i=20){ + this.sendl('eventsdenied','total'); + } + else if(cfg.utc<=time){ + this.sendl('eventsdenied','time'); + } + else{ + cfg.nickname=cfg.nickname||'无名玩家'; + cfg.avatar=cfg.nickname||'caocao'; + cfg.creator=id; + cfg.id=util.getid(); + cfg.members=[id]; + events.unshift(cfg); + changed=true; + } + } + } + if(changed){ + util.updateevents(); + } + }, + config:function(config){ + var room=this.room; + if(room&&room.owner==this){ + if(room.servermode){ + room.servermode=false; + if(this._onconfig){ + if(clients[this._onconfig.wsid]){ + this._onconfig.owner=this; + this.sendl('onconnection',this._onconfig.wsid); + } + delete this._onconfig; + } + } + room.config=config; + } + util.updaterooms(); + }, + status:function(str){ + if(typeof str=='string'){ + this.status=str; + } + else{ + delete this.status; + } + util.updateclients(); + }, + send:function(id,message){ + if(clients[id]&&clients[id].owner==this){ + try{ + clients[id].send(message); + } + catch(e){ + clients[id].close(); + } + } + }, + close:function(id){ + if(clients[id]&&clients[id].owner==this){ + clients[id].close(); + } + }, + }; + var util={ + sendl:function(){ + var args=[]; + for(var i=0;i0; - }, - ai:{ - effect:{ - target:function(card,player,target,current){ - if(get.type(card)=='delay'&&target.countCards('j')==0) return 0.1; - } - } - } + forced:true, + content:function(){ + player.discard(player.getCards('j').randomGet()); + }, + filter:function(event ,player){ + return player.countCards('j')>0; + }, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(get.type(card)=='delay'&&target.countCards('j')==0) return 0.1; + } + } + } }, boss_minbao:{ global:'boss_minbao2' @@ -5400,15 +5400,15 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ boss_qiangzheng:{ audio:2, trigger:{player:'phaseEnd'}, - forced:true, + forced:true, unique:true, - filter:function(event,player){ + filter:function(event,player){ return game.hasPlayer(function(current){ return current!=player&¤t.countCards('h'); }); - }, - content:function(){ - "step 0" + }, + content:function(){ + "step 0" var players=get.players(player); players.remove(player); event.players=players; @@ -5424,7 +5424,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } event.redo(); } - } + } }, guizhen:{ audio:2, @@ -5887,29 +5887,29 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ boss_tianyu:{ audio:true, trigger:{player:'phaseEnd'}, - forced:true, - filter:function(event,player){ - if(player.isLinked()) return true; + forced:true, + filter:function(event,player){ + if(player.isLinked()) return true; return game.hasPlayer(function(current){ return current!=player&&!current.isLinked(); }); - }, - content:function(){ - "step 0" - event.targets=game.filterPlayer(); - event.targets.remove(player); - event.targets.sort(lib.sort.seat); - if(player.isLinked()) player.link(); - "step 1" - if(event.targets.length){ - var target=event.targets.shift(); - if(!target.isLinked()){ - target.link(); + }, + content:function(){ + "step 0" + event.targets=game.filterPlayer(); + event.targets.remove(player); + event.targets.sort(lib.sort.seat); + if(player.isLinked()) player.link(); + "step 1" + if(event.targets.length){ + var target=event.targets.shift(); + if(!target.isLinked()){ + target.link(); player.line(target,'green'); - } - event.redo(); - } - } + } + event.redo(); + } + } }, boss_jizhi:{ audio:2, @@ -6236,48 +6236,48 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } }, qiwu:{ - audio:true, - trigger:{player:'useCard'}, - forced:true, - filter:function(event,player){ - return get.suit(event.card)=='club'&&player.hpstage.level){ - stage.level=level.index+1; - game.save('stage',stagesave,'brawl'); - } - if(stage.mode!='sequal'){ - game.save('lastStage',level.index+1,'brawl'); - } - } - else{ - ui.create.control('重新开始',function(){ - if(stage.mode=='sequal'&&bool&&level.index==stage.scenes.length-1){ - game.save('directStage',[stage.name,0],'brawl'); - } - else{ - game.save('directStage',[stage.name,level.index],'brawl'); - } - localStorage.setItem(lib.configprefix+'directstart',true); - game.reload(); - }); - if(stage.mode=='sequal'&&level.index==stage.scenes.length-1){ - stage.level=0; - game.save('stage',stagesave,'brawl'); - } - if(stage.mode!='sequal'){ - game.save('lastStage',level.index,'brawl'); - } - } - delete _status.createControl; - }); - var scene=stage.scenes[level.index]; - info={ - name:scene.name, - intro:scene.intro, - }; - for(var i in lib.brawl.scene.template){ - info[i]=get.copy(lib.brawl.scene.template[i]); - } - if(!scene.gameDraw){ - info.content.noGameDraw=true; - } - info.content.scene=scene; - } - else{ - return; - } - } - else{ - info=lib.brawl[active.link]; - } - lib.translate.restart='返回'; - dialog.delete(); - ui.brawlinfo=ui.create.system('乱斗',null,true); - lib.setPopped(ui.brawlinfo,function(){ - var uiintro=ui.create.dialog('hidden'); - uiintro.add(info.name); - var intro; - if(Array.isArray(info.intro)){ - intro='
    '; - for(var i=0;i'+intro+'
'); - var ul=uiintro.querySelector('ul'); - if(ul){ - ul.style.width='180px'; - } - uiintro.add(ui.create.div('.placeholder')); - return uiintro; - },250); - ui.auto.show(); - _status.brawl=info.content; - game.switchMode(info.mode); - if(info.init){ - info.init(); - } - } - }; - var start=ui.create.div('.menubutton.round.highlight','斗',dialog.content,clickStart); - start.style.position='absolute'; - start.style.left='auto'; - start.style.right='10px'; - start.style.top='auto'; - start.style.bottom='10px'; - start.style.width='80px'; - start.style.height='80px'; - start.style.lineHeight='80px'; - start.style.margin='0'; - start.style.padding='5px'; - start.style.fontSize='72px'; - start.style.zIndex=3; - start.style.transition='all 0s'; - game.addScene=function(name,clear){ - var scene=lib.storage.scene[name]; - var brawl={ - name:name, - intro:scene.intro, - }; - for(var i in lib.brawl.scene.template){ - brawl[i]=get.copy(lib.brawl.scene.template[i]); - } - if(!scene.gameDraw){ - brawl.content.noGameDraw=true; - } - brawl.content.scene=scene; - lib.brawl['scene_'+name]=brawl; - var node=createNode('scene_'+name); - if(clear){ - game.addSceneClear(); - clickCapt.call(node); - _status.sceneChanged=true; - } - }; - game.addStage=function(name,clear){ - var stage=lib.storage.stage[name]; - var brawl={ - name:name, - intro:stage.intro, - content:{} - }; - for(var i in lib.brawl.stage.template){ - brawl[i]=get.copy(lib.brawl.stage.template[i]); - } - brawl.content.stage=stage; - lib.brawl['stage_'+name]=brawl; - var node=createNode('stage_'+name); - if(clear){ - game.addStageClear(); - clickCapt.call(node); - } - } - game.removeScene=function(name){ - delete lib.storage.scene[name]; - game.save('scene',lib.storage.scene); - _status.sceneChanged=true; - for(var i=0;i7){ - setTimeout(function(){ - while(node.nodes.length>5){ - node.nodes.shift().delete(); - } - },500); - } - }; - if(init){ - node.nodes=[]; - for(var i=0;i<5;i++){ - func(); - } - } - node.showcaseinterval=setInterval(func,1000); - }, - content:{ - cardPile:function(list){ - var num=Math.ceil(list.length/10); - while(num--){ - list.push([['heart','diamond','club','spade'].randomGet(),Math.ceil(Math.random()*13),'du']); - } - return list; - } - }, - }, - daozhiyueying:{ - name:'导师月英', - mode:'identity', - intro:'牌堆中所有普通锦囊牌数量翻倍;移除拥有集智技能的角色', - showcase:function(init){ - var node=this; - var player1,player2; - if(init){ - player1=ui.create.player(null,true).init('huangyueying'); - player2=ui.create.player(null,true); + game:{ + syncMenu:true, + }, + start:function(){ + ui.auto.hide(); + if(!lib.storage.scene){ + lib.storage.scene={}; + } + if(!lib.storage.stage){ + lib.storage.stage={}; + } + if(!_status.extensionmade){ + _status.extensionmade=[]; + } + if(_status.extensionscene){ + game.save('scene',lib.storage.scene); + } + if(_status.extensionstage){ + game.save('stage',lib.storage.stage); + } + var dialog=ui.create.dialog('hidden'); + dialog.classList.add('fixed'); + dialog.classList.add('scroll1'); + dialog.classList.add('scroll2'); + dialog.classList.add('fullwidth'); + dialog.classList.add('fullheight'); + dialog.classList.add('noupdate'); + dialog.classList.add('character'); + dialog.contentContainer.style.overflow='visible'; + dialog.style.overflow='hidden'; + dialog.content.style.height='100%'; + dialog.contentContainer.style.transition='all 0s'; + if(!lib.storage.directStage) dialog.open(); + var packnode=ui.create.div('.packnode',dialog); + lib.setScroll(packnode); + var clickCapt=function(){ + var active=this.parentNode.querySelector('.active'); + if(this.link=='stage'){ + if(get.is.empty(lib.storage.scene)){ + alert('请创建至少1个场景'); + return; + } + } + if(active){ + if(active==this) return; + for(var i=0;istage.level){ + stage.level=level.index+1; + game.save('stage',stagesave,'brawl'); + } + if(stage.mode!='sequal'){ + game.save('lastStage',level.index+1,'brawl'); + } + } + else{ + ui.create.control('重新开始',function(){ + if(stage.mode=='sequal'&&bool&&level.index==stage.scenes.length-1){ + game.save('directStage',[stage.name,0],'brawl'); + } + else{ + game.save('directStage',[stage.name,level.index],'brawl'); + } + localStorage.setItem(lib.configprefix+'directstart',true); + game.reload(); + }); + if(stage.mode=='sequal'&&level.index==stage.scenes.length-1){ + stage.level=0; + game.save('stage',stagesave,'brawl'); + } + if(stage.mode!='sequal'){ + game.save('lastStage',level.index,'brawl'); + } + } + delete _status.createControl; + }); + var scene=stage.scenes[level.index]; + info={ + name:scene.name, + intro:scene.intro, + }; + for(var i in lib.brawl.scene.template){ + info[i]=get.copy(lib.brawl.scene.template[i]); + } + if(!scene.gameDraw){ + info.content.noGameDraw=true; + } + info.content.scene=scene; + } + else{ + return; + } + } + else{ + info=lib.brawl[active.link]; + } + lib.translate.restart='返回'; + dialog.delete(); + ui.brawlinfo=ui.create.system('乱斗',null,true); + lib.setPopped(ui.brawlinfo,function(){ + var uiintro=ui.create.dialog('hidden'); + uiintro.add(info.name); + var intro; + if(Array.isArray(info.intro)){ + intro='
    '; + for(var i=0;i'+intro+'
'); + var ul=uiintro.querySelector('ul'); + if(ul){ + ul.style.width='180px'; + } + uiintro.add(ui.create.div('.placeholder')); + return uiintro; + },250); + ui.auto.show(); + _status.brawl=info.content; + game.switchMode(info.mode); + if(info.init){ + info.init(); + } + } + }; + var start=ui.create.div('.menubutton.round.highlight','斗',dialog.content,clickStart); + start.style.position='absolute'; + start.style.left='auto'; + start.style.right='10px'; + start.style.top='auto'; + start.style.bottom='10px'; + start.style.width='80px'; + start.style.height='80px'; + start.style.lineHeight='80px'; + start.style.margin='0'; + start.style.padding='5px'; + start.style.fontSize='72px'; + start.style.zIndex=3; + start.style.transition='all 0s'; + game.addScene=function(name,clear){ + var scene=lib.storage.scene[name]; + var brawl={ + name:name, + intro:scene.intro, + }; + for(var i in lib.brawl.scene.template){ + brawl[i]=get.copy(lib.brawl.scene.template[i]); + } + if(!scene.gameDraw){ + brawl.content.noGameDraw=true; + } + brawl.content.scene=scene; + lib.brawl['scene_'+name]=brawl; + var node=createNode('scene_'+name); + if(clear){ + game.addSceneClear(); + clickCapt.call(node); + _status.sceneChanged=true; + } + }; + game.addStage=function(name,clear){ + var stage=lib.storage.stage[name]; + var brawl={ + name:name, + intro:stage.intro, + content:{} + }; + for(var i in lib.brawl.stage.template){ + brawl[i]=get.copy(lib.brawl.stage.template[i]); + } + brawl.content.stage=stage; + lib.brawl['stage_'+name]=brawl; + var node=createNode('stage_'+name); + if(clear){ + game.addStageClear(); + clickCapt.call(node); + } + } + game.removeScene=function(name){ + delete lib.storage.scene[name]; + game.save('scene',lib.storage.scene); + _status.sceneChanged=true; + for(var i=0;i7){ + setTimeout(function(){ + while(node.nodes.length>5){ + node.nodes.shift().delete(); + } + },500); + } + }; + if(init){ + node.nodes=[]; + for(var i=0;i<5;i++){ + func(); + } + } + node.showcaseinterval=setInterval(func,1000); + }, + content:{ + cardPile:function(list){ + var num=Math.ceil(list.length/10); + while(num--){ + list.push([['heart','diamond','club','spade'].randomGet(),Math.ceil(Math.random()*13),'du']); + } + return list; + } + }, + }, + daozhiyueying:{ + name:'导师月英', + mode:'identity', + intro:'牌堆中所有普通锦囊牌数量翻倍;移除拥有集智技能的角色', + showcase:function(init){ + var node=this; + var player1,player2; + if(init){ + player1=ui.create.player(null,true).init('huangyueying'); + player2=ui.create.player(null,true); if(lib.character.jsp_huangyueying){ player2.init('jsp_huangyueying'); } else if(lib.character.re_huangyueying){ - player2.init('re_huangyueying'); - } - else{ - player2.init('huangyueying'); - } - player1.style.left='20px'; - player1.style.top='20px'; - player1.style.transform='scale(0.9)'; - player1.node.count.innerHTML='2'; - player1.node.count.dataset.condition='mid'; - player2.style.left='auto'; - player2.style.right='20px'; - player2.style.top='20px'; - player2.style.transform='scale(0.9)'; - player2.node.count.innerHTML='2'; - player2.node.count.dataset.condition='mid'; - this.appendChild(player1); - this.appendChild(player2); - this.player1=player1; - this.player2=player2; - } - else{ - player1=this.player1; - player2=this.player2; - } - var rect1=player1.getBoundingClientRect(); - var rect2=player2.getBoundingClientRect(); - var left1=rect1.left+rect1.width/2-ui.arena.offsetLeft; - var left2=rect2.left+rect2.width/2-ui.arena.offsetLeft; - var top1=rect1.top+rect1.height/2-ui.arena.offsetTop; - var top2=rect2.top+rect2.height/2-ui.arena.offsetTop; + player2.init('re_huangyueying'); + } + else{ + player2.init('huangyueying'); + } + player1.style.left='20px'; + player1.style.top='20px'; + player1.style.transform='scale(0.9)'; + player1.node.count.innerHTML='2'; + player1.node.count.dataset.condition='mid'; + player2.style.left='auto'; + player2.style.right='20px'; + player2.style.top='20px'; + player2.style.transform='scale(0.9)'; + player2.node.count.innerHTML='2'; + player2.node.count.dataset.condition='mid'; + this.appendChild(player1); + this.appendChild(player2); + this.player1=player1; + this.player2=player2; + } + else{ + player1=this.player1; + player2=this.player2; + } + var rect1=player1.getBoundingClientRect(); + var rect2=player2.getBoundingClientRect(); + var left1=rect1.left+rect1.width/2-ui.arena.offsetLeft; + var left2=rect2.left+rect2.width/2-ui.arena.offsetLeft; + var top1=rect1.top+rect1.height/2-ui.arena.offsetTop; + var top2=rect2.top+rect2.height/2-ui.arena.offsetTop; - var createCard=function(wuxie){ - var card; - if(wuxie){ - card=game.createCard('wuxie','noclick'); - card.style.transform='scale(0.9)'; - } - else{ - card=ui.create.card(null,'noclick',true); - } - card.style.opacity=0; - card.style.position='absolute'; - card.style.zIndex=2; - card.style.margin=0; - return card; - } + var createCard=function(wuxie){ + var card; + if(wuxie){ + card=game.createCard('wuxie','noclick'); + card.style.transform='scale(0.9)'; + } + else{ + card=ui.create.card(null,'noclick',true); + } + card.style.opacity=0; + card.style.position='absolute'; + card.style.zIndex=2; + card.style.margin=0; + return card; + } - var func=function(){ - game.linexy([left1,top1,left2,top2]); - var card=createCard(true); - card.style.left='43px'; - card.style.top='58px'; - node.appendChild(card); - ui.refresh(card); - card.style.opacity=1; - card.style.transform='scale(0.9) translate(137px,152px)'; - setTimeout(function(){ - card.delete(); - },1000); - player1.node.count.innerHTML='1'; + var func=function(){ + game.linexy([left1,top1,left2,top2]); + var card=createCard(true); + card.style.left='43px'; + card.style.top='58px'; + node.appendChild(card); + ui.refresh(card); + card.style.opacity=1; + card.style.transform='scale(0.9) translate(137px,152px)'; + setTimeout(function(){ + card.delete(); + },1000); + player1.node.count.innerHTML='1'; - setTimeout(function(){ - if(!node.showcaseinterval) return; - player1.node.count.innerHTML='2'; - var card=createCard(); - card.style.left='43px'; - card.style.top='58px'; - card.style.transform='scale(0.9) translate(137px,152px)'; - node.appendChild(card); - ui.refresh(card); - card.style.opacity=1; - card.style.transform='scale(0.9)'; - setTimeout(function(){ - card.delete(); - },1000); - },300); + setTimeout(function(){ + if(!node.showcaseinterval) return; + player1.node.count.innerHTML='2'; + var card=createCard(); + card.style.left='43px'; + card.style.top='58px'; + card.style.transform='scale(0.9) translate(137px,152px)'; + node.appendChild(card); + ui.refresh(card); + card.style.opacity=1; + card.style.transform='scale(0.9)'; + setTimeout(function(){ + card.delete(); + },1000); + },300); - setTimeout(function(){ - if(!node.showcaseinterval) return; - player2.node.count.innerHTML='1'; - game.linexy([left2,top2,left1,top1]); - var card=createCard(true); - card.style.left='auto'; - card.style.right='43px'; - card.style.top='58px'; - node.appendChild(card); - ui.refresh(card); - card.style.opacity=1; - card.style.transform='scale(0.9) translate(-137px,152px)'; - setTimeout(function(){ - card.delete(); - },700); + setTimeout(function(){ + if(!node.showcaseinterval) return; + player2.node.count.innerHTML='1'; + game.linexy([left2,top2,left1,top1]); + var card=createCard(true); + card.style.left='auto'; + card.style.right='43px'; + card.style.top='58px'; + node.appendChild(card); + ui.refresh(card); + card.style.opacity=1; + card.style.transform='scale(0.9) translate(-137px,152px)'; + setTimeout(function(){ + card.delete(); + },700); - setTimeout(function(){ - if(!node.showcaseinterval) return; - player2.node.count.innerHTML='2'; - var card=createCard(); - card.style.left='auto'; - card.style.right='43px'; - card.style.top='58px'; - card.style.transform='scale(0.9) translate(-137px,152px)'; - node.appendChild(card); - ui.refresh(card); - card.style.opacity=1; - card.style.transform='scale(0.9)'; - setTimeout(function(){ - card.delete(); - },700); - },300); - },1000); - }; - node.showcaseinterval=setInterval(func,2200); - func(); - }, - init:function(){ - for(var i in lib.character){ - var skills=lib.character[i][3] - if(skills.contains('jizhi')||skills.contains('rejizhi')||skills.contains('lingzhou')){ - delete lib.character[i]; - } - } - }, - content:{ - cardPile:function(list){ - var list2=[]; - for(var i=0;i=5){ - num=0; - } - },700); - }, - init:function(){ - lib.skill.weiwoduzun={ - mark:true, - intro:{ - content:'杀造成的伤害+1' - }, - group:['weiwoduzun_damage','weiwoduzun_lose'], - subSkill:{ - damage:{ - trigger:{source:'damageBegin'}, - forced:true, - filter:function(event){ - return event.card&&event.card.name=='sha'&&event.notLink(); - }, - content:function(){ - trigger.num++; - } - }, - lose:{ - trigger:{player:'damageEnd'}, - forced:true, - filter:function(event){ - return event.source&&event.source.isAlive(); - }, - content:function(){ - player.removeSkill('weiwoduzun'); - trigger.source.addSkill('weiwoduzun'); - } - } - } - }; - lib.translate.weiwoduzun='战神'; - lib.translate.weiwoduzun_bg='尊'; - }, - content:{ - cardPile:function(list){ - var num=0; - for(var i=0;i4){ - setTimeout(function(){ - while(node.nodes.length>3){ - node.nodes.shift().delete(); - } - },500); - } - }; - node.list=[]; - if(init){ - node.nodes=[]; - for(var i=0;i<3;i++){ - func(); - } - } - node.showcaseinterval=setInterval(func,1000); - }, - init:function(){ - var map={}; - var map3=[]; - var list1=['司','夏','诸']; - var list2=['马','侯','葛']; - var exclude=['界','新','大']; - for(var i in lib.character){ - if(lib.filter.characterDisabled(i)) continue; - var surname=lib.translate[i]; - for(var j=0;j=5){ + num=0; + } + },700); + }, + init:function(){ + lib.skill.weiwoduzun={ + mark:true, + intro:{ + content:'杀造成的伤害+1' + }, + group:['weiwoduzun_damage','weiwoduzun_lose'], + subSkill:{ + damage:{ + trigger:{source:'damageBegin'}, + forced:true, + filter:function(event){ + return event.card&&event.card.name=='sha'&&event.notLink(); + }, + content:function(){ + trigger.num++; + } + }, + lose:{ + trigger:{player:'damageEnd'}, + forced:true, + filter:function(event){ + return event.source&&event.source.isAlive(); + }, + content:function(){ + player.removeSkill('weiwoduzun'); + trigger.source.addSkill('weiwoduzun'); + } + } + } + }; + lib.translate.weiwoduzun='战神'; + lib.translate.weiwoduzun_bg='尊'; + }, + content:{ + cardPile:function(list){ + var num=0; + for(var i=0;i4){ + setTimeout(function(){ + while(node.nodes.length>3){ + node.nodes.shift().delete(); + } + },500); + } + }; + node.list=[]; + if(init){ + node.nodes=[]; + for(var i=0;i<3;i++){ + func(); + } + } + node.showcaseinterval=setInterval(func,1000); + }, + init:function(){ + var map={}; + var map3=[]; + var list1=['司','夏','诸']; + var list2=['马','侯','葛']; + var exclude=['界','新','大']; + for(var i in lib.character){ + if(lib.filter.characterDisabled(i)) continue; + var surname=lib.translate[i]; + for(var j=0;j7){ - nodes[i].index=0; - } - setPos(nodes[i]); - } - },1000); - }, - content:{ - gameStart:function(){ - var target=(_status.mode=='zhong')?game.zhong:game.zhu; - if(get.config('double_character')){ - target.init(game.me.name,game.me.name2); - } - else{ - target.init(game.me.name); - } - target.hp++; - target.maxHp++; - target.update(); - }, - chooseCharacterAi:function(player,list,list2,back){ - if(player==game.zhu){ - return; - } - else{ - if(get.config('double_character')){ - player.init(game.me.name,game.me.name2); - } - else{ - player.init(game.me.name); - } - } - }, - chooseCharacter:function(list,list2,num){ - if(game.me!=game.zhu){ - return list.slice(0,list2); - } - else{ - if(_status.event.zhongmode){ - return list.slice(0,6); - } - else{ - return list.concat(list2.slice(0,num)); - } - } - } - } - }, - // baiyudujiang:{ - // name:'白衣渡江', - // mode:'versus', - // submode:'2v2', - // intro:[ - // '玩家在选将时可从6-8张的武将牌里选择两张武将牌,一张面向大家可见(加入游戏),另一张是隐藏面孔(暗置)', - // '选择的两张武将牌需满足以下至少两个条件:1.性别相同;2.体力上限相同;3.技能数量相同', - // '每名玩家在其回合开始或回合结束时,可以选择将自己的武将牌弃置,然后使用暗置的武将牌进行剩余的游戏' - // ], - // content:{ - // submode:'two', - // chooseCharacterNum:2, - // chooseCharacterAfter:function(){ - // - // } - // } - // } - scene:{ - name:'创建场景', - content:{ - submode:'normal' - }, - nostart:true, - fullshow:true, - template:{ - mode:'identity', - init:function(){ - game.saveConfig('double_character',false,'identity'); - _status.brawl.playerNumber=_status.brawl.scene.players.length; - }, - showcase:function(init){ - if(init){ - var name=lib.brawl[this.link].name; - var scene=lib.storage.scene[name]; - ui.create.node('button','编辑场景',this,function(){ - _status.sceneToLoad=scene; - game.switchScene(); - }); - if(_status.extensionmade.contains(name)){ - ui.create.node('button','管理扩展',this,function(){ - ui.click.configMenu(); - ui.click.extensionTab(name); - },{marginLeft:'6px'}); - } - else{ - ui.create.node('button','删除场景',this,function(){ - if(confirm('确定删除'+name+'?')){ - game.removeScene(name); - } - },{marginLeft:'6px'}); - } - ui.create.node('button','导出扩展',this,function(){ - var str='{name:"'+name+'",content:function(){\nif(lib.config.mode=="brawl"){\n'+ - 'if(!lib.storage.scene) lib.storage.scene={};\n'+ - 'if(!lib.storage.scene["'+name+'"]){\nlib.storage.scene["'+name+'"]='+get.stringify(scene)+';\n_status.extensionscene=true;}\n'+ - 'if(!_status.extensionmade) _status.extensionmade=[];\n'+ - '_status.extensionmade.push("'+name+'");\n}}\n}'; - var extension={'extension.js':'game.import("extension",function(lib,game,ui,get,ai,_status){return '+str+'})'}; - game.importExtension(extension,null,name); - },{marginLeft:'6px'}); - } - }, - content:{ - submode:'normal', - noAddSetting:true, - identityShown:true, - orderedPile:true, - cardPile:function(list){ - list.randomSort(); - var scene=_status.brawl.scene; - var inpile=[]; - for(var i=0;i=0;i--){ - list.unshift(parseInfo(scene.cardPileTop[i])); - } - for(var i=0;igame.players[i].maxHp){ - game.players[i].hp=game.players[i].maxHp; - } - } - if(info.hp){ - game.players[i].hp=info.hp; - if(game.players[i].hp>game.players[i].maxHp){ - game.players[i].maxHp=game.players[i].hp; - } - } - game.players[i].update(); - } - var scene=_status.brawl.scene; - var over=function(str){ - switch(str){ - case 'win':game.over(true);break; - case 'lose':game.over(false);break; - case 'tie':game.over('平局');break; - } - } - if(scene.turns){ - var turns=scene.turns[0]; - lib.onphase.push(function(){ - turns--; - if(turns<0){ - over(scene.turns[1]); - } - }); - } - if(scene.washes){ - var washes=scene.washes[0]; - lib.onwash.push(function(){ - washes--; - if(washes<=0){ - over(scene.washes[1]); - } - }); - } - }, - chooseCharacterBefore:function(){ - var scene=_status.brawl.scene; - var playercontrol=[]; - var maxpos=0; - for(var i=0;i7){ + nodes[i].index=0; + } + setPos(nodes[i]); + } + },1000); + }, + content:{ + gameStart:function(){ + var target=(_status.mode=='zhong')?game.zhong:game.zhu; + if(get.config('double_character')){ + target.init(game.me.name,game.me.name2); + } + else{ + target.init(game.me.name); + } + target.hp++; + target.maxHp++; + target.update(); + }, + chooseCharacterAi:function(player,list,list2,back){ + if(player==game.zhu){ + return; + } + else{ + if(get.config('double_character')){ + player.init(game.me.name,game.me.name2); + } + else{ + player.init(game.me.name); + } + } + }, + chooseCharacter:function(list,list2,num){ + if(game.me!=game.zhu){ + return list.slice(0,list2); + } + else{ + if(_status.event.zhongmode){ + return list.slice(0,6); + } + else{ + return list.concat(list2.slice(0,num)); + } + } + } + } + }, + // baiyudujiang:{ + // name:'白衣渡江', + // mode:'versus', + // submode:'2v2', + // intro:[ + // '玩家在选将时可从6-8张的武将牌里选择两张武将牌,一张面向大家可见(加入游戏),另一张是隐藏面孔(暗置)', + // '选择的两张武将牌需满足以下至少两个条件:1.性别相同;2.体力上限相同;3.技能数量相同', + // '每名玩家在其回合开始或回合结束时,可以选择将自己的武将牌弃置,然后使用暗置的武将牌进行剩余的游戏' + // ], + // content:{ + // submode:'two', + // chooseCharacterNum:2, + // chooseCharacterAfter:function(){ + // + // } + // } + // } + scene:{ + name:'创建场景', + content:{ + submode:'normal' + }, + nostart:true, + fullshow:true, + template:{ + mode:'identity', + init:function(){ + game.saveConfig('double_character',false,'identity'); + _status.brawl.playerNumber=_status.brawl.scene.players.length; + }, + showcase:function(init){ + if(init){ + var name=lib.brawl[this.link].name; + var scene=lib.storage.scene[name]; + ui.create.node('button','编辑场景',this,function(){ + _status.sceneToLoad=scene; + game.switchScene(); + }); + if(_status.extensionmade.contains(name)){ + ui.create.node('button','管理扩展',this,function(){ + ui.click.configMenu(); + ui.click.extensionTab(name); + },{marginLeft:'6px'}); + } + else{ + ui.create.node('button','删除场景',this,function(){ + if(confirm('确定删除'+name+'?')){ + game.removeScene(name); + } + },{marginLeft:'6px'}); + } + ui.create.node('button','导出扩展',this,function(){ + var str='{name:"'+name+'",content:function(){\nif(lib.config.mode=="brawl"){\n'+ + 'if(!lib.storage.scene) lib.storage.scene={};\n'+ + 'if(!lib.storage.scene["'+name+'"]){\nlib.storage.scene["'+name+'"]='+get.stringify(scene)+';\n_status.extensionscene=true;}\n'+ + 'if(!_status.extensionmade) _status.extensionmade=[];\n'+ + '_status.extensionmade.push("'+name+'");\n}}\n}'; + var extension={'extension.js':'game.import("extension",function(lib,game,ui,get,ai,_status){return '+str+'})'}; + game.importExtension(extension,null,name); + },{marginLeft:'6px'}); + } + }, + content:{ + submode:'normal', + noAddSetting:true, + identityShown:true, + orderedPile:true, + cardPile:function(list){ + list.randomSort(); + var scene=_status.brawl.scene; + var inpile=[]; + for(var i=0;i=0;i--){ + list.unshift(parseInfo(scene.cardPileTop[i])); + } + for(var i=0;igame.players[i].maxHp){ + game.players[i].hp=game.players[i].maxHp; + } + } + if(info.hp){ + game.players[i].hp=info.hp; + if(game.players[i].hp>game.players[i].maxHp){ + game.players[i].maxHp=game.players[i].hp; + } + } + game.players[i].update(); + } + var scene=_status.brawl.scene; + var over=function(str){ + switch(str){ + case 'win':game.over(true);break; + case 'lose':game.over(false);break; + case 'tie':game.over('平局');break; + } + } + if(scene.turns){ + var turns=scene.turns[0]; + lib.onphase.push(function(){ + turns--; + if(turns<0){ + over(scene.turns[1]); + } + }); + } + if(scene.washes){ + var washes=scene.washes[0]; + lib.onwash.push(function(){ + washes--; + if(washes<=0){ + over(scene.washes[1]); + } + }); + } + }, + chooseCharacterBefore:function(){ + var scene=_status.brawl.scene; + var playercontrol=[]; + var maxpos=0; + for(var i=0;ibb?1:-1; - } - return a>b?1:-1; - }); - list.unshift(['random','自选主将']); - var name1=ui.create.selectlist(list,list[0],line2); - name1.style.marginLeft='3px'; - name1.style.marginRight='3px'; - name1.style.maxWidth='80px'; - list[0][1]='自选副将'; - list.unshift(['none','无副将']); - var name2=ui.create.selectlist(list,list[0],line2); - name2.style.marginLeft='3px'; - name2.style.marginRight='3px'; - name2.style.maxWidth='80px'; + list.sort(function(a,b){ + a=a[0];b=b[0]; + var aa=a,bb=b; + if(aa.indexOf('_')!=-1){ + aa=aa.slice(aa.indexOf('_')+1); + } + if(bb.indexOf('_')!=-1){ + bb=bb.slice(bb.indexOf('_')+1); + } + if(aa!=bb){ + return aa>bb?1:-1; + } + return a>b?1:-1; + }); + list.unshift(['random','自选主将']); + var name1=ui.create.selectlist(list,list[0],line2); + name1.style.marginLeft='3px'; + name1.style.marginRight='3px'; + name1.style.maxWidth='80px'; + list[0][1]='自选副将'; + list.unshift(['none','无副将']); + var name2=ui.create.selectlist(list,list[0],line2); + name2.style.marginLeft='3px'; + name2.style.marginRight='3px'; + name2.style.maxWidth='80px'; - var capt9=ui.create.div(style2,'','编辑牌堆',this); - capt9.style.display='none'; + var capt9=ui.create.div(style2,'','编辑牌堆',this); + capt9.style.display='none'; - var capt2=ui.create.div(style2,'','添加卡牌',this); - var line3=ui.create.div(style2,this); - line3.style.display='none'; - capt1.style.display='none'; - capt2.style.display='none'; + var capt2=ui.create.div(style2,'','添加卡牌',this); + var line3=ui.create.div(style2,this); + line3.style.display='none'; + capt1.style.display='none'; + capt2.style.display='none'; - var line5=ui.create.div(style2,this); - line5.style.display='none'; - var pileaddlist=[]; - for(var i=0;i替换牌堆'); - line11.style.display='none'; - var replacepile=ui.create.node('input',line11); - replacepile.type='checkbox'; + var line11=ui.create.div(style2,this,'','替换牌堆'); + line11.style.display='none'; + var replacepile=ui.create.node('input',line11); + replacepile.type='checkbox'; - ui.create.node('span',line11,'开局摸牌',{marginLeft:'10px'}); - var gameDraw=ui.create.node('input',line11); - gameDraw.type='checkbox'; - gameDraw.checked=true; + ui.create.node('span',line11,'开局摸牌',{marginLeft:'10px'}); + var gameDraw=ui.create.node('input',line11); + gameDraw.type='checkbox'; + gameDraw.checked=true; - var capt_t=ui.create.div(style2,'','牌堆顶',this); - var line6_t=ui.create.div(style2,this); - var capt_b=ui.create.div(style2,'','牌堆底',this); - var line6_b=ui.create.div(style2,this); - var capt_d=ui.create.div(style2,'','弃牌堆',this); - var line6_d=ui.create.div(style2,this); - line6_d.style.marginBottom='10px'; - capt_t.style.display='none'; - capt_b.style.display='none'; - capt_d.style.display='none'; + var capt_t=ui.create.div(style2,'','牌堆顶',this); + var line6_t=ui.create.div(style2,this); + var capt_b=ui.create.div(style2,'','牌堆底',this); + var line6_b=ui.create.div(style2,this); + var capt_d=ui.create.div(style2,'','弃牌堆',this); + var line6_d=ui.create.div(style2,this); + line6_d.style.marginBottom='10px'; + capt_t.style.display='none'; + capt_b.style.display='none'; + capt_d.style.display='none'; - var line4=ui.create.div(style2,this); - line4.style.display='none'; - line4.style.marginTop='20px'; - var resetCharacter=function(){ - // line1.style.display='block'; - editPile.disabled=false; - // editCode.disabled=false; - saveButton.disabled=false; - // exportButton.disabled=false; - line7.style.display='block'; - line2.style.display='none'; - line2_t.style.display='none'; - line3.style.display='none'; - line4.style.display='none'; - line5.style.display='none'; - line6_h.style.display='none'; - line6_e.style.display='none'; - line6_j.style.display='none'; - capt1.style.display='none'; - capt2.style.display='none'; - capt_h.style.display='none'; - capt_e.style.display='none'; - capt_j.style.display='none'; + var line4=ui.create.div(style2,this); + line4.style.display='none'; + line4.style.marginTop='20px'; + var resetCharacter=function(){ + // line1.style.display='block'; + editPile.disabled=false; + // editCode.disabled=false; + saveButton.disabled=false; + // exportButton.disabled=false; + line7.style.display='block'; + line2.style.display='none'; + line2_t.style.display='none'; + line3.style.display='none'; + line4.style.display='none'; + line5.style.display='none'; + line6_h.style.display='none'; + line6_e.style.display='none'; + line6_j.style.display='none'; + capt1.style.display='none'; + capt2.style.display='none'; + capt_h.style.display='none'; + capt_e.style.display='none'; + capt_j.style.display='none'; - name1.value='random'; - name2.value='none'; - identity.value='fan'; - position.value='0'; - hp.value=''; - maxHp.value=''; - line6_h.innerHTML=''; - line6_e.innerHTML=''; - line6_j.innerHTML=''; - cardpileaddname.value='random'; - cardpileaddsuit.value='random'; - cardpileaddnumber.value='random'; - linked.checked=false; - turnedover.checked=false; - playercontrol.checked=false; - }; - var createCharacter=function(info){ - var player=ui.create.player(null,true); - player._customintro=function(uiintro){ - if(info.handcards.length){ - uiintro.addText('手牌',true); - var hs=ui.create.div('.buttons'); - for(var i=0;i=8){ - addCharacter.disabled=true; - } + line7.appendChild(player); + player.listen(function(){ + if(confirm('是否删除此角色?')){ + this.remove(); + if(line7.childElementCount<8){ + addCharacter.disabled=false; + } + } + }); + if(line7.childElementCount>=8){ + addCharacter.disabled=true; + } - return player; - }; - ui.create.div('.menubutton.large','确定',line4,style3,function(){ - var info={ - name:name1.value, - name2:name2.value, - identity:identity.value, - position:parseInt(position.value), - hp:parseInt(hp.value), - maxHp:parseInt(maxHp.value), - linked:linked.checked, - turnedover:turnedover.checked, - playercontrol:playercontrol.checked, - handcards:[], - equips:[], - judges:[] - }; - for(var i=0;i=8){ - addCharacter.disabled=true; - } - else{ - addCharacter.disabled=false; - } - // editCode.disabled=false; - saveButton.disabled=false; - // exportButton.disabled=false; - cardpileaddname.value='random'; - cardpileaddsuit.value='random'; - cardpileaddnumber.value='random'; + var line9=ui.create.div(style2,this); + line9.style.display='none'; + line9.style.marginTop='20px'; + var resetStatus=function(all){ + if(line7.childElementCount>=8){ + addCharacter.disabled=true; + } + else{ + addCharacter.disabled=false; + } + // editCode.disabled=false; + saveButton.disabled=false; + // exportButton.disabled=false; + cardpileaddname.value='random'; + cardpileaddsuit.value='random'; + cardpileaddnumber.value='random'; - line8.style.display='none'; - capt8.style.display='none'; - capt9.style.display='none'; - line9.style.display='none'; - line10.style.display='none'; - line11.style.display='none'; - line3.style.display='none'; - line7.style.display='block'; + line8.style.display='none'; + capt8.style.display='none'; + capt9.style.display='none'; + line9.style.display='none'; + line10.style.display='none'; + line11.style.display='none'; + line3.style.display='none'; + line7.style.display='block'; - line6_t.style.display='none'; - line6_b.style.display='none'; - line6_d.style.display='none'; - capt_t.style.display='none'; - capt_b.style.display='none'; - capt_d.style.display='none'; + line6_t.style.display='none'; + line6_b.style.display='none'; + line6_d.style.display='none'; + capt_t.style.display='none'; + capt_b.style.display='none'; + capt_d.style.display='none'; - if(all===true){ - replacepile.checked=false; - gameDraw.checked=true; - turns.value='1'; - turnsresult.value='none'; - washes.value='1'; - washesresult.value='none'; - line6_t.innerHTML=''; - line6_b.innerHTML=''; - line6_d.innerHTML=''; - } - } + if(all===true){ + replacepile.checked=false; + gameDraw.checked=true; + turns.value='1'; + turnsresult.value='none'; + washes.value='1'; + washesresult.value='none'; + line6_t.innerHTML=''; + line6_b.innerHTML=''; + line6_d.innerHTML=''; + } + } - ui.create.div('.menubutton.large','确定',line9,style3,resetStatus); + ui.create.div('.menubutton.large','确定',line9,style3,resetStatus); - game.addSceneClear=function(){ - resetCharacter(); - resetStatus(true); - scenename.value=''; - sceneintro.value=''; - line7.innerHTML=''; - delete _status.currentScene; - }; - game.loadScene=function(scene){ - resetCharacter(); - resetStatus(true); - scenename.value=scene.name; - sceneintro.value=scene.intro; - _status.currentScene=scene.name; - line7.innerHTML=''; - if(scene.replacepile) replacepile.checked=true; - if(scene.gameDraw) gameDraw.checked=true; - else gameDraw.checked=false; - if(scene.turns){ - turns.value=scene.turns[0].toString(); - turnsresult.value=scene.turns[1]; - } - if(scene.washes){ - washes.value=scene.washes[0].toString(); - washesresult.value=scene.washes[1]; - } - for(var i=0;istage.level){ - node.classList.add('unselectable'); - } - } - if(lib.storage.lastStage==i&&!node.classList.contains('unselectable')){ - node.classList.add('active'); - noactive=false; - } - else if(lib.storage.lastStage==undefined&&noactive&&!node.classList.contains('unselectable')){ - node.classList.add('active'); - noactive=false; - } - } - } - }, - }, - showcase:function(init){ - if(_status.sceneChanged){ - init=true; - this.innerHTML=''; - delete _status.sceneChanged; - } - if(init){ - this.style.transition='all 0s'; - this.style.height=(this.offsetHeight-10)+'px'; - // this.style.overflow='scroll'; - // lib.setScroll(this); - var style2={position:'relative',display:'block',left:0,top:0,marginBottom:'6px',padding:0,width:'100%'}; - var style3={marginLeft:'4px',marginRight:'4px',position:'relative'} + if(_status.extensionmade.contains(name)){ + ui.create.node('button','管理扩展',line1,function(){ + ui.click.configMenu(); + ui.click.extensionTab(name); + },{marginLeft:'6px'}); + } + else{ + ui.create.node('button','删除关卡',line1,function(){ + if(confirm('确定删除'+name+'?')){ + game.removeStage(name); + } + },{marginLeft:'6px'}); + } + ui.create.node('button','导出扩展',line1,function(){ + var level=stage.level; + stage.level=0; + var str='{name:"'+name+'",content:function(){\nif(lib.config.mode=="brawl"){\n'+ + 'if(!lib.storage.stage) lib.storage.stage={};\n'+ + 'if(!lib.storage.stage["'+name+'"]){\nlib.storage.stage["'+name+'"]='+get.stringify(stage)+';\n_status.extensionstage=true;}\n'+ + 'if(!_status.extensionmade) _status.extensionmade=[];\n'+ + '_status.extensionmade.push("'+name+'");\n}}\n}'; + stage.level=level; + var extension={'extension.js':'game.import("extension",function(lib,game,ui,get,ai,_status){return '+str+'})'}; + game.importExtension(extension,null,name); + },{marginLeft:'6px'}); + var noactive=true; + var clickNode=function(){ + if(this.classList.contains('unselectable')) return; + if(!this.classList.contains('active')){ + var active=this.parentNode.querySelector('.menubutton.large.active'); + if(active){ + active.classList.remove('active'); + } + this.classList.add('active'); + } + } + for(var i=0;istage.level){ + node.classList.add('unselectable'); + } + } + if(lib.storage.lastStage==i&&!node.classList.contains('unselectable')){ + node.classList.add('active'); + noactive=false; + } + else if(lib.storage.lastStage==undefined&&noactive&&!node.classList.contains('unselectable')){ + node.classList.add('active'); + noactive=false; + } + } + } + }, + }, + showcase:function(init){ + if(_status.sceneChanged){ + init=true; + this.innerHTML=''; + delete _status.sceneChanged; + } + if(init){ + this.style.transition='all 0s'; + this.style.height=(this.offsetHeight-10)+'px'; + // this.style.overflow='scroll'; + // lib.setScroll(this); + var style2={position:'relative',display:'block',left:0,top:0,marginBottom:'6px',padding:0,width:'100%'}; + var style3={marginLeft:'4px',marginRight:'4px',position:'relative'} - var scenename=ui.create.node('input',ui.create.div(style2,'','关卡名称:',this),{width:'120px'}); - scenename.type='text'; - scenename.style.marginTop='20px'; - var sceneintro=ui.create.node('input',ui.create.div(style2,'','关卡描述:',this),{width:'120px'}); - sceneintro.type='text'; - sceneintro.style.marginBottom='10px'; + var scenename=ui.create.node('input',ui.create.div(style2,'','关卡名称:',this),{width:'120px'}); + scenename.type='text'; + scenename.style.marginTop='20px'; + var sceneintro=ui.create.node('input',ui.create.div(style2,'','关卡描述:',this),{width:'120px'}); + sceneintro.type='text'; + sceneintro.style.marginBottom='10px'; - var line1=ui.create.div(style2,this); - var line2=ui.create.div(style2,this); - line1.style.marginBottom='10px'; - line2.style.lineHeight='50px'; + var line1=ui.create.div(style2,this); + var line2=ui.create.div(style2,this); + line1.style.marginBottom='10px'; + line2.style.lineHeight='50px'; line2.style.overflow='scroll'; lib.setScroll(line2); var container=this.parentNode.parentNode; @@ -2174,95 +2174,95 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ var rect2=line2.getBoundingClientRect(); line2.style.height=(rect1.height-(rect2.top-rect1.top))+'px'; },1000); - var scenes=[]; - for(var i in lib.storage.scene){ - scenes.push([i,i]); - } - if(!scenes.length){ - alert('请创建至少1个场景'); - return; - } - var scenelist=ui.create.selectlist(scenes,null,line1); - var e1=function(){ - if(this.nextSibling){ - this.parentNode.insertBefore(this,this.nextSibling.nextSibling); - } - } - var e2=function(){ - var that=this; - this.movetimeout=setTimeout(function(){ - e1.call(that); - },500); - } - var e3=function(){ - clearTimeout(this.movetimeout); - delete this.movetimeout; - } - var e4=function(value){ - var node=ui.create.div('.menubutton.large',value,line2,style3,function(){ - if(confirm('是否移除'+this.innerHTML+'?')){ - this.remove(); - } - }); - if(lib.config.touchscreen){ - node.ontouchstart=e2; - node.ontouchend=e3; - node.ontouchmove=e3; - } - else{ - node.oncontextmenu=e1; - node.onmousedown=e2; - node.onmouseup=e3; - node.onmouseleave=e3; - } - } - var addButton=ui.create.node('button','添加场景',line1,function(){ - e4(scenelist.value); - },{marginLeft:'6px',marginRight:'12px'}); - var sceneconfig=ui.create.selectlist([ - ['normal','默认模式'], - ['sequal','连续闯关'], - ['free','自由选关'] - ],null,line1); - var saveButton=ui.create.node('button','保存关卡',line1,function(){ - if(!scenename.value){ - alert('请填写关卡名称'); - return; - } - if(line2.childElementCount<2){ - alert('请添加至少2个场景'); - return; - } - var stage={ - name:scenename.value, - intro:sceneintro.value, - scenes:[], - mode:sceneconfig.value, - level:0 - }; - for(var i=0;i0){ - var ng=Math.floor(gridnum*nco); - for(var i=0;i0){ + var ng=Math.floor(gridnum*nco); + for(var i=0;i_status.enemyDied){ - game.forceOver(false); - } - else{ - game.forceOver(); - } - }); - ui.finishGame.classList.add('finish_game'); - ui.finishGame.parentNode.insertBefore(finishGameBr,ui.finishGame); - } + return uiintro; + } + }); + } + } + if(!event.video&&_status.mode=='combat'&&!get.config('single_control')&&!_status.boss){ + ui.single_swap=ui.create.system('换人',function(){ + var bool=false; + for(var i=0;i_status.enemyDied){ + game.forceOver(false); + } + else{ + game.forceOver(); + } + }); + ui.finishGame.classList.add('finish_game'); + ui.finishGame.parentNode.insertBefore(finishGameBr,ui.finishGame); + } - ui.create.me(); - ui.create.fakeme(); + ui.create.me(); + ui.create.fakeme(); - if(!event.video&&((_status.mode=='combat'&&get.config('zhu')&&!_status.vsboss&&game.players.length>2)||_status.mode=='three')){ - game.friendZhu=event.friendZhu; - game.friendZhu.hp++; - game.friendZhu.maxHp++; - game.friendZhu.update(); - game.friendZhu.node.identity.firstChild.innerHTML='将'; + if(!event.video&&((_status.mode=='combat'&&get.config('zhu')&&!_status.vsboss&&game.players.length>2)||_status.mode=='three')){ + game.friendZhu=event.friendZhu; + game.friendZhu.hp++; + game.friendZhu.maxHp++; + game.friendZhu.update(); + game.friendZhu.node.identity.firstChild.innerHTML='将'; - for(var i=0;i=ui.chesswidth){ - x=ui.chesswidth-1; - } - if(y>=ui.chessheight){ - y=ui.chessheight-1; - } + event.trigger('gameStart'); + game.gameDraw(p); + game.me.classList.add('current_action'); + if(_status.mode=='three'){ + game.phaseLoopThree(_status.color?game.enemyZhu:game.friendZhu); + } + else if(_status.mode=='leader'){ + game.phaseLoopOrdered(p); + } + else if(get.config('seat_order')=='指定'){ + game.phaseLoopOrdered(p); + } + else{ + game.phaseLoop(p); + } + game.setChessInfo(p); + }, + element:{ + card:{ + moveTo:function(player){ + var rect1=this.getBoundingClientRect(); + var rect2=player.getBoundingClientRect(); + var dx=rect2.left+rect2.width/2-(rect1.left+rect1.width/2); + var dy=rect2.top+rect2.height/2-(rect1.top+rect1.height/2); + this.style.transform+=' translate('+dx+'px,'+dy+'px)'; + }, + moveTox:function(player,method){ + this.fixed=true; + if(this.parentNode==ui.arena){ + var rect=player.getBoundingClientRect(); + this.style.left=(rect.left+8)+'px'; + this.style.top=(rect.top+8)+'px'; + } + else{ + this.style.left=''; + this.style.top=''; + this.dataset.position=player.dataset.position; + } + if(method=='flip'){ + this.style.transition='all 0.5s'; + this.style.transform='rotate'+(Math.random()<0.5?'X':'Y')+'(180deg) perspective(1000px)'; + } + else if(method=='rotate'){ + this.style.transition='all 0.5s'; + this.style.transform='rotate(180deg)'; + } + else{ + this.style.transition='all 0.5s'; + this.style.transform=''; + } + return this; + }, + }, + player:{ + createRangeShadow:function(num,move){ + num++; + var shadows=this.parentNode.getElementsByClassName('playergrid'); + while(shadows.length){ + shadows[0].remove(); + } + var grids=[]; + for(var i=1-num;i=ui.chesswidth){ + x=ui.chesswidth-1; + } + if(y>=ui.chessheight){ + y=ui.chessheight-1; + } - var pos=y*ui.chesswidth+x; - if(!lib.posmap[pos]){ - delete lib.posmap[this.dataset.position]; - // this.changeSeat(pos,false); - this.dataset.position=pos; - lib.posmap[pos]=this; - this.chessFocus(); - } + var pos=y*ui.chesswidth+x; + if(!lib.posmap[pos]){ + delete lib.posmap[this.dataset.position]; + // this.changeSeat(pos,false); + this.dataset.position=pos; + lib.posmap[pos]=this; + this.chessFocus(); + } - if(get.mode()=='tafang'&&!_status.video){ - if(_status.tafangend.contains(this.dataset.position)){ - if(_status.enemies.contains(this)){ - game.over(false); - } - else{ - this.delete(); - delete lib.posmap[this]; - game.players.remove(this); - _status.friends.remove(this); - this.classList.add('dead'); - if(_status.roundStart==this){ - _status.roundStart=player.next||player.getNext()||game.players[0]; - } - if(this==game.me){ - if(ui.confirm){ - ui.confirm.close(); - } - if(_status.friends.length==0){ - ui.fakeme.hide(); - this.node.handcards1.delete(); - this.node.handcards2.delete(); - game.me=ui.create.player(); - game.me.side=false; - game.addVideo('removeTafangPlayer'); - } - else{ - game.modeSwapPlayer(_status.friends[0]); - } - } - for(var i=0;i0&&this.movable(1,0)) return true; - if(dy<0&&this.movable(0,-1)) return true; - if(dy>0&&this.movable(0,1)) return true; - return false; - }, - moveTowards:function(target,forbid){ - var fxy=this.getXY(); - var txy; - if(Array.isArray(target)){ - txy=target; - } - else if(typeof target=='string'){ - var pos=parseInt(target); - txy=[pos%ui.chesswidth,Math.floor(pos/ui.chesswidth)]; - } - else{ - txy=target.getXY(); - } - var dx=txy[0]-fxy[0]; - var dy=txy[1]-fxy[1]; - forbid=forbid||[]; - if(Math.abs(dx)>Math.abs(dy)){ - if(dx<0){ - if(!forbid.contains('moveLeft')&&this.movable(-1,0)){ - this.moveLeft(); - return 'moveLeft'; - } - } - else if(dx>0){ - if(!forbid.contains('moveRight')&&this.movable(1,0)){ - this.moveRight(); - return 'moveRight'; - } - } - if(dy<0){ - if(!forbid.contains('moveUp')&&this.movable(0,-1)){ - this.moveUp(); - return 'moveUp'; - } - } - else if(dy>0){ - if(!forbid.contains('moveDown')&&this.movable(0,1)){ - this.moveDown(); - return 'moveDown'; - } - } - } - else{ - if(dy<0){ - if(!forbid.contains('moveUp')&&this.movable(0,-1)){ - this.moveUp(); - return 'moveUp'; - } - } - else if(dy>0){ - if(!forbid.contains('moveDown')&&this.movable(0,1)){ - this.moveDown(); - return 'moveDown'; - } - } - if(dx<0){ - if(!forbid.contains('moveLeft')&&this.movable(-1,0)){ - this.moveLeft(); - return 'moveLeft'; - } - } - else if(dx>0){ - if(!forbid.contains('moveRight')&&this.movable(1,0)){ - this.moveRight(); - return 'moveRight'; - } - } - } - return false; - }, - chessFocus:function(){ - game.addVideo('chessFocus',this); - if(ui.chess._chessdrag) return; - if(_status.chessscrolling) return; - var player=this; - var dx=0,dy=0; + if(get.mode()=='tafang'&&!_status.video){ + if(_status.tafangend.contains(this.dataset.position)){ + if(_status.enemies.contains(this)){ + game.over(false); + } + else{ + this.delete(); + delete lib.posmap[this]; + game.players.remove(this); + _status.friends.remove(this); + this.classList.add('dead'); + if(_status.roundStart==this){ + _status.roundStart=player.next||player.getNext()||game.players[0]; + } + if(this==game.me){ + if(ui.confirm){ + ui.confirm.close(); + } + if(_status.friends.length==0){ + ui.fakeme.hide(); + this.node.handcards1.delete(); + this.node.handcards2.delete(); + game.me=ui.create.player(); + game.me.side=false; + game.addVideo('removeTafangPlayer'); + } + else{ + game.modeSwapPlayer(_status.friends[0]); + } + } + for(var i=0;i0&&this.movable(1,0)) return true; + if(dy<0&&this.movable(0,-1)) return true; + if(dy>0&&this.movable(0,1)) return true; + return false; + }, + moveTowards:function(target,forbid){ + var fxy=this.getXY(); + var txy; + if(Array.isArray(target)){ + txy=target; + } + else if(typeof target=='string'){ + var pos=parseInt(target); + txy=[pos%ui.chesswidth,Math.floor(pos/ui.chesswidth)]; + } + else{ + txy=target.getXY(); + } + var dx=txy[0]-fxy[0]; + var dy=txy[1]-fxy[1]; + forbid=forbid||[]; + if(Math.abs(dx)>Math.abs(dy)){ + if(dx<0){ + if(!forbid.contains('moveLeft')&&this.movable(-1,0)){ + this.moveLeft(); + return 'moveLeft'; + } + } + else if(dx>0){ + if(!forbid.contains('moveRight')&&this.movable(1,0)){ + this.moveRight(); + return 'moveRight'; + } + } + if(dy<0){ + if(!forbid.contains('moveUp')&&this.movable(0,-1)){ + this.moveUp(); + return 'moveUp'; + } + } + else if(dy>0){ + if(!forbid.contains('moveDown')&&this.movable(0,1)){ + this.moveDown(); + return 'moveDown'; + } + } + } + else{ + if(dy<0){ + if(!forbid.contains('moveUp')&&this.movable(0,-1)){ + this.moveUp(); + return 'moveUp'; + } + } + else if(dy>0){ + if(!forbid.contains('moveDown')&&this.movable(0,1)){ + this.moveDown(); + return 'moveDown'; + } + } + if(dx<0){ + if(!forbid.contains('moveLeft')&&this.movable(-1,0)){ + this.moveLeft(); + return 'moveLeft'; + } + } + else if(dx>0){ + if(!forbid.contains('moveRight')&&this.movable(1,0)){ + this.moveRight(); + return 'moveRight'; + } + } + } + return false; + }, + chessFocus:function(){ + game.addVideo('chessFocus',this); + if(ui.chess._chessdrag) return; + if(_status.chessscrolling) return; + var player=this; + var dx=0,dy=0; - if(player.offsetLeft-ui.chessContainer.scrollLeft<14){ - dx=player.offsetLeft-ui.chessContainer.scrollLeft-14; - } - else if(player.offsetLeft-ui.chessContainer.scrollLeft>ui.chessContainer.offsetWidth-134){ - dx=player.offsetLeft-ui.chessContainer.scrollLeft-ui.chessContainer.offsetWidth+134; - } - if(player.offsetTop-ui.chessContainer.scrollTop<14){ - dy=player.offsetTop-ui.chessContainer.scrollTop-14; - } - else if(player.offsetTop+ui.chess.offsetTop-ui.chessContainer.scrollTop>ui.chessContainer.offsetHeight-134){ - dy=player.offsetTop+ui.chess.offsetTop-ui.chessContainer.scrollTop-ui.chessContainer.offsetHeight+134; - } - if(_status.currentChessFocus){ - cancelAnimationFrame(_status.currentChessFocus); - } - var count=lib.config.low_performance?6:12; - var ddx=Math.floor(dx/count); - var ddy=Math.floor(dy/count); - if(dx||dy){ - var chessFocus=function(){ - if(count--){ - ui.chessContainer.scrollLeft+=ddx; - ui.chessContainer.scrollTop+=ddy; - _status.currentChessFocus=requestAnimationFrame(chessFocus); - } - else{ - ui.chessContainer.scrollLeft+=dx%12; - ui.chessContainer.scrollTop+=dy%12; - cancelAnimationFrame(_status.currentChessFocus); - delete _status.currentChessFocus; - } - }; - _status.currentChessFocus=requestAnimationFrame(chessFocus); - } - }, - getXY:function(){ - var pos=parseInt(this.dataset.position); - var x=pos%ui.chesswidth; - var y=Math.floor(pos/ui.chesswidth); - return [x,y]; - }, - getDataPos:function(x,y){ - var xy=this.getXY(); - if(typeof x!='number') x=0; - if(typeof y!='number') y=0; - x+=xy[0]; - y+=xy[1]; - return x+y*ui.chesswidth; - }, - getNeighbour:function(x,y){ - var xy=this.getXY(); - if(xy[0]+x<0) return null; - if(xy[1]+y<0) return null; - if(xy[0]+x>=ui.chesswidth) return null; - if(xy[1]+y>=ui.chessheight) return null; - return lib.posmap[this.getDataPos(x,y)]||null; - }, - getNeighbours:function(){ - var players=[]; - for(var i=0;i=ui.chesswidth) return false; - if(xy[1]+y>=ui.chessheight) return false; - return !this.getNeighbour(x,y); - }, - moveRight:function(){ - if(this.movable(1,0)){ - this.move(1,0); - return true; - } - return false; - }, - moveLeft:function(){ - if(this.movable(-1,0)){ - this.move(-1,0); - return true; - } - return false; - }, - moveUp:function(){ - if(this.movable(0,-1)){ - this.move(0,-1); - return true; - } - return false; - }, - moveDown:function(){ - if(this.movable(0,1)){ - this.move(0,1); - return true; - } - return false; - }, - dieAfter:function(source){ - var player=this; - if(_status.friends){ - _status.friends.remove(this); - } - if(_status.enemies){ - _status.enemies.remove(this); - } - if(ui.friendDied&&player.side==game.me.side){ - ui.friendDied.innerHTML='阵亡: '+get.cnNumber(++_status.friendDied,true); - } - if(ui.enemyDied&&player.side!=game.me.side){ - ui.enemyDied.innerHTML='杀敌: '+get.cnNumber(++_status.enemyDied,true); - } - delete lib.posmap[player.dataset.position]; - setTimeout(function(){ - player.delete(); - },500); - for(var i=0;iui.chessContainer.offsetWidth-134){ + dx=player.offsetLeft-ui.chessContainer.scrollLeft-ui.chessContainer.offsetWidth+134; + } + if(player.offsetTop-ui.chessContainer.scrollTop<14){ + dy=player.offsetTop-ui.chessContainer.scrollTop-14; + } + else if(player.offsetTop+ui.chess.offsetTop-ui.chessContainer.scrollTop>ui.chessContainer.offsetHeight-134){ + dy=player.offsetTop+ui.chess.offsetTop-ui.chessContainer.scrollTop-ui.chessContainer.offsetHeight+134; + } + if(_status.currentChessFocus){ + cancelAnimationFrame(_status.currentChessFocus); + } + var count=lib.config.low_performance?6:12; + var ddx=Math.floor(dx/count); + var ddy=Math.floor(dy/count); + if(dx||dy){ + var chessFocus=function(){ + if(count--){ + ui.chessContainer.scrollLeft+=ddx; + ui.chessContainer.scrollTop+=ddy; + _status.currentChessFocus=requestAnimationFrame(chessFocus); + } + else{ + ui.chessContainer.scrollLeft+=dx%12; + ui.chessContainer.scrollTop+=dy%12; + cancelAnimationFrame(_status.currentChessFocus); + delete _status.currentChessFocus; + } + }; + _status.currentChessFocus=requestAnimationFrame(chessFocus); + } + }, + getXY:function(){ + var pos=parseInt(this.dataset.position); + var x=pos%ui.chesswidth; + var y=Math.floor(pos/ui.chesswidth); + return [x,y]; + }, + getDataPos:function(x,y){ + var xy=this.getXY(); + if(typeof x!='number') x=0; + if(typeof y!='number') y=0; + x+=xy[0]; + y+=xy[1]; + return x+y*ui.chesswidth; + }, + getNeighbour:function(x,y){ + var xy=this.getXY(); + if(xy[0]+x<0) return null; + if(xy[1]+y<0) return null; + if(xy[0]+x>=ui.chesswidth) return null; + if(xy[1]+y>=ui.chessheight) return null; + return lib.posmap[this.getDataPos(x,y)]||null; + }, + getNeighbours:function(){ + var players=[]; + for(var i=0;i=ui.chesswidth) return false; + if(xy[1]+y>=ui.chessheight) return false; + return !this.getNeighbour(x,y); + }, + moveRight:function(){ + if(this.movable(1,0)){ + this.move(1,0); + return true; + } + return false; + }, + moveLeft:function(){ + if(this.movable(-1,0)){ + this.move(-1,0); + return true; + } + return false; + }, + moveUp:function(){ + if(this.movable(0,-1)){ + this.move(0,-1); + return true; + } + return false; + }, + moveDown:function(){ + if(this.movable(0,1)){ + this.move(0,1); + return true; + } + return false; + }, + dieAfter:function(source){ + var player=this; + if(_status.friends){ + _status.friends.remove(this); + } + if(_status.enemies){ + _status.enemies.remove(this); + } + if(ui.friendDied&&player.side==game.me.side){ + ui.friendDied.innerHTML='阵亡: '+get.cnNumber(++_status.friendDied,true); + } + if(ui.enemyDied&&player.side!=game.me.side){ + ui.enemyDied.innerHTML='杀敌: '+get.cnNumber(++_status.enemyDied,true); + } + delete lib.posmap[player.dataset.position]; + setTimeout(function(){ + player.delete(); + },500); + for(var i=0;i1){ - if(cards){ - that.$gain(cards,null,false) - } - else{ - that.$gain(num-1,null,false) - } - } - }, - $throw:function(card,time,init){ - if(init!==false){ - if(get.itemtype(card)!='cards'){ - if(get.itemtype(card)=='card'){ - card=[card]; - } - else{ - return; - } - } - game.addVideo('throw',this,[get.cardsInfo(card),time]); - } - this.chessFocus(); - if(get.itemtype(card)=='cards'){ - for(var i=0;i=0){ - for(var i=0;i1){ + if(cards){ + that.$gain(cards,null,false) + } + else{ + that.$gain(num-1,null,false) + } + } + }, + $throw:function(card,time,init){ + if(init!==false){ + if(get.itemtype(card)!='cards'){ + if(get.itemtype(card)=='card'){ + card=[card]; + } + else{ + return; + } + } + game.addVideo('throw',this,[get.cardsInfo(card),time]); + } + this.chessFocus(); + if(get.itemtype(card)=='cards'){ + for(var i=0;i=0){ + for(var i=0;i=ui.chessContainer.offsetHeight){ - amin=0; - amax=90; - } - else{ - amin=-90; - amax=90; - } - } - else if(rect.left+rect.width+80>=ui.chessContainer.offsetWidth){ - if(rect.top<=80){ - amin=180; - amax=270; - } - else if(rect.top+rect.height+80>=ui.chessContainer.offsetHeight){ - amin=90; - amax=180; - } - else{ - amin=90; - amax=270; - } - } - else if(rect.top<=80){ - amin=180; - amax=360; - } - else if(rect.top+rect.height+80>=ui.chessContainer.offsetHeight){ - amin=0; - amax=180; - } - else{ - var dx=ui.chessContainer.offsetWidth/2-(rect.left+rect.width/2); - var dy=-ui.chessContainer.offsetHeight/2+(rect.top+rect.height/2); - var ang=Math.abs(Math.atan(dy/dx))*180/Math.PI; - if(dx<0){ - if(dy>0){ - ang=180-ang; - } - else{ - ang+=180; - } - } - else if(dy<0){ - ang=360-ang; - } - amin=ang-180; - amax=ang+180; - } - var da=(amax-amin)/(thrown.length*2); - if(da>30&&thrown.length>1){ - amin+=(da-30)*thrown.length; - da=30; - } - for(var i=0;i=ui.chessContainer.offsetHeight){ + amin=0; + amax=90; + } + else{ + amin=-90; + amax=90; + } + } + else if(rect.left+rect.width+80>=ui.chessContainer.offsetWidth){ + if(rect.top<=80){ + amin=180; + amax=270; + } + else if(rect.top+rect.height+80>=ui.chessContainer.offsetHeight){ + amin=90; + amax=180; + } + else{ + amin=90; + amax=270; + } + } + else if(rect.top<=80){ + amin=180; + amax=360; + } + else if(rect.top+rect.height+80>=ui.chessContainer.offsetHeight){ + amin=0; + amax=180; + } + else{ + var dx=ui.chessContainer.offsetWidth/2-(rect.left+rect.width/2); + var dy=-ui.chessContainer.offsetHeight/2+(rect.top+rect.height/2); + var ang=Math.abs(Math.atan(dy/dx))*180/Math.PI; + if(dx<0){ + if(dy>0){ + ang=180-ang; + } + else{ + ang+=180; + } + } + else if(dy<0){ + ang=360-ang; + } + amin=ang-180; + amax=ang+180; + } + var da=(amax-amin)/(thrown.length*2); + if(da>30&&thrown.length>1){ + amin+=(da-30)*thrown.length; + da=30; + } + for(var i=0;i.player'+pos+ - '{left:'+(14+i*148)+'px;top:'+(14+j*148)+'px}',0); - ui.chesssheet.sheet.insertRule('#arena.chess #chess>.card'+pos+ - '{left:'+(22+i*148)+'px;top:'+(22+j*148)+'px}',0); - ui.chesssheet.sheet.insertRule('#arena.chess #chess>.popup'+pos+ - '{left:'+(19+i*148)+'px;top:'+(142+j*148)+'px}',0); - } - } - }, - getVideoName:function(){ - var str='战棋'+get.translation(_status.mode)+' - '+_status.friendCount+'v'+_status.enemyCount; - var name=[get.translation(game.me.name),str]; - return name; - }, - addChessPlayer:function(name,enemy,num,pos){ - if(typeof num!='number'){ - num=4; - } - var player=ui.create.player(); - player.getId(); - if(enemy=='treasure'){ - player.animate('judgestart'); - player.side=null; - player.identity='neutral'; - player.setIdentity(); - player.node.identity.dataset.color='zhong'; - player.classList.add('treasure'); - player.node.hp.classList.add('treasure'); - player.life=6+Math.floor(Math.random()*6); - game.treasures.add(player); - } - else{ - player.animate('start'); - if(enemy){ - if(get.mode()=='tafang'){ - player.side=true; - } - else{ - player.side=!game.me.side; - } - player.setIdentity('enemy'); - player.identity='enemy'; - } - else{ - if(get.mode()=='tafang'){ - player.side=false; - } - else{ - player.side=game.me.side; - } - player.setIdentity('friend'); - player.identity='friend'; - } - player.node.identity.dataset.color=get.translation(player.side+'Color'); - game.players.push(player); - // if(lib.config.animation){ - // setTimeout(function(){ - // player.$rare2(); - // },300); - // } - } - ui.chess.appendChild(player); - if(_status.video||(pos&&!lib.posmap[pos])){ - player.dataset.position=pos; - } - else{ - var grids=[]; - var gridnum=ui.chessheight*ui.chesswidth; - for(var i=0;i.player'+pos+ + '{left:'+(14+i*148)+'px;top:'+(14+j*148)+'px}',0); + ui.chesssheet.sheet.insertRule('#arena.chess #chess>.card'+pos+ + '{left:'+(22+i*148)+'px;top:'+(22+j*148)+'px}',0); + ui.chesssheet.sheet.insertRule('#arena.chess #chess>.popup'+pos+ + '{left:'+(19+i*148)+'px;top:'+(142+j*148)+'px}',0); + } + } + }, + getVideoName:function(){ + var str='战棋'+get.translation(_status.mode)+' - '+_status.friendCount+'v'+_status.enemyCount; + var name=[get.translation(game.me.name),str]; + return name; + }, + addChessPlayer:function(name,enemy,num,pos){ + if(typeof num!='number'){ + num=4; + } + var player=ui.create.player(); + player.getId(); + if(enemy=='treasure'){ + player.animate('judgestart'); + player.side=null; + player.identity='neutral'; + player.setIdentity(); + player.node.identity.dataset.color='zhong'; + player.classList.add('treasure'); + player.node.hp.classList.add('treasure'); + player.life=6+Math.floor(Math.random()*6); + game.treasures.add(player); + } + else{ + player.animate('start'); + if(enemy){ + if(get.mode()=='tafang'){ + player.side=true; + } + else{ + player.side=!game.me.side; + } + player.setIdentity('enemy'); + player.identity='enemy'; + } + else{ + if(get.mode()=='tafang'){ + player.side=false; + } + else{ + player.side=game.me.side; + } + player.setIdentity('friend'); + player.identity='friend'; + } + player.node.identity.dataset.color=get.translation(player.side+'Color'); + game.players.push(player); + // if(lib.config.animation){ + // setTimeout(function(){ + // player.$rare2(); + // },300); + // } + } + ui.chess.appendChild(player); + if(_status.video||(pos&&!lib.posmap[pos])){ + player.dataset.position=pos; + } + else{ + var grids=[]; + var gridnum=ui.chessheight*ui.chesswidth; + for(var i=0;i=ui.chesswidth){ - x=ui.chesswidth-1; - } - if(y>=ui.chessheight){ - y=ui.chessheight-1; - } + return player; + }, + replaceChessPlayer:function(name,enemy){ + var next=game.createEvent('replaceChessPlayer'); + next.playername=name; + next.enemy=enemy; + next.setContent('replaceChessPlayer'); + }, + removeTreasure:function(player){ + game.addVideo('removeTreasure',null,player.dataset.position); + player.delete(); + delete lib.posmap[player.dataset.position]; + game.treasures.remove(player); + }, + addObstacle:function(x,y){ + if(y!==false){ + game.addVideo('addObstacle',null,[x,y]); + } + var pos; + if(typeof x=='string'){ + pos=x; + } + else{ + if(x>=ui.chesswidth){ + x=ui.chesswidth-1; + } + if(y>=ui.chessheight){ + y=ui.chessheight-1; + } - pos=y*ui.chesswidth+x; - } - if(!lib.posmap[pos]){ - var grid=ui.create.div('.player.minskin.obstacle',ui.chess).animate('start'); - grid.dataset.position=pos; - grid.listen(ui.click.obstacle); - lib.posmap[pos]=grid; - game.obstacles.push(grid); - return grid; - } - return null; - }, - addTempObstacle:function(x,y,num){ - var node=game.addObstacle(x,y); - if(node){ - game.colorObstacle(node,'blue'); - node.tempObstacle=num; - } - }, - removeObstacle:function(pos){ - if(get.is.div(pos)){ - pos=pos.dataset.position; - } - var node=lib.posmap[pos]; - if(node&&game.obstacles.contains(node)){ - game.addVideo('removeObstacle',null,pos); - game.obstacles.remove(node); - delete lib.posmap[pos]; - node.delete(); - } - }, - moveObstacle:function(pos,x,y){ - if(get.is.div(pos)){ - pos=pos.dataset.position; - } - var node=lib.posmap[pos]; - if(node&&game.obstacles.contains(node)){ - pos=parseInt(pos); - var x2=pos%ui.chesswidth+x; - var y2=Math.floor(pos/ui.chesswidth)+y; - if(x2>=ui.chesswidth){ - x2=ui.chesswidth-1; - } - if(y2>=ui.chessheight){ - y2=ui.chessheight-1; - } - if(x2<0){ - x2=0; - } - if(y2<0){ - y2=0; - } - var pos2=y2*ui.chesswidth+x2; - if(!lib.posmap[pos2]){ - game.addVideo('moveObstacle',null,[pos,x,y]); - node.dataset.position=pos2; - delete lib.posmap[pos]; - lib.posmap[pos2]=node; - return true; - } - } - return false; - }, - colorObstacle:function(pos,color){ - if(get.is.div(pos)){ - pos=pos.dataset.position; - } - var node=lib.posmap[pos]; - if(node&&game.obstacles.contains(node)){ - game.addVideo('colorObstacle',null,[pos,color]); - node.dataset.obscolor=color; - } - }, - addOverDialog:function(dialog,result){ - if(ui.finishGame){ - ui.finishGame.remove(); - } - dialog.classList.add('center'); - if(_status.mode!='leader') return; - if(result=='战斗胜利'){ - _status.victory=true; - if(!_status.enterArena){ - var div=ui.create.div(); - div.innerHTML='获得'+game.reward+'金'; - dialog.add(div); - if(_status.challenge&&_status.challengeMoney<=game.data.dust){ - var div2=ui.create.div(); - div2.style.display='block'; - div2.innerHTML='招降所需招募令:'+_status.challengeMoney+'/'+game.data.dust; - dialog.add(div2); - } - game.changeMoney(game.reward); - game.saveData(); - } - } - else if(_status.zhaoxiang){ - var div=ui.create.div(); - div.innerHTML='招降'+get.translation(_status.zhaoxiang)+'成功'; - dialog.add(div); - } - }, - controlOver:function(){ - if(_status.mode=='three'){ - ui.create.control('再战',function(){ - game.saveConfig('continue_name_chess',{ - friend:_status.friendBackup, - enemy:_status.enemyBackup, - color:_status.color - }); - game.saveConfig('mode',lib.config.mode); - localStorage.setItem(lib.configprefix+'directstart',true); - game.reload(); - }); - } - ui.create.control('返回',game.reload); - if(_status.mode!='leader') return; - if(_status.enterArena){ - game.data.arena.acted.length=0; - if(_status.victory){ - game.data.arena.win++; - for(var i=0;i=money){ - ui.create.control('招降'+get.translation(_status.challenge),function(){ - game.data.character.add(_status.challenge); - game.data.challenge=game.getLeaderList(); - game.changeDust(-money); - game.reload(); - }); - } - } - } - }, - phaseLoopThree:function(player){ - var next=game.createEvent('phaseLoop'); - next.player=player; - next.swap=function(player){ - if(player.side==game.me.side){ - return game.enemyZhu; - } - else{ - return game.me; - } - }, - next.setContent(function(){ - 'step 0' - player.classList.add('acted'); - player.phase(); - 'step 1' - if(player!=game.friendZhu&&player!=game.enemyZhu){ - for(var i=0;inum1){ - if(next.side==game.me.side){ - next=game.me; - } - var str; - if(num2-num1>1){ - str='选择至多'+get.cnNumber(num2-num1)+'个已方角色各摸一张牌' - } - else{ - str='选择一个已方角色摸一张牌' - } - var nevt=next.chooseTarget(str,function(card,player,target){ - return target.side==next.side; - },[1,num2-num1]); - nevt.ai=function(target){ - return Math.max(1,10-target.countCards('h')); - }; - nevt.includeOut=true; - nevt.chessForceAll=true; - } - else{ - game.delay(); - event.goto(2); - } - } - else{ - event.goto(2); - } - "step 1" - if(result.bool){ - game.asyncDraw(result.targets); - } - "step 2" - if(player.side==game.me.side){ - player=game.me; - } - if(player.isDead()){ - for(var i=0;i1){ - var nevt=player.chooseTarget('选择下一个行动的角色',function(card,player,target){ - return target.side==player.side&&!target.classList.contains('acted'); - },true); - nevt.chessForceAll=true; - nevt.includeOut=true; - nevt.ai=function(target){ - var nj=target.countCards('j'); - if(nj){ - return -nj; - } - return Math.max(0,10-target.hp); - } - } - else if(players.length){ - event.decided=players[0]; - } - else{ - event.player=game.findPlayer(function(current){ - return current.side!=player.side; - }); - event.goto(0); - } - "step 3" - if(event.decided){ - event.decided.phase(); - event.justacted=event.decided; - delete event.decided; - } - else{ - var current=result.targets[0]; - current.phase(); - event.justacted=current; - } - "step 4" - event.justacted.classList.add('acted'); - event.goto(0); - for(var i=0;i=ui.chesswidth){ + x2=ui.chesswidth-1; + } + if(y2>=ui.chessheight){ + y2=ui.chessheight-1; + } + if(x2<0){ + x2=0; + } + if(y2<0){ + y2=0; + } + var pos2=y2*ui.chesswidth+x2; + if(!lib.posmap[pos2]){ + game.addVideo('moveObstacle',null,[pos,x,y]); + node.dataset.position=pos2; + delete lib.posmap[pos]; + lib.posmap[pos2]=node; + return true; + } + } + return false; + }, + colorObstacle:function(pos,color){ + if(get.is.div(pos)){ + pos=pos.dataset.position; + } + var node=lib.posmap[pos]; + if(node&&game.obstacles.contains(node)){ + game.addVideo('colorObstacle',null,[pos,color]); + node.dataset.obscolor=color; + } + }, + addOverDialog:function(dialog,result){ + if(ui.finishGame){ + ui.finishGame.remove(); + } + dialog.classList.add('center'); + if(_status.mode!='leader') return; + if(result=='战斗胜利'){ + _status.victory=true; + if(!_status.enterArena){ + var div=ui.create.div(); + div.innerHTML='获得'+game.reward+'金'; + dialog.add(div); + if(_status.challenge&&_status.challengeMoney<=game.data.dust){ + var div2=ui.create.div(); + div2.style.display='block'; + div2.innerHTML='招降所需招募令:'+_status.challengeMoney+'/'+game.data.dust; + dialog.add(div2); + } + game.changeMoney(game.reward); + game.saveData(); + } + } + else if(_status.zhaoxiang){ + var div=ui.create.div(); + div.innerHTML='招降'+get.translation(_status.zhaoxiang)+'成功'; + dialog.add(div); + } + }, + controlOver:function(){ + if(_status.mode=='three'){ + ui.create.control('再战',function(){ + game.saveConfig('continue_name_chess',{ + friend:_status.friendBackup, + enemy:_status.enemyBackup, + color:_status.color + }); + game.saveConfig('mode',lib.config.mode); + localStorage.setItem(lib.configprefix+'directstart',true); + game.reload(); + }); + } + ui.create.control('返回',game.reload); + if(_status.mode!='leader') return; + if(_status.enterArena){ + game.data.arena.acted.length=0; + if(_status.victory){ + game.data.arena.win++; + for(var i=0;i=money){ + ui.create.control('招降'+get.translation(_status.challenge),function(){ + game.data.character.add(_status.challenge); + game.data.challenge=game.getLeaderList(); + game.changeDust(-money); + game.reload(); + }); + } + } + } + }, + phaseLoopThree:function(player){ + var next=game.createEvent('phaseLoop'); + next.player=player; + next.swap=function(player){ + if(player.side==game.me.side){ + return game.enemyZhu; + } + else{ + return game.me; + } + }, + next.setContent(function(){ + 'step 0' + player.classList.add('acted'); + player.phase(); + 'step 1' + if(player!=game.friendZhu&&player!=game.enemyZhu){ + for(var i=0;inum1){ + if(next.side==game.me.side){ + next=game.me; + } + var str; + if(num2-num1>1){ + str='选择至多'+get.cnNumber(num2-num1)+'个已方角色各摸一张牌' + } + else{ + str='选择一个已方角色摸一张牌' + } + var nevt=next.chooseTarget(str,function(card,player,target){ + return target.side==next.side; + },[1,num2-num1]); + nevt.ai=function(target){ + return Math.max(1,10-target.countCards('h')); + }; + nevt.includeOut=true; + nevt.chessForceAll=true; + } + else{ + game.delay(); + event.goto(2); + } + } + else{ + event.goto(2); + } + "step 1" + if(result.bool){ + game.asyncDraw(result.targets); + } + "step 2" + if(player.side==game.me.side){ + player=game.me; + } + if(player.isDead()){ + for(var i=0;i1){ + var nevt=player.chooseTarget('选择下一个行动的角色',function(card,player,target){ + return target.side==player.side&&!target.classList.contains('acted'); + },true); + nevt.chessForceAll=true; + nevt.includeOut=true; + nevt.ai=function(target){ + var nj=target.countCards('j'); + if(nj){ + return -nj; + } + return Math.max(0,10-target.hp); + } + } + else if(players.length){ + event.decided=players[0]; + } + else{ + event.player=game.findPlayer(function(current){ + return current.side!=player.side; + }); + event.goto(0); + } + "step 3" + if(event.decided){ + event.decided.phase(); + event.justacted=event.decided; + delete event.decided; + } + else{ + var current=result.targets[0]; + current.phase(); + event.justacted=current; + } + "step 4" + event.justacted.classList.add('acted'); + event.goto(0); + for(var i=0;i'+game.data.money+'金币'); - uiintro.addText('通过战斗或竞技场可获得金币。花费100金币可招募3名随机武将;花费150金币可参加一次竞技场'); - uiintro.add(''+game.data.dust+'招募令'); - uiintro.addText('通过遣返武将或竞技场可获得招募令。挑战武将成功后可通过招募令招募该武将,普通/稀有/史诗/传说武将分别花费40/100/400/1600招募令'); - }); - ui.money.innerHTML=''+game.data.dust+''+ - ''+game.data.money+''; - ui.money.style.top='auto'; - ui.money.style.left='auto'; - ui.money.style.right='20px'; - ui.money.style.bottom='15px'; - ui.money.childNodes[0].style.color='rgb(111, 198, 255)'; - ui.money.childNodes[1].style.fontFamily='huangcao'; - ui.money.childNodes[1].style.marginRight='10px'; - ui.money.childNodes[2].style.color='#FFE600'; - ui.money.childNodes[3].style.fontFamily='huangcao'; - ui.money.style.letterSpacing='4px'; - for(var i in lib.rank){ - if(Array.isArray(lib.rank[i])){ - for(var j=0;j'+game.data.money+'金币'); + uiintro.addText('通过战斗或竞技场可获得金币。花费100金币可招募3名随机武将;花费150金币可参加一次竞技场'); + uiintro.add(''+game.data.dust+'招募令'); + uiintro.addText('通过遣返武将或竞技场可获得招募令。挑战武将成功后可通过招募令招募该武将,普通/稀有/史诗/传说武将分别花费40/100/400/1600招募令'); + }); + ui.money.innerHTML=''+game.data.dust+''+ + ''+game.data.money+''; + ui.money.style.top='auto'; + ui.money.style.left='auto'; + ui.money.style.right='20px'; + ui.money.style.bottom='15px'; + ui.money.childNodes[0].style.color='rgb(111, 198, 255)'; + ui.money.childNodes[1].style.fontFamily='huangcao'; + ui.money.childNodes[1].style.marginRight='10px'; + ui.money.childNodes[2].style.color='#FFE600'; + ui.money.childNodes[3].style.fontFamily='huangcao'; + ui.money.style.letterSpacing='4px'; + for(var i in lib.rank){ + if(Array.isArray(lib.rank[i])){ + for(var j=0;jb?1:-1; - } - return aa>bb?1:-1; - }); - if(game.data.character.length==0||!game.data.challenge){ - game.data.character=lib.rank.rarity.common.randomGets(3); - game.data.challenge=game.getLeaderList(); - game.saveData(); - } - var fixButton=function(button){ - var rarity=game.getRarity(button.link); - if(rarity!='common'){ - var intro=button.node.intro; - intro.classList.add('showintro'); - intro.style.fontFamily='huangcao'; - intro.style.fontSize='20px'; - intro.style.top='82px'; - intro.style.left='2px'; - switch(rarity){ - case 'rare':intro.dataset.nature='waterm';break; - case 'epic':intro.dataset.nature='thunderm';break; - case 'legend':intro.dataset.nature='metalm';break; - } - intro.innerHTML=get.translation(rarity); - } - } - game.leaderLord=['leader_caocao','leader_liubei','leader_sunquan']; - var dialog1=ui.create.dialog('选择君主','hidden'); - event.dialog1=dialog1; - dialog1.classList.add('fullheight'); - dialog1.classList.add('halfleft'); - dialog1.classList.add('fixed'); - dialog1.classList.add('pointerbutton'); - dialog1.add([game.leaderLord,'character']); - var i; - for(i=0;ib?1:-1; - }); - captnode.innerHTML=''; - for(i=0;ib?1:-1; + } + return aa>bb?1:-1; + }); + if(game.data.character.length==0||!game.data.challenge){ + game.data.character=lib.rank.rarity.common.randomGets(3); + game.data.challenge=game.getLeaderList(); + game.saveData(); + } + var fixButton=function(button){ + var rarity=game.getRarity(button.link); + if(rarity!='common'){ + var intro=button.node.intro; + intro.classList.add('showintro'); + intro.style.fontFamily='huangcao'; + intro.style.fontSize='20px'; + intro.style.top='82px'; + intro.style.left='2px'; + switch(rarity){ + case 'rare':intro.dataset.nature='waterm';break; + case 'epic':intro.dataset.nature='thunderm';break; + case 'legend':intro.dataset.nature='metalm';break; + } + intro.innerHTML=get.translation(rarity); + } + } + game.leaderLord=['leader_caocao','leader_liubei','leader_sunquan']; + var dialog1=ui.create.dialog('选择君主','hidden'); + event.dialog1=dialog1; + dialog1.classList.add('fullheight'); + dialog1.classList.add('halfleft'); + dialog1.classList.add('fixed'); + dialog1.classList.add('pointerbutton'); + dialog1.add([game.leaderLord,'character']); + var i; + for(i=0;ib?1:-1; + }); + captnode.innerHTML=''; + for(i=0;i3&&selected.character.length){ - event.removeCharacter.animate('controlpressdownx',500); - event.removeCharacter.classList.remove('disabled'); - } - if(game.data.money<150&&!game.data._arena){ - event.enterArena.classList.add('disabled'); - } - else{ - event.enterArena.animate('controlpressdownx',500); - event.enterArena.classList.remove('disabled'); - } - if(game.data.money<100){ - event.addCharacter.classList.add('disabled'); - } - else{ - event.addCharacter.animate('controlpressdownx',500); - event.addCharacter.classList.remove('disabled'); - } - initcapt(); - },200); - },200); - },500); - }; - event.addCharacter=ui.create.control('招募','nozoom',zhaomu2); - if(game.data.money<150&&!game.data._arena){ - event.enterArena.classList.add('disabled'); - } - if(game.data.money<100){ - event.addCharacter.classList.add('disabled'); - } - var qianfan=function(){ - if(_status.kaibao) return; - if(game.data.character.length<=3) return; - if(!selected.character.length) return; - // _status.chessclicked=true; - // _status.qianfan=true; - // event.enterArena.style.opacity=0.5; - // event.addCharacter.style.opacity=0.5; - // event.fight.style.opacity=0.5; - var current=selected.character.slice(0); - clearSelected(); - var maxq=game.data.character.length-3; - if(current.length<=maxq){ - for(var i=0;i=100){ - event.addCharacter.animate('controlpressdownx',500); - event.addCharacter.classList.remove('disabled'); - } - if(game.data.money>=150){ - event.enterArena.animate('controlpressdownx',500); - event.enterArena.classList.remove('disabled'); - } - node.delete(); - dialog1.buttons.remove(node); - } - initcapt(); - } - }; - event.removeCharacter=ui.create.control('遣返','nozoom',qianfan); - event.removeCharacter.classList.add('disabled'); - event.fight=ui.create.control('开始战斗','nozoom',function(){ - if(_status.kaibao||_status.qianfan) return; - if(selected.challenge.length){ - var cname=selected.challenge[0].link; - var rarity=game.getRarity(cname); - switch(rarity){ - case 'common':rarity=40;break; - case 'rare':rarity=100;break; - case 'epic':rarity=400;break; - case 'legend':rarity=1600;break; - } - if(!confirm('即将挑战'+get.translation(cname)+',战斗胜利后可消耗'+rarity+'招募令招募该武将,无论是否招募,挑战列表将被刷新。是否继续?')){ - return; - } - } - _status.enemylist=[]; - _status.mylist=[]; - if(selected.lord.length){ - _status.mylist.push(selected.lord[0].link); - _status.lord=selected.lord[0].link; - } - if(selected.character.length){ - for(var i=0;i0){ - switch(difficulty){ - case 'leader_easy':reward+=10*numdel;break; - case 'leader_medium':reward+=20*numdel;break; - case 'leader_hard':reward+=40*numdel;break; - } - } - var punish=0; - for(var i=0;i<_status.mylist.length;i++){ - switch(get.rank(_status.mylist[i])){ - case 's':punish+=25;break; - case 'ap':punish+=20;break; - case 'a':punish+=16;break; - case 'am':punish+=12;break; - case 'bp':punish+=9;break; - case 'b':punish+=7;break; - case 'bm':punish+=5;break; - case 'c':punish+=3;break; - case 'd':punish+=2;break; - } - } - if(numdel<0){ - switch(difficulty){ - case 'leader_easy':punish-=5*numdel;break; - case 'leader_medium':punish-=10*numdel;break; - case 'leader_hard':punish-=20*numdel;break; - } - } - game.reward=Math.max(3*_status.enemylist.length,reward-punish); - if(!_status.lord){ - switch(difficulty){ - case 'leader_easy':game.reward+=10;break; - case 'leader_medium':game.reward+=20;break; - case 'leader_hard':game.reward+=40;break; - } - } - game.resume(); - }); - event.custom.replace.button=function(button){ - if(_status.kaibao) return; - if(button.classList.contains('unselectable')&& - !button.classList.contains('selected')) return; - _status.chessclicked=true; - button.classList.toggle('selected'); - if(button.classList.contains('selected')){ - selected[button.area].add(button); - } - else{ - selected[button.area].remove(button); - } - switch(button.area){ - case 'lord':{ - for(var i=0;i5)|| - (_status.qianfan&&selected.character.length>=maxq)){ - dialog1.buttons[i].classList.add('unselectable'); - } - else{ - dialog1.buttons[i].classList.remove('unselectable'); - } - } - } - break; - } - case 'difficulty':case 'number':{ - for(var i=0;i3){ - event.removeCharacter.animate('controlpressdownx',500); - event.removeCharacter.classList.remove('disabled'); - } - else{ - event.removeCharacter.classList.add('disabled'); - } - }; - event.custom.add.window=function(){ - if(!_status.kaibao){ - var glows=document.querySelectorAll('.button.glow2'); - for(var i=0;i=100){ - event.addCharacter.animate('controlpressdownx',500); - event.addCharacter.classList.remove('disabled'); - } - else{ - event.addCharacter.classList.add('disabled'); - } - if(game.data.money>=150||game.data._arena){ - event.enterArena.animate('controlpressdownx',500); - event.enterArena.classList.remove('disabled'); - } - else{ - event.enterArena.classList.add('disabled'); - } - event.fight.style.opacity=1; - } - clearSelected(); - }; - lib.init.onfree(); - game.pause(); - 'step 2' - if(!game.data.arena){ - event.dialog1.close(); - event.dialog2.close(); - event.fight.close(); - event.enterArena.close(); - event.addCharacter.close(); - event.removeCharacter.close(); - } - ui.arena.classList.add('leaderhide'); - ui.money.hide(); - game.delay(); - 'step 3' - ui.arena.classList.remove('leaderhide'); - if(!_status.enterArena){ - ui.wuxie.show(); - ui.auto.show(); - ui.control.style.top=''; - if(!get.is.safari()){ - ui.control.style.transition=''; - ui.control.style.display='none'; - } - event.finish(); - } - else{ - game.minskin=false; - event.arenanodes=[]; - event.arenachoice=[]; - event.arenachoicenodes=[]; - event.arrangeNodes=function(){ - var num=event.arenachoicenodes.length; - var width=num*75+(num-1)*8; - for(var i=0;i=3){ - for(var i=0;i3&&selected.character.length){ + event.removeCharacter.animate('controlpressdownx',500); + event.removeCharacter.classList.remove('disabled'); + } + if(game.data.money<150&&!game.data._arena){ + event.enterArena.classList.add('disabled'); + } + else{ + event.enterArena.animate('controlpressdownx',500); + event.enterArena.classList.remove('disabled'); + } + if(game.data.money<100){ + event.addCharacter.classList.add('disabled'); + } + else{ + event.addCharacter.animate('controlpressdownx',500); + event.addCharacter.classList.remove('disabled'); + } + initcapt(); + },200); + },200); + },500); + }; + event.addCharacter=ui.create.control('招募','nozoom',zhaomu2); + if(game.data.money<150&&!game.data._arena){ + event.enterArena.classList.add('disabled'); + } + if(game.data.money<100){ + event.addCharacter.classList.add('disabled'); + } + var qianfan=function(){ + if(_status.kaibao) return; + if(game.data.character.length<=3) return; + if(!selected.character.length) return; + // _status.chessclicked=true; + // _status.qianfan=true; + // event.enterArena.style.opacity=0.5; + // event.addCharacter.style.opacity=0.5; + // event.fight.style.opacity=0.5; + var current=selected.character.slice(0); + clearSelected(); + var maxq=game.data.character.length-3; + if(current.length<=maxq){ + for(var i=0;i=100){ + event.addCharacter.animate('controlpressdownx',500); + event.addCharacter.classList.remove('disabled'); + } + if(game.data.money>=150){ + event.enterArena.animate('controlpressdownx',500); + event.enterArena.classList.remove('disabled'); + } + node.delete(); + dialog1.buttons.remove(node); + } + initcapt(); + } + }; + event.removeCharacter=ui.create.control('遣返','nozoom',qianfan); + event.removeCharacter.classList.add('disabled'); + event.fight=ui.create.control('开始战斗','nozoom',function(){ + if(_status.kaibao||_status.qianfan) return; + if(selected.challenge.length){ + var cname=selected.challenge[0].link; + var rarity=game.getRarity(cname); + switch(rarity){ + case 'common':rarity=40;break; + case 'rare':rarity=100;break; + case 'epic':rarity=400;break; + case 'legend':rarity=1600;break; + } + if(!confirm('即将挑战'+get.translation(cname)+',战斗胜利后可消耗'+rarity+'招募令招募该武将,无论是否招募,挑战列表将被刷新。是否继续?')){ + return; + } + } + _status.enemylist=[]; + _status.mylist=[]; + if(selected.lord.length){ + _status.mylist.push(selected.lord[0].link); + _status.lord=selected.lord[0].link; + } + if(selected.character.length){ + for(var i=0;i0){ + switch(difficulty){ + case 'leader_easy':reward+=10*numdel;break; + case 'leader_medium':reward+=20*numdel;break; + case 'leader_hard':reward+=40*numdel;break; + } + } + var punish=0; + for(var i=0;i<_status.mylist.length;i++){ + switch(get.rank(_status.mylist[i])){ + case 's':punish+=25;break; + case 'ap':punish+=20;break; + case 'a':punish+=16;break; + case 'am':punish+=12;break; + case 'bp':punish+=9;break; + case 'b':punish+=7;break; + case 'bm':punish+=5;break; + case 'c':punish+=3;break; + case 'd':punish+=2;break; + } + } + if(numdel<0){ + switch(difficulty){ + case 'leader_easy':punish-=5*numdel;break; + case 'leader_medium':punish-=10*numdel;break; + case 'leader_hard':punish-=20*numdel;break; + } + } + game.reward=Math.max(3*_status.enemylist.length,reward-punish); + if(!_status.lord){ + switch(difficulty){ + case 'leader_easy':game.reward+=10;break; + case 'leader_medium':game.reward+=20;break; + case 'leader_hard':game.reward+=40;break; + } + } + game.resume(); + }); + event.custom.replace.button=function(button){ + if(_status.kaibao) return; + if(button.classList.contains('unselectable')&& + !button.classList.contains('selected')) return; + _status.chessclicked=true; + button.classList.toggle('selected'); + if(button.classList.contains('selected')){ + selected[button.area].add(button); + } + else{ + selected[button.area].remove(button); + } + switch(button.area){ + case 'lord':{ + for(var i=0;i5)|| + (_status.qianfan&&selected.character.length>=maxq)){ + dialog1.buttons[i].classList.add('unselectable'); + } + else{ + dialog1.buttons[i].classList.remove('unselectable'); + } + } + } + break; + } + case 'difficulty':case 'number':{ + for(var i=0;i3){ + event.removeCharacter.animate('controlpressdownx',500); + event.removeCharacter.classList.remove('disabled'); + } + else{ + event.removeCharacter.classList.add('disabled'); + } + }; + event.custom.add.window=function(){ + if(!_status.kaibao){ + var glows=document.querySelectorAll('.button.glow2'); + for(var i=0;i=100){ + event.addCharacter.animate('controlpressdownx',500); + event.addCharacter.classList.remove('disabled'); + } + else{ + event.addCharacter.classList.add('disabled'); + } + if(game.data.money>=150||game.data._arena){ + event.enterArena.animate('controlpressdownx',500); + event.enterArena.classList.remove('disabled'); + } + else{ + event.enterArena.classList.add('disabled'); + } + event.fight.style.opacity=1; + } + clearSelected(); + }; + lib.init.onfree(); + game.pause(); + 'step 2' + if(!game.data.arena){ + event.dialog1.close(); + event.dialog2.close(); + event.fight.close(); + event.enterArena.close(); + event.addCharacter.close(); + event.removeCharacter.close(); + } + ui.arena.classList.add('leaderhide'); + ui.money.hide(); + game.delay(); + 'step 3' + ui.arena.classList.remove('leaderhide'); + if(!_status.enterArena){ + ui.wuxie.show(); + ui.auto.show(); + ui.control.style.top=''; + if(!get.is.safari()){ + ui.control.style.transition=''; + ui.control.style.display='none'; + } + event.finish(); + } + else{ + game.minskin=false; + event.arenanodes=[]; + event.arenachoice=[]; + event.arenachoicenodes=[]; + event.arrangeNodes=function(){ + var num=event.arenachoicenodes.length; + var width=num*75+(num-1)*8; + for(var i=0;i=3){ + for(var i=0;i胜'; - victory.style.top='auto'; - victory.style.left='auto'; - victory.style.right='20px'; - victory.style.bottom='15px'; - victory.style.fontSize='30px' - victory.style.fontFamily='huangcao'; - victory.firstChild.style.marginRight='5px'; - ui.window.appendChild(victory); - ui.refresh(victory); - victory.show(); + var victory=ui.create.div().hide(); + victory.innerHTML=''+game.data.arena.win+'胜'; + victory.style.top='auto'; + victory.style.left='auto'; + victory.style.right='20px'; + victory.style.bottom='15px'; + victory.style.fontSize='30px' + victory.style.fontFamily='huangcao'; + victory.firstChild.style.marginRight='5px'; + ui.window.appendChild(victory); + ui.refresh(victory); + victory.show(); - event.checkPrize=function(){ - // event.kaibao=true; - event.prize=[]; - event.turnCard2=function(){ - if(this.turned) return; - _status.chessclicked=true; - this.turned=true; - var node=this; - setTimeout(function(){ - node.turned2=true; - },1000); - if(node.name=='chess_coin'||node.name=='chess_dust'){ - node.style.transition='all 0s'; - node.style.transform='none'; - node.style.overflow='visible'; - node.style.background='none'; - node.style.boxShadow='none'; - var div=ui.create.div(node); - div.style.transition='all 0s'; - if(node.name=='chess_coin'){ - div.innerHTML=''+node.num+''; - div.firstChild.style.color='rgb(255, 230, 0)'; - node.$coin(); - } - else{ - div.innerHTML=''+node.num+''; - div.firstChild.style.color='rgb(111, 198, 255)'; - div.firstChild.style.marginRight='3px'; - node.$dust(); - } - div.style.fontFamily='huangcao'; - div.style.fontSize='50px'; - div.style.top='40px'; - div.style.letterSpacing='8px'; - div.style.whiteSpace='nowrap'; - // div.dataset.nature='metal'; + event.checkPrize=function(){ + // event.kaibao=true; + event.prize=[]; + event.turnCard2=function(){ + if(this.turned) return; + _status.chessclicked=true; + this.turned=true; + var node=this; + setTimeout(function(){ + node.turned2=true; + },1000); + if(node.name=='chess_coin'||node.name=='chess_dust'){ + node.style.transition='all 0s'; + node.style.transform='none'; + node.style.overflow='visible'; + node.style.background='none'; + node.style.boxShadow='none'; + var div=ui.create.div(node); + div.style.transition='all 0s'; + if(node.name=='chess_coin'){ + div.innerHTML=''+node.num+''; + div.firstChild.style.color='rgb(255, 230, 0)'; + node.$coin(); + } + else{ + div.innerHTML=''+node.num+''; + div.firstChild.style.color='rgb(111, 198, 255)'; + div.firstChild.style.marginRight='3px'; + node.$dust(); + } + div.style.fontFamily='huangcao'; + div.style.fontSize='50px'; + div.style.top='40px'; + div.style.letterSpacing='8px'; + div.style.whiteSpace='nowrap'; + // div.dataset.nature='metal'; - return; - } - node.style.transition='all ease-in 0.3s'; - node.style.transform='perspective(1200px) rotateY(270deg) translateX(150px)'; - var onEnd=function(){ - node.init(node.name); - node.node.avatar.style.display=''; - if(node.rarity){ - node.node.intro.innerHTML=get.translation(node.rarity); - node.node.intro.classList.add('showintro'); - } - node.classList.add('playerflip'); - node.style.transform='none'; - node.style.transition=''; - if(lib.config.animation&&!lib.config.low_performance){ - setTimeout(function(){ - switch(game.getRarity(node.name)){ - case 'rare':node.$rare();break; - case 'epic':node.$epic();break; - case 'legend':node.$legend();break; - } - },150); - } - }; - node.listenTransition(onEnd); - }; - setTimeout(function(){ - nodes[0].delete(); - },400+Math.random()*300); - setTimeout(function(){ - nodes[1].delete(); - },400+Math.random()*300); - setTimeout(function(){ - nodes[2].delete(); - },400+Math.random()*300); - setTimeout(function(){ - nodes[3].delete(); - },400+Math.random()*300); - setTimeout(function(){ - nodes[4].delete(); - },400+Math.random()*300); - setTimeout(function(){ - nodes[5].delete(); - },400+Math.random()*300); - setTimeout(function(){ - nodes[6].delete(); - },400+Math.random()*300); - setTimeout(function(){ - nodes[7].delete(); - },400+Math.random()*300); - setTimeout(function(){ - nodes[8].delete(); - },400+Math.random()*300); - setTimeout(function(){ - var prize=new Array(6); - var map=[1,2,3,4,5]; - var ccount=3; - var win=game.data.arena.win; - var prizeValue; - switch(win){ - case 0:prizeValue=100;break; - case 1:prizeValue=120;break; - case 2:prizeValue=150;break; - case 3:prizeValue=190;break; - case 4:prizeValue=240;break; - case 5:prizeValue=300;break; - case 6:prizeValue=370;break; - case 7:prizeValue=450;break; - case 8:prizeValue=540;break; - case 9:prizeValue=640;break; - case 10:prizeValue=750;break; - case 11:prizeValue=870;break; - case 12:prizeValue=1000;break; - } - if(Math.random()<0.4){ - if(win>=3&&Math.random()<0.5){ - ccount=4; - prizeValue-=33; - } - else{ - ccount=2; - prizeValue+=33; - } - } - prizeValue-=100; - while(ccount--){ - prize[map.randomRemove()]=game.getLeaderCharacter(); - } - if(map.length){ - prizeValue/=map.length; - } - while(map.length){ - var val=Math.round((Math.random()*0.4+0.8)*prizeValue); - if(Math.random()<0.7){ - prize[map.shift()]=['chess_coin',Math.max(Math.ceil(Math.random()*5),val)]; - } - else{ - val=Math.round(val/3); - prize[map.shift()]=['chess_dust',Math.max(Math.ceil(Math.random()*3),val)]; - } - } - for(var i=1;i=3&&Math.random()<0.5){ + ccount=4; + prizeValue-=33; + } + else{ + ccount=2; + prizeValue+=33; + } + } + prizeValue-=100; + while(ccount--){ + prize[map.randomRemove()]=game.getLeaderCharacter(); + } + if(map.length){ + prizeValue/=map.length; + } + while(map.length){ + var val=Math.round((Math.random()*0.4+0.8)*prizeValue); + if(Math.random()<0.7){ + prize[map.shift()]=['chess_coin',Math.max(Math.ceil(Math.random()*5),val)]; + } + else{ + val=Math.round(val/3); + prize[map.shift()]=['chess_dust',Math.max(Math.ceil(Math.random()*3),val)]; + } + } + for(var i=1;i=4&&!bosses.childNodes[i].classList.contains('glow')){ - bosses.childNodes[i].classList.add('forbidden'); - } - else{ - bosses.childNodes[i].classList.remove('forbidden'); - } - } - if(num){ - if(!event.asboss){ - event.asboss=ui.create.control('应战',function(){ - _status.boss=true; - ui.click.ok(); - }); - } - } - else{ - if(event.asboss){ - event.asboss.close(); - delete event.asboss; - } - } - addToButton(); - }; + var clickedBoss=false; + var clickBoss=function(){ + clickedBoss=true; + var num=bosses.querySelectorAll('.glow').length; + if(this.classList.contains('glow')){ + this.classList.remove('glow'); + num--; + } + else{ + if(num<4){ + this.classList.add('glow'); + num++; + } + } + for(var i=0;i=4&&!bosses.childNodes[i].classList.contains('glow')){ + bosses.childNodes[i].classList.add('forbidden'); + } + else{ + bosses.childNodes[i].classList.remove('forbidden'); + } + } + if(num){ + if(!event.asboss){ + event.asboss=ui.create.control('应战',function(){ + _status.boss=true; + ui.click.ok(); + }); + } + } + else{ + if(event.asboss){ + event.asboss.close(); + delete event.asboss; + } + } + addToButton(); + }; - var clickedJiange=false; - var clickJiange=function(){ - clickedJiange=true; - if(this.classList.contains('glow2')){ - this.classList.remove('glow2'); - } - else{ - this.classList.add('glow2'); - } - addToButton(); - }; + var clickedJiange=false; + var clickJiange=function(){ + clickedJiange=true; + if(this.classList.contains('glow2')){ + this.classList.remove('glow2'); + } + else{ + this.classList.add('glow2'); + } + addToButton(); + }; - for(var i=0;inum){ - for(var i=num;inum){ + for(var i=num;i2) return false; - var xy1=event.source.getXY(); - var xy2=player.getXY(); - var dx=xy2[0]-xy1[0]; - var dy=xy2[1]-xy1[1]; - // if(dx*dy!=0) return false; - if(dx==0&&Math.abs(dy)==2){ - dy/=2; - } - if(dy==0&&Math.abs(dx)==2){ - dx/=2; - } - return player.movable(dx,dy); - }, - content:function(){ - var xy1=trigger.source.getXY(); - var xy2=player.getXY(); - var dx=xy2[0]-xy1[0]; - var dy=xy2[1]-xy1[1]; - if(dx==0&&Math.abs(dy)==2){ - dy/=2; - } - if(dy==0&&Math.abs(dx)==2){ - dx/=2; - } - if(player.movable(dx,dy)){ - player.move(dx,dy); - } - } - }, - dubiaoxianjing:{ - global:'dubiaoxianjing2' - }, - dubiaoxianjing2:{ - trigger:{player:'phaseAfter'}, - forced:true, - popup:false, - filter:function(event,player){ - if(player.hp<=1) return false; - for(var i=0;i1) return false; - for(var i=0;inh) return false; - } - return true; - } - } - return false; - }, - content:function(){ - 'step 0' - var source=null; - for(var i=0;i3; - } - } - return false; - }, - content:function(){ - 'step 0' - var source=null; - for(var i=0;igame.data.arena.dead.length; - }, - direct:true, - delay:0, - preservecancel:true, - content:function(){ - "step 0" - var list=game.data.arena.arenachoice.slice(0); - for(var i=0;i

' - for(var i=0;i'+ - (skill.chance(targets[i],player)*100).toFixed(2)+'%
'; - } - str+='

' - } - return str; - }, - chance:function(target,player){ - var chance; - var renyi=player.hasSkill('leader_renyi'); - switch(target.hp){ - case 1:chance=0.7;break; - case 2:chance=0.4;break; - default:chance=0.2;break; - } - switch(target.countCards('he')){ - case 0:break; - case 1:chance/=1.2;break; - case 2:chance/=1.4;break; - case 3:chance/=1.7;break; - default:chance/=2;break; - } - switch(game.getRarity(target.name)){ - case 'common':{ - if(renyi) chance*=2; - break; - } - case 'rare':{ - chance/=2; - if(renyi) chance*=2; - break; - } - case 'epic':{ - chance/=5; - if(renyi) chance*=1.5; - break; - } - case 'legend':{ - chance/=15; - if(renyi) chance*=1.2; - break; - } - } - return Math.min(1,chance); - }, - filter:function(){ - return game.data.dust>=10; - }, - filterTarget:function(card,player,target){ - return game.isChessNeighbour(player,target)&&!game.data.character.contains(target.name); - }, - content:function(){ - var chance=lib.skill.leader_zhaoxiang.chance(target,player); - game.changeDust(-10); - if(Math.random()0; - }, - content:function(){ - switch(_status.difficulty){ - case 'leader_easy':game.reward+=2*trigger.num;break; - case 'leader_medium':game.reward+=4*trigger.num;break; - case 'leader_hard':game.reward+=6*trigger.num;break; - } - } - }, - leader_renyi:{ - unique:true, - }, - leader_mouduan:{ - unique:true, - global:'leader_mouduan2' - }, - leader_mouduan2:{ - mod:{ - chessMove:function(player,current){ - if(player.side&&player.name!=_status.lord) return current+1; - } - } - }, - tongshuai:{ - unique:true, - forbid:['guozhan'], - init:function(player){ - player.storage.tongshuai={ - list:[], - owned:{}, - player:player, - get:function(num){ - if(typeof num!='number') num=1; - var player=this.player; - while(num--){ - var name=player.storage.tongshuai.unowned.shift(); - if(!name) return; - var skills=lib.character[name][3].slice(0); - for(var i=0;i
【'+get.translation(skill)+ - '】
'+lib.translate[skill+'_info']+'
'); - } - } - }, - // mark:true - }, - tongshuai1:{ - trigger:{global:'gameStart'}, - forced:true, - popup:false, - priority:10, - content:function(){ - for(var i=0;i1){ - player.storage.tongshuai.get(2); - } - else if(player.storage.tongshuai.unowned.length==1){ - player.storage.tongshuai.get(); - } - else{ - player.removeSkill('tongshuai'); - } - } - }, - tongshuai2:{ - audio:2, - trigger:{player:['phaseBegin','phaseEnd'],global:'gameStart'}, - filter:function(event,player,name){ - if(!player.hasSkill('tongshuai')) return false; - if(name=='phaseBegin'&&game.phaseNumber==1) return false; - return true; - }, - priority:-9, - forced:true, - popup:false, - content:function(){ - var slist=player.storage.tongshuai.owned; - var list=[]; - for(var i in slist){ - list.push(i); - } - if(event.isMine()){ - event.dialog=ui.create.dialog('选择获得一项技能',[list,'character']); - if(trigger.name=='game'){ - event.control=ui.create.control(); - } - else{ - event.control=ui.create.control(['cancel']); - } - event.clickControl=function(link){ - if(link!='cancel'){ - var currentname=event.dialog.querySelector('.selected.button').link; - var mark=player.marks.tongshuai; - if(!mark){ - player.markSkill('tongshuai'); - mark=player.marks.tongshuai; - if(mark.firstChild){ - mark.firstChild.remove(); - } - } - mark.setBackground(currentname,'character'); + var glows=event.bosses.querySelectorAll('.glow'); + var glows2=event.jiange.querySelectorAll('.glow2'); + if(!glows.length&&!glows2.length){ + if(!get.config('single_control')){ + var addnum; + if(get.config('additional_player')){ + addnum=parseInt(get.config('battle_number')); + } + else{ + addnum=parseInt(get.config('battle_number'))+parseInt(get.config('replace_number')); + } + for(var i=0;i2) return false; + var xy1=event.source.getXY(); + var xy2=player.getXY(); + var dx=xy2[0]-xy1[0]; + var dy=xy2[1]-xy1[1]; + // if(dx*dy!=0) return false; + if(dx==0&&Math.abs(dy)==2){ + dy/=2; + } + if(dy==0&&Math.abs(dx)==2){ + dx/=2; + } + return player.movable(dx,dy); + }, + content:function(){ + var xy1=trigger.source.getXY(); + var xy2=player.getXY(); + var dx=xy2[0]-xy1[0]; + var dy=xy2[1]-xy1[1]; + if(dx==0&&Math.abs(dy)==2){ + dy/=2; + } + if(dy==0&&Math.abs(dx)==2){ + dx/=2; + } + if(player.movable(dx,dy)){ + player.move(dx,dy); + } + } + }, + dubiaoxianjing:{ + global:'dubiaoxianjing2' + }, + dubiaoxianjing2:{ + trigger:{player:'phaseAfter'}, + forced:true, + popup:false, + filter:function(event,player){ + if(player.hp<=1) return false; + for(var i=0;i1) return false; + for(var i=0;inh) return false; + } + return true; + } + } + return false; + }, + content:function(){ + 'step 0' + var source=null; + for(var i=0;i3; + } + } + return false; + }, + content:function(){ + 'step 0' + var source=null; + for(var i=0;igame.data.arena.dead.length; + }, + direct:true, + delay:0, + preservecancel:true, + content:function(){ + "step 0" + var list=game.data.arena.arenachoice.slice(0); + for(var i=0;i

' + for(var i=0;i'+ + (skill.chance(targets[i],player)*100).toFixed(2)+'%
'; + } + str+='

' + } + return str; + }, + chance:function(target,player){ + var chance; + var renyi=player.hasSkill('leader_renyi'); + switch(target.hp){ + case 1:chance=0.7;break; + case 2:chance=0.4;break; + default:chance=0.2;break; + } + switch(target.countCards('he')){ + case 0:break; + case 1:chance/=1.2;break; + case 2:chance/=1.4;break; + case 3:chance/=1.7;break; + default:chance/=2;break; + } + switch(game.getRarity(target.name)){ + case 'common':{ + if(renyi) chance*=2; + break; + } + case 'rare':{ + chance/=2; + if(renyi) chance*=2; + break; + } + case 'epic':{ + chance/=5; + if(renyi) chance*=1.5; + break; + } + case 'legend':{ + chance/=15; + if(renyi) chance*=1.2; + break; + } + } + return Math.min(1,chance); + }, + filter:function(){ + return game.data.dust>=10; + }, + filterTarget:function(card,player,target){ + return game.isChessNeighbour(player,target)&&!game.data.character.contains(target.name); + }, + content:function(){ + var chance=lib.skill.leader_zhaoxiang.chance(target,player); + game.changeDust(-10); + if(Math.random()0; + }, + content:function(){ + switch(_status.difficulty){ + case 'leader_easy':game.reward+=2*trigger.num;break; + case 'leader_medium':game.reward+=4*trigger.num;break; + case 'leader_hard':game.reward+=6*trigger.num;break; + } + } + }, + leader_renyi:{ + unique:true, + }, + leader_mouduan:{ + unique:true, + global:'leader_mouduan2' + }, + leader_mouduan2:{ + mod:{ + chessMove:function(player,current){ + if(player.side&&player.name!=_status.lord) return current+1; + } + } + }, + tongshuai:{ + unique:true, + forbid:['guozhan'], + init:function(player){ + player.storage.tongshuai={ + list:[], + owned:{}, + player:player, + get:function(num){ + if(typeof num!='number') num=1; + var player=this.player; + while(num--){ + var name=player.storage.tongshuai.unowned.shift(); + if(!name) return; + var skills=lib.character[name][3].slice(0); + for(var i=0;i
【'+get.translation(skill)+ + '】
'+lib.translate[skill+'_info']+'
'); + } + } + }, + // mark:true + }, + tongshuai1:{ + trigger:{global:'gameStart'}, + forced:true, + popup:false, + priority:10, + content:function(){ + for(var i=0;i1){ + player.storage.tongshuai.get(2); + } + else if(player.storage.tongshuai.unowned.length==1){ + player.storage.tongshuai.get(); + } + else{ + player.removeSkill('tongshuai'); + } + } + }, + tongshuai2:{ + audio:2, + trigger:{player:['phaseBegin','phaseEnd'],global:'gameStart'}, + filter:function(event,player,name){ + if(!player.hasSkill('tongshuai')) return false; + if(name=='phaseBegin'&&game.phaseNumber==1) return false; + return true; + }, + priority:-9, + forced:true, + popup:false, + content:function(){ + var slist=player.storage.tongshuai.owned; + var list=[]; + for(var i in slist){ + list.push(i); + } + if(event.isMine()){ + event.dialog=ui.create.dialog('选择获得一项技能',[list,'character']); + if(trigger.name=='game'){ + event.control=ui.create.control(); + } + else{ + event.control=ui.create.control(['cancel']); + } + event.clickControl=function(link){ + if(link!='cancel'){ + var currentname=event.dialog.querySelector('.selected.button').link; + var mark=player.marks.tongshuai; + if(!mark){ + player.markSkill('tongshuai'); + mark=player.marks.tongshuai; + if(mark.firstChild){ + mark.firstChild.remove(); + } + } + mark.setBackground(currentname,'character'); - player.addAdditionalSkill('tongshuai',link); - game.addVideo('chess_tongshuai_skill',player,[currentname,link]); - player.logSkill('tongshuai2'); - game.log(player,'获得技能','【'+get.translation(link)+'】'); - player.popup(link); + player.addAdditionalSkill('tongshuai',link); + game.addVideo('chess_tongshuai_skill',player,[currentname,link]); + player.logSkill('tongshuai2'); + game.log(player,'获得技能','【'+get.translation(link)+'】'); + player.popup(link); - for(var i=0;i0; - }, - content:function(){ - player.storage.tongshuai.get(); - } - }, - cangming:{ - enable:'phaseUse', - usable:1, - unique:true, - filter:function(event,player){ - if(player.isTurnedOver()) return false; - var suits=[]; - var hs=player.getCards('h'); - for(var i=0;i=4) return true; - } - return false; - }, - filterCard:function(card){ - var suit=get.suit(card); - for(var i=0;i1) break; - } - } - if(num<=1) return; - if(_status.currentPhase==player&&player.countCards('h')=6){ - if(typeof card=='string') return; - if(card.name=='wuzhong') return; - if(card.name=='shunshou') return; - if(card.name=='yuanjiao') return; - if(card.name=='yiyi') return; - if(!player.hasSkill('cangming2')) return 'zeroplayertarget'; - } - } - }, - result:{ - target:function(player){ - var num=0; - for(var i=0;i1) break; - } - } - if(num<=1) return 0; - return -10; - } - } - }, - }, - cangming2:{ - trigger:{player:'phaseBegin'}, - forced:true, - popup:false, - content:function(){ - for(var i=0;i0; - }, - check:function(event,player){ - var targets=lib.skill.guanchuan.getTargets(player,event.targets[0]); - var eff=0; - for(var i=0;i0; - }, - content:function(){ - var targets=lib.skill.guanchuan.getTargets(player,trigger.targets[0]); - for(var i=0;i1&&lib.filter.filterCard({name:'sha'},player); - }, - filterCard:{name:'sha'}, - selectCard:2, - check:function(card){ - var num=0; - var player=_status.event.player; - for(var i=0;i0){ - num++; - if(num>1) return 8-get.value(card); - } - } - return 0; - }, - selectTarget:[1,Infinity], - discard:false, - prepare:'throw', - filterTarget:function(card,player,target){ - return lib.filter.targetEnabled({name:'sha'},player,target)&& - get.distance(player,target,'pure')<=5; - }, - content:function(){ - targets.sort(lib.sort.seat); - player.useCard({name:'sha'},cards,targets,'luanjian').animate=false; - }, - multitarget:true, - ai:{ - order:function(){ - return get.order({name:'sha'})+0.1; - }, - result:{ - target:function(player,target){ - return get.effect(target,{name:'sha'},player,target); - } - }, - effect:{ - player:function(card,player){ - if(_status.currentPhase!=player) return; - if(card.name=='sha'&&player.countCards('h','sha')<2&&player.countCards('h')<=player.hp){ - var num=0; - var player=_status.event.player; - for(var i=0;i1) return 'zeroplayertarget'; - } - } - } - } - }, - } - }, - zhiming:{ - trigger:{source:'damageBegin'}, - filter:function(event,player){ - return get.distance(event.player,player,'attack')>1&&event.card&&event.card.name=='sha'; - }, - forced:true, - content:function(){ - trigger.num++; - } - }, - lianshe:{ - mod:{ - cardUsable:function(card,player,num){ - if(card.name=='sha'){ - return num+player.countUsed()-player.countUsed('sha'); - } - }, - }, - trigger:{player:'useCard'}, - frequent:true, - filter:function(event){ - return event.card&&event.card.name=='sha'; - }, - usable:1, - content:function(){ - player.draw(); - }, - ai:{ - threaten:1.5 - } - }, - pianyi:{ - trigger:{player:'phaseEnd'}, - direct:true, - filter:function(event,player){ - return !player.getStat('damage'); - }, - content:function(){ - "step 0" - player.chooseToMove(2,get.prompt('pianyi')); - "step 1" - if(result.bool){ - player.logSkill('pianyi'); - } - } - }, - lingdong:{ - trigger:{player:'phaseEnd'}, - direct:true, - filter:function(event,player){ - return player.countUsed('sha')>0; - }, - content:function(){ - "step 0" - player.chooseToMove(player.countUsed('sha'),get.prompt('lingdong')); - "step 1" - if(result.bool){ - player.logSkill('lingdong'); - } - } - }, - _noactpunish:{ - 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('noactpunish'); - } - }, - noactpunish:{}, - _chess_chuzhang:{ - enable:'phaseUse', - usable:1, - direct:true, - delay:false, - preservecancel:true, - filter:function(event,player){ - var num=0; - var xy=player.getXY(); - var neighbour; - neighbour=player.getNeighbour(-1,0); - if(neighbour&&typeof neighbour.tempObstacle!='number'&&game.obstacles.contains(neighbour)){ - num++; - } - else if(xy[0]==0){ - num++; - } - neighbour=player.getNeighbour(1,0); - if(neighbour&&typeof neighbour.tempObstacle!='number'&&game.obstacles.contains(neighbour)){ - num++; - } - else if(xy[0]+1>=ui.chesswidth){ - num++; - } - neighbour=player.getNeighbour(0,-1); - if(neighbour&&typeof neighbour.tempObstacle!='number'&&game.obstacles.contains(neighbour)){ - num++; - } - else if(xy[1]==0){ - num++; - } - neighbour=player.getNeighbour(0,1); - if(neighbour&&typeof neighbour.tempObstacle!='number'&&game.obstacles.contains(neighbour)){ - num++; - } - else if(xy[1]+1>=ui.chessheight){ - num++; - } - return num>=3; - }, - content:function(){ - 'step 0' - event.obstacles=[]; - event.movemap={}; - var neighbour; - neighbour=player.getNeighbour(-1,0); - if(neighbour&&typeof neighbour.tempObstacle!='number'&&game.obstacles.contains(neighbour)){ - event.obstacles.push(neighbour); - if(player.movable(-2,0)){ - event.movemap['[-1,0]']=neighbour; - } - } - neighbour=player.getNeighbour(1,0); - if(neighbour&&typeof neighbour.tempObstacle!='number'&&game.obstacles.contains(neighbour)){ - event.obstacles.push(neighbour); - if(player.movable(2,0)){ - event.movemap['[1,0]']=neighbour; - } - } - neighbour=player.getNeighbour(0,-1); - if(neighbour&&typeof neighbour.tempObstacle!='number'&&game.obstacles.contains(neighbour)){ - event.obstacles.push(neighbour); - if(player.movable(0,-2)){ - event.movemap['[0,-1]']=neighbour; - } - } - neighbour=player.getNeighbour(0,1); - if(neighbour&&typeof neighbour.tempObstacle!='number'&&game.obstacles.contains(neighbour)){ - event.obstacles.push(neighbour); - if(player.movable(0,2)){ - event.movemap['[0,1]']=neighbour; - } - } - if(!event.obstacles.length){ - event.finish(); - return; - } - else if(event.obstacles.length==1){ - event.obstacle=event.obstacles[0]; - } - else if(event.isMine()){ - for(var i=0;i'+lib.translate._chess_chuzhang_info+'
'); - event.custom.replace.confirm=function(){ - player.getStat().skill._chess_chuzhang--; - event.cancelled=true; - game.resume(); - }; - } - 'step 1' - if(ui.confirm){ - ui.confirm.classList.add('removing'); - } - _status.imchoosing=false; - if(!event.cancelled){ - if(!event.obstacle){ - event.obstacle=event.obstacles.randomGet(); - } - var moved=false; - for(var i in event.movemap){ - if(event.movemap[i]==event.obstacle){ - var xy=JSON.parse(i); - if(game.moveObstacle(event.obstacle,xy[0],xy[1])){ - moved=true; - break; - } - } - } - if(!moved){ - game.removeObstacle(event.obstacle); - } - player.popup('除障'); - game.delay(); - } - for(var i=0;i0; - }, - content:function(){ - "step 0" - var move=2; - move=game.checkMod(player,move,'chessMove',player); - player.chooseToMove(move).phasing=true; - "step 1" - if(ui.confirm){ - ui.confirm.classList.add('removing'); - } - if(!result.bool){ - var skill=player.getStat().skill; - skill._chessmove--; - if(typeof skill._chessmovetried=='number'){ - skill._chessmovetried++; - } - else{ - skill._chessmovetried=1; - } - } - }, - ai:{ - order:5, - result:{ - playerx:function(player){ - if(get.mode()=='tafang'&&_status.enemies.contains(player)){ - return 1; - } - var nh=player.countCards('h'); - if(!player.countCards('h','sha')&& - !player.countCards('h','shunshou')&& - !player.countCards('h','bingliang')){ - if(nh<=Math.min(3,player.hp)) return Math.random()-0.3; - else if(nh<=Math.min(2,player.hp)) return Math.random()-0.4; - return Math.random()-0.5; - } - var neighbour; - neighbour=player.getNeighbour(0,1); - if(neighbour&&game.players.contains(neighbour)&&neighbour.side!=player.side){ - if(get.distance(player,neighbour,'attack')<1) return 1; - return 0; - } - neighbour=player.getNeighbour(0,-1); - if(neighbour&&game.players.contains(neighbour)&&neighbour.side!=player.side){ - if(get.distance(player,neighbour,'attack')<1) return 1; - return 0; - } - neighbour=player.getNeighbour(1,0); - if(neighbour&&game.players.contains(neighbour)&&neighbour.side!=player.side){ - if(get.distance(player,neighbour,'attack')<1) return 1; - return 0; - } - neighbour=player.getNeighbour(-1,0); - if(neighbour&&game.players.contains(neighbour)&&neighbour.side!=player.side){ - if(get.distance(player,neighbour,'attack')<1) return 1; - return 0; - } - return 1; - }, - player:function(player){ - if(player.getStat().skill._chessmovetried>=10){ - return 0; - } - var x=lib.skill._chessmove.ai.result.playerx(player); - if(player.isMad()) return -x; - return x; - } - } - } - }, - _chesscenter:{ - trigger:{player:['phaseBegin','useCardBegin','useSkillBegin','respondBegin','damageBegin','loseHpBegin'], - target:'useCardToBegin'}, - forced:true, - priority:100, - popup:false, - content:function(){ - player.chessFocus(); - }, - }, - boss_bfengxing:{ - mod:{ - chessMove:function(player,current){ - return current+2; - }, - attackFrom:function(from,to,current){ - return current-2; - }, - }, - trigger:{player:'phaseDrawBegin'}, - forced:true, - content:function(){ - trigger.num+=2; - } - }, - boss_chiyu:{ - enable:'phaseUse', - usable:1, - filterCard:{color:'red'}, - nodelay:true, - check:function(card){return 8-get.value(card);}, - filterTarget:function(card,player,target){ - return get.distance(player,target)<=5&&player!=target; - }, - filter:function(event,player){ - return player.countCards('h',{color:'red'})>0; - }, - selectTarget:-1, - content:function(){ - target.damage('fire'); - }, - line:'fire', - ai:{ - order:1, - result:{ - target:function(player,target){ - return get.damageEffect(target,player,target,'fire'); - } - } - } - }, - boss_tenglong:{ - enable:'phaseUse', - usable:1, - position:'he', - filterCard:{type:'equip'}, - init:function(player){ - player.forcemin=true; - }, - check:function(card){ - var player=_status.currentPhase; - if(player.countCards('he',{subtype:get.subtype(card)})>1){ - return 12-get.equipValue(card); - } - return 8-get.equipValue(card); - }, - filter:function(event,player){ - return player.countCards('he',{type:'equip'}); - }, - filterTarget:function(card,player,target){ - return player!=target&&get.distance(player,target)<=2; - }, - content:function(){ - target.damage(3,'fire'); - }, - ai:{ - order:9, - result:{ - target:function(player,target){ - return get.damageEffect(target,player,target,'fire'); - } - } - } - }, - boss_wuying:{ - mod:{ - globalTo:function(from,to,distance){ - return distance+2; - }, - chessMove:function(player,current){ - return current-1; - } - } - }, - boss_wushang:{ - trigger:{player:'phaseBegin'}, - forced:true, - filter:function(event,player){ - for(var i=0;i0; + }, + content:function(){ + player.storage.tongshuai.get(); + } + }, + cangming:{ + enable:'phaseUse', + usable:1, + unique:true, + filter:function(event,player){ + if(player.isTurnedOver()) return false; + var suits=[]; + var hs=player.getCards('h'); + for(var i=0;i=4) return true; + } + return false; + }, + filterCard:function(card){ + var suit=get.suit(card); + for(var i=0;i1) break; + } + } + if(num<=1) return; + if(_status.currentPhase==player&&player.countCards('h')=6){ + if(typeof card=='string') return; + if(card.name=='wuzhong') return; + if(card.name=='shunshou') return; + if(card.name=='yuanjiao') return; + if(card.name=='yiyi') return; + if(!player.hasSkill('cangming2')) return 'zeroplayertarget'; + } + } + }, + result:{ + target:function(player){ + var num=0; + for(var i=0;i1) break; + } + } + if(num<=1) return 0; + return -10; + } + } + }, + }, + cangming2:{ + trigger:{player:'phaseBegin'}, + forced:true, + popup:false, + content:function(){ + for(var i=0;i0; + }, + check:function(event,player){ + var targets=lib.skill.guanchuan.getTargets(player,event.targets[0]); + var eff=0; + for(var i=0;i0; + }, + content:function(){ + var targets=lib.skill.guanchuan.getTargets(player,trigger.targets[0]); + for(var i=0;i1&&lib.filter.filterCard({name:'sha'},player); + }, + filterCard:{name:'sha'}, + selectCard:2, + check:function(card){ + var num=0; + var player=_status.event.player; + for(var i=0;i0){ + num++; + if(num>1) return 8-get.value(card); + } + } + return 0; + }, + selectTarget:[1,Infinity], + discard:false, + prepare:'throw', + filterTarget:function(card,player,target){ + return lib.filter.targetEnabled({name:'sha'},player,target)&& + get.distance(player,target,'pure')<=5; + }, + content:function(){ + targets.sort(lib.sort.seat); + player.useCard({name:'sha'},cards,targets,'luanjian').animate=false; + }, + multitarget:true, + ai:{ + order:function(){ + return get.order({name:'sha'})+0.1; + }, + result:{ + target:function(player,target){ + return get.effect(target,{name:'sha'},player,target); + } + }, + effect:{ + player:function(card,player){ + if(_status.currentPhase!=player) return; + if(card.name=='sha'&&player.countCards('h','sha')<2&&player.countCards('h')<=player.hp){ + var num=0; + var player=_status.event.player; + for(var i=0;i1) return 'zeroplayertarget'; + } + } + } + } + }, + } + }, + zhiming:{ + trigger:{source:'damageBegin'}, + filter:function(event,player){ + return get.distance(event.player,player,'attack')>1&&event.card&&event.card.name=='sha'; + }, + forced:true, + content:function(){ + trigger.num++; + } + }, + lianshe:{ + mod:{ + cardUsable:function(card,player,num){ + if(card.name=='sha'){ + return num+player.countUsed()-player.countUsed('sha'); + } + }, + }, + trigger:{player:'useCard'}, + frequent:true, + filter:function(event){ + return event.card&&event.card.name=='sha'; + }, + usable:1, + content:function(){ + player.draw(); + }, + ai:{ + threaten:1.5 + } + }, + pianyi:{ + trigger:{player:'phaseEnd'}, + direct:true, + filter:function(event,player){ + return !player.getStat('damage'); + }, + content:function(){ + "step 0" + player.chooseToMove(2,get.prompt('pianyi')); + "step 1" + if(result.bool){ + player.logSkill('pianyi'); + } + } + }, + lingdong:{ + trigger:{player:'phaseEnd'}, + direct:true, + filter:function(event,player){ + return player.countUsed('sha')>0; + }, + content:function(){ + "step 0" + player.chooseToMove(player.countUsed('sha'),get.prompt('lingdong')); + "step 1" + if(result.bool){ + player.logSkill('lingdong'); + } + } + }, + _noactpunish:{ + 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('noactpunish'); + } + }, + noactpunish:{}, + _chess_chuzhang:{ + enable:'phaseUse', + usable:1, + direct:true, + delay:false, + preservecancel:true, + filter:function(event,player){ + var num=0; + var xy=player.getXY(); + var neighbour; + neighbour=player.getNeighbour(-1,0); + if(neighbour&&typeof neighbour.tempObstacle!='number'&&game.obstacles.contains(neighbour)){ + num++; + } + else if(xy[0]==0){ + num++; + } + neighbour=player.getNeighbour(1,0); + if(neighbour&&typeof neighbour.tempObstacle!='number'&&game.obstacles.contains(neighbour)){ + num++; + } + else if(xy[0]+1>=ui.chesswidth){ + num++; + } + neighbour=player.getNeighbour(0,-1); + if(neighbour&&typeof neighbour.tempObstacle!='number'&&game.obstacles.contains(neighbour)){ + num++; + } + else if(xy[1]==0){ + num++; + } + neighbour=player.getNeighbour(0,1); + if(neighbour&&typeof neighbour.tempObstacle!='number'&&game.obstacles.contains(neighbour)){ + num++; + } + else if(xy[1]+1>=ui.chessheight){ + num++; + } + return num>=3; + }, + content:function(){ + 'step 0' + event.obstacles=[]; + event.movemap={}; + var neighbour; + neighbour=player.getNeighbour(-1,0); + if(neighbour&&typeof neighbour.tempObstacle!='number'&&game.obstacles.contains(neighbour)){ + event.obstacles.push(neighbour); + if(player.movable(-2,0)){ + event.movemap['[-1,0]']=neighbour; + } + } + neighbour=player.getNeighbour(1,0); + if(neighbour&&typeof neighbour.tempObstacle!='number'&&game.obstacles.contains(neighbour)){ + event.obstacles.push(neighbour); + if(player.movable(2,0)){ + event.movemap['[1,0]']=neighbour; + } + } + neighbour=player.getNeighbour(0,-1); + if(neighbour&&typeof neighbour.tempObstacle!='number'&&game.obstacles.contains(neighbour)){ + event.obstacles.push(neighbour); + if(player.movable(0,-2)){ + event.movemap['[0,-1]']=neighbour; + } + } + neighbour=player.getNeighbour(0,1); + if(neighbour&&typeof neighbour.tempObstacle!='number'&&game.obstacles.contains(neighbour)){ + event.obstacles.push(neighbour); + if(player.movable(0,2)){ + event.movemap['[0,1]']=neighbour; + } + } + if(!event.obstacles.length){ + event.finish(); + return; + } + else if(event.obstacles.length==1){ + event.obstacle=event.obstacles[0]; + } + else if(event.isMine()){ + for(var i=0;i'+lib.translate._chess_chuzhang_info+'
'); + event.custom.replace.confirm=function(){ + player.getStat().skill._chess_chuzhang--; + event.cancelled=true; + game.resume(); + }; + } + 'step 1' + if(ui.confirm){ + ui.confirm.classList.add('removing'); + } + _status.imchoosing=false; + if(!event.cancelled){ + if(!event.obstacle){ + event.obstacle=event.obstacles.randomGet(); + } + var moved=false; + for(var i in event.movemap){ + if(event.movemap[i]==event.obstacle){ + var xy=JSON.parse(i); + if(game.moveObstacle(event.obstacle,xy[0],xy[1])){ + moved=true; + break; + } + } + } + if(!moved){ + game.removeObstacle(event.obstacle); + } + player.popup('除障'); + game.delay(); + } + for(var i=0;i0; + }, + content:function(){ + "step 0" + var move=2; + move=game.checkMod(player,move,'chessMove',player); + player.chooseToMove(move).phasing=true; + "step 1" + if(ui.confirm){ + ui.confirm.classList.add('removing'); + } + if(!result.bool){ + var skill=player.getStat().skill; + skill._chessmove--; + if(typeof skill._chessmovetried=='number'){ + skill._chessmovetried++; + } + else{ + skill._chessmovetried=1; + } + } + }, + ai:{ + order:5, + result:{ + playerx:function(player){ + if(get.mode()=='tafang'&&_status.enemies.contains(player)){ + return 1; + } + var nh=player.countCards('h'); + if(!player.countCards('h','sha')&& + !player.countCards('h','shunshou')&& + !player.countCards('h','bingliang')){ + if(nh<=Math.min(3,player.hp)) return Math.random()-0.3; + else if(nh<=Math.min(2,player.hp)) return Math.random()-0.4; + return Math.random()-0.5; + } + var neighbour; + neighbour=player.getNeighbour(0,1); + if(neighbour&&game.players.contains(neighbour)&&neighbour.side!=player.side){ + if(get.distance(player,neighbour,'attack')<1) return 1; + return 0; + } + neighbour=player.getNeighbour(0,-1); + if(neighbour&&game.players.contains(neighbour)&&neighbour.side!=player.side){ + if(get.distance(player,neighbour,'attack')<1) return 1; + return 0; + } + neighbour=player.getNeighbour(1,0); + if(neighbour&&game.players.contains(neighbour)&&neighbour.side!=player.side){ + if(get.distance(player,neighbour,'attack')<1) return 1; + return 0; + } + neighbour=player.getNeighbour(-1,0); + if(neighbour&&game.players.contains(neighbour)&&neighbour.side!=player.side){ + if(get.distance(player,neighbour,'attack')<1) return 1; + return 0; + } + return 1; + }, + player:function(player){ + if(player.getStat().skill._chessmovetried>=10){ + return 0; + } + var x=lib.skill._chessmove.ai.result.playerx(player); + if(player.isMad()) return -x; + return x; + } + } + } + }, + _chesscenter:{ + trigger:{player:['phaseBegin','useCardBegin','useSkillBegin','respondBegin','damageBegin','loseHpBegin'], + target:'useCardToBegin'}, + forced:true, + priority:100, + popup:false, + content:function(){ + player.chessFocus(); + }, + }, + boss_bfengxing:{ + mod:{ + chessMove:function(player,current){ + return current+2; + }, + attackFrom:function(from,to,current){ + return current-2; + }, + }, + trigger:{player:'phaseDrawBegin'}, + forced:true, + content:function(){ + trigger.num+=2; + } + }, + boss_chiyu:{ + enable:'phaseUse', + usable:1, + filterCard:{color:'red'}, + nodelay:true, + check:function(card){return 8-get.value(card);}, + filterTarget:function(card,player,target){ + return get.distance(player,target)<=5&&player!=target; + }, + filter:function(event,player){ + return player.countCards('h',{color:'red'})>0; + }, + selectTarget:-1, + content:function(){ + target.damage('fire'); + }, + line:'fire', + ai:{ + order:1, + result:{ + target:function(player,target){ + return get.damageEffect(target,player,target,'fire'); + } + } + } + }, + boss_tenglong:{ + enable:'phaseUse', + usable:1, + position:'he', + filterCard:{type:'equip'}, + init:function(player){ + player.forcemin=true; + }, + check:function(card){ + var player=_status.currentPhase; + if(player.countCards('he',{subtype:get.subtype(card)})>1){ + return 12-get.equipValue(card); + } + return 8-get.equipValue(card); + }, + filter:function(event,player){ + return player.countCards('he',{type:'equip'}); + }, + filterTarget:function(card,player,target){ + return player!=target&&get.distance(player,target)<=2; + }, + content:function(){ + target.damage(3,'fire'); + }, + ai:{ + order:9, + result:{ + target:function(player,target){ + return get.damageEffect(target,player,target,'fire'); + } + } + } + }, + boss_wuying:{ + mod:{ + globalTo:function(from,to,distance){ + return distance+2; + }, + chessMove:function(player,current){ + return current-1; + } + } + }, + boss_wushang:{ + trigger:{player:'phaseBegin'}, + forced:true, + filter:function(event,player){ + for(var i=0;i=ui.chessheight-1) return false; - } - var node=ui.create.div('.player.minskin.playergrid',player.parentNode); - node.link=player; - node.dataset.position=pos; - return node; - }, - fakeme:function(){ - if(ui.fakeme){ - ui.fakeme.delete(); - } - ui.fakeme=ui.create.div('.fakeme.avatar',ui.me); - ui.fakeme.style.backgroundImage=game.me.node.avatar.style.backgroundImage; - } - }, - click:{ - chessInfo:function(e){ - if(this.link.isAlive()){ - this.link.chessFocus(); - if(this.link.classList.contains('selectable')|| - this.link.classList.contains('selected')){ - ui.click.target.call(this.link,e); - ui.click.window.call(ui.window,e); - } - e.stopPropagation(); - } - }, - playergrid:function(){ - if(!_status.paused) return; - var pos=parseInt(this.dataset.position); - this.link.moveTo(pos%ui.chesswidth,Math.floor(pos/ui.chesswidth)); - if(ui.movegrids){ - while(ui.movegrids.length){ - ui.movegrids.shift().delete(); - } - } - _status.event.result={ - bool:true, - move:this.link.dataset.position - }; - game.resume(); - }, - obstacle:function(){ - if(_status.event.chooseObstacle&&_status.paused&& - _status.event.obstacles&&_status.event.obstacles.contains(this)){ - _status.event.obstacle=this; - game.resume(); - } - } - } - }, - get:{ - chessDistance:function(from,to){ - var fxy=from.getXY(); - var txy=to.getXY(); - return Math.abs(fxy[0]-txy[0])+Math.abs(fxy[1]-txy[1]); - }, - rawAttitude:function(from,to){ - return (from.side===to.side?6:-6); - } - }, - card:{ - chess_shezhang:{ - type:'basic', - fullskin:true, - modeimage:'chess', - enable:true, - filterTarget:function(card,player,target){ - if(target.movable(-1,0)) return true; - if(target.movable(1,0)) return true; - if(target.movable(0,-1)) return true; - if(target.movable(0,1)) return true; - return false; - }, - content:function(){ - var xy=target.getXY(); - var x=xy[0]; - var y=xy[1]; - if(target.movable(-1,0)){ - game.addTempObstacle(x-1,y,game.countPlayer()); - } - if(target.movable(1,0)){ - game.addTempObstacle(x+1,y,game.countPlayer()); - } - if(target.movable(0,1)){ - game.addTempObstacle(x,y+1,game.countPlayer()); - } - if(target.movable(0,-1)){ - game.addTempObstacle(x,y-1,game.countPlayer()); - } - }, - content_old:function(){ - 'step 0' - var pos=parseInt(player.dataset.position); - var poses=[]; - if(player.movable(-1,0)){ - poses.push(pos-1); - } - if(player.movable(1,0)){ - poses.push(pos+1); - } - if(player.movable(0,-1)){ - poses.push(pos-ui.chesswidth); - } - if(player.movable(0,1)){ - poses.push(pos+ui.chesswidth); - } - event.poses=poses; - if(poses.length==1){ - event.obstacle=poses[0]; - event.grids=[]; - } - else if(event.isMine()){ - event.grids=player.createRangeShadow(1,function(){ - event.obstacle=this.dataset.position; - game.resume(); - }) - game.pause(); - _status.imchoosing=true; - for(var i=0;i对阵模式
  • n人对战n人的模式,由单人控制,开始游戏后随机分配位置与出牌顺序
  • '+ - '每人在出牌阶段有一次移动的机会,可移动的最大距离为2
  • '+ - '任何卡牌或技能无法指定位置相隔8个格以上的角色为目标
  • '+ - '杀死对方阵营的角色可摸一张牌,杀死本方阵营无惩罚
  • '+ - '若开启主将,双方各选择一名角色成为主将。主将体力上限加一,主将死亡后,若有副将,副将代替之成为主将,否则游戏结束
  • '+ - '开启无尽模式后,任何一方有角色死亡都将选择一名新角色重新加入战场,直到点击左上角的结束游戏按钮手动结束游戏。结束游戏时,杀敌更多的一方获胜
  • '+ - '行动顺序为指定时,双方无论存活角色角色多少都将轮流进行行动。在一方所有角色行动完毕进行下一轮行动时,若其人数比另一方少,另一方可指定至多X名角色名摸一张牌,X为人数之差
  • '+ - '开启战场机关后,每个回合结束时有一定机率出现一个机关,该机关不参与战斗,并有一个影响周围或全体角色的效果。机关在出现后的5~10个回合内消失
  • '+ - '开启击退效果后,当一名角色对距离两格以内的目标造成伤害后,受伤害角色将沿反方向移动一格
  • '+ - '战场上可设置出现随机路障,角色无法移动到路障处。当一名角色的周围四格有至少三格为路障或在战场外时,其可以在回合内清除一个相邻路障
'+ - '
君主模式
  • 收集武将进行战斗,根据战斗难度及我方出场武将的强度,战斗胜利后将获得数量不等的金钱。没有君主出场时,获得的金钱较多
  • '+ - '金钱可以用来招募随机武将,招到已有武将,或遣返不需要的武将时可得到招募令
  • '+ - '战斗中有君主出场时可招降敌将,成功率取决于敌将的稀有度、剩余体力值以及手牌数。成功后战斗立即结束且没有金钱奖励。每发动一次招降,无论成功还是失败,都会扣除10招募令
  • '+ - '挑战武将会与该武将以及与其强度相近的武将进行战斗,敌方人数与我方出场人数相同,但不少于3。胜利后可通过招募令招募该武将,普通/稀有/史诗/传说武将分别需要40/100/400/1600招募令
  • '+ - '竞技场:
    随机选择9名武将,每次派出1~3名武将参战。战斗中阵亡的武将不能再次上场。

    战斗后武将进入疲劳状态,若立即再次出场则初始体力值-1。

    战斗中本方武将行动时可召唤后援,令一名未出场的已方武将加入战斗。后援武将在战斗结束后无论存活与否均不能再次出场

    当取得12场胜利或所有武将全部阵亡后结束,并根据胜场数获得随机奖励
  • '+ - '修改金钱:
    game.changeMoney
    修改招募令:
    game.changeDust
' - }, - }; + mode_chess_character_config:'战棋模式', + mode_chess_card_config:'战棋模式', + }, + ui:{ + create:{ + playergrid:function(player,x,y){ + var pos=player.getDataPos(x,y); + if(get.mode()=='tafang'){ + if(pos=ui.chessheight-1) return false; + } + var node=ui.create.div('.player.minskin.playergrid',player.parentNode); + node.link=player; + node.dataset.position=pos; + return node; + }, + fakeme:function(){ + if(ui.fakeme){ + ui.fakeme.delete(); + } + ui.fakeme=ui.create.div('.fakeme.avatar',ui.me); + ui.fakeme.style.backgroundImage=game.me.node.avatar.style.backgroundImage; + } + }, + click:{ + chessInfo:function(e){ + if(this.link.isAlive()){ + this.link.chessFocus(); + if(this.link.classList.contains('selectable')|| + this.link.classList.contains('selected')){ + ui.click.target.call(this.link,e); + ui.click.window.call(ui.window,e); + } + e.stopPropagation(); + } + }, + playergrid:function(){ + if(!_status.paused) return; + var pos=parseInt(this.dataset.position); + this.link.moveTo(pos%ui.chesswidth,Math.floor(pos/ui.chesswidth)); + if(ui.movegrids){ + while(ui.movegrids.length){ + ui.movegrids.shift().delete(); + } + } + _status.event.result={ + bool:true, + move:this.link.dataset.position + }; + game.resume(); + }, + obstacle:function(){ + if(_status.event.chooseObstacle&&_status.paused&& + _status.event.obstacles&&_status.event.obstacles.contains(this)){ + _status.event.obstacle=this; + game.resume(); + } + } + } + }, + get:{ + chessDistance:function(from,to){ + var fxy=from.getXY(); + var txy=to.getXY(); + return Math.abs(fxy[0]-txy[0])+Math.abs(fxy[1]-txy[1]); + }, + rawAttitude:function(from,to){ + return (from.side===to.side?6:-6); + } + }, + card:{ + chess_shezhang:{ + type:'basic', + fullskin:true, + modeimage:'chess', + enable:true, + filterTarget:function(card,player,target){ + if(target.movable(-1,0)) return true; + if(target.movable(1,0)) return true; + if(target.movable(0,-1)) return true; + if(target.movable(0,1)) return true; + return false; + }, + content:function(){ + var xy=target.getXY(); + var x=xy[0]; + var y=xy[1]; + if(target.movable(-1,0)){ + game.addTempObstacle(x-1,y,game.countPlayer()); + } + if(target.movable(1,0)){ + game.addTempObstacle(x+1,y,game.countPlayer()); + } + if(target.movable(0,1)){ + game.addTempObstacle(x,y+1,game.countPlayer()); + } + if(target.movable(0,-1)){ + game.addTempObstacle(x,y-1,game.countPlayer()); + } + }, + content_old:function(){ + 'step 0' + var pos=parseInt(player.dataset.position); + var poses=[]; + if(player.movable(-1,0)){ + poses.push(pos-1); + } + if(player.movable(1,0)){ + poses.push(pos+1); + } + if(player.movable(0,-1)){ + poses.push(pos-ui.chesswidth); + } + if(player.movable(0,1)){ + poses.push(pos+ui.chesswidth); + } + event.poses=poses; + if(poses.length==1){ + event.obstacle=poses[0]; + event.grids=[]; + } + else if(event.isMine()){ + event.grids=player.createRangeShadow(1,function(){ + event.obstacle=this.dataset.position; + game.resume(); + }) + game.pause(); + _status.imchoosing=true; + for(var i=0;i对阵模式
  • n人对战n人的模式,由单人控制,开始游戏后随机分配位置与出牌顺序
  • '+ + '每人在出牌阶段有一次移动的机会,可移动的最大距离为2
  • '+ + '任何卡牌或技能无法指定位置相隔8个格以上的角色为目标
  • '+ + '杀死对方阵营的角色可摸一张牌,杀死本方阵营无惩罚
  • '+ + '若开启主将,双方各选择一名角色成为主将。主将体力上限加一,主将死亡后,若有副将,副将代替之成为主将,否则游戏结束
  • '+ + '开启无尽模式后,任何一方有角色死亡都将选择一名新角色重新加入战场,直到点击左上角的结束游戏按钮手动结束游戏。结束游戏时,杀敌更多的一方获胜
  • '+ + '行动顺序为指定时,双方无论存活角色角色多少都将轮流进行行动。在一方所有角色行动完毕进行下一轮行动时,若其人数比另一方少,另一方可指定至多X名角色名摸一张牌,X为人数之差
  • '+ + '开启战场机关后,每个回合结束时有一定机率出现一个机关,该机关不参与战斗,并有一个影响周围或全体角色的效果。机关在出现后的5~10个回合内消失
  • '+ + '开启击退效果后,当一名角色对距离两格以内的目标造成伤害后,受伤害角色将沿反方向移动一格
  • '+ + '战场上可设置出现随机路障,角色无法移动到路障处。当一名角色的周围四格有至少三格为路障或在战场外时,其可以在回合内清除一个相邻路障
'+ + '
君主模式
  • 收集武将进行战斗,根据战斗难度及我方出场武将的强度,战斗胜利后将获得数量不等的金钱。没有君主出场时,获得的金钱较多
  • '+ + '金钱可以用来招募随机武将,招到已有武将,或遣返不需要的武将时可得到招募令
  • '+ + '战斗中有君主出场时可招降敌将,成功率取决于敌将的稀有度、剩余体力值以及手牌数。成功后战斗立即结束且没有金钱奖励。每发动一次招降,无论成功还是失败,都会扣除10招募令
  • '+ + '挑战武将会与该武将以及与其强度相近的武将进行战斗,敌方人数与我方出场人数相同,但不少于3。胜利后可通过招募令招募该武将,普通/稀有/史诗/传说武将分别需要40/100/400/1600招募令
  • '+ + '竞技场:
    随机选择9名武将,每次派出1~3名武将参战。战斗中阵亡的武将不能再次上场。

    战斗后武将进入疲劳状态,若立即再次出场则初始体力值-1。

    战斗中本方武将行动时可召唤后援,令一名未出场的已方武将加入战斗。后援武将在战斗结束后无论存活与否均不能再次出场

    当取得12场胜利或所有武将全部阵亡后结束,并根据胜场数获得随机奖励
  • '+ + '修改金钱:
    game.changeMoney
    修改招募令:
    game.changeDust
' + }, + }; }); diff --git a/mode/connect.js b/mode/connect.js index 3fab28e6c..75dab962b 100644 --- a/mode/connect.js +++ b/mode/connect.js @@ -2,156 +2,156 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ return { name:'connect', - start:function(){ - var directstartmode=lib.config.directstartmode; - ui.create.menu(true); + start:function(){ + var directstartmode=lib.config.directstartmode; + ui.create.menu(true); event.textnode=ui.create.div('','输入联机地址'); - var createNode=function(){ - if(event.created) return; - if(directstartmode&&lib.node){ - ui.exitroom=ui.create.system('退出房间',function(){ - game.saveConfig('directstartmode'); - game.reload(); - },true); - game.switchMode(directstartmode); - return; - } - if(lib.node&&window.require){ - ui.startServer=ui.create.system('启动服务器',function(e){ - e.stopPropagation(); - ui.click.connectMenu(); - },true); - } + var createNode=function(){ + if(event.created) return; + if(directstartmode&&lib.node){ + ui.exitroom=ui.create.system('退出房间',function(){ + game.saveConfig('directstartmode'); + game.reload(); + },true); + game.switchMode(directstartmode); + return; + } + if(lib.node&&window.require){ + ui.startServer=ui.create.system('启动服务器',function(e){ + e.stopPropagation(); + ui.click.connectMenu(); + },true); + } - event.created=true; - var node=ui.create.div('.shadowed'); - node.style.width='400px'; - node.style.height='30px'; - node.style.lineHeight='30px'; - node.style.fontFamily='xinwei'; - node.style.fontSize='30px'; - node.style.padding='10px'; - node.style.left='calc(50% - 210px)'; - node.style.top='calc(50% - 20px)'; - node.style.whiteSpace='nowrap'; - node.innerHTML=lib.config.last_ip||lib.hallURL; - node.contentEditable=true; - node.style.webkitUserSelect='text'; - node.style.textAlign='center'; + event.created=true; + var node=ui.create.div('.shadowed'); + node.style.width='400px'; + node.style.height='30px'; + node.style.lineHeight='30px'; + node.style.fontFamily='xinwei'; + node.style.fontSize='30px'; + node.style.padding='10px'; + node.style.left='calc(50% - 210px)'; + node.style.top='calc(50% - 20px)'; + node.style.whiteSpace='nowrap'; + node.innerHTML=lib.config.last_ip||lib.hallURL; + node.contentEditable=true; + node.style.webkitUserSelect='text'; + node.style.textAlign='center'; - var connect=function(e){ + var connect=function(e){ event.textnode.innerHTML='正在连接...'; - clearTimeout(event.timeout); - if(e) e.preventDefault(); - game.saveConfig('last_ip',node.innerHTML); - game.connect(node.innerHTML,function(success){ + clearTimeout(event.timeout); + if(e) e.preventDefault(); + game.saveConfig('last_ip',node.innerHTML); + game.connect(node.innerHTML,function(success){ if(!success&&event.textnode){ alert('连接失败'); event.textnode.innerHTML='输入联机地址'; } }); - }; - node.addEventListener('keydown',function(e){ - if(e.keyCode==13){ - connect(e); - } - }); - ui.window.appendChild(node); - ui.ipnode=node; + }; + node.addEventListener('keydown',function(e){ + if(e.keyCode==13){ + connect(e); + } + }); + ui.window.appendChild(node); + ui.ipnode=node; - var text=event.textnode; - text.style.width='400px'; - text.style.height='30px'; - text.style.lineHeight='30px'; - text.style.fontFamily='xinwei'; - text.style.fontSize='30px'; - text.style.padding='10px'; - text.style.left='calc(50% - 200px)'; - text.style.top='calc(50% - 80px)'; - text.style.textAlign='center'; - ui.window.appendChild(text); - ui.iptext=text; + var text=event.textnode; + text.style.width='400px'; + text.style.height='30px'; + text.style.lineHeight='30px'; + text.style.fontFamily='xinwei'; + text.style.fontSize='30px'; + text.style.padding='10px'; + text.style.left='calc(50% - 200px)'; + text.style.top='calc(50% - 80px)'; + text.style.textAlign='center'; + ui.window.appendChild(text); + ui.iptext=text; - var button=ui.create.div('.menubutton.highlight.large.pointerdiv','连接',connect); - button.style.width='70px'; - button.style.left='calc(50% - 35px)'; - button.style.top='calc(50% + 60px)'; - ui.window.appendChild(button); - ui.ipbutton=button; + var button=ui.create.div('.menubutton.highlight.large.pointerdiv','连接',connect); + button.style.width='70px'; + button.style.left='calc(50% - 35px)'; + button.style.top='calc(50% + 60px)'; + ui.window.appendChild(button); + ui.ipbutton=button; - ui.hall_button=ui.create.system('联机大厅',function(){ - node.innerHTML=get.config('hall_ip')||lib.hallURL; - connect(); - },true); - if(!get.config('hall_button')){ - ui.hall_button.style.display='none'; - } - ui.recentIP=ui.create.system('最近连接',null,true); - var clickLink=function(){ - node.innerHTML=this.innerHTML; - connect(); - }; - lib.setPopped(ui.recentIP,function(){ - if(!lib.config.recentIP.length) return; - var uiintro=ui.create.dialog('hidden'); + ui.hall_button=ui.create.system('联机大厅',function(){ + node.innerHTML=get.config('hall_ip')||lib.hallURL; + connect(); + },true); + if(!get.config('hall_button')){ + ui.hall_button.style.display='none'; + } + ui.recentIP=ui.create.system('最近连接',null,true); + var clickLink=function(){ + node.innerHTML=this.innerHTML; + connect(); + }; + lib.setPopped(ui.recentIP,function(){ + if(!lib.config.recentIP.length) return; + var uiintro=ui.create.dialog('hidden'); uiintro.listen(function(e){ e.stopPropagation(); }); - var list=ui.create.div('.caption'); - for(var i=0;i清除'); - clear.style.paddingTop=0; - clear.style.paddingBottom='3px'; - clear.listen(function(){ - lib.config.recentIP.length=0; - game.saveConfig('recentIP',[]); - uiintro.delete(); - }); - return uiintro; - },220); - lib.init.onfree(); - } - if(window.isNonameServer){ - game.connect(window.isNonameServerIp||'localhost'); - } - else if(lib.config.reconnect_info){ - var info=lib.config.reconnect_info; - game.onlineID=info[1]; - game.roomId=info[2]; + var list=ui.create.div('.caption'); + for(var i=0;i清除'); + clear.style.paddingTop=0; + clear.style.paddingBottom='3px'; + clear.listen(function(){ + lib.config.recentIP.length=0; + game.saveConfig('recentIP',[]); + uiintro.delete(); + }); + return uiintro; + },220); + lib.init.onfree(); + } + if(window.isNonameServer){ + game.connect(window.isNonameServerIp||'localhost'); + } + else if(lib.config.reconnect_info){ + var info=lib.config.reconnect_info; + game.onlineID=info[1]; + game.roomId=info[2]; if(typeof game.roomId=='number'){ game.roomIdServer=true; } - var n=5; - var connect=function(){ + var n=5; + var connect=function(){ event.textnode.innerHTML='正在连接...'; - game.connect(info[0],function(success){ - if(!success&&n--){ - createNode(); - event.timeout=setTimeout(connect,1000); - } + game.connect(info[0],function(success){ + if(!success&&n--){ + createNode(); + event.timeout=setTimeout(connect,1000); + } else{ event.textnode.innerHTML='输入联机地址'; } - }); - }; - event.timeout=setTimeout(connect,500); - _status.createNodeTimeout=setTimeout(createNode,2000); - } - else{ - createNode(); - } - _status.connectDenied=createNode; - for(var i in lib.element.event){ - event.parent[i]=lib.element.event[i]; - } - event.parent.custom={ - add:{}, - replace:{} - }; - setTimeout(lib.init.onfree,1000); - } + }); + }; + event.timeout=setTimeout(connect,500); + _status.createNodeTimeout=setTimeout(createNode,2000); + } + else{ + createNode(); + } + _status.connectDenied=createNode; + for(var i in lib.element.event){ + event.parent[i]=lib.element.event[i]; + } + event.parent.custom={ + add:{}, + replace:{} + }; + setTimeout(lib.init.onfree,1000); + } }; }); diff --git a/mode/realtime.js b/mode/realtime.js index 688c02b2f..2bb3c32a9 100644 --- a/mode/realtime.js +++ b/mode/realtime.js @@ -2,11 +2,11 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ return { name:'realtime', - start:function(){ + start:function(){ - }, - game:{ + }, + game:{ - } + } }; }); diff --git a/mode/stone.js b/mode/stone.js index f5b0485ab..3ad75e5eb 100644 --- a/mode/stone.js +++ b/mode/stone.js @@ -1,10229 +1,10229 @@ 'use strict'; game.import('mode',function(lib,game,ui,get,ai,_status){ - return { - name:'stone', - start:function(){ - "step 0" - lib.init.css(lib.assetURL+'layout/mode/','stone'); - _status.mode='deck'; - game.initStone(); - var playback=localStorage.getItem(lib.configprefix+'playback'); + return { + name:'stone', + start:function(){ + "step 0" + lib.init.css(lib.assetURL+'layout/mode/','stone'); + _status.mode='deck'; + game.initStone(); + var playback=localStorage.getItem(lib.configprefix+'playback'); - if(!playback&&_status.mode=='deck'){ - var createCardDialog=function(){ - ui.deckBuilder=ui.create.div('.popup-container#deck-builder',function(){ - if(careerList.classList.contains('shown')){ - careerList.classList.remove('shown'); - newDeck.classList.remove('active'); - } - else if(!cardDialog.classList.contains('shown')){ - this.classList.remove('shown'); - this.timeout=setTimeout(function(){ - ui.deckBuilder.remove(); - },500); - ui.arena.style.top=''; - ui.arena.style.transform=''; - ui.arena.style.opacity=''; - ui.system.style.opacity=''; - ui.auto.show(); - ui.pause.show(); - ui.historybar.show(); - } - }); - var clickNode=function(){ - cardDialog.classList.add('shown'); - controls.classList.add('shown'); - var name='未命名'; - for(var i=1;;i++){ - if(!lib.storage.deckList[name+i]){ - break; - } - } - cardDialog.editing={ - name:name+i, - content:{ - career:this.firstChild.dataset.career, - deck:[] - }, - } - rename.innerHTML=name+i; - newDeck.innerHTML='确认编辑'; - newDeck.classList.add('active'); - careerList.classList.remove('shown'); - listContainer.style.transform='translateX(200px)'; - deckContainer.innerHTML=''; - deckContainer.classList.add('shown'); - updateCardDialog(); - } - var careerList=ui.create.div('.shadowed.career',ui.deckBuilder); - for(var i=0;i/g,''); - }; - var observer = new MutationObserver(removeLine); - observer.observe(rename,{characterData:true,subtree:true}); - rename.addEventListener('keyup',removeLine); + if(!playback&&_status.mode=='deck'){ + var createCardDialog=function(){ + ui.deckBuilder=ui.create.div('.popup-container#deck-builder',function(){ + if(careerList.classList.contains('shown')){ + careerList.classList.remove('shown'); + newDeck.classList.remove('active'); + } + else if(!cardDialog.classList.contains('shown')){ + this.classList.remove('shown'); + this.timeout=setTimeout(function(){ + ui.deckBuilder.remove(); + },500); + ui.arena.style.top=''; + ui.arena.style.transform=''; + ui.arena.style.opacity=''; + ui.system.style.opacity=''; + ui.auto.show(); + ui.pause.show(); + ui.historybar.show(); + } + }); + var clickNode=function(){ + cardDialog.classList.add('shown'); + controls.classList.add('shown'); + var name='未命名'; + for(var i=1;;i++){ + if(!lib.storage.deckList[name+i]){ + break; + } + } + cardDialog.editing={ + name:name+i, + content:{ + career:this.firstChild.dataset.career, + deck:[] + }, + } + rename.innerHTML=name+i; + newDeck.innerHTML='确认编辑'; + newDeck.classList.add('active'); + careerList.classList.remove('shown'); + listContainer.style.transform='translateX(200px)'; + deckContainer.innerHTML=''; + deckContainer.classList.add('shown'); + updateCardDialog(); + } + var careerList=ui.create.div('.shadowed.career',ui.deckBuilder); + for(var i=0;i/g,''); + }; + var observer = new MutationObserver(removeLine); + observer.observe(rename,{characterData:true,subtree:true}); + rename.addEventListener('keyup',removeLine); - var cardDialog=ui.create.cardDialog(true,function(name){ - if(lib.card[name].stonehidden) return true; - var type=lib.card[name].type; - return type!='stonecard'&&type!='stonecharacter'; - },{seperate:function(list){ - var nl=[],ns=[]; - var career={}; - var careerspell={}; - for(var i=0;i=30){ - for(var i=0;i=2){ - list.push(i); - } - } - for(var i=0;i=30){ + for(var i=0;i=2){ + list.push(i); + } + } + for(var i=0;ib) return 1; - if(a'+editing.name+'', - listContainer,editDeck); - ui.create.div('.menubutton.round',deckitem).dataset.career=editing.content.career; - deckitem.name=editing.name; - } - lib.storage.deckList[editing.name]=editing.content; - } - game.save('deckList',lib.storage.deckList); - listContainer.style.transform=''; - deckContainer.classList.remove('shown'); - updateCardDialog(); - } - e.stopPropagation(); - }); - var listContainer=ui.create.div('.list-container',deckList); - for(var i in lib.storage.deckList){ - var deckitem=ui.create.div('.deckitem.shadowed',''+i+'', - listContainer,editDeck); - ui.create.div('.menubutton.round',deckitem).dataset.career=lib.storage.deckList[i].career; - deckitem.name=i; - } - var deckContainer=ui.create.div('.list-container.deck',deckList); - if(ui.deckcontrol){ - ui.deckcontrol.show(); - setTimeout(function(){ + ui.deckBuilder.appendChild(cardDialog); + var deckList=ui.create.div('.shadowed.list',ui.deckBuilder,function(e){ + e.stopPropagation(); + if(careerList.classList.contains('shown')){ + careerList.classList.remove('shown'); + newDeck.classList.remove('active'); + } + }); + var editDeck=function(){ + if(!cardDialog.classList.contains('shown')){ + cardDialog.classList.add('shown'); + controls.classList.add('shown'); + var info=lib.storage.deckList[this.name]; + cardDialog.editing={ + origin:this.name, + name:this.name, + content:{ + career:info.career, + deck:info.deck + }, + } + rename.innerHTML=this.name; + newDeck.innerHTML='确认编辑'; + newDeck.classList.add('active'); + careerList.classList.remove('shown'); + listContainer.style.transform='translateX(200px)'; + deckContainer.innerHTML=''; + for(var i=0;ib) return 1; + if(a'+editing.name+'', + listContainer,editDeck); + ui.create.div('.menubutton.round',deckitem).dataset.career=editing.content.career; + deckitem.name=editing.name; + } + lib.storage.deckList[editing.name]=editing.content; + } + game.save('deckList',lib.storage.deckList); + listContainer.style.transform=''; + deckContainer.classList.remove('shown'); + updateCardDialog(); + } + e.stopPropagation(); + }); + var listContainer=ui.create.div('.list-container',deckList); + for(var i in lib.storage.deckList){ + var deckitem=ui.create.div('.deckitem.shadowed',''+i+'', + listContainer,editDeck); + ui.create.div('.menubutton.round',deckitem).dataset.career=lib.storage.deckList[i].career; + deckitem.name=i; + } + var deckContainer=ui.create.div('.list-container.deck',deckList); + if(ui.deckcontrol){ + ui.deckcontrol.show(); + setTimeout(function(){ ui.deckcontrol.style.transition=''; },500); - } - }; + } + }; - ui.deckcontrol=ui.create.system('卡组管理',function(){ - if(this.classList.contains('hidden')) return; - // if(lib.config.low_performance){ - // ui.arena.style.transform='translateY('+ui.window.offsetHeight+'px)'; - // } - // else{ - // ui.arena.style.top='100%'; - // } - // ui.arena.style.transform='scale(0.6)'; - ui.arena.style.opacity=0; - ui.system.style.opacity=0; - ui.window.appendChild(ui.deckBuilder); - if(ui.deckBuilder.timeout){ - clearTimeout(ui.deckBuilder.timeout); - delete ui.deckBuilder.timeout; - } - ui.refresh(ui.deckBuilder); - ui.deckBuilder.classList.add('shown'); - ui.auto.hide(); - ui.pause.hide(); - ui.historybar.hide(); - },true); + ui.deckcontrol=ui.create.system('卡组管理',function(){ + if(this.classList.contains('hidden')) return; + // if(lib.config.low_performance){ + // ui.arena.style.transform='translateY('+ui.window.offsetHeight+'px)'; + // } + // else{ + // ui.arena.style.top='100%'; + // } + // ui.arena.style.transform='scale(0.6)'; + ui.arena.style.opacity=0; + ui.system.style.opacity=0; + ui.window.appendChild(ui.deckBuilder); + if(ui.deckBuilder.timeout){ + clearTimeout(ui.deckBuilder.timeout); + delete ui.deckBuilder.timeout; + } + ui.refresh(ui.deckBuilder); + ui.deckBuilder.classList.add('shown'); + ui.auto.hide(); + ui.pause.hide(); + ui.historybar.hide(); + },true); - if(lib.onfree){ - ui.deckcontrol.style.transition='all 0.5s'; - ui.deckcontrol.hide(); - lib.onfree.push(createCardDialog); - } - else{ - createCardDialog(); - } - } + if(lib.onfree){ + ui.deckcontrol.style.transition='all 0.5s'; + ui.deckcontrol.hide(); + lib.onfree.push(createCardDialog); + } + else{ + createCardDialog(); + } + } - if(playback){ - ui.create.me(); - ui.arena.style.display='none'; - ui.system.style.display='none'; - _status.playback=playback; - localStorage.removeItem(lib.configprefix+'playback'); - var store=lib.db.transaction(['video'],'readwrite').objectStore('video'); - store.get(parseInt(playback)).onsuccess=function(e){ - if(e.target.result){ - game.playVideoContent(e.target.result.video); - } - else{ - alert('播放失败:找不到录像'); - game.reload(); - } - } - event.finish(); - } - else{ - game.prepareArena(2); - // game.delay(); - } - ui.arena.classList.add('stone'); - "step 1" - for(var i=0;i'+game.me.deckCards.length); - uiintro.addSmall([game.me.deckCards,'card']); - return uiintro; - },220); - if(get.config('skill_bar')){ - _status.rageEnabled=true; + if(playback){ + ui.create.me(); + ui.arena.style.display='none'; + ui.system.style.display='none'; + _status.playback=playback; + localStorage.removeItem(lib.configprefix+'playback'); + var store=lib.db.transaction(['video'],'readwrite').objectStore('video'); + store.get(parseInt(playback)).onsuccess=function(e){ + if(e.target.result){ + game.playVideoContent(e.target.result.video); + } + else{ + alert('播放失败:找不到录像'); + game.reload(); + } + } + event.finish(); + } + else{ + game.prepareArena(2); + // game.delay(); + } + ui.arena.classList.add('stone'); + "step 1" + for(var i=0;i'+game.me.deckCards.length); + uiintro.addSmall([game.me.deckCards,'card']); + return uiintro; + },220); + if(get.config('skill_bar')){ + _status.rageEnabled=true; - ui.friendBar=ui.create.div('.skillbar.right.shadowed.playerbg',ui.arena); - ui.enemyBar=ui.create.div('.skillbar.left.shadowed.playerbg',ui.arena); - // ui.friendBar.dataset.nature='metal'; - // ui.enemyBar.dataset.nature='fire'; - ui.create.div('.skillbarshadow',ui.friendBar); - ui.create.div('.skillbarshadow',ui.enemyBar); - ui.create.div('.skillbarfill',ui.friendBar); - ui.create.div('.skillbarfill',ui.enemyBar); - ui.friendBar.fillnode=ui.create.div(ui.friendBar.lastChild); - ui.enemyBar.fillnode=ui.create.div(ui.enemyBar.lastChild); - // ui.friendBar.popnode=ui.create.div('.skillbartext',ui.friendBar); - // ui.enemyBar.popnode=ui.create.div('.skillbartext',ui.enemyBar); - _status.friendRage=0; - _status.enemyRage=0; + ui.friendBar=ui.create.div('.skillbar.right.shadowed.playerbg',ui.arena); + ui.enemyBar=ui.create.div('.skillbar.left.shadowed.playerbg',ui.arena); + // ui.friendBar.dataset.nature='metal'; + // ui.enemyBar.dataset.nature='fire'; + ui.create.div('.skillbarshadow',ui.friendBar); + ui.create.div('.skillbarshadow',ui.enemyBar); + ui.create.div('.skillbarfill',ui.friendBar); + ui.create.div('.skillbarfill',ui.enemyBar); + ui.friendBar.fillnode=ui.create.div(ui.friendBar.lastChild); + ui.enemyBar.fillnode=ui.create.div(ui.enemyBar.lastChild); + // ui.friendBar.popnode=ui.create.div('.skillbartext',ui.friendBar); + // ui.enemyBar.popnode=ui.create.div('.skillbartext',ui.enemyBar); + _status.friendRage=0; + _status.enemyRage=0; - lib.setIntro(ui.friendBar,null,true); - lib.setIntro(ui.enemyBar,null,true); - } - } - _status.friendCount=ui.create.system('',null,true); - _status.enemyCount=ui.create.system('',null,true); - game.updateStatusCount(); - lib.setPopped(_status.friendCount,function(){ - var uiintro=ui.create.dialog('hidden'); + lib.setIntro(ui.friendBar,null,true); + lib.setIntro(ui.enemyBar,null,true); + } + } + _status.friendCount=ui.create.system('',null,true); + _status.enemyCount=ui.create.system('',null,true); + game.updateStatusCount(); + lib.setPopped(_status.friendCount,function(){ + var uiintro=ui.create.dialog('hidden'); - if(_status.deadfriend.length){ - uiintro.add('已阵亡'); - uiintro.add([_status.deadfriend,'player']); - } + if(_status.deadfriend.length){ + uiintro.add('已阵亡'); + uiintro.add([_status.deadfriend,'player']); + } - uiintro.add('未上场'); - if(_status.mylist.length){ - uiintro.add([_status.mylist,'character']); - } - else{ - uiintro.add('(无)') - } + uiintro.add('未上场'); + if(_status.mylist.length){ + uiintro.add([_status.mylist,'character']); + } + else{ + uiintro.add('(无)') + } - return uiintro; - }); - lib.setPopped(_status.enemyCount,function(){ - if(_status.deadenemy.length){ - var uiintro=ui.create.dialog('hidden'); - uiintro.add('已阵亡'); - uiintro.add([_status.deadenemy,'player']); - return uiintro; - } - }); + return uiintro; + }); + lib.setPopped(_status.enemyCount,function(){ + if(_status.deadenemy.length){ + var uiintro=ui.create.dialog('hidden'); + uiintro.add('已阵亡'); + uiintro.add([_status.deadenemy,'player']); + return uiintro; + } + }); - game.me.side=Math.random()<0.5; - game.enemy.side=!game.me.side; + game.me.side=Math.random()<0.5; + game.enemy.side=!game.me.side; - var players=get.players(lib.sort.position); - var info=[]; - for(var i=0;i=100){ - _status.friendRage=100; - ui.friendBar.fillnode.style.top='-50%'; - ui.friendBar.classList.add('full'); - } - else{ - ui.friendBar.fillnode.style.top=(100-_status.friendRage)+'%'; - ui.friendBar.classList.remove('full'); - } - } - else{ - if(_status.enemyRage<100){ - popup=ui.enemyBar; - } - _status.enemyRage+=num; - if(_status.enemyRage<0){ - _status.enemyRage=0; - } - if(_status.enemyRage>=100){ - _status.enemyRage=100; - ui.enemyBar.fillnode.style.top='-50%'; - ui.enemyBar.classList.add('full'); - } - else{ - ui.enemyBar.fillnode.style.top=(100-_status.enemyRage)+'%'; - ui.enemyBar.classList.remove('full'); - } - } - if(num>0&&popup){ - var node=ui.create.div('.skillbartext',num.toString(),popup); - ui.refresh(node); - node.style.opacity=1; - setTimeout(function(){ - node.delete(); - },700); - } - }, - drawDeck:function(num,log){ - if(!num){ - num=1; - } - var cards=this.getDeckCards(num); - if(log==false){ - this.directgain(cards); - } - else if(log==true){ - this.directgain(cards); - game.log(this,'从牌库中获得了'+get.cnNumber(num)+'张牌'); - } - else{ - this.gain(cards,'draw'); - game.log(this,'从牌库中获得了'+get.cnNumber(num)+'张牌'); - } - return cards; - }, - updateActCount:function(used,countx,current){ - if(_status.video){ - this.actcount=countx||2; - } - else{ - game.addVideo('updateActCount',this,[used,this.actcount,this.getActCount()]); - } - var maxcount,overflow2; - if(game.layout=='default'||used=='outphase'||_status.currentPhase!=this){ - maxcount=this.actcount; - } - else{ - if(_status.video){ - maxcount=this.actcount-(current||0); - } - else{ - maxcount=this.actcount-this.getActCount(); - } - if(this.actcount>maxcount){ - maxcount=this.actcount; - } - if(maxcount>12){ - maxcount=this.actcount+1; - this.node.actcount.classList.add('overflow2'); - } - else{ - this.node.actcount.classList.remove('overflow2'); - } - } - for(var i=0;i<12;i++){ - if(maxcount>this.node.actcount.childElementCount){ - ui.create.div(this.node.actcount); - } - else if(maxcount=this.actcount){ - this.node.actcount.childNodes[i].classList.add('overflow'); - } - else{ - this.node.actcount.childNodes[i].classList.remove('overflow'); - } - } - else{ - this.node.actcount.childNodes[i].classList.add('lost'); - this.node.actcount.childNodes[i].classList.remove('overflow'); - } - } - } - }, - getAct:function(){ - return this.actcount-this.getActCount(); - }, - hasFellowSkill:function(skill,exclude){ - for(var i=0;i=0){ - this.actcharacterlist[index]=null; - } - return this; - }, - dieAfter:function(source){ - var dead=this; - if(game.me.isDead()){ - if(!_status.mylist.length){ - _status.friendCount.innerHTML='友军: '+get.cnNumber(0); - game.over(false); - } - else{ - game.pause(); - _status.deadfriend.push(this); - game.additionaldead.push(this); - setTimeout(function(){ - var player=ui.create.player(); - player.getId(); - player.classList.add('noidentity'); - player.dataset.position=dead.dataset.position; - player.side=dead.side; - player.actcharacterlist=dead.actcharacterlist; - player.animate('replaceme'); - player.actcount=game.enemy.actcount; - player.actcount=dead.actcount; - if(_status.double_character){ - player.init(_status.mylist.shift(),_status.mylist.shift()); - } - else{ - player.init(_status.mylist.shift()); - } - player.maxHp++; - player.hp++; - if(_status.mode=='deck'){ - get.deck(player,_status.deck.shift()); - } - game.players.push(player); - ui.arena.appendChild(player); + event.trigger('gameStart'); + if(_status.mode=='deck'){ + game.gameDraw(game.me,3); + game.me.drawDeck(1,false); + game.me.next.drawDeck(1,false); + } + else{ + game.gameDraw(game.me); + } + "step 3" + game.me.chooseBool('是否置换手牌?'); + "step 4" + if(result.bool){ + var hs=game.me.getCards('h'); + for(var i=0;i=100){ + _status.friendRage=100; + ui.friendBar.fillnode.style.top='-50%'; + ui.friendBar.classList.add('full'); + } + else{ + ui.friendBar.fillnode.style.top=(100-_status.friendRage)+'%'; + ui.friendBar.classList.remove('full'); + } + } + else{ + if(_status.enemyRage<100){ + popup=ui.enemyBar; + } + _status.enemyRage+=num; + if(_status.enemyRage<0){ + _status.enemyRage=0; + } + if(_status.enemyRage>=100){ + _status.enemyRage=100; + ui.enemyBar.fillnode.style.top='-50%'; + ui.enemyBar.classList.add('full'); + } + else{ + ui.enemyBar.fillnode.style.top=(100-_status.enemyRage)+'%'; + ui.enemyBar.classList.remove('full'); + } + } + if(num>0&&popup){ + var node=ui.create.div('.skillbartext',num.toString(),popup); + ui.refresh(node); + node.style.opacity=1; + setTimeout(function(){ + node.delete(); + },700); + } + }, + drawDeck:function(num,log){ + if(!num){ + num=1; + } + var cards=this.getDeckCards(num); + if(log==false){ + this.directgain(cards); + } + else if(log==true){ + this.directgain(cards); + game.log(this,'从牌库中获得了'+get.cnNumber(num)+'张牌'); + } + else{ + this.gain(cards,'draw'); + game.log(this,'从牌库中获得了'+get.cnNumber(num)+'张牌'); + } + return cards; + }, + updateActCount:function(used,countx,current){ + if(_status.video){ + this.actcount=countx||2; + } + else{ + game.addVideo('updateActCount',this,[used,this.actcount,this.getActCount()]); + } + var maxcount,overflow2; + if(game.layout=='default'||used=='outphase'||_status.currentPhase!=this){ + maxcount=this.actcount; + } + else{ + if(_status.video){ + maxcount=this.actcount-(current||0); + } + else{ + maxcount=this.actcount-this.getActCount(); + } + if(this.actcount>maxcount){ + maxcount=this.actcount; + } + if(maxcount>12){ + maxcount=this.actcount+1; + this.node.actcount.classList.add('overflow2'); + } + else{ + this.node.actcount.classList.remove('overflow2'); + } + } + for(var i=0;i<12;i++){ + if(maxcount>this.node.actcount.childElementCount){ + ui.create.div(this.node.actcount); + } + else if(maxcount=this.actcount){ + this.node.actcount.childNodes[i].classList.add('overflow'); + } + else{ + this.node.actcount.childNodes[i].classList.remove('overflow'); + } + } + else{ + this.node.actcount.childNodes[i].classList.add('lost'); + this.node.actcount.childNodes[i].classList.remove('overflow'); + } + } + } + }, + getAct:function(){ + return this.actcount-this.getActCount(); + }, + hasFellowSkill:function(skill,exclude){ + for(var i=0;i=0){ + this.actcharacterlist[index]=null; + } + return this; + }, + dieAfter:function(source){ + var dead=this; + if(game.me.isDead()){ + if(!_status.mylist.length){ + _status.friendCount.innerHTML='友军: '+get.cnNumber(0); + game.over(false); + } + else{ + game.pause(); + _status.deadfriend.push(this); + game.additionaldead.push(this); + setTimeout(function(){ + var player=ui.create.player(); + player.getId(); + player.classList.add('noidentity'); + player.dataset.position=dead.dataset.position; + player.side=dead.side; + player.actcharacterlist=dead.actcharacterlist; + player.animate('replaceme'); + player.actcount=game.enemy.actcount; + player.actcount=dead.actcount; + if(_status.double_character){ + player.init(_status.mylist.shift(),_status.mylist.shift()); + } + else{ + player.init(_status.mylist.shift()); + } + player.maxHp++; + player.hp++; + if(_status.mode=='deck'){ + get.deck(player,_status.deck.shift()); + } + game.players.push(player); + ui.arena.appendChild(player); - game.addVideo('stoneSwap',null,{ - name:player.name, - name2:player.name2, - position:player.dataset.position, - actcount:player.actcount, - me:true - }); - game.swapControl(player); - game.arrangePlayers(); - if(_status.mode=='deck'){ - var nd=game.enemy.countFellow(); - if(nd){ - player.draw(3+nd,{drawDeck:nd},false); - } - else{ - player.draw(3,false); - } - } - else{ - player.draw(3+game.enemy.countFellow(),false); - } - game.resume(); - game.updateStatusCount(); - },lib.config.duration); + game.addVideo('stoneSwap',null,{ + name:player.name, + name2:player.name2, + position:player.dataset.position, + actcount:player.actcount, + me:true + }); + game.swapControl(player); + game.arrangePlayers(); + if(_status.mode=='deck'){ + var nd=game.enemy.countFellow(); + if(nd){ + player.draw(3+nd,{drawDeck:nd},false); + } + else{ + player.draw(3,false); + } + } + else{ + player.draw(3+game.enemy.countFellow(),false); + } + game.resume(); + game.updateStatusCount(); + },lib.config.duration); - } - } - else if(game.enemy.isDead()){ - if(!_status.enemylist.length){ - _status.enemyCount.innerHTML='敌军: '+get.cnNumber(0); - game.over(true); - } - else{ - game.pause(); - _status.deadenemy.push(this); - game.additionaldead.push(this); - setTimeout(function(){ - var player=ui.create.player(); - player.getId(); - player.classList.add('noidentity'); - player.dataset.position=dead.dataset.position; - player.side=dead.side; - player.actcharacterlist=dead.actcharacterlist; - player.animate('replaceenemy'); - player.actcount=dead.actcount; - if(_status.double_character){ - player.init(_status.enemylist.shift(),_status.enemylist.shift()); - } - else{ - player.init(_status.enemylist.shift()); - } - player.maxHp++; - player.hp++; - if(_status.mode=='deck'){ - get.deck(player,'random'); - } - game.players.push(player); - game.enemy=player; - ui.arena.appendChild(player); + } + } + else if(game.enemy.isDead()){ + if(!_status.enemylist.length){ + _status.enemyCount.innerHTML='敌军: '+get.cnNumber(0); + game.over(true); + } + else{ + game.pause(); + _status.deadenemy.push(this); + game.additionaldead.push(this); + setTimeout(function(){ + var player=ui.create.player(); + player.getId(); + player.classList.add('noidentity'); + player.dataset.position=dead.dataset.position; + player.side=dead.side; + player.actcharacterlist=dead.actcharacterlist; + player.animate('replaceenemy'); + player.actcount=dead.actcount; + if(_status.double_character){ + player.init(_status.enemylist.shift(),_status.enemylist.shift()); + } + else{ + player.init(_status.enemylist.shift()); + } + player.maxHp++; + player.hp++; + if(_status.mode=='deck'){ + get.deck(player,'random'); + } + game.players.push(player); + game.enemy=player; + ui.arena.appendChild(player); - game.addVideo('stoneSwap',null,{ - name:player.name, - name2:player.name2, - position:player.dataset.position, - actcount:player.actcount, - }); - game.arrangePlayers(); - if(_status.mode=='deck'){ - var nd=game.me.countFellow(); - if(nd){ - player.draw(3+nd,{drawDeck:nd},false); - } - else{ - player.draw(3,false); - } - } - else{ - player.draw(3+game.me.countFellow(),false); - } - game.resume(); - game.updateStatusCount(); - },lib.config.duration); - } - } - if(source&&source.side!=this.side&&!source.isMin()){ - if(_status.mode=='deck'){ - source.drawDeck(); - } - else{ - source.draw(); - } - source.actused--; - source.updateActCount(); - } - game.dead.remove(this); - game.arrangePlayers(); - this.getLeader().removeFellow(this); - setTimeout(function(){ - dead.delete(); - },500); - } - } - }, - beastList:['stone_misha','stone_leiouke','stone_huofu','stone_caoyuanshi','stone_jiewangzhu', - 'stone_huangjialeixiang','stone_damoshatuo','stone_tujiu','stone_senlinlang', - 'stone_fennuxiaoji','stone_juxingchanchu','stone_yanjingshe','stone_yuanhou' - ], - cardPack:{ - mode_stone:[ - 'spell_xiaoshi','spell_chenmo','spell_morizaihuo','spell_shengerpingdeng','spell_jingshenkongzhi','spell_anyingkuangluan', - 'spell_binghuan','spell_yanmie','spell_zhiliaozhichu','spell_wangzhezhufu','spell_diyulieyan','spell_zhiliaoshui', - 'spell_hanbingjian','spell_huoqiushu','spell_bianxingshu','spell_aoshuzhihui','spell_baofengxue','spell_lieyanfengbao', - 'spell_shandianfengbao','spell_chazhuangshandian','spell_yaoshu','spell_shixue','spell_lianhuanbaolie','spell_yexinglanghun', - 'spell_fuchouzhinu','spell_liliangzhufu','spell_fennuzhichui','spell_fengxian','spell_zuozhandongyuan','spell_shengliaoshu', - 'spell_cigu','spell_modaoyou','spell_jianrenluanwu','spell_daoshan','spell_cisha','spell_sijidaifa', - 'spell_huotigenxu','spell_wuyashenxiang','spell_ziranzhili','spell_yemanpaoxiao','spell_hengsao','spell_yexingchengzhang', - 'spell_xishengqiyue','spell_zuzhou','spell_xiaoguibaopo','spell_emozhinu','spell_anyinglieyan','spell_liliangdaijia', - 'spell_shenshengxinxing','spell_shengguangzhadan','spell_maizang','spell_xinlingshijie','spell_naluzhiguang','spell_zhiliaozhihuan', - 'spell_nuxi','spell_dunpaimengji','spell_zhansha','spell_nuhuozhongshao','spell_xuanfengzhan','spell_juemingluandou', - 'spell_lierenyinji','spell_kuaisusheji','spell_guanmenfanggou','spell_zhaohuanchongwu','spell_zidanshangtang','spell_duochongsheji', - 'spell_xianzuzhihun','spell_xianzuzhaohuan','spell_fengnu','spell_shihuawuqi','spell_xianzuzhishi','spell_rongyanbaolie', - 'spell_laojiuhuoba','spell_chirehuoba','spell_aoshufeidan','spell_canying','spell_yanbaoshu','spell_hanbingpingzhang','spell_jingxiang', - 'spell_mengun','spell_jipao','spell_beici','spell_weijisifu','spell_zhumo','spell_anzhongpohuai','spell_piaoqie', - 'spell_conglinzhihun','spell_heiandiyu','spell_fugen','spell_xingchenzhuiluo','spell_fennu','spell_ziyang', - 'spell_shalumingling','spell_tianjiangzhuqun','spell_tanxianmao','spell_dubiao','spell_qiangfengsheji','spell_zhuizongshu', - 'spell_zhenyanshu','spell_enzeshu','spell_anyingxingtai','spell_kuaisuzhiliao','spell_kongxinshu','spell_xinlinghanbao', - 'spell_jinyingduijue','spell_zhihuizhufu','spell_shenshengfennu','spell_yongshizhufu','spell_shenpan','spell_zhengqianghaosheng', - 'spell_zhongnian','spell_fuchoudaji','spell_yingyongdaji','spell_zhandounuhuo','spell_chongfeng','spell_kuangbao', - 'spell_linghunhongxi','spell_siwangchanrao','spell_emozhixin','spell_fushishu','spell_ansezhadan','spell_heianqiyue' - ] - }, - characterPack:{ - mode_stone:{ - stone_tutengyongshi:['male','wei',4,['shaman_jili'],['minskin','stone'],[4,2,'shaman']], - stone_xuejuren:['male','wei',2,['shaman_xueju'],['minskin','stone'],[1,1,'shaman']], - stone_tuyuansu:['male','qun',5,['chaofeng'],['minskin','stone'],[5,4,'shaman']], - stone_huoyuansu:['male','shu',3,['shaman_huoxi'],['minskin','stone'],[4,3,'shaman']], - stone_fachao:['male','wei',3,['shaman_tuteng','shaman_fachao'],['minskin','stone'],[3,0,'shaman']], - stone_huoshe:['male','shu',3,['shaman_tuteng','shaman_huoshe'],['minskin','stone'],[3,0,'shaman']], - stone_huoli:['male','wei',3,['shaman_tuteng','shaman_huoli'],['minskin','stone'],[2,0,'shaman']], - stone_huoyanweishi:['male','shu',4,['shaman_zhuhuo'],['minskin','stone'],[4,1,'shaman']], - stone_tutengshi:['female','wei',2,['shaman_peiyu'],['minskin','stone'],[3,3,'shaman']], - stone_shachuisaman:['male','qun',3,['shaman_fengnu'],['minskin','stone'],[4,4,'shaman']], - stone_wanshiyuansu:['male','qun',3,['shaman_zoushi'],['minskin','stone'],[3,1,'shaman']], - stone_shalinxingzhe:['male','qun',4,['shaman_anhun'],['minskin','stone'],[4,2,'shaman']], + game.addVideo('stoneSwap',null,{ + name:player.name, + name2:player.name2, + position:player.dataset.position, + actcount:player.actcount, + }); + game.arrangePlayers(); + if(_status.mode=='deck'){ + var nd=game.me.countFellow(); + if(nd){ + player.draw(3+nd,{drawDeck:nd},false); + } + else{ + player.draw(3,false); + } + } + else{ + player.draw(3+game.me.countFellow(),false); + } + game.resume(); + game.updateStatusCount(); + },lib.config.duration); + } + } + if(source&&source.side!=this.side&&!source.isMin()){ + if(_status.mode=='deck'){ + source.drawDeck(); + } + else{ + source.draw(); + } + source.actused--; + source.updateActCount(); + } + game.dead.remove(this); + game.arrangePlayers(); + this.getLeader().removeFellow(this); + setTimeout(function(){ + dead.delete(); + },500); + } + } + }, + beastList:['stone_misha','stone_leiouke','stone_huofu','stone_caoyuanshi','stone_jiewangzhu', + 'stone_huangjialeixiang','stone_damoshatuo','stone_tujiu','stone_senlinlang', + 'stone_fennuxiaoji','stone_juxingchanchu','stone_yanjingshe','stone_yuanhou' + ], + cardPack:{ + mode_stone:[ + 'spell_xiaoshi','spell_chenmo','spell_morizaihuo','spell_shengerpingdeng','spell_jingshenkongzhi','spell_anyingkuangluan', + 'spell_binghuan','spell_yanmie','spell_zhiliaozhichu','spell_wangzhezhufu','spell_diyulieyan','spell_zhiliaoshui', + 'spell_hanbingjian','spell_huoqiushu','spell_bianxingshu','spell_aoshuzhihui','spell_baofengxue','spell_lieyanfengbao', + 'spell_shandianfengbao','spell_chazhuangshandian','spell_yaoshu','spell_shixue','spell_lianhuanbaolie','spell_yexinglanghun', + 'spell_fuchouzhinu','spell_liliangzhufu','spell_fennuzhichui','spell_fengxian','spell_zuozhandongyuan','spell_shengliaoshu', + 'spell_cigu','spell_modaoyou','spell_jianrenluanwu','spell_daoshan','spell_cisha','spell_sijidaifa', + 'spell_huotigenxu','spell_wuyashenxiang','spell_ziranzhili','spell_yemanpaoxiao','spell_hengsao','spell_yexingchengzhang', + 'spell_xishengqiyue','spell_zuzhou','spell_xiaoguibaopo','spell_emozhinu','spell_anyinglieyan','spell_liliangdaijia', + 'spell_shenshengxinxing','spell_shengguangzhadan','spell_maizang','spell_xinlingshijie','spell_naluzhiguang','spell_zhiliaozhihuan', + 'spell_nuxi','spell_dunpaimengji','spell_zhansha','spell_nuhuozhongshao','spell_xuanfengzhan','spell_juemingluandou', + 'spell_lierenyinji','spell_kuaisusheji','spell_guanmenfanggou','spell_zhaohuanchongwu','spell_zidanshangtang','spell_duochongsheji', + 'spell_xianzuzhihun','spell_xianzuzhaohuan','spell_fengnu','spell_shihuawuqi','spell_xianzuzhishi','spell_rongyanbaolie', + 'spell_laojiuhuoba','spell_chirehuoba','spell_aoshufeidan','spell_canying','spell_yanbaoshu','spell_hanbingpingzhang','spell_jingxiang', + 'spell_mengun','spell_jipao','spell_beici','spell_weijisifu','spell_zhumo','spell_anzhongpohuai','spell_piaoqie', + 'spell_conglinzhihun','spell_heiandiyu','spell_fugen','spell_xingchenzhuiluo','spell_fennu','spell_ziyang', + 'spell_shalumingling','spell_tianjiangzhuqun','spell_tanxianmao','spell_dubiao','spell_qiangfengsheji','spell_zhuizongshu', + 'spell_zhenyanshu','spell_enzeshu','spell_anyingxingtai','spell_kuaisuzhiliao','spell_kongxinshu','spell_xinlinghanbao', + 'spell_jinyingduijue','spell_zhihuizhufu','spell_shenshengfennu','spell_yongshizhufu','spell_shenpan','spell_zhengqianghaosheng', + 'spell_zhongnian','spell_fuchoudaji','spell_yingyongdaji','spell_zhandounuhuo','spell_chongfeng','spell_kuangbao', + 'spell_linghunhongxi','spell_siwangchanrao','spell_emozhixin','spell_fushishu','spell_ansezhadan','spell_heianqiyue' + ] + }, + characterPack:{ + mode_stone:{ + stone_tutengyongshi:['male','wei',4,['shaman_jili'],['minskin','stone'],[4,2,'shaman']], + stone_xuejuren:['male','wei',2,['shaman_xueju'],['minskin','stone'],[1,1,'shaman']], + stone_tuyuansu:['male','qun',5,['chaofeng'],['minskin','stone'],[5,4,'shaman']], + stone_huoyuansu:['male','shu',3,['shaman_huoxi'],['minskin','stone'],[4,3,'shaman']], + stone_fachao:['male','wei',3,['shaman_tuteng','shaman_fachao'],['minskin','stone'],[3,0,'shaman']], + stone_huoshe:['male','shu',3,['shaman_tuteng','shaman_huoshe'],['minskin','stone'],[3,0,'shaman']], + stone_huoli:['male','wei',3,['shaman_tuteng','shaman_huoli'],['minskin','stone'],[2,0,'shaman']], + stone_huoyanweishi:['male','shu',4,['shaman_zhuhuo'],['minskin','stone'],[4,1,'shaman']], + stone_tutengshi:['female','wei',2,['shaman_peiyu'],['minskin','stone'],[3,3,'shaman']], + stone_shachuisaman:['male','qun',3,['shaman_fengnu'],['minskin','stone'],[4,4,'shaman']], + stone_wanshiyuansu:['male','qun',3,['shaman_zoushi'],['minskin','stone'],[3,1,'shaman']], + stone_shalinxingzhe:['male','qun',4,['shaman_anhun'],['minskin','stone'],[4,2,'shaman']], - stone_kuangyedoushi:['male','wu',3,['druid_nuhuo'],['minskin','stone'],[4,2,'druid']], - stone_conglinshouwei:['male','wu',3,['druid_huwei'],['minskin','stone'],[4,2,'druid']], - stone_baohuzhishu:['male','qun',6,['chaofeng'],['minskin','stone'],[6,4,'druid']], - stone_liebao:['male','wei',3,['stone_chongfeng'],['minskin','stone'],[3,2,'druid']], - stone_zongxiong:['male','shu',4,['chaofeng'],['minskin','stone'],[4,2,'druid']], - stone_baoqishi:['female','wei',2,['druid_chengzhang'],['minskin','stone'],[2,2,'druid']], - stone_renyaqishi:['female','wei',1,['druid_renya'],['minskin','stone'],[1,1,'druid']], - stone_huangyeqishi:['male','wei',4,['druid_chicheng'],['minskin','stone'],[5,2,'druid']], - stone_huoshanxiemu:['male','wei',3,['druid_juhuo','chaofeng'],['minskin','stone'],[5,6,'druid']], - stone_conglinxiaoshou:['male','wei',3,['druid_yuehuo'],['minskin','stone'],[4,4,'druid']], - stone_lindishuyao:['female','wei',3,['druid_yeyou'],['minskin','stone'],[3,3,'druid']], - stone_xunmenglong:['male','wei',2,['druid_qicheng'],['minskin','stone'],[3,3,'druid']], + stone_kuangyedoushi:['male','wu',3,['druid_nuhuo'],['minskin','stone'],[4,2,'druid']], + stone_conglinshouwei:['male','wu',3,['druid_huwei'],['minskin','stone'],[4,2,'druid']], + stone_baohuzhishu:['male','qun',6,['chaofeng'],['minskin','stone'],[6,4,'druid']], + stone_liebao:['male','wei',3,['stone_chongfeng'],['minskin','stone'],[3,2,'druid']], + stone_zongxiong:['male','shu',4,['chaofeng'],['minskin','stone'],[4,2,'druid']], + stone_baoqishi:['female','wei',2,['druid_chengzhang'],['minskin','stone'],[2,2,'druid']], + stone_renyaqishi:['female','wei',1,['druid_renya'],['minskin','stone'],[1,1,'druid']], + stone_huangyeqishi:['male','wei',4,['druid_chicheng'],['minskin','stone'],[5,2,'druid']], + stone_huoshanxiemu:['male','wei',3,['druid_juhuo','chaofeng'],['minskin','stone'],[5,6,'druid']], + stone_conglinxiaoshou:['male','wei',3,['druid_yuehuo'],['minskin','stone'],[4,4,'druid']], + stone_lindishuyao:['female','wei',3,['druid_yeyou'],['minskin','stone'],[3,3,'druid']], + stone_xunmenglong:['male','wei',2,['druid_qicheng'],['minskin','stone'],[3,3,'druid']], - stone_caoyuanshi:['male','qun',5,['hunter_nuhou'],['minskin','stone'],[5,2,'hunter']], - stone_leiouke:['male','shu',2,['hunter_zhanhuo'],['minskin','stone'],[3,1,'hunter']], - stone_huofu:['male','qun',2,['stone_chongfeng'],['minskin','stone'],[3,4,'hunter']], - stone_misha:['male','shu',3,['chaofeng'],['minskin','stone'],[3,3,'hunter']], - stone_jiewangzhu:['male','wu',1,['hunter_jiewang'],['minskin','stone'],[1,2,'hunter']], - stone_xunshoushi:['male','qun',2,['hunter_xunshou'],['minskin','stone'],[4,3,'hunter']], - stone_senlinlang:['male','qun',1,['hunter_qunxi'],['minskin','stone'],[1,2,'hunter']], - stone_tujiu:['male','qun',3,['hunter_mishi'],['minskin','stone'],[3,2,'hunter']], - stone_muyangren:['male','qun',3,['hunter_muyang'],['minskin','stone'],[4,3,'hunter']], - stone_jujishou:['male','qun',2,['hunter_juji'],['minskin','stone'],[2,2,'hunter']], - stone_damoshatuo:['male','qun',3,['hunter_dusha'],['minskin','stone'],[3,3,'hunter']], - stone_huangjialeixiang:['male','qun',2,['hunter_chuanlin'],['minskin','stone'],[2,3,'hunter']], + stone_caoyuanshi:['male','qun',5,['hunter_nuhou'],['minskin','stone'],[5,2,'hunter']], + stone_leiouke:['male','shu',2,['hunter_zhanhuo'],['minskin','stone'],[3,1,'hunter']], + stone_huofu:['male','qun',2,['stone_chongfeng'],['minskin','stone'],[3,4,'hunter']], + stone_misha:['male','shu',3,['chaofeng'],['minskin','stone'],[3,3,'hunter']], + stone_jiewangzhu:['male','wu',1,['hunter_jiewang'],['minskin','stone'],[1,2,'hunter']], + stone_xunshoushi:['male','qun',2,['hunter_xunshou'],['minskin','stone'],[4,3,'hunter']], + stone_senlinlang:['male','qun',1,['hunter_qunxi'],['minskin','stone'],[1,2,'hunter']], + stone_tujiu:['male','qun',3,['hunter_mishi'],['minskin','stone'],[3,2,'hunter']], + stone_muyangren:['male','qun',3,['hunter_muyang'],['minskin','stone'],[4,3,'hunter']], + stone_jujishou:['male','qun',2,['hunter_juji'],['minskin','stone'],[2,2,'hunter']], + stone_damoshatuo:['male','qun',3,['hunter_dusha'],['minskin','stone'],[3,3,'hunter']], + stone_huangjialeixiang:['male','qun',2,['hunter_chuanlin'],['minskin','stone'],[2,3,'hunter']], - stone_shuiyuansu:['male','wei',4,['mage_bingdong'],['minskin','stone'],[4,2,'mage']], - stone_wushixuetu:['female','wu',1,['mage_zhufa'],['minskin','stone'],[1,2,'mage']], - stone_huoyao:['male','shu',3,['mage_lieyan'],['minskin','stone'],[3,1,'mage']], - stone_falifulong:['male','shu',2,['mage_tunfa'],['minskin','stone'],[1,1,'mage']], - stone_yingxiongzhihun:['male','wei',1,['mage_minghuo'],['minskin','stone'],[1,2,'mage']], - stone_shifazhe:['male','qun',3,['mage_shifa'],['minskin','stone'],[3,3,'mage']], - stone_aoshushi:['male','qun',3,['mage_aoshu'],['minskin','stone'],[3,2,'mage']], - stone_faqishi:['male','qun',4,['mage_jili'],['minskin','stone'],[4,2,'mage']], - stone_fuhuokaijia:['male','qun',3,['mage_gushou'],['minskin','stone'],[3,3,'mage']], - stone_kaodalalong:['male','qun',4,['mage_yufa'],['minskin','stone'],[5,4,'mage']], - stone_yanshushi:['male','qun',2,['mage_yanshu'],['minskin','stone'],[4,4,'mage']], - stone_xulingwushi:['male','qun',2,['mage_pingxu'],['minskin','stone'],[3,3,'mage']], + stone_shuiyuansu:['male','wei',4,['mage_bingdong'],['minskin','stone'],[4,2,'mage']], + stone_wushixuetu:['female','wu',1,['mage_zhufa'],['minskin','stone'],[1,2,'mage']], + stone_huoyao:['male','shu',3,['mage_lieyan'],['minskin','stone'],[3,1,'mage']], + stone_falifulong:['male','shu',2,['mage_tunfa'],['minskin','stone'],[1,1,'mage']], + stone_yingxiongzhihun:['male','wei',1,['mage_minghuo'],['minskin','stone'],[1,2,'mage']], + stone_shifazhe:['male','qun',3,['mage_shifa'],['minskin','stone'],[3,3,'mage']], + stone_aoshushi:['male','qun',3,['mage_aoshu'],['minskin','stone'],[3,2,'mage']], + stone_faqishi:['male','qun',4,['mage_jili'],['minskin','stone'],[4,2,'mage']], + stone_fuhuokaijia:['male','qun',3,['mage_gushou'],['minskin','stone'],[3,3,'mage']], + stone_kaodalalong:['male','qun',4,['mage_yufa'],['minskin','stone'],[5,4,'mage']], + stone_yanshushi:['male','qun',2,['mage_yanshu'],['minskin','stone'],[4,4,'mage']], + stone_xulingwushi:['male','qun',2,['mage_pingxu'],['minskin','stone'],[3,3,'mage']], - stone_hudunren:['male','qun',2,['paladin_hudun'],['minskin','stone'],[2,2,'paladin']], - stone_junxuguan:['male','qun',3,['paladin_buji'],['minskin','stone'],[4,1,'paladin']], - stone_yurenqishi:['male','qun',2,['paladin_zhaochao'],['minskin','stone'],[4,2,'paladin']], - stone_chidunweishi:['male','qun',3,['paladin_chidun'],['minskin','stone'],[3,2,'paladin']], - stone_liewangshouwei:['male','qun',5,['paladin_shouwei'],['minskin','stone'],[5,2,'paladin']], - stone_longwangpeiou:['female','qun',4,['paladin_zhaohuan'],['minskin','stone'],[5,4,'paladin']], - stone_baoweizhe:['male','qun',2,['paladin_baowei'],['minskin','stone'],[2,1,'paladin']], - stone_guiqishi:['male','qun',5,['paladin_tuxi'],['minskin','stone'],[5,4,'paladin']], - stone_shenmiqishou:['male','qun',4,['paladin_miying'],['minskin','stone'],[5,4,'paladin']], - stone_shixiangweishi:['female','qun',3,['paladin_huashi'],['minskin','stone'],[3,3,'paladin']], - stone_xuefanzhanshi:['male','qun',3,['paladin_jinghua'],['minskin','stone'],[4,4,'paladin']], - stone_xunmashi:['male','qun',3,['paladin_moma'],['minskin','stone'],[3,2,'paladin']], + stone_hudunren:['male','qun',2,['paladin_hudun'],['minskin','stone'],[2,2,'paladin']], + stone_junxuguan:['male','qun',3,['paladin_buji'],['minskin','stone'],[4,1,'paladin']], + stone_yurenqishi:['male','qun',2,['paladin_zhaochao'],['minskin','stone'],[4,2,'paladin']], + stone_chidunweishi:['male','qun',3,['paladin_chidun'],['minskin','stone'],[3,2,'paladin']], + stone_liewangshouwei:['male','qun',5,['paladin_shouwei'],['minskin','stone'],[5,2,'paladin']], + stone_longwangpeiou:['female','qun',4,['paladin_zhaohuan'],['minskin','stone'],[5,4,'paladin']], + stone_baoweizhe:['male','qun',2,['paladin_baowei'],['minskin','stone'],[2,1,'paladin']], + stone_guiqishi:['male','qun',5,['paladin_tuxi'],['minskin','stone'],[5,4,'paladin']], + stone_shenmiqishou:['male','qun',4,['paladin_miying'],['minskin','stone'],[5,4,'paladin']], + stone_shixiangweishi:['female','qun',3,['paladin_huashi'],['minskin','stone'],[3,3,'paladin']], + stone_xuefanzhanshi:['male','qun',3,['paladin_jinghua'],['minskin','stone'],[4,4,'paladin']], + stone_xunmashi:['male','qun',3,['paladin_moma'],['minskin','stone'],[3,2,'paladin']], - stone_lieyanxiaogui:['male','qun',2,['warlock_nonghuo'],['minskin','stone'],[1,4,'warlock']], - stone_xiaoguishouling:['male','qun',3,['warlock_zhaogui'],['minskin','stone'],[3,1,'warlock']], - stone_xiaogui:['male','qun',1,[],['minskin','stone','stonehidden'],[1,1]], - stone_kongjuzhanma:['male','qun',1,['warlock_yongsheng'],['minskin','stone'],[3,1,'warlock']], - stone_morishouwei:['male','qun',4,['stone_chongfeng','warlock_zaihuo'],['minskin','stone'],[4,4,'warlock']], - stone_xukongxingzhe:['male','qun',2,['chaofeng'],['minskin','stone'],[1,1,'warlock']], - stone_diyuhuo:['male','qun',4,['warlock_yuhuo'],['minskin','stone'],[5,4,'warlock']], - stone_diyuhuox:['male','qun',2,[],['minskin','stone','stonehidden'],[2,2,'warlock']], - stone_heishitanfan:['male','qun',2,['warlock_anyu'],['minskin','stone'],[2,2,'warlock']], - stone_zhaohuanzhe:['male','qun',3,['warlock_zhaohuan'],['minskin','stone'],[4,2,'warlock']], - stone_meimo:['male','qun',3,['warlock_huanmeng'],['minskin','stone'],[2,3,'warlock']], - stone_tongkunvwang:['male','qun',2,['warlock_tongku'],['minskin','stone'],[2,1,'warlock']], - stone_xukongkongmo:['male','qun',3,['warlock_tunshi'],['minskin','stone'],[3,3,'warlock']], - stone_fukongmoyan:['male','qun',4,['warlock_shijie'],['minskin','stone'],[5,4,'warlock']], + stone_lieyanxiaogui:['male','qun',2,['warlock_nonghuo'],['minskin','stone'],[1,4,'warlock']], + stone_xiaoguishouling:['male','qun',3,['warlock_zhaogui'],['minskin','stone'],[3,1,'warlock']], + stone_xiaogui:['male','qun',1,[],['minskin','stone','stonehidden'],[1,1]], + stone_kongjuzhanma:['male','qun',1,['warlock_yongsheng'],['minskin','stone'],[3,1,'warlock']], + stone_morishouwei:['male','qun',4,['stone_chongfeng','warlock_zaihuo'],['minskin','stone'],[4,4,'warlock']], + stone_xukongxingzhe:['male','qun',2,['chaofeng'],['minskin','stone'],[1,1,'warlock']], + stone_diyuhuo:['male','qun',4,['warlock_yuhuo'],['minskin','stone'],[5,4,'warlock']], + stone_diyuhuox:['male','qun',2,[],['minskin','stone','stonehidden'],[2,2,'warlock']], + stone_heishitanfan:['male','qun',2,['warlock_anyu'],['minskin','stone'],[2,2,'warlock']], + stone_zhaohuanzhe:['male','qun',3,['warlock_zhaohuan'],['minskin','stone'],[4,2,'warlock']], + stone_meimo:['male','qun',3,['warlock_huanmeng'],['minskin','stone'],[2,3,'warlock']], + stone_tongkunvwang:['male','qun',2,['warlock_tongku'],['minskin','stone'],[2,1,'warlock']], + stone_xukongkongmo:['male','qun',3,['warlock_tunshi'],['minskin','stone'],[3,3,'warlock']], + stone_fukongmoyan:['male','qun',4,['warlock_shijie'],['minskin','stone'],[5,4,'warlock']], - stone_zhihuiguan:['female','qun',2,['warrior_tongling'],['minskin','stone'],[3,2,'warrior']], - stone_kuangzhanshi:['male','qun',2,['warrior_baoluan'],['minskin','stone'],[3,1,'warrior']], - stone_zhujiashi:['male','qun',2,['warrior_zhujia'],['minskin','stone'],[2,1,'warrior']], - stone_jiangong:['male','qun',2,['warrior_jiangong'],['minskin','stone'],[2,2,'warrior']], - stone_chidunshinv:['female','qun',4,['warrior_tidun'],['minskin','stone'],[5,4,'warrior']], - stone_yuanhou:['male','qun',2,['chaofeng'],['minskin','stone'],[2,3,'warrior']], - stone_heiyaoyaoshou:['male','qun',4,['warrior_heiyao'],['minskin','stone'],[5,4,'warrior']], - stone_honglongyongshi:['male','qun',2,['warrior_fenyong'],['minskin','stone'],[2,3,'warrior']], - stone_peilianshi:['male','qun',2,['chaofeng','warrior_peilian'],['minskin','stone'],[2,2,'warrior']], - stone_jingyingweishi:['male','qun',3,['stone_chongfeng'],['minskin','stone'],[4,3,'warrior']], - stone_mengmaren:['male','qun',3,['warrior_chuanci'],['minskin','stone'],[4,4,'warrior']], - stone_zhifuzhe:['male','qun',2,['warrior_zhifu'],['minskin','stone'],[3,1,'warrior']], + stone_zhihuiguan:['female','qun',2,['warrior_tongling'],['minskin','stone'],[3,2,'warrior']], + stone_kuangzhanshi:['male','qun',2,['warrior_baoluan'],['minskin','stone'],[3,1,'warrior']], + stone_zhujiashi:['male','qun',2,['warrior_zhujia'],['minskin','stone'],[2,1,'warrior']], + stone_jiangong:['male','qun',2,['warrior_jiangong'],['minskin','stone'],[2,2,'warrior']], + stone_chidunshinv:['female','qun',4,['warrior_tidun'],['minskin','stone'],[5,4,'warrior']], + stone_yuanhou:['male','qun',2,['chaofeng'],['minskin','stone'],[2,3,'warrior']], + stone_heiyaoyaoshou:['male','qun',4,['warrior_heiyao'],['minskin','stone'],[5,4,'warrior']], + stone_honglongyongshi:['male','qun',2,['warrior_fenyong'],['minskin','stone'],[2,3,'warrior']], + stone_peilianshi:['male','qun',2,['chaofeng','warrior_peilian'],['minskin','stone'],[2,2,'warrior']], + stone_jingyingweishi:['male','qun',3,['stone_chongfeng'],['minskin','stone'],[4,3,'warrior']], + stone_mengmaren:['male','qun',3,['warrior_chuanci'],['minskin','stone'],[4,4,'warrior']], + stone_zhifuzhe:['male','qun',2,['warrior_zhifu'],['minskin','stone'],[3,1,'warrior']], - stone_daomufeizei:['male','qun',3,['rogue_xunbao'],['minskin','stone'],[4,3,'rogue']], - stone_qiezei:['male','qun',2,['rogue_touqie'],['minskin','stone'],[2,2,'rogue']], - stone_heitieairen:['male','qun',2,['rogue_qiancang'],['minskin','stone'],[4,3,'rogue']], - stone_tegong:['male','qun',2,['rogue_touxi'],['minskin','stone'],[3,3,'rogue']], - stone_haidaotoumu:['male','qun',2,['rogue_zhaomu'],['minskin','stone'],[2,2,'rogue']], - stone_haidao:['male','qun',1,[],['minskin','stone','stonehidden'],[1,2,'rogue']], - stone_cike:['male','qun',1,['rogue_cisha','stone_qianxing'],['minskin','stone'],[1,1,'rogue']], - stone_duyanhaidao:['male','qun',2,['rogue_duxing'],['minskin','stone'],[3,4,'rogue']], - stone_gangtiewushi:['male','qun',2,['rogue_shoudao'],['minskin','stone'],[3,2,'rogue']], - stone_lifaji:['male','qun',2,['rogue_lifa'],['minskin','stone'],[2,2,'rogue']], - stone_shihualong:['male','qun',1,['rogue_fusheng'],['minskin','stone'],[3,2,'rogue']], - stone_xiushuihaidao:['male','qun',1,['rogue_jielue'],['minskin','stone'],[1,2,'rogue']], - stone_zousishangfan:['male','qun',3,['rogue_jiaoyi'],['minskin','stone'],[4,3,'rogue']], + stone_daomufeizei:['male','qun',3,['rogue_xunbao'],['minskin','stone'],[4,3,'rogue']], + stone_qiezei:['male','qun',2,['rogue_touqie'],['minskin','stone'],[2,2,'rogue']], + stone_heitieairen:['male','qun',2,['rogue_qiancang'],['minskin','stone'],[4,3,'rogue']], + stone_tegong:['male','qun',2,['rogue_touxi'],['minskin','stone'],[3,3,'rogue']], + stone_haidaotoumu:['male','qun',2,['rogue_zhaomu'],['minskin','stone'],[2,2,'rogue']], + stone_haidao:['male','qun',1,[],['minskin','stone','stonehidden'],[1,2,'rogue']], + stone_cike:['male','qun',1,['rogue_cisha','stone_qianxing'],['minskin','stone'],[1,1,'rogue']], + stone_duyanhaidao:['male','qun',2,['rogue_duxing'],['minskin','stone'],[3,4,'rogue']], + stone_gangtiewushi:['male','qun',2,['rogue_shoudao'],['minskin','stone'],[3,2,'rogue']], + stone_lifaji:['male','qun',2,['rogue_lifa'],['minskin','stone'],[2,2,'rogue']], + stone_shihualong:['male','qun',1,['rogue_fusheng'],['minskin','stone'],[3,2,'rogue']], + stone_xiushuihaidao:['male','qun',1,['rogue_jielue'],['minskin','stone'],[1,2,'rogue']], + stone_zousishangfan:['male','qun',3,['rogue_jiaoyi'],['minskin','stone'],[4,3,'rogue']], - stone_beijunmushi:['male','qun',2,['priest_shengliao'],['minskin','stone'],[1,1,'priest']], - stone_guanliyuan:['male','qun',2,['priest_faxian'],['minskin','stone'],[2,1,'priest']], - stone_linghunjisi:['female','qun',4,['priest_hunwu'],['minskin','stone'],[4,2,'priest']], - stone_heianjiaotu:['male','qun',3,['priest_zhufu'],['minskin','stone'],[3,2,'priest']], - stone_guangyaozhizi:['male','qun',3,['priest_guangyao'],['minskin','stone'],[5,3,'priest']], - stone_longmianjiaoguan:['male','qun',2,['priest_xundao'],['minskin','stone'],[2,2,'priest']], - stone_shengdianzhishi:['male','qun',4,['priest_puzhao'],['minskin','stone'],[5,4,'priest']], - stone_suoxiaojishi:['male','qun',2,['priest_suoxiao'],['minskin','stone'],[2,2,'priest']], - stone_anyingzisi:['male','qun',3,['priest_shixin'],['minskin','stone'],[4,4,'priest']], - stone_guangmingquan:['male','qun',3,['priest_shengshui'],['minskin','stone'],[2,0,'priest']], - stone_muguangchulong:['male','qun',2,['priest_muguang'],['minskin','stone'],[1,1,'priest']], - stone_shenshengyongshi:['male','qun',3,['priest_shengguang'],['minskin','stone'],[4,3,'priest']], + stone_beijunmushi:['male','qun',2,['priest_shengliao'],['minskin','stone'],[1,1,'priest']], + stone_guanliyuan:['male','qun',2,['priest_faxian'],['minskin','stone'],[2,1,'priest']], + stone_linghunjisi:['female','qun',4,['priest_hunwu'],['minskin','stone'],[4,2,'priest']], + stone_heianjiaotu:['male','qun',3,['priest_zhufu'],['minskin','stone'],[3,2,'priest']], + stone_guangyaozhizi:['male','qun',3,['priest_guangyao'],['minskin','stone'],[5,3,'priest']], + stone_longmianjiaoguan:['male','qun',2,['priest_xundao'],['minskin','stone'],[2,2,'priest']], + stone_shengdianzhishi:['male','qun',4,['priest_puzhao'],['minskin','stone'],[5,4,'priest']], + stone_suoxiaojishi:['male','qun',2,['priest_suoxiao'],['minskin','stone'],[2,2,'priest']], + stone_anyingzisi:['male','qun',3,['priest_shixin'],['minskin','stone'],[4,4,'priest']], + stone_guangmingquan:['male','qun',3,['priest_shengshui'],['minskin','stone'],[2,0,'priest']], + stone_muguangchulong:['male','qun',2,['priest_muguang'],['minskin','stone'],[1,1,'priest']], + stone_shenshengyongshi:['male','qun',3,['priest_shengguang'],['minskin','stone'],[4,3,'priest']], - stone_zhongshi:['male','wei',1,['stone_zhongshi1'],['minskin','stone'],[1,2]], - stone_zhucangzhe:['male','wei',1,['stone_zhucangzhe1'],['minskin','stone'],[1,2]], - stone_huoqiangshou:['male','wei',3,['stone_huoqiangshou1'],['minskin','stone'],[3,1]], + stone_zhongshi:['male','wei',1,['stone_zhongshi1'],['minskin','stone'],[1,2]], + stone_zhucangzhe:['male','wei',1,['stone_zhucangzhe1'],['minskin','stone'],[1,2]], + stone_huoqiangshou:['male','wei',3,['stone_huoqiangshou1'],['minskin','stone'],[3,1]], - stone_lansaizhanshi:['male','shu',1,['stone_chongfeng'],['minskin','stone'],[1,2]], - stone_kutongsiseng:['male','shu',1,['stone_kutongsiseng1'],['minskin','stone'],[1,2]], - stone_yuanguanying:['male','shu',3,['stone_yuanguanying1'],['minskin','stone'],[3,1]], + stone_lansaizhanshi:['male','shu',1,['stone_chongfeng'],['minskin','stone'],[1,2]], + stone_kutongsiseng:['male','shu',1,['stone_kutongsiseng1'],['minskin','stone'],[1,2]], + stone_yuanguanying:['male','shu',3,['stone_yuanguanying1'],['minskin','stone'],[3,1]], - stone_dijieshicong:['male','wu',2,['stone_dijieshicong1'],['minskin','stone'],[1,1]], - stone_yaosaishouwei:['male','wu',2,['stone_yaosaishouwei1'],['minskin','stone'],[1,1]], - stone_famingjia:['male','wu',3,['stone_famingjia1'],['minskin','stone'],[3,1]], + stone_dijieshicong:['male','wu',2,['stone_dijieshicong1'],['minskin','stone'],[1,1]], + stone_yaosaishouwei:['male','wu',2,['stone_yaosaishouwei1'],['minskin','stone'],[1,1]], + stone_famingjia:['male','wu',3,['stone_famingjia1'],['minskin','stone'],[3,1]], - stone_chilundashi:['male','qun',2,['stone_chilundashi1'],['minskin','stone'],[1,1]], - stone_hanguangzhizhe:['male','qun',2,['stone_hanguangzhizhe1'],['minskin','stone'],[2,2]], - stone_aihaozhihun:['male','qun',3,['stone_aihaozhihun1'],['minskin','stone'],[3,1]], + stone_chilundashi:['male','qun',2,['stone_chilundashi1'],['minskin','stone'],[1,1]], + stone_hanguangzhizhe:['male','qun',2,['stone_hanguangzhizhe1'],['minskin','stone'],[2,2]], + stone_aihaozhihun:['male','qun',3,['stone_aihaozhihun1'],['minskin','stone'],[3,1]], - stone_fennuxiaoji:['male','qun',1,['stone_fennuxiaoji1'],['minskin','stone'],[1,2]], - stone_juxingchanchu:['male','qun',2,['stone_juxingchanchu1'],['minskin','stone'],[2,1]], - stone_wuyi:['male','qun',1,['jijiu'],['minskin','stone'],[2,2]], - stone_langren:['male','qun',1,['stone_qianxing'],['minskin','stone'],[1,2]], - stone_shishigui:['male','qun',2,['stone_shishigui1'],['minskin','stone'],[2,1]], + stone_fennuxiaoji:['male','qun',1,['stone_fennuxiaoji1'],['minskin','stone'],[1,2]], + stone_juxingchanchu:['male','qun',2,['stone_juxingchanchu1'],['minskin','stone'],[2,1]], + stone_wuyi:['male','qun',1,['jijiu'],['minskin','stone'],[2,2]], + stone_langren:['male','qun',1,['stone_qianxing'],['minskin','stone'],[1,2]], + stone_shishigui:['male','qun',2,['stone_shishigui1'],['minskin','stone'],[2,1]], - stone_fatiaozhuru:['female','qun',1,['stone_fatiaozhuru1'],['minskin','stone'],[1,2]], - stone_mingguangjisi:['female','wu',2,['shushen'],['minskin','stone'],[2,1]], - stone_nianqingjisi:['female','wei',2,['stone_zhufu'],['minskin','stone'],[2,1]], - stone_aomishouwei:['female','qun',1,['biyue'],['minskin','stone'],[2,2]], - stone_yanjingshe:['female','qun',2,['stone_yanjingshe1'],['minskin','stone'],[3,2]], - stone_zhiyuzhe:['female','qun',3,['stone_zhiyu'],['minskin','stone'],[3,1]], - stone_mafengzhuru:['female','qun',1,['stone_mafengzhuru1'],['minskin','stone'],[1,2]], + stone_fatiaozhuru:['female','qun',1,['stone_fatiaozhuru1'],['minskin','stone'],[1,2]], + stone_mingguangjisi:['female','wu',2,['shushen'],['minskin','stone'],[2,1]], + stone_nianqingjisi:['female','wei',2,['stone_zhufu'],['minskin','stone'],[2,1]], + stone_aomishouwei:['female','qun',1,['biyue'],['minskin','stone'],[2,2]], + stone_yanjingshe:['female','qun',2,['stone_yanjingshe1'],['minskin','stone'],[3,2]], + stone_zhiyuzhe:['female','qun',3,['stone_zhiyu'],['minskin','stone'],[3,1]], + stone_mafengzhuru:['female','qun',1,['stone_mafengzhuru1'],['minskin','stone'],[1,2]], - stone_shumiao:['none','wu',1,[],['minskin','stone','stonehidden'],[1,1]], - stone_shuren:['none','wu',2,['stone_chongfeng','stone_zibao'],['minskin','stone','stonehidden'],[2,2]], - stone_shurenx:['none','wu',2,[],['minskin','stone','stonehidden'],[2,2]], - stone_shurenxx:['none','wu',2,['chaofeng'],['minskin','stone','stonehidden'],[2,2]], - stone_youlinglang:['none','qun',2,['chaofeng'],['minskin','stone','stonehidden'],[2,2]], - stone_xiaojingling:['none','qun',1,['xuying'],['minskin','stone','stonehidden'],[1,1]], - stone_zhumo:['none','qun',2,[],['minskin','stone','stonehidden'],[2,2]], - stone_jingxiang:['none','qun',2,['stone_jingxiang','chaofeng'],['minskin','stone','stonehidden'],[2,0]], - stone_shengguanghuwei:['female','qun',2,['priest_shengguang'],['minskin','stone','stonehidden'],[1,1]], - stone_liegou:['none','qun',1,['stone_chongfeng'],['minskin','stone','stonehidden'],[1,2]], - stone_mianyang:['none','qun',1,['mage_mianyang'],['minskin','stone','stonehidden'],[1,0]], - stone_qingwa:['none','wu',1,['shaman_qingwa'],['minskin','stone','stonehidden'],[1,0]], - stone_shengjiachong:['none','qun',1,['chaofeng'],['minskin','stone','stonehidden'],[1,1]], + stone_shumiao:['none','wu',1,[],['minskin','stone','stonehidden'],[1,1]], + stone_shuren:['none','wu',2,['stone_chongfeng','stone_zibao'],['minskin','stone','stonehidden'],[2,2]], + stone_shurenx:['none','wu',2,[],['minskin','stone','stonehidden'],[2,2]], + stone_shurenxx:['none','wu',2,['chaofeng'],['minskin','stone','stonehidden'],[2,2]], + stone_youlinglang:['none','qun',2,['chaofeng'],['minskin','stone','stonehidden'],[2,2]], + stone_xiaojingling:['none','qun',1,['xuying'],['minskin','stone','stonehidden'],[1,1]], + stone_zhumo:['none','qun',2,[],['minskin','stone','stonehidden'],[2,2]], + stone_jingxiang:['none','qun',2,['stone_jingxiang','chaofeng'],['minskin','stone','stonehidden'],[2,0]], + stone_shengguanghuwei:['female','qun',2,['priest_shengguang'],['minskin','stone','stonehidden'],[1,1]], + stone_liegou:['none','qun',1,['stone_chongfeng'],['minskin','stone','stonehidden'],[1,2]], + stone_mianyang:['none','qun',1,['mage_mianyang'],['minskin','stone','stonehidden'],[1,0]], + stone_qingwa:['none','wu',1,['shaman_qingwa'],['minskin','stone','stonehidden'],[1,0]], + stone_shengjiachong:['none','qun',1,['chaofeng'],['minskin','stone','stonehidden'],[1,1]], - stone_tuteng1:['none','qun',2,['shaman_tuteng','chaofeng'],['minskin','stone','stonehidden'],[2,0]], - stone_tuteng2:['none','qun',2,['shaman_tuteng','shaman_zhuore'],['minskin','stone','stonehidden'],[2,0]], - stone_tuteng3:['none','qun',2,['shaman_tuteng','shaman_fali'],['minskin','stone','stonehidden'],[2,0]], - stone_tuteng4:['none','qun',2,['shaman_tuteng','shaman_zhiliao'],['minskin','stone','stonehidden'],[2,0]], - stone_xinbing:['none','qun',2,[],['minskin','stone','stonehidden'],[2,0]], + stone_tuteng1:['none','qun',2,['shaman_tuteng','chaofeng'],['minskin','stone','stonehidden'],[2,0]], + stone_tuteng2:['none','qun',2,['shaman_tuteng','shaman_zhuore'],['minskin','stone','stonehidden'],[2,0]], + stone_tuteng3:['none','qun',2,['shaman_tuteng','shaman_fali'],['minskin','stone','stonehidden'],[2,0]], + stone_tuteng4:['none','qun',2,['shaman_tuteng','shaman_zhiliao'],['minskin','stone','stonehidden'],[2,0]], + stone_xinbing:['none','qun',2,[],['minskin','stone','stonehidden'],[2,0]], - stone_siwangzhiyi:['male','qun',4,['stone_mieshi'],['minskin','stone','stonehidden','stonelegend'],[6,4]], - stone_alaikesita:['female','qun',4,['stone_fushi'],['minskin','stone','stonehidden','stonelegend'],[6,4]], - stone_yisela:['female','qun',4,['stone_chenshui'],['minskin','stone','stonehidden','stonelegend'],[6,2]], - stone_nuoziduomu:['male','qun',4,['stone_shixu'],['minskin','stone','stonehidden','stonelegend'],[6,4]], - stone_maligousi:['male','qun',4,['stone_mowang'],['minskin','stone','stonehidden','stonelegend'],[6,2]], + stone_siwangzhiyi:['male','qun',4,['stone_mieshi'],['minskin','stone','stonehidden','stonelegend'],[6,4]], + stone_alaikesita:['female','qun',4,['stone_fushi'],['minskin','stone','stonehidden','stonelegend'],[6,4]], + stone_yisela:['female','qun',4,['stone_chenshui'],['minskin','stone','stonehidden','stonelegend'],[6,2]], + stone_nuoziduomu:['male','qun',4,['stone_shixu'],['minskin','stone','stonehidden','stonelegend'],[6,4]], + stone_maligousi:['male','qun',4,['stone_mowang'],['minskin','stone','stonehidden','stonelegend'],[6,2]], - stone_aolajier:['male','qun',4,['stone_chongfeng','shaman_fengnu','paladin_hudun','chaofeng'],['minskin','stone','stonehidden','stonelegend_shaman'],[6,4]], - stone_andongni:['male','qun',4,['stone_zhiyin'],['minskin','stone','stonehidden','stonelegend_mage'],[6,4]], - stone_jialakesi:['male','qun',6,['stone_bianshen'],['minskin','stone','stonehidden','stonelegend_warlock'],[6,0]], - stone_jialakesix:['male','qun',6,['stone_lianyu'],['modeimage','stonehidden','stonespecial']], - stone_kelushi:['male','qun',5,['stone_chongfeng'],['minskin','stone','stonehidden','stonelegend_hunter'],[6,5]], - stone_geluomashi:['male','qun',4,['stone_chongfeng','stone_jinu'],['minskin','stone','stonehidden','stonelegend_warrior'],[6,4]], - stone_aidewen:['male','qun',3,['stone_lianji'],['minskin','stone','stonehidden','stonelegend_rogue'],[6,3]], - stone_sainaliusi:['male','qun',3,['stone_shenyu'],['minskin','stone','stonehidden','stonelegend_druid'],[6,3]], - stone_fuding:['male','qun',3,['paladin_hudun','chaofeng','stone_fuchou'],['minskin','stone','stonehidden','stonelegend_paladin'],[6,3]], - stone_weilun:['male','qun',4,['stone_shenyou'],['minskin','stone','stonehidden','stonelegend_priest'],[6,6]], - } - }, - careerList:['mage','shaman','druid','paladin','rogue','priest','hunter','warrior','warlock'], - game:{ - reserveDead:true, - bannedcards:['lebu','guiyoujie','xietianzi','lingjiandai','jiguanshu','sifeizhenmian','fengxueren','chuansongmen'], - onwash:function(){ - if(_status.mode!='deck') return; - var list=[]; - for(var i=0;i'+i+'',buttons,clickButton); - ui.create.div('.menubutton.round',deckitem).dataset.career=lib.storage.deckList[i].career; - deckitem.name=i; - } - } - for(var i=0;i随机',buttons,clickButton); - ui.create.div('.menubutton.round',deckitem).dataset.career=lib.careerList[i]; - deckitem.name='random:'+lib.careerList[i]; - } - event.dialog.open(); - } - else{ - var bn=parseInt(get.config('battle_number')); - for(var i=0;ib) return 1; - if(a==b) return 0; - return -1; - }); - player.deck=name; - player.career=career; - if(!player.node.career){ - player.node.career=ui.create.div('.menubutton.round.identity',player); - player.node.career.dataset.career=career; - lib.setIntro(player.node.career,null,true); - } - if(!player.deckCards) player.deckCards=[]; - for(var i=0;i=2) return 1; - return 0; - } - } - } - }, - spell_linghunhongxi:{ - type:'stonecard', - stoneact:4, - career:'warlock', - enable:true, - fullimage:true, - filterTarget:function(card,player,target){ - return target.isMin(); - }, - content:function(){ - 'step 0' - target.die(); - 'step 1' - player.recover(); - }, - ai:{ - order:7.5, - value:5, - useful:5, - result:{ - target:function(player,target){ - return -target.hp-target.countCards('h')/2; - } - } - } - }, - spell_fushishu:{ - type:'stonecard', - stoneact:2, - career:'warlock', - enable:true, - fullimage:true, - filterTarget:function(card,player,target){ - return target.isMin()&&!target.hasSkill('warlock_fushishu'); - }, - content:function(){ - target.addSkill('warlock_fushishu'); - }, - ai:{ - order:7.5, - value:5, - useful:5, - result:{ - target:function(player,target){ - return -target.hp-target.countCards('h')/2; - } - } - } - }, + var buttons=ui.create.div('.buttons',event.dialog.content); + var currentNode=null; + var clickButton=function(click){ + if(!event.choosingDeck) return; + if(click!==false){ + _status.deck.push(this.name); + } + if(currentNode){ + currentNode.delete(); + } + if(list.length){ + var names=[]; + if(_status.double_character){ + names.push(list.shift()); + names.push(list.shift()); + event.dialog.content.firstChild.innerHTML='为'+get.translation(names[0])+'/'+get.translation(names[1])+'选择一个卡组'; + currentNode=ui.create.player().init(names[0],names[1]); + } + else{ + names.push(list.shift()); + event.dialog.content.firstChild.innerHTML='为'+get.translation(names[0])+'选择一个卡组'; + currentNode=ui.create.player().init(names[0]); + } + currentNode.classList.add('stone_deck'); + ui.arena.appendChild(currentNode); + ui.refresh(currentNode); + currentNode.classList.add('shown'); + } + else{ + event.choosingDeck=false; + event.dialog.close(); + ui.auto.show(); + game.resume(); + } + } + clickButton(false); + for(var i in lib.storage.deckList){ + if(lib.storage.deckList[i].deck.length==30){ + var deckitem=ui.create.div('.deckitem.shadowed',''+i+'',buttons,clickButton); + ui.create.div('.menubutton.round',deckitem).dataset.career=lib.storage.deckList[i].career; + deckitem.name=i; + } + } + for(var i=0;i随机',buttons,clickButton); + ui.create.div('.menubutton.round',deckitem).dataset.career=lib.careerList[i]; + deckitem.name='random:'+lib.careerList[i]; + } + event.dialog.open(); + } + else{ + var bn=parseInt(get.config('battle_number')); + for(var i=0;ib) return 1; + if(a==b) return 0; + return -1; + }); + player.deck=name; + player.career=career; + if(!player.node.career){ + player.node.career=ui.create.div('.menubutton.round.identity',player); + player.node.career.dataset.career=career; + lib.setIntro(player.node.career,null,true); + } + if(!player.deckCards) player.deckCards=[]; + for(var i=0;i=2) return 1; + return 0; + } + } + } + }, + spell_linghunhongxi:{ + type:'stonecard', + stoneact:4, + career:'warlock', + enable:true, + fullimage:true, + filterTarget:function(card,player,target){ + return target.isMin(); + }, + content:function(){ + 'step 0' + target.die(); + 'step 1' + player.recover(); + }, + ai:{ + order:7.5, + value:5, + useful:5, + result:{ + target:function(player,target){ + return -target.hp-target.countCards('h')/2; + } + } + } + }, + spell_fushishu:{ + type:'stonecard', + stoneact:2, + career:'warlock', + enable:true, + fullimage:true, + filterTarget:function(card,player,target){ + return target.isMin()&&!target.hasSkill('warlock_fushishu'); + }, + content:function(){ + target.addSkill('warlock_fushishu'); + }, + ai:{ + order:7.5, + value:5, + useful:5, + result:{ + target:function(player,target){ + return -target.hp-target.countCards('h')/2; + } + } + } + }, - spell_fuchoudaji:{ - type:'stonecard', - fullimage:true, - enable:true, - stoneact:3, - career:'warrior', - filterTarget:function(card,player,target){ - return target.isMin(); - }, - selectTarget:-1, - content:function(){ - if(player.hp<=2){ - target.damage(3); - } - else{ - target.damage(); - } - }, - ai:{ - order:8.9, - value:5, - useful:5, - result:{ - target:-1.5 - }, - tag:{ - damage:1, - multitarget:1, - multineg:1, - } - } - }, - spell_yingyongdaji:{ - type:'stonecard', - stoneact:2, - career:'warrior', - enable:true, - fullimage:true, - filterTarget:function(card,player,target){ - return target.side!=player.side; - }, - content:function(){ - 'step 0' - player.damage(2,target); - 'step 1' - target.damage(2); - }, - ai:{ - order:8, - value:5, - useful:5, - result:{ - target:function(player,target){ - if(player.hujia>=2) return -1.5; - if(player.hujia==1){ - if(player.hp>3) return -1.5; - return 0; - } - return 0; - } - }, - tag:{ - damage:1, - } - } - }, - spell_zhandounuhuo:{ - type:'stonecard', - fullimage:true, - enable:function(event,player){ - for(var i=0;i=2) return -1.5; - } - } - return 0; - }, - tag:{ - damage:1 - } - } - } - }, + spell_fuchoudaji:{ + type:'stonecard', + fullimage:true, + enable:true, + stoneact:3, + career:'warrior', + filterTarget:function(card,player,target){ + return target.isMin(); + }, + selectTarget:-1, + content:function(){ + if(player.hp<=2){ + target.damage(3); + } + else{ + target.damage(); + } + }, + ai:{ + order:8.9, + value:5, + useful:5, + result:{ + target:-1.5 + }, + tag:{ + damage:1, + multitarget:1, + multineg:1, + } + } + }, + spell_yingyongdaji:{ + type:'stonecard', + stoneact:2, + career:'warrior', + enable:true, + fullimage:true, + filterTarget:function(card,player,target){ + return target.side!=player.side; + }, + content:function(){ + 'step 0' + player.damage(2,target); + 'step 1' + target.damage(2); + }, + ai:{ + order:8, + value:5, + useful:5, + result:{ + target:function(player,target){ + if(player.hujia>=2) return -1.5; + if(player.hujia==1){ + if(player.hp>3) return -1.5; + return 0; + } + return 0; + } + }, + tag:{ + damage:1, + } + } + }, + spell_zhandounuhuo:{ + type:'stonecard', + fullimage:true, + enable:function(event,player){ + for(var i=0;i=2) return -1.5; + } + } + return 0; + }, + tag:{ + damage:1 + } + } + } + }, - spell_jinyingduijue:{ - type:'stonecard', - stoneact:4, - career:'paladin', - enable:function(card,player){ - var n1=player.countFellow(); - var n2=player.getEnemy().countFellow(); - return n1>0&&n2>0&&n1+n2>2; - }, - fullimage:true, - filterTarget:function(card,player,target){ - return target.isMin(); - }, - selectTarget:-1, - multitarget:true, - multiline:true, - content:function(){ - 'step 0' - if(!targets.length){ - event.finish(); - return; - } - var maxf=[],maxe=[]; - for(var i=0;imaxf[0].hp){ - maxf.length=0; - maxf.push(targets[i]); - } - } - else{ - if(!maxe.length||targets[i].hp==maxe[0].hp){ - maxe.push(targets[i]); - } - else if(targets[i].hp>maxe[0].hp){ - maxe.length=0; - maxe.push(targets[i]); - } - } - } - if(maxf.length){ - targets.remove(maxf.randomGet()); - } - if(maxe.length){ - targets.remove(maxe.randomGet()); - } - targets.sort(lib.sort.seat); - event.targets=targets; - 'step 1' - if(event.targets.length){ - event.targets.shift().die(); - event.redo(); - } - }, - ai:{ - order:9, - value:2, - useful:2, - result:{ - player:function(player,target){ - return player.getEnemy().countFellow()-player.countFellow(); - } - } - } - }, - spell_zhihuizhufu:{ - type:'stonecard', - stoneact:1, - career:'paladin', - enable:function(card,player){ - return !player.isMin(); - }, - fullimage:true, - filterTarget:function(card,player,target){ - return target.isMin()&&!target.hasSkill('paladin_zhihuizhufu'); - }, - content:function(){ - target.addSkill('paladin_zhihuizhufu'); - target.storage.paladin_zhihuizhufu=player; - }, - ai:{ - order:2, - value:5, - useful:5, - result:{ - player:function(player,target){ - return target.hp; - } - } - } - }, - spell_shenshengfennu:{ - type:'stonecard', - stoneact:5, - career:'paladin', - enable:true, - fullimage:true, - filterTarget:true, - content:function(){ - 'step 0' - event.card=player.getDeckCards()[0]; - player.gain(event.card,'gain2','log'); - 'step 1' - var num=lib.card[event.card.name].stoneact; - if(num&&typeof num=='number'){ - target.damage(num); - } - }, - ai:{ - order:6, - value:2, - useful:2, - result:{ - target:-2 - }, - tag:{ - damage:2 - } - } - }, - spell_yongshizhufu:{ - type:'stonecard', - stoneact:2, - career:'paladin', - enable:true, - fullimage:true, - filterTarget:function(card,player,target){ - return target.isMin()&&target.countCards('h')>0; - }, - content:function(){ - target.draw(target.countCards('h')); - }, - ai:{ - order:4, - value:2, - useful:2, - result:{ - target:function(player,target){ - return Math.max(0,target.countCards('h')-1); - } - } - } - }, - spell_shenpan:{ - type:'stonecard', - stoneact:2, - career:'paladin', - enable:function(card,player){ - var num=player.getEnemy().countFellow(); - return num>0&&num>=player.countFellow(); - }, - fullimage:true, - notarget:true, - content:function(){ - var target=player.getEnemy().getFellow().randomGet(); - player.line(target); - target.die(); - }, - ai:{ - order:9, - value:4, - useful:4, - result:{ - player:1 - } - } - }, - spell_zhengqianghaosheng:{ - type:'stonecard', - stoneact:2, - career:'paladin', - enable:function(card,player){ - return !player.hasSkill('paladin_zhengqianghaosheng'); - }, - fullimage:true, - filterTarget:function(card,player,target){ - return player==target; - }, - selectTarget:-1, - content:function(){ - player.addSkill('paladin_zhengqianghaosheng'); - }, - ai:{ - order:3, - value:4, - useful:4, - result:{ - player:function(player){ - if(player.countFellow()>=2) return 1; - return 0; - } - } - } - }, + spell_jinyingduijue:{ + type:'stonecard', + stoneact:4, + career:'paladin', + enable:function(card,player){ + var n1=player.countFellow(); + var n2=player.getEnemy().countFellow(); + return n1>0&&n2>0&&n1+n2>2; + }, + fullimage:true, + filterTarget:function(card,player,target){ + return target.isMin(); + }, + selectTarget:-1, + multitarget:true, + multiline:true, + content:function(){ + 'step 0' + if(!targets.length){ + event.finish(); + return; + } + var maxf=[],maxe=[]; + for(var i=0;imaxf[0].hp){ + maxf.length=0; + maxf.push(targets[i]); + } + } + else{ + if(!maxe.length||targets[i].hp==maxe[0].hp){ + maxe.push(targets[i]); + } + else if(targets[i].hp>maxe[0].hp){ + maxe.length=0; + maxe.push(targets[i]); + } + } + } + if(maxf.length){ + targets.remove(maxf.randomGet()); + } + if(maxe.length){ + targets.remove(maxe.randomGet()); + } + targets.sort(lib.sort.seat); + event.targets=targets; + 'step 1' + if(event.targets.length){ + event.targets.shift().die(); + event.redo(); + } + }, + ai:{ + order:9, + value:2, + useful:2, + result:{ + player:function(player,target){ + return player.getEnemy().countFellow()-player.countFellow(); + } + } + } + }, + spell_zhihuizhufu:{ + type:'stonecard', + stoneact:1, + career:'paladin', + enable:function(card,player){ + return !player.isMin(); + }, + fullimage:true, + filterTarget:function(card,player,target){ + return target.isMin()&&!target.hasSkill('paladin_zhihuizhufu'); + }, + content:function(){ + target.addSkill('paladin_zhihuizhufu'); + target.storage.paladin_zhihuizhufu=player; + }, + ai:{ + order:2, + value:5, + useful:5, + result:{ + player:function(player,target){ + return target.hp; + } + } + } + }, + spell_shenshengfennu:{ + type:'stonecard', + stoneact:5, + career:'paladin', + enable:true, + fullimage:true, + filterTarget:true, + content:function(){ + 'step 0' + event.card=player.getDeckCards()[0]; + player.gain(event.card,'gain2','log'); + 'step 1' + var num=lib.card[event.card.name].stoneact; + if(num&&typeof num=='number'){ + target.damage(num); + } + }, + ai:{ + order:6, + value:2, + useful:2, + result:{ + target:-2 + }, + tag:{ + damage:2 + } + } + }, + spell_yongshizhufu:{ + type:'stonecard', + stoneact:2, + career:'paladin', + enable:true, + fullimage:true, + filterTarget:function(card,player,target){ + return target.isMin()&&target.countCards('h')>0; + }, + content:function(){ + target.draw(target.countCards('h')); + }, + ai:{ + order:4, + value:2, + useful:2, + result:{ + target:function(player,target){ + return Math.max(0,target.countCards('h')-1); + } + } + } + }, + spell_shenpan:{ + type:'stonecard', + stoneact:2, + career:'paladin', + enable:function(card,player){ + var num=player.getEnemy().countFellow(); + return num>0&&num>=player.countFellow(); + }, + fullimage:true, + notarget:true, + content:function(){ + var target=player.getEnemy().getFellow().randomGet(); + player.line(target); + target.die(); + }, + ai:{ + order:9, + value:4, + useful:4, + result:{ + player:1 + } + } + }, + spell_zhengqianghaosheng:{ + type:'stonecard', + stoneact:2, + career:'paladin', + enable:function(card,player){ + return !player.hasSkill('paladin_zhengqianghaosheng'); + }, + fullimage:true, + filterTarget:function(card,player,target){ + return player==target; + }, + selectTarget:-1, + content:function(){ + player.addSkill('paladin_zhengqianghaosheng'); + }, + ai:{ + order:3, + value:4, + useful:4, + result:{ + player:function(player){ + if(player.countFellow()>=2) return 1; + return 0; + } + } + } + }, - spell_zhenyanshu:{ - type:'stonecard', - stoneact:1, - career:'priest', - enable:true, - fullimage:true, - filterTarget:function(card,player,target){ - return target.isMin(); - }, - content:function(){ - target.maxHp++; - target.hp++; - target.update(); - player.drawDeck(); - }, - ai:{ - order:7, - value:3, - useful:3, - result:{ - target:function(player,target){ - return Math.max(1,10-target.hp); - } - } - } - }, - spell_enzeshu:{ - type:'stonecard', - stoneact:3, - career:'priest', - enable:true, - fullimage:true, - filterTarget:function(card,player,target){ - return target.isMin(); - }, - content:function(){ - target.maxHp+=3; - target.hp+=3; - target.update(); - }, - ai:{ - order:5, - value:3, - useful:3, - result:{ - target:function(player,target){ - return Math.max(1,10-target.hp); - } - } - } - }, - spell_anyingxingtai:{ - type:'stonecard', - stoneact:2, - career:'priest', - chongzhu:true, - enable:function(event,player){ - if(player.career!='priest') return false; - return !player.storage.anyingxingtai||player.storage.anyingxingtai<2; - }, - fullimage:true, - filterTarget:function(card,player,target){ - return player==target; - }, - selectTarget:-1, - content:function(){ - if(typeof player.storage.anyingxingtai!='number'){ - player.storage.anyingxingtai=1; - } - else if(player.storage.anyingxingtai<2){ - player.storage.anyingxingtai=2; - } - player.markSkill('priest_anyingxingtai'); - }, - ai:{ - order:6.1, - value:3, - useful:3, - result:{ - player:1 - } - } - }, - spell_kuaisuzhiliao:{ - type:'stonecard', - stoneact:2, - career:'priest', - enable:true, - fullimage:true, - filterTarget:function(card,player,target){ - if(player.hasFellowSkill('priest_hunwu')){ - return true; - } - return target.hp=2) return 1; - } - } - return 0; - } - } - } - }, - spell_heiandiyu:{ - fullimage:true, - type:'stonecard', - enable:true, - stoneact:4, - career:'druid', - filterTarget:function(card,player,target){ - return target.isMin(); - }, - multitarget:true, - targetprompt:['增加体力并摸牌'], - selectTarget:[0,1], - notarget:true, - content:function(){ - 'step 0' - if(targets.length){ - targets[0].maxHp++; - targets[0].hp++; - target.update(); - targets[0].draw(3); - event.finish(); - } - else{ - event.num=0; - } - 'step 1' - if(player.canAddFellow()&&event.num++<10){ - player.addFellowAuto('stone_xiaojingling'); - event.redo(); - } - }, - ai:{ - order:5, - result:{ - target:function(player,target){ - return Math.max(1,target.hp-target.countCards('h')); - }, - } - } - }, - spell_ziyang:{ - type:'stonecard', - stoneact:3, - career:'druid', - enable:function(card,player){ - return player.deckCards&&!player.isMin(); - }, - fullimage:true, - filterTarget:function(card,player,target){ - return player==target; - }, - selectTarget:-1, - content:function(){ - 'step 0' - if(player.hasSkill('druid_ziyang')){ - player.drawDeck(3); - event.finish(); - } - else{ - player.chooseControl('获得行动值','摸牌').ai=function(){ - if(player.countCards('h')<=1) return '摸牌'; - return '获得行动值'; - }; - } - 'step 1' - if(result.control=='摸牌'){ - player.drawDeck(3); - } - else{ - player.addSkill('druid_ziyang'); - } - }, - ai:{ - order:1, - value:4, - useful:4, - result:{ - player:1 - } - } - }, - spell_xingchenzhuiluo:{ - type:'stonecard', - fullimage:true, - enable:true, - stoneact:6, - career:'druid', - targetprompt:['造成五点伤害'], - multitarget:true, - filterTarget:function(card,player,target){ - return target.side!=player.side&&target.isMin(); - }, - selectTarget:[0,1], - notarget:true, - content:function(){ - 'step 0' - if(targets.length){ - targets[0].damage(4); - event.finish(); - } - else{ - var list=player.getFellow(true); - if(list.length){ - list.sort(lib.sort.seat); - event.list=list; - player.line(list); - } - else{ - event.finish(); - } - } - 'step 1' - if(event.list.length){ - event.list.shift().damage(2); - event.redo(); - } - }, - ai:{ - order:7, - useful:5, - value:5, - result:{ - target:function(player,target){ - if(target==player.getEnemy()) return -2; - return -1; - } - }, - tag:{ - damage:2 - } - } - }, - spell_fennu:{ - type:'stonecard', - fullimage:true, - enable:true, - stoneact:2, - career:'druid', - filterTarget:function(card,player,target){ - return target.isMin(); - }, - content:function(){ - 'step 0' - player.chooseControl('两点','一点').prompt='造成两点伤害,或造成一点伤害并从牌库中获得一张牌'; - 'step 1' - if(result.control=='一点'){ - target.damage(); - } - else{ - target.damage(2); - event.finish(); - } - 'step 2' - player.drawDeck(); - }, - ai:{ - order:8, - value:5, - useful:5, - result:{ - target:-1 - }, - tag:{ - damage:2, - } - } - }, - spell_fugen:{ - type:'stonecard', - stoneact:2, - career:'druid', - enable:true, - fullimage:true, - filterTarget:function(card,player,target){ - return target.isMin(); - }, - content:function(){ - 'step 0' - target.die(); - 'step 1' - var list=[]; - for(var i in lib.card){ - if(lib.card[i].stonehidden) continue; - if(lib.card[i].type=='stonecharacter'){ - list.push(i); - } - } - player.getEnemy().gain(game.createCard(list.randomGet()),'draw'); - }, - ai:{ - order:8.8, - value:5, - useful:5, - result:{ - target:function(player,target){ - return -target.hp-target.countCards('h')/2; - } - } - } - }, + spell_conglinzhihun:{ + type:'stonecard', + stoneact:3, + career:'druid', + enable:true, + fullimage:true, + filterTarget:function(card,player,target){ + return player.side==target.side&&target.isMin()&&!target.hasSkill('druid_conglinzhihun'); + }, + selectTarget:-1, + content:function(){ + target.addSkill('druid_conglinzhihun'); + }, + ai:{ + order:7, + value:5, + useful:5, + result:{ + player:function(player){ + var num=0; + for(var i=0;i=2) return 1; + } + } + return 0; + } + } + } + }, + spell_heiandiyu:{ + fullimage:true, + type:'stonecard', + enable:true, + stoneact:4, + career:'druid', + filterTarget:function(card,player,target){ + return target.isMin(); + }, + multitarget:true, + targetprompt:['增加体力并摸牌'], + selectTarget:[0,1], + notarget:true, + content:function(){ + 'step 0' + if(targets.length){ + targets[0].maxHp++; + targets[0].hp++; + target.update(); + targets[0].draw(3); + event.finish(); + } + else{ + event.num=0; + } + 'step 1' + if(player.canAddFellow()&&event.num++<10){ + player.addFellowAuto('stone_xiaojingling'); + event.redo(); + } + }, + ai:{ + order:5, + result:{ + target:function(player,target){ + return Math.max(1,target.hp-target.countCards('h')); + }, + } + } + }, + spell_ziyang:{ + type:'stonecard', + stoneact:3, + career:'druid', + enable:function(card,player){ + return player.deckCards&&!player.isMin(); + }, + fullimage:true, + filterTarget:function(card,player,target){ + return player==target; + }, + selectTarget:-1, + content:function(){ + 'step 0' + if(player.hasSkill('druid_ziyang')){ + player.drawDeck(3); + event.finish(); + } + else{ + player.chooseControl('获得行动值','摸牌').ai=function(){ + if(player.countCards('h')<=1) return '摸牌'; + return '获得行动值'; + }; + } + 'step 1' + if(result.control=='摸牌'){ + player.drawDeck(3); + } + else{ + player.addSkill('druid_ziyang'); + } + }, + ai:{ + order:1, + value:4, + useful:4, + result:{ + player:1 + } + } + }, + spell_xingchenzhuiluo:{ + type:'stonecard', + fullimage:true, + enable:true, + stoneact:6, + career:'druid', + targetprompt:['造成五点伤害'], + multitarget:true, + filterTarget:function(card,player,target){ + return target.side!=player.side&&target.isMin(); + }, + selectTarget:[0,1], + notarget:true, + content:function(){ + 'step 0' + if(targets.length){ + targets[0].damage(4); + event.finish(); + } + else{ + var list=player.getFellow(true); + if(list.length){ + list.sort(lib.sort.seat); + event.list=list; + player.line(list); + } + else{ + event.finish(); + } + } + 'step 1' + if(event.list.length){ + event.list.shift().damage(2); + event.redo(); + } + }, + ai:{ + order:7, + useful:5, + value:5, + result:{ + target:function(player,target){ + if(target==player.getEnemy()) return -2; + return -1; + } + }, + tag:{ + damage:2 + } + } + }, + spell_fennu:{ + type:'stonecard', + fullimage:true, + enable:true, + stoneact:2, + career:'druid', + filterTarget:function(card,player,target){ + return target.isMin(); + }, + content:function(){ + 'step 0' + player.chooseControl('两点','一点').prompt='造成两点伤害,或造成一点伤害并从牌库中获得一张牌'; + 'step 1' + if(result.control=='一点'){ + target.damage(); + } + else{ + target.damage(2); + event.finish(); + } + 'step 2' + player.drawDeck(); + }, + ai:{ + order:8, + value:5, + useful:5, + result:{ + target:-1 + }, + tag:{ + damage:2, + } + } + }, + spell_fugen:{ + type:'stonecard', + stoneact:2, + career:'druid', + enable:true, + fullimage:true, + filterTarget:function(card,player,target){ + return target.isMin(); + }, + content:function(){ + 'step 0' + target.die(); + 'step 1' + var list=[]; + for(var i in lib.card){ + if(lib.card[i].stonehidden) continue; + if(lib.card[i].type=='stonecharacter'){ + list.push(i); + } + } + player.getEnemy().gain(game.createCard(list.randomGet()),'draw'); + }, + ai:{ + order:8.8, + value:5, + useful:5, + result:{ + target:function(player,target){ + return -target.hp-target.countCards('h')/2; + } + } + } + }, - spell_mengun:{ - type:'stonecard', - stoneact:2, - career:'rogue', - enable:true, - fullimage:true, - filterTarget:function(card,player,target){ - return target.isMin()&&target.side!=player.side; - }, - content:function(){ - 'step 0' - target.die()._triggered=null; - event.name=target.name; - 'step 1' - player.getEnemy().gain(game.createCard(event.name+'_stonecharacter'),'gain2'); - }, - ai:{ - order:8.8, - value:5, - useful:5, - result:{ - target:function(player,target){ - return -target.hp-target.countCards('h')/2; - } - } - } - }, - spell_jipao:{ - type:'stonecard', - stoneact:3, - career:'rogue', - enable:function(card,player){ - return !player.isMin(); - }, - fullimage:true, - filterTarget:function(card,player,target){ - return target==player; - }, - selectTarget:-1, - content:function(){ - if(!player.isMin()){ - player.drawDeck(4); - } - }, - ai:{ - order:1, - value:3, - useful:3, - result:{ - player:1 - } - } - }, - spell_beici:{ - type:'stonecard', - stoneact:0, - career:'rogue', - enable:true, - fullimage:true, - filterTarget:function(card,player,target){ - return target.isMin()&&target.hp==target.maxHp; - }, - content:function(){ - target.loseHp(); - }, - ai:{ - order:9, - result:{ - target:-1 - }, - value:6, - useful:6, - } - }, - spell_weijisifu:{ - type:'stonecard', - stoneact:2, - career:'rogue', - enable:true, - fullimage:true, - filterTarget:function(card,player,target){ - return target==player.getEnemy(); - }, - selectTarget:-1, - content:function(){ - if(target.deckCards){ - var cards=[]; - for(var i=0;i<3;i++){ - cards.push(game.createCard('spell_zhumo')); - } - player.$give(cards,target); - for(var i=0;i0; - }, - stoneact:2, - career:'mage', - filterTarget:function(card,player,target){ - return target.side!=player.side&&target.isMin(); - }, - selectTarget:-1, - multitarget:true, - multiline:true, - content:function(){ - 'step 0' - if(!targets.length){ - event.finish(); - return; - } - var map=[]; - for(var i=0;i0; + }, + stoneact:2, + career:'mage', + filterTarget:function(card,player,target){ + return target.side!=player.side&&target.isMin(); + }, + selectTarget:-1, + multitarget:true, + multiline:true, + content:function(){ + 'step 0' + if(!targets.length){ + event.finish(); + return; + } + var map=[]; + for(var i=0;i1) return target.hp; - return 0; - } - } - } - }, - spell_shihuawuqi:{ - type:'stonecard', - stoneact:1, - career:'shaman', - enable:true, - fullimage:true, - filterTarget:function(card,player,target){ - return target.isMin()&&!target.hasSkill('shaman_shihuawuqi'); - }, - content:function(){ - target.addSkill('shaman_shihuawuqi'); - }, - ai:{ - order:4, - value:4, - useful:4, - result:{ - target:function(player,target){ - if(target.isTurnedOver()) return 0; - var num=0; - if(target.hasSkill('shaman_fengnu')){ - num=3; - } - if(target.isMin()) return target.hp+num; - return 1.1; - } - } - } - }, - spell_xianzuzhaohuan:{ - type:'stonecard', - stoneact:2, - career:'shaman', - fullimage:true, - enable:true, - filterTarget:function(card,player,target){ - return !target.isMin(); - }, - multitarget:true, - multiline:true, - selectTarget:-1, - content:function(){ - 'step 0' - if(targets[0]){ - var hs=targets[0].getCards('h',function(card){ - return get.type(card)=='stonecharacter'; - }); - if(hs.length&&targets[0].canAddFellow()){ - targets[0].useCard(targets[0],hs.randomGet(),false).noActCount=true; - } - } - 'step 1' - if(targets[1]){ - var hs=targets[1].getCards('h',function(card){ - return get.type(card)=='stonecharacter'; - }); - if(hs.length&&targets[1].canAddFellow()){ - targets[1].useCard(targets[1],hs.randomGet(),false).noActCount=true; - } - } - }, - ai:{ - order:9, - value:5, - useful:5, - result:{ - player:function(player){ - var hs=player.getCards('h',function(card){ - return get.type(card)=='stonecharacter'; - }); - if(hs.length==0) return 0; - var enemy=player.getEnemy(); - if(enemy.countCards('h')<=1) return 1; - var num=0; - for(var i=0;i=3) return 1; - return 0; - } - } - } - }, - spell_xianzuzhihun:{ - type:'stonecard', - stoneact:2, - career:'shaman', - enable:true, - fullimage:true, - filterTarget:function(card,player,target){ - return target.isMin()&&!target.hasSkill('shaman_xianzuzhihun'); - }, - content:function(){ - target.addSkill('shaman_xianzuzhihun'); - }, - ai:{ - order:5, - value:4, - useful:4, - result:{ - target:function(player,target){ - if(lib.card[target.name+'_stonecharacter']){ - return lib.card[target.name+'_stonecharacter'].stoneact-1; - } - return 0; - } - } - } - }, - spell_xianzuzhishi:{ - type:'stonecard', - fullimage:true, - enable:true, - stoneact:0, - career:'shaman', - filterTarget:function(card,player,target){ - return target==player; - }, - selectTarget:-1, - content:function(){ - player.drawDeck(2); - player.addTempSkill('shaman_xianzuzhishi'); - }, - ai:{ - order:10, - result:{ - player:1 - } - } - }, - spell_rongyanbaolie:{ - type:'stonecard', - fullimage:true, - enable:true, - stoneact:3, - career:'shaman', - filterTarget:true, - content:function(){ - 'step 0' - target.damage(3,'fire'); - 'step 1' - player.loseHp(); - }, - ai:{ - order:8, - value:6, - useful:5, - result:{ - target:-2 - }, - tag:{ - damage:2, - natureDamage:2, - fireDamage:2, - } - } - }, + spell_fengnu:{ + type:'stonecard', + stoneact:2, + career:'shaman', + enable:true, + fullimage:true, + filterTarget:function(card,player,target){ + return target.isMin()&&!target.hasSkill('shaman_fengnu'); + }, + content:function(){ + target.addSkill('shaman_fengnu'); + }, + ai:{ + order:4, + value:4, + useful:4, + result:{ + target:function(player,target){ + if(target.hasSkill('shaman_tuteng')) return 0; + if(target.hp>1) return target.hp; + return 0; + } + } + } + }, + spell_shihuawuqi:{ + type:'stonecard', + stoneact:1, + career:'shaman', + enable:true, + fullimage:true, + filterTarget:function(card,player,target){ + return target.isMin()&&!target.hasSkill('shaman_shihuawuqi'); + }, + content:function(){ + target.addSkill('shaman_shihuawuqi'); + }, + ai:{ + order:4, + value:4, + useful:4, + result:{ + target:function(player,target){ + if(target.isTurnedOver()) return 0; + var num=0; + if(target.hasSkill('shaman_fengnu')){ + num=3; + } + if(target.isMin()) return target.hp+num; + return 1.1; + } + } + } + }, + spell_xianzuzhaohuan:{ + type:'stonecard', + stoneact:2, + career:'shaman', + fullimage:true, + enable:true, + filterTarget:function(card,player,target){ + return !target.isMin(); + }, + multitarget:true, + multiline:true, + selectTarget:-1, + content:function(){ + 'step 0' + if(targets[0]){ + var hs=targets[0].getCards('h',function(card){ + return get.type(card)=='stonecharacter'; + }); + if(hs.length&&targets[0].canAddFellow()){ + targets[0].useCard(targets[0],hs.randomGet(),false).noActCount=true; + } + } + 'step 1' + if(targets[1]){ + var hs=targets[1].getCards('h',function(card){ + return get.type(card)=='stonecharacter'; + }); + if(hs.length&&targets[1].canAddFellow()){ + targets[1].useCard(targets[1],hs.randomGet(),false).noActCount=true; + } + } + }, + ai:{ + order:9, + value:5, + useful:5, + result:{ + player:function(player){ + var hs=player.getCards('h',function(card){ + return get.type(card)=='stonecharacter'; + }); + if(hs.length==0) return 0; + var enemy=player.getEnemy(); + if(enemy.countCards('h')<=1) return 1; + var num=0; + for(var i=0;i=3) return 1; + return 0; + } + } + } + }, + spell_xianzuzhihun:{ + type:'stonecard', + stoneact:2, + career:'shaman', + enable:true, + fullimage:true, + filterTarget:function(card,player,target){ + return target.isMin()&&!target.hasSkill('shaman_xianzuzhihun'); + }, + content:function(){ + target.addSkill('shaman_xianzuzhihun'); + }, + ai:{ + order:5, + value:4, + useful:4, + result:{ + target:function(player,target){ + if(lib.card[target.name+'_stonecharacter']){ + return lib.card[target.name+'_stonecharacter'].stoneact-1; + } + return 0; + } + } + } + }, + spell_xianzuzhishi:{ + type:'stonecard', + fullimage:true, + enable:true, + stoneact:0, + career:'shaman', + filterTarget:function(card,player,target){ + return target==player; + }, + selectTarget:-1, + content:function(){ + player.drawDeck(2); + player.addTempSkill('shaman_xianzuzhishi'); + }, + ai:{ + order:10, + result:{ + player:1 + } + } + }, + spell_rongyanbaolie:{ + type:'stonecard', + fullimage:true, + enable:true, + stoneact:3, + career:'shaman', + filterTarget:true, + content:function(){ + 'step 0' + target.damage(3,'fire'); + 'step 1' + player.loseHp(); + }, + ai:{ + order:8, + value:6, + useful:5, + result:{ + target:-2 + }, + tag:{ + damage:2, + natureDamage:2, + fireDamage:2, + } + } + }, - spell_shenshengxinxing:{ - type:'stonecard', - stoneact:5, - career:'priest', - enable:true, - fullimage:true, - filterTarget:function(card,player,target){ - if(player.hasFellowSkill('priest_hunwu')||target.side!=player.side) return true; - return target.isDamaged(); - }, - selectTarget:-1, - content:function(){ - var num=1; - if(player.hasFellowSkill('stone_shenyou')){ - num=2; - } - if(player.side==target.side){ - if(player.hasFellowSkill('priest_hunwu')){ - target.loseHp(num); - } - else{ - target.recover(num); - } - } - else{ - target.damage(); - } - }, - ai:{ - order:7, - value:5, - useful:5, - result:{ - target:function(player,target){ - if(player.hasFellowSkill('priest_hunwu')) return -1; - if(player.side==target.side) return 1; - return -1; - } - }, - tag:{ - damage:1, - multitarget:1, - multineg:1 - } - } - }, - spell_shengguangzhadan:{ - type:'stonecard', - stoneact:2, - career:'priest', - enable:true, - fullimage:true, - filterTarget:function(card,player,target){ - return target.isMin()&&target.countCards('h')>0; - }, - selectTarget:-1, - content:function(){ - var num=1; - // if(player.hasFellowSkill('stone_shenyou')){ - // num=2; - // } - target.damage(target.countCards('h')*num); - }, - ai:{ - order:7, - value:5, - useful:5, - result:{ - target:function(player,target){ - return -Math.min(target.countCards('h'),target.hp); - } - }, - tag:{ - damage:1, - multitarget:1, - multineg:1 - } - } - }, - spell_maizang:{ - type:'stonecard', - stoneact:3, - career:'priest', - enable:true, - fullimage:true, - filterTarget:function(card,player,target){ - return target.isMin()&&target.side!=player.side; - }, - content:function(){ - 'step 0' - target.die()._triggered=null; - 'step 1' - if(player.deckCards){ - player.deckCards.push(game.createCard(target.name+'_stonecharacter')); - } - }, - ai:{ - order:7, - value:5, - useful:5, - result:{ - target:function(player,target){ - return -target.hp-target.countCards('h')/2; - } - } - } - }, - spell_xinlingshijie:{ - type:'stonecard', - stoneact:0, - career:'priest', - enable:function(event,player){ - return player.getEnemy().countCards('h')>0; - }, - fullimage:true, - filterTarget:function(card,player,target){ - return target==player.getEnemy(); - }, - selectTarget:-1, - content:function(){ - var card=target.getCards('h').randomGet(); - if(card){ - player.gain(game.createCard(card.name,card.suit,card.number,card.nature),'draw'); - } - }, - ai:{ - order:9.5, - value:5, - useful:5, - result:{ - player:1 - } - } - }, - spell_naluzhiguang:{ - type:'stonecard', - stoneact:1, - career:'priest', - enable:true, - fullimage:true, - filterTarget:function(card,player,target){ - if(player.hasFellowSkill('priest_hunwu')){ - return true; - } - return target.hp0; + }, + selectTarget:-1, + content:function(){ + var num=1; + // if(player.hasFellowSkill('stone_shenyou')){ + // num=2; + // } + target.damage(target.countCards('h')*num); + }, + ai:{ + order:7, + value:5, + useful:5, + result:{ + target:function(player,target){ + return -Math.min(target.countCards('h'),target.hp); + } + }, + tag:{ + damage:1, + multitarget:1, + multineg:1 + } + } + }, + spell_maizang:{ + type:'stonecard', + stoneact:3, + career:'priest', + enable:true, + fullimage:true, + filterTarget:function(card,player,target){ + return target.isMin()&&target.side!=player.side; + }, + content:function(){ + 'step 0' + target.die()._triggered=null; + 'step 1' + if(player.deckCards){ + player.deckCards.push(game.createCard(target.name+'_stonecharacter')); + } + }, + ai:{ + order:7, + value:5, + useful:5, + result:{ + target:function(player,target){ + return -target.hp-target.countCards('h')/2; + } + } + } + }, + spell_xinlingshijie:{ + type:'stonecard', + stoneact:0, + career:'priest', + enable:function(event,player){ + return player.getEnemy().countCards('h')>0; + }, + fullimage:true, + filterTarget:function(card,player,target){ + return target==player.getEnemy(); + }, + selectTarget:-1, + content:function(){ + var card=target.getCards('h').randomGet(); + if(card){ + player.gain(game.createCard(card.name,card.suit,card.number,card.nature),'draw'); + } + }, + ai:{ + order:9.5, + value:5, + useful:5, + result:{ + player:1 + } + } + }, + spell_naluzhiguang:{ + type:'stonecard', + stoneact:1, + career:'priest', + enable:true, + fullimage:true, + filterTarget:function(card,player,target){ + if(player.hasFellowSkill('priest_hunwu')){ + return true; + } + return target.hp0; - }, - fullimage:true, - filterTarget:function(card,player,target){ - return target.isMin(); - }, - content:function(){ - target.damage(player.hujia); - }, - ai:{ - order:7.2, - value:5, - useful:5, - result:{ - target:-1.5, - tag:{ - damage:1 - } - } - } - }, - spell_zhansha:{ - type:'stonecard', - stoneact:1, - career:'warrior', - enable:true, - fullimage:true, - filterTarget:function(card,player,target){ - return target.isMin()&&target.hp=4) return 1.5; - if(target.hp>=3&&target.countCards('h')=2) return true; - } - } - return false; - }, - fullimage:true, - filterTarget:function(card,player,target){ - return target.isMin(); - }, - selectTarget:-1, - content:function(){ - 'step 0' - targets.randomRemove(); - targets.sort(lib.sort.seat); - event.list=targets; - 'step 1' - if(event.list.length){ - event.list.shift().die(); - event.redo(); - } - }, - ai:{ - order:9, - value:5, - useful:5, - result:{ - target:-2 - } - } - }, + spell_nuxi:{ + type:'stonecard', + stoneact:3, + career:'warrior', + enable:true, + fullimage:true, + filterTarget:true, + content:function(){ + target.damage(); + player.changeHujia(2); + }, + ai:{ + order:7, + value:5, + useful:5, + result:{ + target:-1.5, + }, + tag:{ + damage:1 + } + } + }, + spell_dunpaimengji:{ + type:'stonecard', + stoneact:2, + career:'warrior', + enable:function(event,player){ + return player.hujia>0; + }, + fullimage:true, + filterTarget:function(card,player,target){ + return target.isMin(); + }, + content:function(){ + target.damage(player.hujia); + }, + ai:{ + order:7.2, + value:5, + useful:5, + result:{ + target:-1.5, + tag:{ + damage:1 + } + } + } + }, + spell_zhansha:{ + type:'stonecard', + stoneact:1, + career:'warrior', + enable:true, + fullimage:true, + filterTarget:function(card,player,target){ + return target.isMin()&&target.hp=4) return 1.5; + if(target.hp>=3&&target.countCards('h')=2) return true; + } + } + return false; + }, + fullimage:true, + filterTarget:function(card,player,target){ + return target.isMin(); + }, + selectTarget:-1, + content:function(){ + 'step 0' + targets.randomRemove(); + targets.sort(lib.sort.seat); + event.list=targets; + 'step 1' + if(event.list.length){ + event.list.shift().die(); + event.redo(); + } + }, + ai:{ + order:9, + value:5, + useful:5, + result:{ + target:-2 + } + } + }, - spell_lierenyinji:{ - type:'stonecard', - stoneact:0, - career:'hunter', - enable:true, - fullimage:true, - filterTarget:function(card,player,target){ - return target.isMin()&&target.maxHp>1; - }, - content:function(){ - target.loseMaxHp(target.maxHp-1); - }, - ai:{ - order:7, - value:5, - useful:5, - result:{ - target:function(player,target){ - return 1-target.hp; - } - } - } - }, - spell_kuaisusheji:{ - type:'stonecard', - stoneact:2, - career:'hunter', - enable:true, - fullimage:true, - filterTarget:true, - content:function(){ - target.damage(); - player.draw(); - }, - ai:{ - order:7, - value:5, - useful:5, - result:{ - target:-1.5, - }, - tag:{ - damage:1 - } - } - }, - spell_guanmenfanggou:{ - type:'stonecard', - stoneact:2, - career:'hunter', - enable:function(event,player){ - return player.getEnemy().countFellow()>0&&player.canAddFellow(); - }, - fullimage:true, - filterTarget:function(card,player,target){ - return target==player; - }, - selectTarget:-1, - content:function(){ - 'step 0' - event.num=player.getEnemy().countFellow(); - 'step 1' - if(player.canAddFellow()&&event.num--){ - player.addFellowAuto('stone_liegou'); - event.redo(); - } - }, - ai:{ - order:7, - value:5, - useful:5, - result:{ - target:1 - } - } - }, - spell_zhaohuanchongwu:{ - type:'stonecard', - stoneact:2, - career:'hunter', - enable:function(event,player){ - return player.canAddFellow(); - }, - fullimage:true, - filterTarget:function(card,player,target){ - return target==player; - }, - selectTarget:-1, - content:function(){ - player.addFellowAuto(lib.beastList.randomGet()); - }, - ai:{ - order:6, - value:5, - useful:5, - result:{ - player:1 - } - } - }, - spell_zidanshangtang:{ - type:'stonecard', - stoneact:1, - career:'hunter', - enable:true, - fullimage:true, - filterTarget:function(card,player,target){ - return target==player; - }, - selectTarget:-1, - content:function(){ - var list=['spell_lierenyinji','spell_guanmenfanggou','spell_duochongsheji','spell_kuaisusheji','spell_zhaohuanchongwu']; - player.gain(game.createCard(list.randomGet()),'draw'); - player.addTempSkill('hunter_zidanshangtang'); - }, - ai:{ - order:7.5, - value:5, - useful:5, - result:{ - player:1 - } - } - }, - spell_duochongsheji:{ - type:'stonecard', - fullimage:true, - enable:function(event,player){ - for(var i=0;i1; + }, + content:function(){ + target.loseMaxHp(target.maxHp-1); + }, + ai:{ + order:7, + value:5, + useful:5, + result:{ + target:function(player,target){ + return 1-target.hp; + } + } + } + }, + spell_kuaisusheji:{ + type:'stonecard', + stoneact:2, + career:'hunter', + enable:true, + fullimage:true, + filterTarget:true, + content:function(){ + target.damage(); + player.draw(); + }, + ai:{ + order:7, + value:5, + useful:5, + result:{ + target:-1.5, + }, + tag:{ + damage:1 + } + } + }, + spell_guanmenfanggou:{ + type:'stonecard', + stoneact:2, + career:'hunter', + enable:function(event,player){ + return player.getEnemy().countFellow()>0&&player.canAddFellow(); + }, + fullimage:true, + filterTarget:function(card,player,target){ + return target==player; + }, + selectTarget:-1, + content:function(){ + 'step 0' + event.num=player.getEnemy().countFellow(); + 'step 1' + if(player.canAddFellow()&&event.num--){ + player.addFellowAuto('stone_liegou'); + event.redo(); + } + }, + ai:{ + order:7, + value:5, + useful:5, + result:{ + target:1 + } + } + }, + spell_zhaohuanchongwu:{ + type:'stonecard', + stoneact:2, + career:'hunter', + enable:function(event,player){ + return player.canAddFellow(); + }, + fullimage:true, + filterTarget:function(card,player,target){ + return target==player; + }, + selectTarget:-1, + content:function(){ + player.addFellowAuto(lib.beastList.randomGet()); + }, + ai:{ + order:6, + value:5, + useful:5, + result:{ + player:1 + } + } + }, + spell_zidanshangtang:{ + type:'stonecard', + stoneact:1, + career:'hunter', + enable:true, + fullimage:true, + filterTarget:function(card,player,target){ + return target==player; + }, + selectTarget:-1, + content:function(){ + var list=['spell_lierenyinji','spell_guanmenfanggou','spell_duochongsheji','spell_kuaisusheji','spell_zhaohuanchongwu']; + player.gain(game.createCard(list.randomGet()),'draw'); + player.addTempSkill('hunter_zidanshangtang'); + }, + ai:{ + order:7.5, + value:5, + useful:5, + result:{ + player:1 + } + } + }, + spell_duochongsheji:{ + type:'stonecard', + fullimage:true, + enable:function(event,player){ + for(var i=0;imaxHp){ - maxHp=game.players[i].hp; - } - } - } - if(list.length<2) return 0; - if(list.length==2&&target.hp>=4) return 0; - if(target.hp>maxHp) return 1; - return target.hp; - } - }, - } - }, - spell_xishengqiyue:{ - type:'stonecard', - fullimage:true, - enable:true, - stoneact:0, - career:'warlock', - filterTarget:function(card,player,target){ - if(!target.isMin()) return false; - if(ui.selected.targets.length){ - return target.side!=ui.selected.targets[0].side; - } - return true; - }, - selectTarget:2, - multitarget:true, - multiline:true, - content:function(){ - targets.sort(lib.sort.seat); - for(var i=0;imaxHp){ + maxHp=game.players[i].hp; + } + } + } + if(list.length<2) return 0; + if(list.length==2&&target.hp>=4) return 0; + if(target.hp>maxHp) return 1; + return target.hp; + } + }, + } + }, + spell_xishengqiyue:{ + type:'stonecard', + fullimage:true, + enable:true, + stoneact:0, + career:'warlock', + filterTarget:function(card,player,target){ + if(!target.isMin()) return false; + if(ui.selected.targets.length){ + return target.side!=ui.selected.targets[0].side; + } + return true; + }, + selectTarget:2, + multitarget:true, + multiline:true, + content:function(){ + targets.sort(lib.sort.seat); + for(var i=0;i=2) return 1; - return 0; - } - }, - } - }, - spell_hengsao:{ - type:'stonecard', - fullimage:true, - enable:true, - stoneact:4, - career:'druid', - filterTarget:function(card,player,target){ - return target.side!=player.side; - }, - content:function(){ - 'step 0' - event.list=[]; - for(var i=0;i=2) return 1; + return 0; + } + }, + } + }, + spell_hengsao:{ + type:'stonecard', + fullimage:true, + enable:true, + stoneact:4, + career:'druid', + filterTarget:function(card,player,target){ + return target.side!=player.side; + }, + content:function(){ + 'step 0' + event.list=[]; + for(var i=0;i0; - }, - stoneact:4, - career:'paladin', - filterTarget:function(card,player,target){ - return target.side!=player.side&&target.isMin(); - }, - selectTarget:-1, - multitarget:true, - multiline:true, - content:function(){ - 'step 0' - if(!targets.length){ - event.finish(); - return; - } - var map=[]; - for(var i=0;i0; + }, + stoneact:4, + career:'paladin', + filterTarget:function(card,player,target){ + return target.side!=player.side&&target.isMin(); + }, + selectTarget:-1, + multitarget:true, + multiline:true, + content:function(){ + 'step 0' + if(!targets.length){ + event.finish(); + return; + } + var map=[]; + for(var i=0;i1||target.countCards('he')>0); - }, - content:function(){ - "step 0" - target.discard(target.getCards('he')); - "step 1" - if(target.maxHp>2){ - target.loseMaxHp(target.maxHp-2); - } - }, - ai:{ - result:{ - target:function(player,target){ - return Math.min(0,2-target.hp)-target.countCards('h')/2; - } - }, - order:7 - } - }, - spell_morizaihuo:{ - fullimage:true, - type:'stonecard', - enable:true, - filterTarget:function(card,player,target){ - return target.isMin(); - }, - selectTarget:-1, - multiline:true, - multitarget:true, - content:function(){ - 'step 0' - targets.sort(lib.sort.seat); - event.list=targets; - 'step 1' - if(event.list.length){ - event.list.shift().die(); - event.redo(); - } - 'step 2' - player.recover(2) - }, - stoneact:5, - ai:{ - order:9, - result:{ - target:-1, - player:function(player){ - if(player.hp1; - }, - selectTarget:-1, - content:function(){ - target.loseMaxHp(target.maxHp-1); - }, - ai:{ - order:9.1, - result:{ - target:function(player,target){ - if(target.hp>1) return -1; - if(target.maxHp>1) return -0.1; - return 0; - } - } - } - }, - spell_jingshenkongzhi:{ - fullimage:true, - type:'stonecard', - enable:function(event,player){ - if(player.isMin()) return false; - return player.canAddFellow(); - }, - stoneact:6, - filterTarget:function(card,player,target){ - return target.isMin()&&target.side!=player.side; - }, - content:function(){ - target.getLeader().removeFellow(target); - target.side=player.side; - player.addFellow(target); - if(!target.isTurnedOver()){ - target.turnOver(); - } - }, - ai:{ - order:9.5, - result:{ - target:function(player,target){ - return -target.hp; - } - } - } - }, - spell_anyingkuangluan:{ - type:'stonecard', - fullimage:true, - enable:function(event,player){ - if(player.isMin()) return false; - return player.canAddFellow(); - }, - stoneact:4, - filterTarget:function(card,player,target){ - return target.isMin()&&target.side!=player.side&&target.countCards('h')<=1; - }, - content:function(){ - target.getLeader().removeFellow(target); - target.side=player.side; - player.addFellow(target); - target.addSkill('spell_anyingkuangluan_die'); - }, - ai:{ - order:9.5, - result:{ - target:function(player,target){ - return -target.hp; - } - } - } - }, - spell_binghuan:{ - fullimage:true, - type:'stonecard', - enable:true, - stoneact:1, - filterTarget:function(card,player,target){ - return target.isMin(); - }, - selectTarget:-1, - content:function(){ - target.turnOver(); - }, - ai:{ - order:7, - result:{ - target:function(player,target){ - if(target.isTurnedOver()) return 1; - return -1; - } - } - } - }, - spell_zhiliaozhichu:{ - fullimage:true, - type:'stonecard', - enable:true, - stoneact:1, - filterTarget:function(card,player,target){ - return target.isMin()&&target.side==player.side&& - (!target.hasSkill('chaofeng')||target.hp0){ - player.draw(dh); - } - }, - ai:{ - order:7, - value:1, - useful:1, - result:{ - target:function(player,target){ - var ne1=target.countCards('e'),ne2=player.countCards('e'); - var nh1=target.countCards('h'),nh2=player.countCards('h'); - if(nh10){ - target.discard(target.getCards('h').randomGets(dh)); - } - }, - ai:{ - order:1, - value:1, - useful:1, - result:{ - target:function(player,target){ - if(target.countCards('he')>=player.countCards('h')) return -1; - return 0; - } - } - } - }, - }, - skill:{ - stone_mieshi:{ - trigger:{source:'fellow'}, - forced:true, - unique:true, - filter:function(event,player){ - for(var i=0;i=player.maxHp-1) return [0,0]; - } - } - } - }, - stone_lianyu:{ - mark:true, - intro:{ - content:function(storage){ - return '地狱火的初始手牌数和体力值为'+(storage+2); - } - }, - ai:{ - threaten:function(player,target){ - return 1+target.storage.stone_lianyu; - }, - } - }, - stone_lianji:{ - trigger:{global:'fellow'}, - forced:true, - unique:true, - filter:function(event,player){ - return event.player.side==player.side&&event.source!=player; - }, - content:function(){ - player.maxHp++; - player.hp++; - player.update(); - player.draw(); - }, - ai:{ - threaten:2 - } - }, - stone_shenyu:{ - trigger:{source:'fellow'}, - forced:true, - unique:true, - content:function(){ - 'step 0' - var target=player.getLeader(); - var next=target.chooseControl('召唤树人','增强随从'); - next.prompt='召唤两个嘲讽树人,或令所有其他随从增加一点体力和体力上限并摸两张牌'; - next.ai=function(){ - if(target.countFellow()<=2) return '召唤树人'; - return '增强随从'; - } - 'step 1' - if(result.control=='增强随从'){ - var targets=player.getLeader().getFellow(); - targets.remove(player); - for(var i=0;i1||target.countCards('he')>0); + }, + content:function(){ + "step 0" + target.discard(target.getCards('he')); + "step 1" + if(target.maxHp>2){ + target.loseMaxHp(target.maxHp-2); + } + }, + ai:{ + result:{ + target:function(player,target){ + return Math.min(0,2-target.hp)-target.countCards('h')/2; + } + }, + order:7 + } + }, + spell_morizaihuo:{ + fullimage:true, + type:'stonecard', + enable:true, + filterTarget:function(card,player,target){ + return target.isMin(); + }, + selectTarget:-1, + multiline:true, + multitarget:true, + content:function(){ + 'step 0' + targets.sort(lib.sort.seat); + event.list=targets; + 'step 1' + if(event.list.length){ + event.list.shift().die(); + event.redo(); + } + 'step 2' + player.recover(2) + }, + stoneact:5, + ai:{ + order:9, + result:{ + target:-1, + player:function(player){ + if(player.hp1; + }, + selectTarget:-1, + content:function(){ + target.loseMaxHp(target.maxHp-1); + }, + ai:{ + order:9.1, + result:{ + target:function(player,target){ + if(target.hp>1) return -1; + if(target.maxHp>1) return -0.1; + return 0; + } + } + } + }, + spell_jingshenkongzhi:{ + fullimage:true, + type:'stonecard', + enable:function(event,player){ + if(player.isMin()) return false; + return player.canAddFellow(); + }, + stoneact:6, + filterTarget:function(card,player,target){ + return target.isMin()&&target.side!=player.side; + }, + content:function(){ + target.getLeader().removeFellow(target); + target.side=player.side; + player.addFellow(target); + if(!target.isTurnedOver()){ + target.turnOver(); + } + }, + ai:{ + order:9.5, + result:{ + target:function(player,target){ + return -target.hp; + } + } + } + }, + spell_anyingkuangluan:{ + type:'stonecard', + fullimage:true, + enable:function(event,player){ + if(player.isMin()) return false; + return player.canAddFellow(); + }, + stoneact:4, + filterTarget:function(card,player,target){ + return target.isMin()&&target.side!=player.side&&target.countCards('h')<=1; + }, + content:function(){ + target.getLeader().removeFellow(target); + target.side=player.side; + player.addFellow(target); + target.addSkill('spell_anyingkuangluan_die'); + }, + ai:{ + order:9.5, + result:{ + target:function(player,target){ + return -target.hp; + } + } + } + }, + spell_binghuan:{ + fullimage:true, + type:'stonecard', + enable:true, + stoneact:1, + filterTarget:function(card,player,target){ + return target.isMin(); + }, + selectTarget:-1, + content:function(){ + target.turnOver(); + }, + ai:{ + order:7, + result:{ + target:function(player,target){ + if(target.isTurnedOver()) return 1; + return -1; + } + } + } + }, + spell_zhiliaozhichu:{ + fullimage:true, + type:'stonecard', + enable:true, + stoneact:1, + filterTarget:function(card,player,target){ + return target.isMin()&&target.side==player.side&& + (!target.hasSkill('chaofeng')||target.hp0){ + player.draw(dh); + } + }, + ai:{ + order:7, + value:1, + useful:1, + result:{ + target:function(player,target){ + var ne1=target.countCards('e'),ne2=player.countCards('e'); + var nh1=target.countCards('h'),nh2=player.countCards('h'); + if(nh10){ + target.discard(target.getCards('h').randomGets(dh)); + } + }, + ai:{ + order:1, + value:1, + useful:1, + result:{ + target:function(player,target){ + if(target.countCards('he')>=player.countCards('h')) return -1; + return 0; + } + } + } + }, + }, + skill:{ + stone_mieshi:{ + trigger:{source:'fellow'}, + forced:true, + unique:true, + filter:function(event,player){ + for(var i=0;i=player.maxHp-1) return [0,0]; + } + } + } + }, + stone_lianyu:{ + mark:true, + intro:{ + content:function(storage){ + return '地狱火的初始手牌数和体力值为'+(storage+2); + } + }, + ai:{ + threaten:function(player,target){ + return 1+target.storage.stone_lianyu; + }, + } + }, + stone_lianji:{ + trigger:{global:'fellow'}, + forced:true, + unique:true, + filter:function(event,player){ + return event.player.side==player.side&&event.source!=player; + }, + content:function(){ + player.maxHp++; + player.hp++; + player.update(); + player.draw(); + }, + ai:{ + threaten:2 + } + }, + stone_shenyu:{ + trigger:{source:'fellow'}, + forced:true, + unique:true, + content:function(){ + 'step 0' + var target=player.getLeader(); + var next=target.chooseControl('召唤树人','增强随从'); + next.prompt='召唤两个嘲讽树人,或令所有其他随从增加一点体力和体力上限并摸两张牌'; + next.ai=function(){ + if(target.countFellow()<=2) return '召唤树人'; + return '增强随从'; + } + 'step 1' + if(result.control=='增强随从'){ + var targets=player.getLeader().getFellow(); + targets.remove(player); + for(var i=0;i0; - }, - content:function(){ - player.addSkill('stone_chongfeng'); - if(player.isTurnedOver()){ - player.turnOver(); - } - } - }, - warrior_peilian:{ - trigger:{source:'fellow'}, - forced:true, - unique:true, - filter:function(event,player){ - for(var i=0;i0; + }, + content:function(){ + player.addSkill('stone_chongfeng'); + if(player.isTurnedOver()){ + player.turnOver(); + } + } + }, + warrior_peilian:{ + trigger:{source:'fellow'}, + forced:true, + unique:true, + filter:function(event,player){ + for(var i=0;i1) return true; - } - return false; - }, - content:function(){ - "step 0" - event.chooser=player.getLeader(); - event.chooser.chooseTarget('缩小:令一名随从减少两点体力上限',function(card,playerx,target){ - return player!=target&&target.isMin()&&target.maxHp>1; - }).ai=function(target){ - if(get.attitude(player,target)>=0) return 0; - if(target.hp==1) return 0.01; - if(target.maxHp-target.hp>=2) return 0.01; - if(target.maxHp-target.hp==1){ - if(target.hp==2) return 1; - return 0.1; - } - switch(target.hp){ - case 1:return 0.01; - case 2:return 1; - case 3:return 2; - case 4:return 1.5; - case 5:return 1; - default:return 0.8; - } - }; - player.line(event.chooser); - "step 1" - if(result.bool){ - event.chooser.line(result.targets[0]); - result.targets[0].maxHp-=2; - if(result.targets[0].maxHp<1){ - result.targets[0].maxHp=1; - } - result.targets[0].update(); - } - } - }, - priest_shixin:{ - trigger:{global:'useSkillAfter'}, - forced:true, - unique:true, - filter:function(event,player){ - return event.career&&event.player.side==player.side; - }, - content:function(){ - 'step 0' - var target=player.getLeader(); - target.damage(); - player.line(target,'green'); - 'step 1' - var target=player.getEnemy(); - target.damage(); - player.line(target,'green'); - } - }, - priest_shengshui:{ - trigger:{player:'phaseBegin'}, - unique:true, - forced:true, - filter:function(event,player){ - for(var i=0;i0; - }, - content:function(){ - player.maxHp++; - player.hp++; - player.update(); - } - }, + priest_puzhao:{ + trigger:{source:'fellow'}, + unique:true, + forced:true, + filter:function(event,player){ + for(var i=0;i1) return true; + } + return false; + }, + content:function(){ + "step 0" + event.chooser=player.getLeader(); + event.chooser.chooseTarget('缩小:令一名随从减少两点体力上限',function(card,playerx,target){ + return player!=target&&target.isMin()&&target.maxHp>1; + }).ai=function(target){ + if(get.attitude(player,target)>=0) return 0; + if(target.hp==1) return 0.01; + if(target.maxHp-target.hp>=2) return 0.01; + if(target.maxHp-target.hp==1){ + if(target.hp==2) return 1; + return 0.1; + } + switch(target.hp){ + case 1:return 0.01; + case 2:return 1; + case 3:return 2; + case 4:return 1.5; + case 5:return 1; + default:return 0.8; + } + }; + player.line(event.chooser); + "step 1" + if(result.bool){ + event.chooser.line(result.targets[0]); + result.targets[0].maxHp-=2; + if(result.targets[0].maxHp<1){ + result.targets[0].maxHp=1; + } + result.targets[0].update(); + } + } + }, + priest_shixin:{ + trigger:{global:'useSkillAfter'}, + forced:true, + unique:true, + filter:function(event,player){ + return event.career&&event.player.side==player.side; + }, + content:function(){ + 'step 0' + var target=player.getLeader(); + target.damage(); + player.line(target,'green'); + 'step 1' + var target=player.getEnemy(); + target.damage(); + player.line(target,'green'); + } + }, + priest_shengshui:{ + trigger:{player:'phaseBegin'}, + unique:true, + forced:true, + filter:function(event,player){ + for(var i=0;i0; + }, + content:function(){ + player.maxHp++; + player.hp++; + player.update(); + } + }, - hunter_mishi:{ - trigger:{global:'fellow'}, - forced:true, - unique:true, - filter:function(event,player){ - return event.player.side==player.side&&event.source!=player; - }, - content:function(){ - player.draw(); - } - }, - hunter_muyang:{ - trigger:{source:'fellow'}, - forced:true, - unique:true, - filter:function(event,player){ - return player.getLeader().countFellow()>1&&player.getLeader().canAddFellow(); - }, - content:function(){ - var num=player.getLeader().countFellow()-1; - var list=[]; - for(var i in lib.character){ - if(lib.character[i][4].contains('stone')&& - !lib.character[i][4].contains('stonehidden')&& - lib.character[i][5]&&lib.character[i][5][0]==num){ - list.push(i); - } - } - var target=player.getLeader(); - if(list.length){ - target.addFellowAuto(list.randomGet()); - } - } - }, - hunter_juji:{ - unique:true - }, - hunter_dusha:{ - trigger:{source:'fellow'}, - forced:true, - unique:true, - content:function(){ - 'step 0' - var list=[]; - var target=player.getLeader(); - for(var i=0;i1&&player.getLeader().canAddFellow(); + }, + content:function(){ + var num=player.getLeader().countFellow()-1; + var list=[]; + for(var i in lib.character){ + if(lib.character[i][4].contains('stone')&& + !lib.character[i][4].contains('stonehidden')&& + lib.character[i][5]&&lib.character[i][5][0]==num){ + list.push(i); + } + } + var target=player.getLeader(); + if(list.length){ + target.addFellowAuto(list.randomGet()); + } + } + }, + hunter_juji:{ + unique:true + }, + hunter_dusha:{ + trigger:{source:'fellow'}, + forced:true, + unique:true, + content:function(){ + 'step 0' + var list=[]; + var target=player.getLeader(); + for(var i=0;i0; - }, - content:function(){ - "step 0" - event.chooser=player.getLeader(); - event.chooser.chooseToDiscard('是否弃置一张装备牌令'+get.translation(player)+'摸三张牌?', - 'he',function(card){ - return get.type(card)=='equip'; - }).ai=function(card){ - return 7-get.value(card); - }; - "step 1" - if(result.bool){ - player.draw(3); - } - } - }, - rogue_jielue:{ - trigger:{global:'equipEnd'}, - unique:true, - forced:true, - filter:function(event,player){ - return event.player.side==player.side&&get.subtype(event.card)=='equip1'; - }, - content:function(){ - player.draw(2); - }, - ai:{ - threaten:1.3 - } - }, - rogue_fusheng:{ - trigger:{source:'fellow'}, - forced:true, - unique:true, - filter:function(event,player){ - for(var i=0;i1){ - return true; - } - } - }, - content:function(){ - var num=1; - for(var i=0;inum){ - num=game.players[i].hp; - } - } - player.hp=num; - player.maxHp=num; - player.update(); - } - }, - rogue_lifa:{ - trigger:{source:'fellow'}, - forced:true, - unique:true, - content:function(){ - 'step 0' - var target=player.getLeader(); - if(target.getEquip(1)){ - target=target.getEnemy(); - player.line(target,'green'); - target.damage(); - } - else{ - player.line(target,'green'); - var equip1=get.cardPile(function(card){ - return get.subtype(card)=='equip1'; - }); - if(!equip1){ - equip1=game.createCard('qingnang'); - } - target.equip(equip1); - } - } - }, - rogue_shoudao:{ - trigger:{global:'phaseEnd'}, - forced:true, - direct:true, - filter:function(event,player){ - return event.player==player.getLeader()&&event.player.countFellow()>1; - }, - content:function(){ - 'step 0' - var players=get.players(); - var targets=[]; - for(var i=0;i0; + }, + content:function(){ + "step 0" + event.chooser=player.getLeader(); + event.chooser.chooseToDiscard('是否弃置一张装备牌令'+get.translation(player)+'摸三张牌?', + 'he',function(card){ + return get.type(card)=='equip'; + }).ai=function(card){ + return 7-get.value(card); + }; + "step 1" + if(result.bool){ + player.draw(3); + } + } + }, + rogue_jielue:{ + trigger:{global:'equipEnd'}, + unique:true, + forced:true, + filter:function(event,player){ + return event.player.side==player.side&&get.subtype(event.card)=='equip1'; + }, + content:function(){ + player.draw(2); + }, + ai:{ + threaten:1.3 + } + }, + rogue_fusheng:{ + trigger:{source:'fellow'}, + forced:true, + unique:true, + filter:function(event,player){ + for(var i=0;i1){ + return true; + } + } + }, + content:function(){ + var num=1; + for(var i=0;inum){ + num=game.players[i].hp; + } + } + player.hp=num; + player.maxHp=num; + player.update(); + } + }, + rogue_lifa:{ + trigger:{source:'fellow'}, + forced:true, + unique:true, + content:function(){ + 'step 0' + var target=player.getLeader(); + if(target.getEquip(1)){ + target=target.getEnemy(); + player.line(target,'green'); + target.damage(); + } + else{ + player.line(target,'green'); + var equip1=get.cardPile(function(card){ + return get.subtype(card)=='equip1'; + }); + if(!equip1){ + equip1=game.createCard('qingnang'); + } + target.equip(equip1); + } + } + }, + rogue_shoudao:{ + trigger:{global:'phaseEnd'}, + forced:true, + direct:true, + filter:function(event,player){ + return event.player==player.getLeader()&&event.player.countFellow()>1; + }, + content:function(){ + 'step 0' + var players=get.players(); + var targets=[]; + for(var i=0;i1){ - return true; - } - } - return false; - }, - content:function(){ - "step 0" - var list=[]; - for(var i=0;i1){ - list.push(game.players[i]); - } - } - list.sort(lib.sort.seat); - event.list=list; - "step 1" - if(event.list.length){ - var current=event.list.shift(); - current.damage(2); - player.line(current,'green'); - event.redo(); - } - } - }, - paladin_tuxi:{ - trigger:{source:'fellow'}, - forced:true, - unique:true, - filter:function(event,player){ - var leader=player.getLeader(); - return leader.hp2){ - return get.attitude(event.chooser,target)*(2-target.maxHp)/100; - } - return get.attitude(event.chooser,target)*(2-target.hp); - }; - player.line(event.chooser); - "step 1" - if(result.bool){ - event.chooser.line(result.targets[0]); - result.targets[0].hp=2; - result.targets[0].maxHp=2; - result.targets[0].update(); - } - } - }, - paladin_baowei:{ - trigger:{source:'fellow'}, - forced:true, - unique:true, - filter:function(event,player){ - for(var i=0;i1){ + return true; + } + } + return false; + }, + content:function(){ + "step 0" + var list=[]; + for(var i=0;i1){ + list.push(game.players[i]); + } + } + list.sort(lib.sort.seat); + event.list=list; + "step 1" + if(event.list.length){ + var current=event.list.shift(); + current.damage(2); + player.line(current,'green'); + event.redo(); + } + } + }, + paladin_tuxi:{ + trigger:{source:'fellow'}, + forced:true, + unique:true, + filter:function(event,player){ + var leader=player.getLeader(); + return leader.hp2){ + return get.attitude(event.chooser,target)*(2-target.maxHp)/100; + } + return get.attitude(event.chooser,target)*(2-target.hp); + }; + player.line(event.chooser); + "step 1" + if(result.bool){ + event.chooser.line(result.targets[0]); + result.targets[0].hp=2; + result.targets[0].maxHp=2; + result.targets[0].update(); + } + } + }, + paladin_baowei:{ + trigger:{source:'fellow'}, + forced:true, + unique:true, + filter:function(event,player){ + for(var i=0;i0&&player.getEnemy().hasFellow(); - }, - content:function(){ - 'step 0' - var num=player.getLeader().countCards('e'); - var map=[]; - var targets=player.getEnemy().getFellow(); - event.targets=targets; - for(var i=0;i0&&player.getEnemy().hasFellow(); + }, + content:function(){ + 'step 0' + var num=player.getLeader().countCards('e'); + var map=[]; + var targets=player.getEnemy().getFellow(); + event.targets=targets; + for(var i=0;i1; - }, - content:function(){ - var target=player.getLeader(); - var num=target.countFellow(); - if(num>1){ - target.actused-=num-1; - target.updateActCount(); - } - } - }, - druid_qicheng:{ - trigger:{player:'dieBegin'}, - forced:true, - unique:true, - content:function(){ - player.getLeader().addSkill('druid_qicheng2'); - }, - ai:{ - threaten:0.8 - } - }, - druid_qicheng2:{ - trigger:{global:'dieAfter'}, - forced:true, - popup:false, - filter:function(event,player){ - return event.player.hasSkill('druid_qicheng'); - }, - content:function(){ - game.delay(); - var list=[]; - for(var i in lib.character){ - if(lib.character[i][4].contains('stone')&& - !lib.character[i][4].contains('stonehidden')&& - lib.character[i][5]&&lib.character[i][5][0]==1){ - list.push(i); - } - } - player.addFellowAuto(list.randomGet()); - player.removeSkill('druid_qicheng2'); - } - }, - druid_renya:{ - trigger:{source:'fellow'}, - forced:true, - unique:true, - content:function(){ - 'step 0' - player.getLeader().chooseControl('冲锋','潜行').ai=function(){ - if(Math.random()<0.5) return '潜行'; - return '冲锋'; - } - 'step 1' - if(result.control=='潜行'){ - player.maxHp++; - player.hp++; - player.update(); - player.addTempSkill('qianxing',{player:'phaseBegin'}); - } - else{ - player.draw(); - player.addSkill('stone_chongfeng'); - if(player.isTurnedOver()){ - player.turnOver(); - } - } - } - }, - druid_yuehuo:{ - trigger:{global:'damageBegin'}, - forced:true, - unique:true, - filter:function(event){ - return event.card&&get.type(event.card)=='trick'&&event.notLink(); - }, - content:function(){ - trigger.num++; - }, - }, + druid_juhuo:{ + trigger:{global:'dieAfter'}, + filter:function(event,player){ + return event.player.isMin()&&_status.currentPhase==player.getLeader(); + }, + unique:true, + content:function(){ + var target=player.getLeader(); + target.actused--; + target.updateActCount(); + player.line(target,'green'); + } + }, + druid_yeyou:{ + trigger:{source:'fellow'}, + forced:true, + unique:true, + content:function(){ + game.asyncDraw([player.getLeader(),player.getEnemy()],1,{drawDeck:1}); + } + }, + druid_chicheng:{ + trigger:{source:'fellow'}, + forced:true, + unique:true, + filter:function(event,player){ + var target=player.getLeader(); + return _status.currentPhase==target&&target.countFellow()>1; + }, + content:function(){ + var target=player.getLeader(); + var num=target.countFellow(); + if(num>1){ + target.actused-=num-1; + target.updateActCount(); + } + } + }, + druid_qicheng:{ + trigger:{player:'dieBegin'}, + forced:true, + unique:true, + content:function(){ + player.getLeader().addSkill('druid_qicheng2'); + }, + ai:{ + threaten:0.8 + } + }, + druid_qicheng2:{ + trigger:{global:'dieAfter'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.player.hasSkill('druid_qicheng'); + }, + content:function(){ + game.delay(); + var list=[]; + for(var i in lib.character){ + if(lib.character[i][4].contains('stone')&& + !lib.character[i][4].contains('stonehidden')&& + lib.character[i][5]&&lib.character[i][5][0]==1){ + list.push(i); + } + } + player.addFellowAuto(list.randomGet()); + player.removeSkill('druid_qicheng2'); + } + }, + druid_renya:{ + trigger:{source:'fellow'}, + forced:true, + unique:true, + content:function(){ + 'step 0' + player.getLeader().chooseControl('冲锋','潜行').ai=function(){ + if(Math.random()<0.5) return '潜行'; + return '冲锋'; + } + 'step 1' + if(result.control=='潜行'){ + player.maxHp++; + player.hp++; + player.update(); + player.addTempSkill('qianxing',{player:'phaseBegin'}); + } + else{ + player.draw(); + player.addSkill('stone_chongfeng'); + if(player.isTurnedOver()){ + player.turnOver(); + } + } + } + }, + druid_yuehuo:{ + trigger:{global:'damageBegin'}, + forced:true, + unique:true, + filter:function(event){ + return event.card&&get.type(event.card)=='trick'&&event.notLink(); + }, + content:function(){ + trigger.num++; + }, + }, - shaman_anhun:{ - trigger:{global:'dieAfter'}, - forced:true, - unique:true, - filter:function(event,player){ - return event.player.side==player.side; - }, - content:function(){ - player.line(player.getLeader(),'green'); - player.getLeader().drawDeck(); - } - }, - shaman_zoushi:{ - trigger:{global:'useCardAfter'}, - direct:true, - unique:true, - filter:function(event,player){ - return get.type(event.card)=='stonecharacter'&&event.player==player.getLeader(); - }, - content:function(){ - if(!player.storage.shaman_zoushi){ - player.storage.shaman_zoushi=true; - } - else{ - var list=[]; - for(var i=0;i3) num=3; - player.actused-=num; - player.updateActCount(); - player.removeSkill('spell_sijidaifa'); - } - }, - shaman_qingwa:{ - trigger:{player:'phaseDrawBefore'}, - forced:true, - unique:true, - popup:false, - content:function(){ - trigger.cancel(); - }, - ai:{ - threaten:0.1 - } - }, - stone_jingxiang:{ - trigger:{player:'phaseDrawBefore'}, - forced:true, - unique:true, - popup:false, - content:function(){ - trigger.cancel(); - }, - ai:{ - effect:{ - target:function(card){ - if(card.name=='bingliang') return 0; - } - }, - noPhaseDelay:1 - } - }, - mage_mianyang:{ - mod:{ - cardEnabled:function(card){ - if(card.name=='sha') return false; - } - }, - ai:{ - threaten:0.1 - } - }, - priest_xundao:{ - trigger:{source:'fellow'}, - forced:true, - unique:true, - filter:function(event,player){ - return player.getLeader().countCards('h',{type:'stonecharacter'})>0; - }, - content:function(){ - player.draw(); - player.addSkill('chaofeng'); - } - }, - priest_guangyao:{ - trigger:{player:'changeHp'}, - forced:true, - unique:true, - filter:function(event){ - return event.num!=0; - }, - content:function(){ - player.draw(Math.abs(trigger.num)); - }, - }, - priest_zhufu:{ - trigger:{player:'dieBegin'}, - forced:true, - unique:true, - filter:function(event,player){ - for(var i=0;i0; - }, - content:function(){ - "step 0" - event.chooser=player.getLeader(); - event.chooser.chooseCardTarget({ - position:'e', - filterTarget:function(card,player,target){ - return player.side!=target.side; - }, - filterCard:true, - ai1:function(card){ - return 9-get.value(card); - }, - ai2:function(target){ - return get.damageEffect(target,player,player); - }, - prompt:'偷袭:弃置一张装备区内的牌并对一名敌方角色一点伤害' - }); - player.line(event.chooser); - "step 1" - if(result.bool){ - event.chooser.discard(result.cards); - event.chooser.line(result.targets[0]); - result.targets[0].damage(event.chooser); - } - } - }, - rogue_qiancang:{ - trigger:{source:'fellow'}, - forced:true, - unique:true, - filter:function(event,player){ - for(var i=0;i0; - }).ai=function(target){ - return target.countCards('he'); - }; - player.line(event.chooser); - "step 1" - if(result.bool){ - event.chooser.line(result.targets[0]); - game.delay(); - result.targets[0].discard(result.targets[0].getCards('he')); - } - } - }, - paladin_zhaochao:{ - trigger:{global:'useSkillAfter'}, - forced:true, - unique:true, - filter:function(event,player){ - return event.career&&event.player.side==player.side; - }, - content:function(){ - player.draw(2); - } - }, - paladin_buji:{ - trigger:{source:'fellow'}, - forced:true, - unique:true, - filter:function(event,player){ - for(var i=0;i1) return 'discard_card'; - return '造成伤害'; - }; - event.chooser.line(event.target); - game.delay(); - } - else{ - event.finish(); - } - "step 2" - if(result.control=='造成伤害'){ - event.target.damage(event.chooser); - } - else{ - event.target.discard(event.target.getCards('h')); - if(event.target.maxHp>2){ - event.target.loseMaxHp(event.target.maxHp-2); - } - } - } - }, - druid_yexingchengzhang:{ - trigger:{player:'phaseUseBegin'}, - forced:true, - mark:true, - intro:{ - content:'下个出牌阶段开始时获得三点额外行动值', - }, - content:function(){ - player.actused-=3; - player.updateActCount(); - player.removeSkill('druid_yexingchengzhang'); - } - }, - druid_ziyang:{ - trigger:{player:'phaseUseBegin'}, - forced:true, - mark:true, - intro:{ - content:'下个出牌阶段开始时获得四点额外行动值', - }, - content:function(){ - player.actused-=4; - player.updateActCount(); - player.removeSkill('druid_ziyang'); - } - }, - druid_chengzhang:{ - trigger:{source:'fellow'}, - forced:true, - unique:true, - content:function(){ - var target=player.getLeader(); - target.actused--; - target.updateActCount(); - }, - group:'druid_chengzhang2' - }, - druid_chengzhang2:{ - trigger:{player:'dieBegin'}, - forced:true, - unique:true, - content:function(){ - player.getLeader().addSkill('druid_chengzhang3'); - } - }, - druid_chengzhang3:{ - trigger:{global:'dieAfter'}, - forced:true, - popup:false, - filter:function(event,player){ - return event.player.hasSkill('druid_chengzhang'); - }, - content:function(){ - if(player.countCards('h')){ - game.delay(); - player.chooseToDiscard('h',true); - } - player.removeSkill('druid_chengzhang3'); - } - }, - shaman_xueju:{ - trigger:{global:'useCard'}, - forced:true, - unique:true, - filter:function(event,player){ - return get.type(event.card)=='stonecharacter'&&event.player==player.getLeader(); - }, - content:function(){ - player.draw(); - } - }, - shaman_huoxi:{ - trigger:{source:'fellow'}, - forced:true, - unique:true, - filter:function(event,player){ - for(var i=0;iplayer.actcount) return false; - if(player.storage.anyingxingtai) return false; - return true; - }, - usable:1, - prompt:function(event){ - if(event.player.hasFellowSkill('priest_hunwu')) return '令目标流失一点体力'; - return '回复一点体力'; - }, - filterTarget:function(card,player,target){ - if(player.hasFellowSkill('priest_hunwu')) return true; - return target.hpplayer.actcount) return false; - if(!player.storage.anyingxingtai) return false; - return true; - }, - usable:1, - prompt:function(event,player){ - return '造成'+get.cnNumber(_status.event.player.storage.anyingxingtai)+'点伤害'; - }, - filterTarget:true, - content:function(){ - player.actused+=2; - player.updateActCount(); - event.parent.career='priest'; - var num=1; - // if(player.hasFellowSkill('stone_shenyou')){ - // num=2; - // } - target.damage(player.storage.anyingxingtai*num); - }, - ai:{ - order:2, - result:{ - target:function(player,target){ - return get.damageEffect(target,player,target); - } - } - } - }, - _mage_skill:{ - enable:'phaseUse', - filter:function(event,player){ - if(player.career!='mage') return false; - if(player.getActCount()+2>player.actcount) return false; - return true; - }, - usable:1, - line:'fire', - filterTarget:function(card,player,target){ - return !target.career; - }, - content:function(){ - player.actused+=2; - player.updateActCount(); - target.damage('fire'); - event.parent.career='mage'; - }, - ai:{ - order:2, - result:{ - target:function(player,target){ - return get.damageEffect(target,player,target,'fire'); - } - } - } - }, - _warlock_skill:{ - enable:'phaseUse', - filter:function(event,player){ - if(player.hasSkill('stone_lianyu')) return false; - if(player.career!='warlock') return false; - if(player.getActCount()+2>player.actcount) return false; - return true; - }, - usable:1, - content:function(){ - player.actused+=2; - player.updateActCount(); - player.drawDeck(2); - event.parent.career='warlock'; - }, - ai:{ - order:0.5, - result:{ - player:1 - } - } - }, - _warlock_skillx:{ - enable:'phaseUse', - filter:function(event,player){ - if(!player.hasSkill('stone_lianyu')) return false; - if(player.career!='warlock') return false; - if(player.getActCount()+2>player.actcount) return false; - if(!player.canAddFellow()) return false; - return true; - }, - usable:1, - content:function(){ - 'step 0' - player.actused+=2; - player.updateActCount(); - event.parent.career='warlock'; - player.addFellowAuto('stone_diyuhuox'); - 'step 1' - var num=player.storage.stone_lianyu; - if(num&&get.itemtype(result)=='player'){ - result.maxHp+=num; - result.hp+=num; - result.directgain(get.cards(num)); - } - }, - ai:{ - order:0.5, - result:{ - player:1 - } - } - }, - _hunter_skill:{ - enable:'phaseUse', - filter:function(event,player){ - if(player.career!='hunter') return false; - if(player.getActCount()+2>player.actcount) return false; - return true; - }, - usable:1, - prompt:function(event){ - if(event.player.hasFellowSkill('hunter_juji')) return '造成一点伤害'; - return '对敌方主将造成一点伤害'; - }, - selectTarget:function(){ - if(_status.event.player.hasFellowSkill('hunter_juji')) return 1; - return -1; - }, - filterTarget:function(card,player,target){ - if(player.hasFellowSkill('hunter_juji')) return target!=player; - return target.career&&target.side!=player.side; - }, - content:function(){ - player.actused+=2; - player.updateActCount(); - target.damage(); - event.parent.career='hunter'; - }, - ai:{ - order:2, - result:{ - target:function(player,target){ - return get.damageEffect(target,player,target); - } - } - } - }, - _warrior_skill:{ - enable:'phaseUse', - filter:function(event,player){ - if(player.hujia>=3) return false; - if(player.career!='warrior') return false; - if(player.getActCount()+2>player.actcount) return false; - return true; - }, - usable:1, - content:function(){ - player.actused+=2; - player.updateActCount(); - player.changeHujia(1); - event.parent.career='warrior'; - }, - ai:{ - order:2, - result:{ - player:1 - } - } - }, - _rogue_skill:{ - enable:'phaseUse', - filter:function(event,player){ - if(player.career!='rogue') return false; - if(player.getActCount()+2>player.actcount) return false; - return true; - }, - usable:1, - content:function(){ - 'step 0' - player.actused+=2; - player.updateActCount(); - var equip1=get.cardPile(function(card){ - return get.subtype(card)=='equip1'; - }); - if(!equip1){ - equip1=game.createCard('qingnang'); - } - var equip4=get.cardPile(function(card){ - return get.type(card)=='equip'&&get.subtype(card)!='equip1'; - }); - if(!equip4){ - equip4=game.createCard('chitu'); - } - player.$gain(equip1); - setTimeout(function(){ - player.$gain(equip4); - },250); - game.delay(); - event.equip1=equip1; - event.equip4=equip4; - 'step 1' - player.equip(event.equip1); - game.delay(0.5); - 'step 2' - player.equip(event.equip4); - event.parent.career='rogue'; - }, - ai:{ - order:function(skill,player){ - if(!player.getEquip(1)&&player.countCards('e')<2){ - if(player.countCards('h','sha')&&player.getActCount()+3<=player.actcount){ - return 4; - } - return 0.1; - } - return 0; - }, - result:{ - player:function(player){ - if(player.countCards('e')<=2) return 1; - return 0; - } - } - } - }, - _druid_skill:{ - enable:'phaseUse', - filter:function(event,player){ - if(player.career!='druid') return false; - if(player.getActCount()+2>player.actcount) return false; - return lib.filter.cardEnabled({name:'sha'},player); - }, - usable:1, - filterTarget:function(card,player,target){ - return player.canUse('sha',target,null,false); - }, - direct:true, - content:function(){ - player.actused+=2; - player.updateActCount(); - player.useCard({name:'sha'},targets,'_druid_skill',false).animate=false; - event.parent.career='druid'; - }, - ai:{ - order:function(){ - return get.order({name:'sha'})-0.1; - }, - result:{ - target:function(player,target){ - return get.effect(target,{name:'sha'},player,target); - } - } - } - }, - shaman_tuteng:{ - trigger:{player:'phaseDrawBefore'}, - forced:true, - popup:false, - content:function(){ - trigger.cancel(); - }, - ai:{ - effect:{ - target:function(card){ - if(card.name=='bingliang') return 0; - } - }, - noPhaseDelay:1 - } - }, - shaman_zhiliao:{ - trigger:{player:'phaseEnd'}, - forced:true, - direct:true, - content:function(){ - 'step 0' - var players=get.players(); - var targets=[]; - for(var i=0;iplayer.actcount) return false; - return true; - }, - usable:1, - content:function(){ - player.actused+=2; - player.updateActCount(); - var name='stone_tuteng'+Math.ceil(Math.random()*4); - player.addFellowAuto(name); - event.parent.career='shaman'; - }, - ai:{ - order:2, - result:{ - player:1 - } - } - }, - _paladin_skill:{ - enable:'phaseUse', - filter:function(event,player){ - if(player.career!='paladin') return false; - if(!player.canAddFellow()) return false; - if(player.getActCount()+2>player.actcount) return false; - return true; - }, - usable:1, - content:function(){ - player.actused+=2; - player.updateActCount(); - player.addFellowAuto('stone_xinbing'); - event.parent.career='paladin'; - }, - ai:{ - order:2, - result:{ - player:1 - } - } - }, - chaofeng:{ - mark:true, - intro:{ - content:'已获得嘲讽' - } - }, - _chaofeng:{ - mod:{ - targetEnabled:function(card,player,target){ - if(target.hasSkill('chaofeng')) return; - if(card.name=='sha'){ - for(var i=0;i3) num=3; + player.actused-=num; + player.updateActCount(); + player.removeSkill('spell_sijidaifa'); + } + }, + shaman_qingwa:{ + trigger:{player:'phaseDrawBefore'}, + forced:true, + unique:true, + popup:false, + content:function(){ + trigger.cancel(); + }, + ai:{ + threaten:0.1 + } + }, + stone_jingxiang:{ + trigger:{player:'phaseDrawBefore'}, + forced:true, + unique:true, + popup:false, + content:function(){ + trigger.cancel(); + }, + ai:{ + effect:{ + target:function(card){ + if(card.name=='bingliang') return 0; + } + }, + noPhaseDelay:1 + } + }, + mage_mianyang:{ + mod:{ + cardEnabled:function(card){ + if(card.name=='sha') return false; + } + }, + ai:{ + threaten:0.1 + } + }, + priest_xundao:{ + trigger:{source:'fellow'}, + forced:true, + unique:true, + filter:function(event,player){ + return player.getLeader().countCards('h',{type:'stonecharacter'})>0; + }, + content:function(){ + player.draw(); + player.addSkill('chaofeng'); + } + }, + priest_guangyao:{ + trigger:{player:'changeHp'}, + forced:true, + unique:true, + filter:function(event){ + return event.num!=0; + }, + content:function(){ + player.draw(Math.abs(trigger.num)); + }, + }, + priest_zhufu:{ + trigger:{player:'dieBegin'}, + forced:true, + unique:true, + filter:function(event,player){ + for(var i=0;i0; + }, + content:function(){ + "step 0" + event.chooser=player.getLeader(); + event.chooser.chooseCardTarget({ + position:'e', + filterTarget:function(card,player,target){ + return player.side!=target.side; + }, + filterCard:true, + ai1:function(card){ + return 9-get.value(card); + }, + ai2:function(target){ + return get.damageEffect(target,player,player); + }, + prompt:'偷袭:弃置一张装备区内的牌并对一名敌方角色一点伤害' + }); + player.line(event.chooser); + "step 1" + if(result.bool){ + event.chooser.discard(result.cards); + event.chooser.line(result.targets[0]); + result.targets[0].damage(event.chooser); + } + } + }, + rogue_qiancang:{ + trigger:{source:'fellow'}, + forced:true, + unique:true, + filter:function(event,player){ + for(var i=0;i0; + }).ai=function(target){ + return target.countCards('he'); + }; + player.line(event.chooser); + "step 1" + if(result.bool){ + event.chooser.line(result.targets[0]); + game.delay(); + result.targets[0].discard(result.targets[0].getCards('he')); + } + } + }, + paladin_zhaochao:{ + trigger:{global:'useSkillAfter'}, + forced:true, + unique:true, + filter:function(event,player){ + return event.career&&event.player.side==player.side; + }, + content:function(){ + player.draw(2); + } + }, + paladin_buji:{ + trigger:{source:'fellow'}, + forced:true, + unique:true, + filter:function(event,player){ + for(var i=0;i1) return 'discard_card'; + return '造成伤害'; + }; + event.chooser.line(event.target); + game.delay(); + } + else{ + event.finish(); + } + "step 2" + if(result.control=='造成伤害'){ + event.target.damage(event.chooser); + } + else{ + event.target.discard(event.target.getCards('h')); + if(event.target.maxHp>2){ + event.target.loseMaxHp(event.target.maxHp-2); + } + } + } + }, + druid_yexingchengzhang:{ + trigger:{player:'phaseUseBegin'}, + forced:true, + mark:true, + intro:{ + content:'下个出牌阶段开始时获得三点额外行动值', + }, + content:function(){ + player.actused-=3; + player.updateActCount(); + player.removeSkill('druid_yexingchengzhang'); + } + }, + druid_ziyang:{ + trigger:{player:'phaseUseBegin'}, + forced:true, + mark:true, + intro:{ + content:'下个出牌阶段开始时获得四点额外行动值', + }, + content:function(){ + player.actused-=4; + player.updateActCount(); + player.removeSkill('druid_ziyang'); + } + }, + druid_chengzhang:{ + trigger:{source:'fellow'}, + forced:true, + unique:true, + content:function(){ + var target=player.getLeader(); + target.actused--; + target.updateActCount(); + }, + group:'druid_chengzhang2' + }, + druid_chengzhang2:{ + trigger:{player:'dieBegin'}, + forced:true, + unique:true, + content:function(){ + player.getLeader().addSkill('druid_chengzhang3'); + } + }, + druid_chengzhang3:{ + trigger:{global:'dieAfter'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.player.hasSkill('druid_chengzhang'); + }, + content:function(){ + if(player.countCards('h')){ + game.delay(); + player.chooseToDiscard('h',true); + } + player.removeSkill('druid_chengzhang3'); + } + }, + shaman_xueju:{ + trigger:{global:'useCard'}, + forced:true, + unique:true, + filter:function(event,player){ + return get.type(event.card)=='stonecharacter'&&event.player==player.getLeader(); + }, + content:function(){ + player.draw(); + } + }, + shaman_huoxi:{ + trigger:{source:'fellow'}, + forced:true, + unique:true, + filter:function(event,player){ + for(var i=0;iplayer.actcount) return false; + if(player.storage.anyingxingtai) return false; + return true; + }, + usable:1, + prompt:function(event){ + if(event.player.hasFellowSkill('priest_hunwu')) return '令目标流失一点体力'; + return '回复一点体力'; + }, + filterTarget:function(card,player,target){ + if(player.hasFellowSkill('priest_hunwu')) return true; + return target.hpplayer.actcount) return false; + if(!player.storage.anyingxingtai) return false; + return true; + }, + usable:1, + prompt:function(event,player){ + return '造成'+get.cnNumber(_status.event.player.storage.anyingxingtai)+'点伤害'; + }, + filterTarget:true, + content:function(){ + player.actused+=2; + player.updateActCount(); + event.parent.career='priest'; + var num=1; + // if(player.hasFellowSkill('stone_shenyou')){ + // num=2; + // } + target.damage(player.storage.anyingxingtai*num); + }, + ai:{ + order:2, + result:{ + target:function(player,target){ + return get.damageEffect(target,player,target); + } + } + } + }, + _mage_skill:{ + enable:'phaseUse', + filter:function(event,player){ + if(player.career!='mage') return false; + if(player.getActCount()+2>player.actcount) return false; + return true; + }, + usable:1, + line:'fire', + filterTarget:function(card,player,target){ + return !target.career; + }, + content:function(){ + player.actused+=2; + player.updateActCount(); + target.damage('fire'); + event.parent.career='mage'; + }, + ai:{ + order:2, + result:{ + target:function(player,target){ + return get.damageEffect(target,player,target,'fire'); + } + } + } + }, + _warlock_skill:{ + enable:'phaseUse', + filter:function(event,player){ + if(player.hasSkill('stone_lianyu')) return false; + if(player.career!='warlock') return false; + if(player.getActCount()+2>player.actcount) return false; + return true; + }, + usable:1, + content:function(){ + player.actused+=2; + player.updateActCount(); + player.drawDeck(2); + event.parent.career='warlock'; + }, + ai:{ + order:0.5, + result:{ + player:1 + } + } + }, + _warlock_skillx:{ + enable:'phaseUse', + filter:function(event,player){ + if(!player.hasSkill('stone_lianyu')) return false; + if(player.career!='warlock') return false; + if(player.getActCount()+2>player.actcount) return false; + if(!player.canAddFellow()) return false; + return true; + }, + usable:1, + content:function(){ + 'step 0' + player.actused+=2; + player.updateActCount(); + event.parent.career='warlock'; + player.addFellowAuto('stone_diyuhuox'); + 'step 1' + var num=player.storage.stone_lianyu; + if(num&&get.itemtype(result)=='player'){ + result.maxHp+=num; + result.hp+=num; + result.directgain(get.cards(num)); + } + }, + ai:{ + order:0.5, + result:{ + player:1 + } + } + }, + _hunter_skill:{ + enable:'phaseUse', + filter:function(event,player){ + if(player.career!='hunter') return false; + if(player.getActCount()+2>player.actcount) return false; + return true; + }, + usable:1, + prompt:function(event){ + if(event.player.hasFellowSkill('hunter_juji')) return '造成一点伤害'; + return '对敌方主将造成一点伤害'; + }, + selectTarget:function(){ + if(_status.event.player.hasFellowSkill('hunter_juji')) return 1; + return -1; + }, + filterTarget:function(card,player,target){ + if(player.hasFellowSkill('hunter_juji')) return target!=player; + return target.career&&target.side!=player.side; + }, + content:function(){ + player.actused+=2; + player.updateActCount(); + target.damage(); + event.parent.career='hunter'; + }, + ai:{ + order:2, + result:{ + target:function(player,target){ + return get.damageEffect(target,player,target); + } + } + } + }, + _warrior_skill:{ + enable:'phaseUse', + filter:function(event,player){ + if(player.hujia>=3) return false; + if(player.career!='warrior') return false; + if(player.getActCount()+2>player.actcount) return false; + return true; + }, + usable:1, + content:function(){ + player.actused+=2; + player.updateActCount(); + player.changeHujia(1); + event.parent.career='warrior'; + }, + ai:{ + order:2, + result:{ + player:1 + } + } + }, + _rogue_skill:{ + enable:'phaseUse', + filter:function(event,player){ + if(player.career!='rogue') return false; + if(player.getActCount()+2>player.actcount) return false; + return true; + }, + usable:1, + content:function(){ + 'step 0' + player.actused+=2; + player.updateActCount(); + var equip1=get.cardPile(function(card){ + return get.subtype(card)=='equip1'; + }); + if(!equip1){ + equip1=game.createCard('qingnang'); + } + var equip4=get.cardPile(function(card){ + return get.type(card)=='equip'&&get.subtype(card)!='equip1'; + }); + if(!equip4){ + equip4=game.createCard('chitu'); + } + player.$gain(equip1); + setTimeout(function(){ + player.$gain(equip4); + },250); + game.delay(); + event.equip1=equip1; + event.equip4=equip4; + 'step 1' + player.equip(event.equip1); + game.delay(0.5); + 'step 2' + player.equip(event.equip4); + event.parent.career='rogue'; + }, + ai:{ + order:function(skill,player){ + if(!player.getEquip(1)&&player.countCards('e')<2){ + if(player.countCards('h','sha')&&player.getActCount()+3<=player.actcount){ + return 4; + } + return 0.1; + } + return 0; + }, + result:{ + player:function(player){ + if(player.countCards('e')<=2) return 1; + return 0; + } + } + } + }, + _druid_skill:{ + enable:'phaseUse', + filter:function(event,player){ + if(player.career!='druid') return false; + if(player.getActCount()+2>player.actcount) return false; + return lib.filter.cardEnabled({name:'sha'},player); + }, + usable:1, + filterTarget:function(card,player,target){ + return player.canUse('sha',target,null,false); + }, + direct:true, + content:function(){ + player.actused+=2; + player.updateActCount(); + player.useCard({name:'sha'},targets,'_druid_skill',false).animate=false; + event.parent.career='druid'; + }, + ai:{ + order:function(){ + return get.order({name:'sha'})-0.1; + }, + result:{ + target:function(player,target){ + return get.effect(target,{name:'sha'},player,target); + } + } + } + }, + shaman_tuteng:{ + trigger:{player:'phaseDrawBefore'}, + forced:true, + popup:false, + content:function(){ + trigger.cancel(); + }, + ai:{ + effect:{ + target:function(card){ + if(card.name=='bingliang') return 0; + } + }, + noPhaseDelay:1 + } + }, + shaman_zhiliao:{ + trigger:{player:'phaseEnd'}, + forced:true, + direct:true, + content:function(){ + 'step 0' + var players=get.players(); + var targets=[]; + for(var i=0;iplayer.actcount) return false; + return true; + }, + usable:1, + content:function(){ + player.actused+=2; + player.updateActCount(); + var name='stone_tuteng'+Math.ceil(Math.random()*4); + player.addFellowAuto(name); + event.parent.career='shaman'; + }, + ai:{ + order:2, + result:{ + player:1 + } + } + }, + _paladin_skill:{ + enable:'phaseUse', + filter:function(event,player){ + if(player.career!='paladin') return false; + if(!player.canAddFellow()) return false; + if(player.getActCount()+2>player.actcount) return false; + return true; + }, + usable:1, + content:function(){ + player.actused+=2; + player.updateActCount(); + player.addFellowAuto('stone_xinbing'); + event.parent.career='paladin'; + }, + ai:{ + order:2, + result:{ + player:1 + } + } + }, + chaofeng:{ + mark:true, + intro:{ + content:'已获得嘲讽' + } + }, + _chaofeng:{ + mod:{ + targetEnabled:function(card,player,target){ + if(target.hasSkill('chaofeng')) return; + if(card.name=='sha'){ + for(var i=0;i0; - }).ai=function(target){ - return target.countCards('he'); - }; - player.line(event.chooser); - "step 1" - if(result.bool){ - event.chooser.line(result.targets[0]); - game.delay(); - result.targets[0].discard(result.targets[0].getCards('he')); - } - } - }, - stone_huoqiangshou1:{ - trigger:{source:'fellow'}, - forced:true, - unique:true, - filter:function(event,player){ - for(var i=0;i0; - }, - content:function(){ - var enemy=player.getEnemy(); - var es=enemy.getCards('e'); - if(es.length){ - player.getLeader().line(enemy); - game.delay(); - enemy.discard(es.randomGet()); - // game.log(get.translation(event.enemy)+'将'+get.translation(es)+'收入手牌') - } - } - }, - stone_yaosaishouwei1:{ - trigger:{source:'fellow'}, - forced:true, - unique:true, - content:function(){ - player.getLeader().addTempSkill('stone_yaosaishouwei2'); - } - }, - stone_yaosaishouwei2:{ - mod:{ - maxHandcard:function(player,num){ - return num+2; - } - }, - }, - stone_famingjia1:{ - trigger:{source:'fellow'}, - forced:true, - unique:true, - content:function(){ - player.getLeader().draw(2); - } - }, - stone_chilundashi1:{ - trigger:{source:'fellow'}, - forced:true, - unique:true, - content:function(){ - player.addSkill('stone_chilundashi2'); - } - }, - stone_chilundashi2:{ - trigger:{player:'phaseDrawBegin'}, - forced:true, - content:function(){ - trigger.num++; - player.removeSkill('stone_chilundashi2'); - } - }, - stone_hanguangzhizhe1:{ - trigger:{source:'fellow'}, - forced:true, - unique:true, - content:function(){ - var targets=[]; - for(var i=0;i0&&num>=player.getLeader().countFellow(); - }, - content:function(){ - var list=[]; - for(var i=0;i=player.getLeader().countFellow(); - }, - content:function(){ - "step 0" - event.chooser=player.getEnemy(); - event.chooser.chooseTarget('毒噬:选择己方一名随从令其死亡',function(card,playerx,target){ - return target.isMin()&&target.side!=player.side; - },true).ai=function(target){ - return -target.hp; - }; - player.line(event.chooser); - "step 1" - if(result.bool){ - event.chooser.line(result.targets[0]); - game.delay(); - result.targets[0].die(); - } - } - }, - stone_mafengzhuru1:{ - trigger:{player:'dieBegin'}, - forced:true, - filter:function(event){ - return event.source&&event.source.isMin(); - }, - content:function(){ - trigger.source.addSkill('stone_mafengzhuru2'); - }, - }, - stone_mafengzhuru2:{ - trigger:{global:'dieAfter'}, - forced:true, - popup:false, - unique:true, - filter:function(event,player){ - return player.hasSkill('stone_mafengzhuru2'); - }, - content:function(){ - player.loseHp(); - player.removeSkill('stone_mafengzhuru2'); - } - }, - stone_zhufu:{ - trigger:{global:'phaseEnd'}, - forced:true, - unique:true, - filter:function(event,player){ - if(event.player!=player.getLeader()) return false; - for(var i=0;iplayer.actcount) return false; - } - }, - trigger:{player:'phaseBegin'}, - forced:true, - popup:false, - priority:15, - filter:function(event,player){ - return !player.isMin(); - }, - content:function(){ - player.actused=0; - if(player.side){ - player.actcount=player.getEnemy().actcount+1; - } - else{ - player.actcount=player.getEnemy().actcount; - if(!_status.actcoin){ - _status.actcoin=true; - player.actused--; - } - } - if(player.actcount>6){ - if(get.config('mana_mode')=='inc'){ - player.actcount=6; - } - else{ - player.actcount-=4; - } - } - player.updateActCount(); - player.getEnemy().updateActCount('outphase'); - } - }, - _actcount2:{ - trigger:{player:'useCard'}, - forced:true, - popup:false, - filter:function(event,player){ - return !player.isMin()&&!event.noActCount&&_status.currentPhase==player; - }, - content:function(){ - var stoneact=get.info(trigger.card).stoneact; - if(typeof stoneact==='number'){ - player.actused+=stoneact-1; - } - player.updateActCount(); - } - }, - stonesha:{ - unique:true, - enable:['chooseToUse','chooseToRespond'], - filterCard:{type:'equip'}, - viewAs:{name:'sha'}, - nopop:true, - check:function(){return 1}, - filter:function(event,player){ - return player.countCards('h',{type:'equip'})>0; - }, - viewAsFilter:function(player){ - return player.countCards('h',{type:'equip'})>0; - }, - ai:{ - skillTagFilter:function(player){ - return player.countCards('h',{type:'equip'})>0; - }, - respondSha:true, - order:4, - useful:-1, - value:-1 - } - }, - stoneshan:{ - unique:true, - enable:['chooseToRespond'], - viewAs:{name:'shan'}, - filterCard:{type:['stonecharacter','stonecard']}, - mod:{ - cardEnabled:function(card){ - if(get.type(card)=='stonecard') return false; - }, - cardSavable:function(card){ - if(get.type(card)=='stonecard') return false; - }, - }, - nopop:true, - check:function(){return 1}, - filter:function(event,player){ - return player.countCards('h',{type:['stonecharacter','stonecard']})>0; - }, - viewAsFilter:function(player){ - return player.countCards('h',{type:['stonecharacter','stonecard']})>0; - }, - ai:{ - skillTagFilter:function(player){ - return player.countCards('h',{type:['stonecharacter','stonecard']})>0; - }, - respondShan:true, - order:4, - useful:-1, - value:-1 - } - }, - stonedraw:{ - trigger:{player:'phaseDrawBegin'}, - forced:true, - popup:false, - content:function(){ - trigger.num--; - }, - ai:{ - effect:{ - target:function(card){ - if(card.name=='bingliang'){ - return 0.6; - } - } - } - } - }, - _stonerage1:{ - trigger:{player:'damageEnd'}, - forced:true, - popup:false, - content:function(){ - if(player.isMin()){ - player.changeRage(3*trigger.num); - } - else{ - player.changeRage(6*trigger.num); - } - } - }, - _stonerage2:{ - trigger:{player:'dieBegin'}, - forced:true, - popup:false, - content:function(){ - if(player.isMin()){ - player.changeRage(10); - } - else{ - player.changeRage(20); - } - } - }, - _stonerage3:{ - trigger:{player:'phaseAfter'}, - forced:true, - popup:false, - filter:function(event,player){ - return !player.isMin()&&player.getEnemy().countFellow()>player.countFellow(); - }, - content:function(){ - player.changeRage((player.getEnemy().countFellow()-player.countFellow())*10); - } - }, - _stonerage_add:{ - trigger:{player:'phaseBegin'}, - direct:true, - priority:10, - filter:function(event,player){ - if(!player.canAddFellow()){ - return false; - } - if(player==game.me){ - return _status.friendRage>=100; - } - else if(player==game.me.getEnemy()){ - return _status.enemyRage>=100; - } - return false; - }, - content:function(){ - 'step 0' - var list=[]; - var list2=[]; - for(var i in lib.character){ - if(lib.character[i][4].contains('stonelegend_'+player.career)){ - list.push(i); - } - else if(lib.character[i][4].contains('stonelegend')){ - list2.push(i); - } - } - var dialog=ui.create.dialog('hidden','召唤一名传说随从','
消耗100怒气值和4点行动值
',[list.concat(list2),'character']); - var heilong=false; - var dc=player.getEnemy().countFellow()-player.countFellow(); - if(dc>2){ - heilong=true; - } - else if(dc==2){ - if(player.getEnemy().countFellow()>=3){ - heilong=Math.random()<0.5; - } - else if(player.actcount-player.getActCount()<=0){ - heilong=true; - } - else{ - dc=0; - for(var i=0;i5){ - heilong=true; - } - else{ - heilong=Math.random()<0.3; - } - } - } - var honglong=false; - if(!heilong){ - var num=0; - for(var i=0;i6){ - honglong=true; - } - else if(player.maxHp-player.hp>=3&&player.hp<=2){ - honglong=true; - } - } - player.chooseButton(dialog).ai=function(button){ - if(button.link=='stone_siwangzhiyi'){ - if(heilong) return 3; - return 0; - } - if(button.link=='stone_alaikesita'){ - if(honglong) return 2; - return 0; - } - return Math.random(); - } - 'step 1' - if(result.bool){ - player.$skill(get.translation(result.links[0]),'legend','metal'); - game.delay(2); - event.addname=result.links[0]; - player.changeRage(-100); - player.actused+=4; - player.updateActCount(); - } - else{ - event.finish(); - } - 'step 2' - if(event.addname){ - if(event.addname=='stone_jialakesi'){ - if(player.name=='stone_jialakesix'){ - player.hp=player.maxHp; - player.update(); - player.actused-=4; - player.updateActCount(); - player.storage.stone_lianyu++; - } - else{ - if(player.name2){ - player.storage.stone_lianyu=1; - } - else{ - player.storage.stone_lianyu=0; - } - player.init('stone_jialakesix'); - game.addVideo('reinit2',player,'stone_jialakesix'); - } - player.syncStorage('stone_lianyu'); - var card=game.createCard('stone_jialakesi_stonecharacter'); - card.node.info.remove(); - card.node.addinfo.remove(); - player.$give(card,player); - } - else{ - player.addFellowAuto(event.addname); - } - } - } - } - }, - translate:{ - shaman:'萨满', - mage:'法师', - priest:'牧师', - warrior:'战士', - warlock:'术士', - knight:'死亡骑士', - rogue:'潜行者', - paladin:'圣骑士', - hunter:'猎人', - druid:'德鲁伊', + } + }, + stone_zhucangzhe1:{ + trigger:{source:'fellow'}, + forced:true, + unique:true, + filter:function(event,player){ + for(var i=0;i0; + }).ai=function(target){ + return target.countCards('he'); + }; + player.line(event.chooser); + "step 1" + if(result.bool){ + event.chooser.line(result.targets[0]); + game.delay(); + result.targets[0].discard(result.targets[0].getCards('he')); + } + } + }, + stone_huoqiangshou1:{ + trigger:{source:'fellow'}, + forced:true, + unique:true, + filter:function(event,player){ + for(var i=0;i0; + }, + content:function(){ + var enemy=player.getEnemy(); + var es=enemy.getCards('e'); + if(es.length){ + player.getLeader().line(enemy); + game.delay(); + enemy.discard(es.randomGet()); + // game.log(get.translation(event.enemy)+'将'+get.translation(es)+'收入手牌') + } + } + }, + stone_yaosaishouwei1:{ + trigger:{source:'fellow'}, + forced:true, + unique:true, + content:function(){ + player.getLeader().addTempSkill('stone_yaosaishouwei2'); + } + }, + stone_yaosaishouwei2:{ + mod:{ + maxHandcard:function(player,num){ + return num+2; + } + }, + }, + stone_famingjia1:{ + trigger:{source:'fellow'}, + forced:true, + unique:true, + content:function(){ + player.getLeader().draw(2); + } + }, + stone_chilundashi1:{ + trigger:{source:'fellow'}, + forced:true, + unique:true, + content:function(){ + player.addSkill('stone_chilundashi2'); + } + }, + stone_chilundashi2:{ + trigger:{player:'phaseDrawBegin'}, + forced:true, + content:function(){ + trigger.num++; + player.removeSkill('stone_chilundashi2'); + } + }, + stone_hanguangzhizhe1:{ + trigger:{source:'fellow'}, + forced:true, + unique:true, + content:function(){ + var targets=[]; + for(var i=0;i0&&num>=player.getLeader().countFellow(); + }, + content:function(){ + var list=[]; + for(var i=0;i=player.getLeader().countFellow(); + }, + content:function(){ + "step 0" + event.chooser=player.getEnemy(); + event.chooser.chooseTarget('毒噬:选择己方一名随从令其死亡',function(card,playerx,target){ + return target.isMin()&&target.side!=player.side; + },true).ai=function(target){ + return -target.hp; + }; + player.line(event.chooser); + "step 1" + if(result.bool){ + event.chooser.line(result.targets[0]); + game.delay(); + result.targets[0].die(); + } + } + }, + stone_mafengzhuru1:{ + trigger:{player:'dieBegin'}, + forced:true, + filter:function(event){ + return event.source&&event.source.isMin(); + }, + content:function(){ + trigger.source.addSkill('stone_mafengzhuru2'); + }, + }, + stone_mafengzhuru2:{ + trigger:{global:'dieAfter'}, + forced:true, + popup:false, + unique:true, + filter:function(event,player){ + return player.hasSkill('stone_mafengzhuru2'); + }, + content:function(){ + player.loseHp(); + player.removeSkill('stone_mafengzhuru2'); + } + }, + stone_zhufu:{ + trigger:{global:'phaseEnd'}, + forced:true, + unique:true, + filter:function(event,player){ + if(event.player!=player.getLeader()) return false; + for(var i=0;iplayer.actcount) return false; + } + }, + trigger:{player:'phaseBegin'}, + forced:true, + popup:false, + priority:15, + filter:function(event,player){ + return !player.isMin(); + }, + content:function(){ + player.actused=0; + if(player.side){ + player.actcount=player.getEnemy().actcount+1; + } + else{ + player.actcount=player.getEnemy().actcount; + if(!_status.actcoin){ + _status.actcoin=true; + player.actused--; + } + } + if(player.actcount>6){ + if(get.config('mana_mode')=='inc'){ + player.actcount=6; + } + else{ + player.actcount-=4; + } + } + player.updateActCount(); + player.getEnemy().updateActCount('outphase'); + } + }, + _actcount2:{ + trigger:{player:'useCard'}, + forced:true, + popup:false, + filter:function(event,player){ + return !player.isMin()&&!event.noActCount&&_status.currentPhase==player; + }, + content:function(){ + var stoneact=get.info(trigger.card).stoneact; + if(typeof stoneact==='number'){ + player.actused+=stoneact-1; + } + player.updateActCount(); + } + }, + stonesha:{ + unique:true, + enable:['chooseToUse','chooseToRespond'], + filterCard:{type:'equip'}, + viewAs:{name:'sha'}, + nopop:true, + check:function(){return 1}, + filter:function(event,player){ + return player.countCards('h',{type:'equip'})>0; + }, + viewAsFilter:function(player){ + return player.countCards('h',{type:'equip'})>0; + }, + ai:{ + skillTagFilter:function(player){ + return player.countCards('h',{type:'equip'})>0; + }, + respondSha:true, + order:4, + useful:-1, + value:-1 + } + }, + stoneshan:{ + unique:true, + enable:['chooseToRespond'], + viewAs:{name:'shan'}, + filterCard:{type:['stonecharacter','stonecard']}, + mod:{ + cardEnabled:function(card){ + if(get.type(card)=='stonecard') return false; + }, + cardSavable:function(card){ + if(get.type(card)=='stonecard') return false; + }, + }, + nopop:true, + check:function(){return 1}, + filter:function(event,player){ + return player.countCards('h',{type:['stonecharacter','stonecard']})>0; + }, + viewAsFilter:function(player){ + return player.countCards('h',{type:['stonecharacter','stonecard']})>0; + }, + ai:{ + skillTagFilter:function(player){ + return player.countCards('h',{type:['stonecharacter','stonecard']})>0; + }, + respondShan:true, + order:4, + useful:-1, + value:-1 + } + }, + stonedraw:{ + trigger:{player:'phaseDrawBegin'}, + forced:true, + popup:false, + content:function(){ + trigger.num--; + }, + ai:{ + effect:{ + target:function(card){ + if(card.name=='bingliang'){ + return 0.6; + } + } + } + } + }, + _stonerage1:{ + trigger:{player:'damageEnd'}, + forced:true, + popup:false, + content:function(){ + if(player.isMin()){ + player.changeRage(3*trigger.num); + } + else{ + player.changeRage(6*trigger.num); + } + } + }, + _stonerage2:{ + trigger:{player:'dieBegin'}, + forced:true, + popup:false, + content:function(){ + if(player.isMin()){ + player.changeRage(10); + } + else{ + player.changeRage(20); + } + } + }, + _stonerage3:{ + trigger:{player:'phaseAfter'}, + forced:true, + popup:false, + filter:function(event,player){ + return !player.isMin()&&player.getEnemy().countFellow()>player.countFellow(); + }, + content:function(){ + player.changeRage((player.getEnemy().countFellow()-player.countFellow())*10); + } + }, + _stonerage_add:{ + trigger:{player:'phaseBegin'}, + direct:true, + priority:10, + filter:function(event,player){ + if(!player.canAddFellow()){ + return false; + } + if(player==game.me){ + return _status.friendRage>=100; + } + else if(player==game.me.getEnemy()){ + return _status.enemyRage>=100; + } + return false; + }, + content:function(){ + 'step 0' + var list=[]; + var list2=[]; + for(var i in lib.character){ + if(lib.character[i][4].contains('stonelegend_'+player.career)){ + list.push(i); + } + else if(lib.character[i][4].contains('stonelegend')){ + list2.push(i); + } + } + var dialog=ui.create.dialog('hidden','召唤一名传说随从','
消耗100怒气值和4点行动值
',[list.concat(list2),'character']); + var heilong=false; + var dc=player.getEnemy().countFellow()-player.countFellow(); + if(dc>2){ + heilong=true; + } + else if(dc==2){ + if(player.getEnemy().countFellow()>=3){ + heilong=Math.random()<0.5; + } + else if(player.actcount-player.getActCount()<=0){ + heilong=true; + } + else{ + dc=0; + for(var i=0;i5){ + heilong=true; + } + else{ + heilong=Math.random()<0.3; + } + } + } + var honglong=false; + if(!heilong){ + var num=0; + for(var i=0;i6){ + honglong=true; + } + else if(player.maxHp-player.hp>=3&&player.hp<=2){ + honglong=true; + } + } + player.chooseButton(dialog).ai=function(button){ + if(button.link=='stone_siwangzhiyi'){ + if(heilong) return 3; + return 0; + } + if(button.link=='stone_alaikesita'){ + if(honglong) return 2; + return 0; + } + return Math.random(); + } + 'step 1' + if(result.bool){ + player.$skill(get.translation(result.links[0]),'legend','metal'); + game.delay(2); + event.addname=result.links[0]; + player.changeRage(-100); + player.actused+=4; + player.updateActCount(); + } + else{ + event.finish(); + } + 'step 2' + if(event.addname){ + if(event.addname=='stone_jialakesi'){ + if(player.name=='stone_jialakesix'){ + player.hp=player.maxHp; + player.update(); + player.actused-=4; + player.updateActCount(); + player.storage.stone_lianyu++; + } + else{ + if(player.name2){ + player.storage.stone_lianyu=1; + } + else{ + player.storage.stone_lianyu=0; + } + player.init('stone_jialakesix'); + game.addVideo('reinit2',player,'stone_jialakesix'); + } + player.syncStorage('stone_lianyu'); + var card=game.createCard('stone_jialakesi_stonecharacter'); + card.node.info.remove(); + card.node.addinfo.remove(); + player.$give(card,player); + } + else{ + player.addFellowAuto(event.addname); + } + } + } + } + }, + translate:{ + shaman:'萨满', + mage:'法师', + priest:'牧师', + warrior:'战士', + warlock:'术士', + knight:'死亡骑士', + rogue:'潜行者', + paladin:'圣骑士', + hunter:'猎人', + druid:'德鲁伊', - stone_siwangzhiyi:'死亡之翼', - stone_alaikesita:'阿莱克萨', - stone_yisela:'伊瑟拉', - stone_nuoziduomu:'诺兹多姆', - stone_maligousi:'玛里苟斯', - stone_aolajier:'奥拉基尔', - stone_andongni:'安东尼', - stone_jialakesi:'加拉克斯', - stone_jialakesix:'加拉克斯', - stone_kelushi:'克鲁什', - stone_geluomashi:'格罗玛什', - stone_aidewen:'艾德温', - stone_sainaliusi:'塞纳留斯', - stone_fuding:'弗丁', - stone_weilun:'维纶', + stone_siwangzhiyi:'死亡之翼', + stone_alaikesita:'阿莱克萨', + stone_yisela:'伊瑟拉', + stone_nuoziduomu:'诺兹多姆', + stone_maligousi:'玛里苟斯', + stone_aolajier:'奥拉基尔', + stone_andongni:'安东尼', + stone_jialakesi:'加拉克斯', + stone_jialakesix:'加拉克斯', + stone_kelushi:'克鲁什', + stone_geluomashi:'格罗玛什', + stone_aidewen:'艾德温', + stone_sainaliusi:'塞纳留斯', + stone_fuding:'弗丁', + stone_weilun:'维纶', - stone_fushi:'缚誓', - stone_fushi_info:'你出场时,为所有友方角色回复所有体力值', - stone_mieshi:'灭世', - stone_mieshi_info:'你出场时,对所有其他随从造成两点伤害,然后弃置己方主将的所有手牌', - stone_shixu:'时序', - stone_shixu_info:'你出场的回合内,己方主将获得4点行动值', - stone_chenshui:'沉睡', - stone_chenshui_info:'在你的结束阶段,令己方主将获得一张梦境牌', - stone_mowang:'魔网', - stone_mowang_info:'己方法术对主将伤害+2,对随从伤害+4', + stone_fushi:'缚誓', + stone_fushi_info:'你出场时,为所有友方角色回复所有体力值', + stone_mieshi:'灭世', + stone_mieshi_info:'你出场时,对所有其他随从造成两点伤害,然后弃置己方主将的所有手牌', + stone_shixu:'时序', + stone_shixu_info:'你出场的回合内,己方主将获得4点行动值', + stone_chenshui:'沉睡', + stone_chenshui_info:'在你的结束阶段,令己方主将获得一张梦境牌', + stone_mowang:'魔网', + stone_mowang_info:'己方法术对主将伤害+2,对随从伤害+4', - stone_zhiyin:'指引', - stone_zhiyin_info:'每当己方主将使用一张法术牌,将一张火球术置于其手牌', - stone_bianshen:'变身', - stone_bianshen_info:'你出场时,若己方主将职业为术士,则代之成为新的主将;若己变身,则改为令你召唤的地狱火的初始手牌数和体力值+1', - stone_lianyu:'炼狱', - stone_lianyu_info:'你的职业技能改为召唤一个地狱火', - stone_lianji:'连击', - stone_lianji_info:'每当己方主将召唤一个随从,便增加一点体力和体力上限并摸一张牌', - stone_shenyu:'神谕', - stone_shenyu_info:'你出场时,己方主将可以选择一项:召唤两个嘲讽树人,或令所有其他随从增加一点体力和体力上限并摸两张牌', - stone_fuchou:'复仇', - stone_fuchou_info:'你死亡后,视为己方主将使用了一张复仇之怒', - stone_shenyou:'神佑', - stone_shenyou_info:'己方主将的职业技能和法术的治疗效果翻倍', - stone_jinu:'激怒', - stone_jinu_info:'摸牌阶段,若你己受伤,则额外摸两张牌', + stone_zhiyin:'指引', + stone_zhiyin_info:'每当己方主将使用一张法术牌,将一张火球术置于其手牌', + stone_bianshen:'变身', + stone_bianshen_info:'你出场时,若己方主将职业为术士,则代之成为新的主将;若己变身,则改为令你召唤的地狱火的初始手牌数和体力值+1', + stone_lianyu:'炼狱', + stone_lianyu_info:'你的职业技能改为召唤一个地狱火', + stone_lianji:'连击', + stone_lianji_info:'每当己方主将召唤一个随从,便增加一点体力和体力上限并摸一张牌', + stone_shenyu:'神谕', + stone_shenyu_info:'你出场时,己方主将可以选择一项:召唤两个嘲讽树人,或令所有其他随从增加一点体力和体力上限并摸两张牌', + stone_fuchou:'复仇', + stone_fuchou_info:'你死亡后,视为己方主将使用了一张复仇之怒', + stone_shenyou:'神佑', + stone_shenyou_info:'己方主将的职业技能和法术的治疗效果翻倍', + stone_jinu:'激怒', + stone_jinu_info:'摸牌阶段,若你己受伤,则额外摸两张牌', - spell_shenshengxinxing:'神圣新星', - spell_shenshengxinxing_info:'对所有敌方角色造成一点伤害,令所有友方角色回复一点体力', - spell_shengguangzhadan:'圣光炸弹', - spell_shengguangzhadan_info:'对所有随从造成等同于其手牌数的伤害', - spell_maizang:'埋葬', - spell_maizang_info:'令一名敌方随从死亡(不触发死亡技能),并将一张与该随从同名的随从洗入你的牌库', - spell_xinlingshijie:'心灵视界', - spell_xinlingshijie_info:'将一张敌方主将手牌的复制置于你的手牌', - spell_naluzhiguang:'纳鲁之光', - spell_naluzhiguang_info:'恢复一点体力值,若目标仍处于受伤状态,则召唤一名圣光护卫', - spell_zhiliaozhihuan:'治疗之环', - spell_zhiliaozhihuan_info:'令所有随从回复三点体力', + spell_shenshengxinxing:'神圣新星', + spell_shenshengxinxing_info:'对所有敌方角色造成一点伤害,令所有友方角色回复一点体力', + spell_shengguangzhadan:'圣光炸弹', + spell_shengguangzhadan_info:'对所有随从造成等同于其手牌数的伤害', + spell_maizang:'埋葬', + spell_maizang_info:'令一名敌方随从死亡(不触发死亡技能),并将一张与该随从同名的随从洗入你的牌库', + spell_xinlingshijie:'心灵视界', + spell_xinlingshijie_info:'将一张敌方主将手牌的复制置于你的手牌', + spell_naluzhiguang:'纳鲁之光', + spell_naluzhiguang_info:'恢复一点体力值,若目标仍处于受伤状态,则召唤一名圣光护卫', + spell_zhiliaozhihuan:'治疗之环', + spell_zhiliaozhihuan_info:'令所有随从回复三点体力', - spell_zhenyanshu:'真言术', - spell_zhenyanshu_info:'令一名随从增加一点体力和体力上限;从牌库中获得一张牌', - spell_enzeshu:'恩泽术', - spell_enzeshu_info:'令一名随从增加三点体力和体力上限', - spell_anyingxingtai:'暗影形态', - priest_anyingxingtai:'暗影形态', - spell_anyingxingtai_info:'你的职业技能改为造成一点伤害,若已进入暗影形态,则改为造成两点伤害', - spell_kuaisuzhiliao:'快速治疗', - spell_kuaisuzhiliao_info:'回复两点体力', - spell_xinlinghanbao:'心灵撼爆', - spell_xinlinghanbao_info:'对敌方主将造成两点伤害', - spell_kongxinshu:'控心术', - spell_kongxinshu_info:'复制敌方牌库中的一张随从,将其置入战场', + spell_zhenyanshu:'真言术', + spell_zhenyanshu_info:'令一名随从增加一点体力和体力上限;从牌库中获得一张牌', + spell_enzeshu:'恩泽术', + spell_enzeshu_info:'令一名随从增加三点体力和体力上限', + spell_anyingxingtai:'暗影形态', + priest_anyingxingtai:'暗影形态', + spell_anyingxingtai_info:'你的职业技能改为造成一点伤害,若已进入暗影形态,则改为造成两点伤害', + spell_kuaisuzhiliao:'快速治疗', + spell_kuaisuzhiliao_info:'回复两点体力', + spell_xinlinghanbao:'心灵撼爆', + spell_xinlinghanbao_info:'对敌方主将造成两点伤害', + spell_kongxinshu:'控心术', + spell_kongxinshu_info:'复制敌方牌库中的一张随从,将其置入战场', - stone_shengguanghuwei:'圣光护卫', - priest_shengguang:'圣光', - priest_shengguang_info:'每当一名随从获得治疗,摸一张牌', + stone_shengguanghuwei:'圣光护卫', + priest_shengguang:'圣光', + priest_shengguang_info:'每当一名随从获得治疗,摸一张牌', - spell_nuxi:'怒袭', - spell_nuxi_info:'造成一点伤害,获得两点护甲', - spell_dunpaimengji:'盾牌猛击', - spell_dunpaimengji_info:'对一名随从造成等同于你护甲值的伤害', - spell_zhansha:'斩杀', - spell_zhansha_info:'令一名已受伤的敌方随从死亡', - spell_nuhuozhongshao:'怒火中烧', - spell_nuhuozhongshao_info:'对一名随从造成一点伤害,然后令其摸两张牌', - spell_xuanfengzhan:'旋风斩', - spell_xuanfengzhan_info:'对所有随从造成一点伤害', - spell_juemingluandou:'绝命乱斗', - spell_juemingluandou_info:'随机保留一名随从,然后令所有其他随从死亡', + spell_nuxi:'怒袭', + spell_nuxi_info:'造成一点伤害,获得两点护甲', + spell_dunpaimengji:'盾牌猛击', + spell_dunpaimengji_info:'对一名随从造成等同于你护甲值的伤害', + spell_zhansha:'斩杀', + spell_zhansha_info:'令一名已受伤的敌方随从死亡', + spell_nuhuozhongshao:'怒火中烧', + spell_nuhuozhongshao_info:'对一名随从造成一点伤害,然后令其摸两张牌', + spell_xuanfengzhan:'旋风斩', + spell_xuanfengzhan_info:'对所有随从造成一点伤害', + spell_juemingluandou:'绝命乱斗', + spell_juemingluandou_info:'随机保留一名随从,然后令所有其他随从死亡', - spell_zhongnian:'重碾', - spell_zhongnian_info:'造成X点伤害,X为已受伤的友方角色数且不超过3', - spell_zhandounuhuo:'战斗怒火', - spell_zhandounuhuo_info:'从牌库中获得X张牌,X为已受伤的友方角色数', - spell_chongfeng:'冲锋', - spell_chongfeng_info:'令一名武将牌背面朝上的友方随从摸三张牌,然后将武将牌翻至正面', - spell_fuchoudaji:'复仇打击', - spell_fuchoudaji_info:'对所有随从造成一点伤害,若你的体力值不大于2,改为造成三点伤害', - spell_kuangbao:'狂暴', - spell_kuangbao_info:'令一名已受伤的友方随从摸四张牌', - spell_yingyongdaji:'英勇打击', - spell_yingyongdaji_info:'令一名敌方角色对你造成两点伤害,然后对其造成两点伤害', + spell_zhongnian:'重碾', + spell_zhongnian_info:'造成X点伤害,X为已受伤的友方角色数且不超过3', + spell_zhandounuhuo:'战斗怒火', + spell_zhandounuhuo_info:'从牌库中获得X张牌,X为已受伤的友方角色数', + spell_chongfeng:'冲锋', + spell_chongfeng_info:'令一名武将牌背面朝上的友方随从摸三张牌,然后将武将牌翻至正面', + spell_fuchoudaji:'复仇打击', + spell_fuchoudaji_info:'对所有随从造成一点伤害,若你的体力值不大于2,改为造成三点伤害', + spell_kuangbao:'狂暴', + spell_kuangbao_info:'令一名已受伤的友方随从摸四张牌', + spell_yingyongdaji:'英勇打击', + spell_yingyongdaji_info:'令一名敌方角色对你造成两点伤害,然后对其造成两点伤害', - spell_dubiao:'毒镖', - spell_dubiao_info:'对一名随机敌方角色造成一点伤害', - spell_qiangfengsheji:'强风射击', - spell_qiangfengsheji_info:'对两名敌方随从各造成一点伤害,并弃置其两张手牌', - spell_tanxianmao:'探险帽', - hunter_tanxianmao:'探险帽', - hunter_tanxianmao_info:'你死亡时,将一张探险帽置入主将的手牌', - spell_tanxianmao_info:'令一名友方随从增加一点体力和体力上限并摸一张牌,当该随从死亡时,将一张探险帽置入你的手牌', - spell_shalumingling:'杀戮命令', - spell_shalumingling_info:'造成一点伤害,如果你控制任何野兽,则改为造成两点伤害', - spell_zhuizongshu:'追踪术', - spell_zhuizongshu_info:'从牌库中随机选择三张牌,获得其中的一张', - spell_tianjiangzhuqun:'天降蛛群', - spell_tianjiangzhuqun_info:'召唤三只结网蛛', + spell_dubiao:'毒镖', + spell_dubiao_info:'对一名随机敌方角色造成一点伤害', + spell_qiangfengsheji:'强风射击', + spell_qiangfengsheji_info:'对两名敌方随从各造成一点伤害,并弃置其两张手牌', + spell_tanxianmao:'探险帽', + hunter_tanxianmao:'探险帽', + hunter_tanxianmao_info:'你死亡时,将一张探险帽置入主将的手牌', + spell_tanxianmao_info:'令一名友方随从增加一点体力和体力上限并摸一张牌,当该随从死亡时,将一张探险帽置入你的手牌', + spell_shalumingling:'杀戮命令', + spell_shalumingling_info:'造成一点伤害,如果你控制任何野兽,则改为造成两点伤害', + spell_zhuizongshu:'追踪术', + spell_zhuizongshu_info:'从牌库中随机选择三张牌,获得其中的一张', + spell_tianjiangzhuqun:'天降蛛群', + spell_tianjiangzhuqun_info:'召唤三只结网蛛', - spell_lierenyinji:'猎人印记', - spell_lierenyinji_info:'将一名随从的体力上限降至1', - spell_kuaisusheji:'快速射击', - spell_kuaisusheji_info:'造成一点伤害,摸一张牌', - spell_guanmenfanggou:'关门放狗', - spell_guanmenfanggou_info:'每有一名敌方随从,便召唤一只猎狗', - spell_zhaohuanchongwu:'动物伙伴', - spell_zhaohuanchongwu_info:'随机召唤一只野兽', - spell_zidanshangtang:'子弹上膛', - spell_zidanshangtang_info:'随机获得一张猎人职业法术牌,并获得技能【上膛】直到回合结束', - spell_duochongsheji:'多重射击', - spell_duochongsheji_info:'对两名随机敌方随从各造成两点伤害', + spell_lierenyinji:'猎人印记', + spell_lierenyinji_info:'将一名随从的体力上限降至1', + spell_kuaisusheji:'快速射击', + spell_kuaisusheji_info:'造成一点伤害,摸一张牌', + spell_guanmenfanggou:'关门放狗', + spell_guanmenfanggou_info:'每有一名敌方随从,便召唤一只猎狗', + spell_zhaohuanchongwu:'动物伙伴', + spell_zhaohuanchongwu_info:'随机召唤一只野兽', + spell_zidanshangtang:'子弹上膛', + spell_zidanshangtang_info:'随机获得一张猎人职业法术牌,并获得技能【上膛】直到回合结束', + spell_duochongsheji:'多重射击', + spell_duochongsheji_info:'对两名随机敌方随从各造成两点伤害', - stone_liegou:'猎狗', - hunter_zidanshangtang:'上膛', - hunter_zidanshangtang_bg:'膛', - hunter_zidanshangtang_info:'每当你使用一张法术牌,便随机获得一张猎人职业法术牌', + stone_liegou:'猎狗', + hunter_zidanshangtang:'上膛', + hunter_zidanshangtang_bg:'膛', + hunter_zidanshangtang_info:'每当你使用一张法术牌,便随机获得一张猎人职业法术牌', - spell_zuzhou:'诅咒', - spell_zuzhou_info:'将目标随从翻面,摸一张牌', - spell_xishengqiyue:'牺牲契约', - spell_xishengqiyue_info:'令双方各一名随从立即死亡', - spell_xiaoguibaopo:'小鬼爆破', - spell_xiaoguibaopo_info:'对一名随从造成1~3点伤害,每造成一点伤害,便召唤一只小鬼', - spell_anyinglieyan:'暗影裂焰', - spell_anyinglieyan_info:'杀死一名友方随从,并对所有敌方随从造成等于其体力值的伤害', - spell_liliangdaijia:'力量代价', - spell_liliangdaijia_info:'令一名友方随从摸4张牌,将体力值变为5,并在其下个回合结束后死亡', - spell_emozhinu:'恶魔之怒', - spell_emozhinu_info:'对所有随从造成两点伤害', + spell_zuzhou:'诅咒', + spell_zuzhou_info:'将目标随从翻面,摸一张牌', + spell_xishengqiyue:'牺牲契约', + spell_xishengqiyue_info:'令双方各一名随从立即死亡', + spell_xiaoguibaopo:'小鬼爆破', + spell_xiaoguibaopo_info:'对一名随从造成1~3点伤害,每造成一点伤害,便召唤一只小鬼', + spell_anyinglieyan:'暗影裂焰', + spell_anyinglieyan_info:'杀死一名友方随从,并对所有敌方随从造成等于其体力值的伤害', + spell_liliangdaijia:'力量代价', + spell_liliangdaijia_info:'令一名友方随从摸4张牌,将体力值变为5,并在其下个回合结束后死亡', + spell_emozhinu:'恶魔之怒', + spell_emozhinu_info:'对所有随从造成两点伤害', - spell_emozhixin:'恶魔之心', - spell_emozhixin_info:'对一名敌方随从造成四点伤害,或令一名友方随从摸四张牌', - spell_ansezhadan:'暗色炸弹', - spell_ansezhadan_info:'造成两点伤害', - spell_fushishu:'腐蚀术', - warlock_fushishu:'腐蚀', - warlock_fushishu_info:'下个回合结束后死亡', - spell_fushishu_info:'令一名敌方随从于其下个回合结束后死亡', - spell_heianqiyue:'黑暗契约', - spell_heianqiyue_info:'随机令两名敌方随从死亡,随机弃置两张手牌', - spell_linghunhongxi:'灵魂虹吸', - spell_linghunhongxi_info:'令一名随从死亡,回复一点体力', - spell_siwangchanrao:'死亡缠绕', - spell_siwangchanrao_info:'对一名随从造成一点伤害;若该随从死亡,从牌库中获得一张牌', + spell_emozhixin:'恶魔之心', + spell_emozhixin_info:'对一名敌方随从造成四点伤害,或令一名友方随从摸四张牌', + spell_ansezhadan:'暗色炸弹', + spell_ansezhadan_info:'造成两点伤害', + spell_fushishu:'腐蚀术', + warlock_fushishu:'腐蚀', + warlock_fushishu_info:'下个回合结束后死亡', + spell_fushishu_info:'令一名敌方随从于其下个回合结束后死亡', + spell_heianqiyue:'黑暗契约', + spell_heianqiyue_info:'随机令两名敌方随从死亡,随机弃置两张手牌', + spell_linghunhongxi:'灵魂虹吸', + spell_linghunhongxi_info:'令一名随从死亡,回复一点体力', + spell_siwangchanrao:'死亡缠绕', + spell_siwangchanrao_info:'对一名随从造成一点伤害;若该随从死亡,从牌库中获得一张牌', - spell_wuyashenxiang:'乌鸦神像', - spell_wuyashenxiang_info:'从三张法术牌或随从牌中选择一张加入手牌', - spell_huotigenxu:'活体根须', - spell_huotigenxu_info:'造成一点伤害,或召唤两个树苗', - spell_hengsao:'横扫', - spell_hengsao_info:'对一名敌方角色造成两点伤害,然后对其他敌方角色造成一点伤害', - spell_yexingchengzhang:'野性成长', - spell_yexingchengzhang_info:'下个出牌阶段开始时获得三点额外行动值', - spell_ziranzhili:'自然之力', - spell_ziranzhili_info:'召唤三个自爆树人', - spell_yemanpaoxiao:'野蛮咆哮', - spell_yemanpaoxiao_bg:'咆', - spell_yemanpaoxiao2:'咆哮', - spell_yemanpaoxiao_info:'所有友方角色造成的伤害+1,直到你的下个回合开始', + spell_wuyashenxiang:'乌鸦神像', + spell_wuyashenxiang_info:'从三张法术牌或随从牌中选择一张加入手牌', + spell_huotigenxu:'活体根须', + spell_huotigenxu_info:'造成一点伤害,或召唤两个树苗', + spell_hengsao:'横扫', + spell_hengsao_info:'对一名敌方角色造成两点伤害,然后对其他敌方角色造成一点伤害', + spell_yexingchengzhang:'野性成长', + spell_yexingchengzhang_info:'下个出牌阶段开始时获得三点额外行动值', + spell_ziranzhili:'自然之力', + spell_ziranzhili_info:'召唤三个自爆树人', + spell_yemanpaoxiao:'野蛮咆哮', + spell_yemanpaoxiao_bg:'咆', + spell_yemanpaoxiao2:'咆哮', + spell_yemanpaoxiao_info:'所有友方角色造成的伤害+1,直到你的下个回合开始', - spell_conglinzhihun:'丛林之魂', - druid_conglinzhihun:'树魂', - druid_conglinzhihun_info:'你死亡后召唤一个树人', - spell_conglinzhihun_info:'令所有友方随从获得技能树魂(你死亡后召唤一个树人)', - spell_ziyang:'滋养', - spell_ziyang_info:'下个出牌开始阶段获得四点额外行动值,或从牌库中获得三张牌', - spell_fugen:'腐根', - spell_fugen_info:'令一名随从死亡,将一张随机随从置入对手的手牌', - spell_xingchenzhuiluo:'星辰坠落', - spell_xingchenzhuiluo_info:'对一名敌方随从造成五点伤害,或对所有敌方随从造成两点伤害', - spell_fennu:'愤怒', - spell_fennu_info:'对一名随从造成两点伤害,或造成一点伤害并从牌库中获得一张牌', - spell_heiandiyu:'黑暗低语', - spell_heiandiyu_info:'召唤若干个小精灵直到你的随从数达到4;或令一名随从增加一点体力和体力上限并摸三张牌', + spell_conglinzhihun:'丛林之魂', + druid_conglinzhihun:'树魂', + druid_conglinzhihun_info:'你死亡后召唤一个树人', + spell_conglinzhihun_info:'令所有友方随从获得技能树魂(你死亡后召唤一个树人)', + spell_ziyang:'滋养', + spell_ziyang_info:'下个出牌开始阶段获得四点额外行动值,或从牌库中获得三张牌', + spell_fugen:'腐根', + spell_fugen_info:'令一名随从死亡,将一张随机随从置入对手的手牌', + spell_xingchenzhuiluo:'星辰坠落', + spell_xingchenzhuiluo_info:'对一名敌方随从造成五点伤害,或对所有敌方随从造成两点伤害', + spell_fennu:'愤怒', + spell_fennu_info:'对一名随从造成两点伤害,或造成一点伤害并从牌库中获得一张牌', + spell_heiandiyu:'黑暗低语', + spell_heiandiyu_info:'召唤若干个小精灵直到你的随从数达到4;或令一名随从增加一点体力和体力上限并摸三张牌', - druid_yexingchengzhang:'成长', - druid_yexingchengzhang_bg:'长', - druid_yexingchengzhang_info:'下个出牌阶段开始时获得三点额外行动值', - druid_ziyang:'滋养', - druid_ziyang_bg:'养', - druid_ziyang_info:'下个出牌阶段开始时获得四点额外行动值', + druid_yexingchengzhang:'成长', + druid_yexingchengzhang_bg:'长', + druid_yexingchengzhang_info:'下个出牌阶段开始时获得三点额外行动值', + druid_ziyang:'滋养', + druid_ziyang_bg:'养', + druid_ziyang_info:'下个出牌阶段开始时获得四点额外行动值', - stone_shumiao:'树苗', - stone_shuren:'自爆树人', - stone_shurenx:'树人', - stone_shurenxx:'嘲讽树人', - stone_zibao:'自爆', - stone_zibao_info:'结合结束后立即死亡', + stone_shumiao:'树苗', + stone_shuren:'自爆树人', + stone_shurenx:'树人', + stone_shurenxx:'嘲讽树人', + stone_zibao:'自爆', + stone_zibao_info:'结合结束后立即死亡', - spell_cigu:'刺骨', - spell_cigu_info:'造成一点伤害,你可以弃置一张装备区内的牌令伤害+1', - spell_jianrenluanwu:'剑刃乱舞', - spell_jianrenluanwu_info:'弃置你的武器牌,并对所有敌方角色造成一点伤害', - spell_daoshan:'刀扇', - spell_daoshan_info:'对所有敌方随从造成一点伤害,从牌库中获得一张牌', - spell_sijidaifa:'伺机待发', - spell_sijidaifa_info:'你使用下一张法术牌时获得X点行动值,X为该法术的行动值消耗且不超过3', - spell_cisha:'刺杀', - spell_cisha_info:'杀死一名随从', - spell_modaoyou:'磨刀油', - spell_modaoyou_info:'令你下一次剑刃乱舞造成的伤害+1,并与一名随机友方随从各摸两张牌', + spell_cigu:'刺骨', + spell_cigu_info:'造成一点伤害,你可以弃置一张装备区内的牌令伤害+1', + spell_jianrenluanwu:'剑刃乱舞', + spell_jianrenluanwu_info:'弃置你的武器牌,并对所有敌方角色造成一点伤害', + spell_daoshan:'刀扇', + spell_daoshan_info:'对所有敌方随从造成一点伤害,从牌库中获得一张牌', + spell_sijidaifa:'伺机待发', + spell_sijidaifa_info:'你使用下一张法术牌时获得X点行动值,X为该法术的行动值消耗且不超过3', + spell_cisha:'刺杀', + spell_cisha_info:'杀死一名随从', + spell_modaoyou:'磨刀油', + spell_modaoyou_info:'令你下一次剑刃乱舞造成的伤害+1,并与一名随机友方随从各摸两张牌', - spell_mengun:'闷棍', - spell_mengun_info:'令一名敌方随从死亡(不触发死亡技能),将一张该随从的复制置入对手的手牌', - spell_anzhongpohuai:'暗中破坏', - spell_anzhongpohuai_info:'随机杀死一名敌方随从,随机弃置敌方的一张装备牌', - spell_beici:'背刺', - spell_beici_info:'令一名未受伤的随从流失一点体力', - spell_weijisifu:'危机四伏', - spell_zhumo:'蛛魔', - stone_zhumo:'蛛魔', - spell_zhumo_info:'每当该牌被弃置,为你的对手召唤一只蛛魔', - spell_weijisifu_info:'将三张蛛魔牌洗入对手的牌库;每当一名角色弃置蛛魔牌,为其对手召唤一只蛛魔', - spell_piaoqie:'剽窃', - spell_piaoqie_info:'复制两张对手牌库中的牌加入你的手牌', - spell_jipao:'疾跑', - spell_jipao_info:'从牌库中获得四张牌', + spell_mengun:'闷棍', + spell_mengun_info:'令一名敌方随从死亡(不触发死亡技能),将一张该随从的复制置入对手的手牌', + spell_anzhongpohuai:'暗中破坏', + spell_anzhongpohuai_info:'随机杀死一名敌方随从,随机弃置敌方的一张装备牌', + spell_beici:'背刺', + spell_beici_info:'令一名未受伤的随从流失一点体力', + spell_weijisifu:'危机四伏', + spell_zhumo:'蛛魔', + stone_zhumo:'蛛魔', + spell_zhumo_info:'每当该牌被弃置,为你的对手召唤一只蛛魔', + spell_weijisifu_info:'将三张蛛魔牌洗入对手的牌库;每当一名角色弃置蛛魔牌,为其对手召唤一只蛛魔', + spell_piaoqie:'剽窃', + spell_piaoqie_info:'复制两张对手牌库中的牌加入你的手牌', + spell_jipao:'疾跑', + spell_jipao_info:'从牌库中获得四张牌', - spell_fengxian:'奉献', - spell_fengxian_info:'对所有敌方角色造成一点伤害', - spell_fuchouzhinu:'复仇之怒', - spell_fuchouzhinu_info:'造成5点伤害,随机分配到所有敌方随从上', - spell_shengliaoshu:'圣疗术', - spell_shengliaoshu_info:'恢复两点体力,摸两张牌', - spell_fennuzhichui:'愤怒之锤', - spell_fennuzhichui_info:'造成一点伤害,从牌库中获得一张牌', - spell_zuozhandongyuan:'作战动员', - spell_zuozhandongyuan_info:'召唤两个新兵,随机装备一把武器', - spell_liliangzhufu:'力量祝福', - spell_liliangzhufu_info:'令一名随从摸两张牌', + spell_fengxian:'奉献', + spell_fengxian_info:'对所有敌方角色造成一点伤害', + spell_fuchouzhinu:'复仇之怒', + spell_fuchouzhinu_info:'造成5点伤害,随机分配到所有敌方随从上', + spell_shengliaoshu:'圣疗术', + spell_shengliaoshu_info:'恢复两点体力,摸两张牌', + spell_fennuzhichui:'愤怒之锤', + spell_fennuzhichui_info:'造成一点伤害,从牌库中获得一张牌', + spell_zuozhandongyuan:'作战动员', + spell_zuozhandongyuan_info:'召唤两个新兵,随机装备一把武器', + spell_liliangzhufu:'力量祝福', + spell_liliangzhufu_info:'令一名随从摸两张牌', - spell_jinyingduijue:'精英对决', - spell_jinyingduijue_info:'双方各保留体力值最高的一名随从,然后令其他随从死亡', - spell_shenpan:'审判', - spell_shenpan_info:'若你的对手随从数不少于你,则随机令一名敌方随从死亡', - spell_shenshengfennu:'神圣愤怒', - spell_shenshengfennu_info:'从牌库中获得一张牌,并造成等同于其行动值消耗的伤害', - spell_yongshizhufu:'勇士祝福', - spell_yongshizhufu_info:'令一名随从的手牌数翻倍', - spell_zhengqianghaosheng:'争强好胜', - paladin_zhengqianghaosheng:'争强好胜', - paladin_zhengqianghaosheng_info:'在你的下一准备阶段,令所有友方随从增加一点体力和体力上限并摸一张牌', - spell_zhengqianghaosheng_info:'在你的下一准备阶段,令所有友方随从增加一点体力和体力上限并摸一张牌', - spell_zhihuizhufu:'智慧祝福', - paladin_zhihuizhufu:'智慧祝福', - spell_zhihuizhufu_info:'选择一名随从,在其每个准备阶段,你从牌库中获得一张牌', + spell_jinyingduijue:'精英对决', + spell_jinyingduijue_info:'双方各保留体力值最高的一名随从,然后令其他随从死亡', + spell_shenpan:'审判', + spell_shenpan_info:'若你的对手随从数不少于你,则随机令一名敌方随从死亡', + spell_shenshengfennu:'神圣愤怒', + spell_shenshengfennu_info:'从牌库中获得一张牌,并造成等同于其行动值消耗的伤害', + spell_yongshizhufu:'勇士祝福', + spell_yongshizhufu_info:'令一名随从的手牌数翻倍', + spell_zhengqianghaosheng:'争强好胜', + paladin_zhengqianghaosheng:'争强好胜', + paladin_zhengqianghaosheng_info:'在你的下一准备阶段,令所有友方随从增加一点体力和体力上限并摸一张牌', + spell_zhengqianghaosheng_info:'在你的下一准备阶段,令所有友方随从增加一点体力和体力上限并摸一张牌', + spell_zhihuizhufu:'智慧祝福', + paladin_zhihuizhufu:'智慧祝福', + spell_zhihuizhufu_info:'选择一名随从,在其每个准备阶段,你从牌库中获得一张牌', - spell_fengnu:'风怒', - shaman_fengnu:'风怒', - shaman_fengnu_info:'回合结束后,你获得一个额外回合', - spell_fengnu_info:'令一名随从获得技能风怒(回合结束后,你获得一个额外回合)', - spell_rongyanbaolie:'熔岩爆裂', - spell_rongyanbaolie_info:'造成三点火焰伤害,流失一点体力', - spell_shihuawuqi:'石化武器', - shaman_shihuawuqi:'充能', - shaman_shihuawuqi_info:'准备阶段,你摸三张牌', - spell_shihuawuqi_info:'令一名友方随从获得技能充能(准备阶段,你摸三张牌),直到你的下一回合开始', - spell_xianzuzhaohuan:'先祖召唤', - spell_xianzuzhaohuan_info:'双方各将手牌中的一张随机随从牌置入战场', - spell_xianzuzhihun:'先祖之魂', - shaman_xianzuzhihun:'转生', - shaman_xianzuzhihun_info:'你死亡后,召唤一个自身的复制', - spell_xianzuzhihun_info:'令一名随从获得技能转生(你死亡后,召唤一个自身的复制)', - spell_xianzuzhishi:'先祖知识', - shaman_xianzuzhishi:'先祖知识', - shaman_xianzuzhishi_info:'本回合手牌上限-1', - spell_xianzuzhishi_info:'从牌库中获得两张牌,本回合手牌上限-1(多次使用不叠加)', + spell_fengnu:'风怒', + shaman_fengnu:'风怒', + shaman_fengnu_info:'回合结束后,你获得一个额外回合', + spell_fengnu_info:'令一名随从获得技能风怒(回合结束后,你获得一个额外回合)', + spell_rongyanbaolie:'熔岩爆裂', + spell_rongyanbaolie_info:'造成三点火焰伤害,流失一点体力', + spell_shihuawuqi:'石化武器', + shaman_shihuawuqi:'充能', + shaman_shihuawuqi_info:'准备阶段,你摸三张牌', + spell_shihuawuqi_info:'令一名友方随从获得技能充能(准备阶段,你摸三张牌),直到你的下一回合开始', + spell_xianzuzhaohuan:'先祖召唤', + spell_xianzuzhaohuan_info:'双方各将手牌中的一张随机随从牌置入战场', + spell_xianzuzhihun:'先祖之魂', + shaman_xianzuzhihun:'转生', + shaman_xianzuzhihun_info:'你死亡后,召唤一个自身的复制', + spell_xianzuzhihun_info:'令一名随从获得技能转生(你死亡后,召唤一个自身的复制)', + spell_xianzuzhishi:'先祖知识', + shaman_xianzuzhishi:'先祖知识', + shaman_xianzuzhishi_info:'本回合手牌上限-1', + spell_xianzuzhishi_info:'从牌库中获得两张牌,本回合手牌上限-1(多次使用不叠加)', - spell_lianhuanbaolie:'连环爆裂', - spell_lianhuanbaolie_info:'造成1~2点雷电伤害', - spell_shandianfengbao:'闪电风暴', - spell_shandianfengbao_info:'对所有敌方随从造成1~2点伤害', - spell_yaoshu:'妖术', - spell_yaoshu_info:'将一个随从变成一只青蛙', - spell_yexinglanghun:'野性狼魂', - spell_yexinglanghun_info:'召唤两个幽灵狼', - spell_shixue:'嗜血', - spell_shixue_info:'所有友方随从摸两张牌', - spell_chazhuangshandian:'叉状闪电', - spell_chazhuangshandian_info:'对两个随机敌方随从各造成一点雷电伤害', + spell_lianhuanbaolie:'连环爆裂', + spell_lianhuanbaolie_info:'造成1~2点雷电伤害', + spell_shandianfengbao:'闪电风暴', + spell_shandianfengbao_info:'对所有敌方随从造成1~2点伤害', + spell_yaoshu:'妖术', + spell_yaoshu_info:'将一个随从变成一只青蛙', + spell_yexinglanghun:'野性狼魂', + spell_yexinglanghun_info:'召唤两个幽灵狼', + spell_shixue:'嗜血', + spell_shixue_info:'所有友方随从摸两张牌', + spell_chazhuangshandian:'叉状闪电', + spell_chazhuangshandian_info:'对两个随机敌方随从各造成一点雷电伤害', - stone_qingwa:'青蛙', - stone_youlinglang:'幽灵狼', - stone_jingxiang:'镜像', - stone_jingxiang_info:'锁定技,你跳过摸牌阶段', - shaman_qingwa:'青蛙', - shaman_qingwa_info:'锁定技,你跳过摸牌阶段', - stone_xiaojingling:'小精灵', + stone_qingwa:'青蛙', + stone_youlinglang:'幽灵狼', + stone_jingxiang:'镜像', + stone_jingxiang_info:'锁定技,你跳过摸牌阶段', + shaman_qingwa:'青蛙', + shaman_qingwa_info:'锁定技,你跳过摸牌阶段', + stone_xiaojingling:'小精灵', - spell_laojiuhuoba:'老旧火把', - spell_laojiuhuoba_info:'造成一点伤害,将一张炽热火把置入你的牌库', - spell_chirehuoba:'炽热火把', - spell_chirehuoba_info:'造成两点火焰伤害', - spell_canying:'残影', - spell_canying_info:'复制你的所有随从,并将其置入你的手牌', - spell_yanbaoshu:'炎爆术', - spell_yanbaoshu_info:'造成四点火焰伤害(若目标为主将,伤害不能超过目标的当前体力值)', - spell_jingxiang:'镜像', - spell_jingxiang_info:'召唤两个具有嘲讽且摸牌阶段不摸牌的随从', - spell_aoshufeidan:'奥术飞弹', - spell_aoshufeidan_info:'造成3点伤害,随从分配到所有敌方随从上', - spell_hanbingpingzhang:'寒冰屏障', - mage_hanbingpingzhang:'寒冰屏障', - mage_hanbingpingzhang_info:'体力值不能降到2以内', - spell_hanbingpingzhang_info:'令一名角色的体力值不能降到2以内,直到你的下一回合开始', + spell_laojiuhuoba:'老旧火把', + spell_laojiuhuoba_info:'造成一点伤害,将一张炽热火把置入你的牌库', + spell_chirehuoba:'炽热火把', + spell_chirehuoba_info:'造成两点火焰伤害', + spell_canying:'残影', + spell_canying_info:'复制你的所有随从,并将其置入你的手牌', + spell_yanbaoshu:'炎爆术', + spell_yanbaoshu_info:'造成四点火焰伤害(若目标为主将,伤害不能超过目标的当前体力值)', + spell_jingxiang:'镜像', + spell_jingxiang_info:'召唤两个具有嘲讽且摸牌阶段不摸牌的随从', + spell_aoshufeidan:'奥术飞弹', + spell_aoshufeidan_info:'造成3点伤害,随从分配到所有敌方随从上', + spell_hanbingpingzhang:'寒冰屏障', + mage_hanbingpingzhang:'寒冰屏障', + mage_hanbingpingzhang_info:'体力值不能降到2以内', + spell_hanbingpingzhang_info:'令一名角色的体力值不能降到2以内,直到你的下一回合开始', - spell_hanbingjian:'寒冰箭', - spell_hanbingjian_info:'对一个随从造成两点伤害,然后将其翻面', - spell_lieyanfengbao:'烈焰风暴', - spell_lieyanfengbao_info:'对所有敌方随从造成两点伤害', - spell_baofengxue:'暴风雪', - spell_baofengxue_info:'对所有敌方随从造成一点伤害,然后将其翻面', - spell_aoshuzhihui:'奥术智慧', - spell_aoshuzhihui_info:'从牌库中获得两张牌', - spell_bianxingshu:'变形术', - spell_bianxingshu_info:'将一个随从变成一只绵羊', - spell_huoqiushu:'火球术', - spell_huoqiushu_info:'造成三点火焰伤害(若目标为主将,伤害不能超过目标的当前体力值)', + spell_hanbingjian:'寒冰箭', + spell_hanbingjian_info:'对一个随从造成两点伤害,然后将其翻面', + spell_lieyanfengbao:'烈焰风暴', + spell_lieyanfengbao_info:'对所有敌方随从造成两点伤害', + spell_baofengxue:'暴风雪', + spell_baofengxue_info:'对所有敌方随从造成一点伤害,然后将其翻面', + spell_aoshuzhihui:'奥术智慧', + spell_aoshuzhihui_info:'从牌库中获得两张牌', + spell_bianxingshu:'变形术', + spell_bianxingshu_info:'将一个随从变成一只绵羊', + spell_huoqiushu:'火球术', + spell_huoqiushu_info:'造成三点火焰伤害(若目标为主将,伤害不能超过目标的当前体力值)', - stone_mianyang:'绵羊', - mage_mianyang:'绵羊', - mage_mianyang_info:'锁定技,你不能使用杀', + stone_mianyang:'绵羊', + mage_mianyang:'绵羊', + mage_mianyang_info:'锁定技,你不能使用杀', - stone_beijunmushi:'北郡牧师', - stone_guangyaozhizi:'光耀之子', - stone_longmianjiaoguan:'龙眠教官', - stone_linghunjisi:'灵魂祭司', - stone_guanliyuan:'管理员', - stone_heianjiaotu:'黑暗教徒', + stone_beijunmushi:'北郡牧师', + stone_guangyaozhizi:'光耀之子', + stone_longmianjiaoguan:'龙眠教官', + stone_linghunjisi:'灵魂祭司', + stone_guanliyuan:'管理员', + stone_heianjiaotu:'黑暗教徒', - stone_shengdianzhishi:'圣殿执事', - stone_suoxiaojishi:'缩小技师', - stone_anyingzisi:'暗影子嗣', - stone_guangmingquan:'光明泉', - stone_muguangchulong:'暮光雏龙', - stone_shenshengyongshi:'神圣勇士', + stone_shengdianzhishi:'圣殿执事', + stone_suoxiaojishi:'缩小技师', + stone_anyingzisi:'暗影子嗣', + stone_guangmingquan:'光明泉', + stone_muguangchulong:'暮光雏龙', + stone_shenshengyongshi:'神圣勇士', - priest_puzhao:'普照', - priest_puzhao_info:'你出场时,己方主将可令一名其他友方随从增加两点体力和体力上限', - priest_suoxiao:'缩小', - priest_suoxiao_info:'你出场时,己方主将可令一名其他随从减少两点体力上限(不能小于1)', - priest_shengshui:'圣水', - priest_shengshui_info:'你跳过摸牌阶段;在你的准备阶段,令一名随机友方角色回复两点体力', - priest_muguang:'暮光', - priest_muguang_info:'你出场时,若主将手牌中有随从牌,则增加一点体力和体力上限', - priest_shixin:'蚀心', - priest_shixin_info:'每当己方主将使用一次职业技能,对双方主将各造成一点伤害', + priest_puzhao:'普照', + priest_puzhao_info:'你出场时,己方主将可令一名其他友方随从增加两点体力和体力上限', + priest_suoxiao:'缩小', + priest_suoxiao_info:'你出场时,己方主将可令一名其他随从减少两点体力上限(不能小于1)', + priest_shengshui:'圣水', + priest_shengshui_info:'你跳过摸牌阶段;在你的准备阶段,令一名随机友方角色回复两点体力', + priest_muguang:'暮光', + priest_muguang_info:'你出场时,若主将手牌中有随从牌,则增加一点体力和体力上限', + priest_shixin:'蚀心', + priest_shixin_info:'每当己方主将使用一次职业技能,对双方主将各造成一点伤害', - priest_shengliao:'圣疗', - priest_shengliao_info:'每当一名随从回复体力,己方主将从牌库中获得一张牌', - priest_guangyao:'光耀', - priest_guangyao_info:'每当你的体力值发生改变,摸一张牌', - priest_xundao:'训导', - priest_xundao_info:'你出场时,若己方主将手牌中有随从牌,则摸一张牌并获得嘲讽', - priest_hunwu:'魂舞', - priest_hunwu_info:'己方主将的职业技能及法术的治疗效果改为令目标流失等量体力', - priest_faxian:'发现', - priest_faxian_info:'你出场时,己方主将从三张随机随从牌中选择一张加入手牌', - priest_zhufu:'献身', - priest_zhufu_info:'你死亡时,令一名随机友方随从增加一点体力和体力上限', + priest_shengliao:'圣疗', + priest_shengliao_info:'每当一名随从回复体力,己方主将从牌库中获得一张牌', + priest_guangyao:'光耀', + priest_guangyao_info:'每当你的体力值发生改变,摸一张牌', + priest_xundao:'训导', + priest_xundao_info:'你出场时,若己方主将手牌中有随从牌,则摸一张牌并获得嘲讽', + priest_hunwu:'魂舞', + priest_hunwu_info:'己方主将的职业技能及法术的治疗效果改为令目标流失等量体力', + priest_faxian:'发现', + priest_faxian_info:'你出场时,己方主将从三张随机随从牌中选择一张加入手牌', + priest_zhufu:'献身', + priest_zhufu_info:'你死亡时,令一名随机友方随从增加一点体力和体力上限', - stone_daomufeizei:'盗墓匪贼', - stone_haidao:'海盗', - stone_haidaotoumu:'海盗头目', - stone_cike:'刺客', - stone_tegong:'特工', - stone_qiezei:'窃贼', - stone_heitieairen:'黑铁矮人', + stone_daomufeizei:'盗墓匪贼', + stone_haidao:'海盗', + stone_haidaotoumu:'海盗头目', + stone_cike:'刺客', + stone_tegong:'特工', + stone_qiezei:'窃贼', + stone_heitieairen:'黑铁矮人', - stone_duyanhaidao:'独眼海盗', - stone_gangtiewushi:'刚铁武师', - stone_lifaji:'理发机', - stone_shihualong:'石化龙', - stone_xiushuihaidao:'锈水海盗', - stone_zousishangfan:'走私商贩', + stone_duyanhaidao:'独眼海盗', + stone_gangtiewushi:'刚铁武师', + stone_lifaji:'理发机', + stone_shihualong:'石化龙', + stone_xiushuihaidao:'锈水海盗', + stone_zousishangfan:'走私商贩', - rogue_duxing:'独行', - rogue_duxing_info:'每当敌方主将召唤一名随从,便获得潜行', - rogue_shoudao:'授道', - rogue_shoudao_info:'在己方主将的结束阶段,令一名随机友方随从增加一点体力和体力上限并摸一张牌', - rogue_lifa:'理发', - rogue_lifa_info:'为己方主将装备一把武器,若已有武器,改为对敌方主将造成一点伤害', - rogue_fusheng:'复生', - rogue_fusheng_info:'你出场时,体力值和体力上限变为X,X为场上体力最高的随从的体力值', - rogue_jielue:'劫掠', - rogue_jielue_info:'每当己方主将装备一把武器牌,摸两张牌', - rogue_jiaoyi:'交易', - rogue_jiaoyi_info:'你出场时,己方主将可以弃置一张装备牌令你摸三张牌', + rogue_duxing:'独行', + rogue_duxing_info:'每当敌方主将召唤一名随从,便获得潜行', + rogue_shoudao:'授道', + rogue_shoudao_info:'在己方主将的结束阶段,令一名随机友方随从增加一点体力和体力上限并摸一张牌', + rogue_lifa:'理发', + rogue_lifa_info:'为己方主将装备一把武器,若已有武器,改为对敌方主将造成一点伤害', + rogue_fusheng:'复生', + rogue_fusheng_info:'你出场时,体力值和体力上限变为X,X为场上体力最高的随从的体力值', + rogue_jielue:'劫掠', + rogue_jielue_info:'每当己方主将装备一把武器牌,摸两张牌', + rogue_jiaoyi:'交易', + rogue_jiaoyi_info:'你出场时,己方主将可以弃置一张装备牌令你摸三张牌', - rogue_touqie:'偷窃', - rogue_touqie_info:'每当你造成一次伤害,己方主将从牌库中获得一张牌', - rogue_xunbao:'寻宝', - rogue_xunbao_info:'你死亡时,将一张伺机行发置于己方主将的手牌', - rogue_cisha:'刺杀', - rogue_cisha_info:'每当你对一名随从造成伤害,受伤害随从立即死亡', - rogue_touxi:'偷袭', - rogue_touxi_info:'你出场时,己方主将可弃置一张装备区内的牌并对一名敌方角色造成一点伤害', - rogue_qiancang:'潜藏', - rogue_qiancang_info:'你出场时,对所有未受伤害的敌方随从造成一点伤害', - rogue_zhaomu:'结伙', - rogue_zhaomu_info:'你出场时,召唤一个海盗', + rogue_touqie:'偷窃', + rogue_touqie_info:'每当你造成一次伤害,己方主将从牌库中获得一张牌', + rogue_xunbao:'寻宝', + rogue_xunbao_info:'你死亡时,将一张伺机行发置于己方主将的手牌', + rogue_cisha:'刺杀', + rogue_cisha_info:'每当你对一名随从造成伤害,受伤害随从立即死亡', + rogue_touxi:'偷袭', + rogue_touxi_info:'你出场时,己方主将可弃置一张装备区内的牌并对一名敌方角色造成一点伤害', + rogue_qiancang:'潜藏', + rogue_qiancang_info:'你出场时,对所有未受伤害的敌方随从造成一点伤害', + rogue_zhaomu:'结伙', + rogue_zhaomu_info:'你出场时,召唤一个海盗', - stone_zhihuiguan:'指挥官', - stone_jiangong:'监工', - stone_yuanhou:'猿猴', - stone_chidunshinv:'持盾侍女', - stone_zhujiashi:'铸甲师', - stone_kuangzhanshi:'狂战士', + stone_zhihuiguan:'指挥官', + stone_jiangong:'监工', + stone_yuanhou:'猿猴', + stone_chidunshinv:'持盾侍女', + stone_zhujiashi:'铸甲师', + stone_kuangzhanshi:'狂战士', - stone_heiyaoyaoshou:'黑曜妖兽', - stone_honglongyongshi:'红龙勇士', - stone_peilianshi:'陪练师', - stone_jingyingweishi:'精英卫士', - stone_shengjiachong:'圣甲虫', - stone_mengmaren:'猛犸人', - stone_zhifuzhe:'掷斧者', + stone_heiyaoyaoshou:'黑曜妖兽', + stone_honglongyongshi:'红龙勇士', + stone_peilianshi:'陪练师', + stone_jingyingweishi:'精英卫士', + stone_shengjiachong:'圣甲虫', + stone_mengmaren:'猛犸人', + stone_zhifuzhe:'掷斧者', - warrior_heiyao:'黑曜', - warrior_heiyao_info:'在己方主将的结束阶段,召唤一只圣甲虫', - warrior_peilian:'陪练', - warrior_peilian_info:'你出场时,己方主将可令一名其他随从获得嘲讽', - warrior_fenyong:'奋勇', - warrior_fenyong_info:'你出场时,若己方主将手牌中有随从牌,则获得冲锋', - warrior_chuanci:'穿刺', - warrior_chuanci_info:'每当你对一名敌方随从造成伤害,对另一名随机敌方随从造成等量的伤害', - warrior_zhifu:'掷斧', - warrior_zhifu_info:'每当你受到一次伤害,对敌方主将造成一点伤害', + warrior_heiyao:'黑曜', + warrior_heiyao_info:'在己方主将的结束阶段,召唤一只圣甲虫', + warrior_peilian:'陪练', + warrior_peilian_info:'你出场时,己方主将可令一名其他随从获得嘲讽', + warrior_fenyong:'奋勇', + warrior_fenyong_info:'你出场时,若己方主将手牌中有随从牌,则获得冲锋', + warrior_chuanci:'穿刺', + warrior_chuanci_info:'每当你对一名敌方随从造成伤害,对另一名随机敌方随从造成等量的伤害', + warrior_zhifu:'掷斧', + warrior_zhifu_info:'每当你受到一次伤害,对敌方主将造成一点伤害', - warrior_tongling:'统领', - warrior_tongling_info:'每当你召唤一个初始手牌数不大于2的随从,令其获得冲锋', - warrior_baoluan:'暴乱', - warrior_baoluan_info:'每当一名随从受到一次伤害,摸一张牌', - warrior_jiangong:'监工', - warrior_jiangong_info:'你出场时,己方主将可对一名随从造成一点伤害,然后令该随从摸两张牌', - warrior_zhujia:'铸甲', - warrior_zhujia_info:'每当你受到一次伤害,己方主将获得一点护甲', - warrior_tidun:'提盾', - warrior_tidun_info:'你出场时,己方主将获得两点护甲', + warrior_tongling:'统领', + warrior_tongling_info:'每当你召唤一个初始手牌数不大于2的随从,令其获得冲锋', + warrior_baoluan:'暴乱', + warrior_baoluan_info:'每当一名随从受到一次伤害,摸一张牌', + warrior_jiangong:'监工', + warrior_jiangong_info:'你出场时,己方主将可对一名随从造成一点伤害,然后令该随从摸两张牌', + warrior_zhujia:'铸甲', + warrior_zhujia_info:'每当你受到一次伤害,己方主将获得一点护甲', + warrior_tidun:'提盾', + warrior_tidun_info:'你出场时,己方主将获得两点护甲', - stone_lieyanxiaogui:'烈焰小鬼', - stone_xiaoguishouling:'小鬼首领', - stone_kongjuzhanma:'恐惧战马', - stone_morishouwei:'末日守卫', - stone_xukongxingzhe:'虚空行者', - stone_diyuhuo:'地狱火', - stone_diyuhuox:'地狱火', - stone_xiaogui:'小鬼', + stone_lieyanxiaogui:'烈焰小鬼', + stone_xiaoguishouling:'小鬼首领', + stone_kongjuzhanma:'恐惧战马', + stone_morishouwei:'末日守卫', + stone_xukongxingzhe:'虚空行者', + stone_diyuhuo:'地狱火', + stone_diyuhuox:'地狱火', + stone_xiaogui:'小鬼', - stone_heishitanfan:'黑市摊贩', - stone_zhaohuanzhe:'召唤者', - stone_meimo:'魅魔', - stone_tongkunvwang:'痛苦女王', - stone_xukongkongmo:'虚空恐魔', - stone_fukongmoyan:'浮空魔眼', + stone_heishitanfan:'黑市摊贩', + stone_zhaohuanzhe:'召唤者', + stone_meimo:'魅魔', + stone_tongkunvwang:'痛苦女王', + stone_xukongkongmo:'虚空恐魔', + stone_fukongmoyan:'浮空魔眼', - warlock_anyu:'暗语', - warlock_anyu_info:'你出场时,己方主将从三张随机的行动值消耗为1的牌中选择一张加入手牌', - warlock_zhaohuan:'召唤', - warlock_zhaohuan_info:'你死亡时,将手牌中的一张随机随从牌置入战场', - warlock_huanmeng:'幻梦', - warlock_huanmeng_info:'你出场时,己方主将随机弃置一张手牌', - warlock_tongku:'痛苦', - warlock_tongku_info:'每当你造成一次伤害,令己方主将回复一点体力', - warlock_tunshi:'吞噬', - warlock_tunshi_info:'你出场时,己方主将须令一名其他友方随从死亡,然后你获得其全部的手牌和体力值', - warlock_shijie:'视界', - warlock_shijie_info:'每当己方主将受到一次伤害,你增加一点体力和体力上限并摸一张牌', + warlock_anyu:'暗语', + warlock_anyu_info:'你出场时,己方主将从三张随机的行动值消耗为1的牌中选择一张加入手牌', + warlock_zhaohuan:'召唤', + warlock_zhaohuan_info:'你死亡时,将手牌中的一张随机随从牌置入战场', + warlock_huanmeng:'幻梦', + warlock_huanmeng_info:'你出场时,己方主将随机弃置一张手牌', + warlock_tongku:'痛苦', + warlock_tongku_info:'每当你造成一次伤害,令己方主将回复一点体力', + warlock_tunshi:'吞噬', + warlock_tunshi_info:'你出场时,己方主将须令一名其他友方随从死亡,然后你获得其全部的手牌和体力值', + warlock_shijie:'视界', + warlock_shijie_info:'每当己方主将受到一次伤害,你增加一点体力和体力上限并摸一张牌', - warlock_nonghuo:'弄火', - warlock_nonghuo_info:'你出场时,对己方主将造成1点火焰伤害', - warlock_zhaogui:'召鬼', - warlock_zhaogui_info:'每当你受到一次伤害,召唤一个小鬼', - warlock_yongsheng:'永生', - warlock_yongsheng_info:'你死亡后,召唤一匹恐惧战马', - warlock_yuhuo:'狱火', - warlock_yuhuo_info:'你出场时,对所有其他随从造成一点伤害', - warlock_zaihuo:'灾祸', - warlock_zaihuo_info:'你出场时,随机弃置主将的两张手牌', + warlock_nonghuo:'弄火', + warlock_nonghuo_info:'你出场时,对己方主将造成1点火焰伤害', + warlock_zhaogui:'召鬼', + warlock_zhaogui_info:'每当你受到一次伤害,召唤一个小鬼', + warlock_yongsheng:'永生', + warlock_yongsheng_info:'你死亡后,召唤一匹恐惧战马', + warlock_yuhuo:'狱火', + warlock_yuhuo_info:'你出场时,对所有其他随从造成一点伤害', + warlock_zaihuo:'灾祸', + warlock_zaihuo_info:'你出场时,随机弃置主将的两张手牌', - stone_hudunren:'护盾人', - stone_junxuguan:'军需官', - stone_yurenqishi:'鱼人骑士', - stone_chidunweishi:'持盾卫士', - stone_liewangshouwei:'列王守卫', - stone_longwangpeiou:'龙王配偶', + stone_hudunren:'护盾人', + stone_junxuguan:'军需官', + stone_yurenqishi:'鱼人骑士', + stone_chidunweishi:'持盾卫士', + stone_liewangshouwei:'列王守卫', + stone_longwangpeiou:'龙王配偶', - stone_baoweizhe:'保卫者', - stone_guiqishi:'龟骑士', - stone_shenmiqishou:'神秘骑手', - stone_shixiangweishi:'石像卫士', - stone_xuefanzhanshi:'血帆战士', - stone_xunmashi:'训马师', + stone_baoweizhe:'保卫者', + stone_guiqishi:'龟骑士', + stone_shenmiqishou:'神秘骑手', + stone_shixiangweishi:'石像卫士', + stone_xuefanzhanshi:'血帆战士', + stone_xunmashi:'训马师', - paladin_baowei:'保卫', - paladin_baowei_info:'你出场时,己方主将可令一名其他随从获得一点护甲', - paladin_tuxi:'吐息', - paladin_tuxi_info:'你出场时,己方主将进行一次判定,若为红色,则回复一点体力', - paladin_miying:'秘影', - paladin_miying_info:'你出场时,依次将牌堆中的所有不重名的判定牌置入敌方主将的判定区', - paladin_huashi:'化石', - paladin_huashi_info:'你出场时,己方主将可将一名其他随从的体力值及体力上限变为2', - paladin_jinghua:'净化', - paladin_jinghua_info:'你出场时,对所有手牌数大于1的随从造成两点伤害', - paladin_moma:'秣马', - paladin_moma2:'秣马', - paladin_moma_info:'所有友方新兵摸牌阶段摸牌数+1', + paladin_baowei:'保卫', + paladin_baowei_info:'你出场时,己方主将可令一名其他随从获得一点护甲', + paladin_tuxi:'吐息', + paladin_tuxi_info:'你出场时,己方主将进行一次判定,若为红色,则回复一点体力', + paladin_miying:'秘影', + paladin_miying_info:'你出场时,依次将牌堆中的所有不重名的判定牌置入敌方主将的判定区', + paladin_huashi:'化石', + paladin_huashi_info:'你出场时,己方主将可将一名其他随从的体力值及体力上限变为2', + paladin_jinghua:'净化', + paladin_jinghua_info:'你出场时,对所有手牌数大于1的随从造成两点伤害', + paladin_moma:'秣马', + paladin_moma2:'秣马', + paladin_moma_info:'所有友方新兵摸牌阶段摸牌数+1', - paladin_zhaohuan:'召唤', - paladin_zhaohuan2:'召唤', - paladin_zhaohuan_info:'你出场后,你的主将在使用下一张随从牌时获得两点行动值', - paladin_shouwei:'守卫', - paladin_shouwei_info:'你出场时,你的主将回复两点体力值', - paladin_chidun:'持盾', - paladin_chidun_info:'你出场时,己方主将可以弃置对方一名随从的所有牌', - paladin_buji:'补给', - paladin_buji_info:'你出场时,所有友方新兵增加一点体力和体力上限并摸两张牌', - paladin_hudun:'护盾', - paladin_hudun_info:'你出场时,获得一点护甲值', - paladin_zhaochao:'招潮', - paladin_zhaochao_info:'每当你的主将使用一次英雄技能,便摸两张牌', + paladin_zhaohuan:'召唤', + paladin_zhaohuan2:'召唤', + paladin_zhaohuan_info:'你出场后,你的主将在使用下一张随从牌时获得两点行动值', + paladin_shouwei:'守卫', + paladin_shouwei_info:'你出场时,你的主将回复两点体力值', + paladin_chidun:'持盾', + paladin_chidun_info:'你出场时,己方主将可以弃置对方一名随从的所有牌', + paladin_buji:'补给', + paladin_buji_info:'你出场时,所有友方新兵增加一点体力和体力上限并摸两张牌', + paladin_hudun:'护盾', + paladin_hudun_info:'你出场时,获得一点护甲值', + paladin_zhaochao:'招潮', + paladin_zhaochao_info:'每当你的主将使用一次英雄技能,便摸两张牌', - stone_shifazhe:'嗜法者', - stone_wushixuetu:'巫师学徒', - stone_shuiyuansu:'水元素', - stone_falifulong:'法力浮龙', - stone_yingxiongzhihun:'英雄之魂', - stone_huoyao:'火妖', + stone_shifazhe:'嗜法者', + stone_wushixuetu:'巫师学徒', + stone_shuiyuansu:'水元素', + stone_falifulong:'法力浮龙', + stone_yingxiongzhihun:'英雄之魂', + stone_huoyao:'火妖', - stone_aoshushi:'奥术师', - stone_faqishi:'法骑士', - stone_fuhuokaijia:'复活铠甲', - stone_kaodalalong:'考达拉龙', - stone_yanshushi:'炎术士', - stone_xulingwushi:'虚灵巫师', + stone_aoshushi:'奥术师', + stone_faqishi:'法骑士', + stone_fuhuokaijia:'复活铠甲', + stone_kaodalalong:'考达拉龙', + stone_yanshushi:'炎术士', + stone_xulingwushi:'虚灵巫师', - mage_aoshu:'奥术', - mage_aoshu_info:'你出场时,将一张奥术智慧置入主将的手牌', - mage_jili:'激励', - mage_jili_info:'每当主将使用一次职业技能,摸一张牌', - mage_gushou:'固守', - mage_gushou_info:'每当己方主将受到多于1伤害时,防止其余伤害', - mage_yufa:'驭法', - mage_yufa_info:'每当己方主将使用一次职业技能,令其获得一点行动值', - mage_yanshu:'炎术', - mage_yanshu_info:'你出场时,造成X点火焰伤害,随机分配到敌方随从上,X为己方主将装备区内装备牌的数量', - mage_pingxu:'冯虚', - mage_pingxu_info:'你出场时,己方主将从三张随机法术牌中选择一张加入手牌', + mage_aoshu:'奥术', + mage_aoshu_info:'你出场时,将一张奥术智慧置入主将的手牌', + mage_jili:'激励', + mage_jili_info:'每当主将使用一次职业技能,摸一张牌', + mage_gushou:'固守', + mage_gushou_info:'每当己方主将受到多于1伤害时,防止其余伤害', + mage_yufa:'驭法', + mage_yufa_info:'每当己方主将使用一次职业技能,令其获得一点行动值', + mage_yanshu:'炎术', + mage_yanshu_info:'你出场时,造成X点火焰伤害,随机分配到敌方随从上,X为己方主将装备区内装备牌的数量', + mage_pingxu:'冯虚', + mage_pingxu_info:'你出场时,己方主将从三张随机法术牌中选择一张加入手牌', - mage_shifa:'嗜法', - mage_shifa_info:'你出场时,将一张随机法术牌置入双方主将的手牌', - mage_minghuo:'冥火', - mage_minghuo_info:'你的主将的职业技能造成的伤害+1', - mage_tunfa:'吞法', - mage_tunfa_info:'每当己方主将使用一张法术牌,摸一张牌', - mage_lieyan:'烈焰', - mage_lieyan_info:'每当己方主将使用一张法术牌,对一名随机敌方角色造成一点火焰伤害', - mage_zhufa:'助法', - mage_zhufa_info:'每当己方主将使用一张法术牌,令其获得一点行动值', - mage_bingdong:'冰冻', - mage_bingdong_info:'每当你对一个随从造成伤害,该随从将武将牌翻至背面', + mage_shifa:'嗜法', + mage_shifa_info:'你出场时,将一张随机法术牌置入双方主将的手牌', + mage_minghuo:'冥火', + mage_minghuo_info:'你的主将的职业技能造成的伤害+1', + mage_tunfa:'吞法', + mage_tunfa_info:'每当己方主将使用一张法术牌,摸一张牌', + mage_lieyan:'烈焰', + mage_lieyan_info:'每当己方主将使用一张法术牌,对一名随机敌方角色造成一点火焰伤害', + mage_zhufa:'助法', + mage_zhufa_info:'每当己方主将使用一张法术牌,令其获得一点行动值', + mage_bingdong:'冰冻', + mage_bingdong_info:'每当你对一个随从造成伤害,该随从将武将牌翻至背面', - stone_caoyuanshi:'草原狮', - stone_leiouke:'雷欧克', - stone_misha:'米莎', - stone_huofu:'霍弗', - stone_jiewangzhu:'结网蛛', - stone_xunshoushi:'驯兽师', + stone_caoyuanshi:'草原狮', + stone_leiouke:'雷欧克', + stone_misha:'米莎', + stone_huofu:'霍弗', + stone_jiewangzhu:'结网蛛', + stone_xunshoushi:'驯兽师', - stone_senlinlang:'森林狼', - stone_tujiu:'秃鹫', - stone_muyangren:'牧羊人', - stone_jujishou:'狙击手', - stone_damoshatuo:'大漠沙驼', - stone_huangjialeixiang:'皇家雷象', + stone_senlinlang:'森林狼', + stone_tujiu:'秃鹫', + stone_muyangren:'牧羊人', + stone_jujishou:'狙击手', + stone_damoshatuo:'大漠沙驼', + stone_huangjialeixiang:'皇家雷象', - hunter_jiewang:'结网', - hunter_jiewang_info:'你死亡时,己方主将获得一张随机野兽牌', - hunter_xunshou:'驯兽', - hunter_xunshou_info:'你出场时,己方主将可选择一名其他友方随从令其增加一点体力和体力上限,摸两张牌并获得嘲讽', - hunter_nuhou:'怒吼', - hunter_nuhou_info:'当你死亡时,对所有敌方角色造成一点伤害', - hunter_zhanhuo:'战火', - hunter_zhanhuo2:'战火', - hunter_zhanhuo_info:'其他友方随从摸牌阶段的摸牌数+1', + hunter_jiewang:'结网', + hunter_jiewang_info:'你死亡时,己方主将获得一张随机野兽牌', + hunter_xunshou:'驯兽', + hunter_xunshou_info:'你出场时,己方主将可选择一名其他友方随从令其增加一点体力和体力上限,摸两张牌并获得嘲讽', + hunter_nuhou:'怒吼', + hunter_nuhou_info:'当你死亡时,对所有敌方角色造成一点伤害', + hunter_zhanhuo:'战火', + hunter_zhanhuo2:'战火', + hunter_zhanhuo_info:'其他友方随从摸牌阶段的摸牌数+1', - hunter_qunxi:'群袭', - hunter_qunxi_info:'你出场时,所有友方随从摸一张牌', - hunter_mishi:'觅食', - hunter_mishi_info:'每当己方主将召唤一个随从,摸一张牌', - hunter_dusha:'渡沙', - hunter_dusha_info:'你出场时,令双方主将各随机使用一张牌库中的1费随从牌(不计入行动值消耗)', - hunter_chuanlin:'穿林', - hunter_chuanlin_info:'你出场时,己方主将展示牌库中的一张随机随从牌并获得之', - hunter_muyang:'牧羊', - hunter_muyang_info:'你出场时,随机召唤一个行动值消耗为X的随从,X为其他友方随从数', - hunter_juji:'狙击', - hunter_juji_info:'你的职业技能可以指定随从为目标', + hunter_qunxi:'群袭', + hunter_qunxi_info:'你出场时,所有友方随从摸一张牌', + hunter_mishi:'觅食', + hunter_mishi_info:'每当己方主将召唤一个随从,摸一张牌', + hunter_dusha:'渡沙', + hunter_dusha_info:'你出场时,令双方主将各随机使用一张牌库中的1费随从牌(不计入行动值消耗)', + hunter_chuanlin:'穿林', + hunter_chuanlin_info:'你出场时,己方主将展示牌库中的一张随机随从牌并获得之', + hunter_muyang:'牧羊', + hunter_muyang_info:'你出场时,随机召唤一个行动值消耗为X的随从,X为其他友方随从数', + hunter_juji:'狙击', + hunter_juji_info:'你的职业技能可以指定随从为目标', - stone_baoqishi:'豹骑士', - stone_conglinshouwei:'从林守卫', - stone_baohuzhishu:'保护之树', - stone_kuangyedoushi:'狂野斗士', - stone_liebao:'猎豹', - stone_zongxiong:'棕熊', + stone_baoqishi:'豹骑士', + stone_conglinshouwei:'从林守卫', + stone_baohuzhishu:'保护之树', + stone_kuangyedoushi:'狂野斗士', + stone_liebao:'猎豹', + stone_zongxiong:'棕熊', - stone_renyaqishi:'刃牙骑士', - stone_conglinxiaoshou:'丛林枭兽', - stone_huangyeqishi:'荒野骑士', - stone_xunmenglong:'迅猛龙', - stone_lindishuyao:'林地树妖', - stone_huoshanxiemu:'火山邪木', + stone_renyaqishi:'刃牙骑士', + stone_conglinxiaoshou:'丛林枭兽', + stone_huangyeqishi:'荒野骑士', + stone_xunmenglong:'迅猛龙', + stone_lindishuyao:'林地树妖', + stone_huoshanxiemu:'火山邪木', - druid_renya:'刃牙', - druid_renya_info:'你出场时,己方主将可以选择一项:令你摸一张牌并将武将牌翻至正面,或令你增加一点体力上限并获得技能潜行', - druid_yuehuo:'月火', - druid_yuehuo_info:'所有锦囊牌造成的伤害+1', - druid_qicheng:'骑乘', - druid_qicheng_info:'你死亡时,随机召唤一个行动消耗为1的随从', - druid_chicheng:'驰骋', - druid_chicheng_info:'你出场时,己方主将获得X点行动值,X为其他友方随从数', - druid_yeyou:'夜游', - druid_yeyou_info:'双方主将各从牌库中获得一张牌', - druid_juhuo:'举火', - druid_juhuo_info:'己方主将回合内,每有一名随从死亡,令己方主将获得一点行动值', + druid_renya:'刃牙', + druid_renya_info:'你出场时,己方主将可以选择一项:令你摸一张牌并将武将牌翻至正面,或令你增加一点体力上限并获得技能潜行', + druid_yuehuo:'月火', + druid_yuehuo_info:'所有锦囊牌造成的伤害+1', + druid_qicheng:'骑乘', + druid_qicheng_info:'你死亡时,随机召唤一个行动消耗为1的随从', + druid_chicheng:'驰骋', + druid_chicheng_info:'你出场时,己方主将获得X点行动值,X为其他友方随从数', + druid_yeyou:'夜游', + druid_yeyou_info:'双方主将各从牌库中获得一张牌', + druid_juhuo:'举火', + druid_juhuo_info:'己方主将回合内,每有一名随从死亡,令己方主将获得一点行动值', - stone_chongfeng:'冲锋', - stone_chongfeng_info:'你出场时,立即将武将牌翻至正面', - druid_nuhuo:'怒火', - druid_nuhuo_info:'每当己方主将使用一次职业技能,便对一名随机敌人造成一点伤害', - druid_chengzhang:'成长', - druid_chengzhang2:'成长', - druid_chengzhang_info:'你出场时,己方主将获得一点行动值;你死亡时,己方主将需弃置一张手牌', - druid_huwei:'护卫', - druid_huwei_info:'你出场时,己方主将可以选择一项:对一名随从造成一点伤害,或弃置一名随从的所有牌并将其体力上限改为2', + stone_chongfeng:'冲锋', + stone_chongfeng_info:'你出场时,立即将武将牌翻至正面', + druid_nuhuo:'怒火', + druid_nuhuo_info:'每当己方主将使用一次职业技能,便对一名随机敌人造成一点伤害', + druid_chengzhang:'成长', + druid_chengzhang2:'成长', + druid_chengzhang_info:'你出场时,己方主将获得一点行动值;你死亡时,己方主将需弃置一张手牌', + druid_huwei:'护卫', + druid_huwei_info:'你出场时,己方主将可以选择一项:对一名随从造成一点伤害,或弃置一名随从的所有牌并将其体力上限改为2', - stone_fachao:'法潮图腾', - stone_tutengyongshi:'图腾勇士', - stone_huoshe:'火舌图腾', - stone_huoyuansu:'火元素', - stone_tuyuansu:'土元素', - stone_wujiyuansu:'无羁元素', - stone_xuejuren:'穴居人', - stone_huoli:'活力图腾', - stone_tutengshi:'图腾师', - stone_shachuisaman:'砂槌萨满', - stone_huoyanweishi:'火焰卫士', - stone_wanshiyuansu:'顽石元素', - stone_shalinxingzhe:'砂鳞行者', + stone_fachao:'法潮图腾', + stone_tutengyongshi:'图腾勇士', + stone_huoshe:'火舌图腾', + stone_huoyuansu:'火元素', + stone_tuyuansu:'土元素', + stone_wujiyuansu:'无羁元素', + stone_xuejuren:'穴居人', + stone_huoli:'活力图腾', + stone_tutengshi:'图腾师', + stone_shachuisaman:'砂槌萨满', + stone_huoyanweishi:'火焰卫士', + stone_wanshiyuansu:'顽石元素', + stone_shalinxingzhe:'砂鳞行者', - shaman_anhun:'暗魂', - shaman_anhun_info:'每当一名友方随从死亡,令主将从牌库中获得一张牌', - shaman_zoushi:'走石', - shaman_zoushi_info:'每当己方主将使用一张随从牌,对一名随机敌方角色造成一点伤害', - shaman_zhuhuo:'逐火', - shaman_zhuhuo_info:'你出场时,摸1~3张牌', - shaman_peiyu:'培育', - shaman_peiyu_info:'你出场时,增加X点体力和体力上限,X为友方图腾数', - shaman_huoli:'活力', - shaman_huoli_info:'己方主将出牌阶段开始时,你令其获得一点行动值', - shaman_xueju:'穴居', - shaman_xueju_info:'每当己主将使用一张随从牌,摸一张牌', - shaman_huoxi:'火袭', - shaman_huoxi_info:'你出场时,己方主将可以对对方一名随从造成两点火焰伤害', - shaman_fachao:'法潮', - shaman_fachao_info:'己方主将在其每个回合结束阶从牌库中获得一张牌并回复一点体力', - shaman_huoshe:'火舌', - shaman_huoshe_info:'其他友方随从造成的伤害始终+1', + shaman_anhun:'暗魂', + shaman_anhun_info:'每当一名友方随从死亡,令主将从牌库中获得一张牌', + shaman_zoushi:'走石', + shaman_zoushi_info:'每当己方主将使用一张随从牌,对一名随机敌方角色造成一点伤害', + shaman_zhuhuo:'逐火', + shaman_zhuhuo_info:'你出场时,摸1~3张牌', + shaman_peiyu:'培育', + shaman_peiyu_info:'你出场时,增加X点体力和体力上限,X为友方图腾数', + shaman_huoli:'活力', + shaman_huoli_info:'己方主将出牌阶段开始时,你令其获得一点行动值', + shaman_xueju:'穴居', + shaman_xueju_info:'每当己主将使用一张随从牌,摸一张牌', + shaman_huoxi:'火袭', + shaman_huoxi_info:'你出场时,己方主将可以对对方一名随从造成两点火焰伤害', + shaman_fachao:'法潮', + shaman_fachao_info:'己方主将在其每个回合结束阶从牌库中获得一张牌并回复一点体力', + shaman_huoshe:'火舌', + shaman_huoshe_info:'其他友方随从造成的伤害始终+1', - shaman_jili:'激励', - shaman_jili_info:'己方主将的结束阶段,所有友方图腾摸一张牌', - shaman_tuteng:'图腾', - shaman_tuteng_info:'你跳过摸牌阶段', - shaman_fali:'空气', - shaman_fali_info:'已方主将使用的法术牌伤害+1', - shaman_zhiliao:'治疗', - shaman_zhiliao_info:'在你的结束阶段,令所有友方随从回复一点体力', - shaman_zhuore:'灼热', - shaman_zhuore_info:'已方主将的结束阶段,对一名随机敌方随从造成一点伤害', + shaman_jili:'激励', + shaman_jili_info:'己方主将的结束阶段,所有友方图腾摸一张牌', + shaman_tuteng:'图腾', + shaman_tuteng_info:'你跳过摸牌阶段', + shaman_fali:'空气', + shaman_fali_info:'已方主将使用的法术牌伤害+1', + shaman_zhiliao:'治疗', + shaman_zhiliao_info:'在你的结束阶段,令所有友方随从回复一点体力', + shaman_zhuore:'灼热', + shaman_zhuore_info:'已方主将的结束阶段,对一名随机敌方随从造成一点伤害', - _shaman_skill:'图腾', - _shaman_skill_info:'召唤一个随机图腾', - _mage_skill:'火冲', - _mage_skill_info:'对一名随从造成一点火焰伤害', - _priest_skill:'治疗', - _priest_skill_info:'回复一点体力', - _priest_skillx:'心刺', - _priest_skillx_info:'造成一点伤害', - _warrior_skill:'战甲', - _warrior_skill_info:'获得一点护甲(不能超过3点)', - _warlock_skill:'分流', - _warlock_skill_info:'从牌库中获得两张牌', - _warlock_skillx:'炼狱', - _warlock_skillx_info:'召唤一个地狱火', - _rogue_skill:'出鞘', - _rogue_skill_info:'装备一把武器和一个随机非武器装备', - _paladin_skill:'动员', - _paladin_skill_info:'召唤一名士兵', - _hunter_skill:'射击', - _hunter_skill_info:'对敌方主将造成一点伤害', - _druid_skill:'猛击', - _druid_skill_info:'视为使用一张不计入出杀次数的杀', + _shaman_skill:'图腾', + _shaman_skill_info:'召唤一个随机图腾', + _mage_skill:'火冲', + _mage_skill_info:'对一名随从造成一点火焰伤害', + _priest_skill:'治疗', + _priest_skill_info:'回复一点体力', + _priest_skillx:'心刺', + _priest_skillx_info:'造成一点伤害', + _warrior_skill:'战甲', + _warrior_skill_info:'获得一点护甲(不能超过3点)', + _warlock_skill:'分流', + _warlock_skill_info:'从牌库中获得两张牌', + _warlock_skillx:'炼狱', + _warlock_skillx_info:'召唤一个地狱火', + _rogue_skill:'出鞘', + _rogue_skill_info:'装备一把武器和一个随机非武器装备', + _paladin_skill:'动员', + _paladin_skill_info:'召唤一名士兵', + _hunter_skill:'射击', + _hunter_skill_info:'对敌方主将造成一点伤害', + _druid_skill:'猛击', + _druid_skill_info:'视为使用一张不计入出杀次数的杀', - stone_tuteng1:'石爪图腾', - stone_tuteng2:'灼热图腾', - stone_tuteng3:'空气图腾', - stone_tuteng4:'治疗图腾', + stone_tuteng1:'石爪图腾', + stone_tuteng2:'灼热图腾', + stone_tuteng3:'空气图腾', + stone_tuteng4:'治疗图腾', - stone_xinbing:'新兵', + stone_xinbing:'新兵', - stone_zhongshi:'中士', - stone_zhongshi1:'叫嚣', - stone_zhongshi1_info:'你出场时,己方主将可以弃置对方一名随从的所有牌', - stone_zhucangzhe:'伫藏者', - stone_zhucangzhe1:'伫藏', - stone_zhucangzhe1_info:'你出场时,己方主将可以令己方一名其他角色摸一张牌', - stone_huoqiangshou:'火枪手', - stone_huoqiangshou1:'火枪', - stone_huoqiangshou1_info:'你出场时,己方主将可以对对方一名随从造成一点伤害', + stone_zhongshi:'中士', + stone_zhongshi1:'叫嚣', + stone_zhongshi1_info:'你出场时,己方主将可以弃置对方一名随从的所有牌', + stone_zhucangzhe:'伫藏者', + stone_zhucangzhe1:'伫藏', + stone_zhucangzhe1_info:'你出场时,己方主将可以令己方一名其他角色摸一张牌', + stone_huoqiangshou:'火枪手', + stone_huoqiangshou1:'火枪', + stone_huoqiangshou1_info:'你出场时,己方主将可以对对方一名随从造成一点伤害', - stone_lansaizhanshi:'蓝腮战士', - stone_kutongsiseng:'苦痛侍僧', - stone_kutongsiseng1:'苦痛', - stone_kutongsiseng2:'苦痛', - stone_kutongsiseng1_info:'你出场时,己方主将于本结束阶段摸一张牌', - stone_yuanguanying:'远古暗影', - stone_yuanguanying1:'暗影', - stone_yuanguanying1_info:'你出场时,己方主将可视为对一名敌方角色使用一张杀', + stone_lansaizhanshi:'蓝腮战士', + stone_kutongsiseng:'苦痛侍僧', + stone_kutongsiseng1:'苦痛', + stone_kutongsiseng2:'苦痛', + stone_kutongsiseng1_info:'你出场时,己方主将于本结束阶段摸一张牌', + stone_yuanguanying:'远古暗影', + stone_yuanguanying1:'暗影', + stone_yuanguanying1_info:'你出场时,己方主将可视为对一名敌方角色使用一张杀', - stone_dijieshicong:'低阶侍从', - stone_dijieshicong1:'持枪', - stone_dijieshicong1_info:'你出场时,敌方主将随机弃置一张装备牌', - stone_yaosaishouwei:'要塞守卫', - stone_yaosaishouwei1:'守卫', - stone_yaosaishouwei1_info:'你出场时,己方主将本回合手牌上限+2', - stone_famingjia:'发明家', - stone_famingjia1:'发明', - stone_famingjia1_info:'你出场时,己方主将摸两张牌', + stone_dijieshicong:'低阶侍从', + stone_dijieshicong1:'持枪', + stone_dijieshicong1_info:'你出场时,敌方主将随机弃置一张装备牌', + stone_yaosaishouwei:'要塞守卫', + stone_yaosaishouwei1:'守卫', + stone_yaosaishouwei1_info:'你出场时,己方主将本回合手牌上限+2', + stone_famingjia:'发明家', + stone_famingjia1:'发明', + stone_famingjia1_info:'你出场时,己方主将摸两张牌', - stone_chilundashi:'齿轮大师', - stone_chilundashi1:'齿轮', - stone_chilundashi2:'齿轮', - stone_chilundashi1_info:'你出场后的第一个摸牌阶段摸牌数+1', - stone_hanguangzhizhe:'寒光智者', - stone_hanguangzhizhe1:'寒光', - stone_hanguangzhizhe1_info:'你出场时,所有其他随从各摸一张牌', - stone_aihaozhihun:'哀嚎之魂', - stone_aihaozhihun1:'哀嚎', - stone_aihaozhihun1_info:'你出场时,敌方随从弃置所有牌', + stone_chilundashi:'齿轮大师', + stone_chilundashi1:'齿轮', + stone_chilundashi2:'齿轮', + stone_chilundashi1_info:'你出场后的第一个摸牌阶段摸牌数+1', + stone_hanguangzhizhe:'寒光智者', + stone_hanguangzhizhe1:'寒光', + stone_hanguangzhizhe1_info:'你出场时,所有其他随从各摸一张牌', + stone_aihaozhihun:'哀嚎之魂', + stone_aihaozhihun1:'哀嚎', + stone_aihaozhihun1_info:'你出场时,敌方随从弃置所有牌', - stone_fennuxiaoji:'愤怒小鸡', - stone_fennuxiaoji1:'暴怒', - stone_fennuxiaoji1_info:'准备阶段,若你没有手牌,你摸两张牌', - stone_juxingchanchu:'巨型蟾蜍', - stone_juxingchanchu1:'毒液', - stone_juxingchanchu1_info:'你死亡时,己方主将可令一名敌方随从失去1点体力', - stone_shishigui:'食尸鬼', - stone_shishigui1:'食尸', - stone_shishigui1_info:'你死亡后,场上所有其他随从失去1点体力', - stone_wuyi:'巫医', - stone_langren:'狼人', - stone_qianxing:'潜行', - stone_qianxing_info:'你出场时,获得潜行直到下一回合开始', + stone_fennuxiaoji:'愤怒小鸡', + stone_fennuxiaoji1:'暴怒', + stone_fennuxiaoji1_info:'准备阶段,若你没有手牌,你摸两张牌', + stone_juxingchanchu:'巨型蟾蜍', + stone_juxingchanchu1:'毒液', + stone_juxingchanchu1_info:'你死亡时,己方主将可令一名敌方随从失去1点体力', + stone_shishigui:'食尸鬼', + stone_shishigui1:'食尸', + stone_shishigui1_info:'你死亡后,场上所有其他随从失去1点体力', + stone_wuyi:'巫医', + stone_langren:'狼人', + stone_qianxing:'潜行', + stone_qianxing_info:'你出场时,获得潜行直到下一回合开始', - stone_mingguangjisi:'明光祭司', - stone_nianqingjisi:'年轻祭司', - stone_zhufu:'祝福', - stone_zhufu_info:'己方主将的结束阶段,你令一名随机的受伤友方随从回复一点体力', - stone_aomishouwei:'奥秘守卫', - stone_yanjingshe:'眼镜蛇', - stone_yanjingshe1:'毒噬', - stone_yanjingshe1_info:'你出场时,若敌方随从数不少于己方,则随机杀死一名随从', - stone_zhiyuzhe:'治愈者', - stone_zhiyu:'治愈', - stone_zhiyu_info:'你出场时,令所有友方随从回复一点体力', - stone_mafengzhuru:'麻风侏儒', - stone_mafengzhuru1:'麻风', - stone_mafengzhuru1_info:'杀死你的随从失去一点体力', - stone_fatiaozhuru:'发条侏儒', - stone_fatiaozhuru1:'发条', - stone_fatiaozhuru1_info:'结束阶段,若你没有手牌,你摸两张牌', + stone_mingguangjisi:'明光祭司', + stone_nianqingjisi:'年轻祭司', + stone_zhufu:'祝福', + stone_zhufu_info:'己方主将的结束阶段,你令一名随机的受伤友方随从回复一点体力', + stone_aomishouwei:'奥秘守卫', + stone_yanjingshe:'眼镜蛇', + stone_yanjingshe1:'毒噬', + stone_yanjingshe1_info:'你出场时,若敌方随从数不少于己方,则随机杀死一名随从', + stone_zhiyuzhe:'治愈者', + stone_zhiyu:'治愈', + stone_zhiyu_info:'你出场时,令所有友方随从回复一点体力', + stone_mafengzhuru:'麻风侏儒', + stone_mafengzhuru1:'麻风', + stone_mafengzhuru1_info:'杀死你的随从失去一点体力', + stone_fatiaozhuru:'发条侏儒', + stone_fatiaozhuru1:'发条', + stone_fatiaozhuru1_info:'结束阶段,若你没有手牌,你摸两张牌', - stonesha:'进攻', - stonesha_info:'锁定技,你的装备牌均视为杀', - stoneshan:'格挡', - stoneshan_info:'锁定技,你的随从和法术牌均视为闪', + stonesha:'进攻', + stonesha_info:'锁定技,你的装备牌均视为杀', + stoneshan:'格挡', + stoneshan_info:'锁定技,你的随从和法术牌均视为闪', - stonecharacter:'随从', - spell_shengerpingdeng:'生而平等', - spell_shengerpingdeng_info:'将所有随从体力上限降为1', - spell_jingshenkongzhi:'精神控制', - spell_jingshenkongzhi_info:'将一名敌方随从吸收为己方', - spell_anyingkuangluan:'暗影狂乱', - spell_anyingkuangluan_info:'将一名手牌数不超过1的敌方随从吸收为己方,并令其于下个回合结束后死亡', - spell_anyingkuangluan_die:'暗影狂乱', - spell_anyingkuangluan_die_info:'下个回合结束后死亡', - spell_binghuan:'冰环', - spell_binghuan_info:'将场上所有随从翻面', - spell_morizaihuo:'末日灾祸', - spell_morizaihuo_info:'令场上所有随从立即死亡,回复两点体力', - spell_zhiliaozhichu:'治疗之触', - spell_zhiliaozhichu_info:'令目标随从恢复所有体力值并获得嘲讽', - chaofeng:'嘲讽', - chaofeng_info:'同阵营的无嘲讽角色不以能成为杀的目标', - spell_wangzhezhufu:'王者祝福', - spell_wangzhezhufu_info:'令一名随从增加两点体力和体力上限并摸两张牌', - spell_diyulieyan:'地狱烈焰', - spell_diyulieyan_info:'所有角色失去一点体力', - spell_chenmo:'沉默', - spell_chenmo_info:'弃置一名随从的所有牌,并令其体力上限减至2', - spell_zhiliaoshui:'治疗水', - spell_zhiliaoshui_info:'出牌阶段对自己使用,恢复两点体力值;或于濒死阶段对一名角色使用,令目标恢复一点体力', - spell_yanmie:'极恶之咒', - spell_yanmie_info:'交换你与敌方主将的装备区,并摸若干张牌直到你的手牌数与敌方主将相等', - spell_xiaoshi:'消失', - spell_xiaoshi_info:'令敌方主将将所有装备区内的牌收入手牌,并弃置其若干张手牌,直到其手牌数与你相等', + stonecharacter:'随从', + spell_shengerpingdeng:'生而平等', + spell_shengerpingdeng_info:'将所有随从体力上限降为1', + spell_jingshenkongzhi:'精神控制', + spell_jingshenkongzhi_info:'将一名敌方随从吸收为己方', + spell_anyingkuangluan:'暗影狂乱', + spell_anyingkuangluan_info:'将一名手牌数不超过1的敌方随从吸收为己方,并令其于下个回合结束后死亡', + spell_anyingkuangluan_die:'暗影狂乱', + spell_anyingkuangluan_die_info:'下个回合结束后死亡', + spell_binghuan:'冰环', + spell_binghuan_info:'将场上所有随从翻面', + spell_morizaihuo:'末日灾祸', + spell_morizaihuo_info:'令场上所有随从立即死亡,回复两点体力', + spell_zhiliaozhichu:'治疗之触', + spell_zhiliaozhichu_info:'令目标随从恢复所有体力值并获得嘲讽', + chaofeng:'嘲讽', + chaofeng_info:'同阵营的无嘲讽角色不以能成为杀的目标', + spell_wangzhezhufu:'王者祝福', + spell_wangzhezhufu_info:'令一名随从增加两点体力和体力上限并摸两张牌', + spell_diyulieyan:'地狱烈焰', + spell_diyulieyan_info:'所有角色失去一点体力', + spell_chenmo:'沉默', + spell_chenmo_info:'弃置一名随从的所有牌,并令其体力上限减至2', + spell_zhiliaoshui:'治疗水', + spell_zhiliaoshui_info:'出牌阶段对自己使用,恢复两点体力值;或于濒死阶段对一名角色使用,令目标恢复一点体力', + spell_yanmie:'极恶之咒', + spell_yanmie_info:'交换你与敌方主将的装备区,并摸若干张牌直到你的手牌数与敌方主将相等', + spell_xiaoshi:'消失', + spell_xiaoshi_info:'令敌方主将将所有装备区内的牌收入手牌,并弃置其若干张手牌,直到其手牌数与你相等', - stonecard:'法术', - mode_stone_card_config:'炉石模式', - mode_stone_character_config:'炉石模式', - }, - help:{ - '炉石模式': - '
构筑
  • 点击右上角的卡组管理构建卡组
  • 一套卡组共30张牌,由法术和随从牌构成,每个同名卡牌最多带两张'+ - '
  • 卡组管理器中,随从右上角的x/y表示登场状态为x牌y血'+ - '
  • 游戏开始时,双方摸三张牌并从牌库中获得一张牌,并可选择将手牌置换一次'+ - '
  • 每当主将摸X张牌时,若X至少为2,则其中的X-1张牌从牌堆中获得,1张牌从牌库中获得'+ - '
  • 每名角色使用一套卡组,卡组用完后会重新补满'+ - '
  • 卡组与职业绑定,每个职业有一个专属技能,每回合限用一次,消耗两点行动值
'+ - '
职业技能
  • 祭司:召唤一个随机图腾'+ - '
  • 法师:对一名随从造成一点火焰伤害'+ - '
  • 牧师:回复一点体力'+ - '
  • 战士:获得一点护甲(不能超过3点)'+ - '
  • 术士:牌库中摸两张牌'+ - '
  • 潜行者:装备一把武器和一个随机非武器装备'+ - '
  • 圣骑士:召唤一名士兵'+ - '
  • 猎人:对敌方主将造成一点伤害'+ - '
  • 德鲁伊:视为使用一张不计入出杀次数的杀
'+ - '
怒气值
  • 每当友方随从受到伤害获得3点怒气值,主将受到伤害获得6点怒气值'+ - '
  • 每有一个友方随从死亡,获得10点怒气值,主将死亡获得20点怒气值'+ - '
  • 结束阶段,若己方随从数少于对方会获得10X点怒气值,X为随从数之差'+ - '
  • 怒气值达到100时不再增加。准备阶段,若怒气值己满,可消耗全部怒气值和4点行动值并召唤一名传说随从
'+ - '
战斗
  • 场上有两名主将进行对抗,主将的体力上限+1'+ - '
  • 游戏牌堆移除了乐不思蜀等跳过出牌阶段以及包含翻面功能的卡牌'+ - '
  • 主将出牌阶段的出牌数量(行动值)有上限,从1开始递增,后手的首个回合有一点额外行动值,装备牌不计入出牌上限
  • 游戏每进行一轮,主将的出牌上限+1,直到增加至6'+ - '
  • 使用随从牌可召唤一个随从,随从出场时背面朝上。每一方在场的随从数不能超过4
  • 随从于摸牌阶段摸牌基数为1,随从的法术和随从牌均视为闪,装备牌均视为杀
  • '+ - '随从与其他所有角色相互距离基数为1
  • '+ - '主将杀死对方随从后获得一个额外的行动值并从牌库中获得一张牌,杀死己方随从无惩罚,随从杀死随从无效果'+ - '
  • 主将在随从满员时可重铸随从牌,但回合内总的重铸次数不能超过3;若重铸的牌为随从牌或法术牌,则摸牌改为获得一张随机法术牌'+ - '
  • 嘲讽:若一方阵营中有嘲讽角色,则同阵营的无嘲讽角色不以能成为杀目标'+ - '
  • 行动顺序为先主将后随从。主将或随从死亡后立即移出游戏,主将死亡后替补登场,替补登场时摸3+X张牌,X为对方存活的随从数,无替补时游戏结束' - } - }; + stonecard:'法术', + mode_stone_card_config:'炉石模式', + mode_stone_character_config:'炉石模式', + }, + help:{ + '炉石模式': + '
    构筑
    • 点击右上角的卡组管理构建卡组
    • 一套卡组共30张牌,由法术和随从牌构成,每个同名卡牌最多带两张'+ + '
    • 卡组管理器中,随从右上角的x/y表示登场状态为x牌y血'+ + '
    • 游戏开始时,双方摸三张牌并从牌库中获得一张牌,并可选择将手牌置换一次'+ + '
    • 每当主将摸X张牌时,若X至少为2,则其中的X-1张牌从牌堆中获得,1张牌从牌库中获得'+ + '
    • 每名角色使用一套卡组,卡组用完后会重新补满'+ + '
    • 卡组与职业绑定,每个职业有一个专属技能,每回合限用一次,消耗两点行动值
    '+ + '
    职业技能
    • 祭司:召唤一个随机图腾'+ + '
    • 法师:对一名随从造成一点火焰伤害'+ + '
    • 牧师:回复一点体力'+ + '
    • 战士:获得一点护甲(不能超过3点)'+ + '
    • 术士:牌库中摸两张牌'+ + '
    • 潜行者:装备一把武器和一个随机非武器装备'+ + '
    • 圣骑士:召唤一名士兵'+ + '
    • 猎人:对敌方主将造成一点伤害'+ + '
    • 德鲁伊:视为使用一张不计入出杀次数的杀
    '+ + '
    怒气值
    • 每当友方随从受到伤害获得3点怒气值,主将受到伤害获得6点怒气值'+ + '
    • 每有一个友方随从死亡,获得10点怒气值,主将死亡获得20点怒气值'+ + '
    • 结束阶段,若己方随从数少于对方会获得10X点怒气值,X为随从数之差'+ + '
    • 怒气值达到100时不再增加。准备阶段,若怒气值己满,可消耗全部怒气值和4点行动值并召唤一名传说随从
    '+ + '
    战斗
    • 场上有两名主将进行对抗,主将的体力上限+1'+ + '
    • 游戏牌堆移除了乐不思蜀等跳过出牌阶段以及包含翻面功能的卡牌'+ + '
    • 主将出牌阶段的出牌数量(行动值)有上限,从1开始递增,后手的首个回合有一点额外行动值,装备牌不计入出牌上限
    • 游戏每进行一轮,主将的出牌上限+1,直到增加至6'+ + '
    • 使用随从牌可召唤一个随从,随从出场时背面朝上。每一方在场的随从数不能超过4
    • 随从于摸牌阶段摸牌基数为1,随从的法术和随从牌均视为闪,装备牌均视为杀
    • '+ + '随从与其他所有角色相互距离基数为1
    • '+ + '主将杀死对方随从后获得一个额外的行动值并从牌库中获得一张牌,杀死己方随从无惩罚,随从杀死随从无效果'+ + '
    • 主将在随从满员时可重铸随从牌,但回合内总的重铸次数不能超过3;若重铸的牌为随从牌或法术牌,则摸牌改为获得一张随机法术牌'+ + '
    • 嘲讽:若一方阵营中有嘲讽角色,则同阵营的无嘲讽角色不以能成为杀目标'+ + '
    • 行动顺序为先主将后随从。主将或随从死亡后立即移出游戏,主将死亡后替补登场,替补登场时摸3+X张牌,X为对方存活的随从数,无替补时游戏结束' + } + }; }); diff --git a/mode/tafang.js b/mode/tafang.js index de37c28de..cd48eadea 100644 --- a/mode/tafang.js +++ b/mode/tafang.js @@ -17,8 +17,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ ui.roundmenu.style.display=''; } if(lib.config.player_border=='normal'&&(lib.config.layout=='long'||lib.config.layout=='long2')){ - ui.arena.classList.add('lslim_player'); - } + ui.arena.classList.add('lslim_player'); + } for(var i in result.element){ for(var j in result.element[i]){ if(j!='dieAfter'){ @@ -50,27 +50,27 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } } } - // if(!localStorage.getItem(lib.configprefix+'playback')){ - // game.loadMap(); - // } + // if(!localStorage.getItem(lib.configprefix+'playback')){ + // game.loadMap(); + // } "step 2" var result='basic_medium'; _status.map=lib.tafang.map[result]; - _status.mapname=result; + _status.mapname=result; ui.chesssheet=document.createElement('style'); document.head.appendChild(ui.chesssheet); var playback=localStorage.getItem(lib.configprefix+'playback'); lib.mechlist=[]; - for(var i in lib.characterPack.mode_tafang){ - if(i.indexOf('tafang_mech_')==0){ + for(var i in lib.characterPack.mode_tafang){ + if(i.indexOf('tafang_mech_')==0){ lib.characterPack.mode_tafang[i][3].push(i+'_skill'); - lib.mechlist.push(i); - } - lib.character[i]=lib.characterPack.mode_tafang[i]; - if(!lib.character[i][4]){ - lib.character[i][4]=[]; - } - } + lib.mechlist.push(i); + } + lib.character[i]=lib.characterPack.mode_tafang[i]; + if(!lib.character[i][4]){ + lib.character[i][4]=[]; + } + } ui.create.cardsAsync(); game.finishCards(); game.addGlobalSkill('autoswap'); @@ -105,7 +105,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } } _status.mylist=[]; - _status.enemylist=[]; + _status.enemylist=[]; "step 3" ui.arena.classList.add('chess'); if(event.video){ @@ -115,7 +115,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ break; } } - _status.map=lib.tafang.map[_status.mapname]; + _status.map=lib.tafang.map[_status.mapname]; game.playerMap=lib.posmap; } ui.chesswidth=_status.map.size[0]; @@ -239,7 +239,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } } lib.init.onfree(); - event.trigger('gameStart'); + event.trigger('gameStart'); game.phaseLoopTafang(); }, element:{ @@ -295,19 +295,19 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, tafang:{ map:{ - basic_small:{ - name:'小型战场', + basic_small:{ + name:'小型战场', size:[6,11], obstacle:[] - }, - basic_medium:{ - name:'中型战场', + }, + basic_medium:{ + name:'中型战场', size:[9,11], - }, - basic_large:{ - name:'大型战场', + }, + basic_large:{ + name:'大型战场', size:[12,11], - }, + }, } }, game:{ @@ -777,8 +777,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }); }, loadMap:function(){ - var next=game.createEvent('loadMap'); - next.setContent(function(){ + var next=game.createEvent('loadMap'); + next.setContent(function(){ if(!lib.storage.map){ lib.storage.map=['basic_small','basic_medium','basic_large']; } @@ -790,10 +790,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ sceneview._scrollspeed=30; sceneview._scrollnum=10; sceneview.onmousewheel=function(){ - if(!this.classList.contains('lockscroll')){ - ui.click.mousewheel.apply(this,arguments); - } - }; + if(!this.classList.contains('lockscroll')){ + ui.click.mousewheel.apply(this,arguments); + } + }; } lib.setScroll(sceneview); var switchScene=function(){ @@ -801,125 +801,125 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ sceneview.delete(); setTimeout(game.resume,300); } - var clickScene=function(e){ - if(this.classList.contains('unselectable')) return; - if(this._clicking) return; - if(e&&e.stopPropagation) e.stopPropagation(); - if(this.classList.contains('flipped')){ - return; - } + var clickScene=function(e){ + if(this.classList.contains('unselectable')) return; + if(this._clicking) return; + if(e&&e.stopPropagation) e.stopPropagation(); + if(this.classList.contains('flipped')){ + return; + } if(this.classList.contains('glow3')){ this.classList.remove('glow3'); lib.storage.newmap.remove(this.name); game.save('newmap',lib.storage.newmap); } - var sceneNode=this.parentNode; - var current=document.querySelector('.flipped.scene'); - if(current){ - restoreScene(current,true); - } - this.content.innerHTML=''; + var sceneNode=this.parentNode; + var current=document.querySelector('.flipped.scene'); + if(current){ + restoreScene(current,true); + } + this.content.innerHTML=''; ui.create.div('.menubutton.large.enter','进入',this.content,switchScene).link=this.name; - sceneNode.classList.add('lockscroll'); - var node=this; - node._clicking=true; - setTimeout(function(){ - node._clicking=false; - },700); - sceneNode.dx=ui.window.offsetWidth/2-(-sceneNode.scrollLeft+this.offsetLeft+this.offsetWidth/2); - if(Math.abs(sceneNode.dx)<20){ - sceneNode.dx=0; - } - if(!sceneNode.sceneInterval&&sceneNode.dx){ - sceneNode.sceneInterval=setInterval(function(){ - var dx=sceneNode.dx; - if(Math.abs(dx)<=2){ - sceneNode.scrollLeft-=dx; - clearInterval(sceneNode.sceneInterval); - delete sceneNode.sceneInterval; - } - else{ - var ddx=dx/Math.sqrt(Math.abs(dx))*1.5; - sceneNode.scrollLeft-=ddx; - sceneNode.dx-=ddx; - } - },16); - } - node.style.transition='all ease-in 0.2s'; + sceneNode.classList.add('lockscroll'); + var node=this; + node._clicking=true; + setTimeout(function(){ + node._clicking=false; + },700); + sceneNode.dx=ui.window.offsetWidth/2-(-sceneNode.scrollLeft+this.offsetLeft+this.offsetWidth/2); + if(Math.abs(sceneNode.dx)<20){ + sceneNode.dx=0; + } + if(!sceneNode.sceneInterval&&sceneNode.dx){ + sceneNode.sceneInterval=setInterval(function(){ + var dx=sceneNode.dx; + if(Math.abs(dx)<=2){ + sceneNode.scrollLeft-=dx; + clearInterval(sceneNode.sceneInterval); + delete sceneNode.sceneInterval; + } + else{ + var ddx=dx/Math.sqrt(Math.abs(dx))*1.5; + sceneNode.scrollLeft-=ddx; + sceneNode.dx-=ddx; + } + },16); + } + node.style.transition='all ease-in 0.2s'; node.style.transform='perspective(1600px) rotateY(90deg) scale(0.75)'; var onEnd=function(){ - node.removeEventListener('webkitTransitionEnd',onEnd); - node.classList.add('flipped'); - sceneNode.classList.add('lockscroll'); - node.style.transition='all ease-out 0.4s'; + node.removeEventListener('webkitTransitionEnd',onEnd); + node.classList.add('flipped'); + sceneNode.classList.add('lockscroll'); + node.style.transition='all ease-out 0.4s'; node.style.transform='perspective(1600px) rotateY(180deg) scale(1)' }; node.listenTransition(onEnd); - } - ui.click.scene=clickScene; - var restoreScene=function(node,forced){ - if(node._clicking&&!forced) return; - if(node.transformInterval){ - clearInterval(node.transformInterval); - delete node.transformInterval; - } - var sceneNode=node.parentNode; - node._clicking=true; - setTimeout(function(){ - node._clicking=false; - },700); - node.style.transition='all ease-in 0.2s'; + } + ui.click.scene=clickScene; + var restoreScene=function(node,forced){ + if(node._clicking&&!forced) return; + if(node.transformInterval){ + clearInterval(node.transformInterval); + delete node.transformInterval; + } + var sceneNode=node.parentNode; + node._clicking=true; + setTimeout(function(){ + node._clicking=false; + },700); + node.style.transition='all ease-in 0.2s'; node.style.transform='perspective(1600px) rotateY(90deg) scale(0.75)'; var onEnd=function(){ - node.removeEventListener('webkitTransitionEnd',onEnd); - node.classList.remove('flipped'); - if(!sceneNode.querySelector('.flipped')){ - sceneNode.classList.remove('lockscroll'); - } - node.style.transition='all ease-out 0.4s'; + node.removeEventListener('webkitTransitionEnd',onEnd); + node.classList.remove('flipped'); + if(!sceneNode.querySelector('.flipped')){ + sceneNode.classList.remove('lockscroll'); + } + node.style.transition='all ease-out 0.4s'; node.style.transform='perspective(1600px) rotateY(0deg) scale(0.7)' }; node.listenTransition(onEnd); - } - ui.click.scene2=restoreScene; - var createScene=function(name){ - var scene=lib.tafang.map[name]; - var node=ui.create.div('.scene',clickScene); - node.style.transform='perspective(1600px) rotateY(0deg) scale(0.7)'; - node.name=name; - node.bgnode=ui.create.div('.background.player',node); - node.info=scene; - ui.create.div('.avatar.menu',node.bgnode); - node.namenode=ui.create.div('.name',node,(scene.name)); - if(lib.storage.map.contains(name)){ - if(lib.storage.newmap.contains(name)){ - node.classList.add('glow3'); - } - node.namenode.dataset.nature='soilm'; - } - else{ - node.classList.add('unselectable'); - node.namenode.innerHTML=('未开启'); - } - var content=ui.create.div('.menu',node); - lib.setScroll(content); - node.content=content; - sceneview.appendChild(node); - return node; - } - event.custom.add.window=function(){ - var current=document.querySelector('.flipped.scene'); - if(current){ - restoreScene(current); - } - } - for(var i in lib.tafang.map){ - createScene(i); - } - ui.window.appendChild(sceneview.animate('start')); - game.pause(); - }); - }, + } + ui.click.scene2=restoreScene; + var createScene=function(name){ + var scene=lib.tafang.map[name]; + var node=ui.create.div('.scene',clickScene); + node.style.transform='perspective(1600px) rotateY(0deg) scale(0.7)'; + node.name=name; + node.bgnode=ui.create.div('.background.player',node); + node.info=scene; + ui.create.div('.avatar.menu',node.bgnode); + node.namenode=ui.create.div('.name',node,(scene.name)); + if(lib.storage.map.contains(name)){ + if(lib.storage.newmap.contains(name)){ + node.classList.add('glow3'); + } + node.namenode.dataset.nature='soilm'; + } + else{ + node.classList.add('unselectable'); + node.namenode.innerHTML=('未开启'); + } + var content=ui.create.div('.menu',node); + lib.setScroll(content); + node.content=content; + sceneview.appendChild(node); + return node; + } + event.custom.add.window=function(){ + var current=document.querySelector('.flipped.scene'); + if(current){ + restoreScene(current); + } + } + for(var i in lib.tafang.map){ + createScene(i); + } + ui.window.appendChild(sceneview.animate('start')); + game.pause(); + }); + }, }, skill:{ tafang_mech_weixingxianjing_skill:{ diff --git a/mode/versus.js b/mode/versus.js index 2f361e962..76cab31f8 100644 --- a/mode/versus.js +++ b/mode/versus.js @@ -1,847 +1,847 @@ 'use strict'; game.import('mode',function(lib,game,ui,get,ai,_status){ - return { - name:'versus', - init:function(){ - if(get.config('versus_mode')=='jiange'){ - lib.characterPack.mode_versus=lib.jiangeboss; - lib.characterIntro.boss_liedixuande=lib.characterIntro.liubei; - lib.characterIntro.boss_gongshenyueying=lib.characterIntro.huangyueying; - lib.characterIntro.boss_tianhoukongming=lib.characterIntro.shen_zhugeliang; - lib.characterIntro.boss_yuhuoshiyuan=lib.characterIntro.pangtong; - lib.characterIntro.boss_qiaokuijunyi=lib.characterIntro.zhenghe; - lib.characterIntro.boss_jiarenzidan=lib.characterIntro.caozhen; - lib.characterIntro.boss_duanyuzhongda=lib.characterIntro.simayi; - lib.characterIntro.boss_juechenmiaocai=lib.characterIntro.xiahouyuan; - } - else if(get.config('versus_mode')=='siguo'){ - lib.characterPack.mode_versus={ - tangzi:['male',['wei','wu'].randomGet(),4,['xingzhao'],[]], - liuqi:['male',['shu','qun'].randomGet(),3,['wenji','tunjiang'],[]], - }; - for(var i in lib.characterPack.mode_versus){ - lib.character[i]=lib.characterPack.mode_versus[i]; - } - lib.cardPack.mode_versus=['zong','xionghuangjiu','tongzhougongji','lizhengshangyou']; - lib.translate.mode_versus_character_config='四国武将'; - } - if(!lib.cardPack.mode_versus){ - delete lib.card.zong; - delete lib.card.xionghuangjiu; - delete lib.card.tongzhougongji; - delete lib.card.lizhengshangyou; - } - }, - start:function(){ - "step 0" - _status.mode=get.config('versus_mode'); - if(_status.brawl&&_status.brawl.submode){ - _status.mode=_status.brawl.submode; - } - if(lib.config.test_game){ - _status.mode='standard'; - } - "step 1" - var playback=localStorage.getItem(lib.configprefix+'playback'); - if(playback){ - ui.create.me(); - ui.arena.style.display='none'; - ui.system.style.display='none'; - _status.playback=playback; - localStorage.removeItem(lib.configprefix+'playback'); - var store=lib.db.transaction(['video'],'readwrite').objectStore('video'); - store.get(parseInt(playback)).onsuccess=function(e){ - if(e.target.result){ - game.playVideoContent(e.target.result.video); - } - else{ - alert('播放失败:找不到录像'); - game.reload(); - } - } - event.finish(); - return; - } - if(_status.connectMode){ - game.waitForPlayer(function(){ - switch(lib.configOL.versus_mode){ - case '1v1':lib.configOL.number=2;break; - case '2v2':lib.configOL.number=4;break; - case '3v3':lib.configOL.number=6;break; - case '4v4':lib.configOL.number=8;break; - } - }); - } - else if(_status.mode=='jiange'||_status.mode=='siguo'||_status.mode=='four'){ - if(_status.mode=='four'&&!get.config('enable_all_cards_four')){ - lib.card.list=lib.cardsFour; - game.fixedPile=true; - } - else if(_status.mode=='siguo'){ - for(var i=0;i=8){ - j-=8; - } - if(list[i][0]=='w'){ - game.players[j].side=true; - game.players[j].setIdentity('wei'); - game.players[j].identity='wei'; - } - else{ - game.players[j].side=false; - game.players[j].setIdentity('shu'); - game.players[j].identity='shu'; - } - if(list[i].indexOf('mech')!=-1){ - game.players[j].type='mech'; - } - else if(list[i].indexOf('boss')!=-1){ - game.players[j].type='boss'; - } - else{ - game.players[j].type='human'; - } - game.players[i].getId(); - } - game.chooseCharacterJiange(); - } - else if(_status.mode=='three'){ - game.chooseCharacterThree(); - } - else{ - game.chooseCharacter(); - } - if(!_status.connectMode&&_status.brawl&&_status.brawl.chooseCharacterBefore){ - _status.brawl.chooseCharacterBefore(); - } - "step 3" - var players=get.players(lib.sort.position); - var info=[]; - for(var i=0;i=4); - } - game.addVideo('init',null,info); - event.trigger('gameStart'); - if(_status.connectMode){ - if(_status.mode=='1v1'){ - _status.first_less=true; - game.gameDraw(_status.firstChoose.next); - game.phaseLoop(_status.firstChoose.next); - } - else if(_status.mode=='2v2'||_status.mode=='3v3'){ - _status.first_less=true; - var firstChoose=game.players.randomGet(); - if(firstChoose.next.side==firstChoose.side){ - firstChoose=firstChoose.next; - } - game.gameDraw(firstChoose); - if(lib.configOL.replace_handcard){ - game.replaceHandcards(firstChoose.previous); - } - game.phaseLoop(firstChoose); - } - else if(_status.mode=='4v4'){ - game.gameDraw(_status.firstAct,function(player){ - if(player==_status.firstAct.previousSeat){ - return 5; - } - return 4; - }); - game.replaceHandcards(_status.firstAct.previous,_status.firstAct.previous.previous); - game.phaseLoop(_status.firstAct); - } - event.finish(); - } - else{ - if(_status.mode=='two'){ - _status.first_less=true; - _status.first_less_forced=true; - var firstChoose=_status.firstAct; - game.gameDraw(firstChoose); - if(get.config('replace_handcard_two')){ - game.replaceHandcards(firstChoose.previous); - } - game.phaseLoop(firstChoose); - } - else if(_status.mode=='endless'){ - _status.first_less=true; - _status.first_less_forced=true; - var firstChoose=_status.firstAct; - game.gameDraw(firstChoose); - game.phaseLoop(firstChoose); - } - else if(_status.mode=='four'){ - game.gameDraw(_status.firstAct,function(player){ - if(player==_status.firstAct.previousSeat){ - return 5; - } - return 4; - }); - if(game.me==_status.firstAct.previous||game.me==_status.firstAct.previous.previous){ - game.me.chooseBool('是否置换手牌?'); - event.replaceCard=true; - } - } - else if(_status.mode=='siguo'){ - _status.siguoai=[ - [-7.5,-2,0,-4.5,-6,-7.5], - [-7.5,-2,0,-4.5,-6,-7.5], - [-6,-6,-1,-4.5,-6,-7.5], - [-6,-3,0,-3,-3,-6], - [-6,-3,0,-3,-3,-6], - [-6,-6,-6,-6,-6,-6], - ].randomGet(); - var firstChoose=_status.firstAct; - game.gameDraw(firstChoose); - game.phaseLoop(firstChoose); - } - else if(_status.mode=='jiange'){ - var firstAct; - for(var i=0;i1){ - for(var i=0;i=lib.storage.number){ - actcount=i-lib.storage.number; - } - else{ - actcount=i+lib.storage.number; - } - } - if(actcount>0){ - actcount--; - } - else{ - actcount=game.players.length-1; - } - firstAct=game.players[actcount]; - break; - } - } - } - else{ - firstAct=game.players[Math.floor(Math.random()*game.players.length)]; - } - } - game.gameDraw(firstAct,4); - _status.first_less=true; - _status.round=0; - if(lib.storage.single_control){ - game.addGlobalSkill('autoswap'); - if(game.players.length>2&&lib.config.show_handcardbutton){ - ui.versushs=ui.create.system('手牌',null,true); - lib.setPopped(ui.versushs,game.versusHoverHandcards,220); - } - } - _status.enemyCount=ui.create.system('杀敌: '+get.cnNumber(0,true),null,true); - _status.friendCount=ui.create.system('阵亡: '+get.cnNumber(0,true),null,true); + var side=Math.random()<0.5; + var num=Math.floor(Math.random()*8); + list=list.splice(8-num).concat(list); + _status.firstAct=game.players[num]; + for(var i=0;i<8;i++){ + if(list[i][0]=='e'){ + game.players[i].side=side; + game.players[i].identity=list[i].slice(1); + } + else{ + game.players[i].side=!side; + game.players[i].identity=list[i]; + } + if(game.players[i].identity=='zhu'){ + game[game.players[i].side+'Zhu']=game.players[i]; + game.players[i].isZhu=true; + } + game.players[i].setIdentity(game.players[i].identity); + game.players[i].node.identity.dataset.color=get.translation(game.players[i].side+'Color'); + game.players[i].getId(); + } + game.chooseCharacterFour(); + } + else if(_status.mode=='two'){ + for(var i=0;i=8){ + j-=8; + } + if(list[i][0]=='w'){ + game.players[j].side=true; + game.players[j].setIdentity('wei'); + game.players[j].identity='wei'; + } + else{ + game.players[j].side=false; + game.players[j].setIdentity('shu'); + game.players[j].identity='shu'; + } + if(list[i].indexOf('mech')!=-1){ + game.players[j].type='mech'; + } + else if(list[i].indexOf('boss')!=-1){ + game.players[j].type='boss'; + } + else{ + game.players[j].type='human'; + } + game.players[i].getId(); + } + game.chooseCharacterJiange(); + } + else if(_status.mode=='three'){ + game.chooseCharacterThree(); + } + else{ + game.chooseCharacter(); + } + if(!_status.connectMode&&_status.brawl&&_status.brawl.chooseCharacterBefore){ + _status.brawl.chooseCharacterBefore(); + } + "step 3" + var players=get.players(lib.sort.position); + var info=[]; + for(var i=0;i=4); + } + game.addVideo('init',null,info); + event.trigger('gameStart'); + if(_status.connectMode){ + if(_status.mode=='1v1'){ + _status.first_less=true; + game.gameDraw(_status.firstChoose.next); + game.phaseLoop(_status.firstChoose.next); + } + else if(_status.mode=='2v2'||_status.mode=='3v3'){ + _status.first_less=true; + var firstChoose=game.players.randomGet(); + if(firstChoose.next.side==firstChoose.side){ + firstChoose=firstChoose.next; + } + game.gameDraw(firstChoose); + if(lib.configOL.replace_handcard){ + game.replaceHandcards(firstChoose.previous); + } + game.phaseLoop(firstChoose); + } + else if(_status.mode=='4v4'){ + game.gameDraw(_status.firstAct,function(player){ + if(player==_status.firstAct.previousSeat){ + return 5; + } + return 4; + }); + game.replaceHandcards(_status.firstAct.previous,_status.firstAct.previous.previous); + game.phaseLoop(_status.firstAct); + } + event.finish(); + } + else{ + if(_status.mode=='two'){ + _status.first_less=true; + _status.first_less_forced=true; + var firstChoose=_status.firstAct; + game.gameDraw(firstChoose); + if(get.config('replace_handcard_two')){ + game.replaceHandcards(firstChoose.previous); + } + game.phaseLoop(firstChoose); + } + else if(_status.mode=='endless'){ + _status.first_less=true; + _status.first_less_forced=true; + var firstChoose=_status.firstAct; + game.gameDraw(firstChoose); + game.phaseLoop(firstChoose); + } + else if(_status.mode=='four'){ + game.gameDraw(_status.firstAct,function(player){ + if(player==_status.firstAct.previousSeat){ + return 5; + } + return 4; + }); + if(game.me==_status.firstAct.previous||game.me==_status.firstAct.previous.previous){ + game.me.chooseBool('是否置换手牌?'); + event.replaceCard=true; + } + } + else if(_status.mode=='siguo'){ + _status.siguoai=[ + [-7.5,-2,0,-4.5,-6,-7.5], + [-7.5,-2,0,-4.5,-6,-7.5], + [-6,-6,-1,-4.5,-6,-7.5], + [-6,-3,0,-3,-3,-6], + [-6,-3,0,-3,-3,-6], + [-6,-6,-6,-6,-6,-6], + ].randomGet(); + var firstChoose=_status.firstAct; + game.gameDraw(firstChoose); + game.phaseLoop(firstChoose); + } + else if(_status.mode=='jiange'){ + var firstAct; + for(var i=0;i1){ + for(var i=0;i=lib.storage.number){ + actcount=i-lib.storage.number; + } + else{ + actcount=i+lib.storage.number; + } + } + if(actcount>0){ + actcount--; + } + else{ + actcount=game.players.length-1; + } + firstAct=game.players[actcount]; + break; + } + } + } + else{ + firstAct=game.players[Math.floor(Math.random()*game.players.length)]; + } + } + game.gameDraw(firstAct,4); + _status.first_less=true; + _status.round=0; + if(lib.storage.single_control){ + game.addGlobalSkill('autoswap'); + if(game.players.length>2&&lib.config.show_handcardbutton){ + ui.versushs=ui.create.system('手牌',null,true); + lib.setPopped(ui.versushs,game.versusHoverHandcards,220); + } + } + _status.enemyCount=ui.create.system('杀敌: '+get.cnNumber(0,true),null,true); + _status.friendCount=ui.create.system('阵亡: '+get.cnNumber(0,true),null,true); - lib.setPopped(_status.friendCount,game.versusHoverFriend); - lib.setPopped(_status.enemyCount,game.versusHoverEnemy); + lib.setPopped(_status.friendCount,game.versusHoverFriend); + lib.setPopped(_status.enemyCount,game.versusHoverEnemy); - if(lib.storage.zhu){ - game.versusPhaseLoop(firstAct); - } - else{ - game.versusPhaseLoop(firstAct); - } - } - if(_status.mode!='four'){ - event.finish(); - } - } - "step 4" - if(event.replaceCard&&result.bool){ - var hs=game.me.getCards('h'); - for(var i=0;i侯选人数:'+lib.configOL.choice_num+'人'); - uiintro.add('
      替补人数:'+lib.configOL.replace_number+'人'); - } - else if(lib.configOL.versus_mode=='2v2'||lib.configOL.versus_mode=='3v3'){ - uiintro.add('
      四号位换牌:'+(lib.configOL.replace_handcard?'开启':'关闭')); - } - uiintro.add('
      出牌时限:'+lib.configOL.choose_timeout+'秒'); - uiintro.add('
      屏蔽弱将:'+(lib.configOL.ban_weak?'开启':'关闭')); - var last=uiintro.add('
      屏蔽强将:'+(lib.configOL.ban_strong?'开启':'关闭')); - if(lib.configOL.banned.length){ - last=uiintro.add('
      禁用武将:'+get.translation(lib.configOL.banned)); - } - if(lib.configOL.bannedcards.length){ - last=uiintro.add('
      禁用卡牌:'+get.translation(lib.configOL.bannedcards)); - } - last.style.paddingBottom='8px'; - }, - getVideoName:function(){ - var str=get.translation(game.me.name); - if(game.me.name2){ - str+='/'+get.translation(game.me.name2); - } - var str2; - switch(_status.mode){ - case 'two':str2='欢乐成双';break; - case 'endless':str2='无尽模式';break; - case 'three':str2='统率三军';break; - case 'siguo':str2='同舟共济';break; - case 'jiange':str2='守卫剑阁';break; - case 'four':str2='对决 - 4v4';break; - default:str2='对决 - '+lib.storage.number+'v'+lib.storage.number - } - return [str,str2]; - }, - addRecord:function(bool){ - if(typeof bool=='boolean'){ - var data=lib.config.gameRecord.versus.data; - var identity=get.cnNumber(lib.storage.number)+'人'; - if(!data[identity]){ - data[identity]=[0,0]; - } - if(bool){ - data[identity][0]++; - } - else{ - data[identity][1]++; - } - var list=['一人','两人','三人']; - var str=''; - for(var i=0;i'; - } - } - lib.config.gameRecord.versus.str=str; - game.saveConfig('gameRecord',lib.config.gameRecord); - } - }, - chooseCharacterJiange:function(){ - var next=game.createEvent('chooseCharacter',false); - next.showConfig=true; - next.setContent(function(){ - 'step 0' - ui.arena.classList.add('choose-character'); - for(var i in lib.characterPack.mode_versus){ - lib.character[i]=lib.characterPack.mode_versus[i]; - if(!lib.character[i][4]){ - lib.character[i][4]=[]; - } - } - 'step 1' - for(var i in lib.skill){ - if(lib.skill[i].changeSeat){ - lib.skill[i]={}; - if(lib.translate[i+'_info']){ - lib.translate[i+'_info']='此模式下不可用'; - } - } - } - var list={ - weilist:[],shulist:[], - weimech:[],shumech:[], - weiboss:[],shuboss:[], - } - event.list=list; - if(lib.characterPack.boss){ - for(var i in lib.characterPack.boss){ - if(!lib.character[i]&&lib.characterPack.boss[i][4]){ - if(lib.characterPack.boss[i][4].contains('jiangeboss')|| - lib.characterPack.boss[i][4].contains('jiangemech')){ - lib.character[i]=lib.characterPack.boss[i]; - } - } - } - } - for(var i in lib.character){ - if(lib.character[i][4]){ - if(lib.character[i][4].contains('jiangeboss')){ - list[lib.character[i][1]+'boss'].push(i);continue; - } - else if(lib.character[i][4].contains('jiangemech')){ - list[lib.character[i][1]+'mech'].push(i);continue; - } - } - if(lib.filter.characterDisabled(i)) continue; - if(lib.character[i][1]=='wei'){ - list.weilist.push(i); - } - else if(lib.character[i][1]=='shu'){ - list.shulist.push(i); - } - } - var dialog; - switch(game.me.type){ - case 'human': - for(var i=0;i侯选人数:'+lib.configOL.choice_num+'人'); + uiintro.add('
      替补人数:'+lib.configOL.replace_number+'人'); + } + else if(lib.configOL.versus_mode=='2v2'||lib.configOL.versus_mode=='3v3'){ + uiintro.add('
      四号位换牌:'+(lib.configOL.replace_handcard?'开启':'关闭')); + } + uiintro.add('
      出牌时限:'+lib.configOL.choose_timeout+'秒'); + uiintro.add('
      屏蔽弱将:'+(lib.configOL.ban_weak?'开启':'关闭')); + var last=uiintro.add('
      屏蔽强将:'+(lib.configOL.ban_strong?'开启':'关闭')); + if(lib.configOL.banned.length){ + last=uiintro.add('
      禁用武将:'+get.translation(lib.configOL.banned)); + } + if(lib.configOL.bannedcards.length){ + last=uiintro.add('
      禁用卡牌:'+get.translation(lib.configOL.bannedcards)); + } + last.style.paddingBottom='8px'; + }, + getVideoName:function(){ + var str=get.translation(game.me.name); + if(game.me.name2){ + str+='/'+get.translation(game.me.name2); + } + var str2; + switch(_status.mode){ + case 'two':str2='欢乐成双';break; + case 'endless':str2='无尽模式';break; + case 'three':str2='统率三军';break; + case 'siguo':str2='同舟共济';break; + case 'jiange':str2='守卫剑阁';break; + case 'four':str2='对决 - 4v4';break; + default:str2='对决 - '+lib.storage.number+'v'+lib.storage.number + } + return [str,str2]; + }, + addRecord:function(bool){ + if(typeof bool=='boolean'){ + var data=lib.config.gameRecord.versus.data; + var identity=get.cnNumber(lib.storage.number)+'人'; + if(!data[identity]){ + data[identity]=[0,0]; + } + if(bool){ + data[identity][0]++; + } + else{ + data[identity][1]++; + } + var list=['一人','两人','三人']; + var str=''; + for(var i=0;i'; + } + } + lib.config.gameRecord.versus.str=str; + game.saveConfig('gameRecord',lib.config.gameRecord); + } + }, + chooseCharacterJiange:function(){ + var next=game.createEvent('chooseCharacter',false); + next.showConfig=true; + next.setContent(function(){ + 'step 0' + ui.arena.classList.add('choose-character'); + for(var i in lib.characterPack.mode_versus){ + lib.character[i]=lib.characterPack.mode_versus[i]; + if(!lib.character[i][4]){ + lib.character[i][4]=[]; + } + } + 'step 1' + for(var i in lib.skill){ + if(lib.skill[i].changeSeat){ + lib.skill[i]={}; + if(lib.translate[i+'_info']){ + lib.translate[i+'_info']='此模式下不可用'; + } + } + } + var list={ + weilist:[],shulist:[], + weimech:[],shumech:[], + weiboss:[],shuboss:[], + } + event.list=list; + if(lib.characterPack.boss){ + for(var i in lib.characterPack.boss){ + if(!lib.character[i]&&lib.characterPack.boss[i][4]){ + if(lib.characterPack.boss[i][4].contains('jiangeboss')|| + lib.characterPack.boss[i][4].contains('jiangemech')){ + lib.character[i]=lib.characterPack.boss[i]; + } + } + } + } + for(var i in lib.character){ + if(lib.character[i][4]){ + if(lib.character[i][4].contains('jiangeboss')){ + list[lib.character[i][1]+'boss'].push(i);continue; + } + else if(lib.character[i][4].contains('jiangemech')){ + list[lib.character[i][1]+'mech'].push(i);continue; + } + } + if(lib.filter.characterDisabled(i)) continue; + if(lib.character[i][1]=='wei'){ + list.weilist.push(i); + } + else if(lib.character[i][1]=='shu'){ + list.shulist.push(i); + } + } + var dialog; + switch(game.me.type){ + case 'human': + for(var i=0;i当前分数:
      '+(lib.storage.ladder.current+(_status.ladder_tmp?40:0))+'
      '); - uiintro.add('
      历史最高:
      '+lib.storage.ladder.top+'
      '); - uiintro.content.lastChild.style.paddingBottom='8px'; - return uiintro; - },180); - _status.ladder=true; - _status.ladder_mmr=0; - } - event.addSetting=function(){ - var cs=function(link,node){ - game.swapPlayer(node._link); - _status.rechoose=true; - for(var i=0;ib?1:-1; - } - if(lib.storage.choice=='∞'){ - list.sort(sortByGroup); - } - else{ - list.randomSort(); - } - _status.list=list; - var choice=(lib.storage.choice=='∞')?list.length:lib.storage.choice; - event.dialog=ui.create.dialog('选择角色',[list.slice(0,choice),'character']); - event.dialog.classList.add('fixed'); - // for(var i=0;i=dialog.versus_number.link+dialog.replace_number.link){ - event.fill.firstChild.innerHTML='开始'; - _status.choosefinished=true; - if(ui.cheat){ - ui.cheat.close(); - delete ui.cheat; - } - } - game.save('zhu',dialog.versus_zhu.link); - if(lib.storage.zhu){ - // dialog.versus_only_zhu.parentNode.classList.remove('disabled'); - dialog.versus_main_zhu.parentNode.classList.remove('disabled'); - } - else{ - // dialog.versus_only_zhu.parentNode.classList.add('disabled'); - dialog.versus_main_zhu.parentNode.classList.add('disabled'); - } - // game.save('only_zhu',dialog.versus_only_zhu.link); - game.save('main_zhu',dialog.versus_main_zhu.link); - game.save('assign_enemy',dialog.versus_assign_enemy.link); - game.save('seat_order',dialog.versus_seat_order.link); - // game.save('cross_seat',dialog.versus_cross_seat.link); - game.save('noreplace_end',dialog.versus_noreplace_end.link); - game.save('single_control',dialog.versus_single_control.link); - switch(lib.storage.seat_order){ - case '交叉':lib.storage.cross_seat=true;lib.storage.random_seat=false;break; - case '随机':lib.storage.cross_seat=false;lib.storage.random_seat=true;break; - default:lib.storage.cross_seat=false;lib.storage.random_seat=false; - } - game.saveConfig('first_less',dialog.versus_first_less.link,true); - game.save('number',dialog.versus_number.link); - game.save('versus_reward',dialog.versus_reward.link); - game.save('versus_punish',dialog.versus_punish.link); - game.save('replace_number',dialog.replace_number.link); - game.save('choice',dialog.choice.link); - var count,i; - if(dialog.buttons.length>lib.storage.choice){ - count=dialog.buttons.length-lib.storage.choice; - var removed=[]; - for(i=dialog.buttons.length-1;i>=0&&count>0;i--){ - if(dialog.buttons[i].classList.contains('target')==false&& - dialog.buttons[i].classList.contains('glow')==false){ - dialog.buttons[i].remove(); - _status.list.remove(dialog.buttons[i].link); - removed.push(dialog.buttons[i].link) - dialog.buttons.splice(i,1); - count--; - } - } - for(i=0;i=4){ - ui.arena.setNumber(parseInt(ui.arena.dataset.number)+1); - for(var i=0;i=4){ - // ui.fakemebg.show(); - game.onSwapControl(); - } - }); - }, - chooseCharacterOL:function(){ - switch(lib.configOL.versus_mode){ - case '1v1':game.chooseCharacterOL1();break; - case '2v2':game.chooseCharacterOL2();break; - case '3v3':game.chooseCharacterOL3();break; - case '4v4':game.chooseCharacterOL4();break; - } - }, - chooseCharacterOL4:function(){ - var next=game.createEvent('chooseCharacter',false); - next.setContent(function(){ - "step 0" - var list=[ - ['zhong','ezhong','ezhong','zhong','zhong','ezhong','ezhong','zhong'], - ['zhong','ezhong','zhong','ezhong','ezhong','zhong','ezhong','zhong'], - ['zhong','ezhong','ezhong','zhong','ezhong','zhong','zhong','ezhong'], - ['zhong','ezhong','zhong','ezhong','zhong','ezhong','zhong','ezhong'], - ['zhong','ezhong','ezhong','zhong','ezhong','zhong','ezhong','zhong'], - ].randomGet(); - var rand1=Math.floor(Math.random()*4); - var rand2=Math.floor(Math.random()*4); - for(var i=0;i0.4){ - return (rank>=6)?Math.random():-Math.random(); - } - else if(seed>0.1){ - return (rank>=4&&rank<6)?Math.random():-Math.random(); - } - else{ - return (rank<4)?Math.random():-Math.random(); - } - }).set('selected',_status.event.selected).set('dialog',event.videoId).set('seed',Math.random()); - "step 2" - event.selected.push(result.links[0]); - game.broadcastAll(function(player,name,zhu){ - player.classList.remove('selectedx'); - player.init(name); - if(player.node.name_seat){ - player.node.name_seat.remove(); - } - },event.current,result.links[0]); - if(event.current.identity=='zhu'){ - event.current.hp++; - event.current.maxHp++; - event.current.update(); - } - event.current.classList.remove('selectedx'); - for(var i=0;i=2*Math.max(game.friend.length,game.enemy.length)){ - _status.round=0; - for(var i=0;ib.countCards('j')) return 1; - return a.hp-b.hp; - }) - event.player=list[0]; - event.goto(0); - } - else{ - game.me.chooseTarget('选择要行动的角色',true,function(card,player,target){ - return (target.classList.contains('acted')==false&&target.side==game.me.side); - }).includeOut=true; - } - } - else{ - event.player=event.player.next; - event.goto(0); - } - "step 2" - event.player=result.targets[0]; - event.goto(0); - }); - }, - phaseLoopJiange:function(){ - var next=game.createEvent('phaseLoop'); - next.num=0; - next.setContent(function(){ - if(event.num>=8){ - event.num-=8; - } - var player=_status.actlist[event.num]; - if(player.isAlive()){ - player.phase(); - } - event.num++; - event.redo(); - }); - }, - replacePlayerOL:function(player){ - var next=game.createEvent('replacePlayer'); - next.source=player; - next.setContent('replacePlayerOL'); - }, - replacePlayer:function(player){ - var next=game.createEvent('replacePlayer'); - next.source=player; - next.setContent('replacePlayer'); - }, - replacePlayerTwo:function(player,character){ - var next=game.createEvent('replacePlayerTwo'); - next.source=player; - next.character=character; - next.setContent('replacePlayerTwo'); - }, - versusClickToSwap:function(e){ - if(_status.dragged) return; - if(this.link==game.me){ - if(!this.classList.contains('buttonclick')){ - this.animate('buttonclick'); - } - } - else if(_status.event.player==game.me&&!_status.auto){ - game.me.popup('请稍后再换人'); - e.stopPropagation(); - } - else{ - game.modeSwapPlayer(this.link); - } - }, - versusHoverEnemy:function(){ - var uiintro=ui.create.dialog('hidden'); - - if(_status.enemyDied.length){ - uiintro.add('已阵亡'); - uiintro.add([_status.enemyDied,'character']); - } - - uiintro.add('未上场'); - if(_status.enemy.length){ - uiintro.add([_status.enemy,'character']); - } - else{ - uiintro.add('(无)') - } - - return uiintro; - }, - versusHoverFriend:function(){ - var uiintro=ui.create.dialog('hidden'); - - if(_status.friendDied.length){ - uiintro.add('已阵亡'); - uiintro.add([_status.friendDied,'character']); - } - - uiintro.add('未上场'); - if(_status.friend.length){ - uiintro.add([_status.friend,'character']); - } - else{ - uiintro.add('(无)') - } - - return uiintro; - }, - versusHoverHandcards:function(){ - var uiintro=ui.create.dialog('hidden'); - var added=false; - for(var i=0;iplayer.countCards('h')+1||player.hp==1; - }, - content:function(){ - 'step 0' - trigger.player.chooseCard('将一张手牌交给'+get.translation(player),true).ai=function(card){ - if(get.type(card)=='trick') return 8-get.value(card); - return 6-get.value(card); - } - 'step 1' - if(result.bool&&result.cards.length){ - player.gain(result.cards,trigger.player,'give'); - if(get.type(result.cards[0])=='trick'){ - player.addTempSkill('wenji2',{player:'phaseBegin'}); - } - } - } - }, - wenji2:{ - mark:true, - intro:{ - content:'非队友角色计算与你的距离+1' - }, - mod:{ - globalTo:function(from,to,distance){ - if(from.side!=to.side){ - return distance+1; - } - } - } - }, - tunjiang:{ - trigger:{player:'phaseEnd'}, - direct:true, - filter:function(event,player){ - return !player.getStat('damage')&&player.countUsed()>=2; - }, - content:function(){ - 'step 0' - var target=null; - for(var i=0;i=player.countCards('h')){ - return 1; - } - return 0; - }).set('prompt',get.prompt('xingzhao')).set('choiceList',[ - '摸两张牌','令'+get.translation(target)+'摸两张牌' - ]); - } - else{ - player.chooseBool(get.prompt('xingzhao')); - } - 'step 1' - if(event.target){ - if(result.index==0){ - player.logSkill('xingzhao'); - player.draw(2); - } - else if(result.index==1){ - player.logSkill('xingzhao',event.target); - event.target.draw(2); - } - } - else{ - if(result.bool){ - player.logSkill('xingzhao'); - player.draw(2); - } - } - } - }, - xingzhao:{ - inherit:'xunxun', - mark:true, - intro:{ - content:function(storage,player){ - var num=0; - for(var i=0;i=1){ - str='具有技能“恂恂”'; - } - if(num>=2){ - str+=';当你或队友使用装备牌时,其摸一张牌'; - } - if(num>=3){ - str+=';你和队友跳过判定阶段'; - } - return str; - } - }, - filter:function(event,player){ - var num=0; - for(var i=0;i=2; - }, - content:function(){ - player.draw(); - } - }, - xingzhao3:{ - trigger:{player:'phaseJudgeBefore'}, - forced:true, - filter:function(event,player){ - var num=0,bool=false; - for(var i=0;i=3; - }, - content:function(){ - trigger.cancel(); - game.log(player,'跳过了判定阶段'); - } - }, - xionghuangjiu:{ + } + } + _status.endlessList=event.list; + setTimeout(function(){ + ui.arena.classList.remove('choose-character'); + },500); + }); + }, + chooseCharacterFour:function(){ + var next=game.createEvent('chooseCharacter',false); + next.showConfig=true; + next.ai=function(player,list,list2){ + if(player.identity=='zhu'){ + list2.randomSort(); + var choice; + if(Math.random()-0.8<0&&list2.length){ + choice=list2[0]; + } + else{ + choice=list[0]; + } + player.init(choice); + player.hp++; + player.maxHp++; + player.update(); + } + else if(Math.random()<0.5){ + var choice=0; + for(var i=0;i当前分数:
      '+(lib.storage.ladder.current+(_status.ladder_tmp?40:0))+'
      '); + uiintro.add('
      历史最高:
      '+lib.storage.ladder.top+'
      '); + uiintro.content.lastChild.style.paddingBottom='8px'; + return uiintro; + },180); + _status.ladder=true; + _status.ladder_mmr=0; + } + event.addSetting=function(){ + var cs=function(link,node){ + game.swapPlayer(node._link); + _status.rechoose=true; + for(var i=0;ib?1:-1; + } + if(lib.storage.choice=='∞'){ + list.sort(sortByGroup); + } + else{ + list.randomSort(); + } + _status.list=list; + var choice=(lib.storage.choice=='∞')?list.length:lib.storage.choice; + event.dialog=ui.create.dialog('选择角色',[list.slice(0,choice),'character']); + event.dialog.classList.add('fixed'); + // for(var i=0;i=dialog.versus_number.link+dialog.replace_number.link){ + event.fill.firstChild.innerHTML='开始'; + _status.choosefinished=true; + if(ui.cheat){ + ui.cheat.close(); + delete ui.cheat; + } + } + game.save('zhu',dialog.versus_zhu.link); + if(lib.storage.zhu){ + // dialog.versus_only_zhu.parentNode.classList.remove('disabled'); + dialog.versus_main_zhu.parentNode.classList.remove('disabled'); + } + else{ + // dialog.versus_only_zhu.parentNode.classList.add('disabled'); + dialog.versus_main_zhu.parentNode.classList.add('disabled'); + } + // game.save('only_zhu',dialog.versus_only_zhu.link); + game.save('main_zhu',dialog.versus_main_zhu.link); + game.save('assign_enemy',dialog.versus_assign_enemy.link); + game.save('seat_order',dialog.versus_seat_order.link); + // game.save('cross_seat',dialog.versus_cross_seat.link); + game.save('noreplace_end',dialog.versus_noreplace_end.link); + game.save('single_control',dialog.versus_single_control.link); + switch(lib.storage.seat_order){ + case '交叉':lib.storage.cross_seat=true;lib.storage.random_seat=false;break; + case '随机':lib.storage.cross_seat=false;lib.storage.random_seat=true;break; + default:lib.storage.cross_seat=false;lib.storage.random_seat=false; + } + game.saveConfig('first_less',dialog.versus_first_less.link,true); + game.save('number',dialog.versus_number.link); + game.save('versus_reward',dialog.versus_reward.link); + game.save('versus_punish',dialog.versus_punish.link); + game.save('replace_number',dialog.replace_number.link); + game.save('choice',dialog.choice.link); + var count,i; + if(dialog.buttons.length>lib.storage.choice){ + count=dialog.buttons.length-lib.storage.choice; + var removed=[]; + for(i=dialog.buttons.length-1;i>=0&&count>0;i--){ + if(dialog.buttons[i].classList.contains('target')==false&& + dialog.buttons[i].classList.contains('glow')==false){ + dialog.buttons[i].remove(); + _status.list.remove(dialog.buttons[i].link); + removed.push(dialog.buttons[i].link) + dialog.buttons.splice(i,1); + count--; + } + } + for(i=0;i=4){ + ui.arena.setNumber(parseInt(ui.arena.dataset.number)+1); + for(var i=0;i=4){ + // ui.fakemebg.show(); + game.onSwapControl(); + } + }); + }, + chooseCharacterOL:function(){ + switch(lib.configOL.versus_mode){ + case '1v1':game.chooseCharacterOL1();break; + case '2v2':game.chooseCharacterOL2();break; + case '3v3':game.chooseCharacterOL3();break; + case '4v4':game.chooseCharacterOL4();break; + } + }, + chooseCharacterOL4:function(){ + var next=game.createEvent('chooseCharacter',false); + next.setContent(function(){ + "step 0" + var list=[ + ['zhong','ezhong','ezhong','zhong','zhong','ezhong','ezhong','zhong'], + ['zhong','ezhong','zhong','ezhong','ezhong','zhong','ezhong','zhong'], + ['zhong','ezhong','ezhong','zhong','ezhong','zhong','zhong','ezhong'], + ['zhong','ezhong','zhong','ezhong','zhong','ezhong','zhong','ezhong'], + ['zhong','ezhong','ezhong','zhong','ezhong','zhong','ezhong','zhong'], + ].randomGet(); + var rand1=Math.floor(Math.random()*4); + var rand2=Math.floor(Math.random()*4); + for(var i=0;i0.4){ + return (rank>=6)?Math.random():-Math.random(); + } + else if(seed>0.1){ + return (rank>=4&&rank<6)?Math.random():-Math.random(); + } + else{ + return (rank<4)?Math.random():-Math.random(); + } + }).set('selected',_status.event.selected).set('dialog',event.videoId).set('seed',Math.random()); + "step 2" + event.selected.push(result.links[0]); + game.broadcastAll(function(player,name,zhu){ + player.classList.remove('selectedx'); + player.init(name); + if(player.node.name_seat){ + player.node.name_seat.remove(); + } + },event.current,result.links[0]); + if(event.current.identity=='zhu'){ + event.current.hp++; + event.current.maxHp++; + event.current.update(); + } + event.current.classList.remove('selectedx'); + for(var i=0;i=2*Math.max(game.friend.length,game.enemy.length)){ + _status.round=0; + for(var i=0;ib.countCards('j')) return 1; + return a.hp-b.hp; + }) + event.player=list[0]; + event.goto(0); + } + else{ + game.me.chooseTarget('选择要行动的角色',true,function(card,player,target){ + return (target.classList.contains('acted')==false&&target.side==game.me.side); + }).includeOut=true; + } + } + else{ + event.player=event.player.next; + event.goto(0); + } + "step 2" + event.player=result.targets[0]; + event.goto(0); + }); + }, + phaseLoopJiange:function(){ + var next=game.createEvent('phaseLoop'); + next.num=0; + next.setContent(function(){ + if(event.num>=8){ + event.num-=8; + } + var player=_status.actlist[event.num]; + if(player.isAlive()){ + player.phase(); + } + event.num++; + event.redo(); + }); + }, + replacePlayerOL:function(player){ + var next=game.createEvent('replacePlayer'); + next.source=player; + next.setContent('replacePlayerOL'); + }, + replacePlayer:function(player){ + var next=game.createEvent('replacePlayer'); + next.source=player; + next.setContent('replacePlayer'); + }, + replacePlayerTwo:function(player,character){ + var next=game.createEvent('replacePlayerTwo'); + next.source=player; + next.character=character; + next.setContent('replacePlayerTwo'); + }, + versusClickToSwap:function(e){ + if(_status.dragged) return; + if(this.link==game.me){ + if(!this.classList.contains('buttonclick')){ + this.animate('buttonclick'); + } + } + else if(_status.event.player==game.me&&!_status.auto){ + game.me.popup('请稍后再换人'); + e.stopPropagation(); + } + else{ + game.modeSwapPlayer(this.link); + } + }, + versusHoverEnemy:function(){ + var uiintro=ui.create.dialog('hidden'); + + if(_status.enemyDied.length){ + uiintro.add('已阵亡'); + uiintro.add([_status.enemyDied,'character']); + } + + uiintro.add('未上场'); + if(_status.enemy.length){ + uiintro.add([_status.enemy,'character']); + } + else{ + uiintro.add('(无)') + } + + return uiintro; + }, + versusHoverFriend:function(){ + var uiintro=ui.create.dialog('hidden'); + + if(_status.friendDied.length){ + uiintro.add('已阵亡'); + uiintro.add([_status.friendDied,'character']); + } + + uiintro.add('未上场'); + if(_status.friend.length){ + uiintro.add([_status.friend,'character']); + } + else{ + uiintro.add('(无)') + } + + return uiintro; + }, + versusHoverHandcards:function(){ + var uiintro=ui.create.dialog('hidden'); + var added=false; + for(var i=0;iplayer.countCards('h')+1||player.hp==1; + }, + content:function(){ + 'step 0' + trigger.player.chooseCard('将一张手牌交给'+get.translation(player),true).ai=function(card){ + if(get.type(card)=='trick') return 8-get.value(card); + return 6-get.value(card); + } + 'step 1' + if(result.bool&&result.cards.length){ + player.gain(result.cards,trigger.player,'give'); + if(get.type(result.cards[0])=='trick'){ + player.addTempSkill('wenji2',{player:'phaseBegin'}); + } + } + } + }, + wenji2:{ + mark:true, + intro:{ + content:'非队友角色计算与你的距离+1' + }, + mod:{ + globalTo:function(from,to,distance){ + if(from.side!=to.side){ + return distance+1; + } + } + } + }, + tunjiang:{ + trigger:{player:'phaseEnd'}, + direct:true, + filter:function(event,player){ + return !player.getStat('damage')&&player.countUsed()>=2; + }, + content:function(){ + 'step 0' + var target=null; + for(var i=0;i=player.countCards('h')){ + return 1; + } + return 0; + }).set('prompt',get.prompt('xingzhao')).set('choiceList',[ + '摸两张牌','令'+get.translation(target)+'摸两张牌' + ]); + } + else{ + player.chooseBool(get.prompt('xingzhao')); + } + 'step 1' + if(event.target){ + if(result.index==0){ + player.logSkill('xingzhao'); + player.draw(2); + } + else if(result.index==1){ + player.logSkill('xingzhao',event.target); + event.target.draw(2); + } + } + else{ + if(result.bool){ + player.logSkill('xingzhao'); + player.draw(2); + } + } + } + }, + xingzhao:{ + inherit:'xunxun', + mark:true, + intro:{ + content:function(storage,player){ + var num=0; + for(var i=0;i=1){ + str='具有技能“恂恂”'; + } + if(num>=2){ + str+=';当你或队友使用装备牌时,其摸一张牌'; + } + if(num>=3){ + str+=';你和队友跳过判定阶段'; + } + return str; + } + }, + filter:function(event,player){ + var num=0; + for(var i=0;i=2; + }, + content:function(){ + player.draw(); + } + }, + xingzhao3:{ + trigger:{player:'phaseJudgeBefore'}, + forced:true, + filter:function(event,player){ + var num=0,bool=false; + for(var i=0;i=3; + }, + content:function(){ + trigger.cancel(); + game.log(player,'跳过了判定阶段'); + } + }, + xionghuangjiu:{ trigger:{source:'damageBegin'}, filter:function(event,player){ return event.card&&event.card==player.storage.xionghuangjiu&&event.notLink(); @@ -4110,7 +4110,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ delete player.node.jiu; delete player.node.jiu2; } - delete player.storage.xionghuangjiu; + delete player.storage.xionghuangjiu; }, group:['xionghuangjiu2','xionghuangjiu3'] }, @@ -4130,1055 +4130,1055 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ },player); }, }, - xionghuangjiu3:{ - trigger:{player:'useCard'}, - silent:true, - filter:function(event,player){ - return !player.storage.xionghuangjiu; - }, - content:function(){ - player.storage.xionghuangjiu=trigger.card; - } - }, - longchuanzhibao:{ - mark:'auto', - nopop:true, - init:function(player){ - player.storage.longchuanzhibao=0; - }, - intro:{ - content:function(storage,player){ - var str='已有'+storage+'个龙船至宝,'+get.translation(player.side)+'势力共有'; - var num=storage; - for(var i=0;i0; - }, - content:function(){ - player.gainZhibao(1,trigger.player); - game.delay(); - }, - group:'longchuanzhibao_over', - subSkill:{ - over:{ - trigger:{player:'roundStart'}, - silent:true, - filter:function(){ - var map={wei:0,shu:0,wu:0,qun:0}; - for(var i=0;i=4){ - _status.winside=current.side; - return true; - } - } - }, - content:function(){ - for(var i=0;i0){ - return att+5; - } - return -1; - } - if(player.isTurnedOver()){ - return 5-att; - } - return -att; - }; - "step 1" - if(result.bool){ - player.logSkill('boss_didongjg',result.targets); - result.targets[0].turnOver(); - } - }, - ai:{ - threaten:1.7 - } - }, - boss_lianyujg:{ - trigger:{player:'phaseEnd'}, - unique:true, - content:function(){ - "step 0" - event.players=get.players(player); - "step 1" - if(event.players.length){ - var current=event.players.shift(); - if(current.isEnemyOf(player)){ - player.line(current,'fire'); - current.damage('fire'); - } - event.redo(); - } - }, - ai:{ - threaten:2 - } - }, - boss_mojianjg:{ - trigger:{player:'phaseUseBegin'}, - content:function(){ - var list=game.filterPlayer(function(current){ - return player.canUse('wanjian',current)&¤t.isEnemyOf(player); - }); - list.sort(lib.sort.seat); - player.useCard({name:'wanjian'},list); - }, - ai:{ - threaten:1.8 - } - }, - boss_qiwu:{ - audio:true, - trigger:{player:'useCard'}, - direct:true, - filter:function(event,player){ - if(get.suit(event.card)=='club'){ - return game.hasPlayer(function(current){ - return current.isFriendOf(player)&¤t.isDamaged(); - }); - } - return false; - }, - content:function(){ - "step 0" - var noneed=(trigger.card.name=='tao'&&trigger.targets[0]==player&&player.hp==player.maxHp-1); - player.chooseTarget(get.prompt('boss_qiwu'),function(card,player,target){ - return target.hp0){ - if(noneed&&player==target){ - num=0.5; - } - else if(target.hp==1){ - num+=3; - } - else if(target.hp==2){ - num+=1; - } - } - return num; - } - "step 1" - if(result.bool){ - player.logSkill('qiwu',result.targets); - result.targets[0].recover(); - } - }, - ai:{ - expose:0.3, - threaten:1.5 - } - }, - boss_tianyujg:{ - audio:true, - trigger:{player:'phaseEnd'}, - forced:true, - filter:function(event,player){ - return game.hasPlayer(function(current){ - return current.isEnemyOf(player)&&!current.isLinked(); - }); - }, - content:function(){ - "step 0" - event.targets=game.filterPlayer(); - event.targets.sort(lib.sort.seat); - "step 1" - if(event.targets.length){ - var target=event.targets.shift(); - if(!target.isLinked()&&target.isEnemyOf(player)){ - player.line(target,'green'); - target.link(); - } - event.redo(); - } - } - }, - boss_jueji:{ - audio:2, - trigger:{global:'phaseDrawBegin'}, - filter:function(event,player){ - if(event.player.isFriendOf(player)){ - return false; - } - return event.num>0&&event.player!=player&&event.player.hp=0; - }, - forced:true, - content:function(){ - 'step 0' - var targets=game.filterPlayer(function(current){ - return current.isEnemyOf(player); - }); - targets.sort(lib.sort.seat); - event.targets=targets; - player.line(targets,'thunder'); - event.num=targets.length; - 'step 1' - if(event.targets.length){ - event.targets.shift().damage('thunder'); - event.redo(); - } - 'step 2' - player.recover(event.num); - }, - ai:{ - threaten:function(player,target){ - if(target.hp==1) return 2; - if(target.hp==2&&game.players.length<8) return 1.5; - return 0.5; - }, - } - }, - boss_chiying:{ - audio:2, - trigger:{global:'damageBegin'}, - forced:true, - filter:function(event,player){ - if(event.num<=1) return false; - return event.player.isFriendOf(player); - }, - priority:-11, - content:function(){ - trigger.num=1; - } - }, - boss_jingfan:{ - global:'boss_jingfan2', - }, - boss_jingfan2:{ - mod:{ - globalFrom:function(from,to,distance){ - if(to.isEnemyOf(from)) return; - var players=game.filterPlayer(); - for(var i=0;i0){ - if(players[i].hp==1){ - return true; - } - num++; - if(num>=2) return true; - } - } - return false; - }, - content:function(){ - 'step 0' - player.turnOver(); - 'step 1' - var list=game.filterPlayer(function(current){ - return current.isDamaged()&¤t.isFriendOf(player); - }); - player.line(list,'green'); - event.targets=list; - 'step 2' - if(event.targets.length){ - event.targets.shift().recover(); - event.redo(); - } - }, - ai:{ - threaten:1.5, - effect:{ - target:function(card,player,target){ - if(card.name=='guiyoujie') return [0,1]; - } - } - }, - }, - boss_zhenwei:{ - global:'boss_zhenwei2', - ai:{ - threaten:1.5 - } - }, - boss_zhenwei2:{ - mod:{ - globalTo:function(from,to,distance){ - if(to.isFriendOf(from)) return; - var players=game.filterPlayer(); - for(var i=0;i0; - } - } - } - return num>=4; - }, - filter:function(event,player){ - var players=game.filterPlayer(); - for(var i=0;i0; - }, - content:function(){ - player.chooseToDiscard('h',true); - } - }, - boss_tunshi:{ - trigger:{player:'phaseBegin'}, - forced:true, - filter:function(event,player){ - var nh=player.countCards('h'); - return game.hasPlayer(function(current){ - return current.isEnemyOf(player)&¤t.countCards('h')>nh; - }); - }, - content:function(){ - 'step 0' - var nh=player.countCards('h'); - var targets=game.filterPlayer(function(current){ - return current.isEnemyOf(player)&¤t.countCards('h')>nh; - }); - targets.sort(lib.sort.seat); - event.targets=targets; - 'step 1' - if(event.targets.length){ - var current=event.targets.shift(); - current.damage('thunder'); - player.line(current,'thunder'); - event.redo(); - } - } - }, - boss_jiguan:{ - mod:{ - targetEnabled:function(card,player,target){ - if(card.name=='lebu'){ - return false; - } - } - } - }, - boss_gongshenjg:{ - audio:2, - trigger:{player:'phaseEnd'}, - mode:['versus'], - filter:function(event,player){ - if(_status.mode!='jiange') return false; - var players=game.filterPlayer(); - for(var i=0;i0&&target.hasJudge('lebu')){ - return 0.1; - } - if(player.countCards('h')>player.hp){ - if(target==player) return Math.max(1,att-2); - } - if(target==player) return att+5; - return att; - } - } - "step 2" - if(result&&result.targets&&result.targets.length){ - event.target=result.targets[0]; - } - if(event.cards2.length){ - player.line(event.target,'green'); - event.target.gain(event.cards2,'gain2','log'); - } - }, - ai:{ - threaten:1.3 - } - }, - boss_biantian4:{ - trigger:{player:'dieBegin'}, - forced:true, - popup:false, - content:function(){ - for(var i=0;i-3) return 0; - var eff=get.damageEffect(target,player,player,'fire'); - if(eff>0){ - return eff+target.countCards('e')/2; - } - return 0; - } - "step 1" - if(result.bool){ - player.logSkill('boss_tianyun',result.targets,'fire'); - player.loseHp(); - event.target=result.targets[0]; - } - else{ - event.finish(); - } - "step 2" - if(event.target){ - event.target.damage(2,'fire'); - } - "step 3" - if(event.target){ - var es=event.target.getCards('e'); - if(es.length){ - event.target.discard(es); - } - } - }, - ai:{ - threaten:2 - } - }, - versus_ladder:{ - trigger:{global:['damageEnd','recoverEnd','dieEnd','gainEnd','phaseDiscardEnd']}, - silent:true, - filter:function(event,player){ - if(!_status.ladder) return false; - if(event._ladder_mmr_counted) return false; - if(!event.source) return false; - return event.source==game.me||event.player==game.me; - }, - content:function(){ - switch(event.triggername){ - case 'damageEnd':{ - if(trigger.source.side!=trigger.player.side){ - if(trigger.source==game.me){ - _status.ladder_mmr+=0.5*Math.max(1,trigger.num); - } - else{ - _status.ladder_mmr+=0.2*Math.max(1,trigger.num); - } - } - break; - } - case 'recoverEnd':{ - if(trigger.source!=trigger.player){ - if(trigger.source==game.me){ - if(trigger.player.side==game.me.side){ - _status.ladder_mmr+=0.5*trigger.num; - } - else{ - _status.ladder_mmr-=0.3*trigger.num; - } - } - } - else{ - _status.ladder_mmr+=0.3*trigger.num; - } - break; - } - case 'dieEnd':{ - if(trigger.source==game.me&&trigger.player.side!=game.me.side){ - _status.ladder_mmr+=2; - } - break; - } - case 'gainEnd':{ - if(trigger.cards&&trigger.cards.length){ - if(trigger.source==game.me&&trigger.player!=game.me){ - if(trigger.player.side==game.me.side){ - _status.ladder_mmr+=0.3*trigger.cards.length; - } - else{ - _status.ladder_mmr-=0.1*trigger.cards.length; - } - } - else{ - if(trigger.source){ - if(trigger.source.side!=game.me.side){ - _status.ladder_mmr+=0.3*trigger.cards.length; - } - } - else{ - _status.ladder_mmr+=0.1*trigger.cards.length; - } - } - } - break; - } - case 'phaseDiscardEnd':{ - if(trigger.player==player){ - if(trigger.cards&&trigger.cards.length){ - _status.ladder_mmr-=0.2*trigger.cards.length; - } - } - break; - } - } - trigger._ladder_mmr_counted=true; - } - } - }, - card:{ - zong:{ - fullskin:true, + xionghuangjiu3:{ + trigger:{player:'useCard'}, + silent:true, + filter:function(event,player){ + return !player.storage.xionghuangjiu; + }, + content:function(){ + player.storage.xionghuangjiu=trigger.card; + } + }, + longchuanzhibao:{ + mark:'auto', + nopop:true, + init:function(player){ + player.storage.longchuanzhibao=0; + }, + intro:{ + content:function(storage,player){ + var str='已有'+storage+'个龙船至宝,'+get.translation(player.side)+'势力共有'; + var num=storage; + for(var i=0;i0; + }, + content:function(){ + player.gainZhibao(1,trigger.player); + game.delay(); + }, + group:'longchuanzhibao_over', + subSkill:{ + over:{ + trigger:{player:'roundStart'}, + silent:true, + filter:function(){ + var map={wei:0,shu:0,wu:0,qun:0}; + for(var i=0;i=4){ + _status.winside=current.side; + return true; + } + } + }, + content:function(){ + for(var i=0;i0){ + return att+5; + } + return -1; + } + if(player.isTurnedOver()){ + return 5-att; + } + return -att; + }; + "step 1" + if(result.bool){ + player.logSkill('boss_didongjg',result.targets); + result.targets[0].turnOver(); + } + }, + ai:{ + threaten:1.7 + } + }, + boss_lianyujg:{ + trigger:{player:'phaseEnd'}, + unique:true, + content:function(){ + "step 0" + event.players=get.players(player); + "step 1" + if(event.players.length){ + var current=event.players.shift(); + if(current.isEnemyOf(player)){ + player.line(current,'fire'); + current.damage('fire'); + } + event.redo(); + } + }, + ai:{ + threaten:2 + } + }, + boss_mojianjg:{ + trigger:{player:'phaseUseBegin'}, + content:function(){ + var list=game.filterPlayer(function(current){ + return player.canUse('wanjian',current)&¤t.isEnemyOf(player); + }); + list.sort(lib.sort.seat); + player.useCard({name:'wanjian'},list); + }, + ai:{ + threaten:1.8 + } + }, + boss_qiwu:{ + audio:true, + trigger:{player:'useCard'}, + direct:true, + filter:function(event,player){ + if(get.suit(event.card)=='club'){ + return game.hasPlayer(function(current){ + return current.isFriendOf(player)&¤t.isDamaged(); + }); + } + return false; + }, + content:function(){ + "step 0" + var noneed=(trigger.card.name=='tao'&&trigger.targets[0]==player&&player.hp==player.maxHp-1); + player.chooseTarget(get.prompt('boss_qiwu'),function(card,player,target){ + return target.hp0){ + if(noneed&&player==target){ + num=0.5; + } + else if(target.hp==1){ + num+=3; + } + else if(target.hp==2){ + num+=1; + } + } + return num; + } + "step 1" + if(result.bool){ + player.logSkill('qiwu',result.targets); + result.targets[0].recover(); + } + }, + ai:{ + expose:0.3, + threaten:1.5 + } + }, + boss_tianyujg:{ + audio:true, + trigger:{player:'phaseEnd'}, + forced:true, + filter:function(event,player){ + return game.hasPlayer(function(current){ + return current.isEnemyOf(player)&&!current.isLinked(); + }); + }, + content:function(){ + "step 0" + event.targets=game.filterPlayer(); + event.targets.sort(lib.sort.seat); + "step 1" + if(event.targets.length){ + var target=event.targets.shift(); + if(!target.isLinked()&&target.isEnemyOf(player)){ + player.line(target,'green'); + target.link(); + } + event.redo(); + } + } + }, + boss_jueji:{ + audio:2, + trigger:{global:'phaseDrawBegin'}, + filter:function(event,player){ + if(event.player.isFriendOf(player)){ + return false; + } + return event.num>0&&event.player!=player&&event.player.hp=0; + }, + forced:true, + content:function(){ + 'step 0' + var targets=game.filterPlayer(function(current){ + return current.isEnemyOf(player); + }); + targets.sort(lib.sort.seat); + event.targets=targets; + player.line(targets,'thunder'); + event.num=targets.length; + 'step 1' + if(event.targets.length){ + event.targets.shift().damage('thunder'); + event.redo(); + } + 'step 2' + player.recover(event.num); + }, + ai:{ + threaten:function(player,target){ + if(target.hp==1) return 2; + if(target.hp==2&&game.players.length<8) return 1.5; + return 0.5; + }, + } + }, + boss_chiying:{ + audio:2, + trigger:{global:'damageBegin'}, + forced:true, + filter:function(event,player){ + if(event.num<=1) return false; + return event.player.isFriendOf(player); + }, + priority:-11, + content:function(){ + trigger.num=1; + } + }, + boss_jingfan:{ + global:'boss_jingfan2', + }, + boss_jingfan2:{ + mod:{ + globalFrom:function(from,to,distance){ + if(to.isEnemyOf(from)) return; + var players=game.filterPlayer(); + for(var i=0;i0){ + if(players[i].hp==1){ + return true; + } + num++; + if(num>=2) return true; + } + } + return false; + }, + content:function(){ + 'step 0' + player.turnOver(); + 'step 1' + var list=game.filterPlayer(function(current){ + return current.isDamaged()&¤t.isFriendOf(player); + }); + player.line(list,'green'); + event.targets=list; + 'step 2' + if(event.targets.length){ + event.targets.shift().recover(); + event.redo(); + } + }, + ai:{ + threaten:1.5, + effect:{ + target:function(card,player,target){ + if(card.name=='guiyoujie') return [0,1]; + } + } + }, + }, + boss_zhenwei:{ + global:'boss_zhenwei2', + ai:{ + threaten:1.5 + } + }, + boss_zhenwei2:{ + mod:{ + globalTo:function(from,to,distance){ + if(to.isFriendOf(from)) return; + var players=game.filterPlayer(); + for(var i=0;i0; + } + } + } + return num>=4; + }, + filter:function(event,player){ + var players=game.filterPlayer(); + for(var i=0;i0; + }, + content:function(){ + player.chooseToDiscard('h',true); + } + }, + boss_tunshi:{ + trigger:{player:'phaseBegin'}, + forced:true, + filter:function(event,player){ + var nh=player.countCards('h'); + return game.hasPlayer(function(current){ + return current.isEnemyOf(player)&¤t.countCards('h')>nh; + }); + }, + content:function(){ + 'step 0' + var nh=player.countCards('h'); + var targets=game.filterPlayer(function(current){ + return current.isEnemyOf(player)&¤t.countCards('h')>nh; + }); + targets.sort(lib.sort.seat); + event.targets=targets; + 'step 1' + if(event.targets.length){ + var current=event.targets.shift(); + current.damage('thunder'); + player.line(current,'thunder'); + event.redo(); + } + } + }, + boss_jiguan:{ + mod:{ + targetEnabled:function(card,player,target){ + if(card.name=='lebu'){ + return false; + } + } + } + }, + boss_gongshenjg:{ + audio:2, + trigger:{player:'phaseEnd'}, + mode:['versus'], + filter:function(event,player){ + if(_status.mode!='jiange') return false; + var players=game.filterPlayer(); + for(var i=0;i0&&target.hasJudge('lebu')){ + return 0.1; + } + if(player.countCards('h')>player.hp){ + if(target==player) return Math.max(1,att-2); + } + if(target==player) return att+5; + return att; + } + } + "step 2" + if(result&&result.targets&&result.targets.length){ + event.target=result.targets[0]; + } + if(event.cards2.length){ + player.line(event.target,'green'); + event.target.gain(event.cards2,'gain2','log'); + } + }, + ai:{ + threaten:1.3 + } + }, + boss_biantian4:{ + trigger:{player:'dieBegin'}, + forced:true, + popup:false, + content:function(){ + for(var i=0;i-3) return 0; + var eff=get.damageEffect(target,player,player,'fire'); + if(eff>0){ + return eff+target.countCards('e')/2; + } + return 0; + } + "step 1" + if(result.bool){ + player.logSkill('boss_tianyun',result.targets,'fire'); + player.loseHp(); + event.target=result.targets[0]; + } + else{ + event.finish(); + } + "step 2" + if(event.target){ + event.target.damage(2,'fire'); + } + "step 3" + if(event.target){ + var es=event.target.getCards('e'); + if(es.length){ + event.target.discard(es); + } + } + }, + ai:{ + threaten:2 + } + }, + versus_ladder:{ + trigger:{global:['damageEnd','recoverEnd','dieEnd','gainEnd','phaseDiscardEnd']}, + silent:true, + filter:function(event,player){ + if(!_status.ladder) return false; + if(event._ladder_mmr_counted) return false; + if(!event.source) return false; + return event.source==game.me||event.player==game.me; + }, + content:function(){ + switch(event.triggername){ + case 'damageEnd':{ + if(trigger.source.side!=trigger.player.side){ + if(trigger.source==game.me){ + _status.ladder_mmr+=0.5*Math.max(1,trigger.num); + } + else{ + _status.ladder_mmr+=0.2*Math.max(1,trigger.num); + } + } + break; + } + case 'recoverEnd':{ + if(trigger.source!=trigger.player){ + if(trigger.source==game.me){ + if(trigger.player.side==game.me.side){ + _status.ladder_mmr+=0.5*trigger.num; + } + else{ + _status.ladder_mmr-=0.3*trigger.num; + } + } + } + else{ + _status.ladder_mmr+=0.3*trigger.num; + } + break; + } + case 'dieEnd':{ + if(trigger.source==game.me&&trigger.player.side!=game.me.side){ + _status.ladder_mmr+=2; + } + break; + } + case 'gainEnd':{ + if(trigger.cards&&trigger.cards.length){ + if(trigger.source==game.me&&trigger.player!=game.me){ + if(trigger.player.side==game.me.side){ + _status.ladder_mmr+=0.3*trigger.cards.length; + } + else{ + _status.ladder_mmr-=0.1*trigger.cards.length; + } + } + else{ + if(trigger.source){ + if(trigger.source.side!=game.me.side){ + _status.ladder_mmr+=0.3*trigger.cards.length; + } + } + else{ + _status.ladder_mmr+=0.1*trigger.cards.length; + } + } + } + break; + } + case 'phaseDiscardEnd':{ + if(trigger.player==player){ + if(trigger.cards&&trigger.cards.length){ + _status.ladder_mmr-=0.2*trigger.cards.length; + } + } + break; + } + } + trigger._ladder_mmr_counted=true; + } + } + }, + card:{ + zong:{ + fullskin:true, type:'basic', cardcolor:'red', enable:function(card,player){ return player.hp2){ - return 0; - } - if(num==2&&get.population(player.side)==1){ - return 0; - } - return 1; - }).set('choiceList',[ - '摸'+get.cnNumber(num)+'张牌', - '你和队友各摸一张牌' - ]); - event.num=num; - 'step 1' - if(result.index==0){ - if(event.num){ - player.draw(event.num); - } - } - else{ - if(event.friend){ - player.line(event.friend); - game.asyncDraw([player,event.friend]); - } - else{ - player.draw(); - } - } - }, - ai:{ + }, + tongzhougongji:{ + fullskin:true, + cardimage:'lulitongxin', + notarget:true, + enable:true, + type:'trick', + content:function(){ + 'step 0' + var num=0; + for(var i=0;i2){ + return 0; + } + if(num==2&&get.population(player.side)==1){ + return 0; + } + return 1; + }).set('choiceList',[ + '摸'+get.cnNumber(num)+'张牌', + '你和队友各摸一张牌' + ]); + event.num=num; + 'step 1' + if(result.index==0){ + if(event.num){ + player.draw(event.num); + } + } + else{ + if(event.friend){ + player.line(event.friend); + game.asyncDraw([player,event.friend]); + } + else{ + player.draw(); + } + } + }, + ai:{ basic:{ order:7.2, useful:4, @@ -5405,29 +5405,29 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ draw:1 } } - }, - lizhengshangyou:{ - fullskin:true, - cardimage:'lianjunshengyan', + }, + lizhengshangyou:{ + fullskin:true, + cardimage:'lianjunshengyan', type:'trick', enable:true, selectTarget:-1, reverseOrder:true, filterTarget:function(card,player,target){ for(var i=0;i1&&(game.me==game.friendZhu||(lib.storage.zhu&&lib.storage.single_control))&& - !_status.auto){ - event.dialog=ui.create.dialog('选择替补角色',[list,'character']); - event.filterButton=function(){return true;}; - event.player=game.me; - event.forced=true; - event.custom.replace.confirm=function(){ - event.character=ui.selected.buttons[0].link; - event.dialog.close(); - if(ui.confirm) ui.confirm.close(); - delete event.player; - game.resume(); - } - game.check(); - game.pause(); - } - else{ - event.character=list[Math.floor(Math.random()*list.length)]; - } - "step 1" - game.uncheck(); - _status.friend.remove(event.character); - _status.enemy.remove(event.character); - source.revive(null,false); - game.additionaldead.push({ - name:source.name, - stat:source.stat - }); - game.addVideo('reinit',source,[event.character,get.translation(source.side+'Color')]); - source.uninit(); - source.init(event.character); - game.log(source,'出场'); - source.node.identity.dataset.color=get.translation(source.side+'Color'); - source.draw(4); - _status.event.parent.parent.parent.untrigger(false,source); - var evt=_status.event.parent.parent.parent; - for(var i=0;i<100;i++){ - evt=evt.parent; - if(evt.player==source){ - evt.finish(); - } - if(evt.name=='phase'){ - break; - } - } - if(lib.storage.single_control){ - game.onSwapControl(); - } - game.triggerEnter(source); - "step 2" - // if(_status.currentPhase==source){ - // source.skip('phase'); - // } - }, - replacePlayerTwo:function(){ - 'step 0' - game.delay(); - 'step 1' - source.revive(null,false); - game.additionaldead.push({ - name:source.name, - stat:source.stat - }); - game.addVideo('reinit',source,[event.character,get.translation(source.side+'Color')]); - source.uninit(); - source.init(event.character); - game.log(source,'出场'); - // source.node.identity.dataset.color=source.side+'zhu'; - source.draw(4); - _status.event.parent.parent.parent.untrigger(false,source); - var evt=_status.event.parent.parent.parent; - for(var i=0;i<100;i++){ - evt=evt.parent; - if(evt.player==source){ - evt.finish(); - } - if(evt.name=='phase'){ - break; - } - } - game.triggerEnter(source); - }, - replacePlayerOL:function(){ - 'step 0' - game.delay(); - 'step 1' - if(event.source.side==game.me.side){ - if(_status.friend.length==1){ - event.directresult=_status.friend[0]; - } - else if(event.source==game.me){ - if(_status.auto){ - event.directresult=_status.friend.randomGet(); - } - } - else{ - if(!event.source.isOnline()){ - event.directresult=_status.friend.randomGet(); - } - } - } - else{ - if(_status.enemy.length==1){ - event.directresult=_status.enemy[0]; - } - else{ - if(!event.source.isOnline()){ - event.directresult=_status.enemy.randomGet(); - } - } - } - if(!event.directresult){ - if(event.source==game.me){ - event.dialog=ui.create.dialog('选择替补角色',[_status.friend,'character']); - event.filterButton=function(){return true}; - event.player=game.me; - event.forced=true; - event.custom.replace.confirm=function(){ - event.directresult=ui.selected.buttons[0].link; - event.dialog.close(); - if(ui.confirm) ui.confirm.close(); - delete event.player; - game.resume(); - } - event.switchToAuto=function(){ - event.directresult=_status.friend.randomGet(); - event.dialog.close(); - if(ui.confirm) ui.confirm.close(); - delete event.player; - }; - game.check(); - game.pause(); - } - else{ - event.source.send(function(player){ - if(_status.auto){ - _status.event._result=_status.friend.randomGet(); - } - else{ - var next=game.createEvent('replacePlayer'); - next.source=player; - next.setContent(function(){ - event.dialog=ui.create.dialog('选择替补角色',[_status.friend,'character']); - event.filterButton=function(){return true}; - event.player=event.source; - event.forced=true; - event.custom.replace.confirm=function(){ - event.result=ui.selected.buttons[0].link; - event.dialog.close(); - if(ui.confirm) ui.confirm.close(); - delete event.player; - game.resume(); - game.uncheck(); - } - event.switchToAuto=function(){ - event.result=_status.friend.randomGet(); - event.dialog.close(); - if(ui.confirm) ui.confirm.close(); - delete event.player; - game.uncheck(); - }; - game.check(); - game.pause(); - }); - } - game.resume(); - },event.source); - event.source.wait(); - game.pause(); - } - } - 'step 2' - game.uncheck(); - if(!event.directresult){ - if(event.resultOL){ - event.directresult=event.resultOL[source.playerid]; - } - if(!event.directresult||event.directresult=='ai'){ - if(source.side==game.me.side){ - event.directresult=_status.friend.randomGet(); - } - else{ - event.directresult=_status.enemy.randomGet(); - } - } - } - var name=event.directresult; - var color=source.node.identity.dataset.color; - game.additionaldead.push({ - name:source.name, - stat:source.stat - }); + } + }, + element:{ + content:{ + replacePlayer:function(){ + "step 0" + var list=(source.side==game.me.side)?_status.friend:_status.enemy; + if(list.length==0){ + // if(game.friend.contains(source)){ + // game.over(false); + // } + // else{ + // game.over(true); + // } + game.friend.remove(source); + game.enemy.remove(source); + if(game.friend.length==0) game.over(false); + else if(game.enemy.length==0) game.over(true); + if(game.friendZhu&&game.friendZhu.classList.contains('dead')&&game.friend.length){ + game.friendZhu=game.friend[0]; + game.friendZhu.setIdentity(_status.color+'Zhu'); + } + if(game.enemyZhu&&game.enemyZhu.classList.contains('dead')&&game.enemy.length){ + game.enemyZhu=game.enemy[0]; + game.enemyZhu.setIdentity(!_status.color+'Zhu'); + } + event.finish(); + return; + } + if(source.side==game.me.side&&list.length>1&&(game.me==game.friendZhu||(lib.storage.zhu&&lib.storage.single_control))&& + !_status.auto){ + event.dialog=ui.create.dialog('选择替补角色',[list,'character']); + event.filterButton=function(){return true;}; + event.player=game.me; + event.forced=true; + event.custom.replace.confirm=function(){ + event.character=ui.selected.buttons[0].link; + event.dialog.close(); + if(ui.confirm) ui.confirm.close(); + delete event.player; + game.resume(); + } + game.check(); + game.pause(); + } + else{ + event.character=list[Math.floor(Math.random()*list.length)]; + } + "step 1" + game.uncheck(); + _status.friend.remove(event.character); + _status.enemy.remove(event.character); + source.revive(null,false); + game.additionaldead.push({ + name:source.name, + stat:source.stat + }); + game.addVideo('reinit',source,[event.character,get.translation(source.side+'Color')]); + source.uninit(); + source.init(event.character); + game.log(source,'出场'); + source.node.identity.dataset.color=get.translation(source.side+'Color'); + source.draw(4); + _status.event.parent.parent.parent.untrigger(false,source); + var evt=_status.event.parent.parent.parent; + for(var i=0;i<100;i++){ + evt=evt.parent; + if(evt.player==source){ + evt.finish(); + } + if(evt.name=='phase'){ + break; + } + } + if(lib.storage.single_control){ + game.onSwapControl(); + } + game.triggerEnter(source); + "step 2" + // if(_status.currentPhase==source){ + // source.skip('phase'); + // } + }, + replacePlayerTwo:function(){ + 'step 0' + game.delay(); + 'step 1' + source.revive(null,false); + game.additionaldead.push({ + name:source.name, + stat:source.stat + }); + game.addVideo('reinit',source,[event.character,get.translation(source.side+'Color')]); + source.uninit(); + source.init(event.character); + game.log(source,'出场'); + // source.node.identity.dataset.color=source.side+'zhu'; + source.draw(4); + _status.event.parent.parent.parent.untrigger(false,source); + var evt=_status.event.parent.parent.parent; + for(var i=0;i<100;i++){ + evt=evt.parent; + if(evt.player==source){ + evt.finish(); + } + if(evt.name=='phase'){ + break; + } + } + game.triggerEnter(source); + }, + replacePlayerOL:function(){ + 'step 0' + game.delay(); + 'step 1' + if(event.source.side==game.me.side){ + if(_status.friend.length==1){ + event.directresult=_status.friend[0]; + } + else if(event.source==game.me){ + if(_status.auto){ + event.directresult=_status.friend.randomGet(); + } + } + else{ + if(!event.source.isOnline()){ + event.directresult=_status.friend.randomGet(); + } + } + } + else{ + if(_status.enemy.length==1){ + event.directresult=_status.enemy[0]; + } + else{ + if(!event.source.isOnline()){ + event.directresult=_status.enemy.randomGet(); + } + } + } + if(!event.directresult){ + if(event.source==game.me){ + event.dialog=ui.create.dialog('选择替补角色',[_status.friend,'character']); + event.filterButton=function(){return true}; + event.player=game.me; + event.forced=true; + event.custom.replace.confirm=function(){ + event.directresult=ui.selected.buttons[0].link; + event.dialog.close(); + if(ui.confirm) ui.confirm.close(); + delete event.player; + game.resume(); + } + event.switchToAuto=function(){ + event.directresult=_status.friend.randomGet(); + event.dialog.close(); + if(ui.confirm) ui.confirm.close(); + delete event.player; + }; + game.check(); + game.pause(); + } + else{ + event.source.send(function(player){ + if(_status.auto){ + _status.event._result=_status.friend.randomGet(); + } + else{ + var next=game.createEvent('replacePlayer'); + next.source=player; + next.setContent(function(){ + event.dialog=ui.create.dialog('选择替补角色',[_status.friend,'character']); + event.filterButton=function(){return true}; + event.player=event.source; + event.forced=true; + event.custom.replace.confirm=function(){ + event.result=ui.selected.buttons[0].link; + event.dialog.close(); + if(ui.confirm) ui.confirm.close(); + delete event.player; + game.resume(); + game.uncheck(); + } + event.switchToAuto=function(){ + event.result=_status.friend.randomGet(); + event.dialog.close(); + if(ui.confirm) ui.confirm.close(); + delete event.player; + game.uncheck(); + }; + game.check(); + game.pause(); + }); + } + game.resume(); + },event.source); + event.source.wait(); + game.pause(); + } + } + 'step 2' + game.uncheck(); + if(!event.directresult){ + if(event.resultOL){ + event.directresult=event.resultOL[source.playerid]; + } + if(!event.directresult||event.directresult=='ai'){ + if(source.side==game.me.side){ + event.directresult=_status.friend.randomGet(); + } + else{ + event.directresult=_status.enemy.randomGet(); + } + } + } + var name=event.directresult; + var color=source.node.identity.dataset.color; + game.additionaldead.push({ + name:source.name, + stat:source.stat + }); - game.broadcastAll(function(source,name,color){ - _status.friend.remove(name); - _status.enemy.remove(name); - source.revive(null,false); - source.uninit(); - source.init(name); - source.node.identity.dataset.color=color; - if(source==game.me){ - ui.arena.classList.remove('selecting'); - } - },source,name,color); - game.log(source,'出场'); + game.broadcastAll(function(source,name,color){ + _status.friend.remove(name); + _status.enemy.remove(name); + source.revive(null,false); + source.uninit(); + source.init(name); + source.node.identity.dataset.color=color; + if(source==game.me){ + ui.arena.classList.remove('selecting'); + } + },source,name,color); + game.log(source,'出场'); - source.draw(4); - _status.event.parent.parent.parent.untrigger(false,source); - game.addVideo('reinit',source,[name,color]); - game.triggerEnter(source); - }, - }, - player:{ - gainZhibao:function(num,source){ - if(source){ - if(num===true||num>source.storage.longchuanzhibao){ - num=source.storage.longchuanzhibao; - } - } - else{ - if(typeof num!='number'){ - num=1; - } - } - if(!num||typeof num!='number') return this; + source.draw(4); + _status.event.parent.parent.parent.untrigger(false,source); + game.addVideo('reinit',source,[name,color]); + game.triggerEnter(source); + }, + }, + player:{ + gainZhibao:function(num,source){ + if(source){ + if(num===true||num>source.storage.longchuanzhibao){ + num=source.storage.longchuanzhibao; + } + } + else{ + if(typeof num!='number'){ + num=1; + } + } + if(!num||typeof num!='number') return this; - this.storage.longchuanzhibao+=num; - this.updateMark('longchuanzhibao'); + this.storage.longchuanzhibao+=num; + this.updateMark('longchuanzhibao'); - if(source){ - source.storage.longchuanzhibao-=num; - source.updateMark('longchuanzhibao'); - game.log(this,'从',source,'处获得了'+get.cnNumber(num)+'个','#y龙船至宝'); - } - else{ - game.log(this,'获得了'+get.cnNumber(num)+'个','#y龙船至宝'); - } + if(source){ + source.storage.longchuanzhibao-=num; + source.updateMark('longchuanzhibao'); + game.log(this,'从',source,'处获得了'+get.cnNumber(num)+'个','#y龙船至宝'); + } + else{ + game.log(this,'获得了'+get.cnNumber(num)+'个','#y龙船至宝'); + } - if(source&&source.side!=this.side){ - this.draw(num,'nodelay'); - var that=this; - var friend=game.findPlayer(function(current){ - return current.side==that.side&¤t!=that; - }); - if(friend){ - friend.draw(num,'nodelay'); - } - } + if(source&&source.side!=this.side){ + this.draw(num,'nodelay'); + var that=this; + var friend=game.findPlayer(function(current){ + return current.side==that.side&¤t!=that; + }); + if(friend){ + friend.draw(num,'nodelay'); + } + } - var map={wei:0,shu:0,wu:0,qun:0}; - for(var i=0;i=4){ - current.classList.add('current_action'); - } - else{ - current.classList.remove('current_action'); - } - } - return this; - }, - dieAfter:function(source){ - if(_status.connectMode){ - if(_status.mode=='1v1'||_status.mode=='3v3'){ - game.broadcastAll(function(dead){ - if(dead.side==game.me.side){ - _status.friendDied.push(dead.name); - _status.friendCount.innerHTML='阵亡: '+get.cnNumber(_status.friendDied.length,true); - } - else{ - _status.enemyDied.push(dead.name); - _status.enemyCount.innerHTML='杀敌: '+get.cnNumber(_status.enemyDied.length,true); - } - },this); - if(this.side==game.me.side){ - if(_status.friend.length==0){ - game.over(false); - return; - } - } - else{ - if(_status.enemy.length==0){ - game.over(true); - return; - } - } - game.replacePlayerOL(this); - } - else if(_status.mode=='2v2'){ - if(_status.replacetwo){ + var map={wei:0,shu:0,wu:0,qun:0}; + for(var i=0;i=4){ + current.classList.add('current_action'); + } + else{ + current.classList.remove('current_action'); + } + } + return this; + }, + dieAfter:function(source){ + if(_status.connectMode){ + if(_status.mode=='1v1'||_status.mode=='3v3'){ + game.broadcastAll(function(dead){ + if(dead.side==game.me.side){ + _status.friendDied.push(dead.name); + _status.friendCount.innerHTML='阵亡: '+get.cnNumber(_status.friendDied.length,true); + } + else{ + _status.enemyDied.push(dead.name); + _status.enemyCount.innerHTML='杀敌: '+get.cnNumber(_status.enemyDied.length,true); + } + },this); + if(this.side==game.me.side){ + if(_status.friend.length==0){ + game.over(false); + return; + } + } + else{ + if(_status.enemy.length==0){ + game.over(true); + return; + } + } + game.replacePlayerOL(this); + } + else if(_status.mode=='2v2'){ + if(_status.replacetwo){ + // later ? + } + var friend; + for(var i=0;i=side2.length+2){ + game.me.showGiveup(); + } + } + } + return; + } + else if(_status.mode=='two'){ + var friend; + for(var i=0;imax){ + max=list[i].storage.longchuanzhibao; + } + } + for(var i=0;i=side2.length+2){ - game.me.showGiveup(); - } - } - } - return; - } - else if(_status.mode=='two'){ - var friend; - for(var i=0;imax){ - max=list[i].storage.longchuanzhibao; - } - } - for(var i=0;i2)){ - if(game.friend.contains(this)){ - game.over(false); - } - else{ - game.over(true); - } - } - else if(game.friend.length==1&&this==game.friend[0]&&_status.friend.length==0){ - game.over(false); - } - else if(game.enemy.length==1&&this==game.enemy[0]&&_status.enemy.length==0){ - game.over(true); - } - else{ - if(source){ - if(source.side!=this.side){ - if(lib.storage.versus_reward){ - source.draw(lib.storage.versus_reward); - } - } - else{ - if(lib.storage.versus_punish=='弃牌'){ - source.discard(source.getCards('he')); - } - else if(lib.storage.versus_punish=='摸牌'&&lib.storage.versus_reward){ - source.draw(lib.storage.versus_reward); - } - } - } - else{ - game.delay(); - } - game.replacePlayer(this); - } - } - } - } - }, - get:{ - rawAttitude:function(from,to){ - if(from.side==to.side){ - if(to.identity=='zhu'){ - if(_status.connectMode){ - if(_status.mode=='4v4') return 7; - } - else{ - if(lib.storage.main_zhu||_status.mode=='four') return 7; - } - } - return 6; - } - else{ - if(_status.mode=='siguo'){ - var list=['wei','shu','wu','qun']; - var map={wei:0,shu:0,wu:0,qun:0}; - var map2={wei:0,shu:0,wu:0,qun:0}; - for(var i=0;i=4){ - allin=i; - break; - } - else if(map2[i]==3){ - map[i]+=10; - } - else if(map2[i]==2){ - map[i]++; - } - } - if(allin) return to.side==allin?-20:0; - list.sort(function(a,b){ - return map[b]-map[a]; - }); - var id1=list.indexOf(from.side); - var id2=list.indexOf(to.side); - var att=-1; - switch(id1){ - case 0:att=_status.siguoai[id2+2];break; - case 1: - switch(id2){ - case 0:att=_status.siguoai[0];break; - case 2:att=_status.siguoai[1];break; - case 3:att=_status.siguoai[2];break; - } - break; - case 2: - switch(id2){ - case 0:att=_status.siguoai[0];break; - case 1:att=_status.siguoai[1];break; - case 3:att=_status.siguoai[2];break; - } - break; - case 3:{ - if(id2==0){ - att=_status.siguoai[1];break; - } - else{ - att=_status.siguoai[2];break; - } - } - } - if(map2[to.side]>=4){ - att-=10; - } - else if(map2[to.side]==3){ - att-=3; - } - else if(map2[to.side]==2){ - att-=0.5; - } - if(to.storage.longchuanzhibao){ - return att*1.2; - } - return att; - } - else{ - if(to.identity=='zhu'){ - if(_status.connectMode){ - if(_status.mode=='4v4') return -10; - } - else{ - if(lib.storage.main_zhu||_status.mode=='four') return -10; - } - } - return -6; - } - } - }, - }, - help:{ - '对决模式': - '
      同舟共济(四国)
      • 游戏开始时,每个势力的随机一名角色得到一个龙船至宝,1号位角色所在的势力额外获得一个龙船至宝,场上共5枚龙船至宝。龙船至宝是一个特殊标记。'+ - '
      • 争夺龙船至宝的方式:当敌人受到了你造成的伤害后,若其有龙船至宝,则你获得其一个龙船至宝。若你杀死了该敌人,则你获得其所有的龙船至宝。'+ - '
      • 获得龙船至宝时的摸牌:除游戏开始时外,若你从非队友处获得了龙船至宝,则你和队友各摸X张牌。(X为该次获得的龙船至宝数;获得队友的龙船至宝不摸牌)'+ - '
      • 无来源死亡时:当一名角色死亡时,若没有伤害来源,则其持有的所有龙船至宝交给场上龙船至宝数唯一最多的角色,若没有则随机分配,获得龙船至宝的角色和其队友各摸X张牌。'+ - '
      • 杀死队友时:当你杀死队友时,则将你和队友持有的所有龙船至宝交给场上龙船至宝数唯一最多的敌人,若没有则随机分配,获得龙船至宝的角色和其队友各摸X张牌。'+ - '
      • 胜利条件:满足一下任意条件游戏结束:(1)在新的一轮开始时,若你的势力获得的龙船至宝至少为4个,则你和队友获胜;(2)消灭所有敌人。'+ - '
      '+ - '
      2v2 替补模式
      • 选将时额外选择一名替补武将,阵亡时使用自己的替补武将上场,无替补时改为用队友的替补武将,两人均无替补时游戏结束'+ - '
      • 杀死敌方武将摸3张牌,杀死友方武将弃置所有牌
      '+ - '
      4v4
      • 双方各有一名主公和三名忠臣,杀死对方主公获胜
      • '+ - '8号位游戏开始时额外摸一张牌,7、8号位可在游戏开始时置换一次手牌
      • '+ - '杀死对方忠臣摸2+x张牌,x为对方(含刚被杀的忠臣)与己方的存活人数之差;主公杀死己方忠臣须弃置所有牌', - } - }; + var list=(this.side==game.me.side)?_status.friend:_status.enemy; + if((list.length==0&&lib.storage.noreplace_end)|| + (lib.storage.zhu&&lib.storage.main_zhu&&this.identity=='zhu'&&game.players.length>2)){ + if(game.friend.contains(this)){ + game.over(false); + } + else{ + game.over(true); + } + } + else if(game.friend.length==1&&this==game.friend[0]&&_status.friend.length==0){ + game.over(false); + } + else if(game.enemy.length==1&&this==game.enemy[0]&&_status.enemy.length==0){ + game.over(true); + } + else{ + if(source){ + if(source.side!=this.side){ + if(lib.storage.versus_reward){ + source.draw(lib.storage.versus_reward); + } + } + else{ + if(lib.storage.versus_punish=='弃牌'){ + source.discard(source.getCards('he')); + } + else if(lib.storage.versus_punish=='摸牌'&&lib.storage.versus_reward){ + source.draw(lib.storage.versus_reward); + } + } + } + else{ + game.delay(); + } + game.replacePlayer(this); + } + } + } + } + }, + get:{ + rawAttitude:function(from,to){ + if(from.side==to.side){ + if(to.identity=='zhu'){ + if(_status.connectMode){ + if(_status.mode=='4v4') return 7; + } + else{ + if(lib.storage.main_zhu||_status.mode=='four') return 7; + } + } + return 6; + } + else{ + if(_status.mode=='siguo'){ + var list=['wei','shu','wu','qun']; + var map={wei:0,shu:0,wu:0,qun:0}; + var map2={wei:0,shu:0,wu:0,qun:0}; + for(var i=0;i=4){ + allin=i; + break; + } + else if(map2[i]==3){ + map[i]+=10; + } + else if(map2[i]==2){ + map[i]++; + } + } + if(allin) return to.side==allin?-20:0; + list.sort(function(a,b){ + return map[b]-map[a]; + }); + var id1=list.indexOf(from.side); + var id2=list.indexOf(to.side); + var att=-1; + switch(id1){ + case 0:att=_status.siguoai[id2+2];break; + case 1: + switch(id2){ + case 0:att=_status.siguoai[0];break; + case 2:att=_status.siguoai[1];break; + case 3:att=_status.siguoai[2];break; + } + break; + case 2: + switch(id2){ + case 0:att=_status.siguoai[0];break; + case 1:att=_status.siguoai[1];break; + case 3:att=_status.siguoai[2];break; + } + break; + case 3:{ + if(id2==0){ + att=_status.siguoai[1];break; + } + else{ + att=_status.siguoai[2];break; + } + } + } + if(map2[to.side]>=4){ + att-=10; + } + else if(map2[to.side]==3){ + att-=3; + } + else if(map2[to.side]==2){ + att-=0.5; + } + if(to.storage.longchuanzhibao){ + return att*1.2; + } + return att; + } + else{ + if(to.identity=='zhu'){ + if(_status.connectMode){ + if(_status.mode=='4v4') return -10; + } + else{ + if(lib.storage.main_zhu||_status.mode=='four') return -10; + } + } + return -6; + } + } + }, + }, + help:{ + '对决模式': + '
        同舟共济(四国)
        • 游戏开始时,每个势力的随机一名角色得到一个龙船至宝,1号位角色所在的势力额外获得一个龙船至宝,场上共5枚龙船至宝。龙船至宝是一个特殊标记。'+ + '
        • 争夺龙船至宝的方式:当敌人受到了你造成的伤害后,若其有龙船至宝,则你获得其一个龙船至宝。若你杀死了该敌人,则你获得其所有的龙船至宝。'+ + '
        • 获得龙船至宝时的摸牌:除游戏开始时外,若你从非队友处获得了龙船至宝,则你和队友各摸X张牌。(X为该次获得的龙船至宝数;获得队友的龙船至宝不摸牌)'+ + '
        • 无来源死亡时:当一名角色死亡时,若没有伤害来源,则其持有的所有龙船至宝交给场上龙船至宝数唯一最多的角色,若没有则随机分配,获得龙船至宝的角色和其队友各摸X张牌。'+ + '
        • 杀死队友时:当你杀死队友时,则将你和队友持有的所有龙船至宝交给场上龙船至宝数唯一最多的敌人,若没有则随机分配,获得龙船至宝的角色和其队友各摸X张牌。'+ + '
        • 胜利条件:满足一下任意条件游戏结束:(1)在新的一轮开始时,若你的势力获得的龙船至宝至少为4个,则你和队友获胜;(2)消灭所有敌人。'+ + '
        '+ + '
        2v2 替补模式
        • 选将时额外选择一名替补武将,阵亡时使用自己的替补武将上场,无替补时改为用队友的替补武将,两人均无替补时游戏结束'+ + '
        • 杀死敌方武将摸3张牌,杀死友方武将弃置所有牌
        '+ + '
        4v4
        • 双方各有一名主公和三名忠臣,杀死对方主公获胜
        • '+ + '8号位游戏开始时额外摸一张牌,7、8号位可在游戏开始时置换一次手牌
        • '+ + '杀死对方忠臣摸2+x张牌,x为对方(含刚被杀的忠臣)与己方的存活人数之差;主公杀死己方忠臣须弃置所有牌', + } + }; });