diff --git a/audio/die/nashime.mp3 b/audio/die/nashime.mp3 new file mode 100644 index 000000000..ba451848f Binary files /dev/null and b/audio/die/nashime.mp3 differ diff --git a/audio/die/ol_liushan.mp3 b/audio/die/ol_liushan.mp3 new file mode 100644 index 000000000..38b82c949 Binary files /dev/null and b/audio/die/ol_liushan.mp3 differ diff --git a/audio/die/ol_yuanshao.mp3 b/audio/die/ol_yuanshao.mp3 new file mode 100644 index 000000000..be76f28aa Binary files /dev/null and b/audio/die/ol_yuanshao.mp3 differ diff --git a/audio/die/re_sunce.mp3 b/audio/die/re_sunce.mp3 new file mode 100644 index 000000000..0ab2483e5 Binary files /dev/null and b/audio/die/re_sunce.mp3 differ diff --git a/audio/die/shenpei.mp3 b/audio/die/shenpei.mp3 new file mode 100644 index 000000000..53dedd6ed Binary files /dev/null and b/audio/die/shenpei.mp3 differ diff --git a/audio/die/tw_beimihu.mp3 b/audio/die/tw_beimihu.mp3 new file mode 100644 index 000000000..33014e024 Binary files /dev/null and b/audio/die/tw_beimihu.mp3 differ diff --git a/audio/die/yuantanyuanshang.mp3 b/audio/die/yuantanyuanshang.mp3 new file mode 100644 index 000000000..e844778ff Binary files /dev/null and b/audio/die/yuantanyuanshang.mp3 differ diff --git a/audio/skill/baijia_tw_beimihu1.mp3 b/audio/skill/baijia_tw_beimihu1.mp3 new file mode 100644 index 000000000..cc1de5260 Binary files /dev/null and b/audio/skill/baijia_tw_beimihu1.mp3 differ diff --git a/audio/skill/baijia_tw_beimihu2.mp3 b/audio/skill/baijia_tw_beimihu2.mp3 new file mode 100644 index 000000000..cfca36aa0 Binary files /dev/null and b/audio/skill/baijia_tw_beimihu2.mp3 differ diff --git a/audio/skill/bmcanshi_tw_beimihu1.mp3 b/audio/skill/bmcanshi_tw_beimihu1.mp3 new file mode 100644 index 000000000..f41b049bc Binary files /dev/null and b/audio/skill/bmcanshi_tw_beimihu1.mp3 differ diff --git a/audio/skill/bmcanshi_tw_beimihu2.mp3 b/audio/skill/bmcanshi_tw_beimihu2.mp3 new file mode 100644 index 000000000..28ab4992d Binary files /dev/null and b/audio/skill/bmcanshi_tw_beimihu2.mp3 differ diff --git a/audio/skill/chijie.mp3 b/audio/skill/chijie.mp3 new file mode 100644 index 000000000..e32acaadd Binary files /dev/null and b/audio/skill/chijie.mp3 differ diff --git a/audio/skill/guju_tw_beimihu1.mp3 b/audio/skill/guju_tw_beimihu1.mp3 new file mode 100644 index 000000000..f4a3dd94d Binary files /dev/null and b/audio/skill/guju_tw_beimihu1.mp3 differ diff --git a/audio/skill/guju_tw_beimihu2.mp3 b/audio/skill/guju_tw_beimihu2.mp3 new file mode 100644 index 000000000..f5940bd4b Binary files /dev/null and b/audio/skill/guju_tw_beimihu2.mp3 differ diff --git a/audio/skill/jiang_re_sunce1.mp3 b/audio/skill/jiang_re_sunce1.mp3 new file mode 100644 index 000000000..fda5f3531 Binary files /dev/null and b/audio/skill/jiang_re_sunce1.mp3 differ diff --git a/audio/skill/jiang_re_sunce2.mp3 b/audio/skill/jiang_re_sunce2.mp3 new file mode 100644 index 000000000..ae350d0fb Binary files /dev/null and b/audio/skill/jiang_re_sunce2.mp3 differ diff --git a/audio/skill/jijiang1_ol_liushan1.mp3 b/audio/skill/jijiang1_ol_liushan1.mp3 new file mode 100644 index 000000000..f3d55eea9 Binary files /dev/null and b/audio/skill/jijiang1_ol_liushan1.mp3 differ diff --git a/audio/skill/jijiang1_ol_liushan2.mp3 b/audio/skill/jijiang1_ol_liushan2.mp3 new file mode 100644 index 000000000..254285d44 Binary files /dev/null and b/audio/skill/jijiang1_ol_liushan2.mp3 differ diff --git a/audio/skill/liezhi1.mp3 b/audio/skill/liezhi1.mp3 new file mode 100644 index 000000000..442da5613 Binary files /dev/null and b/audio/skill/liezhi1.mp3 differ diff --git a/audio/skill/liezhi2.mp3 b/audio/skill/liezhi2.mp3 new file mode 100644 index 000000000..a3069391c Binary files /dev/null and b/audio/skill/liezhi2.mp3 differ diff --git a/audio/skill/neifa1.mp3 b/audio/skill/neifa1.mp3 new file mode 100644 index 000000000..bee33e6db Binary files /dev/null and b/audio/skill/neifa1.mp3 differ diff --git a/audio/skill/neifa2.mp3 b/audio/skill/neifa2.mp3 new file mode 100644 index 000000000..c7bee1ac9 Binary files /dev/null and b/audio/skill/neifa2.mp3 differ diff --git a/audio/skill/olfangquan1.mp3 b/audio/skill/olfangquan1.mp3 new file mode 100644 index 000000000..42ca00cbe Binary files /dev/null and b/audio/skill/olfangquan1.mp3 differ diff --git a/audio/skill/olfangquan2.mp3 b/audio/skill/olfangquan2.mp3 new file mode 100644 index 000000000..0724366c0 Binary files /dev/null and b/audio/skill/olfangquan2.mp3 differ diff --git a/audio/skill/olhunzi1.mp3 b/audio/skill/olhunzi1.mp3 new file mode 100644 index 000000000..d09440ebc Binary files /dev/null and b/audio/skill/olhunzi1.mp3 differ diff --git a/audio/skill/olhunzi2.mp3 b/audio/skill/olhunzi2.mp3 new file mode 100644 index 000000000..5976b84b7 Binary files /dev/null and b/audio/skill/olhunzi2.mp3 differ diff --git a/audio/skill/olluanji1.mp3 b/audio/skill/olluanji1.mp3 new file mode 100644 index 000000000..9184115b3 Binary files /dev/null and b/audio/skill/olluanji1.mp3 differ diff --git a/audio/skill/olluanji2.mp3 b/audio/skill/olluanji2.mp3 new file mode 100644 index 000000000..fdf89d001 Binary files /dev/null and b/audio/skill/olluanji2.mp3 differ diff --git a/audio/skill/olruoyu1.mp3 b/audio/skill/olruoyu1.mp3 new file mode 100644 index 000000000..7a89bbf85 Binary files /dev/null and b/audio/skill/olruoyu1.mp3 differ diff --git a/audio/skill/olruoyu2.mp3 b/audio/skill/olruoyu2.mp3 new file mode 100644 index 000000000..85e43100a Binary files /dev/null and b/audio/skill/olruoyu2.mp3 differ diff --git a/audio/skill/olxueyi1.mp3 b/audio/skill/olxueyi1.mp3 new file mode 100644 index 000000000..9b64f497d Binary files /dev/null and b/audio/skill/olxueyi1.mp3 differ diff --git a/audio/skill/olxueyi2.mp3 b/audio/skill/olxueyi2.mp3 new file mode 100644 index 000000000..d0a4abc5c Binary files /dev/null and b/audio/skill/olxueyi2.mp3 differ diff --git a/audio/skill/olzhiba1.mp3 b/audio/skill/olzhiba1.mp3 new file mode 100644 index 000000000..ea2d39c59 Binary files /dev/null and b/audio/skill/olzhiba1.mp3 differ diff --git a/audio/skill/olzhiba2.mp3 b/audio/skill/olzhiba2.mp3 new file mode 100644 index 000000000..5a22d3db6 Binary files /dev/null and b/audio/skill/olzhiba2.mp3 differ diff --git a/audio/skill/renshe1.mp3 b/audio/skill/renshe1.mp3 new file mode 100644 index 000000000..c35990ec5 Binary files /dev/null and b/audio/skill/renshe1.mp3 differ diff --git a/audio/skill/renshe2.mp3 b/audio/skill/renshe2.mp3 new file mode 100644 index 000000000..a5e85a69f Binary files /dev/null and b/audio/skill/renshe2.mp3 differ diff --git a/audio/skill/shouye1.mp3 b/audio/skill/shouye1.mp3 new file mode 100644 index 000000000..2a9b1579e Binary files /dev/null and b/audio/skill/shouye1.mp3 differ diff --git a/audio/skill/shouye2.mp3 b/audio/skill/shouye2.mp3 new file mode 100644 index 000000000..e1e5f0fc5 Binary files /dev/null and b/audio/skill/shouye2.mp3 differ diff --git a/audio/skill/sishu1.mp3 b/audio/skill/sishu1.mp3 new file mode 100644 index 000000000..7d6143b19 Binary files /dev/null and b/audio/skill/sishu1.mp3 differ diff --git a/audio/skill/sishu2.mp3 b/audio/skill/sishu2.mp3 new file mode 100644 index 000000000..ceb697cd9 Binary files /dev/null and b/audio/skill/sishu2.mp3 differ diff --git a/audio/skill/waishi1.mp3 b/audio/skill/waishi1.mp3 new file mode 100644 index 000000000..82e4c9abe Binary files /dev/null and b/audio/skill/waishi1.mp3 differ diff --git a/audio/skill/waishi2.mp3 b/audio/skill/waishi2.mp3 new file mode 100644 index 000000000..1a1e5d2de Binary files /dev/null and b/audio/skill/waishi2.mp3 differ diff --git a/audio/skill/xiangle_ol_liushan1.mp3 b/audio/skill/xiangle_ol_liushan1.mp3 new file mode 100644 index 000000000..c1b518718 Binary files /dev/null and b/audio/skill/xiangle_ol_liushan1.mp3 differ diff --git a/audio/skill/xiangle_ol_liushan2.mp3 b/audio/skill/xiangle_ol_liushan2.mp3 new file mode 100644 index 000000000..b7b8b6f68 Binary files /dev/null and b/audio/skill/xiangle_ol_liushan2.mp3 differ diff --git a/audio/skill/zongkui_tw_beimihu1.mp3 b/audio/skill/zongkui_tw_beimihu1.mp3 new file mode 100644 index 000000000..d2b03d0cd Binary files /dev/null and b/audio/skill/zongkui_tw_beimihu1.mp3 differ diff --git a/audio/skill/zongkui_tw_beimihu2.mp3 b/audio/skill/zongkui_tw_beimihu2.mp3 new file mode 100644 index 000000000..241f85a45 Binary files /dev/null and b/audio/skill/zongkui_tw_beimihu2.mp3 differ diff --git a/card/extra.js b/card/extra.js index 198450928..57fc2e532 100644 --- a/card/extra.js +++ b/card/extra.js @@ -19,12 +19,8 @@ game.import('card',function(lib,game,ui,get,ai,_status){ player.$throw(card.cards,1000); player.popup('muniu'); game.log(card,'掉落了',card.cards); - while(card.cards.length){ - var card2=card.cards.shift(); - if(card2.parentNode.id=='special'){ - card2.discard(); - } - } + game.cardsDiscard(card.cards); + card.cards.length=0; } }, clearLose:true, @@ -62,7 +58,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ return target==player; }, content:function(){ - if(target.isDying()){ + if(target.isDying()||event.getParent(2).type=='dying'){ target.recover(); if(_status.currentPhase==target){ target.getStat().card.jiu--; diff --git a/card/guozhan.js b/card/guozhan.js index 4f9ed3fc4..a0dad86de 100644 --- a/card/guozhan.js +++ b/card/guozhan.js @@ -230,7 +230,8 @@ game.import('card',function(lib,game,ui,get,ai,_status){ tag:{ damage:1, thunderDamage:1, - natureDamage:1 + natureDamage:1, + loseCard:1, }, result:{ target:function(player,target){ @@ -620,7 +621,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ if(target.isUnseen(0)) controls.push('主将'); if(target.isUnseen(1)) controls.push('副将'); if(controls.length>1){ - player.chooseControl(controls); + player.chooseControl(controls).set('ai',function(){return 1}); } if(controls.length==0) event.finish(); "step 1" diff --git a/card/huanlekapai.js b/card/huanlekapai.js index 0aaf38308..a1589e0f0 100644 --- a/card/huanlekapai.js +++ b/card/huanlekapai.js @@ -1,598 +1,354 @@ 'use strict'; game.import('card',function(lib,game,ui,get,ai,_status){ - return { + return { name:'huanlekapai', connect:true, card:{ "monkey":{ - audio:true, - fullskin:true, - type:"equip", - subtype:"equip5", - skills:["monkey"], - ai:{ - basic:{ - equipValue:8, - order:function (card,player){ - if(player&&player.hasSkillTag('reverseEquip')){ - return 8.5-get.equipValue(card,player)/20; - } - else{ - return 8+get.equipValue(card,player)/20; - } - }, - useful:2, - value:function (card,player){ - var value=0; - var info=get.info(card); - var current=player.getEquip(info.subtype); - if(current&&card!=current){ - value=get.value(current,player); - } - var equipValue=info.ai.equipValue; - if(equipValue==undefined){ - equipValue=info.ai.basic.equipValue; - } - if(typeof equipValue=='function') return equipValue(card,player)-value; - if(typeof equipValue!='number') equipValue=0; - return equipValue-value; - }, - }, - result:{ - target:function (player,target){ - return get.equipResult(player,target,name); - }, - }, - }, - enable:true, - selectTarget:-1, - filterTarget:function (card,player,target){ - return target==player; - }, - modTarget:true, - allowMultiple:false, - content:function (){ - target.equip(card); - }, - toself:true, - }, - - "mianju":{ - audio:true, - type:"equip", - subtype:"equip2", - skills:["mianju"], - ai:{ - order:9.5, - basic:{ - equipValue:function (card,player){ - if(!player.isTurnedOver()) return 6; - if(player.isTurnedOver()) return -10; - return 0; - }, - order:function (card,player){ - if(player&&player.hasSkillTag('reverseEquip')){ - return 8.5-get.equipValue(card,player)/20; - } - else{ - return 8+get.equipValue(card,player)/20; - } - }, - useful:2, - value:function (card,player){ - var value=0; - var info=get.info(card); - var current=player.getEquip(info.subtype); - if(current&&card!=current){ - value=get.value(current,player); - } - var equipValue=info.ai.equipValue; - if(equipValue==undefined){ - equipValue=info.ai.basic.equipValue; - } - if(typeof equipValue=='function') return equipValue(card,player)-value; - if(typeof equipValue!='number') equipValue=0; - return equipValue-value; - }, - }, - result:{ - target:function (player,target){ - return get.equipResult(player,target,name); - }, - }, - }, - enable:true, - selectTarget:-1, - modTarget:true, - allowMultiple:false, - toself:true, - fullskin:true, - }, - "shoulijian":{ - audio:true, - type:"basic", - skills:["shoulijian"], - enable:true, - fullskin:true, - filterTarget:function (card,player,target){ - return get.distance(player,target)>1; - }, - content:function (){ - "step 0" - if(!target.countCards('he',{type:'equip'})){ - target.damage(); - event.finish(); - } - else{ - target.chooseToDiscard('he',{type:'equip'},'弃置一张装备牌或受到一点伤害').ai=function(card){ - return 7-get.value(card); - }; - } - "step 1" - if(!result.bool){ - target.damage(); - } - }, - - ai:{ - basic:{ - order:9, - value:6, - useful:2, - }, - result:{ - target:-2, - }, - tag:{ - discard:1, - damage:1, - }, - }, - selectTarget:1, - }, - - "kuwu":{ - audio:true, - fullskin:true, - - type:"equip", - subtype:"equip1", - skills:["kuwu"], - nomod:true, - nopower:true, - unique:true, - distance:{ - attackFrom:-1, - }, - ai:{ - equipValue:6, - basic:{ - order:function (card,player){ - if(player&&player.hasSkillTag('reverseEquip')){ - return 8.5-get.equipValue(card,player)/20; - } - else{ - return 8+get.equipValue(card,player)/20; - } - }, - useful:2, - equipValue:1, - value:function (card,player){ - var value=0; - var info=get.info(card); - var current=player.getEquip(info.subtype); - if(current&&card!=current){ - value=get.value(current,player); - } - var equipValue=info.ai.equipValue; - if(equipValue==undefined){ - equipValue=info.ai.basic.equipValue; - } - if(typeof equipValue=='function') return equipValue(card,player)-value; - if(typeof equipValue!='number') equipValue=0; - return equipValue-value; - }, - }, - result:{ - target:function (player,target){ - return get.equipResult(player,target,name); - }, - }, - }, - enable:true, - selectTarget:-1, - modTarget:true, - allowMultiple:false, - toself:true, - }, - "xuelunyang":{ - audio:true, - fullskin:true, - type:"equip", - subtype:"equip5", - skills:["xuelunyang"], - ai:{ - basic:{ - equipValue:8, - order:function (card,player){ - if(player&&player.hasSkillTag('reverseEquip')){ - return 8.5-get.equipValue(card,player)/20; - } - else{ - return 8+get.equipValue(card,player)/20; - } - }, - useful:2, - value:function (card,player){ - var value=0; - var info=get.info(card); - var current=player.getEquip(info.subtype); - if(current&&card!=current){ - value=get.value(current,player); - } - var equipValue=info.ai.equipValue; - if(equipValue==undefined){ - equipValue=info.ai.basic.equipValue; - } - if(typeof equipValue=='function') return equipValue(card,player)-value; - if(typeof equipValue!='number') equipValue=0; - return equipValue-value; - }, - }, - result:{ - target:function (player,target){ - return get.equipResult(player,target,name); - }, - }, - }, - - enable:true, - selectTarget:-1, - modTarget:true, - allowMultiple:false, - toself:true, - }, - "jiuwei":{ - audio:true, - fullskin:true, - type:"equip", - subtype:"equip5", - skills:["jiuwei"], - ai:{ - basic:{ - equipValue:8, - order:function (card,player){ - if(player&&player.hasSkillTag('reverseEquip')){ - return 8.5-get.equipValue(card,player)/20; - } - else{ - return 8+get.equipValue(card,player)/20; - } - }, - useful:2, - value:function (card,player){ - var value=0; - var info=get.info(card); - var current=player.getEquip(info.subtype); - if(current&&card!=current){ - value=get.value(current,player); - } - var equipValue=info.ai.equipValue; - if(equipValue==undefined){ - equipValue=info.ai.basic.equipValue; - } - if(typeof equipValue=='function') return equipValue(card,player)-value; - if(typeof equipValue!='number') equipValue=0; - return equipValue-value; - }, - }, - result:{ - target:function (player,target){ - return get.equipResult(player,target,name); - }, - }, - }, - - enable:true, - selectTarget:-1, - modTarget:true, - allowMultiple:false, - toself:true, - }, + audio:true, + fullskin:true, + type:"equip", + subtype:"equip5", + skills:["monkey"], + ai:{ + basic:{ + equipValue:8, + }, + }, + }, + "mianju":{ + audio:true, + type:"equip", + subtype:"equip2", + skills:["mianju"], + ai:{ + order:9.5, + basic:{ + equipValue:function (card,player){ + if(!player.isTurnedOver()) return 6; + if(player.isTurnedOver()) return -10; + return 0; + }, + }, + }, + }, + "shoulijian":{ + audio:true, + type:"basic", + enable:true, + fullskin:true, + outrange:{ + global:1, + }, + filterTarget:lib.filter.notMe, + content:function (){ + "step 0" + if(!target.countCards('he',{type:'equip'})){ + target.damage(); + event.finish(); + } + else{ + target.chooseToDiscard('he',{type:'equip'},'弃置一张装备牌或受到一点伤害').ai=function(card){ + var player=_status.event.player; + var source=_status.event.getParent().player; + if(get.damageEffect(player,source,player)>0) return -1; + return 7-get.value(card); + }; + } + "step 1" + if(!result.bool){ + target.damage(); + } + }, + ai:{ + basic:{ + order:9, + value:6, + useful:2, + }, + result:{ + target:-2, + }, + tag:{ + discard:1, + damage:1, + }, + }, + selectTarget:1, + }, + "kuwu":{ + audio:true, + fullskin:true, + type:"equip", + subtype:"equip1", + skills:["kuwu"], + nomod:true, + nopower:true, + unique:true, + distance:{ + attackFrom:-1, + }, + ai:{ + equipValue:6, + }, + }, + "xuelunyang":{ + audio:true, + fullskin:true, + type:"equip", + subtype:"equip5", + skills:["xuelunyang"], + ai:{ + basic:{ + equipValue:8, + }, + }, + }, + "jiuwei":{ + audio:true, + fullskin:true, + type:"equip", + subtype:"equip5", + skills:["jiuwei"], + ai:{ + basic:{ + equipValue:8, + }, + }, + }, }, skill:{ - - "shoulijian":{ - audio:true, - enable:true, - filterTarget:function (card,player,target){ - return get.distance(player,target)>1; - }, - content:function (){ - "step 0" - if(!target.countCards('he',{type:'equip'})){ - target.damage(); - event.finish(); - } - else{ - target.chooseToDiscard('he',{type:'equip'},'弃置一张装备牌或受到一点伤害').ai=function(card){ - return 7-get.value(card); - }; - } - "step 1" - if(!result.bool){ - target.damage(); - } - }, - ai:{ - basic:{ - order:9, - value:6, - useful:2, - }, - result:{ - target:-2, - }, - tag:{ - discard:1, - damage:1, - }, - }, - selectTarget:1, - }, - - "monkey":{ -trigger:{ - global:"useCardToBegin", - }, - audio:true, - filter:function (event,player){ - var card=player.get('e','5'); - if(card){ - var name=card.name; - if(event.name=='tao'&&get.itemtype(event.cards)=='cards'&&get.position(event.cards[0])=='d'&&event.player!=player&&name&&name.indexOf('monkey')!=-1) return true; - } - return false; - }, - check:function (event,player){ - return ai.get.attitude(player,event.player)<=0; - }, - content:function (){ - "step 0" - player.$fullscreenpop('猴子偷桃','fire'); - trigger.untrigger(); - trigger.finish(); - "step 1" - player.discard(player.get('e','5')); - "step 2" - player.gain(trigger.cards); - player.$gain2(trigger.cards); - }, -}, + "monkey":{ + trigger:{ + global:"useCardToBegin", + }, + audio:true, + filter:function (event,player){ + var card=player.getEquip(5); + if(card){ + var name=card.name; + if(name&&name.indexOf('monkey')!=-1&&event.name=='tao'&&event.player!=player&&event.cards.filterInD().length>0) return true; + } + return false; + }, + check:function (event,player){ + return get.attitude(player,event.player)<=0; + }, + content:function (){ + "step 0" + player.$fullscreenpop('猴子偷桃','fire'); + trigger.untrigger(); + trigger.finish(); + "step 1" + player.discard(player.getEquip(5)); + "step 2" + player.gain(trigger.cards.filterInD(),'gain2','log'); + }, + }, + "mianju":{ + audio:true, + trigger:{ + player:"turnOverBefore", + }, + forced:true, + equipSkill:true, + content:function (){ + trigger.cancel(); + }, + ai:{ + noturnOver:true, + effect:{ + target:function (card,player,target,current){ + if(get.tag(card,'turnOver')) return [0,0]; + }, + }, + }, + }, + "kuwu":{ + audio:true, + trigger:{ + source:"damageSource", + }, + forced:true, + equipSkill:true, + filter:function (event,player){ + if(event._notrigger.contains(event.player)) return false; + return event.card&&event.card.name=='sha'&&event.notLink()&&event.player.countCards('he')>0; + }, + content:function (){ + trigger.player.chooseToDiscard(true,'he'); + }, + }, + "xuelunyang":{ + audio:true, + trigger:{ + player:"phaseBegin", + }, + equipSkill:true, + direct:true, + 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('xuelunyang'),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; - }, - content:function (){ - trigger.player.chooseToDiscard(true,'he'); - }, -}, - -"xuelunyang":{ - audio:true, - trigger:{ - player:"phaseBegin", - }, - filter:function (event,player){ - return player.isAlive(); - }, - priority:2018, - direct:true, - 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('xuelunyang'),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 get.attitude(_status.event.player,target)<=0; - }); - 'step 1' - if(result.bool){ - event.target=result.targets[0]; - player.logSkill('xuelunyang',event.target); - } - else{ - event.finish(); - } - 'step 2' - event.skillai=function(list){ - return get.max(list,get.skillRank,'item'); - }; - if(event.isMine()){ - event.dialog=lib.skill.xuelunyang.createDialog(player,target);//tianshu - event.switchToAuto=function(){ - event._result=event.skillai(event.list); - game.resume(); - }; - _status.imchoosing=true; - game.pause(); - } - else{ - event._result=event.skillai(lib.skill.xuelunyang.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)+'】'); - - /* 'step 0' - player.chooseTarget(get.prompt2('xuelunyang'),function(card,player,target){ - return target!=player; - }).set('ai',function(target){ - if(get.attitude(_status.event.player,target)>0) return Math.random(); - return get.attitude(_status.event.player,target)<=0; - }); - 'step 1' - if(result.bool){ - event.target=result.targets[0]; - player.logSkill('xuelunyang',event.target); - } - else{ - event.finish(); - } - 'step 2' - player.chooseSkill(event.target,function(info,skill){ - return player.isAlive(); - }); - 'step 3' - if(result.bool){ - var skill=result.skill; - player.addTempSkill(skill); - player.popup(skill); - //player.markSkillCharacter('xuelunyang',event.target.name,get.skillTranslation(skill,player),get.skillInfoTranslation(skill)); - game.log(player,'获得了','【'+get.translation(skill)+'】'); - } */ - }, -}, - -"jiuwei":{ -trigger:{ - player:"phaseEnd", - }, - audio:true, - filter:function (event,player){ - return player.isAlive(); - }, - frequent:true, - content:function (){ - if(player.isDamaged()){ - player.recover(); - } - else{ - player.draw(); - } - }, -}, + "jiuwei":{ + trigger:{ + player:"phaseEnd", + }, + audio:true, + frequent:true, + equipSkill:true, + content:function (){ + if(player.isDamaged()){ + player.recover(); + } + else{ + player.draw(); + } + }, + }, }, translate:{ "monkey":"猴子", - "monkey_info":"猴子偷桃:当场上有其他角色使用【桃】时,你可以弃掉【猴子】,阻止【桃】的结算并将其收为手牌", - "mianju":"漩涡面具", - "mianju_info":"锁定技 若你的武将牌正面向上,你的武将牌不能被翻面", - "shoulijian":"手里剑", - "shoulijian_info":"出牌阶段,对一名距离1以外的角色使用,令其弃置一张装备牌或受到一点伤害", - "kuwu":"苦无", - "kuwu_info":"锁定技 每当你使用【杀】造成一次伤害,受伤角色须弃置一张牌", - "xuelunyang":"写轮眼", - "xuelunyang_info":"回合开始阶段,你可以选择一名角色,然后获得其一项技能,直到回合结束", - "jiuwei":"九尾", - "jiuwei_info":"(收集查克拉)回合结束时,若你已受伤,你可回复一点体力,否则摸一张牌", + "monkey_info":"猴子偷桃:当场上有其他角色使用【桃】时,你可以弃掉【猴子】,阻止【桃】的结算并将其收为手牌", + "mianju":"漩涡面具", + "mianju_info":"锁定技 你的武将牌不能被翻面", + "shoulijian":"手里剑", + "shoulijian_info":"出牌阶段,对一名距离1以外的角色使用,令其弃置一张装备牌或受到一点伤害", + "kuwu":"苦无", + "kuwu_info":"锁定技 每当你使用【杀】造成一次伤害,受伤角色须弃置一张牌", + "xuelunyang":"写轮眼", + "xuelunyang_info":"回合开始阶段,你可以选择一名角色,然后获得其一项技能,直到回合结束", + "jiuwei":"九尾", + "jiuwei_info":"(收集查克拉)回合结束时,若你已受伤,你可回复一点体力,否则摸一张牌", }, list:[ - ["diamond","5","monkey"], - ["heart","9","jiuwei"], - ["heart","2","xuelunyang"], - ["spade","6","kuwu"], - ["diamond","4","shoulijian"], - ["spade","4","shoulijian"], - ["club","3","mianju"], + ["diamond","5","monkey"], + ["heart","9","jiuwei"], + ["heart","2","xuelunyang"], + ["spade","6","kuwu"], + ["diamond","4","shoulijian"], + ["spade","4","shoulijian"], + ["club","3","mianju"], ], } }); diff --git a/card/standard.js b/card/standard.js index 846f3691c..490367ea6 100644 --- a/card/standard.js +++ b/card/standard.js @@ -524,8 +524,6 @@ game.import('card',function(lib,game,ui,get,ai,_status){ filterTarget:true, contentBefore:function(){ "step 0" - game.delay(); - "step 1" if(get.is.versus()){ player.chooseControl('顺时针','逆时针',function(event,player){ if(player.next.side==player.side) return '逆时针'; @@ -533,9 +531,9 @@ game.import('card',function(lib,game,ui,get,ai,_status){ }).set('prompt','选择'+get.translation(card)+'的结算方向'); } else{ - event.goto(3); + event.goto(2); } - "step 2" + "step 1" if(result&&result.control=='顺时针'){ var evt=event.getParent(); evt.fixedSeat=true; @@ -545,16 +543,17 @@ game.import('card',function(lib,game,ui,get,ai,_status){ evt.targets.unshift(evt.targets.pop()); } } - "step 3" + "step 2" ui.clear(); var num; - if(event.getParent().stocktargets){ - num=event.getParent().stocktargets.length; + if(event.targets){ + num=event.targets.length; } else{ num=game.countPlayer(); } var cards=get.cards(num); + game.cardsGotoOrdering(cards).relatedEvent=event.getParent(); var dialog=ui.create.dialog('五谷丰登',cards,true); _status.dieClose.push(dialog); dialog.videoId=lib.status.videoId++; @@ -643,10 +642,6 @@ game.import('card',function(lib,game,ui,get,ai,_status){ event.remained.push(dialog.buttons[i].link); } event.trigger('wuguRemained'); - for(var i=0;i0){ trigger.untrigger(); trigger.set('responded',true); - trigger.result={bool:true,card:{name:'shan'}} + trigger.result={bool:true,card:{name:'shan',isCard:true}} } }, ai:{ @@ -2195,9 +2190,9 @@ game.import('card',function(lib,game,ui,get,ai,_status){ 'step 8' if(event.wuxieresult){ var next=event.wuxieresult.useResult(event.wuxieresult2); - if(event.triggername!='phaseJudge'){ - if(event.stateplayer&&event.statecard) next.respondTo=[event.stateplayer,event.statecard]; - else next.respondTo=[trigger.player,trigger.card]; + if(event.stateplayer&&event.statecard) next.respondTo=[event.stateplayer,event.statecard]; + else if(event.triggername!='phaseJudge'){ + next.respondTo=[trigger.player,trigger.card]; } } 'step 9' diff --git a/card/zhulu.js b/card/zhulu.js new file mode 100644 index 000000000..04ca26e3e --- /dev/null +++ b/card/zhulu.js @@ -0,0 +1,805 @@ +'use strict'; +game.import('card',function(lib,game,ui,get,ai,_status){ + return { + name:'zhulu', + connect:true, + card:{ + zhulu_card:{ + audio:true, + fullskin:true, + type:'trick', + enable:true, + cardcolor:'red', + selectTarget:-1, + filterTarget:true, + contentBefore:function(){ + "step 0" + if(get.is.versus()){ + player.chooseControl('顺时针','逆时针',function(event,player){ + if(player.next.side==player.side) return '逆时针'; + return '顺时针'; + }).set('prompt','选择'+get.translation(card)+'的结算方向'); + } + else{ + event.goto(2); + } + "step 1" + if(result&&result.control=='顺时针'){ + var evt=event.getParent(); + evt.fixedSeat=true; + evt.targets.sortBySeat(); + evt.targets.reverse(); + if(evt.targets[evt.targets.length-1]==player){ + evt.targets.unshift(evt.targets.pop()); + } + } + "step 2" + ui.clear(); + var num; + if(event.targets){ + num=event.targets.length; + } + else{ + num=game.countPlayer(); + } + var cards=[]; + for(var i=0;i1){ + var next=target.chooseButton(true,function(button){ + var player=_status.event.player; + return get.effect(player,button.link,player,player); + }); + next.set('equips',equips); + next.set('filterButton',function(button){ + return _status.event.equips.contains(button.link); + }); + next.set('dialog',event.preResult); + next.set('closeDialog',false); + next.set('dialogdisplay',true); + } + else if(equips.length){ + event.directButton=equips[0]; + } + else event.finish(); + "step 1" + var dialog=event.dialog; + var card; + if(event.directButton){ + card=event.directButton; + } + else{ + card=result.links[0]; + } + + var button; + for(var i=0;i0; + }, + content:function(){ + var es=target.getCards('e'); + if(es.length) target.gain(es,'gain2','log'); + }, + ai:{ + order:10, + tag:{ + gain:1, + loseCard:1, + }, + basic:{ + useful:0.5, + value:0.5, + }, + result:{ + target:function(player,target){ + if(get.value(target.getCards('e'),target)<=0||target.hasSkillTag('noe')) return 1; + return 0; + }, + }, + }, + }, + caochuan:{ + fullskin:true, + type:'trick', + wuxieable:true, + global:['caochuan_skill'], + notarget:true, + content:function(){ + var evt2=event.getParent(3)._trigger; + evt2.cancel(); + var evt=evt2.getParent(); + var next=game.createEvent('caochuan_gain'); + _status.event.next.remove(next); + evt.after.push(next); + next.player=player; + next.setContent(function(){ + var cards=event.getParent().cards.filterInD(); + if(cards.length) player.gain(cards,'gain2','log'); + }); + }, + ai:{ + basic:{ + useful:[6,4], + value:[6,4], + }, + result:{player:1}, + }, + }, + numa:{ + fullskin:true, + type:'equip', + subtype:'equip4', + filterTarget:lib.filter.notMe, + selectTarget:1, + toself:false, + onEquip:function(){ + var cards=player.getCards('e',function(cardz){ + return cardz!=card; + }); + if(cards.length) player.discard(cards); + }, + ai:{ + order:9, + equipValue:function(card,player){ + if(get.position(card)=='e') return 0; + return 1; + }, + basic:{ + equipValue:5, + }, + result:{ + target:function(player,target){ + var card=target.getCards('e'); + var val=get.value(card); + if(val>0) return -val; + return 0; + }, + }, + }, + }, + yajiaoqiang:{ + fullskin:true, + type:'equip', + subtype:'equip1', + distance:{attackFrom:-2}, + skills:['yajiaoqiang_skill'], + ai:{ + equipValue:function(card,player){ + var skills=['longdan','kanpo','rekanpo','qingguo','reqingguo']; + for(var i=0;i0; + }, + content:function(){ + player.chooseToDiscard(true,'he',function(card){ + return card!=_status.event.card; + }).set('card',player.getEquip('wufengjian')); + }, + }, + yajiaoqiang_skill:{ + trigger:{player:'useCardAfter'}, + filter:function(event,player){ + if(_status.currentPhase==player||get.color(event.card)!='black'||event.cards.filterInD().length==0) return false; + return player.getHistory('useCard',function(evt){ + return get.color(evt.card)=='black'; + }).indexOf(event)==0; + }, + prompt2:function(event,player){ + return '获得'+get.translation(event.cards.filterInD()); + }, + content:function(){ + player.gain(trigger.cards.filterInD(),'gain2','log'); + }, + }, + caochuan_skill:{ + trigger:{target:'useCardToBegin'}, + forced:true, + priority:6, + filter:function(event,player){ + if(event.directHit||!get.tag(event.card,'damage')||!['basic','trick'].contains(get.type(event.card))) return false; + return player.hasUsableCard('caochuan'); + }, + content:function(){ + var next=player.chooseToUse(); + next.set('prompt','是否使用【草船借箭】响应'+get.translation(trigger.player)+'使用的'+get.translation(trigger.card)+'?'); + next.set('filterCard',function(card){ + if(get.name(card)!='caochuan') return false; + return lib.filter.cardEnabled(card,player,'forceEnable'); + }); + next.set('respondTo',[trigger.player,trigger.card]); + next.set('goon',-get.effect(player,trigger.card,trigger.player,player)); + next.set('ai1',function(card){ + return _status.event.goon; + }) + }, + }, + }, + translate:{ + jinhe:'锦盒', + jinhe_info:'当你使用【锦盒】时,你将原有的与此牌对应的「礼」置入弃牌堆(若有),然后观看牌堆顶的两张牌并将其中一张置于游戏外与此牌对应,称之为「礼」。
出牌阶段,你可以将与此牌对应的「礼」置入弃牌堆,然后弃置【锦盒】以及所有与「礼」花色相同的手牌。当此牌因其他原因进入弃牌堆后,你将与此牌对应的「礼」置入弃牌堆并弃置所有手牌。', + jinhe_skill:'锦盒', + jinhe_lose:'锦盒', + yexingyi:'夜行衣', + yexingyi_info:'锁定技,你不是黑色锦囊牌的合法目标。', + nvzhuang:'女装', + nvzhuang_info:'锁定技,当此牌进入或离开你的装备区时,若你的性别为男性,你弃置一张不为此牌的牌。', + yinfengjia:'引蜂甲', + yinfengjia_info:'锁定技,当你受到锦囊牌造成的伤害时,此伤害+1。', + yinfengjia_skill:'引蜂甲', + zheji:'折戟', + zheji_info:'这是一把坏掉的武器...', + wufengjian:'无锋剑', + wufengjian_info:'锁定技,当你使用【杀】时,你弃置一张不为装备区内【无锋剑】的牌。', + wufengjian_skill:'无锋剑', + yajiaoqiang_skill:'涯角枪', + yajiaoqiang:'涯角枪', + yajiaoqiang_info:'当你于一名其他角色的回合内第一次使用的黑色牌结算完成后,你可以获得此牌对应的所有实体牌。', + numa:'驽马', + numa_info:'锁定技,当此牌进入你的装备区时,你弃置装备区内的所有其他牌。', + caochuan:'草船借箭', + caochuan_info:'当带有「伤害」标签的基本牌或普通锦囊牌对你生效前,对此牌使用。抵消此牌对你产生的效果。当此牌结算完成后,你获得此牌对应的所有实体牌。', + jiejia:'解甲归田', + jiejia_info:'出牌阶段,对一名装备区内有牌的角色使用。该角色获得其装备区内的所有牌。', + kaihua:'树上开花', + kaihua_info:'出牌阶段,对包含你自己在内的一名角色使用。目标角色弃置一至两张牌,然后摸等量的牌。若其以此法弃置了装备牌,则多摸一张牌。', + zhulu_card:'逐鹿天下', + zhulu_card_info:'出牌阶段,对所有角色使用。你从牌堆和弃牌堆亮出等同于目标角色数的装备牌,每名目标角色将其中一张牌置于自己的装备区。', + gifts_tag:'赠', + }, + list:[ + ['diamond',3,'jiejia'], + ['diamond',4,'shan'], + ['diamond',5,'yajiaoqiang'], + ['diamond',6,'sha'], + ['diamond',8,'shan'], + ['diamond',9,'kaihua'], + ['diamond',10,'yinfengjia',null,['gifts']], + ['diamond',11,'sha'], + + ['club',3,'jiejia'], + ['club',4,'sha','thunder'], + ['club',5,'zheji',null,['gifts']], + ['club',6,'jiu'], + ['club',8,'jiu'], + ['club',9,'zhulu_card'], + ['club',10,'jinhe',null,['gifts']], + ['club',11,'sha'], + + ['heart',3,'sha','fire'], + ['heart',4,'shan'], + ['heart',5,'numa',null,['gifts']], + ['heart',6,'tao'], + ['heart',8,'shan'], + ['heart',9,'kaihua'], + ['heart',10,'nvzhuang',null,['gifts']], + ['heart',11,'kaihua'], + + ['spade',3,'caochuan'], + ['spade',4,'sha','thunder'], + ['spade',5,'wufengjian',null,['gifts']], + ['spade',6,'caochuan'], + ['spade',8,'sha'], + ['spade',9,'sha'], + ['spade',10,'yexingyi'], + ['spade',11,'sha'], + ], + } +}); diff --git a/character/diy.js b/character/diy.js index 9cffb2c78..899f274c2 100755 --- a/character/diy.js +++ b/character/diy.js @@ -5,6 +5,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ connect:true, connectBanned:['diy_tianyu','diy_yangyi','diy_lukang','ns_huamulan','ns_yuji','ns_duangui','ns_liuzhang'], character:{ + ns_zhangwei:['female','wei',3,['nsqiyue','nsxuezhu']], diy_wenyang:['male','wei','4/6',['lvli','choujue']], key_lucia:['female','key','1/2',['lucia_duqu','lucia_zhenren']], key_kyousuke:['male','key',4,['nk_shekong','key_huanjie']], @@ -90,12 +91,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, characterSort:{ diy:{ - diy_tieba:["diy_wenyang","ns_zuoci","ns_lvzhi","ns_wangyun","ns_nanhua","ns_nanhua_left","ns_nanhua_right","ns_huamulan","ns_huangzu","ns_jinke","ns_yanliang","ns_wenchou","ns_caocao","ns_caocaosp","ns_zhugeliang","ns_wangyue","ns_yuji","ns_xinxianying","ns_guanlu","ns_simazhao","ns_sunjian","ns_duangui","ns_zhangbao","ns_masu","ns_zhangxiu","ns_lvmeng","ns_shenpei","ns_yujisp","ns_yangyi","ns_liuzhang","ns_xinnanhua"], + diy_tieba:["diy_wenyang","ns_zuoci","ns_lvzhi","ns_wangyun","ns_nanhua","ns_nanhua_left","ns_nanhua_right","ns_huamulan","ns_huangzu","ns_jinke","ns_yanliang","ns_wenchou","ns_caocao","ns_caocaosp","ns_zhugeliang","ns_wangyue","ns_yuji","ns_xinxianying","ns_guanlu","ns_simazhao","ns_sunjian","ns_duangui","ns_zhangbao","ns_masu","ns_zhangxiu","ns_lvmeng","ns_shenpei","ns_yujisp","ns_yangyi","ns_liuzhang","ns_xinnanhua","ns_zhangwei"], diy_default:["diy_feishi","diy_liuyan","diy_yuji","diy_caiwenji","diy_lukang","diy_zhenji","diy_liufu","diy_xizhenxihong","diy_liuzan","diy_zaozhirenjun","diy_yangyi","diy_tianyu"], diy_key:["key_lucia","key_kyousuke","key_yuri","key_haruko","key_kagari","key_umi","key_rei","key_komari","key_yukine"], }, }, characterIntro:{ + ns_zhangwei:'血骑教习·张葳,三国杀集换式卡牌游戏《阵面对决》中的帝畿系列卡牌。游卡桌游官方原创的三国时期女性角色。', diy_feishi:'字公举,生卒年不详,益州犍为郡南安县(今四川省乐山市)人。刘璋占据益州时,以费诗为绵竹县县令。刘备进攻刘璋夺取益州,费诗举城而降,后受拜督军从事,转任牂牁郡太守,再为州前部司马。', //diy_liuyan:'字元海,新兴(今山西忻州北)人,匈奴族,匈奴首领冒顿单于之后[1] ,南匈奴单于于夫罗之孙,左贤王刘豹之子,母呼延氏,十六国时期前赵政权开国皇帝,304年-310年在位。', diy_lukang:'字幼节,吴郡吴县(今江苏苏州)人。三国时期吴国名将,丞相陆逊次子。', @@ -150,6 +152,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yuji:['zuoci'] }, skill:{ + nsqiyue:{ + trigger:{global:['turnOverEnd','linkEnd','showCharacterEnd','hideCharacterEnd','removeCharacterEnd']}, + forced:true, + content:function(){player.draw()}, + }, + nsxuezhu:{ + trigger:{player:'damageEnd',source:'damageSource'}, + filter:function(event,player){return event.player.isAlive()}, + content:function(){trigger.player.draw(2);trigger.player.turnOver();}, + }, yukine_wenzhou:{ trigger:{global:'phaseUseBegin'}, direct:true, @@ -4029,7 +4041,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ frequent:true, filter:function(event){ var type=get.type(event.card,'trick'); - return (type=='trick'||type=='equip')&&event.cards[0]&&event.cards[0]==event.card; + return (type=='trick'||type=='equip')&&event.card.isCard; }, content:function(){ "step 0" @@ -5600,6 +5612,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yukine_wenzhou:'问咒', yukine_wenzhou_info:'一名角色的出牌阶段开始时,其可以交给你一张牌。若如此做,你选择一项:交给其一张牌,或令其从牌堆中获得一张与此牌类型相同的牌,且其于此阶段内使用与此牌牌名相同的牌时无法被响应。', + ns_zhangwei:'张葳', + nsqiyue:'骑钺', + nsqiyue_info:'锁定技,当有角色的武将牌状态改变后,你摸一张牌。', + nsxuezhu:'血逐', + nsxuezhu_info:'当你受到伤害或造成伤害后,你可以令受到伤害的角色摸两张牌并翻面。', ns_chuanshu:'传术', ns_chuanshu_info:'限定技 当一名其他角色进入濒死状态时,你可以令其选择获得技能【雷击】或【鬼道】,其回复体力至1并摸两张牌。当该被【传术】的角色造成或受到一次伤害后,你摸一张牌。其阵亡后,你重置技能【传术】', ns_xiandao1:'仙道', diff --git a/character/extra.js b/character/extra.js index 094c6c2f5..0916f07ec 100755 --- a/character/extra.js +++ b/character/extra.js @@ -793,7 +793,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:true, trigger:{player:'useCard'}, filter:function(event,player){ - return (get.type(event.card)=='trick'&&event.cards[0]&&event.cards[0]==event.card)&&player.hasMark('renjie'); + return (get.type(event.card,'trick')=='trick'&&event.card.isCard); }, init:function(player){ player.storage.jilue_jizhi=0; @@ -2186,32 +2186,41 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "drlt_duorui":{ audio:2, - init:function(player){ - player.storage.drlt_duorui=[]; + init:function(player,skill){ + if(!player.storage.drlt_duorui) player.storage.drlt_duorui=[]; }, trigger:{ source:'damageSource' }, filter:function(event,player){ - if(player.storage.drlt_duorui.length) return false; + if(player.storage.drlt_duorui.length) return false; return player!=event.player&&event.player.isAlive()&&_status.currentPhase==player; }, check:function(event,player){ - if(player.isDisabled(5)) return false; - var skills=event.player.skills.slice(0); - for(var i=0;iplayer.hp&&game.countPlayer(function(current){return current!=player&¤t.hasSkill('drlt_zhiti')&&get.distance(current,player,'attack')<=1})) return num-1; + if(player.maxHp>player.hp&&game.countPlayer(function(current){ + return current!=player&¤t.hasSkill('drlt_zhiti')&¤t.inRange(player); + })) return num-1; }, }, }, @@ -2642,7 +2653,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sbaiyin:'拜印', sbaiyin_info:'觉醒技,准备阶段开始时,若你的“忍”标记数不小于4,你减1点体力上限,然后获得〖极略〗', jilue:'极略', - jilue_info:'当一名角色的判定牌生效前,你可以弃1枚“忍”标记并发动〖鬼才〗;每当你受到伤害后,你可以弃1枚“忍”标记并发动〖放逐〗;当你使用普通锦囊牌时,你可以弃1枚“忍”标记并发动〖集智〗;出牌阶段限一次,你可以弃1枚“忍”标记并发动〖制衡〗;出牌阶段,你可以弃1枚“忍”标记并获得〖完杀〗直到回合结束。', + jilue_info:'当一名角色的判定牌生效前,你可以弃1枚“忍”标记并发动〖鬼才〗;每当你受到伤害后,你可以弃1枚“忍”标记并发动〖放逐〗;当你使用锦囊牌时,你可以弃1枚“忍”标记并发动〖集智〗;出牌阶段限一次,你可以弃1枚“忍”标记并发动〖制衡〗;出牌阶段,你可以弃1枚“忍”标记并获得〖完杀〗直到回合结束。', jilue_guicai:'鬼才', jilue_fangzhu:'放逐', jilue_wansha:'完杀', diff --git a/character/mobile.js b/character/mobile.js index c1134a330..bd246aa36 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -7,7 +7,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ characterSort:{ mobile:{ mobile_default:["miheng","taoqian","liuzan","lingcao","sunru","lifeng","zhuling","liuye","zhaotongzhaoguang","majun","simazhao","wangyuanji","pangdegong","shenpei","hujinding"], - mobile_others:["re_jikang","old_bulianshi","old_yuanshu","re_wangyun","re_baosanniang","re_weiwenzhugezhi","re_zhanggong","re_xugong","old_yuanshao","old_liushan"], + mobile_others:["re_jikang","old_bulianshi","old_yuanshu","re_wangyun","re_baosanniang","re_weiwenzhugezhi","re_zhanggong","re_xugong","xin_yuanshao","re_liushan"], mobile_sunben:["re_sunben"], }, }, @@ -39,8 +39,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_xugong:['male','wu',3,['rebiaozhao','yechou']], re_weiwenzhugezhi:['male','wu',4,['refuhai']], - old_yuanshao:['male','qun',4,['reluanji','xueyi'],['zhu']], - old_liushan:['male','shu',3,['xiangle','refangquan','ruoyu'],['zhu']], + xin_yuanshao:['male','qun',4,['reluanji','xueyi'],['zhu']], + re_liushan:['male','shu',3,['xiangle','refangquan','ruoyu'],['zhu']], re_sunben:['male','wu',4,['jiang','rehunzi','zhiba'],['zhu']], }, characterIntro:{ @@ -1180,7 +1180,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } else list2=targets[1]; - targets[0].useCard({name:name},list2,'noai'); + targets[0].useCard({name:name,isCard:true},list2,'noai'); game.delay(0.5); }, ai:{ @@ -1685,8 +1685,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, translate:{ - old_liushan:'手杀刘禅', - old_yuanshao:'手杀袁绍', re_jikang:"手杀嵇康", old_bulianshi:'手杀步练师', old_caochun:'旧曹纯', @@ -1763,7 +1761,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ rezhennan_info:'当你成为其他角色使用的牌的目标后,若此牌的目标数大于该角色的体力值,则你可以弃置一张牌并对其造成1点伤害。', hujinding:'胡金定', - re_liushan:'界刘禅', + re_liushan:'手杀刘禅', re_sunben:'界孙笨', re_zhangzhang:'界张昭张纮', rehunzi:'魂姿', diff --git a/character/old.js b/character/old.js index ca27347f2..6ce30ba2c 100755 --- a/character/old.js +++ b/character/old.js @@ -12,11 +12,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ old_yijiang4:["old_caozhen","old_chenqun","old_zhuhuan","ol_wuyi"], old_yijiang5:["old_caoxiu","old_quancong","old_zhuzhi"], old_yijiang67:["ol_xinxianying","ol_zhangrang","ol_liuyu"], - old_sp:["old_lingju","old_maliang","old_machao","zhangliang","jsp_caoren","ol_guansuo","old_zhangxingcai","old_huangfusong"], + old_sp:["old_lingju","old_maliang","old_machao","zhangliang","jsp_caoren","ol_guansuo","old_zhangxingcai","old_huangfusong","ol_maliang"], old_mobile:["old_caochun","old_majun"], }, }, character:{ + ol_maliang:['male','shu',3,['zishu','yingyuan']], old_huangfusong:['male','qun',4,['fenyue']], old_majun:["male","wei",3,["xinfu_jingxie1","xinfu_qiaosi"],[]], old_zhangxingcai:['female','shu',3,['oldshenxian','qiangwu']], @@ -539,11 +540,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.bool){ trigger.untrigger(); trigger.responded=true; - if(trigger.filterCard({name:'shan'})){ - trigger.result={bool:true,card:{name:'shan'}} + if(trigger.filterCard({name:'shan',isCard:true})){ + trigger.result={bool:true,card:{name:'shan',isCard:true}} } else{ - trigger.result={bool:true,card:{name:'sha'}} + trigger.result={bool:true,card:{name:'sha',isCard:true}} } player.logSkill('zhenshan',result.targets); player.addTempSkill('zhenshan2'); @@ -608,7 +609,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ backup:function(links,player){ return { filterCard:function(){return false}, - viewAs:{name:links[0][2],nature:links[0][3]}, + viewAs:{name:links[0][2],nature:links[0][3],isCard:true}, selectCard:-1, popname:true, log:false, @@ -685,16 +686,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return event.judge(player.judging[0])<0; }, content:function(){ + "step 0" var card=get.cards()[0]; + event.card=card; + game.cardsGotoOrdering(card).relatedEvent=trigger; + "step 1" player.$throw(card); card.clone.classList.add('thrownhighlight'); if(trigger.player.judging[0].clone){ trigger.player.judging[0].clone.classList.remove('thrownhighlight'); game.addVideo('deletenode',player,get.cardsInfo([trigger.player.judging[0].clone])); } - trigger.player.judging[0].discard(); + game.cardsDiscard(trigger.player.judging[0]); trigger.player.judging[0]=card; - trigger.position.appendChild(card); game.log(trigger.player,'的判定牌改为',card); game.delay(2); }, @@ -817,7 +821,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.finish(); } else{ - player.useCard({name:'sha'},target,false).animate=false; + player.useCard({name:'sha',isCard:true},target,false).animate=false; game.delay(); event.finish(); } @@ -828,7 +832,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "step 2" var target=event.target; if(result.control=='出杀'){ - player.useCard({name:'sha'},target,false).animate=false; + player.useCard({name:'sha',isCard:true},target,false).animate=false; game.delay(); } else{ @@ -886,6 +890,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ old_caochong:'旧曹冲', old_guanqiujian:'旧毌丘俭', old_huangfusong:'旧皇甫嵩', + ol_maliang:'旧马良', old_fuhun:'父魂', old_fuhun_info:'摸牌阶段开始时,你可以放弃摸牌,改为从牌堆顶亮出两张牌并获得之,若亮出的牌颜色不同,你获得技能“武圣”、“咆哮”,直到回合结束。', diff --git a/character/refresh.js b/character/refresh.js index e3659fdef..480cf0702 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -6,9 +6,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ refresh:{ refresh_standard:["re_caocao","re_simayi","re_guojia","re_lidian","re_zhangliao","re_xuzhu","re_xiahoudun","re_zhangfei","re_zhaoyun","re_guanyu","re_machao","re_xushu","re_zhouyu","re_lvmeng","re_ganning","re_luxun","re_daqiao","re_huanggai","re_lvbu","re_gongsunzan","re_huatuo","re_liubei","re_diaochan","re_huangyueying","re_sunquan","re_sunshangxiang","re_zhenji","re_zhugeliang","re_huaxiong"], refresh_feng:['caoren','re_xiahouyuan','re_huangzhong','re_weiyan','re_xiaoqiao','zhoutai','re_zhangjiao','xin_yuji'], - refresh_huo:["re_sp_zhugeliang","re_xunyu","re_dianwei","re_yanwen","re_pangtong","xin_yuanshao","re_pangde"], + refresh_huo:["re_sp_zhugeliang","re_xunyu","re_dianwei","re_yanwen","re_pangtong","ol_yuanshao","re_pangde"], refresh_lin:['re_zhurong','re_menghuo','re_dongzhuo','re_sunjian','re_caopi','re_xuhuang'], - refresh_shan:['re_dengai','re_jiangwei','re_caiwenji','re_liushan','re_zhangzhang','re_zuoci','re_sunce'], + refresh_shan:['re_dengai','re_jiangwei','re_caiwenji','ol_liushan','re_zhangzhang','re_zuoci','re_sunce'], }, }, connect:true, @@ -60,7 +60,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_dianwei:["male","wei",4,["reqiangxi"],[]], re_yanwen:["male","qun",4,["reshuangxiong"],[]], re_pangtong:['male','shu',3,['xinlianhuan','niepan'],[]], - xin_yuanshao:['male','qun',4,['olluanji','olxueyi'],['zhu']], + ol_yuanshao:['male','qun',4,['olluanji','olxueyi'],['zhu']], re_zhurong:['female','shu',4,['juxiang','relieren']], re_menghuo:['male','shu',4,['huoshou','rezaiqi']], re_dongzhuo:['male','qun',8,['rejiuchi','roulin','benghuai','baonue'],['zhu']], @@ -69,7 +69,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_dengai:['male','wei',4,['retuntian','zaoxian']], re_jiangwei:['male','shu',4,['retiaoxin','zhiji']], re_caiwenji:['female','qun',3,['rebeige','duanchang']], - re_liushan:['male','shu',3,['xiangle','olfangquan','olruoyu'],['zhu']], + ol_liushan:['male','shu',3,['xiangle','olfangquan','olruoyu'],['zhu']], re_zhangzhang:['male','wu',3,['rezhijian','guzheng']], re_sunce:['male','wu',4,['jiang','olhunzi','olzhiba'],['zhu']], @@ -89,6 +89,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, skill:{ sishu:{ + audio:2, trigger:{player:'phaseUseBegin'}, direct:true, content:function(){ @@ -167,7 +168,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, olfangquan:{ - audio:'refangquan', + audio:2, trigger:{player:'phaseUseBefore'}, filter:function(event,player){ return player.countCards('h')>0&&!player.hasSkill('olfangquan3'); @@ -190,7 +191,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.bool){ player.logSkill('olfangquan'); trigger.cancel(); - player.addSkill('olfangquan2'); + player.addTempSkill('olfangquan2'); player.addMark('olfangquan2',1,false); } } @@ -204,6 +205,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ "step 0" event.count=player.countMark(event.name); + player.removeMark(event.name,event.count,false); "step 1" event.count--; player.chooseToDiscard('是否弃置一张牌并令一名其他角色进行一个额外回合?').set('logSkill','olfangquan').ai=function(card){ @@ -241,7 +243,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, olluanji:{ inherit:'luanji', - audio:'luanji', + audio:2, line:false, group:'olluanji_remove', check:function(card){ @@ -271,7 +273,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, olxueyi:{ - audio:'xueyi', + audio:2, trigger:{global:'phaseBefore'}, forced:true, zhuSkill:true, @@ -299,7 +301,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ group:'olxueyi_draw', }, olxueyi_draw:{ - audio:'xueyi', + audio:'olxueyi', trigger:{player:'phaseBegin'}, prompt2:'弃置一枚「裔」标记,然后摸一张牌', check:function(event,player){ @@ -314,7 +316,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, olhunzi:{ - audio:'hunzi', + audio:2, inherit:'hunzi', content:function(){ player.loseMaxHp(); @@ -327,7 +329,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, olzhiba:{ - audio:'zhiba', + audio:2, unique:true, zhuSkill:true, global:'olzhiba2', @@ -1263,7 +1265,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ filterTarget:function (card,player,target){ if(player==target) return false; if(target.hasSkill('reqiangxi_off')) return false; - return get.distance(player,target,'attack')<=1; + return player.inRange(target); }, content:function (){ "step 0" @@ -1645,7 +1647,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else event.finish(); 'step 2' if(result.targets){ - player.useCard({name:'juedou'},result.targets[0],'noai'); + player.useCard({name:'juedou',isCard:true},result.targets[0],'noai'); } }, ai:{ @@ -2749,7 +2751,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'useCard'}, frequent:true, filter:function(event){ - return (get.type(event.card)=='trick'); + return (get.type(event.card,'trick')=='trick'&&event.card.isCard); }, init:function(player){ player.storage.rejizhi=0; @@ -2811,13 +2813,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, rerende:{ audio:2, - group:['rerende1'], audioname:['gz_jun_liubei'], enable:'phaseUse', filterCard:true, selectCard:[1,Infinity], discard:false, - prepare:'give2', + lose:false, + delay:0, filterTarget:function(card,player,target){ if(player.storage.rerende2&&player.storage.rerende2.contains(target)) return false; return player!=target; @@ -2847,11 +2849,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ 'step 0' + var evt=_status.event.getParent('phaseUse'); + if(evt&&evt.name=='phaseUse'&&!evt.rerende){ + var next=game.createEvent('rerende_clear'); + _status.event.next.remove(next); + evt.after.push(next); + evt.rerende=true; + next.player=player; + next.setContent(lib.skill.rerende1.content); + } if(!Array.isArray(player.storage.rerende2)){ player.storage.rerende2=[]; } player.storage.rerende2.push(target); - target.gain(cards,player); + target.gain(cards,player,'giveAuto'); if(typeof player.storage.rerende!='number'){ player.storage.rerende=0; } @@ -2998,7 +3009,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } 'step 2' if(event.target){ - player.useCard({name:'juedou'},event.target,'noai'); + player.useCard({name:'juedou',isCard:true},event.target,'noai'); } }, ai:{ @@ -3305,7 +3316,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, reyingzi:{ audio:2, - audioname:['heqi','sunce','gexuan','re_sunben'], + audioname:['heqi','sunce','gexuan','re_sunben','re_sunce'], trigger:{player:'phaseDrawBegin2'}, forced:true, content:function(){ @@ -4116,7 +4127,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ai:{ order:9, result:{ - player:2 + player:function(player){ + if(game.hasPlayer(function(current){ + return current.sex=='male'&&get.attitude(player,current)>0; + })) return 2; + return 0; + }, }, threaten:1.2 } @@ -4355,16 +4371,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "re_dianwei":"界典韦", "re_yanwen":"界颜良文丑", re_pangtong:"界庞统", - xin_yuanshao:"界袁绍", + xin_yuanshao:"手杀袁绍", re_zhangjiao:'界张角', re_sunce:'界孙策', + ol_yuanshao:'界袁绍', + ol_liushan:'界刘禅', olfangquan:'放权', olfangquan_info:'出牌阶段开始前,你可以跳过此阶段。若如此做,弃牌阶段开始时,你可以弃置一张手牌,令一名其他角色进行一个额外回合。', olruoyu:'若愚', olruoyu_info:'主公技,觉醒技,准备阶段,若你的体力值为全场最少,则你加1点体力上限并回复1点体力,然后获得技能〖思蜀〗和〖激将〗。', sishu:'思蜀', - sishu_info:'出牌阶段开始时,你可以选择一名角色。该角色本回合内【乐不思蜀】的判定效果反转。', + sishu_info:'出牌阶段开始时,你可以选择一名角色。该角色本局游戏内【乐不思蜀】的判定效果反转。', olluanji:'乱击', olluanji_info:'你可以将两张花色相同的手牌当做【万箭齐发】使用。当你使用【万箭齐发】选择目标后,你可以为此牌减少一个目标。', olluanji_remove:'乱击', @@ -4372,7 +4390,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ olxueyi_info:'锁定技,游戏开始时,你获得X个“裔”标记。回合开始时,你可以移去一个“裔”标记,然后摸一张牌。你每有一个“裔”标记,手牌上限便+2。(X为场上群势力角色的数目)', olxueyi_draw:'血裔', olhunzi:'魂姿', - olhunzi_info:'觉醒技,准备阶段,若你的体力上限为1,你减1点体力上限并回复1点体力,然后获得技能〖英姿〗和〖英魂〗。', + olhunzi_info:'觉醒技,准备阶段,若你的体力值为1,你减1点体力上限并回复1点体力,然后获得技能〖英姿〗和〖英魂〗。', olzhiba:'制霸', olzhiba_info:'主公技,其他吴势力的角色的出牌阶段限一次,其可以与你拼点(你可拒绝此拼点)。若其没赢,你可以获得两张拼点牌。你的出牌阶段限一次,你可以和一名吴势力角色拼点,若你赢,你获得两张拼点牌。', olzhiba2:'制霸', @@ -4403,7 +4421,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ rebiyue:'闭月', rebiyue_info:'结束阶段,你可以摸一张牌,若你没有手牌,则改为摸两张牌。', rejizhi:'集智', - rejizhi_info:'当你使用非延时锦囊牌时,你可以摸一张牌。若此牌为基本牌,则你可以弃置之,然后令本回合手牌上限+1。', + rejizhi_info:'当你使用锦囊牌时,你可以摸一张牌。若此牌为基本牌,则你可以弃置之,然后令本回合手牌上限+1。', reqicai:'奇才', reqicai_info:'锁定技,你使用锦囊牌无距离限制,你装备区内的防具牌和宝物牌不能被其他角色弃置。', rezhiheng:'制衡', diff --git a/character/shenhua.js b/character/shenhua.js index 963d78279..de11324aa 100755 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -177,6 +177,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(!player.storage.zhengrong) player.storage.zhengrong=[]; player.storage.zhengrong.push(card); player.markSkill('zhengrong'); + game.delayx(); } }, marktext:'荣', @@ -261,7 +262,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ enable:'phaseUse', audio:'drlt_qingce', filter:function(event,player){ - return player.storage.zhengrong&&player.storage.zhengrong.length>0; + return player.storage.zhengrong&&player.storage.zhengrong.length>0&&player.countCards('h')>0; }, chooseButton:{ dialog:function(event,player){ @@ -270,11 +271,30 @@ game.import('character',function(lib,game,ui,get,ai,_status){ backup:function(links,player){ return { card:links[0], + filterCard:true, + filterTarget:function(card,player,target){ + return target.countDiscardableCards(player,'ej')>0; + }, delay:0, audio:'drlt_zhengrong', content:lib.skill.qingce.contentx, + ai:{ + result:{ + target:function(player,target){ + var att=get.attitude(player,target); + if(att>0&&(target.countCards('j')>0||target.countCards('e',function(card){ + return get.value(card,target)<0; + }))) return 2; + if(att<0&&target.countCards('e')>0&&!target.hasSkillTag('noe')) return -1; + return 0; + }, + }, + }, } - } + }, + prompt:function(links,player){ + return '选择弃置一张牌,获得'+get.translation(links[0])+'并弃置一名角色装备区或判定区内的一张牌'; + }, }, contentx:function(){ 'step 0' @@ -283,24 +303,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.storage.zhengrong.remove(card); player[player.storage.zhengrong.length>0?'markSkill':'unmarkSkill']('zhengrong'); 'step 1' - if(player.countCards('h')>0) player.chooseToDiscard('h',true); - else event.finish(); - 'step 2' - var targets=game.filterPlayer(function(current){ - return result&&result.bool&¤t.countCards('ej')>0; - }) - if(!targets.length){event.finish();return} - player.chooseTarget(true,'请选择一名目标角色,弃置其装备区或判定区内的一张牌',function(card,player,target){ - return _status.event.targets.contains(target); - }).set('targets',targets).set('ai',function(target){ - var att=get.attitude(_status.event.player,target); - if(target.countCards('j')>0&&att>0) return 2*att; - return target.countCards('e')>0?-att:0; - }); - 'step 3' - if(result.bool){ - player.line(result.targets[0],'thunder'); - player.discardPlayerCard('ej',true,result.targets[0]); + if(target.countDiscardableCards(player,'ej')>0){ + player.discardPlayerCard('ej',true,target); } }, ai:{ @@ -1551,7 +1555,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mod:{ playerEnabled:function(card,player,target){ var info=get.info(card); - if(target!=player&&(!info||!info.singleCard||!ui.selected.targets.length)&&player.isPhaseUsing()&&get.distance(target,player,'attack')>1) return false; + if(target!=player&&(!info||!info.singleCard||!ui.selected.targets.length)&&player.isPhaseUsing()&&!target.inRange(player)) return false; }, }, trigger:{ @@ -1561,14 +1565,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ filter:function (event,player){ return (player.getHistory('useCard',function(evt){ return evt.getParent('phaseUse')==event; - }).length1}))&&game.hasPlayer(function(target){ - return get.distance(target,player,'attack')>1&&target.countDiscardableCards(player,'he'); + }).length1&&target.countDiscardableCards(player,'he'); + return !target.inRange(player)&&target.countDiscardableCards(player,'he'); }).ai=function(target){ return -get.attitude(player,target); }; @@ -1715,7 +1719,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, effect:{ target:function(card,player,target){ - if(get.type(card)=='equip'&&!player.getHistory('useCard',function(evt){ + if(player==target&&get.type(card)=='equip'&&!player.getHistory('useCard',function(evt){ return get.type(evt.card)=='equip' }).length==0) return [1,3]; }, @@ -1885,7 +1889,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ filter:function(event,player){ return game.hasPlayer(function(current){ return current!=player&& - get.distance(player,current,'attack')<=1&& + player.inRange(current)&& player.storage.nzry_mingren!=undefined&& player.countCards('he',{color:get.color(player.storage.nzry_mingren[0])})>=Math.max(Math.abs(current.hp-player.hp),1); })&&player.storage.nzry_zhenliang!=true; @@ -1893,7 +1897,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ filterTarget:function(card,player,target){ return player.storage.nzry_mingren!=undefined&& target!=player&& - get.distance(player,target,'attack')<=1&& + player.inRange(target)&& player.countCards('he',{color:get.color(player.storage.nzry_mingren[0])})>=Math.max(Math.abs(target.hp-player.hp),1); }, content:function(){ @@ -2173,7 +2177,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ '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); + if(get.position(button.link)=='e'){ + if(get.subtype(button.link)=='equip2') return 2*get.value(button.link); + return get.value(button.link); + } return 1; }).set('logSkill',['jianchu',trigger.target]).set('att',get.attitude(player,trigger.target)<=0); 'step 1' @@ -2189,7 +2196,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(list.length) trigger.target.gain(list,'gain2','log'); } } - } + }, + ai:{ + unequip_ai:true, + skillTagFilter:function(player,tag,arg){ + if(arg&&arg.name=='sha'&&arg.target.getEquip(2)) return true; + return false; + } + }, }, redimeng:{ audio:'dimeng', @@ -2403,7 +2417,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ lianhuan3:{ audio:['xinlianhuan',1], audioname:['xinlianhuan'], - enable:'phaseUse', + enable:'chooseToUse', filter:function(event,player){ return player.countCards('h',{suit:'club'})>0; }, @@ -2681,7 +2695,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ enable:'phaseUse', usable:1, filterTarget:function(card,player,target){ - return target!=player&&lib.filter.targetInRange({name:'sha'},target,player)&&target.countCards('he'); + return target!=player&&target.inRange(player)&&target.countCards('he')>0; }, content:function(){ "step 0" @@ -2742,7 +2756,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, xiangle:{ audio:2, - audioname:['re_liushan'], + audioname:['re_liushan','ol_liushan'], trigger:{target:'useCardToTargeted'}, forced:true, filter:function(event,player){ @@ -2810,7 +2824,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.bool){ player.logSkill('fangquan'); trigger.cancel(); - player.addSkill('fangquan2'); + player.addTempSkill('fangquan2'); player.addMark('fangquan2',1,false); //player.storage.fangquan=result.targets[0]; } @@ -2826,6 +2840,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ "step 0" event.count=player.countMark(event.name); + player.removeMark(event.name,event.count); "step 1" event.count--; player.chooseToDiscard('是否弃置一张牌并令一名其他角色进行一个额外回合?').set('logSkill',player.name=='re_liushan'?'refangquan':'fangquan').ai=function(card){ @@ -3257,7 +3272,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, jiang:{ audio:2, - audioname:['sp_lvmeng','re_sunben'], + audioname:['sp_lvmeng','re_sunben','re_sunce'], trigger:{ player:'useCardToPlayered', target:'useCardToTargeted', @@ -3456,7 +3471,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ order:10 }, result:{ - target:3, + target:function(player,target){ + var card=ui.selected.cards[0]; + if(card) return get.effect(target,card,target,target); + return 0; + }, }, threaten:1.3 } @@ -4455,7 +4474,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, yinghun:{ audio:2, - audioname:['re_sunjian','sunce','re_sunben'], + audioname:['re_sunjian','sunce','re_sunben','re_sunce'], trigger:{player:'phaseZhunbeiBegin'}, filter:function(event,player){ return player.hp0; @@ -4899,7 +4918,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ lianhuan1:{ audio:2, audioname:['re_pangtong'], - enable:'phaseUse', + enable:'chooseToUse', filter:function(event,player){ return player.countCards('h',{suit:'club'})>0; }, @@ -4974,15 +4993,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.storage.niepan=true; player.discard(player.getCards('hej')); 'step 1' + player.link(false); + 'step 2' + player.turnOver(false); + 'step 3' + player.draw(3); + 'step 4' if(player.hp<3){ player.recover(3-player.hp); } - 'step 2' - player.draw(3); - 'step 3' - player.link(false); - 'step 4' - player.turnOver(false); }, ai:{ order:0.5, @@ -4993,7 +5012,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ save:true, result:{ player:function(player){ - if(player.hp==0) return 10; + if(player.hp<=0) return 10; if(player.hp<=1&&player.countCards('he')<=1) return 10; return 0; } @@ -5032,15 +5051,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.storage.oldniepan=true; player.discard(player.getCards('hej')); 'step 1' + player.link(false); + 'step 2' + player.turnOver(false); + 'step 3' + player.draw(3); + 'step 4' if(player.hp<3){ player.recover(3-player.hp); } - 'step 2' - player.draw(3); - 'step 3' - player.link(false); - 'step 4' - player.turnOver(false); }, ai:{ order:1, @@ -5051,7 +5070,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ save:true, result:{ player:function(player){ - if(player.hp==0) return 10; + if(player.hp<=0) return 10; if(player.hp<=2&&player.countCards('he')<=1) return 10; return 0; } @@ -5084,11 +5103,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "step 1" if(result.bool){ if(game.hasPlayer(function(player){ - return player!=target&&get.distance(target,player,'attack')<=1; + return player!=target&&target.inRange(player)<=1; })){ player.chooseTarget(function(card,player,target){ var source=_status.event.source; - return target!=source&&get.distance(source,target,'attack')<=1; + return target!=source&&source.inRange(target)<=1; },true).set('ai',function(target){ return get.damageEffect(target,_status.event.source,player); }).set('source',target); @@ -5117,7 +5136,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var players=game.filterPlayer(); for(var i=0;i0){ return att>0?att/2:att-(oc?5:0); } @@ -5228,7 +5247,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ selectCard:[0,1], filterTarget:function(card,player,target){ if(player==target) return false; - return get.distance(player,target,'attack')<=1; + return player.inRange(target); }, content:function(){ "step 0" @@ -5291,7 +5310,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, filterTarget:function(card,player,target){ if(player==target) return false; - return get.distance(player,target,'attack')<=1; + return player.inRange(target); }, content:function(){ "step 0" @@ -5687,7 +5706,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "step 1" if(result.bool){ player.logSkill('shensu1',result.targets); - player.useCard({name:'sha'},result.targets[0],false); + player.useCard({name:'sha',isCard:true},result.targets[0],false); trigger.cancel(); player.skip('phaseDraw'); } @@ -5729,7 +5748,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.bool){ player.logSkill('shensu2',result.targets); player.discard(result.cards[0]); - player.useCard({name:'sha'},result.targets[0]); + player.useCard({name:'sha',isCard:true},result.targets[0]); trigger.cancel(); } } @@ -5753,7 +5772,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.bool){ player.logSkill('shensu4',result.targets); player.turnOver(); - player.useCard({name:'sha'},result.targets[0],false); + player.useCard({name:'sha',isCard:true},result.targets[0],false); trigger.cancel(); } } diff --git a/character/sp.js b/character/sp.js index 04ea5c996..7ad46b533 100755 --- a/character/sp.js +++ b/character/sp.js @@ -81,7 +81,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_caoren:['male','wei',4,['weikui','lizhan']], zhangbao:['male','qun',3,['zhoufu','yingbin']], huangjinleishi:['female','qun',3,['fulu','fuji']], - maliang:['male','shu',3,['zishu','yingyuan']], + maliang:['male','shu',3,['zishu','xinyingyuan']], sp_pangtong:['male','qun',3,['xinmanjuan','zuixiang']], zhugedan:['male','wei',4,['gongao','juyi']], sp_jiangwei:['male','wei',4,['kunfen','fengliang']], @@ -667,7 +667,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.bool&&result.cards&&result.cards.length){ var name=get.type(result.cards[0])=='basic'?'neifa_basic':'neifa_nobasic'; player.addTempSkill(name); - player.addMark(name,1,false); + var num=Math.min(5,player.countCards('h',function(cardx){ + return !lib.filter.cardEnabled(cardx,player); + })); + player.addMark(name,num,false); } }, }, @@ -677,7 +680,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ onremove:true, intro:{ name:'内伐 - 基本牌', - content:'本回合内不能使用锦囊牌和装备牌,且使用【杀】选择目标时可以多选择#个目标,且使用【杀】的目标次数上限+X。(X为手牌中不能使用的牌且最多为5)', + content:'本回合内不能使用锦囊牌和装备牌,且使用【杀】选择目标时可以多选择1个目标,且使用【杀】的目标次数上限+#。', }, mod:{ cardEnabled:function(card,player){ @@ -688,9 +691,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, cardUsable:function(card,player,num){ if(card.name=='sha'){ - return num+player.countMark('neifa_basic')*Math.min(5,player.countCards('h',function(cardx){ - return !lib.filter.cardEnabled(cardx,player); - })); + return num+player.countMark('neifa_basic'); } }, }, @@ -704,7 +705,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ direct:true, content:function(){ 'step 0' - player.chooseTarget(get.prompt('neifa'),'为'+get.translation(trigger.card)+'增加至多'+get.cnNumber(player.countMark('neifa_basic'))+'个目标',[1,player.countMark('neifa_basic')],function(card,player,target){ + player.chooseTarget(get.prompt('neifa'),'为'+get.translation(trigger.card)+'额外指定一个目标',function(card,player,target){ return !_status.event.sourcex.contains(target)&&player.canUse(_status.event.card,target); }).set('sourcex',trigger.targets).set('ai',function(target){ var player=_status.event.player; @@ -719,7 +720,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.finish(); } 'step 2' - player.logSkill('neifa',event.target); + player.logSkill('neifa',event.targets); trigger.targets.addArray(event.targets); }, }, @@ -739,7 +740,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, intro:{ name:'内伐 - 非基本牌', - content:'本回合内不能使用基本牌,且使用普通锦囊牌选择目标时可以多选择#个目标,且本回合的出牌阶段内前两次使用装备牌时摸X张牌(X为手牌中不能使用的牌且最多为5)。' + content:'本回合内不能使用基本牌,且使用普通锦囊牌选择目标时可以多选择1个目标,且本回合的出牌阶段内前两次使用装备牌时摸#张牌。' }, filter:function(event,player){ if(get.type(event.card)!='trick') return false; @@ -756,11 +757,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ 'step 0' - var prompt2='为'+get.translation(trigger.card)+'额外指定'+get.cnNumber(player.countMark(event.name))+'名目标' - player.chooseTarget([1,player.countMark(event.name)],get.prompt('neifa'),function(card,player,target){ + var prompt2='为'+get.translation(trigger.card)+'额外指定一个目标' + player.chooseTarget(get.prompt('neifa'),function(card,player,target){ var player=_status.event.player; if(_status.event.targets.contains(target)) return false; - return lib.filter.targetEnabled2(_status.event.card,player,target); + return lib.filter.targetEnabled2(_status.event.card,player,target)&&lib.filter.targetInRange(_status.event.card,player,target); }).set('prompt2',prompt2).set('ai',function(target){ var trigger=_status.event.getTrigger(); var player=_status.event.player; @@ -784,19 +785,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, neifa_use:{ audio:'neifa', + usable:2, trigger:{player:'useCard'}, forced:true, filter:function(event,player){ - return get.type(event.card)=='equip'&&player.getHistory('useCard',function(evt){ - return get.type(evt.card)=='equip'&&evt.isPhaseUsing(); - }).indexOf(event)<2&&player.countMark('neifa_nobasic')*Math.min(5,player.countCards('h',function(cardx){ - return !lib.filter.cardEnabled(cardx,player); - }))>0; + return get.type(event.card)=='equip'&&player.countMark('neifa_nobasic')>0; }, content:function(){ - player.draw(player.countMark('neifa_nobasic')*Math.min(5,player.countCards('h',function(cardx){ - return !lib.filter.cardEnabled(cardx,player); - }))); + player.draw(player.countMark('neifa_nobasic')); }, }, //花鬘 @@ -1024,6 +1020,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){ filter:function(event,player){ return player.countCards('he')>0; }, + initList:function(){ + var list=[]; + for(var i in lib.character){ + if(lib.filter.characterDisabled2(i)||lib.filter.characterDisabled(i)) continue; + list.push(i); + } + game.countPlayer2(function(current){ + list.remove(current.name); + list.remove(current.name1); + list.remove(current.name2); + if(current.storage.rehuashen&¤t.storage.rehuashen.character) list.removeArray(current.storage.rehuashen.character) + }); + _status.characterlist=list; + }, content:function(){ 'step 0' if(!player.storage.pingjian) player.storage.pingjian=[]; @@ -1032,6 +1042,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }; 'step 1' if(result.bool){ + if(!_status.characterlist){ + lib.skill.pingjian.initList(); + } var list=[]; var skills=[]; var map=[]; @@ -1094,6 +1107,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var list=[]; var skills=[]; var map=[]; + if(!_status.characterlist){ + lib.skill.pingjian.initList(); + } _status.characterlist.randomSort(); for(var i=0;i<_status.characterlist.length;i++){ var name=_status.characterlist[i]; @@ -1369,9 +1385,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ trigger.target.gain(trigger.cards.filterInD(),'gain2','log'); - trigger.target.loseHp(); + trigger.target.loseHp().set('source',player); + }, + ai:{ + jueqing:true, + unequip_ai:true, + skillTagFilter:function(player,tag,arg){ + if(tag=='unequip_ai'){ + if(arg&&arg.name=='sha'&&get.color(arg.card)=='black') return true; + return false; + } + } }, - ai:{jueqing:true}, }, pyzhuren_shandian:{ audio:true, @@ -1534,7 +1559,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var bool=player.storage.lslixun>0!==true; player.chooseTarget(bool,'令'+get.translation(target)+'对其攻击范围内的一名角色造成1点伤害'+(bool?'':',或点「取消」移去一个“珠”'),function(card,player,target){ var source=_status.event.source; - return target!=source&&get.distance(source,target,'attack')<=1; + return target!=source&&source.inRange(target); }).set('source',target).set('ai',function(target){ return get.damageEffect(target,_status.event.source,_status.event.player); }); @@ -1721,7 +1746,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return get.effect(player,{name:'sha'},target,target)>=get.effect(player,{name:'juedou'},target,target)?'sha':'juedou'; }; 'step 3' - target.useCard({name:result.control},player); + target.useCard({name:result.control,isCard:true},player); }, ai:{ order:7, @@ -3173,7 +3198,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ reverseEquip:true, effect:{ target:function (card,player,target,current){ - if(get.type(card)=='equip') return [1,3]; + if(player==target&&get.type(card)=='equip') return [1,3]; }, }, }, @@ -3427,7 +3452,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(bool){ player.chooseUseTarget({name:'sha'},'是否视为使用一张【杀】?',false); } - } + }, + ai:{ + threaten:3, + noe:true, + reverseOrder:true, + skillTagFilter:function(player){ + if(player.storage.xinshanjia>2) return false; + }, + effect:{ + target:function(card,player,target){ + if(player.storage.xinshanjia<3&&get.type(card)=='equip'&&!get.cardtag(card,'gifts')) return [1,3]; + }, + }, + }, }, //OL马超 ol_shichou:{ @@ -3596,7 +3634,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ global:"phaseUseBegin", }, filter:function (event,player){ - return event.player!=player&&event.player.isAlive()&&get.distance(event.player,player,'attack')<=1; + return event.player!=player&&event.player.isAlive()&&event.player.inRange(player); }, direct:true, derivation:["new_zhixi"], @@ -3824,7 +3862,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sha:{ audio:'qingzhong', enable:'chooseToUse', - viewAs:{name:'sha'}, + viewAs:{name:'sha',isCard:true}, filterCard:function(){return false}, viewAsFilter:function(player){ if(player.hasSkill('weijing_disable')) return false; @@ -3855,7 +3893,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shan:{ audio:'qingzhong', enable:'chooseToUse', - viewAs:{name:'shan'}, + viewAs:{name:'shan',isCard:true}, mark:false, filterCard:function(){return false}, viewAsFilter:function(player){ @@ -4002,6 +4040,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, baijia:{ audio:2, + audioname:['tw_beimihu'], unique:true, derivation:'bmcanshi', juexingji:true, @@ -4032,6 +4071,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, bmcanshi:{ audio:2, + audioname:['tw_beimihu'], group:['bmcanshi_add','bmcanshi_remove'], subSkill:{ add:{ @@ -4099,8 +4139,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, guju:{ audio:2, + audioname:['tw_beimihu'], init:function(player){ - player.storage.guju=0; + if(!player.storage.guju) player.storage.guju=0; }, intro:{ content:'已因此技能获得#张牌' @@ -4138,6 +4179,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'phaseBefore',global:'roundStart'}, direct:true, audio:2, + audioname:['tw_beimihu'], filter:function(event,player){ return game.hasPlayer(function(current){ if(event.name=='roundStart'&&!current.isMinHp()) return false; @@ -4234,6 +4276,39 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, group:['zishu_draw','zishu_discard',] }, + xinyingyuan:{ + audio:'yingyuan', + trigger:{player:'useCardAfter'}, + direct:true, + filter:function(event,player){ + if(_status.currentPhase!=player) return false; + var type=get.type(event.card,'trick'); + return player.getHistory('custom',function(evt){ + return evt.xinyingyuan_name==type; + }).length==0; + }, + content:function(){ + 'step 0' + event.type=get.type(trigger.card,'trick'); + player.chooseTarget(get.prompt('xinyingyuan'),'令一名其他角色从牌堆中获得一张'+get.translation(event.type)+'牌',function(card,player,target){ + return target!=player; + }).set('ai',function(target){ + var att=get.attitude(_status.event.player,target); + if(att<3) return 0; + if(target.hasJudge('lebu')) att/=2; + return att/(1+get.distance(player,target,'absolute')); + }); + 'step 1' + if(result.bool){ + player.logSkill('xinyingyuan',result.targets[0]); + var card=get.cardPile2(function(cardx){ + return get.type(cardx,'trick')==event.type; + }); + if(card) result.targets[0].gain(card,'log','gain2'); + player.getHistory('custom').push({xinyingyuan_name:event.type}); + } + }, + }, yingyuan:{ audio:2, trigger:{player:'useCardAfter'}, @@ -4263,15 +4338,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }).set('sha',trigger.cards[0].name=='sha').set('wuxie',trigger.cards[0].name=='wuxie'); 'step 1' if(result.bool){ - var list=trigger.cards.filterInD(); player.logSkill('yingyuan',result.targets[0]); - result.targets[0].gain(list,'gain2'); + result.targets[0].gain(trigger.cards.filterInD(),'gain2'); player.getHistory('custom').push({yingyuan_name:trigger.card.name}); } }, - ai:{ - threaten:1.8 - } }, choulve:{ audio:2, @@ -4413,10 +4484,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } 'step 2' if(result.bool){ - player.chooseUseTarget({name:'wuzhong'},true); + player.chooseUseTarget({name:'wuzhong',isCard:true},true); } else{ - event.target.useCard({name:'guohe'},player); + event.target.useCard({name:'guohe',isCard:true},player); } } }, @@ -4946,14 +5017,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); }).set('ai',function(button){ var player=_status.event.player; - var name=button.link[2]; - if(game.hasPlayer(function(current){ - return player.canUse(name,current)&&get.effect(current,{name:name},player,player)>0; - })){ - if(name=='wy_meirenji'||name=='wy_xiaolicangdao') return Math.random()+0.5; - return Math.random(); - } - return 0; + return player.getUseValue(button.link[2]); }); 'step 1' if(result.bool){ @@ -5021,7 +5085,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 1' if(target.countCards('h','shan')){ player.viewHandcards(target); - player.useCard({name:'sha'},target,false); + player.useCard({name:'sha',isCard:true},target,false); player.storage.weikui2=target; player.addTempSkill('weikui2'); } @@ -5317,7 +5381,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 4' if(num<=13){ var card={name:'sha',nature:'thunder'}; - if(player.canUse(card,target)) player.useCard(card,target,false); + if(player.canUse(card,target,false)) player.useCard(card,target,false); } }, ai:{ @@ -5398,7 +5462,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ target.addTempSkill('fenyue2'); } else{ - player.useCard({name:'sha'},target,false); + player.useCard({name:'sha',isCard:true},target,false); } } }, @@ -5784,7 +5848,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }).set('identity',target.identity); } else{ - player.useCard({name:'sha'},target,false); + player.useCard({name:'sha',isCard:true},target,false); event.finish(); } } @@ -5794,7 +5858,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } 'step 3' if(result.bool&&result.targets&&result.targets.length){ - player.useCard({name:'sha'},result.targets[0],false); + player.useCard({name:'sha',isCard:true},result.targets[0],false); } } }, @@ -6248,7 +6312,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ usable:1, filterCard:{color:'red',type:'basic'}, filterTarget:function(card,player,target){ - return target!=player&&target.countCards('he')&&get.distance(player,target,'attack')<=1; + return target!=player&&target.countCards('he')&&player.inRange(target); }, check:function(card){ return 6-get.value(card); @@ -7114,7 +7178,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' player.chooseTarget(get.prompt2('zhaolie'),function(card,player,target){ - return target!=player&&get.distance(player,target,'attack')<=1; + return target!=player&&player.inRange(target); }).set('ai',function(target){ var player=_status.event.player; if(get.attitude(player,target)>0) return 0; @@ -7235,7 +7299,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var num; var mode=get.mode(); if(mode=='identity'){ - num=get.population('fan'); + if(_status.mode=='purple') num=player.getEnemies().length; + else num=get.population('fan'); } else if(mode=='versus'){ num=player.getEnemies().length; @@ -7718,9 +7783,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ order:7, result:{ target:function(player,target){ - var num=game.countPlayer(function(current){ - return get.attitude(player,current)<0&¤t!=player&¤t.countCards('h'); - }); + var num=ui.selected.targets.length+1; if(num>3) num=3; var hs=player.getCards('h'); for(var i=0;i=player.hp&&result.bool&&result.cards[0].name!='sha'){ - player.useCard({name:'juedou'},target); + player.useCard({name:'juedou',isCard:true},target); } }, ai:{ @@ -9636,7 +9699,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 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'); + return player!=current&&player.inRange(current)&¤t.countCards('he'); }); }, intro:{ @@ -9656,7 +9719,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' player.chooseTarget('焚天:选择一名攻击范围内的角色,将其一张牌置于你的武将牌上',true,function(card,player,target){ - return player!=target&&get.distance(player,target,'attack')<=1&&target.countCards('he')>0; + return player!=target&&player.inRange(target)&&target.countCards('he')>0; }).set('ai',function(target){ return -get.attitude(_status.event.player,target) }); @@ -9980,6 +10043,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, fenxin:{ mode:['identity'], + available:function(mode){ + if(mode=='identity'&&_status.mode=='purple') return false; + }, trigger:{global:'dieAfter'}, filter:function(event,player){ return ['fan','zhong','nei'].contains(event.player.identity)&&!player.hasSkill('fenxin_'+event.player.identity); @@ -10119,7 +10185,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "step 1" if(result.bool){ player.logSkill('qingyi',result.targets); - player.useCard({name:'sha'},result.targets[0],false); + player.useCard({name:'sha',isCard:true},result.targets[0],false); trigger.cancel(); player.skip('phaseDraw'); } @@ -10143,7 +10209,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "step 1" if(result.bool){ player.logSkill('qingyi1',result.targets); - player.useCard({name:'sha'},result.targets[0],false); + player.useCard({name:'sha',isCard:true},result.targets[0],false); player.skip('phaseJudge'); player.skip('phaseDraw'); } @@ -10185,7 +10251,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.bool){ player.logSkill('qingyi2',result.targets); player.discard(result.cards[0]); - player.useCard({name:'sha'},result.targets[0]); + player.useCard({name:'sha',isCard:true},result.targets[0]); trigger.cancel(); } player.removeSkill('qingyi3'); @@ -10254,7 +10320,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ai:{ effect:{ target:function(card,player,target,current){ - if(get.type(card)=='equip') return [1,3]; + if(get.type(card)=='equip'&&!get.cardtag(card,'gifts')) return [1,3]; } }, threaten:1.3 @@ -10349,8 +10415,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ for(var i=0;i1||player.countCards('h')<=1){ if(ui.selected.cards.length){ return -1; } @@ -645,17 +651,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return 10-get.value(card); }, content:function(){ - target.gain(cards,player); - if(typeof player.storage.rende!='number'){ - player.storage.rende=0; - } - if(player.storage.rende>=0){ - player.storage.rende+=cards.length; - if(player.storage.rende>=2){ - player.recover(); - player.storage.rende=-1; - } - } + target.gain(cards,player,'giveAuto'); + var evt2=event.getParent(3); + var num=0; + player.getHistory('lose',function(evt){ + if(evt.getParent(2).name=='rende'&&evt.getParent(5)==evt2) num+=evt.cards.length; + }); + if(num<2&&num+cards.length>1) player.recover(); }, ai:{ order:function(skill,player){ @@ -706,14 +708,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, jijiang:{ audio:'jijiang1', - audioname:['liushan','re_liubei','re_liushan'], + audioname:['liushan','re_liubei','re_liushan','ol_liushan'], unique:true, group:['jijiang1','jijiang2'], zhuSkill:true, }, jijiang1:{ audio:2, - audioname:['liushan','re_liubei','re_liushan'], + audioname:['liushan','re_liubei','re_liushan','ol_liushan'], trigger:{player:'chooseToRespondBegin'}, check:function(event){ if(event.jijiang) return false; @@ -771,7 +773,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, jijiang2:{ audio:'jijiang1', - audioname:['liushan','re_liubei','re_liushan'], + audioname:['liushan','re_liubei','re_liushan','ol_liushan'], enable:'chooseToUse', prompt:'选择一名目标角色。若有其他蜀势力角色打出【杀】响应,则视为你对其使用此【杀】。', filter:function(event,player){ @@ -824,10 +826,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.bool){ event.finish(); if(result.cards&&result.cards.length){ - player.useCard({name:'sha'},result.cards,target).animate=false; + player.useCard({name:'sha',isCard:true},result.cards,target).animate=false; } else{ - player.useCard({name:'sha'},target).animate=false; + player.useCard({name:'sha',isCard:true},target).animate=false; } if(typeof event.current.ai.shown=='number'&&event.current.ai.shown<0.95){ event.current.ai.shown+=0.3; @@ -1505,7 +1507,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'useCard'}, frequent:true, filter:function(event){ - return (get.type(event.card)=='trick'&&(!event.cards.length||event.cards[0]&&event.cards[0]==event.card)); + return (get.type(event.card)=='trick'&&event.card.isCard); }, content:function(){ player.draw(); @@ -1891,7 +1893,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(event.card.name!='sha') return false; if(player.countCards('he')==0) return false; return game.hasPlayer(function(current){ - return get.distance(player,current,'attack')<=1&¤t!=event.player&& + return player.inRange(current)&¤t!=event.player&& current!=player&&lib.filter.targetEnabled(event.card,event.player,current); }); }, @@ -1903,7 +1905,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ filterTarget:function(card,player,target){ var trigger=_status.event.getTrigger(); if(trigger.targets.contains(target)) return false; - if(get.distance(player,target,'attack')<=1&& + if(player.inRange(target)&& target!=trigger.player){ if(player.canUse(trigger.card,target)) return true; } @@ -2030,7 +2032,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ reverseEquip:true, effect:{ target:function(card,player,target,current){ - if(get.type(card)=='equip') return [1,3]; + if(get.type(card)=='equip'&&!get.cardtag(card,'gifts')) return [1,3]; } } } @@ -2348,7 +2350,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ selectTarget:2, multitarget:true, content:function(){ - targets[1].useCard({name:'juedou'},'nowuxie',targets[0],'noai').animate=false; + targets[1].useCard({name:'juedou',isCard:true},'nowuxie',targets[0],'noai').animate=false; game.delay(0.5); }, ai:{ @@ -2572,7 +2574,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ tieji_info:'当你使用【杀】指定目标时,你可以进行判定。若结果为红色,则此【杀】不可被闪避。', jizhi_info:'当你使用一张非转化的普通锦囊牌时,你可以摸一张牌。', xinjizhi:'集智', - xinjizhi_info:'每当你使用一张非转化的普通锦囊牌,可以摸一张牌', + xinjizhi_info:'当你使用非转化的普通锦囊牌时,你可以摸一张牌。', xinjizhi_info_alter:'每当你使用一张非转化的锦囊牌,可以摸一张牌,如果摸到的是基本牌,你可以弃置这张牌,然后本回合手牌上限+1', xinqicai:'奇才', xinqicai_info:'锁定技,你使用锦囊牌无距离限制。', diff --git a/character/tw.js b/character/tw.js index ad6e743b0..e21fa971d 100644 --- a/character/tw.js +++ b/character/tw.js @@ -3,7 +3,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return { name:'tw', connect:false, - characterSort:{}, + characterSort:{ + tw:{ + tw_mobile:['tw_beimihu','nashime'], + tw_yijiang:['tw_caoang','tw_caohong','tw_zumao','tw_dingfeng','tw_maliang','tw_xiahouba'], + tw_english:['kaisa'], + }, + }, character:{ tw_beimihu:['female','qun',3,['zongkui','guju','baijia','bingzhao'],['zhu']], nashime:['male','qun',3,['chijie','waishi','renshe']], @@ -249,15 +255,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, twxiaolian:{ audio:2, - trigger:{global:'useCard'}, + trigger:{global:'useCardToPlayer'}, logTarget:'player', filter:function(event,player){ return event.card&&event.card.name=='sha'&&event.player!=player&& event.targets.length==1&&event.targets[0]!=player; }, content:function(){ - trigger.twxiaolian=trigger.targets[0]; - trigger.targets=[player]; + trigger.getParent().twxiaolian=trigger.targets[0]; + trigger.targets.length=0; + trigger.targets.push(player); }, group:'twxiaolian_damage', subSkill:{ @@ -271,6 +278,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ marktext:'马', intro:{ content:'cards', + onunmark:'throw', }, mod:{ globalTo:function(from,to,distance){ @@ -307,10 +315,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, twtijin:{ audio:2, - trigger:{global:'useCard'}, + trigger:{global:'useCardToPlayer'}, filter:function(event,player){ - return event.card&&event.card.name=='sha'&&event.player!=player&& - event.targets.length==1&&event.targets[0]!=player&&get.distance(event.player,player,'attack')<=1; + return event.card&&event.card.name=='sha'&&event.player!=player&&event.target!=player&& + event.targets.length==1&&event.player.inRange(player)<=1; }, logTarget:'player', check:function(event,player){ @@ -318,8 +326,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ 'step 0' - trigger.targets=[player]; - var next=game.createEvent('twtijin_discard',null,trigger.getParent()); + trigger.targets.length=0; + trigger.targets.push(player); + var next=game.createEvent('twtijin_discard',null,trigger.getParent(2)); next.player=player; next.target=trigger.player; next.setContent(function(){ @@ -377,6 +386,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, renshe:{ + audio:2, trigger:{player:'damageEnd'}, direct:true, content:function(){ @@ -421,6 +431,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, waishi:{ + audio:2, group:'waishi_afterstory', subSkill:{ afterstory:{ @@ -436,12 +447,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, enable:'phaseUse', filter:function(event,player){ - return player.storage.waishi>0; + return typeof player.storage.waishi!='number'||player.storage.waishi>0; }, filterTarget:function(card,player,target){ return target!=player&&target.countCards('h')>=ui.selected.cards.length; }, filterCard:true, + position:'he', check:function(card){ if(!game.hasPlayer(function(current){ return current!=_status.event.player&¤t.countCards('h')>ui.selected.cards.length; @@ -457,9 +469,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ delay:0, content:function(){ 'step 0' + if(typeof player.storage.waishi!='number') player.storage.waishi=1; player.storage.waishi--; player.lose(cards,ui.special); - player.gainPlayerCard(target,true,'h',cards.length).chooseonly=true; + player.choosePlayerCard(target,true,'h',cards.length).chooseonly=true; 'step 1' event.cards2=result.cards; target.lose(event.cards2,ui.special); @@ -483,6 +496,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, chijie:{ + audio:true, forbid:['guozhan'], trigger:{global:'gameDrawAfter'}, direct:true, @@ -545,6 +559,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ waishi_info:' 出牌阶段限一次,你可以用至多X张牌交换一名其他角色等量的手牌(X为现存势力数),然后若其与你势力相同或手牌多于你,你摸一张牌。', renshe:'忍涉', renshe_info:'当你受到伤害后,你可以选择一项:将势力改为现存的另一个势力;或可以额外发动一次“外使”直到你的下个出牌阶段结束;或与另一名其他角色各摸一张牌。', + tw_mobile:'移动版', + tw_yijiang:'一将成名TW', + tw_english:'英文版', } }; }); diff --git a/character/xinghuoliaoyuan.js b/character/xinghuoliaoyuan.js index 7b6f72ad4..06491d9ba 100755 --- a/character/xinghuoliaoyuan.js +++ b/character/xinghuoliaoyuan.js @@ -51,7 +51,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ direct:true, content:function (){ "step 0" - player.chooseTarget(get.prompt('xinfu_langxi'),'对一名其他角色造成0-2点随机伤害',function(card,player,target){ + player.chooseTarget(get.prompt('xinfu_langxi'),'对一名体力值不大于你的其他角色造成0-2点随机伤害',function(card,player,target){ return target.hp<=player.hp&&target!=player; }).set('ai',function(target){ var player=_status.event.player; @@ -387,7 +387,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.directindex=result.index; } if(event.directindex==1){ - target.chooseUseTarget({name:'sha'},cards,true,false) + target.chooseUseTarget({name:'sha'},cards,true,false).viewAs=true; } else{ target.chooseUseTarget(card,true,false,'nodistance'); @@ -1146,7 +1146,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function (){ 'step 0' - trigger.player.removeMark('xionghuo',1); + trigger.player.removeMark('xionghuo',trigger.player.countMark('xionghuo')); var list=[1,2,3]; var num=list.randomGet(); event.goto(num); @@ -1749,7 +1749,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.line(target,'fire'); event.draws=game.filterPlayer(function(current){ if(current==target) return true; - return current.name=='guansuo'||current.name2=='guansuo'; + return ['guansuo','old_guansuo'].contains(current.name)||['guansuo','old_guansuo'].contains(current.name2); }); player.gainPlayerCard(target,'he',true); } @@ -3647,7 +3647,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "xinfu_limu":{ mod:{ targetInRange:function (card,player,target){ - if(player.countCards('j')&&get.distance(player,target,'attack')<=1){ + if(player.countCards('j')&&target.inRange(player)){ return true; } }, @@ -4069,7 +4069,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "wolong_card":function (){ 'step 0' var ingame=game.hasPlayer(function(current){ - return current.name=='sp_zhugeliang'||current.name2=='sp_zhugeliang'; + return ['sp_zhugeliang','re_zhugeliang'].contains(current.name)||['sp_zhugeliang','re_zhugeliang'].contains(current.name2); })?true:false; var prompt='请选择'; prompt+=ingame?'至多两名':'一名'; @@ -4090,7 +4090,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "fengchu_card":function (){ 'step 0' var ingame=game.hasPlayer(function(current){ - return current.name=='pangtong'||current.name2=='pangtong'; + return ['re_pangtong','pangtong'].contains(current.name)||['re_pangtong','pangtong'].contains(current.name2); })?true:false; var prompt='请选择'; prompt+=ingame?'至多四名':'至多三名'; @@ -4111,7 +4111,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "xuanjian_card":function (){ 'step 0' event.ingame=game.hasPlayer(function(current){ - return current.name=='xin_xushu'||current.name2=='xin_xushu'||current.name=='re_xushu'||current.name2=='re_xushu'; + return ['re_xushu','xin_xushu','xushu'].contains(current.name)||['re_xushu','xin_xushu','xushu'].contains(current.name2); })?true:false; var prompt='请选择一名角色,令其回复一点体力并摸一张牌'; prompt+=event.ingame?',然后你摸一张牌。':'。'; @@ -4888,7 +4888,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, filter:function (event,player){ if(!player.storage.xinfu_zhaoxin.length) return false; - return get.distance(player,event.player,'attack')<=1 + return player.inRange(event.player); }, direct:true, content:function (){ @@ -5216,25 +5216,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "xinfu_tunan":"图南", "xinfu_tunan_info":"出牌阶段限一次,你可以展示牌堆顶的一张牌并选择一名其他角色,然后该角色选择一项:使用此牌(无距离限制);或将此牌当普通【杀】使用。", "xinfu_bijing":"闭境", - "xinfu_bijing_info":"结束阶段,你可以展示一张手牌并标记为“闭境”。若你于回合外失去“闭境”牌,则当前回合角色的弃牌阶段开始时其需弃置两张牌。你的准备阶段,弃置手牌中的“闭境”牌。", + "xinfu_bijing_info":"结束阶段,你可以展示一张手牌并标记为“闭境”。若你于回合外失去“闭境”牌,则当前回合角色的弃牌阶段开始时,其需弃置两张牌。你的准备阶段,弃置手牌中的“闭境”牌。", "xinfu_zhenxing":"镇行", "xinfu_zhenxing_info":"结束阶段开始时或当你受到伤害后,你可以观看牌堆顶的至多三张牌,然后你获得其中与其余牌花色均不相同的一张牌。", "xinfu_qianxin":"遣信", - "xinfu_qianxin_info":"出牌阶段限一次,若牌堆中没有“信”,你可以选择一名角色并将任意张手牌放置于牌堆中X倍数的位置(X为存活人数),称为“信”。该角色的弃牌阶段开始时,若其本回合内获得过“信”,其选择一项:令你将手牌摸至四张;本回合手牌上限-2。", + "xinfu_qianxin_info":"出牌阶段限一次,若牌堆中没有“信”,你可以选择一名角色并将任意张手牌放置于牌堆中X倍数的位置(X为存活人数),称为“信”。该角色的弃牌阶段开始时,若其手牌区内有于本回合内获得过的“信”,其选择一项:令你将手牌摸至四张;本回合手牌上限-2。", "qianxin_effect":"遣信", "qianxin_effect_info":"", "xinfu_qianxin2":"遣信", "xinfu_qianxin2_info":"", "xinfu_fuhai":"浮海", - "xinfu_fuhai_info":"出牌阶段对每名角色限一次,你可以展示一张手牌并选择上家或下家。该角色展示一张手牌,若你的牌点数大于等于他的牌点数,你弃置你展示的牌,然后继续对其上家或下家重复此流程;你的牌点数小于该角色牌的点数,则该角色弃置其展示的牌,然后你与其各摸X张牌(X为你此回合内发动此技能选择的角色数),且你此阶段内不能再发动“浮海”。", + "xinfu_fuhai_info":"出牌阶段每个方向限一次,你可以展示一张手牌并选择上家或下家。该角色展示一张手牌,若你展示的牌点数大于等于其展示的牌点数,你弃置你展示的牌,然后继续对其上家或下家重复此流程;若你展示的牌点数小于该展示角色牌的点数,则该角色弃置其展示的牌,然后你与其各摸X张牌(X为你此回合内发动此技能选择的角色数),且你此阶段内不能再发动〖浮海〗。", "fuhai_clear":"浮海", "fuhai_clear_info":"", "xz_xunxun":"恂恂", "xz_xunxun_info":"摸牌阶段,你可以观看牌堆顶的四张牌,然后将其中的两张牌置于牌堆顶,并将其余的牌以任意顺序置于牌堆底。", "xinfu_xingzhao":"兴棹", - "xinfu_xingzhao_info":"锁定技,若场上的已受伤角色合计为:1个以上,你视为拥有技能〖恂恂〗;2个以上,当你使用装备牌时,摸一张牌;3个以上,你跳过弃牌阶段。", + "xinfu_xingzhao_info":"锁定技,若场上的已受伤角色合计为:1个以上,你视为拥有技能〖恂恂〗;2个以上,当你使用装备牌时,摸一张牌;3个以上,弃牌阶段开始时,你跳过此阶段。", "xinfu_xingzhao2":"兴棹", "xinfu_xingzhao2_info":"", "xinfu_dianhu":"点虎", @@ -5242,12 +5242,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "xinfu_dianhu2":"点虎", "xinfu_dianhu2_info":"", "xinfu_jianji":"谏计", - "xinfu_jianji_info":"出牌阶段限一次,你可以令一名其他角色摸一张牌。然后,该角色可以使用此牌。", + "xinfu_jianji_info":"出牌阶段限一次,你可以令一名其他角色摸一张牌。然后该角色可以使用此牌。", "xinfu_lianpian":"联翩", "xinfu_lianpian_info":"出牌阶段限三次。当你对一名角色连续使用牌时,你可以摸一张牌,然后可以将一张牌交给该角色。", "xinfu_lingren":"凌人", - "xinfu_lingren_info":"每回合限一次。当你于出牌阶段使用带有“伤害”这一标签的基本牌或普通锦囊牌指定目标后,你可以猜测其中的一个目标的手牌中是否有基本牌,锦囊牌或装备牌。若你猜中的项目数:≥1,此牌对该角色的伤害+1;≥2,你摸两张牌;≥3,你获得技能〖奸雄〗和〖行殇〗直到下回合开始。", + "xinfu_lingren_info":"每回合限一次。当你于出牌阶段使用带有「伤害」这一标签的基本牌或普通锦囊牌指定目标后,你可以猜测其中的一个目标的手牌中是否有基本牌,锦囊牌或装备牌。若你猜中的项目数:≥1,此牌对该角色的伤害+1;≥2,你摸两张牌;≥3,你获得技能〖奸雄〗和〖行殇〗直到下回合开始。", "lingren_adddamage":"凌人", "lingren_adddamage_info":"", "lingren_jianxiong":"奸雄", @@ -5255,9 +5255,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "lingren_xingshang":"行殇", "lingren_xingshang_info":"当有角色死亡后,你可以选择一项:1.回复一点体力。2.获得该角色的所有牌。", "xinfu_fujian":"伏间", - "xinfu_fujian_info":"锁定技,结束阶段,你观看一名随机的其他角色的随机X张手牌。(X为场上手牌最少的角色的手牌数)", + "xinfu_fujian_info":"锁定技,结束阶段开始时,你观看一名随机的其他角色的随机X张手牌。(X为场上手牌最少的角色的手牌数)", "xinfu_xionghuo":"凶镬", - "xinfu_xionghuo_info":"游戏开始时,你获得3个“暴戾”标记。出牌阶段,你可以交给一名其他角色一个“暴戾”标记,你对有此标记的角色造成的伤害+1,且其出牌阶段开始时,移去“暴戾”并随机执行一项:1.受到1点火焰伤害且本回合不能对你使用【杀】;2.流失1点体力且本回合手牌上限-1;3.你随机获得其一张手牌和一张装备区里的牌。", + "xinfu_xionghuo_info":"游戏开始时,你获得3个“暴戾”标记。出牌阶段,你可以交给一名其他角色一个“暴戾”标记,你对有“暴戾”标记的角色造成伤害时,此伤害+1。有“暴戾”的其他角色的出牌阶段开始时,其移去所有“暴戾”标记并随机执行一项:1.受到1点火焰伤害且本回合不能对你使用【杀】;2.失去1点体力且本回合手牌上限-1;3.你随机获得其一张手牌和一张装备区的牌。", xionghuo:"凶镬", "xionghuo_info":"", "xionghuo_disable":"凶镬", @@ -5265,7 +5265,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "xionghuo_low":"凶镬", "xionghuo_low_info":"", "xinfu_shajue":"杀绝", - "xinfu_shajue_info":"锁定技,其他角色进入濒死状态时,若其需要超过一张【桃】或【酒】救回,则你获得一个“暴戾”标记,并获得使其进入濒死状态的牌。", + "xinfu_shajue_info":"锁定技,其他角色进入濒死状态时,若其体力值小于0,则你获得一个“暴戾”标记,并获得使其进入濒死状态的牌。", "xinfu_jianjie":"荐杰", "xinfu_jianjie_info":"你的第一个准备阶段,你令两名其他角色分别获得龙印与凤印;出牌阶段限一次(你的第一个回合除外),或当拥有龙印、凤印的角色死亡时,你可以转移龙印、凤印。", "xinfu_jianjie1":"荐杰", @@ -5281,23 +5281,23 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "smh_yeyan":"业炎", "smh_yeyan_info":"", "xinfu_yinshi":"隐士", - "xinfu_yinshi_info":"锁定技,若你没有龙印、凤印且没装备防具,防止你受到的属性伤害和锦囊牌造成的伤害。", + "xinfu_yinshi_info":"锁定技,若你没有龙印、凤印且装备区的防具栏为空,则当你受到的属性伤害火锦囊牌造成的伤害时,防止此伤害。", "xinfu_chenghao":"称好", - "xinfu_chenghao_info":"当一名角色受到属性伤害后,若其存活且处于“连环状态”且是伤害传导的起点,你可以观看牌堆顶的X张牌并分配给任意角色(X为横置的角色数量且包含该角色)。", + "xinfu_chenghao_info":"当一名角色受到属性伤害后,若其存活且其武将牌横置且是伤害传导的起点,则你可以观看牌堆顶的X张牌并分配给任意角色。(X为横置的角色数量且包含该角色)", "jianjie_faq":"关于龙凤印", - "jianjie_faq_info":"龙印效果:获得“火计”。凤印效果:获得“连环”。(均一回合限使用三次) 龙凤印齐全:获得“业炎”,“业炎”发动后移除龙凤印。", + "jianjie_faq_info":"龙印效果:视为拥有〖火计〗。凤印效果:视为拥有〖连环〗。(均一回合限使用三次) 龙凤印齐全:视为拥有〖业炎〗,〖业炎〗发动后移除龙凤印。", "xinfu_wuniang":"武娘", - "xinfu_wuniang_info":"当你使用或打出〖杀〗时,你可以获得一名其他角色的一张牌。若如此做,该角色和场上所有的“关索”各摸一张牌。", + "xinfu_wuniang_info":"当你使用或打出【杀】时,你可以获得一名其他角色的一张牌。若如此做,该角色和场上所有的“关索”各摸一张牌。", "xinfu_xushen":"许身", "xinfu_xushen_info":"限定技,当一名男性角色使用【桃】令你脱离濒死状态时,若场上没有“关索”,则其可以将自己的一张武将牌变更为“关索”。然后你回复一点体力,并获得技能〖镇南〗。", "xinfu_zhennan":"镇南", "xinfu_zhennan_info":"当你成为【南蛮入侵】的目标时,你可以对一名其他角色造成1-3点随机伤害。", "xinfu_falu":"法箓", - "xinfu_falu_info":"锁定技,游戏开始时,你获得“紫薇”,“后土”,“玉清”,“勾陈”标记各一个。当你的牌因弃置而进入弃牌堆后,根据这些牌的花色,你获得对应的标记:黑桃,你获得1枚“紫薇”;梅花,你获得1枚“后土”;红桃,你获得1枚“玉清”;方块,你获得1枚“勾陈”。(每种标记限拥有1个)", + "xinfu_falu_info":"锁定技,游戏开始时,你获得「紫薇」「后土」「玉清」「勾陈」标记各一个。当你的牌因弃置而进入弃牌堆后,根据这些牌的花色,你获得对应的标记:黑桃,你获得1枚「紫薇」;梅花,你获得1枚「后土」;红桃,你获得1枚「玉清」;方块,你获得1枚「勾陈」。(每种标记限拥有1个)", "xinfu_dianhua":"点化", - "xinfu_dianhua_info":"准备阶段或结束阶段,你可以观看牌堆顶的X张牌(X为你的标记数)。若如此做,你将这些牌以任意顺序放回牌堆顶。", + "xinfu_dianhua_info":"准备阶段或结束阶段,你可以观看牌堆顶的X张牌(X为你的「紫薇」「后土」「玉清」「勾陈」标记数的总和)。若如此做,你将这些牌以任意顺序放回牌堆顶。", "xinfu_zhenyi":"真仪", - "xinfu_zhenyi_info":"你可以在以下时机弃置相应的标记来发动以下效果:当一张判定牌生效前,你可以弃置“紫微”,然后将判定结果改为黑桃5或红桃5;当你处于濒死状态时,你可以弃置“后土”,然后将你的一张手牌当【桃】使用;当你造成伤害时,你可以弃置“玉清”,然后你进行一次判定。若结果为黑色,此伤害+1;当你受到属性伤害后,你可以弃置“勾陈”,然后你从牌堆中随机获得三种类型的牌各一张。", + "xinfu_zhenyi_info":"你可以在以下时机弃置相应的标记来发动以下效果:一名角色的判定牌生效前,你可以弃置一枚「紫薇」,然后将判定结果改为黑桃5或红桃5;当你处于濒死状态时,你可以弃置一枚「后土」,然后将你的一张手牌当【桃】使用;当你造成伤害时,你可以弃置一枚「玉清」,然后你进行一次判定。若结果为黑色,此伤害+1;当你受到属性伤害后,你可以弃置一张「勾陈」,然后你从牌堆中随机获得三种类型的牌各一张。", "zhenyi_spade":"真仪", "zhenyi_spade_info":"", "zhenyi_club":"真仪", @@ -5305,11 +5305,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "zhenyi_heart":"真仪", "zhenyi_heart_info":"", "xinfu_yanyu":"燕语", - "xinfu_yanyu_info":"任意一名角色的出牌阶段开始时,你可以弃置一张牌。若如此做,则该出牌阶段内,每当与你弃置的牌类别相同的其他牌进入弃牌堆时,你可令任意一名角色获得此牌。每阶段以此法获得的牌不能超过三张。", + "xinfu_yanyu_info":"一名角色的出牌阶段开始时,你可以弃置一张牌。若如此做,则该出牌阶段内,当有与你弃置的牌类别相同的其他牌进入弃牌堆时,你可令任意一名角色获得此牌。每阶段以此法获得的牌不能超过三张。", "xinfu_yanyu2":"燕语", "xinfu_yanyu2_info":"", "xinfu_xiaode":"孝德", - "xinfu_xiaode_info":"每当有其他角色阵亡后,你可以声明该武将牌的一项技能。若如此做,你获得此技能且不能再发动〖孝德〗直到你的回合结束。(你不能声明觉醒技或主公技)", + "xinfu_xiaode_info":"其他角色死亡后,你可以声明该角色武将牌上的一个不为主公技或觉醒技的技能。若如此做,你获得此技能且不能再发动〖孝德〗直到你的回合结束。", "sp_taishici":"SP太史慈", wangcan:"王粲", @@ -5324,13 +5324,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ liuyao:"刘繇", liuyan:"刘焉", "xinfu_guolun":"过论", - "xinfu_guolun_info":"出牌阶段限一次,你可以展示一名其他角色的手牌,然后展示你的一张牌。你与其交换这两张牌,然后展示的牌点数更小的角色摸一张牌。", + "xinfu_guolun_info":"出牌阶段限一次,你可以展示一名其他角色的手牌,然后展示你的一张牌。你与其交换这两张牌,然后展示的牌点数较小的角色摸一张牌。", "xinfu_zhanji":"展骥", - "xinfu_zhanji_info":"锁定技,你的出牌阶段内,当你因摸牌且不是因为此技能效果获得牌时,你额外摸一张牌。", + "xinfu_zhanji_info":"锁定技,你的出牌阶段内,当你因摸牌且不是因为此技能效果而获得牌时,你额外摸一张牌。", "xinfu_songsang":"送丧", - "xinfu_songsang_info":"限定技,当场上有角色死亡时,你可以回复一点体力(若你未受伤,则改为加一点体力上限);然后获得技能〖展骥〗。", + "xinfu_songsang_info":"限定技,其他角色死亡时,你可以回复一点体力(若你未受伤,则改为加一点体力上限);然后获得技能〖展骥〗。", "xinfu_jixu":"击虚", - "xinfu_jixu_info":"出牌阶段限一次,若你有手牌,你可以令任意数量的体力值相等的其他角色猜测你的手牌中是否有【杀】。然后,你摸X张牌(X为猜错的角色数)。若你有【杀】,则你本回合内使用【杀】时,所有这些角色均成为【杀】的目标;若你没有【杀】,则你弃置所有这些角色的各一张牌。若X为零,你结束出牌阶段。", + "xinfu_jixu_info":"出牌阶段限一次,若你有手牌,你可以令任意名体力值相等的其他角色猜测你的手牌中是否有【杀】。然后,你摸X张牌(X为猜错的角色数)。若你有【杀】,则你本回合内使用【杀】时,所有这些角色均成为【杀】的目标;若你没有【杀】,则你弃置所有这些角色的各一张牌。若X为零,你结束出牌阶段。", "jixu_sha":"击虚", "jixu_sha_info":"", "xinfu_sanwen":"散文", @@ -5342,11 +5342,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "qinguo_use":"勤国", "qinguo_use_info":"", "xinfu_qinguo":"勤国", - "xinfu_qinguo_info":"当你使用的装备牌结算完成后,你可以视为使用了一张【杀】;当你因使用或失去装备牌导致装备区内牌的数量发生变化后,若你装备区内牌的数量等于你的体力值,则你回复1点体力。", + "xinfu_qinguo_info":"当你使用的装备牌结算完成时,你可以视为使用一张【杀】;当你因使用或失去装备牌导致装备区内牌的数量发生变化后,若你装备区内牌的数量等于你的体力值,则你回复1点体力。", "qinguo_lose":"勤国", "qinguo_lose_info":"", "xinfu_jijun":"集军", - "xinfu_jijun_info":"当你于回合内使用非装备牌或武器牌指定了自己为目标时,你可以进行一次判定。然后,你将判定牌置于自己的武将牌上,称之为「方」。", + "xinfu_jijun_info":"当你于回合内使用非装备牌或武器牌指定目标后,若你是此牌的目标,你可以进行一次判定。然后,你将判定牌置于自己的武将牌上,称之为「方」。", "xinfu_fangtong":"方统", "xinfu_fangtong_info":"结束阶段,你可以弃置总点数之和为36的一张牌与任意张「方」,并对一名其他角色造成3点雷电伤害。", "xinfu_weilu":"威虏", @@ -5356,15 +5356,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "weilu_effect2":"威虏", "weilu_effect2_info":"", "xinfu_zengdao":"赠刀", - "xinfu_zengdao_info":"限定技,出牌阶段,你可以将装备牌内的任意张牌置于一名其他角色的武将牌旁,称之为「刀」。该角色造成伤害时,其须移去一张「刀」,使此伤害+1。", + "xinfu_zengdao_info":"限定技,出牌阶段,你可以将装备牌内的任意张牌置于一名其他角色的武将牌旁,称之为「刀」。该角色造成伤害时,其须移去一张「刀」,然后此伤害+1。", "xinfu_zengdao2":"赠刀", "xinfu_zengdao2_info":"", "xinfu_guanwei":"观微", - "xinfu_guanwei_info":"每回合限一次。一名角色的出牌阶段结束时,若其于出牌阶段内使用过的牌的数目>1且花色皆相同,则你可以弃置一张牌,令其摸两张牌并进行一个额外的出牌阶段。", + "xinfu_guanwei_info":"每回合限一次。一名角色的出牌阶段结束时,若其于出牌阶段内使用过两张以上的牌且花色均相同,则你可以弃置一张牌,令其摸两张牌并进行一个额外的出牌阶段。", "xinfu_gongqing":"公清", "xinfu_gongqing_info":"锁定技。当你受到伤害时,若伤害来源的攻击范围:<3,则你令此伤害的数值减为1。>3,你令此伤害+1。", "xinfu_andong":"安东", - "xinfu_andong_info":"当你受到伤害时,若伤害来源有手牌,则你可以令伤害来源选择一项:1.令你观看其的手牌并获得其中的所有红桃牌;2.防止此伤害,然后其本回合内的红桃手牌不计入手牌上限。", + "xinfu_andong_info":"当你受到伤害时,你可以令伤害来源选择一项:1.令你观看其的手牌并获得其中的所有红桃牌;2.防止此伤害,然后其本回合内的红桃手牌不计入手牌上限。", "xinfu_yingshi":"应势", "xinfu_yingshi_info":"出牌阶段开始时,若场上的所有角色均没有「酬」,则你可以将所有的红桃牌置于一名其他角色的武将牌旁,称之为「酬」。有「酬」的角色受到「杀」的伤害/死亡时,伤害来源/你获得其中的一张/所有的「酬」。", "yingshi_heart":"应势", @@ -5372,28 +5372,28 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "yingshi_die":"应势", "yingshi_die_info":"", "xinfu_duanfa":"断发", - "xinfu_duanfa_info":"出牌阶段,你可以弃置任意张黑色牌,然后摸等量的牌。(每回合内限X张,X为你的体力上限。)", + "xinfu_duanfa_info":"出牌阶段,你可以弃置任意张黑色牌,然后摸等量的牌。(每回合内限X张,X为你的体力上限)", "xinfu_youdi":"诱敌", "xinfu_youdi_info":"结束阶段开始时,你可以令一名其他角色弃置你的一张手牌,若此牌:不为黑色,你摸一张牌。不为【杀】,你获得该角色的一张牌。", "xinfu_guanchao":"观潮", - "xinfu_guanchao_info":"出牌阶段开始时,你可以选择一项直到回合结束:1.当你使用牌时,若你此阶段使用过的所有牌的点数为递增,你摸一张牌;2.当你使用牌时,若你此阶段使用过的所有牌的点数为递减,你摸一张牌。", + "xinfu_guanchao_info":"出牌阶段开始时,你可以选择获得一项效果直到回合结束:1.当你使用牌时,若你此阶段使用过的所有牌的点数为递增,你摸一张牌;2.当你使用牌时,若你此阶段使用过的所有牌的点数为递减,你摸一张牌。", "xinfu_xunxian":"逊贤", - "xinfu_xunxian_info":"每名其他角色的回合限一次,当你使用或打出的牌结算完成,即将置入弃牌堆时,你可以将之交给一名手牌比你多的角色。", + "xinfu_xunxian_info":"每名其他角色的回合限一次,当你使用或打出的牌结算完成后,你可以将其对应的所有实体牌交给一名手牌数大于你的角色。", "xinfu_kannan":"戡难", "xinfu_kannan_info":"出牌阶段限X次,你可以与一名本回合内未成为过〖戡难〗目标的角色拼点。若你赢,你使用的下一张【杀】的伤害值基数+1,且你本回合内不能再发动〖戡难〗。若你没赢,其使用的下一张【杀】的伤害值基数+1。(X为你的体力值)。", "kannan_eff":"戡难", "kannan_eff_info":"", "xinfu_tushe":"图射", - "xinfu_tushe_info":"当你使用非装备牌指定目标时,若你没有基本牌,则你可以摸X张牌。(X为此牌指定的目标数)", + "xinfu_tushe_info":"当你使用非装备牌指定目标后,若你没有基本牌,则你可以摸X张牌。(X为此牌指定的目标数)", "xinfu_limu":"立牧", - "xinfu_limu_info":"出牌阶段限一次,将一张方片花色牌当做【乐不思蜀】对自己使用,然后回复1点体力。只要你的判定区内有牌,你对攻击范围内的其他角色使用牌便没有次数和距离限制。", + "xinfu_limu_info":"出牌阶段限一次,你可以将一张♦牌当做【乐不思蜀】对自己使用,然后回复1点体力。只要你的判定区内有牌,你对攻击范围内的其他角色使用牌便没有次数和距离限制。", "xinfu_guhuo":"蛊惑", - "xinfu_guhuo_info":"每名角色的回合限一次,你可以扣置一张手牌当一张基本牌或普通锦囊牌使用或打出。其他角色依次选择是否质疑。一旦有其他角色质疑则翻开此牌:若为假则此牌作废,若为真,则质疑角色获得技能〖缠怨〗。", + "xinfu_guhuo_info":"每名角色的回合限一次,你可以扣置一张手牌当做一张基本牌或普通锦囊牌使用或打出。其他角色依次选择是否质疑。一旦有其他角色质疑则翻开此牌:若为假则此牌作废,若为真,则质疑角色获得技能〖缠怨〗。", "guhuo_guess":"蛊惑", "guhuo_guess_info":"", chanyuan:"缠怨", - "chanyuan_info":"锁定技,你不能质疑于吉,只要你的体力值为1,你失去你的武将技能。", + "chanyuan_info":"锁定技,你不能质疑于吉,当你的体力值为1时,你的其他技能失效。", "guhuo_respond":"蛊惑", "guhuo_respond_info":"", "guhuo_wuxie":"蛊惑", @@ -5402,7 +5402,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "guhuo_phase_info":"", "xinfu_pingcai":"评才", - "xinfu_pingcai_info":"出牌阶段限一次,你可以挑选一个宝物并擦拭掉其上面的灰尘。然后,你可以根据宝物类型执行对应的效果。
【卧龙】:对1名角色造成1点火焰伤害。若场上有存活的诸葛亮(火),则改为对至多2名角色各造成1点火焰伤害。
【凤雏】:横置至多3名角色。若场上有存活的庞统(火),则改为横置至多4名角色。
【水镜】:将1名角色装备区内的防具移动到另1角色对应区域。若场上有存活的司马徽,则改为将1名角色装备区内的1件装备移动到另1角色对应区域。
【玄剑】:令1名角色摸一张牌并回复1点体力。若场上有存活的徐庶(将/界),则改为令1名角色摸一张牌并回复1点体力,然后你摸一张牌。", + "xinfu_pingcai_info":"出牌阶段限一次,你可以挑选一个宝物并擦拭掉其上面的灰尘。然后,你可以根据宝物类型执行对应的效果。", "xinfu_pdgyingshi":"隐世", "xinfu_pdgyingshi_info":"锁定技,你始终跳过准备阶段,判定阶段,结束阶段。你不能被选择为延时锦囊牌的目标。", "pcaudio_wolong_card":"卧龙", @@ -5416,7 +5416,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "yizan_respond_sha":"翊赞", "yizan_respond_sha_info":"", "yizan_use":"翊赞", - "yizan_use_info":"你可以将两张牌(其中至少应有一张基本牌)当做任意基本牌使用或打出。", + "yizan_use_info":"你可以将两张牌(其中至少一张为基本牌)当做任意基本牌使用或打出。", "yizan_respond_shan":"翊赞", "yizan_respond_shan_info":"", "xinfu_longyuan":"龙渊", @@ -5424,15 +5424,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "yizan_count":"翊赞", "yizan_count_info":"", "xinfu_jingxie1":"精械", - "xinfu_jingxie1_info":"出牌阶段,你可以展示一张未强化过的【诸葛连弩】或标准包/军争包/SP包中的防具牌,然后对其进行强化。当你处于濒死状态时,你可以重铸一张防具牌,将体力回复至1点。", + "xinfu_jingxie1_info":"出牌阶段,你可以展示一张未强化过的【诸葛连弩】或标准包/军争包/SP包中的防具牌,然后对其进行强化。当你处于濒死状态时,你可以重铸一张防具牌,然后将体力回复至1点。", "xinfu_jingxie2":"精械", "xinfu_jingxie2_info":"", "xinfu_qiaosi":"巧思", - "xinfu_qiaosi_info":"出牌阶段限一次,你可以投掷一枚六面骰子,展示牌堆顶的X张牌并获得之。然后,你选择一项:1.交给一名其他角色X张牌。2.弃置X张牌。(X为骰子的点数)", + "xinfu_qiaosi_info":"出牌阶段限一次,你可以投掷一枚六面骰子,展示牌堆顶的X张牌并获得之。然后,你选择一项:1.交给一名其他角色X张牌。2.弃置X张牌。(X为骰子的点数)", "xinfu_jijie":"机捷", "xinfu_jijie_info":"出牌阶段限一次。你可以观看牌堆底的一张牌,然后将其交给一名角色。", "xinfu_jiyuan":"急援", - "xinfu_jiyuan_info":"当一名角色进入濒死状态时,或者你交给一名其他角色牌时,你可以令其摸一张牌。", + "xinfu_jiyuan_info":"当一名角色进入濒死状态时,或你交给一名其他角色牌时,你可以令其摸一张牌。", "xinfu_daigong":"怠攻", "xinfu_daigong_info":"每回合限一次。当你受到伤害时,你可以展示所有手牌,然后令伤害来源选择一项:交给你一张与你所有手牌花色均不相同的一张牌,或防止此伤害。", "xinfu_zhaoxin":"昭心", @@ -5446,11 +5446,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "qc_mingzhe":"明哲", "qc_mingzhe_info":"", "xinfu_shangjian":"尚俭", - "xinfu_shangjian_info":"一名角色的结束阶段开始时,若你于此回合内失去了x张或更少的牌,则你可以摸等量的牌。(x为你的体力值)。", + "xinfu_shangjian_info":"一名角色的结束阶段开始时,若你于此回合内失去了X张或更少的牌,则你可以摸等量的牌。(X为你的体力值)", "rw_bagua_skill":"先天八卦阵", - "rw_bagua_skill_info":"每当你需要使用或打出一张【闪】时,你可以进行一次判定,若判定结果不为黑桃,视为你使用或打出了一张【闪】。", + "rw_bagua_skill_info":"当你需要使用或打出一张【闪】时,你可以进行判定,若判定结果不为黑桃,视为你使用或打出了一张【闪】。", "rw_baiyin_skill":"玉照狮子盔", - "rw_baiyin_skill_info":"锁定技,你每次受到伤害时,最多承受1点伤害(防止多余的伤害);当你失去装备区里的【玉照狮子盔】时,你回复1点体力并摸两张牌。", + "rw_baiyin_skill_info":"锁定技,当你受到大于1的伤害时,你将伤害值改为1;当你失去装备区里的【玉照狮子盔】时,你回复1点体力并摸两张牌。", "rw_lanyinjia":"精银甲", "rw_lanyinjia_info":"你可以将一张手牌当做【闪】使用或打出。锁定技,【精银甲】不会无效。", "rw_minguangkai_cancel":"耀光铠", @@ -5458,37 +5458,37 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "rw_minguangkai_link":"耀光铠", "rw_minguangkai_link_info":"锁定技,当你成为【火烧连营】、【火攻】或火【杀】的目标时,或即将被横置时,取消之。", "rw_renwang_skill":"仁王金刚盾", - "rw_renwang_skill_info":"有花色且不为方片的杀对你无效。", + "rw_renwang_skill_info":"黑色【杀】和红桃【杀】对你无效。", "rw_tengjia1":"桐油百炼甲", - "rw_tengjia1_info":"锁定技,【南蛮入侵】、【万箭齐发】和普通【杀】对你无效。你每次受到火焰伤害时,该伤害+1。你不会被横置。", + "rw_tengjia1_info":"锁定技,【南蛮入侵】、【万箭齐发】和普【杀】对你无效。当你受到火焰伤害时,此伤害+1。当你即将被横置时,取消之。", "rw_tengjia2":"桐油百炼甲", - "rw_tengjia2_info":"锁定技,【南蛮入侵】、【万箭齐发】和普通【杀】对你无效。你每次受到火焰伤害时,该伤害+1。你不会被横置。", + "rw_tengjia2_info":"锁定技,【南蛮入侵】、【万箭齐发】和普【杀】对你无效。当你受到火焰伤害时,此伤害+1。当你即将被横置时,取消之。", "rw_tengjia3":"桐油百炼甲", - "rw_tengjia3_info":"锁定技,【南蛮入侵】、【万箭齐发】和普通【杀】对你无效。你每次受到火焰伤害时,该伤害+1。你不会被横置。", + "rw_tengjia3_info":"锁定技,【南蛮入侵】、【万箭齐发】和普【杀】对你无效。当你受到火焰伤害时,此伤害+1。当你即将被横置时,取消之。", "rw_tengjia4":"桐油百炼甲", "rewrite_bagua":"先天八卦阵", - "rewrite_bagua_info":"每当你需要使用或打出一张【闪】时,你可以进行一次判定,若判定结果不为黑桃,视为你使用或打出了一张【闪】。", + "rewrite_bagua_info":"当你需要使用或打出一张【闪】时,你可以进行判定,若判定结果不为黑桃,视为你使用或打出了一张【闪】。", "rewrite_baiyin":"玉照狮子盔", - "rewrite_baiyin_info":"锁定技,你每次受到伤害时,最多承受1点伤害(防止多余的伤害);当你失去装备区里的【玉照狮子盔】时,你回复1点体力并摸两张牌。", + "rewrite_baiyin_info":"锁定技,当你受到大于1的伤害时,你将伤害值改为1;当你失去装备区里的【玉照狮子盔】时,你回复1点体力并摸两张牌。", "rewrite_lanyinjia":"精银甲", "rewrite_lanyinjia_info":"你可以将一张手牌当做【闪】使用或打出。锁定技,【精银甲】不会无效。", "rewrite_minguangkai":"耀光铠", "rewrite_minguangkai_info":"锁定技,当你成为【火烧连营】、【火攻】或火【杀】的目标时,或即将被横置时,取消之。", "rewrite_renwang":"仁王金刚盾", - "rewrite_renwang_info":"有花色且不为方片的杀对你无效。", + "rewrite_renwang_info":"黑色【杀】和红桃【杀】对你无效。", "rewrite_tengjia":"桐油百炼甲", - "rewrite_tengjia_info":"锁定技,【南蛮入侵】、【万箭齐发】和普通【杀】对你无效。你每次受到火焰伤害时,该伤害+1。你不会被横置。", + "rewrite_tengjia_info":"锁定技,【南蛮入侵】、【万箭齐发】和普【杀】对你无效。当你受到火焰伤害时,此伤害+1。当你即将被横置时,取消之。", "rewrite_zhuge":"元戎精械弩", "rewrite_zhuge_info":"你于出牌阶段内使用【杀】无次数限制。", takaramono:"宝物", "wolong_card":"卧龙", - "wolong_card_info":"对1名角色造成1点火焰伤害。若场上有存活的诸葛亮(火),则改为对至多2名角色各造成1点火焰伤害。", + "wolong_card_info":"对一名角色造成1点火焰伤害。若场上有存活的诸葛亮(火),则改为对至多两名角色各造成两点火焰伤害。", "fengchu_card":"凤雏", - "fengchu_card_info":"横置至多3名角色。若场上有存活的庞统(火),则改为横置至多4名角色。", + "fengchu_card_info":"横置至多三名角色。若场上有存活的庞统(火),则改为横置至多四名角色。", "xuanjian_card":"玄剑", - "xuanjian_card_info":"令1名角色摸一张牌并回复1点体力。若场上有存活的徐庶(将/界),则改为令1名角色摸一张牌并回复1点体力,然后你摸一张牌。", + "xuanjian_card_info":"令一名角色摸一张牌并回复1点体力。若场上有存活的徐庶(将/界),则改为令一名角色摸一张牌并回复1点体力,然后你摸一张牌。", "shuijing_card":"水镜", - "shuijing_card_info":"将1名角色装备区内的防具移动到另1角色对应区域。若场上有存活的司马徽,则改为将1名角色装备区内的1件装备移动到另1角色对应区域。", + "shuijing_card_info":"将一名角色装备区内的防具牌移动到另一名角色对应区域。若场上有存活的司马徽,则改为将1名角色装备区内的1件装备移动到另1角色对应区域。", }, }; }); diff --git a/character/yijiang.js b/character/yijiang.js index 2e507b4b4..8c3c5d77b 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -413,7 +413,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ subSkill:{ damage:{ sub:true, - trigger:{source:'damage'}, + trigger:{global:'damage'}, audio:'benxi', forced:true, filter:function(event,player){ @@ -582,7 +582,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } else{ player.chooseTarget('是否对'+get.translation(target)+'或其攻击范围内的一名角色造成1点伤害?',function(card,player,target){ - return target==_status.event.targetx||get.distance(_status.event.targetx,target,'attack')<=1; + return target==_status.event.targetx||_status.event.targetx.inRange(target); }).set('targetx',event.target).ai=function(target){ var player=_status.event.player; return get.damageEffect(target,player,player) @@ -744,10 +744,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ targetprompt:['出杀人','出杀目标'], filterTarget:function(card,player,target){ if(ui.selected.targets.length==0){ - return target!=player&&lib.filter.targetInRange({name:'sha'},target,player); + return target!=player&&target.inRange(player); } else{ - return lib.filter.targetInRange({name:'sha'},ui.selected.targets[0],target); + return ui.selected.targets[0].inRange(target); } }, content:function(){ @@ -764,7 +764,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.gain(result.cards,targets[0],'give'); } else{ - if(targets[0].canUse('sha',targets[1])) targets[0].useCard({name:'sha'},targets[1]); + if(targets[0].canUse('sha',targets[1])) targets[0].useCard({name:'sha',isCard:true},targets[1]); } }, ai:{ @@ -882,6 +882,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){ position:'he', viewAs:{name:links[0][2],nature:links[0][3]}, onuse:function(result,player){ + var evt=_status.event.getParent('phase'); + if(evt&&evt.name=='phase'&&!evt.xintaoluan){ + evt.xintaoluan=true; + var next=game.createEvent('taoluan_clear'); + _status.event.next.remove(next); + evt.after.push(next); + next.player=player; + next.setContent(function(){ + game.broadcastAll(function(player){ + player.storage.xintaoluan=[]; + delete player.storage.xintaoluan2; + },player); + }); + } player.storage.xintaoluan.add(result.card.name); }, } @@ -906,7 +920,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, threaten:1.9, }, - group:['xintaoluan2','xintaoluan4','xintaoluan5','xintaoluan6'] + group:['xintaoluan2','xintaoluan4','xintaoluan5'] }, xintaoluan2:{ trigger:{player:['useCardAfter','respondAfter']}, @@ -965,6 +979,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return !player.storage.xintaoluan.contains('shan')&&!player.hasSkill('xintaoluan3')&&!_status.dying.length; }, onuse:function(result,player){ + var evt=_status.event.getParent('phase'); + if(evt&&evt.name=='phase'&&!evt.xintaoluan){ + var next=game.createEvent('taoluan_clear'); + _status.event.next.remove(next); + evt.after.push(next); + evt.xintaoluan=true; + next.player=player; + next.setContent(function(){ + game.broadcastAll(function(player){ + player.storage.xintaoluan=[]; + delete player.storage.xintaoluan2; + },player); + }); + } player.storage.xintaoluan.add('shan'); }, filterCard:true, @@ -997,10 +1025,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:'taoluan', enable:'chooseToUse', prompt:'将一张牌当做无懈可击使用', + filter:function(event,player){ + return (!player.storage.xintaoluan.contains('wuxie'))&&!player.hasSkill('xintaoluan3')&&!_status.dying.length; + }, viewAsFilter:function(player){ - return !player.storage.xintaoluan.contains('wuxie'); + return (!player.storage.xintaoluan.contains('wuxie'))&&!player.hasSkill('xintaoluan3')&&!_status.dying.length; }, onuse:function(result,player){ + var evt=_status.event.getParent('phase'); + if(evt&&evt.name=='phase'&&!evt.xintaoluan){ + evt.xintaoluan=true; + var next=game.createEvent('taoluan_clear'); + _status.event.next.remove(next); + evt.after.push(next); + next.player=player; + next.setContent(function(){ + game.broadcastAll(function(player){ + player.storage.xintaoluan=[]; + delete player.storage.xintaoluan2; + },player); + }); + } player.storage.xintaoluan.add('wuxie'); }, filterCard:true, @@ -1681,16 +1726,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, funan:{ audio:2, - trigger:{global:['respondAfter','useCardAfter']}, + trigger:{global:['respond','useCard']}, 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; + if(!player.hasSkill('funan_jiexun')){ + var cards=[] + if(get.itemtype(event.respondTo[1])=='card') cards.push(event.respondTo[1]); + else if(event.respondTo[1].cards) cards.addArray(event.respondTo[1].cards); + return cards.filterInD('od').length>0; + } + else return event.cards.filterInD('od').length>0; }, logTarget:'player', check:function(event,player){ @@ -1702,18 +1749,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' if(!player.hasSkill('funan_jiexun')){ - trigger.player.gain(trigger.respondTo[1],'gain2'); + var cards=[] + if(get.itemtype(trigger.respondTo[1])=='card') cards.push(trigger.respondTo[1]); + else if(trigger.respondTo[1].cards) cards.addArray(trigger.respondTo[1].cards); + cards=cards.filterInD('od'); + trigger.player.gain(cards,'gain2','log'); 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]); + trigger.player.storage.funan_use.addArray(cards); } 'step 1' - player.gain(trigger.cards,'gain2'); + var cards=trigger.cards.filterInD('od'); + player.gain(cards,'log','gain2'); }, subSkill:{ jiexun:{ + charlotte:true, mark:true, intro:{ content:'你发动“复难”时,无须令其他角色获得你使用的牌' @@ -1722,7 +1775,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ use:{ onremove:true, mod:{ - cardEnabled:function(card,player){ + cardEnabled2:function(card,player){ if(player.storage.funan_use&&player.storage.funan_use.contains(card)){ return false; } @@ -1887,7 +1940,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 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; + event.player.inRange(player); }, direct:true, content:function(){ @@ -1936,19 +1989,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "step 3" if(event.card){ player.logSkill('jianzheng',trigger.player); - player.lose(event.card,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); + player.lose(event.card,ui.special,'visible'); + player.$throw(event.card,1000); } "step 4" if(event.card){ event.card.fix(); ui.cardPile.insertBefore(event.card,ui.cardPile.firstChild); game.updateRoundNumber(); + game.log(player,'将',card,'置于牌堆顶'); } "step 5" if(get.color(trigger.card)!='black'){ @@ -2536,7 +2585,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(!player.storage.shouxi) player.storage.shouxi=[]; }, filter:function(event,player){ - return event.card.name=='sha'; + return event.card.name=='sha'&&event.player.isAlive(); }, content:function(){ 'step 0' @@ -2698,7 +2747,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } game.log(event.current,'选择了',card); game.delay(); - event.goto(5); + if(event.togain.length) event.goto(5); } }, fuzhu:{ @@ -3097,7 +3146,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ discard:false, lose:false, filterTarget:function(card,player,target){ - return target!=player&&target.countCards('h')>target.hp; + return target!=player; }, content:function(){ 'step 0' @@ -3105,8 +3154,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 1' var num=target.countCards('h')-target.hp; if(num<=0){ - event.finish(); - return; + num=1; } var hs=target.getCards('h').randomGets(num); target.showCards(hs); @@ -3177,7 +3225,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ order:8, result:{ player:function(player,target){ - var num=target.countCards('h')-target.hp; + var num=Math.max(1,target.countCards('h')-target.hp); if(get.attitude(player,target)<0) return 1.5*num; return num; } @@ -3363,7 +3411,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{global:'phaseUseBegin'}, direct:true, filter:function(event,player){ - if(event.player==player) return false; + if(event.player==player||event.player.isDead()) return false; return player.countCards('e')>0; }, content:function(){ @@ -3401,25 +3449,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, xinsidi2:{ mark:true, - group:['xinsidi2_sha','xinsidi2_end'], + group:['xinsidi2_end'], subSkill:{ - sha:{ - trigger:{player:'shaBegin'}, - forced:true, - popup:false, - content:function(){ - player.storage.xinsidi3=true; - } - }, end:{ - trigger:{player:'phaseUseAfter'}, + trigger:{player:'phaseUseEnd'}, forced:true, popup:false, audio:false, content:function(){ - if(!player.storage.xinsidi3&&player.storage.xinsidi4.isAlive()){ + if(player.storage.xinsidi4.isAlive()&&!player.getHistory('useCard',function(evt){ + return evt.card.name=='sha'; + })){ player.storage.xinsidi4.logSkill('xinsidi',player); - player.storage.xinsidi4.useCard({name:'sha'},player); + player.storage.xinsidi4.useCard({name:'sha',isCard:true},player); } delete player.storage.xinsidi2; delete player.storage.xinsidi3; @@ -3779,6 +3821,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mode:['identity','versus'], available:function(mode){ if(mode=='versus'&&_status.mode!='four') return false; + if(mode=='identity'&&_status.mode=='purple') return false; }, trigger:{player:'phaseJieshuBegin'}, direct:true, @@ -3786,7 +3829,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var zhu=get.zhu(player); if(!zhu||!zhu.isZhu) return false; return game.hasPlayer(function(current){ - return current!=zhu&&get.distance(current,zhu,'attack')<=1; + return current!=zhu&¤t.inRange(zhu); }); }, content:function(){ @@ -3794,7 +3837,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.chooseTarget(get.prompt2('qinqing'),[1,Infinity],function(card,player,target){ var zhu=get.zhu(player); if(target==zhu) return false; - return get.distance(target,zhu,'attack')<=1; + return target.inRange(zhu); }).set('ai',function(target){ var he=target.countCards('he') if(get.attitude(_status.event.player,target)>0){ @@ -3872,7 +3915,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ enable:'phaseUse', locked:false, filter:function(event,player){ - if(!player.getStat().skill.jiyu) return true; + if(!player.getStat().skill.jiyu||!player.storage.jiyu2) return true; var hs=player.getCards('h'); for(var i=0;i0||target.hp<=2){ @@ -3900,7 +3958,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return -10-get.value(card); } } - if(_status.event.getParent().player.storage.jiyu2.contains(get.suit(card))){ + if(_status.event.getParent().player.storage.jiyu2&&_status.event.getParent().player.storage.jiyu2.contains(get.suit(card))){ return -3-get.value(card); } return -get.value(card); @@ -3912,8 +3970,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.turnOver(); target.loseHp(); } + if(!player.storage.jiyu2) player.storage.jiyu2=[]; player.storage.jiyu2.add(get.suit(card)); }, + onremove:['jiyu','jiyu2'], ai:{ order:9, result:{ @@ -3923,7 +3983,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }, - group:'jiyu2', mod:{ cardEnabled:function(card,player){ if(player.storage.jiyu2&&player.storage.jiyu2.contains(get.suit(card))) return false; @@ -5101,8 +5160,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.$throw(result.links); player.storage.chunlao.remove(result.links[0]); game.cardsDiscard(result.links[0]); - player.syncStorage('chunlao'); - target.useCard({name:'jiu'},target); + player.syncStorage('chunlao') + event.type='dying'; + target.useCard({name:'jiu',isCard:true},target); if(!player.storage.chunlao.length){ player.unmarkSkill('chunlao'); } @@ -5144,7 +5204,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.storage.chunlao.remove(result.links[0]); result.links[0].discard(); player.syncStorage('chunlao'); - trigger.player.useCard({name:'jiu'},trigger.player); + trigger.player.useCard({name:'jiu',isCard:true},trigger.player); if(!player.storage.chunlao.length){ player.unmarkSkill('chunlao'); } @@ -5238,7 +5298,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{global:'phaseJudgeBegin'}, direct:true, filter:function(event,player){ - return event.player!=player&&event.player.countCards('j')>0&&get.distance(player,event.player,'attack')<=1; + return event.player!=player&&event.player.countCards('j')>0&&player.inRange(event.player)<=1; }, content:function(){ 'step 0' @@ -5262,8 +5322,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }).set('att',att).set('nh',nh).set('eff',eff).set('logSkill',['yonglve',trigger.player]); 'step 1' if(result.bool){ - if(player.canUse({name:'sha'},trigger.player)){ - event.related=player.useCard({name:'sha'},trigger.player); + if(player.canUse({name:'sha',isCard:true},trigger.player)){ + event.related=player.useCard({name:'sha',isCard:true},trigger.player); } } else{ @@ -5522,7 +5582,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "step 3" if(event.useSha){ event.target.chooseToUse('是否使用一张杀?',{name:'sha'}).set('filterTarget',function(card,player,target){ - return target!=_status.event.sourcex&&get.distance(_status.event.sourcex,target,'attack')<=1&&lib.filter.targetEnabled.apply(this,arguments); + return target!=_status.event.sourcex&&_status.event.sourcex.inRange(target)&&lib.filter.targetEnabled.apply(this,arguments); }).set('sourcex',player); } } @@ -5699,7 +5759,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.discardPlayerCard(target,'he',true); trigger.untrigger(); trigger.responded=true; - trigger.result={bool:true,card:{name:'shan'}} + trigger.result={bool:true,card:{name:'shan',isCard:true}} } }, ai:{ @@ -5839,7 +5899,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.links){ var num=0,players=game.filterPlayer(); for(var i=0;i1&& - event.parent.name!='_lianhuan'&&event.parent.name!='_lianhuan2'; + return event.getParent().name=='sha'&&!event.player.inRange(player); }, content:function(){ trigger.num++; @@ -7382,7 +7444,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.awakenSkill('jiefan'); player.storage.jiefan=true; event.players=game.filterPlayer(function(current){ - return current!=target&&get.distance(current,target,'attack')<=1; + return current!=target&¤t.inRange(target); }); event.players.sortBySeat(target); "step 1" @@ -7420,7 +7482,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } var num=0,players=game.filterPlayer(); for(var i=0;i0){ + player.chooseBool(get.prompt2('quanji')).set('frequentSkill','quanji'); + } + else event.finish(); + "step 5" + if(result.bool){ + player.logSkill('quanji'); + event.goto(1); + } }, intro:{ content:'cards', @@ -8149,18 +8224,43 @@ game.import('character',function(lib,game,ui,get,ai,_status){ enable:'phaseUse', usable:1, audio:2, - filterTarget:true, filter:function(event,player){ - return player.storage.quanji.length>0; + return player.storage.quanji&&player.storage.quanji.length>0; }, - content:function(){ + chooseButton:{ + dialog:function(event,player){ + return ui.create.dialog('排异',player.storage.quanji,'hidden') + }, + backup:function(links,player){ + return { + audio:'paiyi', + filterTarget:true, + filterCard:function(){return false}, + selectCard:-1, + card:links[0], + delay:0, + content:lib.skill.paiyi.contentx, + ai:{ + order:10, + 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; + } + }, + }, + } + }, + prompt:function(){return '请选择〖排异〗的目标'}, + }, + contentx:function(){ "step 0" - player.chooseCardButton(player.storage.quanji,true); - "step 1" - var card=result.links[0]; + var card=lib.skill.paiyi_backup.card; game.cardsDiscard(card); player.$throw(card); player.storage.quanji.remove(card); + game.log(card,'进入了弃牌堆'); if(!player.storage.quanji.length){ player.unmarkSkill('quanji'); } @@ -8168,6 +8268,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.markSkill('quanji'); } player.syncStorage('quanji'); + game.delayx(); "step 2" target.draw(2); "step 3" @@ -8178,11 +8279,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 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; - } + player:1, } } }, @@ -8214,7 +8311,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "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; + return _status.event.player.inRange(target2); }).set('ai',function(target2){ var target=_status.event.player; var player=_status.event.getParent().player; @@ -8719,14 +8816,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return player!=target; } else{ - return lib.filter.filterTarget({name:'sha'},ui.selected.targets[0],target); + return ui.selected.targets[0].inRange(target); } }, content:function(){ "step 0" targets[0].gain(cards,player); "step 1" - targets[0].chooseControl('draw_card','出杀',function(){ + if(!lib.filter.filterTarget({name:'sha',isCard:true},targets[0],targets[1])) event._result={control:'draw_card'}; + else 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){ @@ -8739,7 +8837,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ targets[0].draw(); } else{ - targets[0].useCard({name:'sha'},targets[1]); + targets[0].useCard({name:'sha',isCard:true},targets[1]); } }, ai:{ @@ -9339,9 +9437,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ if(_status.event.getParent(2).type=='dying'){ event.dying=player; + event.type='dying'; } player.turnOver(); - player.useCard({name:'jiu'},player); + player.useCard({name:'jiu',isCard:true},player); }, ai:{ save:true, @@ -9422,7 +9521,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, jiushi3:{ audio:2, - trigger:{player:'damageAfter'}, + trigger:{player:'damageEnd'}, check:function(event,player){ return player.isTurnedOver(); }, @@ -9525,7 +9624,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ num=1; } if(num<=2&&!target.countCards('he')) return false; - return get.distance(player,target,'attack')<=1; + return player.inRange(target)<=1; }, content:function(){ 'step 0' @@ -9720,7 +9819,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ai:{ effect:{ target:function(card,player,target,current){ - if(get.type(card)=='equip') return [1,3]; + if(get.type(card)=='equip'&&!get.cardtag(card,'gifts')) return [1,3]; } }, reverseEquip:true, @@ -10405,7 +10504,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xiansi2:{ enable:'chooseToUse', audio:2, - viewAs:{name:'sha'}, + viewAs:{name:'sha',isCard:true}, filter:function(event,player){ return game.hasPlayer(function(current){ return current.hasSkill('xiansi')&¤t.storage.xiansi.length>1&&event.filterTarget({name:'sha'},player,current); @@ -10602,6 +10701,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shibei2:{}, jianying:{ audio:2, + locked:false, + mod:{ + aiOrder:function(player,card,num){ + if(typeof card=='object'&&player.isPhaseUsing()){ + var evt=player.getLastUsed(); + if(evt&&evt.card&&(get.suit(evt.card)&&get.suit(evt.card)==get.suit(card)||evt.card.number&&evt.card.number==card.number)){ + return num+10; + } + } + }, + }, trigger:{player:'useCard'}, frequent:true, filter:function(event,player){ @@ -10973,7 +11083,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ tianbian:'天辩', tianbian_info:'你拼点时,可以改为用牌堆顶的一张牌进行拼点;当你拼点的牌亮出后,若此牌花色为红桃,则此牌的点数视为K。', funan:'复难', - funan_info:'其他角色使用或打出牌响应你使用的牌时,你可令其获得你使用的牌(其本回合不能使用或打出这张牌),然后你获得其使用或打出的牌', + funan_info:'其他角色使用或打出牌响应你使用的牌时,你可令其获得你使用的牌(其本回合不能使用或打出这些牌),然后你获得其使用或打出的牌。', jiexun:'诫训', jiexun_info:'结束阶段,你可令一名其他角色摸等同于场上方块牌数的牌,然后弃置X张牌(X为此前该技能发动过的次数)。若有角色因此法弃置了所有牌,则你失去〖诫训〗,然后你发动〖复难〗时,无须令对方获得你使用的牌', shouxi:'守玺', @@ -10995,7 +11105,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhongjian_bg:'鉴', zhongjian3:'忠鉴', zhongjian3_bg:'鉴', - zhongjian_info:'出牌阶段限一次,你可以展示一张手牌,然后展示手牌数大于体力值的一名其他角色X张手牌(X为其手牌数和体力值之差)。若以此法展示的牌与你展示的牌:有颜色相同的,你摸一张牌或弃置其一张牌;有点数相同的,本回合此技能改为“出牌阶段限两次”;均不同,你的手牌上限-1', + zhongjian_info:'出牌阶段限一次,你可以展示一张手牌,然后展示手牌数大于体力值的一名其他角色X张手牌(X为其手牌数和体力值之差且至少为1)。若以此法展示的牌与你展示的牌:有颜色相同的,你摸一张牌或弃置其一张牌;有点数相同的,本回合此技能改为“出牌阶段限两次”;均不同,你的手牌上限-1', caishi:'才识', caishi_info:'摸牌阶段开始时,你可以选择一项:1.手牌上限+1,然后本回合你的牌不能对其他角色使用;2.回复1点体力,然后本回合你的牌不能对自己使用', xincaishi:'才识', @@ -11278,6 +11388,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ quanji:'权计', zili:'自立', paiyi:'排异', + paiyi_backup:'排异', sanyao:'散谣', zhiman:'制蛮', qianxi:'潜袭', diff --git a/game/asset.js b/game/asset.js index 216f9b680..0717c7f17 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - '1.9.98', + '1.9.98.1', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -535,6 +535,14 @@ window.noname_asset_list=[ 'audio/die/zhoufei.mp3', 'audio/die/zhugezhan.mp3', 'audio/die/zhuling.mp3', + + 'audio/die/nashime.mp3', + 'audio/die/ol_liushan.mp3', + 'audio/die/ol_yuanshao.mp3', + 'audio/die/re_sunce.mp3', + 'audio/die/tw_beimihu.mp3', + 'audio/die/yuantanyuanshang.mp3', + 'audio/die/shenpei.mp3', 'audio/skill/anguo1.mp3', 'audio/skill/anguo2.mp3', @@ -2287,6 +2295,46 @@ window.noname_asset_list=[ 'audio/skill/zuoding1.mp3', 'audio/skill/zuoding2.mp3', + 'audio/skill/baijia_tw_beimihu1.mp3', + 'audio/skill/baijia_tw_beimihu2.mp3', + 'audio/skill/bmcanshi_tw_beimihu1.mp3', + 'audio/skill/bmcanshi_tw_beimihu2.mp3', + 'audio/skill/chijie.mp3', + 'audio/skill/guju_tw_beimihu1.mp3', + 'audio/skill/guju_tw_beimihu2.mp3', + 'audio/skill/jiang_re_sunce1.mp3', + 'audio/skill/jiang_re_sunce2.mp3', + 'audio/skill/jijiang1_ol_liushan1.mp3', + 'audio/skill/jijiang1_ol_liushan2.mp3', + 'audio/skill/liezhi1.mp3', + 'audio/skill/liezhi2.mp3', + 'audio/skill/neifa1.mp3', + 'audio/skill/neifa2.mp3', + 'audio/skill/olfangquan1.mp3', + 'audio/skill/olfangquan2.mp3', + 'audio/skill/olhunzi1.mp3', + 'audio/skill/olhunzi2.mp3', + 'audio/skill/olluanji1.mp3', + 'audio/skill/olluanji2.mp3', + 'audio/skill/olruoyu1.mp3', + 'audio/skill/olruoyu2.mp3', + 'audio/skill/olxueyi1.mp3', + 'audio/skill/olxueyi2.mp3', + 'audio/skill/olzhiba1.mp3', + 'audio/skill/olzhiba2.mp3', + 'audio/skill/renshe1.mp3', + 'audio/skill/renshe2.mp3', + 'audio/skill/shouye1.mp3', + 'audio/skill/shouye2.mp3', + 'audio/skill/sishu1.mp3', + 'audio/skill/sishu2.mp3', + 'audio/skill/waishi1.mp3', + 'audio/skill/waishi2.mp3', + 'audio/skill/xiangle_ol_liushan1.mp3', + 'audio/skill/xiangle_ol_liushan2.mp3', + 'audio/skill/zongkui_tw_beimihu1.mp3', + 'audio/skill/zongkui_tw_beimihu2.mp3', + 'font/huangcao.ttf', 'font/shousha.ttf', 'font/xiaozhuan.ttf', @@ -2316,7 +2364,7 @@ window.noname_asset_list=[ 'image/background/zhanyun_bg.jpg', 'image/background/xinsha_bg.jpg', - 'image/card/mingguangkai.png', + 'image/card/minguangkai.png', 'image/card/db_atk1.jpg', 'image/card/db_atk2.jpg', 'image/card/db_def1.jpg', @@ -2662,6 +2710,18 @@ window.noname_asset_list=[ 'image/card/ziyangdan.png', 'image/card/zong.png', + 'image/card/caochuan.png', + 'image/card/jiejia.png', + 'image/card/jinhe.png', + 'image/card/kaihua.png', + 'image/card/numa.png', + 'image/card/nvzhuang.png', + 'image/card/wufengjian.png', + 'image/card/yajiaoqiang.png', + 'image/card/yexingyi.png', + 'image/card/yinfengjia.png', + 'image/card/zheji.png', + 'image/card/zhulu_card.png', 'image/card/qiaosi_card1.png', 'image/card/qiaosi_card2.png', 'image/card/qiaosi_card3.png', @@ -2744,9 +2804,11 @@ window.noname_asset_list=[ 'image/character/key_yukine.jpg', 'image/character/old_guanqiujian.jpg', 'image/character/old_huangfusong.jpg', - 'image/character/old_liushan.jpg', - 'image/character/old_yuanshao.jpg', + 'image/character/ol_liushan.jpg', + 'image/character/ol_yuanshao.jpg', 'image/character/re_sunce.jpg', + 'image/character/ol_maliang.jpg', + 'image/character/ns_zhangwei.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', diff --git a/game/game.js b/game/game.js index 2de13bdf8..cc5a155aa 100644 --- a/game/game.js +++ b/game/game.js @@ -3423,7 +3423,7 @@ }, import_music:{ name:'
'+ - ''+ + ''+ '
', clear:true, }, @@ -4083,8 +4083,18 @@ map.connect_double_nei.hide(); map.connect_zhong_card.show(); map.connect_special_identity.hide(); + map.connect_double_character.show(); + } + else if(config.connect_identity_mode=='purple'){ + map.connect_player_number.hide(); + map.connect_enhance_zhu.hide(); + map.connect_double_nei.hide(); + map.connect_zhong_card.hide(); + map.connect_special_identity.hide(); + map.connect_double_character.hide(); } else{ + map.connect_double_character.show(); map.connect_player_number.show(); map.connect_enhance_zhu.show(); if(config.connect_player_number!='2'){ @@ -4108,11 +4118,12 @@ init:'normal', item:{ normal:'标准', - zhong:'明忠' + zhong:'明忠', + purple:'3v3v2', }, restart:true, frequent:true, - intro:'明忠模式详见帮助' + intro:'明忠模式和3v3v2模式详见帮助' }, connect_player_number:{ name:'游戏人数', @@ -4194,6 +4205,40 @@ map.ban_identity3.hide(); map.zhong_card.show(); map.special_identity.hide(); + map.choose_group.show(); + map.change_choice.show(); + map.auto_mark_identity.show(); + map.double_character.show(); + map.free_choose.show(); + map.change_identity.show(); + if(config.double_character){ + map.double_hp.show(); + } + else{ + map.double_hp.hide(); + } + } + else if(config.identity_mode=='purple'){ + map.player_number.hide(); + map.enhance_zhu.hide(); + map.double_nei.hide(); + map.auto_identity.hide(); + map.choice_zhu.hide(); + map.choice_zhong.hide(); + map.choice_nei.hide(); + map.choice_fan.hide(); + map.ban_identity.hide(); + map.ban_identity2.hide(); + map.ban_identity3.hide(); + map.zhong_card.hide(); + map.special_identity.hide(); + map.double_character.hide(); + map.double_hp.hide(); + map.choose_group.hide(); + map.auto_mark_identity.hide(); + map.change_choice.hide(); + map.free_choose.hide(); + map.change_identity.hide(); } else{ map.player_number.show(); @@ -4223,18 +4268,24 @@ map.ban_identity3.show(); } map.zhong_card.hide(); + map.choose_group.show(); + map.auto_mark_identity.show(); + map.change_choice.show(); + map.free_choose.show(); + map.change_identity.show(); if(config.player_number=='8'){ map.special_identity.show(); } else{ map.special_identity.hide(); } - } - if(config.double_character){ - map.double_hp.show(); - } - else{ - map.double_hp.hide(); + map.double_character.show(); + if(config.double_character){ + map.double_hp.show(); + } + else{ + map.double_hp.hide(); + } } }, identity_mode:{ @@ -4242,7 +4293,8 @@ init:'normal', item:{ normal:'标准', - zhong:'明忠' + zhong:'明忠', + purple:'3v3v2', }, restart:true, frequent:true, @@ -6551,7 +6603,7 @@ if(!pos) pos='o'; var list=[]; for(var i=0;i1||cards[0]!=card)){ + if(cards.length&&!card.isCard){ if(event.addedTarget){ game.log(player,str,card,'(',cards,',指向',event.addedTargets,')'); } @@ -14042,7 +14104,7 @@ discard:function(){ "step 0" game.log(player,'弃置了',cards); - player.lose(cards,event.position,'visible').type='discard'; + event.done=player.lose(cards,event.position,'visible').type='discard'; "step 1" event.trigger('discard'); }, @@ -14450,7 +14512,7 @@ event.js=js; "step 2" if(num=3) return target.identity=='fan'; - return target.identity=='nei'||target.identity=='fan'; - });break; - case 'nei':targets=game.filterPlayer(function(target){ - if(func&&!func(target)) return false; - if(num>=3) return target.identity=='fan'; - if(game.players.length==2) return target!=player; - return target.identity=='zhong'||target.identity=='mingzhong'||target.identity=='fan'; - });break; - case 'fan':targets=game.filterPlayer(function(target){ - if(func&&!func(target)) return false; - return target.identity!='fan'; - });break; + if(_status.mode=='purple'){ + switch(player.identity){ + case 'bZhu':case 'bZhong':case 'rNei':targets=game.filterPlayer(function(target){ + if(func&&!func(target)) return false; + return ['rZhu','rZhong','bNei'].contains(target.identity); + });break; + case 'rZhu':case 'rZhong':case 'bNei':targets=game.filterPlayer(function(target){ + if(func&&!func(target)) return false; + return ['bZhu','bZhong','rNei'].contains(target.identity); + });break; + case 'rYe':case 'bYe':targets=game.filterPlayer(function(target){ + if(func&&!func(target)) return false; + return !['rYe','bYe'].contains(target.identity); + });break; + } + } + else{ + var num=get.population('fan'); + switch(player.identity){ + case 'zhu':case 'zhong':case 'mingzhong':targets=game.filterPlayer(function(target){ + if(func&&!func(target)) return false; + if(num>=3) return target.identity=='fan'; + return target.identity=='nei'||target.identity=='fan'; + });break; + case 'nei':targets=game.filterPlayer(function(target){ + if(func&&!func(target)) return false; + if(num>=3) return target.identity=='fan'; + if(game.players.length==2) return target!=player; + return target.identity=='zhong'||target.identity=='mingzhong'||target.identity=='fan'; + });break; + case 'fan':targets=game.filterPlayer(function(target){ + if(func&&!func(target)) return false; + return target.identity!='fan'; + });break; + } } } else if(mode=='guozhan'){ @@ -20177,16 +20288,34 @@ self=true; } if(mode=='identity'){ - switch(player.identity){ - case 'zhu':case 'zhong':case 'mingzhong':targets=game.filterPlayer(function(target){ - if(func&&!func(target)) return false; - return ['zhu','zhong','mingzhong'].contains(target.identity); - });break; - case 'nei':targets=[];break; - case 'fan':targets=game.filterPlayer(function(target){ - if(func&&!func(target)) return false; - return target.identity=='fan'; - });break; + if(_status.mode=='purple'){ + switch(player.identity){ + case 'rZhu':case 'rZhong':case 'bNei':targets=game.filterPlayer(function(target){ + if(func&&!func(target)) return false; + return ['rZhu','rZhong','bNei'].contains(target.identity); + });break; + case 'bZhu':case 'bZhong':case 'rNei':targets=game.filterPlayer(function(target){ + if(func&&!func(target)) return false; + return ['bZhu','bZhong','rNei'].contains(target.identity); + });break; + case 'rYe':case 'bYe':targets=game.filterPlayer(function(target){ + if(func&&!func(target)) return false; + return ['rYe','bYe'].contains(target.identity); + });break; + } + } + else{ + switch(player.identity){ + case 'zhu':case 'zhong':case 'mingzhong':targets=game.filterPlayer(function(target){ + if(func&&!func(target)) return false; + return ['zhu','zhong','mingzhong'].contains(target.identity); + });break; + case 'nei':targets=[];break; + case 'fan':targets=game.filterPlayer(function(target){ + if(func&&!func(target)) return false; + return target.identity=='fan'; + });break; + } } } else if(mode=='guozhan'){ @@ -20500,6 +20629,9 @@ if(mode!='identity'){ if(player&&this.side!=player.side) return false; } + if(_status.mode=='purple'){ + if(player&&this.identity.slice(0,1)!=player.identity.slice(0,1)) return false; + } if(this.isZhu==true) return true; for(var i in this.storage){ if(i.indexOf('zhuSkill_')==0&&this.storage[i].contains(skill)) return true; @@ -23658,7 +23790,7 @@ if(info[4].contains('hiddenboss')) return true; if(info[4].contains('minskin')) return true; if(info[4].contains('unseen')) return true; - if(info[4].contains('forbidai')&&!_status.event.isMine()) return true; + if(info[4].contains('forbidai')&&(!_status.event.isMine||!_status.event.isMine())) return true; if(lib.characterFilter[i]&&!lib.characterFilter[i](get.mode())) return true; } return false; @@ -23672,11 +23804,11 @@ return true; }, cardEnabled:function(card,player,event){ - card=get.autoViewAs(card,null,player); if(player==undefined) player=_status.event.player; if(!player) return false; var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player); if(mod2!='unchanged') return mod2; + card=get.autoViewAs(card,null,player); if(event==='forceEnable'){ var mod=game.checkMod(card,player,'unchanged','cardEnabled',player); if(mod!='unchanged') return mod; @@ -23812,12 +23944,28 @@ if(range==undefined&&outrange==undefined) return true; for(var i in range){ - var distance=get.distance(player,target,i)+extra; - if(range[i]distance) return false; + if(i=='attack'){ + var range2=player.getAttackRange(); + if(range2<=0) return false; + var distance=get.distance(player,target)+extra; + if(outrange[i]>distance-range2) return false; + } + else{ + var distance=get.distance(player,target,i)+extra; + if(outrange[i]>distance) return false; + } } return true; }, @@ -24009,10 +24157,10 @@ charlotte:true, mod:{ targetEnabled:function(card){ - if(card.name=='tao'&&get.itemtype(card)=='card') return false; + if(card.name=='tao'&&(card.isCard&&card.cardid||get.itemtype(card)=='card')) return false; }, cardSavable:function(card){ - if(card.name=='tao'&&get.itemtype(card)=='card') return false; + if(card.name=='tao'&&(card.isCard&&card.cardid||get.itemtype(card)=='card')) return false; }, }, group:["aozhan_sha","aozhan_shan"], @@ -31759,7 +31907,7 @@ if(method=='raw') return equipValue; return equipValue-value; } - card.ai.result.target=(function(name){ + if(!card.ai.result.target) card.ai.result.target=(function(name){ return (function(player,target){ return get.equipResult(player,target,name); }); @@ -39537,7 +39685,7 @@ node.link=page; page.classList.add('menu-sym'); menuUpdates.push(function(){ - if(_status.connectMode&&!lib.config.debug){ + if(false){ node.classList.add('off'); if(node.classList.contains('active')){ node.classList.remove('active'); @@ -44873,7 +45021,7 @@ } else{ if(lib.configOL.mode=='versus'||lib.configOL.mode=='doudizhu'||lib.configOL.mode=='single') return; - if(lib.configOL.mode=='identity'&&lib.configOL.identity_mode=='zhong') return; + if(lib.configOL.mode=='identity'&&(lib.configOL.identity_mode=='zhong'||lib.configOL.identity_mode=='purple')) return; if(!this.classList.contains('unselectable2')&&lib.configOL.number<=2) return; this.classList.toggle('unselectable2') if(this.classList.contains('unselectable2')){ @@ -46415,7 +46563,7 @@ }, is:{ converted:function(event){ - return !(event.cards&&event.card&&event.cards.length==1&&event.cards[0]==event.card); + return !(event.card&&event.card.isCard); }, safari:function(){ var ua=navigator.userAgent.toLowerCase(); @@ -46687,14 +46835,17 @@ } } else{ - if(card.name!=get.name(card)||card.nature!=get.nature(card)||card.suit!=get.suit(card)){ + if(card.isCard||get.itemtype(card)=='card'){ var next={ name:get.name(card), suit:get.suit(card), number:card.number, nature:get.nature(card), + isCard:true, + cardid:card.cardid, }; if(get.itemtype(cards)=='cards'&&!card.cards) next.cards=cards.slice(0); + else next.cards=[card]; return next; } else if(get.is.object(card)&&get.itemtype(cards)=='cards'&&!card.cards){ @@ -47116,7 +47267,6 @@ }, modetrans:function(config,server){ if(config.mode=='doudizhu') return '欢乐斗地主'; - if(config.mode=='stone') return '炉石传说'; if(config.mode=='versus'){ switch(config.versus_mode){ case '1v1':return '单人对决'; @@ -47132,8 +47282,11 @@ case 'dianjiang':return '点将单挑'; } } - else if(config.mode=='identity'&&config.identity_mode=='zhong'){ - return '忠胆英杰'; + else if(config.mode=='identity'){ + switch(config.identity_mode){ + case 'purple':return '三对三对二'; + case 'zhong':return '忠胆英杰'; + } } else{ if(server){ @@ -48149,7 +48302,7 @@ str2='雷'+str2; } } - if(get.itemtype(str)=='card'){ + if(get.itemtype(str)=='card'||str.isCard){ if(_status.cardtag&&str.cardid){ var tagstr=''; for(var i in _status.cardtag){ @@ -48484,6 +48637,12 @@ } return num; }, + cardtag:function(item,tag){ + if(item.cardid&&_status.cardtag&&_status.cardtag[tag]&&_status.cardtag[tag].contains(item.cardid)){ + return true; + } + return false; + }, tag:function(item,tag,item2){ var result; if(get.info(item)&&get.info(item).ai&&get.info(item).ai.tag){ @@ -49935,15 +50094,22 @@ return 1; }, order:function(item){ - var aii=get.info(item).ai; + var info=get.info(item); + if(!info) return -1; + var aii=info.ai; var order; if(aii&&aii.order) order=aii.order; else if(aii&&aii.basic) order=aii.basic.order; if(order==undefined) return -1; + var num=order; if(typeof(order)=='function'){ - return order(item,_status.event.player); + num=order(item,_status.event.player); } - return order; + if(typeof item=='object'&&_status.event.player){ + var player=_status.event.player; + num=game.checkMod(player,item,num,'aiOrder',player); + } + return num; }, result:function(item,skill){ var result; diff --git a/game/package.js b/game/package.js index eb1d69ec5..80a02aece 100644 --- a/game/package.js +++ b/game/package.js @@ -25,6 +25,7 @@ window.noname_package={ extra:'军争', sp:'SP', guozhan:'国战', + zhulu:'逐鹿天下', zhenfa:'阵法', yunchou:'运筹帷幄', swd:'轩辕剑', @@ -45,18 +46,19 @@ window.noname_package={ guozhan:'国战', versus:'对决', connect:'联机', - boss:'挑战', + boss:'挑战', + doudizhu:'斗地主', + single:'单挑', chess:'战棋', tafang:'塔防', stone:'炉石', brawl:'乱斗', - doudizhu:'斗地主', - single:'单挑', }, submode:{ identity:{ normal:'身份模式', - zhong:'忠胆英杰' + zhong:'忠胆英杰', + purple:'3v3v2', }, guozhan:{ normal:'国战模式', @@ -87,8 +89,6 @@ window.noname_package={ key_bg:'键社', zhulin_bg:'竹林', shengshi_bg:'盛世', - noname_bg:'璀璨', - wuming_bg:'无名', taoyuan_bg:'桃园', zhanhuo_bg:'战火', huangtian_bg:'黄天', @@ -102,6 +102,8 @@ window.noname_package={ wangshi_bg:'往事', xiongxin_bg:'雄心', xinsha_bg:'新杀', + noname_bg:'璀璨', + wuming_bg:'无名', }, music:{ music_phliosophy:'Philosophy of ours', diff --git a/game/update.js b/game/update.js index cd09e4ede..c435f6eb6 100644 --- a/game/update.js +++ b/game/update.js @@ -1,54 +1,55 @@ -window.noname_update={ - version:'1.9.98', - update:'1.9.97.9', - changeLog:[ - '新界孙策,界刘禅,界袁绍,新皇甫嵩,新毌丘俭', - 'BUG修复', - ], - files:[ - 'card/extra.js', - //'card/huanlekapai.js', - //'card/sp.js', - 'card/standard.js', - //'card/swd.js', - 'card/mtg.js', - 'card/guozhan.js', - //'card/gwent.js', - //'character/diy.js', - 'character/extra.js', - //'character/hearth.js', - //'character/gujian.js', - //'character/gwent.js', - 'character/mobile.js', - //'character/mtg.js', - 'character/old.js', - 'character/refresh.js', - 'character/shenhua.js', - 'character/sp.js', - 'character/tw.js', - 'character/standard.js', - //'character/swd.js', - //'character/xianjian.js', - 'character/xinghuoliaoyuan.js', - 'character/yijiang.js', - //'character/yxs.js', - //'extension/boss/extension.js', - //'layout/default/layout.css', - 'mode/identity.js', - 'mode/doudizhu.js', - 'mode/guozhan.js', - 'mode/chess.js', - 'mode/tafang.js', - //'mode/single.js', - //'mode/stone.js', - 'mode/brawl.js', - 'mode/versus.js', - 'mode/boss.js', - 'game/game.js', - //'game/NoSleep.js', - //'game/config.js', - //'game/package.js', - //'game/asset.js', - //'game/source.js', - ] -}; +window.noname_update={ + version:'1.9.98.2', + update:'1.9.98.1', + changeLog:[ + '3v3v2模式', + '逐鹿中原卡牌包', + ], + files:[ + 'card/extra.js', + 'card/huanlekapai.js', + //'card/sp.js', + 'card/standard.js', + //'card/swd.js', + //'card/mtg.js', + 'card/guozhan.js', + //'card/gwent.js', + 'card/zhulu.js', + 'character/diy.js', + 'character/extra.js', + //'character/hearth.js', + //'character/gujian.js', + //'character/gwent.js', + 'character/mobile.js', + //'character/mtg.js', + 'character/old.js', + 'character/refresh.js', + 'character/shenhua.js', + 'character/sp.js', + 'character/tw.js', + 'character/standard.js', + //'character/swd.js', + //'character/xianjian.js', + 'character/xinghuoliaoyuan.js', + 'character/yijiang.js', + //'character/yxs.js', + //'extension/boss/extension.js', + 'layout/default/layout.css', + 'mode/identity.js', + //'mode/doudizhu.js', + 'mode/guozhan.js', + //'mode/chess.js', + //'mode/tafang.js', + //'mode/single.js', + //'mode/stone.js', + 'mode/brawl.js', + //'mode/versus.js', + 'mode/boss.js', + 'game/game.js', + //'game/NoSleep.js', + //'game/config.js', + 'game/package.js', + //'game/asset.js', + //'game/source.js', + ] +}; diff --git a/image/card/caochuan.png b/image/card/caochuan.png new file mode 100644 index 000000000..1ce6948c8 Binary files /dev/null and b/image/card/caochuan.png differ diff --git a/image/card/jiejia.png b/image/card/jiejia.png new file mode 100644 index 000000000..773ad74d4 Binary files /dev/null and b/image/card/jiejia.png differ diff --git a/image/card/jinhe.png b/image/card/jinhe.png new file mode 100644 index 000000000..6e9ddce93 Binary files /dev/null and b/image/card/jinhe.png differ diff --git a/image/card/kaihua.png b/image/card/kaihua.png new file mode 100644 index 000000000..83291f0f8 Binary files /dev/null and b/image/card/kaihua.png differ diff --git a/image/card/numa.png b/image/card/numa.png new file mode 100644 index 000000000..e02ecbdd7 Binary files /dev/null and b/image/card/numa.png differ diff --git a/image/card/nvzhuang.png b/image/card/nvzhuang.png new file mode 100644 index 000000000..519546c39 Binary files /dev/null and b/image/card/nvzhuang.png differ diff --git a/image/card/wufengjian.png b/image/card/wufengjian.png new file mode 100644 index 000000000..5bb113b83 Binary files /dev/null and b/image/card/wufengjian.png differ diff --git a/image/card/yajiaoqiang.png b/image/card/yajiaoqiang.png new file mode 100644 index 000000000..e91611a8f Binary files /dev/null and b/image/card/yajiaoqiang.png differ diff --git a/image/card/yexingyi.png b/image/card/yexingyi.png new file mode 100644 index 000000000..b0ec2af36 Binary files /dev/null and b/image/card/yexingyi.png differ diff --git a/image/card/yinfengjia.png b/image/card/yinfengjia.png new file mode 100644 index 000000000..7af2646de Binary files /dev/null and b/image/card/yinfengjia.png differ diff --git a/image/card/zheji.png b/image/card/zheji.png new file mode 100644 index 000000000..d2e3786b8 Binary files /dev/null and b/image/card/zheji.png differ diff --git a/image/card/zhulu_card.png b/image/card/zhulu_card.png new file mode 100644 index 000000000..66eb25a65 Binary files /dev/null and b/image/card/zhulu_card.png differ diff --git a/image/character/ns_zhangwei.jpg b/image/character/ns_zhangwei.jpg new file mode 100644 index 000000000..a92cd3f7b Binary files /dev/null and b/image/character/ns_zhangwei.jpg differ diff --git a/image/character/ol_liushan.jpg b/image/character/ol_liushan.jpg new file mode 100644 index 000000000..9e9b7e4f9 Binary files /dev/null and b/image/character/ol_liushan.jpg differ diff --git a/image/character/ol_maliang.jpg b/image/character/ol_maliang.jpg new file mode 100644 index 000000000..f4c2f9408 Binary files /dev/null and b/image/character/ol_maliang.jpg differ diff --git a/image/character/ol_yuanshao.jpg b/image/character/ol_yuanshao.jpg new file mode 100644 index 000000000..5253da8dc Binary files /dev/null and b/image/character/ol_yuanshao.jpg differ diff --git a/layout/default/layout.css b/layout/default/layout.css index 2820619bd..fe5ca09aa 100644 --- a/layout/default/layout.css +++ b/layout/default/layout.css @@ -3709,6 +3709,10 @@ span[data-nature='firemm'] { } .player .identity[data-color="mingzhong"], +.player .identity[data-color="rZhu"], +.player .identity[data-color="rZhong"], +.player .identity[data-color="rNei"], +.player .identity[data-color="cai2"], div[data-nature='orange'], span[data-nature='orange'] { text-shadow: rgba(255, 120, 0,1) 0 0 2px,rgba(255, 120, 0,1) 0 0 5px,rgba(255, 120, 0,1) 0 0 10px, @@ -3769,6 +3773,8 @@ span[data-nature='keymm'] { .player .identity[data-color="nei"], .player .identity[data-color="ye"], +.player .identity[data-color="rYe"], +.player .identity[data-color="bYe"], div[data-nature='thunder'], span[data-nature='thunder'] { text-shadow: rgba(100, 74, 139,1) 0 0 2px,rgba(100, 74, 139,1) 0 0 5px,rgba(100, 74, 139,1) 0 0 10px, @@ -3804,6 +3810,9 @@ span[data-nature='woodmm'] { } .player .identity[data-color="cai"], +.player .identity[data-color="bZhu"], +.player .identity[data-color="bZhong"], +.player .identity[data-color="bNei"], .player .identity[data-color="wei"], .player .identity[data-color="falsezhu"], .player .identity[data-color="friend"], diff --git a/mode/boss.js b/mode/boss.js index a843b9d0d..2936a5e33 100644 --- a/mode/boss.js +++ b/mode/boss.js @@ -31,7 +31,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } } // for(var i in lib.cardPack.mode_boss){ - // lib.card[i]=lib.cardPack.mode_boss[i]; + // lib.card[i]=lib.cardPack.mode_boss[i]; // } for(var i in lib.skill){ if(lib.skill[i].changeSeat){ @@ -57,14 +57,14 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } // var bosslistlinks={}; // var toggleBoss=function(bool){ - // game.saveConfig(this._link.config._name,bool,true); - // var node=bosslistlinks[this._link.config._name]; - // if(bool){ - // node.style.display=''; - // } - // else{ - // node.style.display='none'; - // } + // game.saveConfig(this._link.config._name,bool,true); + // var node=bosslistlinks[this._link.config._name]; + // if(bool){ + // node.style.display=''; + // } + // else{ + // node.style.display='none'; + // } // }; var onpause=function(){ ui.window.classList.add('bosspaused'); @@ -85,13 +85,13 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ if(info[4].contains('boss')){ // var cfg=i+'_bossconfig'; // if(get.config(cfg)==undefined){ - // game.saveConfig(cfg,true,true); + // game.saveConfig(cfg,true,true); // } // lib.translate[cfg+'_config']=lib.translate[i]; // lib.mode.boss.config[cfg]={ - // name:get.translation(i), - // onclick:toggleBoss, - // init:true, + // name:get.translation(i), + // onclick:toggleBoss, + // init:true, // } var player=ui.create.player(bosslist).init(i); if(lib.characterPack.mode_boss[i]&&get.config(i+'_boss_config')==false){ @@ -123,7 +123,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } // if(!get.config(cfg)){ - // player.style.display='none'; + // player.style.display='none'; // } } } @@ -1281,9 +1281,9 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ next.custom.replace.target=event.customreplacetarget; next.selectButton=[3,3]; // next.custom.add.button=function(){ - // if(ui.cheat2&&ui.cheat2.backup) return; - // _status.event.dialog.content.childNodes[1].innerHTML= - // ui.selected.buttons.length+'/3'; + // if(ui.cheat2&&ui.cheat2.backup) return; + // _status.event.dialog.content.childNodes[1].innerHTML= + // ui.selected.buttons.length+'/3'; // }; event.changeDialog=function(){ if(ui.cheat2&&ui.cheat2.dialog==_status.event.dialog){ @@ -3855,7 +3855,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ if(player!=target){ if(player.hasSkillTag('unequip',false,{ name:card?card.name:null, - target:player, + target:player, card:card })){} else if(get.type(card)=='trick') return false; @@ -5313,11 +5313,11 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' // if(player.storage.xiongcai2<1){ - // player.storage.xiongcai2++; - // event.finish(); + // player.storage.xiongcai2++; + // event.finish(); // } // else{ - // player.storage.xiongcai2=0; + // player.storage.xiongcai2=0; // } 'step 1' player.logSkill('xiongcai'); @@ -5566,8 +5566,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ list.trick.sort(lib.sort.name); var dialog=ui.create.dialog('风起',[list.trick,'vcard']); // for(var i in list){ - // dialog.addText(get.translation(i)+'牌'); - // dialog.add([list[i],'vcard']); + // dialog.addText(get.translation(i)+'牌'); + // dialog.add([list[i],'vcard']); // } var rand1=Math.random()<1/3; var rand2=Math.random()<0.5; @@ -7482,7 +7482,19 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ player.chooseTarget(get.prompt('tashui'),function(card,player,target){ return player!=target; }).ai=function(target){ - if(target.isTurnedOver()) return -1; + // if(target.isTurnedOver()) return -1; + var player=_status.event.player; + if(get.attitude(_status.event.player,target)==0) return 0; + if(get.attitude(_status.event.player,target)>0){ + if(target.classList.contains('turnedover')) return 3; + if(target.hasSkillTag('noturn')) return 1; + return -1; + } + else{ + if(target.hasSkillTag('noturn')) return 0; + if(target.classList.contains('turnedover')) return -1; + return 5-target.getDamagedHp(); + } return 1; } "step 1" @@ -7886,7 +7898,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ player.removeSkill("boss_hunyou_dying"); player.removeSkill("boss_hunyou_dieBegin") player.loseMaxHp(); - player.addSkill('reyingzi'); + player.addSkill('reyingzi'); player.addSkill('yinghun'); game.log(player,'获得了技能','#g【英姿】和【英魂】'); game.log(player,'','#y【魂佑】') diff --git a/mode/brawl.js b/mode/brawl.js index 77acbaab5..dabf0881e 100644 --- a/mode/brawl.js +++ b/mode/brawl.js @@ -2115,14 +2115,12 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ 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'; + player1.node.count.remove(); 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'; + player2.node.count.remove(); this.appendChild(player1); this.appendChild(player2); this.player1=player1; @@ -2247,7 +2245,11 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ var info1=lib.character[name1]; var info2=lib.character[name2]; if(!info1||!info2) return; - return info1[0]==info2[0]||get.infoMaxHp(info1[2])==get.infoMaxHp(info2[2])||info1[3].length==info2[3].length; + var num=0; + if(info1[0]==info2[0]) num++; + if(get.infoMaxHp(info1[2])==get.infoMaxHp(info2[2])) num++; + if(info1[3].length==info2[3].length) num++; + return num>1; }; var list2=list.randomGets(8); var next=game.me.chooseButton(2,true,['请选择您的武将牌',[list2,'character']]); diff --git a/mode/guozhan.js b/mode/guozhan.js index 27d10aefb..ef211957d 100644 --- a/mode/guozhan.js +++ b/mode/guozhan.js @@ -1121,7 +1121,6 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ filter2:function(event,player){ if(!get.zhu(player,'jianan')) return false; if(!player.countCards('he')) return false; - if(get.is.jun(player)&&player.isUnseen(1)) return false; return !player.isUnseen(); }, direct:true, @@ -1144,15 +1143,15 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ if(!skills.length) event.finish(); else{ event.skills=skills; - var next=player.chooseToDiscard(); + var next=player.chooseToDiscard('he'); var str=''; for(var i=0;i3) return 'qiaobian'; - if(skills.contains('gzjieyue')&&player.countCards('h',function(card){ - return get.value(card)<7; - })) return 'gzjieyue'; - if(skills.contains('new_retuxi')) return 'new_retuxi'; - return skills.randomGet(); - }).prompt="选择获得其中的一个技能直到下回合开始"; } 'step 3' + player.chooseControl(event.skills).set('ai',function(){ + var skills=event.skills; + if(skills.contains('qiaobian')&&player.countCards('h')>3) return 'qiaobian'; + if(skills.contains('gzjieyue')&&player.countCards('h',function(card){ + return get.value(card)<7; + })) return 'gzjieyue'; + if(skills.contains('new_retuxi')) return 'new_retuxi'; + return skills.randomGet(); + }).set("prompt","选择获得其中的一个技能直到君主的回合开始"); + 'step 4' var link=result.control; player.addTempSkill(link,"jiananUpdate"); player.addTempSkill("jianan_eff","jiananUpdate"); @@ -7006,7 +7006,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ tongshimingzhi:'同时明置', mode_guozhan_character_config:'国战武将', _zhenfazhaohuan:'阵法召唤', - _zhenfazhaohuan_info:'由拥有阵法技的角色发起,满足此阵法技条件的未确定势力角色均可按逆时针顺序依次明置其一张武将牌(响应阵法召唤),以发挥阵法技的效果', + _zhenfazhaohuan_info:'由拥有阵法技的角色发起,满足此阵法技条件的未确定势力角色均可按逆时针顺序依次明置其一张武将牌(响应阵法召唤),以发挥阵法技的效果。', junling:'军令', @@ -7038,35 +7038,35 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gzfengying_info:'限定技,你可以将所有手牌当【挟天子以令诸侯】使用(无视大势力限制),然后所有与你势力相同的角色将手牌补至体力上限。', gz_yujin:'于禁', gzjieyue:'节钺', - gzjieyue_info:'准备阶段开始时,你可以将一张手牌交给一名非魏势力角色,然后选择一个“军令”,然后令其选择一项:执行该军令,然后你摸一张牌;或令你于此回合摸牌阶段摸牌时,额外摸三张牌。', + gzjieyue_info:'准备阶段开始时,你可以将一张手牌交给一名非魏势力角色,然后选择一个“军令”并令其选择一项:执行该军令,然后你摸一张牌;或令你于此回合摸牌阶段额外摸三张牌。', gz_wangping:'王平', jianglue:'将略', - jianglue_info:'限定技,出牌阶段,你可以选择一个“军令”,然后与你势力相同的其他角色可以执行该军令(未确定势力角色可以在此时明置一张武将牌)。你与每名执行该军令的角色增加一点体力上限,然后回复一点体力,然后你摸X张牌(X为以此法回复了体力的角色数)。', + jianglue_info:'限定技,出牌阶段,你可以选择一个“军令”,然后与你势力相同的其他角色可以执行该军令(未确定势力角色可以在此时明置一张武将牌)。你与所有执行该军令的角色增加一点体力上限,然后回复一点体力,然后你摸X张牌(X为以此法回复了体力的角色数)。', gz_fazheng:'法正', gzxuanhuo:'眩惑', - gzxuanhuo_info:'与你势力相同的其他角色的出牌阶段限一次,该角色可以交给你一张牌并弃置一张牌,然后获得以下一项场上没有的技能直到回合结束:“武圣”、“咆哮”、“龙胆”、“铁骑”、“烈弓”、“狂骨”。', + gzxuanhuo_info:'与你势力相同的其他角色的出牌阶段限一次,该角色可以交给你一张牌并弃置一张牌,然后获得以下一项场上没有的技能直到回合结束:〖武圣〗、〖咆哮〗、〖龙胆〗、〖铁骑〗、〖烈弓〗、〖狂骨〗。', gzenyuan:'恩怨', gzenyuan_info:'锁定技,当其他角色对你使用【桃】时,该角色摸一张牌;当你受到伤害后,伤害来源须交给你一张手牌或失去1点体力。', gzbuyi:'补益', - gzbuyi_info:'每名角色的回合限一次,当一名与你势力相同的角色脱离濒死状态后,你可以选择一个“军令”,令伤害来源选择一项:执行该军令,或令该脱离濒死状态的角色回复一点体力。', + gzbuyi_info:'每回合限一次,当一名与你势力相同的角色脱离濒死状态后,你可以选择一个“军令”,令伤害来源选择一项:执行该军令,或令该脱离濒死状态的角色回复一点体力。', gz_lukang:'陆抗', keshou:'恪守', - keshou_info:'当你受到伤害时,你可以弃置两张颜色相同的牌。若如此做,此伤害-1,然后若没有与你势力相同的其他角色,你进行一次判定,若结果为红色,你摸一张牌。', + keshou_info:'当你受到伤害时,你可以弃置两张颜色相同的牌。若如此做,此伤害-1。然后若场上没有与你势力相同的其他角色,则你进行判定,若结果为红色,你摸一张牌。', zhuwei:'筑围', - zhuwei_info:'当你的判定牌生效后,若此牌为【杀】或【决斗】,你可以获得之,然后你可令当前回合角色本回合可额外使用一张【杀】,且手牌上限+1。', + zhuwei_info:'当你的判定牌生效后,若此牌为【杀】或【决斗】,你可以获得之。然后,你可令当前回合角色本回合内使用【杀】的次数上限和手牌上限+1。', gz_yuanshu:'袁术', gzweidi:'伪帝', - gzweidi_info:'出牌阶段限一次,你可以指定一名本回合从牌堆获得过牌的其他角色,然后选择一个“军令”,令其选择一项:执行该军令;或令你获得其所有手牌,然后交给其等量的牌。', + gzweidi_info:'出牌阶段限一次,你可以指定一名本回合从牌堆获得过牌的其他角色并选择一个“军令”,令其选择一项:执行该军令;或令你获得其所有手牌,然后交给其等量的牌。', gzyongsi:'庸肆', - gzyongsi_info:'锁定技,若场上没有【玉玺】,视为你装备之;当你成为【知己知彼】的目标时,你展示你的所有手牌。', + gzyongsi_info:'锁定技,若场上没有【玉玺】,则视为你装备了【玉玺】;当你成为【知己知彼】的目标时,你展示你的所有手牌。', //gzyongsi_eff1:'玉玺', //gzyongsi_eff2:'玉玺', gz_zhangxiu:'张绣', gzfudi:'附敌', - gzfudi_info:'当你受到伤害后,你可以交给伤害来源一张手牌。若如此做,你对其势力中的体力值最大且不小于你的一名角色造成一点伤害。', + gzfudi_info:'当你受到伤害后,你可以交给伤害来源一张手牌。若如此做,你对其势力中体力值最大且不小于你的一名角色造成一点伤害。', congjian:'从谏', - congjian_info:'锁定技,你于回合外造成的伤害,于回合内受到的伤害+1。', + congjian_info:'锁定技,当你于回合外造成伤害,或于回合内受到伤害时,此伤害+1。', gz_jun_caocao:'君曹操', jianan:'建安', jianan_info:'君主技,只要此武将处于明置状态,你便拥有“五子良将纛”。', @@ -7074,22 +7074,22 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ wuziliangjiangdao:'五子良将纛', wuziliangjiangdao_ab:'将纛', wuziliangjiangdao_bg:'纛', - wuziliangjiangdao_info:'魏势力角色的准备阶段开始时,其可以弃置一张牌。若如此做,其选择一张暗置的武将牌(若没有,则选择一张暗置),然后获得下列技能中的一项(其他角色已有的技能无法选择)且不能明置选择的武将牌直到你的下个回合开始:“突袭”,“巧变”,“骁果”,“节钺”,“断粮”。', + wuziliangjiangdao_info:'魏势力角色的准备阶段开始时,其可以弃置一张牌。若如此做,其选择一张暗置的武将牌(若没有,则选择一张暗置),然后获得下列技能中的一项(其他角色已有的技能无法选择)且不能明置选择的武将牌直到你的下个回合开始:〖突袭〗,〖巧变〗,〖骁果〗,〖节钺〗,〖断粮〗。', huibian:'挥鞭', huibian_info:'出牌阶段限一次,你可以选择一名魏势力角色和另一名已受伤的魏势力角色。若如此做,你对前者造成一点伤害,然后其摸两张牌,然后后者回复一点体力。', gzzongyu:'总御', - gzzongyu_info:'当【六龙骖驾】进入其他角色的装备区后,你可以用你装备区内所有坐骑牌(至少一张)与【六龙骖驾】交换位置。锁定技,当你使用一张坐骑牌后,若场上或弃牌堆中有【六龙骖驾】,则将【六龙骖驾】置入你的装备区。', + gzzongyu_info:'当【六龙骖驾】进入其他角色的装备区后,你可以将你装备区内所有坐骑牌(至少一张)与【六龙骖驾】交换位置。锁定技,当你使用坐骑牌后,若场上或弃牌堆中有【六龙骖驾】,则将【六龙骖驾】置入你的装备区。', xindiaodu:"调度", - "xindiaodu_info":"当与你势力相同的角色使用装备牌时,该角色可以摸一张牌;出牌阶段开始时,你可以获得与你势力相同的一名角色装备区里的一张牌,然后你可以将此牌交给另一名与你势力相同的其他角色。", + "xindiaodu_info":"当与你势力相同的角色使用装备牌时,其可以摸一张牌;出牌阶段开始时,你可以获得与你势力相同的一名角色装备区内的一张牌,然后你可以将此牌交给另一名与你势力相同的其他角色。", yigui:"役鬼", - "yigui_info":"当你第一次明置此武将牌时,你将剩余武将牌堆的两张牌扣置于游戏外,称为“魂”;你可以将一张“魂”亮出并置入剩余武将牌堆,视为你使用一张本回合你未以此法使用过的基本牌或普通锦囊牌,且目标须为与此“魂”势力相同或未确定势力的角色。 ", + "yigui_info":"当首次明置此武将牌时,你将剩余武将牌堆的两张牌扣置于游戏外,称为“魂”;你可以展示一张“魂”并将其置入剩余武将牌堆,视为使用了一张本回合内未以此法使用过的基本牌或普通锦囊牌(此牌目标须为与此“魂”势力相同或未确定势力的角色)。 ", "yigui_init":"役鬼", "yigui_init_info":"", "yigui_refrain":"役鬼", "yigui_refrain_info":"", jihun:"汲魂", - jihun_info:"当你受到伤害后,或与你势力不同的角色进入濒死状态被救回后,你可以将剩余武将牌堆的一张牌当“魂”扣置于游戏外。", + jihun_info:"当你受到伤害后,或与你势力不同的角色脱离濒死状态后,你可以将剩余武将牌堆的一张牌当做“魂”扣置于游戏外。", "xianqu_skill":"先驱", @@ -7110,43 +7110,43 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ "yinyang_add_info":"", "new_jushou":"据守", - "new_jushou_info":"结束阶段,你可以摸X张牌(X为亮明势力数),然后弃置一张手牌,若以此法弃置的是装备牌,则改为你使用之。若X大于2,则你将武将牌叠置。", + "new_jushou_info":"结束阶段,你可以摸X张牌(X为亮明势力数),然后弃置一张手牌。若以此法弃置的牌为装备牌,则改为使用此牌。若X大于2,则你将武将牌叠置。", "new_duanliang":"断粮", - "new_duanliang_info":"出牌阶段,你可以将一张黑色基本牌或黑色装备牌当做一张【兵粮寸断】使用。你使用【兵粮寸断】没有距离限制。若你对距离超过2的角色发动了“断粮”,则本回合不能再发动“断粮”。", + "new_duanliang_info":"出牌阶段,你可以将一张黑色基本牌或黑色装备牌当做【兵粮寸断】使用。你使用【兵粮寸断】没有距离限制。若你对距离超过2的角色发动了〖断粮〗,则本回合不能再发动〖断粮〗。", "new_shushen":"淑慎", "new_shushen_info":"当你回复1点体力后,你可令一名其他角色摸一张牌。", "new_fenji":"奋激", - "new_fenji_info":"一名角色的结束阶段,若其没有手牌,则你可以令其摸两张牌,然后你失去1点体力。", + "new_fenji_info":"一名角色的结束阶段开始时,若其没有手牌,你可以令其摸两张牌,然后你失去1点体力。", "new_luanji":"乱击", - "new_luanji_info":"你可以将两张与你本回合以此法转化的花色均不相同的手牌当【万箭齐发】使用,然后当一名与你势力相同的角色因响应此牌而打出【闪】时,该角色摸一张牌", + "new_luanji_info":"你可以将两张与你本回合以此法转化的花色均不相同的手牌当【万箭齐发】使用。当一名与你势力相同的角色因响应此牌而打出【闪】时,该角色摸一张牌。", "new_qingcheng":"倾城", - "new_qingcheng_info":"出牌阶段,你可以弃置一张黑色牌并选择一名武将牌均明置的其他角色,然后你暗置其一张武将牌。若此牌为装备牌,则你可以再选择一名角色并重复同样的操作。", + "new_qingcheng_info":"出牌阶段,你可以弃置一张黑色牌并选择一名武将牌均明置的其他角色,然后你暗置其一张武将牌。若你以此法弃置的牌为装备牌,则你可以暗置另一名武将牌均明置的角色的一张武将牌。", "new_kongcheng":"空城", - "new_kongcheng_info":"锁定技,若你没有手牌,1.当你成为【杀】或【决斗】的目标时,取消之;2.你的回合外,其他角色交给你的牌置于你的武将牌上,摸牌阶段你获得武将牌上的牌。", + "new_kongcheng_info":"锁定技,若你没有手牌,1.当你成为【杀】或【决斗】的目标时,取消之;2.你的回合外,其他角色交给你牌后,你将这些牌置于你的武将牌上。摸牌阶段开始时,你获得武将牌上的这些牌。", "new_keji":"克己", - "new_keji_info":"锁定技,若你没有在出牌阶段内使用过颜色不同的牌,则你本回合手牌上限+4。", + "new_keji_info":"锁定技,若你没有在出牌阶段内使用过颜色不同的牌,则你本回合的手牌上限+4。", "keji_add":"克己", "keji_add_info":"", "new_mouduan":"谋断", "new_mouduan_info":"结束阶段,若你于本回合内使用过四种花色或三种类别的牌,则你可以移动场上的一张牌。", "new_longdan":"龙胆", - "new_longdan_info":"你可以将【杀】当【闪】,【闪】当【杀】使用或打出。你发动龙胆时:若你的杀被【闪】抵消,则你可以对另一名角色造成1点伤害;若你的【闪】抵消了【杀】,则你可以令一名其他角色回复1点体力。(不能是【杀】的使用者)", + "new_longdan_info":"你可以将【杀】当【闪】,【闪】当【杀】使用或打出。当你发动〖龙胆〗使用的【杀】被【闪】抵消时,你可以对另一名角色造成1点伤害;当你发动〖龙胆〗使用的【闪】抵消了【杀】时,你可以令一名其他角色回复1点体力(不能是【杀】的使用者)。", "new_paoxiao":"咆哮", - "new_paoxiao_info":"锁定技,你使用【杀】无数量限制;你在一回合内使用第二张【杀】时,摸一张牌。", + "new_paoxiao_info":"锁定技,你使用【杀】无数量限制;当你于一回合内使用第二张【杀】时,摸一张牌。", "new_kurou":"苦肉", - "new_kurou_info":"出牌阶段限一次,你可以弃置一张牌,然后失去1点体力并摸三张牌,本回合你可以多使用一张【杀】。", + "new_kurou_info":"出牌阶段限一次,你可以弃置一张牌,然后失去1点体力并摸三张牌,本回合使用【杀】的次数上限+1。", "kurou_effect":"苦肉", "kurou_effect_info":"", "new_chuli":"除疠", - "new_chuli_info":"出牌阶段限一次,若你有牌,你可以选择至多三名势力各不相同或未确定势力的其他角色,你弃置你和这些角色的各一张牌。然后以此法弃置黑桃牌的角色各摸一张牌。", + "new_chuli_info":"出牌阶段限一次,若你有牌,你可以选择至多三名势力各不相同或未确定势力的其他角色,你弃置你和这些角色的各一张牌。然后所有以此法弃置过黑桃牌的角色各摸一张牌。", "baka_hunshang":"魂殇", - "baka_hunshang_info":"副将技,此武将牌减少半个阴阳鱼;准备阶段,若你的体力值不大于1,则你本回合获得“英姿”和“英魂”", + "baka_hunshang_info":"副将技,此武将牌减少半个阴阳鱼;准备阶段,若你的体力值不大于1,则你获得〖英姿〗和〖英魂〗直到回合结束。", "baka_yinghun":"英魂", "baka_yinghun_info":"准备阶段开始时,若你已受伤,你可令一名其他角色执行一项:摸X张牌,然后弃置一张牌;或摸一张牌,然后弃置X张牌(X为你已损失的体力值)", "baka_yingzi":"英姿", - "baka_yingzi_info":"锁定技,摸牌阶段摸牌时,你额外摸一张牌;你的手牌上限不会因体力值的减少而减少。", + "baka_yingzi_info":"锁定技,摸牌阶段摸,你多摸一张牌;你的手牌上限+X(X为你已损失的体力值)。", "new_yiji":"遗计", - "new_yiji_info":"当你受到伤害后,你可以观看牌堆顶的两张牌,并将其交给任意角色", + "new_yiji_info":"当你受到伤害后,你可以观看牌堆顶的两张牌,并将其交给任意角色。", "new_jieming":"节命", "new_jieming_info":"当你受到伤害后,你可以令一名角色将手牌摸至X张(X为其体力上限且最多为5)。", "new_fangzhu":"放逐", @@ -7156,7 +7156,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ "fengyin_vice":"封印[副将]", "fengyin_vice_info":"", "new_tieji":"铁骑", - "new_tieji_info":"当你使用【杀】指定一个目标后,你可以令其本回合一张明置的武将牌的非锁定技失效,然后你进行判定,除非该角色弃置与结果花色相同的一张牌,否则不能使用【闪】。", + "new_tieji_info":"当你使用【杀】指定目标后,你可以令其一张明置的武将牌上的非锁定技于本回合内失效,然后你进行判定,除非该角色弃置与结果花色相同的一张牌,否则其不能使用【闪】响应此【杀】。", hmkyuanyu:"远域", "hmkyuanyu_info":"锁定技,当你受到伤害时,若伤害来源与你的座次不相邻,防止此伤害。", hmkguishu:"鬼术", @@ -7183,21 +7183,21 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ qianhuan_bg:'幻', qianhuan_info:'当与你势力相同的一名角色受到伤害后,你可以将一张与你武将牌上花色均不同的牌置于你的武将牌上。当一名与你势力相同的角色成为基本牌或锦囊牌的唯一目标时,你可以移去一张“千幻”牌,取消之。', gzzhiman:'制蛮', - gzzhiman_info:'当你对其他角色造成伤害时,你可以防止此伤害。若如此做,你获得其装备区或判定区里的一张牌。然后若该角色与你势力相同,则该角色可以变更其副将。', + gzzhiman_info:'当你对其他角色造成伤害时,你可以防止此伤害。若如此做,你获得其装备区或判定区里的一张牌。然后若该角色与你势力相同,该角色可以变更副将。', gzdiancai:'典财', gzdiancai_info:'其他角色的出牌阶段结束时,若你于此阶段失去了x张或更多的牌,则你可以将手牌摸至体力上限。若如此做,你可以变更副将(x为你的体力值)。', xuanlve:'旋略', xuanlve_info:'当你失去装备区里的牌后,你可以弃置一名其他角色的一张牌。', yongjin:'勇进', - yongjin_info:'限定技,出牌阶段,你可以移动场上的至多三张装备牌。', + yongjin_info:'限定技,出牌阶段,你可以依次移动场上的至多三张装备牌。', lianzi:'敛资', - lianzi_info:'出牌阶段限一次,你可以弃置一张手牌,然后亮出牌堆顶X张牌(X为吴势力角色装备区里的牌和“烽火”的总和),获得其中所有与你弃置牌类别相同的牌,将其余的牌置入弃牌堆,若一次获得的牌超过三张,则你失去技能“敛资”并获得技能“制衡”。', + lianzi_info:'出牌阶段限一次,你可以弃置一张手牌,然后亮出牌堆顶X张牌(X为吴势力角色装备区里的牌和“烽火”的总和),获得其中所有与你弃置牌类别相同的牌,将其余的牌置入弃牌堆,若你以此法一次获得了三张或更多的牌,则你失去技能〖敛资〗并获得技能〖制衡〗。', gzqice:'奇策', gzqice_backup:'奇策', - gzqice_info:'出牌阶段限一次,你可以将所有手牌当任意一张普通锦囊牌使用,你不能以此法使用目标数超过X的牌(X为你的手牌数),然后你可以变更副将。', + gzqice_info:'出牌阶段限一次,你可以将所有手牌当做任意一张普通锦囊牌使用(此牌的目标数不能超过你的手牌数)。然后,你可以变更副将。', gzyuejian:'约俭', - gzyuejian_info:'锁定技,与你势力相同角色的弃牌阶段开始时,若其本回合未使用指定过其他势力的角色为目标,则该角色本回合手牌上限等同于其体力上限', + gzyuejian_info:'锁定技,与你势力相同角色的弃牌阶段开始时,若其本回合未使用牌指定过其他势力的角色为目标,则该角色本回合手牌上限+X(X为其已损失的体力值)。', gzxiongsuan:'凶算', gzxiongsuan_info:'限定技,出牌阶段,你可以弃置一张手牌并选择与你势力相同的一名角色,对其造成1点伤害,然后你摸三张牌。若该角色有已发动的限定技,则你选择其中一个限定技,此回合结束后视为该限定技未发动过。', gzhuashen:'化身', @@ -7206,14 +7206,14 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gzxinsheng_info:'当你受到伤害后,你可以从剩余武将牌堆中扣置一张牌加入到“化身”牌中。', jubao:'聚宝', - jubao_info:'锁定技,你装备区里的宝物牌不能被其他角色获得,结束阶段开始时,若场上或弃牌堆有【定澜夜明珠】,则你摸一张牌,然后获得装备区里有【定澜夜明珠】角色的一张牌。', + jubao_info:'锁定技,你装备区里的宝物牌不能被其他角色获得。结束阶段开始时,若场上或弃牌堆有【定澜夜明珠】,则你摸一张牌,然后获得装备区里有【定澜夜明珠】角色的一张牌。', jiahe:'嘉禾', jiahe_info:'君主技,只要此武将牌处于明置状态,你便拥有“缘江烽火图”。', jiahe_put:'烽火', jiahe_put_info:'出牌阶段限一次,你可以将一张装备牌置于“缘江烽火图”上,称之为“烽火”。', jiahe_skill:'缘江烽火图', yuanjiangfenghuotu:'缘江烽火图', - yuanjiangfenghuotu_info:'每名吴势力角色的出牌阶段限一次,该角色可以将一张装备牌置于“缘江烽火图”上,称之为“烽火”。
根据“烽火”的数量,所有吴势力角色可于其准备阶段开始时选择并获得其中一个技能直到回合结束:一张以上~英姿;两张以上~好施;三张以上~涉猎;四张以上~度势;五张以上~可额外选择一项。
锁定技,当你受到【杀】或锦囊牌造成的伤害后,你将一张“烽火”置入弃牌堆。', + yuanjiangfenghuotu_info:'每名吴势力角色的出牌阶段限一次,该角色可以将一张装备牌置于“缘江烽火图”上,称之为“烽火”。
根据“烽火”的数量,所有吴势力角色可于其准备阶段开始时选择并获得其中一个技能直到回合结束:一张以上:〖英姿〗;两张以上:〖好施〗;三张以上:〖涉猎〗;四张以上:〖度势〗;五张以上:可额外选择一项。
锁定技,当你受到【杀】或锦囊牌造成的伤害后,你将一张“烽火”置入弃牌堆。', yuanjiangfenghuotu_ab:'江图', yuanjiangfenghuotu_bg:'图', wuxin:'悟心', @@ -7221,66 +7221,66 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ hongfa:'弘法', hongfa_use:'天兵', hongfa_respond:'天兵', - hongfa_info:'君主技,锁定技,当此武将牌明置时,你获得“黄巾天兵符”;准备阶段开始时,若没有“天兵”,你将牌堆顶的X张牌置于“黄巾天兵符”上,称为“天兵”(X为群势力角色的数量)', + hongfa_info:'君主技,锁定技,此武将牌明置时,你获得“黄巾天兵符”;准备阶段开始时,若没有“天兵”,你将牌堆顶的X张牌置于“黄巾天兵符”上,称为“天兵”(X为群势力角色的数量)', wendao:'问道', - wendao_info:'出牌阶段限一次,你可以弃置一张不为【太平要术】的红色牌,获得弃牌堆里或场上的一张【太平要术】', + wendao_info:'出牌阶段限一次,你可以弃置一张不为【太平要术】的红色牌,然后获得弃牌堆或场上的一张【太平要术】。', huangjintianbingfu:'黄巾天兵符', huangjintianbingfu_ab:'兵符', huangjintianbingfu_bg:'符', - huangjintianbingfu_info:'锁定技 :当你计算群势力角色数时,每一张“天兵”均可视为一名群势力角色。
每当你失去体力时,你可改为将一张“天兵”置入弃牌堆。
与你势力相同的角色可将一张“天兵”当【杀】使用或打出。', + huangjintianbingfu_info:'锁定技 :当你计算群势力角色数时,每一张“天兵”均可视为一名群势力角色。
当你失去体力时,你可改为将一张“天兵”置入弃牌堆。
与你势力相同的角色可将一张“天兵”当作【杀】使用或打出。', wuhujiangdaqi:'五虎将大旗', wuhujiangdaqi_ab:'将旗', wuhujiangdaqi_bg:'旗', - wuhujiangdaqi_info:'存活的蜀势力角色的技能按以下规则改动:
武圣:将“红色牌”改为“任意牌”
咆哮:增加描述“你使用的【杀】无视其他角色的防具”
龙胆:增加描述“你每发动一次‘龙胆’便摸一张牌”
烈弓:增加描述“你的攻击范围+1”
铁骑:将“一张明置的武将牌”改为“所有明置的武将牌”', + wuhujiangdaqi_info:'存活的蜀势力角色的技能按以下规则改动:
武圣:将“红色牌”改为“任意牌”
咆哮:增加描述“你使用的【杀】无视其他角色的防具”
龙胆:增加描述“你发动〖龙胆〗使用或打出牌时摸一张牌”
烈弓:增加描述“你的攻击范围+1”
铁骑:将“一张明置的武将牌”改为“所有明置的武将牌”', zhangwu:'章武', zhangwu_info:'锁定技。当【飞龙夺凤】进入弃牌堆或其他角色的装备区时,你获得之。当你失去【飞龙夺风】时,展示之,然后将此牌置于牌堆底并摸两张牌', shouyue:'授钺', - shouyue_info:'君主技。只要此武将牌处于明置状态,你便拥有“五虎将大旗”', + shouyue_info:'君主技。只要此武将牌处于明置状态,你便拥有“五虎将大旗”。', jizhao:'激诏', jizhao_bg:'诏', - jizhao_info:'限定技。当你处于濒死状态时,你可以将手牌补至体力上限,体力回复至2点,失去技能“授钺”并获得技能“仁德”', + jizhao_info:'限定技。当你处于濒死状态时,你可以将手牌补至体力上限,体力回复至2点,失去技能〖授钺〗并获得技能〖仁德〗。', gzshoucheng:'守成', - gzshoucheng_info:'当与你势力相同的一名角色于其回合外失去最后手牌时,你可以令其摸一张牌', + gzshoucheng_info:'当与你势力相同的一名角色于其回合外失去手牌时,若其没有手牌,则你可以令其摸一张牌。', gzmingshi:'名士', - gzmingshi_info:'锁定技,当你受到伤害时,若伤害来源有暗置的武将牌,此伤害-1', + gzmingshi_info:'锁定技,当你受到伤害时,若伤害来源有暗置的武将牌,此伤害-1。', fengshi:'锋矢', fengshi_sha:'锋矢', - fengshi_info:'阵法技,在同一个围攻关系中,若你是围攻角色,则你或另一名围攻角色使用【杀】指定被围攻角色为目标后,可令该角色弃置装备区里的一张牌', + fengshi_info:'阵法技,在一个围攻关系中,若你是围攻角色,则你或另一名围攻角色使用【杀】指定被围攻角色为目标后,可令该角色弃置装备区内的一张牌。', gzsuishi:'随势', - gzsuishi_info:'锁定技,当其他角色进入濒死状态时,若伤害来源与你势力相同,你摸一张牌;当其他角色死亡时,若其与你势力相同,你失去1点体力', + gzsuishi_info:'锁定技,其他角色进入濒死状态时,若伤害来源与你势力相同,你摸一张牌;其他角色死亡时,若其与你势力相同,你失去1点体力。', baoling:'暴凌', baoling_info:'主将技,锁定技,出牌阶段结束时,若你有副将,则你移除副将,然后加3点体力上限,回复3点体力,失去技能〖暴凌〗并获得〖崩坏〗', yingyang:'鹰扬', - yingyang_info:'当你拼点的牌亮出后,你可以令此牌的点数+3或-3(至多为K,至少为1)', + yingyang_info:'当你的拼点牌亮出后,你可以令此牌的点数+3或-3(至多为K,至少为1)。', hunshang:'魂殇', hunshang_info:'副将技,此武将牌减少半个阴阳鱼;准备阶段,若你的体力值不大于1,则你本回合获得“英姿”和“英魂”', gzguixiu:'闺秀', - gzguixiu_info:'当你明置此武将牌时,你可以摸两张牌;当你移除此武将牌时,你可以回复1点体力', + gzguixiu_info:'当你明置此武将牌时,你可以摸两张牌;当你移除此武将牌时,你可以回复1点体力。', gzcunsi:'存嗣', - gzcunsi_info:'出牌阶段,你可以移除此武将牌并选择一名角色,然后其获得技能“勇决”,若你没有获得“勇决”,则获得“勇决”的角色摸两张牌', + gzcunsi_info:'出牌阶段,你可以移除此武将牌并选择一名角色,然后其获得技能〖勇决〗,若你选择的目标角色不是自己,则其摸两张牌。', gzyongjue:'勇决', - gzyongjue_info:'若与你势力相同的一名角色于其回合内使用的第一张牌为【杀】,则该角色可以在此【杀】结算完成后获得之', + gzyongjue_info:'与你势力相同的一名角色于其回合内使用【杀】结算完成后,若此牌是其本回合内使用的第一张牌,则其可以获得此牌对应的所有实体牌。', gzqianxi:'潜袭', gzqianxi_info:'准备阶段开始时,你可以进行判定,然后你选择距离为1的一名角色,直到回合结束,该角色不能使用或打出与结果颜色相同的手牌', gzshangyi:'尚义', - gzshangyi_info:'出牌阶段限一次,你可以令一名其他角色观看你的手牌。若如此做,你选择一项:1.观看其手牌并可以弃置其中的一张黑色牌;2.观看其所有暗置的武将牌', + gzshangyi_info:'出牌阶段限一次,你可以令一名其他角色观看你的手牌。若如此做,你选择一项:1.观看其手牌并可以弃置其中的一张黑色牌;2.观看其所有暗置的武将牌。', niaoxiang:'鸟翔', niaoxiang_sha:'鸟翔', - niaoxiang_info:'阵法技,在同一个围攻关系中,若你是围攻角色,则你或另一名围攻角色使用【杀】指定被围攻角色为目标后,你令该角色需依次使用两张【闪】才能抵消', + niaoxiang_info:'阵法技,在同一个围攻关系中,若你是围攻角色,则你或另一名围攻角色使用【杀】指定被围攻角色为目标后,该角色需依次使用两张【闪】才能抵消。', yicheng:'疑城', - yicheng_info:'当与你势力相同的一名角色成为【杀】的目标后,你可以令该角色摸一张牌然后弃置一张牌', + yicheng_info:'当与你势力相同的一名角色成为【杀】的目标后,你可以令该角色摸一张牌,然后弃置一张牌。', yizhi:'遗志', - yizhi_info:'副将技,此武将牌上单独的阴阳鱼个数-1。若你的主将拥有技能“观星”,则将其描述中的X改为5;若你的主将没有技能“观星”,则你拥有技能“观星”', + yizhi_info:'副将技,此武将牌减少半个阴阳鱼。若你的主将拥有技能〖观星〗,则将其描述中的X改为5;若你的主将没有技能〖观星〗,则你视为拥有技能〖观星〗。', tianfu:'天覆', - tianfu_info:'主将技,阵法技,若当前回合角色与你处于同一队列,你拥有技能“看破”', + tianfu_info:'主将技,阵法技,若当前回合角色与你处于同一队列,则你视为拥有技能〖看破〗。', ziliang:'资粮', - ziliang_info:'副将技,当与你势力相同的一名角色受到伤害后,你可以将一张“田”交给该角色', + ziliang_info:'副将技,当与你势力相同的一名角色受到伤害后,你可以将一张“田”交给该角色 ', gzjixi:'急袭', - gzjixi_info:'主将技,此武将牌减少半个阴阳鱼;你可以将一张“田”当【顺手牵羊】使用', + gzjixi_info:'主将技,此武将牌减少半个阴阳鱼。你可以将一张“田”当作【顺手牵羊】使用。', huyuan:'护援', - huyuan_info:'结束阶段开始时,你可以将一张装备牌置入一名角色的装备区,然后你可以弃置该角色距离为1的一名角色的一张牌', + huyuan_info:'结束阶段开始时,你可以将一张装备牌置入一名角色的装备区,然后你可以弃置该角色距离为1的一名角色的一张牌。', heyi:'鹤翼', - heyi_info:'阵法技,与你处于同一队列的其他角色防御距离+1', + heyi_info:'阵法技,与你处于同一队列的其他角色视为拥有技能【飞影】。', gz_shibing1wei:'魏兵', gz_shibing2wei:'魏兵', gz_shibing1shu:'蜀兵', @@ -7290,29 +7290,29 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gz_shibing1qun:'群兵', gz_shibing2qun:'群兵', gzduanchang:'断肠', - gzduanchang_info:'锁定技,当你死亡时,你令杀死你的角色失去一张武将牌的所有技能', + gzduanchang_info:'锁定技,当你死亡时,你令杀死你的角色失去一张武将牌上的所有技能。', gzweimu:'帷幕', - gzweimu_info:'锁定技,当你成为黑色锦囊牌的目标时,则取消之', + gzweimu_info:'锁定技,当你成为黑色锦囊牌的目标时,取消之。', gzqianxun:'谦逊', - gzqianxun_info:'锁定技,当你成为顺手牵羊或乐不思蜀的目标时,则取消之', + gzqianxun_info:'锁定技,当你成为【顺手牵羊】或【乐不思蜀】的目标时,取消之。', gzkongcheng:'空城', gzkongcheng_info:'锁定技,当你成为【杀】或【决斗】的目标时,若你没有手牌,则取消之', gzxiaoji:'枭姬', - gzxiaoji_info:'当你失去装备区里的牌后,你可以摸两张牌', + gzxiaoji_info:'当你失去装备区里的牌后,你可以摸两张牌。', gzrende:'仁德', gzrende_info:'出牌阶段,你可以将任意张手牌交给其他角色,然后若你于此阶段内给出第三张“仁德”牌时,你回复1点体力', gzzhiheng:'制衡', - gzzhiheng_info:'出牌阶段限一次,你可以弃置至多X张牌(X为你的体力上限),然后摸等量的牌', + gzzhiheng_info:'出牌阶段限一次,你可以弃置至多X张牌(X为你的体力上限),然后摸等量的牌。', duoshi:'度势', - duoshi_info:'出牌阶段限四次,你可以将一张红色手牌当【以逸待劳】使用。', + duoshi_info:'出牌阶段限四次,你可以将一张红色手牌当做【以逸待劳】使用。', gzxiaoguo:'骁果', gzxiaoguo_info:'其他角色的结束阶段开始时,你可以弃置一张基本牌,令该角色选择一项:1.弃置一张装备牌;2.受到你对其造成的1点伤害。', guozhan_default:"国战标准", - guozhan_zhen:"君临天下•阵", - guozhan_shi:"君临天下•势", - guozhan_bian:"君临天下•变", - guozhan_quan:"君临天下•权", + guozhan_zhen:"君临天下·阵", + guozhan_shi:"君临天下·势", + guozhan_bian:"君临天下·变", + guozhan_quan:"君临天下·权", guozhan_jun:"君主武将", guozhan_others:"其他", }, @@ -7833,6 +7833,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ next.target=target; next.num=num; next.setContent(function(){ + if(!player.storage.zhibi){ + player.storage.zhibi=[]; + } + player.storage.zhibi.add(target); var content,str=get.translation(target)+'的'; if(event.num==0||!target.isUnseen(1)){ content=[str+'主将',[[target.name1],'character']]; diff --git a/mode/identity.js b/mode/identity.js index 9db89b538..1d4f6a341 100644 --- a/mode/identity.js +++ b/mode/identity.js @@ -63,6 +63,9 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } game.prepareArena(8); } + else if(_status.mode=='purple'){ + game.prepareArena(8); + } else{ game.prepareArena(); } @@ -91,7 +94,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ ui.create.control('跳过向导',function(){ clear(); clear2(); - // game.resume(); + game.resume(); // lib.cheat.cfg(); // owidgets }); ui.create.control('继续',step2); @@ -197,6 +200,9 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ event.replacePile(); } } + else if(_status.mode=='purple'){ + lib.configOL.number=8; + } if(lib.configOL.number<2){ lib.configOL.number=2; } @@ -252,10 +258,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } var enhance_zhu=false; if(_status.connectMode){ - enhance_zhu=(_status.mode!='zhong'&&lib.configOL.enhance_zhu&&get.population('fan')>=3); + enhance_zhu=(_status.mode!='zhong'&&_status.mode!='purple'&&lib.configOL.enhance_zhu&&get.population('fan')>=3); } else{ - enhance_zhu=(_status.mode!='zhong'&&get.config('enhance_zhu')&&get.population('fan')>=3); + enhance_zhu=(_status.mode!='zhong'&&_status.mode!='purple'&&get.config('enhance_zhu')&&get.population('fan')>=3); } if(enhance_zhu){ var skill; @@ -295,7 +301,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ _status.videoInited=true; game.addVideo('init',null,info); "step 6" - game.gameDraw(_status.firstAct2||game.zhong||game.zhu||_status.firstAct||game.me); + game.gameDraw(_status.firstAct2||game.zhong||game.zhu||_status.firstAct||game.me,function(player){ + if(_status.mode=='purple'&&player.seatNum>5) return 5; + return 4; + }); if(_status.connectMode&&lib.configOL.change_card) game.replaceHandcards(game.players.slice(0)); "step 7" game.phaseLoop(_status.firstAct2||game.zhong||game.zhu||_status.firstAct||game.me); @@ -307,11 +316,14 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ var player=lib.playerOL[i]; state[i]={identity:player.identity}; if(player==game.zhu){ - state[i].zhu=player.isZhu?true:false; + state[i].zhu=true; } if(player==game.zhong){ state[i].zhong=true; } + if(player.isZhu){ + state[i].isZhu=true; + } if(player.special_identity){ state[i].special_identity=player.special_identity; } @@ -324,6 +336,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ var player=lib.playerOL[i]; if(player){ player.identity=state[i].identity; + if(state[i].identity=='rZhu'||state[i].identity=='bZhu') game[state[i].identity]=player; if(state[i].special_identity){ player.special_identity=state[i].special_identity; if(player.node.dieidentity){ @@ -331,9 +344,11 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ player.node.identity.firstChild.innerHTML=get.translation(state[i].special_identity+'_bg'); } } - if(typeof state[i].zhu=='boolean'){ + if(state[i].zhu){ game.zhu=player; - player.isZhu=state[i].zhu; + } + if(state[i].isZhu){ + player.isZhu=true; } if(state[i].zhong){ game.zhong=player; @@ -366,7 +381,22 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ getIdentityList:function(player){ if(player.identityShown) return; if(player==game.me) return; - if(_status.mode=='zhong'){ + if(_status.mode=='purple'){ + if(_status.yeconfirm&&['rNei','bNei'].contains(game.me.identity)&&['rNei','bNei'].contains(player.identity)) return; + if(player.identity.slice(0,1)=='r') return { + cai2:'猜', + rZhong:'忠', + rNei:'内', + rYe:'野', + } + return { + cai:'猜', + bZhong:'忠', + bNei:'内', + bYe:'野', + } + } + else if(_status.mode=='zhong'){ if(player.fanfixed) return; if(game.zhu&&game.zhu.isZhu){ return { @@ -402,7 +432,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ case 'zhong':list[i]='忠臣';break; case 'nei':list[i]='内奸';break; case 'zhu':list[i]='主公';break; - case 'cai':list[i]='未知';break; + case 'cai':case 'cai2':list[i]='未知';break; + case 'rZhong':case 'bZhong':list[i]='前锋';break; + case 'rNei':case 'bNei':list[i]='细作';break; + case 'rYe':case 'bYe':list[i]='野心家';break; } } }, @@ -472,6 +505,64 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ _status.brawl.checkResult(); return; } + else if(_status.mode=='purple'){ + var winner=[]; + var loser=[]; + var ye=game.filterPlayer(function(current){ + return ['rYe','bYe'].contains(current.identity); + }); + var red=game.filterPlayer(function(current){ + return ['rZhu','rZhong','bNei'].contains(current.identity); + }); + var blue=game.filterPlayer(function(current){ + return ['bZhu','bZhong','rNei'].contains(current.identity); + }) + game.countPlayer2(function(current){ + switch(current.identity){ + case 'rZhu': + if(blue.length+ye.length==0) winner.push(current); + if(current.isDead()) loser.push(current); + break; + case 'rZhong': case 'bNei': + if(blue.length+ye.length==0) winner.push(current); + if(game.rZhu.isDead()) loser.push(current); + break; + case 'bZhu': + if(red.length+ye.length==0) winner.push(current); + if(current.isDead()) loser.push(current); + break; + case 'bZhong': case 'rNei': + if(red.length+ye.length==0) winner.push(current); + if(game.bZhu.isDead()) loser.push(current); + break; + default: + if(red.length+blue.length==0) winner.push(current); + else if(game.rZhu.isDead()&&game.bZhu.isDead()) loser.push(current); + break; + } + }); + var winner2=winner.slice(0); + var loser2=loser.slice(0); + for(var i=0;i0||loser.length==game.players.length){ + game.broadcastAll(function(winner,loser){ + _status.winner=winner; + _status.loser=loser; + },winner,loser); + if(loser.length==game.players.length) game.over('游戏平局'); + else if(winner2.contains(game.me)){ + if(loser2.contains(game.me)) game.over(false); + else game.over(true); + } + else game.over(false); + } + return; + } if(!game.zhu){ if(get.population('fan')==0){ switch(game.me.identity){ @@ -521,6 +612,11 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } }, checkOnlineResult:function(player){ + if(_status.winner&&_status.loser){ + if(_status.loser.length==game.players.length) return null; + if(_status.loser.contains(player)) return false; + if(_status.winner.contains(player)) return true; + } if(game.zhu.isAlive()){ return (player.identity=='zhu'||player.identity=='zhong'); } @@ -531,7 +627,324 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ return player.identity=='fan'; } }, + chooseCharacterPurpleOL:function(){ + var next=game.createEvent('chooseCharacter',false); + next.setContent(function(){ + "step 0" + ui.arena.classList.add('choose-character'); + "step 1" + var list=['rZhu','rZhong','rNei','rYe']; + var list2=['bZhu','bZhong','bNei','bYe']; + list.randomSort(); + list2.randomSort(); + var identityList=list.concat(list2); + var num=get.rand(0,7); + var players=game.players.slice(0); + for(var i=0;i0.95) this.ai.shown=0.95; if(this.ai.shown<-0.5) this.ai.shown=-0.5; + if(_status.mode=='purple') return; var marknow=(!_status.connectMode&&this!=game.me&&get.config('auto_mark_identity')&&this.ai.identity_mark!='finished'); // if(true){ @@ -1833,6 +2320,11 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ if(num){ return x/num; } + if(_status.mode=='purple'){ + var real=get.realAttitude(from,to); + if(from==to||to.identityShown||(_status.yeconfirm&&['rYe','bYe'].contains(to.identity)&&['rYe','bYe'].contains(to.identity))) return real*1.1; + return ((to.ai.shown+0.1)*real+(from.identity.slice(0,1)==to.identity.slice(0,1)?3:-3)*(1-to.ai.shown)) + } var difficulty=0; if(to==game.me) difficulty=2-get.difficulty(); if(from==to||to.identityShown||(from.storage.dongcha==to)){ @@ -1864,6 +2356,25 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } }, realAttitude:function(from,to){ + if(_status.mode=='purple'){ + if(['rZhu','rZhong','bNei'].contains(from.identity)){ + if(to.identity=='rZhu') return 8; + if(['rZhong','bNei'].contains(to.identity)) return 7; + return -7; + } + else if(['bZhu','bZhong','rNei'].contains(from.identity)){ + if(to.identity=='bZhu') return 8; + if(['bZhong','rNei'].contains(to.identity)) return 7; + return -7; + } + else{ + if(['rYe','bYe'].contains(to.identity)) return 7; + if(['rZhu','bZhu'].contains(to.identity)&&game.hasPlayer(function(current){ + return ['rZhong','bZhong','rNei','bNei'].contains(current.identity); + })) return 6.5; + return -7; + } + } if(!game.zhu){ if(from.identity=='nei'||to.identity=='nei') return -1; if(from.identity==to.identity) return 6; @@ -2095,6 +2606,28 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + yexinbilu:{ + enable:'phaseUse', + filter:function(event,player){ + return player.identity=='rYe'||player.identity=='bYe'; + }, + skillAnimation:'legend', + animationColor:'thunder', + content:function(){ + game.removeGlobalSkill('yexinbilu'); + player.yexinbilu(); + }, + ai:{ + order:10, + result:{ + player:function(player){ + return 1-game.countPlayer(function(current){ + return current!=player&&(current.identity=='rYe'||current.identity=='bYe')&&(current==game.me||current.isOnline()); + }) + }, + }, + }, + }, identity_junshi:{ name:'军师', mark:true, @@ -2438,10 +2971,15 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } }, help:{ - '身份模式':'
选项
  • 加强主公
    反贼人数多于2时主公会额外增加一个技能(每个主公的额外技能固定,非常备主公增加天命)
  • 特殊身份
    • 军师:忠臣身份。只要军师存活,主公在准备阶段开始时,可以观看牌堆顶的三张牌,然后将这些牌以任意顺序置于牌堆顶或牌堆底
    • 大将:忠臣身份。只要大将存活,主公手牌上限+1
    • 贼首:反贼身份,只要贼首存活,主公手牌上限-1
'+ - '
明忠
  • 本模式需要8名玩家进行游戏,使用的身份牌为:1主公、2忠臣、4反贼和1内奸。游戏开始时,每名玩家随机获得一个身份,由系统随机选择一名忠臣身份的玩家亮出身份(将忠臣牌正面朝上放在面前),其他身份(包括主公)的玩家不亮出身份。
  • '+ + '身份模式':'
    选项
    • 加强主公
      反贼人数多于2时主公会额外增加一个技能(每个主公的额外技能固定,非常备主公增加天命)
    • 特殊身份
      • 军师:忠臣身份。只要军师存活,主公在准备阶段开始时,可以观看牌堆顶的三张牌,然后将这些牌以任意顺序置于牌堆顶或牌堆底
      • 大将:忠臣身份。只要大将存活,主公手牌上限+1
      • 贼首:反贼身份,只要贼首存活,主公手牌上限-1
    ', + '明忠模式':'
    明忠模式(忠胆英杰)
    • 本模式需要8名玩家进行游戏,使用的身份牌为:1主公、2忠臣、4反贼和1内奸。游戏开始时,每名玩家随机获得一个身份,由系统随机选择一名忠臣身份的玩家亮出身份(将忠臣牌正面朝上放在面前),其他身份(包括主公)的玩家不亮出身份。
    • '+ '首先由亮出身份的忠臣玩家随机获得六张武将牌,挑选一名角色,并将选好的武将牌展示给其他玩家。之后其余每名玩家随机获得三张武将牌,各自从其中挑选一张同时亮出
    • '+ '亮出身份牌的忠臣增加1点体力上限。角色濒死和死亡的结算及胜利条件与普通身份局相同。', + '3v3v2':'
      3v3v2模式
      • 游戏准备
        本模式需要8名玩家进行游戏。游戏开始前,所有玩家随机分成两组,每组四人,分别称为「冷色阵营」和「暖色阵营」,然后分发身份牌,抽取到「主帅」身份的玩家亮出身份牌。'+ + '
      • 身份牌
        每组的身份分为四种。
        主帅(主)和前锋(忠):联合对方阵营的细作,击杀己方细作,对方阵营的主帅和前锋以及所有的野心家。
        细作(内):帮助对方阵营的主帅和前锋,击杀对方细作,己方阵营的主帅和前锋以及所有的野心家。
        野心家(野):联合对方阵营中的野心家,击杀所有其他角色,成为最后的生还者。
        '+ + '
      • 胜负判定
        冷色主帅,先锋和暖色细作在所有其他角色全部阵亡后视为胜利,在冷色主帅阵亡后视为游戏失败。
        暖色主帅,先锋和冷色细作在所有其他角色阵亡后视为胜利,在暖色主帅阵亡后视为失败。
        野心家在所有不为野心家的角色阵亡后视为胜利,在双方主帅全部阵亡而有非野心家角色存活时失败。
        当有角色阵亡后,若有角色满足胜利条件,游戏结束。若所有角色均满足失败条件,则游戏平局。若一名角色满足失败条件,即使其满足胜利条件,也视为游戏失败。
        '+ + '
      • 游戏流程
        在「游戏准备」中的工作完成后,冷色主帅选择一个势力,然后暖色主帅选择一个其他势力,作为双方各自的势力将池。
        双方主帅从各自的势力将池中获得两张常备主公武将牌和四张非常备主公武将牌,然后选择一张作为武将牌,将其他的武将牌放回势力将池并洗混。然后双方的其他玩家从各自的势力将池中随机获得五张武将牌,选择一张作为自己的武将牌。
        暖色主帅成为游戏的一号位,双方主帅各加1点体力和体力上限。七号位和八号位的起始手牌+1。
        当场上第一次有玩家死亡时,野心家确认彼此的身份牌,然后获得技能〖野心毕露〗:出牌阶段,你可以明置身份牌,加1点体力上限和体力值。若如此做,所有的野心家失去技能〖野心毕露〗
        '+'
      • 击杀奖惩
        杀死颜色不同的主帅的角色回复1点体力,杀死颜色不同的先锋的角色摸两张牌,杀死颜色相同的细作的角色摸三张牌,杀死颜色相同的先锋的主帅弃置所有手牌。
        '+ + '
      • 制作团队
        游戏出品:紫星居
        游戏设计:食茸貳拾肆
        游戏开发:食茸貳拾肆、紫髯的小乔、聆星Mine、空城琴音依旧弥漫、丽景原同志、雪之彩翼、拉普拉斯、明月照沟渠
        程序化:无名杀
        鸣谢:荆哲、魔风、萨巴鲁酱、这就是秋夜
    ', } }; });