diff --git a/audio/skill/qice_backup1.mp3 b/audio/skill/qice_backup1.mp3 index 2c24b22e0..983385f69 100644 Binary files a/audio/skill/qice_backup1.mp3 and b/audio/skill/qice_backup1.mp3 differ diff --git a/audio/skill/qice_backup2.mp3 b/audio/skill/qice_backup2.mp3 index daba12d33..7e04abeb8 100644 Binary files a/audio/skill/qice_backup2.mp3 and b/audio/skill/qice_backup2.mp3 differ diff --git a/audio/skill/ruoyu1.mp3 b/audio/skill/ruoyu1.mp3 index 75a2fdf46..b0d1f14e0 100755 Binary files a/audio/skill/ruoyu1.mp3 and b/audio/skill/ruoyu1.mp3 differ diff --git a/audio/skill/ruoyu2.mp3 b/audio/skill/ruoyu2.mp3 index 55df8908c..63c6289a9 100755 Binary files a/audio/skill/ruoyu2.mp3 and b/audio/skill/ruoyu2.mp3 differ diff --git a/audio/skill/zhiyu1.mp3 b/audio/skill/zhiyu1.mp3 index 13214fb11..75a2fdf46 100644 Binary files a/audio/skill/zhiyu1.mp3 and b/audio/skill/zhiyu1.mp3 differ diff --git a/audio/skill/zhiyu2.mp3 b/audio/skill/zhiyu2.mp3 index 5d4bf150a..55df8908c 100644 Binary files a/audio/skill/zhiyu2.mp3 and b/audio/skill/zhiyu2.mp3 differ diff --git a/card/sp.js b/card/sp.js index ff4216816..d8c143282 100644 --- a/card/sp.js +++ b/card/sp.js @@ -1,702 +1,702 @@ -'use strict'; -game.import('card',function(lib,game,ui,get,ai,_status){ - return { - name:'sp', - connect:true, - card:{ - jinchan:{ - audio:true, - fullskin:true, - wuxieable:true, - type:'trick', - notarget:true, - global:['g_jinchan','g_jinchan2'], - content:function(){ - var evt=event.getParent(3)._trigger; - if(evt.jinchan){ - var type=get.type(evt.card,'trick'); - if(type=='basic'||type=='trick'){ - evt.cancel(); - } - } - player.draw(2); - }, - ai:{ - useful:function(){ - var player=_status.event.player; - var nj=player.countCards('h','jinchan'); - var num=player.getHandcardLimit(); - if(nj>=num){ - return 10; - } - if(nj==num-1){ - return 6; - } - return 1; - }, - result:{ - player:1 - }, - value:5 - } - }, - qijia:{ - audio:true, - fullskin:true, - type:'trick', - enable:true, - filterTarget:function(card,player,target){ - if(target==player) return false; - if(target.getEquip(5)){ - return target.countCards('e')>1; - } - else{ - return target.countCards('e')>0; - } - }, - content:function(){ - 'step 0' - var e1=[],e2=[]; - var he=target.getCards('he'); - for(var i=0;ie2.length||(target.hp>=3&&Math.random()<0.3)){ - choice=1; - } - event.e1=e1; - event.e2=e2; - target.chooseControl(choice).set('choiceList',['弃置'+get.translation(e1),'弃置'+get.translation(e2)]); - } - else{ - if(e1.length){ - target.discard(e1); - } - else if(e2.length){ - target.discard(e2); - } - event.finish(); - } - 'step 1' - if(result.index==0){ - target.discard(event.e1); - } - else{ - target.discard(event.e2); - } - }, - ai:{ - order:9.01, - useful:1, - value:5, - result:{ - target:function(player,target){ - var num1=0,num2=0; - for(var i=1;i<=4;i++){ - var card=target.getEquip(i); - if(card){ - if(i==1||i==4){ - num1+=get.equipValue(card); - } - else{ - num2+=get.equipValue(card); - } - } - } - var num; - if(num1==0){ - num=num2; - } - else if(num2==0){ - num=num1; - } - else{ - num=Math.min(num1,num2); - } - if(num>0){ - return -0.8-num/10; - } - else{ - return 0; - } - } - }, - tag:{ - loseCard:1, - discard:1 - } - } - }, - fulei:{ - audio:true, - fullskin:true, - type:'delay', - cardnature:'thunder', - modTarget:function(card,player,target){ - return lib.filter.judge(card,player,target); - }, - enable:function(card,player){ - return player.canAddJudge(card); - }, - filterTarget:function(card,player,target){ - return (lib.filter.judge(card,player,target)&&player==target); - }, - selectTarget:[-1,-1], - judge:function(card){ - if(get.suit(card)=='spade') return -6; - return 0; - }, - effect:function(){ - 'step 0' - if(result.bool==false){ - if(!card.storage.fulei){ - card.storage.fulei=1; - } - else{ - card.storage.fulei++; - } - player.damage(card.storage.fulei,'thunder','nosource'); - } - 'step 1' - player.addJudgeNext(card); - }, - cancel:function(){ - player.addJudgeNext(card); - }, - ai:{ - basic:{ - order:1, - useful:0, - value:0, - }, - result:{ - target:function(player,target){ - return lib.card.shandian.ai.result.target(player,target); - } - }, - } - }, - qibaodao:{ - audio:true, - fullskin:true, - type:'equip', - subtype:'equip1', - skills:['qibaodao','qibaodao2'], - distance:{attackFrom:-1}, - ai:{ - equipValue:function(card,player){ - if(game.hasPlayer(function(current){ - return player.canUse('sha',current)&¤t.isHealthy()&&get.attitude(player,current)<0; - })){ - return 5; - } - return 3; - }, - basic:{ - equipValue:5 - } - }, - }, - zhungangshuo:{ - audio:true, - fullskin:true, - type:'equip', - subtype:'equip1', - skills:['zhungangshuo'], - distance:{attackFrom:-2}, - ai:{ - equipValue:4 - }, - }, - lanyinjia:{ - fullskin:true, - type:'equip', - subtype:'equip2', - skills:['lanyinjia','lanyinjia2'], - ai:{ - equipValue:6 - } - }, - yinyueqiang:{ - audio:true, - fullskin:true, - type:'equip', - subtype:'equip1', - distance:{attackFrom:-2}, - ai:{ - basic:{ - equipValue:4 - } - }, - skills:['yinyueqiang'] - }, - - du:{ - type:'basic', - fullskin:true, - toself:true, - ai:{ - value:-5, - useful:6, - result:{ - player:function(player,target){ - if(player.hasSkillTag('usedu')) return 5; - return -1; - } - }, - order:7.5 - }, - enable:true, - modTarget:true, - global:'g_du', - filterTarget:function(card,player,target){ - return target==player; - }, - delay:false, - content:function(){}, - selectTarget:-1 - }, - shengdong:{ - audio:true, - fullskin:true, - enable:function(){ - return game.countPlayer()>2; - }, - chongzhu:function(){ - return game.countPlayer()<=2; - }, - singleCard:true, - type:'trick', - selectTarget:2, - complexTarget:true, - multitarget:true, - targetprompt:['给一张牌','得两张牌'], - filterTarget:function(card,player,target){ - return target!=player; - }, - content:function(){ - 'step 0' - if(!player.countCards('h')){ - event.finish(); - } - else{ - event.target1=target; - event.target2=event.addedTarget; - player.chooseCard('h','将一张手牌交给'+get.translation(event.target1),true); - } - 'step 1' - player.$giveAuto(result.cards,event.target1); - event.target1.gain(result.cards,player); - 'step 2' - if(!event.target1.countCards('h')){ - event.finish(); - } - else{ - var he=event.target1.getCards('he'); - if(he.length<=2){ - event.directresult=he; - } - else{ - event.target1.chooseCard('he','将两张牌交给'+get.translation(event.target2),2,true); - } - } - 'step 3' - if(!event.directresult){ - event.directresult=result.cards; - } - event.target1.$giveAuto(event.directresult,event.target2); - event.target2.gain(event.directresult,event.target1); - }, - ai:{ - order:2.5, - value:[4,1], - useful:1, - wuxie:function(){ - return 0; - }, - result:{ - target:function(player,target){ - var ok=false; - var hs=player.getCards('h'); - if(hs.length<=1) return 0; - for(var i=0;i1).set('prompt2','弃置一张非基本牌,或取消并弃置两张牌'); - event.more=true; - } - else{ - target.chooseToDiscard('he',2,true).set('ai',get.disvalue2); - } - 'step 2' - if(event.more&&!result.bool){ - target.chooseToDiscard('he',2,true).set('ai',get.disvalue2); - } - }, - ai:{ - order:7, - useful:4, - value:10, - tag:{ - draw:2 - }, - result:{ - target:function(player,target){ - if(target.hasJudge('lebu')) return 0; - return Math.max(1,2-target.countCards('h')/10); - } - } - } - }, - caomu:{ - audio:true, - fullskin:true, - enable:true, - type:'delay', - filterTarget:function(card,player,target){ - return (lib.filter.judge(card,player,target)&&player!=target); - }, - judge:function(card){ - if(get.suit(card)=='club') return 0; - return -3; - }, - effect:function(){ - if(result.bool==false){ - player.addTempSkill('caomu_skill'); - } - }, - ai:{ - basic:{ - order:1, - useful:1, - value:4.5, - }, - result:{ - player:function(player,target){ - return game.countPlayer(function(current){ - if(get.distance(target,current)<=1&¤t!=target){ - var att=get.attitude(player,current); - if(att>3){ - return 1.1; - } - else if(att>0){ - return 1; - } - else if(att<-3){ - return -1.1; - } - else if(att<0){ - return -1; - } - } - }); - }, - target:function(player,target){ - if(target.hasJudge('bingliang')) return 0; - return -1.5/Math.sqrt(target.countCards('h')+1); - } - }, - } - } - }, - skill:{ - lanyinjia:{ - equipSkill:true, - enable:['chooseToUse','chooseToRespond'], - filterCard:true, - viewAs:{name:'shan'}, - viewAsFilter:function(player){ - if(!player.countCards('h')) return false; - }, - prompt:'将一张手牌当闪使用或打出', - check:function(card){ - return 6-get.value(card); - }, - ai:{ - respondShan:true, - skillTagFilter:function(player){ - if(!player.countCards('h')) return false; - }, - effect:{ - target:function(card,player,target,current){ - if(get.tag(card,'respondShan')&¤t<0&&target.countCards('h')) return 0.59 - } - }, - order:4, - useful:-0.5, - value:-0.5 - } - }, - lanyinjia2:{ - equipSkill:true, - trigger:{player:'damageBegin4'}, - forced:true, - filter:function(event,player){ - return event.card&&event.card.name=='sha'&&player.getEquip('lanyinjia'); - }, - content:function(){ - var card=player.getEquip('lanyinjia'); - if(card){ - player.discard(card); - } - }, - }, - zhungangshuo:{ - equipSkill:true, - trigger:{player:'useCardToPlayered'}, - logTarget:'target', - filter:function(event,player){ - return event.card.name=='sha'&&(event.player.countCards('h')||player.countCards('h')); - }, - check:function(event,player){ - var target=event.target; - if(get.attitude(player,target)>=0) return false; - if(player.hasCard(function(card){ - return get.value(card)>=8; - })){ - return false; - } - var n1=event.target.countCards('h'); - return n1>0&&n1<=player.countCards('h'); - }, - content:function(){ - 'step 0' - game.delayx(); - 'step 1' - trigger.target.discardPlayerCard('h',player,true); - 'step 2' - player.discardPlayerCard('h',trigger.target,true); - } - }, - qibaodao:{ - equipSkill:true, - trigger:{source:'damageBegin1'}, - forced:true, - filter:function(event){ - return event.card&&event.card.name=='sha'&&event.player.isHealthy(); - }, - content:function(){ - trigger.num++; - }, - ai:{ - effect:{ - player:function(card,player,target){ - if(card.name=='sha'&&target.isHealthy()&&get.attitude(player,target)>0){ - return [1,-2]; - } - } - } - } - }, - qibaodao2:{ - inherit:'qinggang_skill', - }, - g_jinchan:{ - cardSkill:true, - trigger:{target:'useCardToBefore'}, - forced:true, - popup:false, - filter:function(event,player){ - if(event.player==player) return false; - if(event.getParent().directHit.contains(player)) return false; - var num=player.countCards('h','jinchan'); - return num&&num==player.countCards('h'); - }, - content:function(){ - 'step 0' - player.chooseToUse({name:'jinchan'},'是否对'+get.translation(trigger.card)+'使用【金蝉脱壳】?').set('ai1',function(card){ - return _status.event.bool; - }).set('bool',-get.effect(player,trigger.card,trigger.player,player)).set('respondTo',[trigger.player,trigger.card]); - trigger.jinchan=true; - 'step 1' - delete trigger.jinchan; - } - }, - g_jinchan2:{ - trigger:{player:'discardAfter'}, - forced:true, - filter:function(event,player){ - for(var i=0;i=num){ + return 10; + } + if(nj==num-1){ + return 6; + } + return 1; + }, + result:{ + player:1 + }, + value:5 + } + }, + qijia:{ + audio:true, + fullskin:true, + type:'trick', + enable:true, + filterTarget:function(card,player,target){ + if(target==player) return false; + if(target.getEquip(5)){ + return target.countCards('e')>1; + } + else{ + return target.countCards('e')>0; + } + }, + content:function(){ + 'step 0' + var e1=[],e2=[]; + var he=target.getCards('he'); + for(var i=0;ie2.length||(target.hp>=3&&Math.random()<0.3)){ + choice=1; + } + event.e1=e1; + event.e2=e2; + target.chooseControl(choice).set('choiceList',['弃置'+get.translation(e1),'弃置'+get.translation(e2)]); + } + else{ + if(e1.length){ + target.discard(e1); + } + else if(e2.length){ + target.discard(e2); + } + event.finish(); + } + 'step 1' + if(result.index==0){ + target.discard(event.e1); + } + else{ + target.discard(event.e2); + } + }, + ai:{ + order:9.01, + useful:1, + value:5, + result:{ + target:function(player,target){ + var num1=0,num2=0; + for(var i=1;i<=4;i++){ + var card=target.getEquip(i); + if(card){ + if(i==1||i==4){ + num1+=get.equipValue(card); + } + else{ + num2+=get.equipValue(card); + } + } + } + var num; + if(num1==0){ + num=num2; + } + else if(num2==0){ + num=num1; + } + else{ + num=Math.min(num1,num2); + } + if(num>0){ + return -0.8-num/10; + } + else{ + return 0; + } + } + }, + tag:{ + loseCard:1, + discard:1 + } + } + }, + fulei:{ + audio:true, + fullskin:true, + type:'delay', + cardnature:'thunder', + modTarget:function(card,player,target){ + return lib.filter.judge(card,player,target); + }, + enable:function(card,player){ + return player.canAddJudge(card); + }, + filterTarget:function(card,player,target){ + return (lib.filter.judge(card,player,target)&&player==target); + }, + selectTarget:[-1,-1], + judge:function(card){ + if(get.suit(card)=='spade') return -6; + return 0; + }, + effect:function(){ + 'step 0' + if(result.bool==false){ + if(!card.storage.fulei){ + card.storage.fulei=1; + } + else{ + card.storage.fulei++; + } + player.damage(card.storage.fulei,'thunder','nosource'); + } + 'step 1' + player.addJudgeNext(card); + }, + cancel:function(){ + player.addJudgeNext(card); + }, + ai:{ + basic:{ + order:1, + useful:0, + value:0, + }, + result:{ + target:function(player,target){ + return lib.card.shandian.ai.result.target(player,target); + } + }, + } + }, + qibaodao:{ + audio:true, + fullskin:true, + type:'equip', + subtype:'equip1', + skills:['qibaodao','qibaodao2'], + distance:{attackFrom:-1}, + ai:{ + equipValue:function(card,player){ + if(game.hasPlayer(function(current){ + return player.canUse('sha',current)&¤t.isHealthy()&&get.attitude(player,current)<0; + })){ + return 5; + } + return 3; + }, + basic:{ + equipValue:5 + } + }, + }, + zhungangshuo:{ + audio:true, + fullskin:true, + type:'equip', + subtype:'equip1', + skills:['zhungangshuo'], + distance:{attackFrom:-2}, + ai:{ + equipValue:4 + }, + }, + lanyinjia:{ + fullskin:true, + type:'equip', + subtype:'equip2', + skills:['lanyinjia','lanyinjia2'], + ai:{ + equipValue:6 + } + }, + yinyueqiang:{ + audio:true, + fullskin:true, + type:'equip', + subtype:'equip1', + distance:{attackFrom:-2}, + ai:{ + basic:{ + equipValue:4 + } + }, + skills:['yinyueqiang'] + }, + + du:{ + type:'basic', + fullskin:true, + toself:true, + ai:{ + value:-5, + useful:6, + result:{ + player:function(player,target){ + if(player.hasSkillTag('usedu')) return 5; + return -1; + } + }, + order:7.5 + }, + enable:true, + modTarget:true, + global:'g_du', + filterTarget:function(card,player,target){ + return target==player; + }, + delay:false, + content:function(){}, + selectTarget:-1 + }, + shengdong:{ + audio:true, + fullskin:true, + enable:function(){ + return game.countPlayer()>2; + }, + chongzhu:function(){ + return game.countPlayer()<=2; + }, + singleCard:true, + type:'trick', + selectTarget:2, + complexTarget:true, + multitarget:true, + targetprompt:['给一张牌','得两张牌'], + filterTarget:function(card,player,target){ + return target!=player; + }, + content:function(){ + 'step 0' + if(!player.countCards('h')){ + event.finish(); + } + else{ + event.target1=target; + event.target2=event.addedTarget; + player.chooseCard('h','将一张手牌交给'+get.translation(event.target1),true); + } + 'step 1' + player.$giveAuto(result.cards,event.target1); + event.target1.gain(result.cards,player); + 'step 2' + if(!event.target1.countCards('h')){ + event.finish(); + } + else{ + var he=event.target1.getCards('he'); + if(he.length<=2){ + event.directresult=he; + } + else{ + event.target1.chooseCard('he','将两张牌交给'+get.translation(event.target2),2,true); + } + } + 'step 3' + if(!event.directresult){ + event.directresult=result.cards; + } + event.target1.$giveAuto(event.directresult,event.target2); + event.target2.gain(event.directresult,event.target1); + }, + ai:{ + order:2.5, + value:[4,1], + useful:1, + wuxie:function(){ + return 0; + }, + result:{ + target:function(player,target){ + var ok=false; + var hs=player.getCards('h'); + if(hs.length<=1) return 0; + for(var i=0;i1).set('prompt2','弃置一张非基本牌,或取消并弃置两张牌'); + event.more=true; + } + else{ + target.chooseToDiscard('he',2,true).set('ai',get.disvalue2); + } + 'step 2' + if(event.more&&!result.bool){ + target.chooseToDiscard('he',2,true).set('ai',get.disvalue2); + } + }, + ai:{ + order:7, + useful:4, + value:10, + tag:{ + draw:2 + }, + result:{ + target:function(player,target){ + if(target.hasJudge('lebu')) return 0; + return Math.max(1,2-target.countCards('h')/10); + } + } + } + }, + caomu:{ + audio:true, + fullskin:true, + enable:true, + type:'delay', + filterTarget:function(card,player,target){ + return (lib.filter.judge(card,player,target)&&player!=target); + }, + judge:function(card){ + if(get.suit(card)=='club') return 0; + return -3; + }, + effect:function(){ + if(result.bool==false){ + player.addTempSkill('caomu_skill'); + } + }, + ai:{ + basic:{ + order:1, + useful:1, + value:4.5, + }, + result:{ + player:function(player,target){ + return game.countPlayer(function(current){ + if(get.distance(target,current)<=1&¤t!=target){ + var att=get.attitude(player,current); + if(att>3){ + return 1.1; + } + else if(att>0){ + return 1; + } + else if(att<-3){ + return -1.1; + } + else if(att<0){ + return -1; + } + } + }); + }, + target:function(player,target){ + if(target.hasJudge('bingliang')) return 0; + return -1.5/Math.sqrt(target.countCards('h')+1); + } + }, + } + } + }, + skill:{ + lanyinjia:{ + equipSkill:true, + enable:['chooseToUse','chooseToRespond'], + filterCard:true, + viewAs:{name:'shan'}, + viewAsFilter:function(player){ + if(!player.countCards('h')) return false; + }, + prompt:'将一张手牌当闪使用或打出', + check:function(card){ + return 6-get.value(card); + }, + ai:{ + respondShan:true, + skillTagFilter:function(player){ + if(!player.countCards('h')) return false; + }, + effect:{ + target:function(card,player,target,current){ + if(get.tag(card,'respondShan')&¤t<0&&target.countCards('h')) return 0.59 + } + }, + order:4, + useful:-0.5, + value:-0.5 + } + }, + lanyinjia2:{ + equipSkill:true, + trigger:{player:'damageBegin4'}, + forced:true, + filter:function(event,player){ + return event.card&&event.card.name=='sha'&&player.getEquip('lanyinjia'); + }, + content:function(){ + var card=player.getEquip('lanyinjia'); + if(card){ + player.discard(card); + } + }, + }, + zhungangshuo:{ + equipSkill:true, + trigger:{player:'useCardToPlayered'}, + logTarget:'target', + filter:function(event,player){ + return event.card.name=='sha'&&(event.player.countCards('h')||player.countCards('h')); + }, + check:function(event,player){ + var target=event.target; + if(get.attitude(player,target)>=0) return false; + if(player.hasCard(function(card){ + return get.value(card)>=8; + })){ + return false; + } + var n1=event.target.countCards('h'); + return n1>0&&n1<=player.countCards('h'); + }, + content:function(){ + 'step 0' + game.delayx(); + 'step 1' + trigger.target.discardPlayerCard('h',player,true); + 'step 2' + player.discardPlayerCard('h',trigger.target,true); + } + }, + qibaodao:{ + equipSkill:true, + trigger:{source:'damageBegin1'}, + forced:true, + filter:function(event){ + return event.card&&event.card.name=='sha'&&event.player.isHealthy(); + }, + content:function(){ + trigger.num++; + }, + ai:{ + effect:{ + player:function(card,player,target){ + if(card.name=='sha'&&target.isHealthy()&&get.attitude(player,target)>0){ + return [1,-2]; + } + } + } + } + }, + qibaodao2:{ + inherit:'qinggang_skill', + }, + g_jinchan:{ + cardSkill:true, + trigger:{target:'useCardToBefore'}, + forced:true, + popup:false, + filter:function(event,player){ + if(event.player==player) return false; + if(event.getParent().directHit.contains(player)) return false; + var num=player.countCards('h','jinchan'); + return num&&num==player.countCards('h'); + }, + content:function(){ + 'step 0' + player.chooseToUse({name:'jinchan'},'是否对'+get.translation(trigger.card)+'使用【金蝉脱壳】?').set('ai1',function(card){ + return _status.event.bool; + }).set('bool',-get.effect(player,trigger.card,trigger.player,player)).set('respondTo',[trigger.player,trigger.card]); + trigger.jinchan=true; + 'step 1' + delete trigger.jinchan; + } + }, + g_jinchan2:{ + trigger:{player:'discardAfter'}, + forced:true, + filter:function(event,player){ + for(var i=0;i0; }, content:function(){ + if(player!=game.me&&!player.isUnderControl()&&!player.isOnline()) game.delayx(); player.chooseToDiscard(true,'he',function(card){ return card!=_status.event.card; }).set('card',player.getEquip('wufengjian')); diff --git a/character/diy.js b/character/diy.js index a0ba1aa81..867f73dfe 100755 --- a/character/diy.js +++ b/character/diy.js @@ -6,6 +6,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ connectBanned:['diy_tianyu','diy_yangyi','diy_lukang','ns_huamulan','ns_yuji','ns_duangui','ns_liuzhang'], character:{ ns_zhangwei:['female','wei',3,['nsqiyue','nsxuezhu']], + ns_chendao:['male','shu',4,['nsjianglie']], 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']], @@ -27,6 +28,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_tsumugi:['female','key',3,['tsumugi_mugyu','tsumugi_huilang']], key_saya:['female','key',3,['saya_shouji','saya_powei']], key_harukakanata:['female','key',3,['haruka_shuangche']], + key_inari:['female','key',2,['inari_baiwei','inari_huhun']], + key_shiina:['female','key',3,['shiina_qingshen','shiina_feiyan']], // diy_caocao:['male','wei',4,['xicai','diyjianxiong','hujia']], // diy_hanlong:['male','wei',4,['siji','ciqiu']], diy_feishi:['male','shu',3,['shuaiyan','moshou']], @@ -101,9 +104,9 @@ 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","ns_zhangwei"], + 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","ns_chendao"], 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","key_yusa","key_misa","key_masato","key_iwasawa","key_kengo","key_yoshino","key_yui","key_tsumugi","key_saya","key_harukakanata"], + diy_key:["key_lucia","key_kyousuke","key_yuri","key_haruko","key_kagari","key_umi","key_rei","key_komari","key_yukine","key_yusa","key_misa","key_masato","key_iwasawa","key_kengo","key_yoshino","key_yui","key_tsumugi","key_saya","key_harukakanata","key_inari","key_shiina"], }, }, characterIntro:{ @@ -118,6 +121,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ diy_tianyu:'字国让,渔阳雍奴(今天津市武清区东北)人。三国时期曹魏将领。初从刘备,因母亲年老回乡,后跟随公孙瓒,公孙瓒败亡,劝说鲜于辅加入曹操。曹操攻略河北时,田豫正式得到曹操任用,历任颖阴、郎陵令、弋阳太守等。', }, characterTitle:{ + key_shiina:'#rAngel Beats!', + key_inari:'#bSummer Pockets', key_saya:'#bLittle Busters!', key_harukakanata:'#bLittle Busters!', key_tsumugi:'#bSummer Pockets', @@ -137,6 +142,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_kyousuke:'#bLittle Busters!', key_yuri:'#rAngel Beats!', key_haruko:'#bAIR', + ns_chendao:'#g三国杀·用间篇', diy_wenyang:'#g最粗的梦想XD', ns_zuoci:'#bskystarwuwei', ns_lvzhi:'#bskystarwuwei', @@ -172,6 +178,259 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yuji:['zuoci'] }, skill:{ + shiina_qingshen:{ + trigger:{ + player:'damageEnd', + source:'damageSource', + }, + filter:function(event,player){ + return event.cards&&event.cards.filterInD().length>0; + }, + frequent:true, + content:function(){ + 'step 0' + var cards=trigger.cards.filterInD('od'); + player.gain(cards,'gain2','log'); + event.count=cards.length; + 'step 1' + var cards=player.getCards('he'); + if(cards.length==0){ + event.finish(); + return; + } + else if(cards.length<=event.count){ + event._result={bool:true,cards:cards}; + } + else player.chooseCard(true,'he',event.count,'请选择要置于武将牌上的牌'); + 'step 2' + if(result.bool&&result.cards.length){ + var cards=result.cards; + player.lose(cards,ui.special,'toStorage'); + player.markAuto('shiina_qingshen',cards); + game.log(player,'将',cards,'置于武将牌上'); + } + }, + intro:{ + content:'cards', + onunmark:'throw', + }, + mod:{ + attackFrom:function(from,to,num){ + return num-from.getStorage('shiina_qingshen').length; + }, + maxHandcard:function(from,num){ + return num+from.getStorage('shiina_qingshen').length; + }, + }, + }, + shiina_feiyan:{ + animalList:['key_inari'], + trigger:{global:'phaseBegin'}, + direct:true, + filter:function(event,player){ + if(lib.skill.shiina_feiyan.animalList.contains(event.player.name)) return false; + return player.getStorage('shiina_qingshen').length>0&&player.inRange(event.player); + }, + content:function(){ + 'step 0' + player.chooseButton([get.prompt('shiina_feiyan',trigger.player),player.getStorage('shiina_qingshen')]).set('goon',get.attitude(player,trigger.player)<0?1:-1).set('ai',function(){return _status.event.goon}); + 'step 1' + if(result.bool){ + var cards=result.links; + player.unmarkAuto('shiina_qingshen',cards); + game.cardsDiscard(cards); + player.$throw(cards); + event.card={name:'sha',isCard:true}; + if(lib.filter.targetEnabled(event.card,player,trigger.player)){ + event.card=player.useCard(event.card,trigger.player,'shiina_feiyan').card; + } + else player.logSkill('shiina_feiyan',trigger.player); + } + else event.finish(); + 'step 2' + if(!player.getHistory('sourceDamage',function(evt){ + return event.card==evt.card; + }).length) player.draw(); + }, + group:'shiina_retieji', + }, + shiina_retieji:{ + shaRelated:true, + trigger:{player:'useCardToPlayered'}, + check:function(event,player){ + return get.attitude(player,event.target)<0; + }, + filter:function(event,player){ + return event.card.name=='sha'&&event.getParent().skill=='shiina_feiyan'; + }, + logTarget:'target', + content:function(){ + "step 0" + player.judge(function(){return 0}); + if(!trigger.target.hasSkill('fengyin')){ + trigger.target.addTempSkill('fengyin'); + } + "step 1" + var suit=get.suit(result.card); + var target=trigger.target; + var num=target.countCards('h','shan'); + target.chooseToDiscard('请弃置一张'+get.translation(suit)+'牌,否则不能使用闪抵消此杀','he',function(card){ + return get.suit(card)==_status.event.suit; + }).set('ai',function(card){ + var num=_status.event.num; + if(num==0) return 0; + if(card.name=='shan') return num>1?2:0; + return 8-get.value(card); + }).set('num',num).set('suit',suit); + "step 2" + if(!result.bool){ + trigger.getParent().directHit.add(trigger.target); + } + } + }, + inari_baiwei:{ + enable:'chooseToUse', + filter:function(event,player){ + if(event.type=='wuxie'||!player.countCards('he',{suit:'diamond'})) return false; + for(var i=0;i0) return get.order(fakecard); + return 0; + } + return 1; + }, + backup:function(links,player){ + return { + selectCard:1, + filterCard:{suit:'diamond'}, + popname:true, + check:function(card){ + if(get.type(card)=='basic') return 6; + return 1/Math.max(0.1,get.value(card)); + }, + position:'he', + viewAs:{name:links[0][2],nature:links[0][3]}, + } + }, + prompt:function(links,player){ + return '将一张♦牌当做'+(get.translation(links[0][3])||'')+get.translation(links[0][2])+'使用'; + } + }, + ai:{ + order:function(item,player){ + if(player&&_status.event.type=='phase'){ + var max=0 + for(var i=0;i0){ + var temp=get.order({name:name}); + if(temp>max) max=temp; + } + } + if(max>0) max+=0.5; + return max; + } + return 3; + }, + result:{ + player:1, + }, + save:true, + skillTagFilter:function(player){ + return player.countCards('he',{suit:'diamond'})>0; + }, + }, + group:['inari_baiwei_sha','inari_baiwei_shan','inari_baiwei_draw'], + }, + inari_baiwei_shan:{ + prompt:'将一张♦牌当做闪打出', + enable:'chooseToRespond', + viewAs:{name:'shan'}, + selectCard:1, + filterCard:{suit:'diamond'}, + popname:true, + check:function(card){ + return 1/Math.max(0.1,get.value(card)); + }, + position:'he', + ai:{ + order:1, + result:{player:1}, + respondShan:true, + skillTagFilter:function(player){ + return player.countCards('he',{suit:'diamond'})>0; + }, + }, + }, + inari_baiwei_sha:{ + prompt:'将一张♦牌当做杀打出', + enable:'chooseToRespond', + viewAs:{name:'sha'}, + selectCard:1, + filterCard:{suit:'diamond'}, + popname:true, + check:function(card){ + return 1/Math.max(0.1,get.value(card)); + }, + position:'he', + ai:{ + order:1, + result:{player:1}, + respondSha:true, + skillTagFilter:function(player){ + return player.countCards('he',{suit:'diamond'})>0; + }, + }, + }, + inari_baiwei_draw:{ + trigger:{player:['useCardAfter','respondAfter']}, + forced:true, + popup:false, + filter:function(event,player){ + return event.skill&&event.skill.indexOf('inari_baiwei')==0; + }, + content:function(){player.draw()}, + }, + inari_huhun:{ + mod:{ + suit:function(card,suit){ + if(suit=='club') return 'diamond'; + }, + maxHandcard:function(player,num){ + return num+1; + }, + } + }, saya_powei:{ trigger:{player:'phaseAfter'}, direct:true, @@ -189,6 +448,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 0' player.chooseTarget(get.prompt2('saya_powei'),function(card,saya,kyousuke){ return kyousuke.hp>saya.hp; + }).set('ai',function(target){ + var player=_status.event.player; + var att=get.attitude(player,target); + if(att>=-2) return 0; + if(target!=get.zhu(target)&&player.hasUnknown()) return 0; + if(target.getEquip(3)&&!player.getEquip(4)) att/=2; + if(player.hp<=1) att*=1.5; + return -att; }); 'step 1' if(result.bool){ @@ -315,6 +582,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var list=[]; for(var i=0;i0; + return player.getStorage('tsumugi_huilang2').length>0; }, content:function(){ 'step 0' - var cards=player.storage.tsumugi_huilang2; + var cards=player.getStorage('tsumugi_huilang2'); event.num=cards.length; player.gain(cards,'draw'); game.log(player,'获得了'+get.cnNumber(cards.length)+'张牌'); - cards.length=0; - player.unmarkSkill('tsumugi_huilang2'); + player.unmarkAuto('tsumugi_huilang2',cards); 'step 1' player.chooseTarget([1,num],'是否令至多'+get.cnNumber(num)+'名角色各摸一张牌?').set('ai',function(target){ return get.attitude(_status.event.player,target); @@ -1704,32 +1967,61 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, }, + nsjianglie:{ + trigger:{player:'useCardToPlayered'}, + filter:function(event,player){ + return event.card.name=='sha'&&event.target.countCards('h')>0; + }, + check:function(event,player){ + return get.attitude(player,event.target)<0; + }, + logTarget:'target', + content:function(){ + 'step 0' + trigger.target.showHandcards(); + 'step 1' + var cards=trigger.target.getCards('h'); + var list=[]; + for(var i=0;i=get.value(player.getCards('h',{color:'black'}))) return 'black'; + return 'red'; + }); + } + 'step 2' + trigger.target.discard(trigger.target.getCards('h',{color:result.control})); + }, + }, ns_chuanshu:{ - audio:["xingshuai",2], - trigger:{ - global:"dying", - }, - priority:8, - unique:true, - skillAnimation:true, - animationColor:"water", - filter:function (event,player){ - return event.player.hp<=0&&event.player!=player; - }, - check:function (event,player){ - return get.attitude(player,event.player)>0; - }, - logTarget:"player", - content:function (){ - 'step 0' - // player.logSkill('ns_chuanshu',trigger.player); - trigger.player.chooseControl('releiji','guidao').set('prompt',''+get.translation(trigger.player)+'获得一项技能'); - goon=true; - - if(!goon){ - event.finish(); - } - 'step 1' + audio:["xingshuai",2], + trigger:{ + global:"dying", + }, + priority:8, + unique:true, + skillAnimation:true, + animationColor:"water", + filter:function (event,player){ + return event.player.hp<=0&&event.player!=player; + }, + check:function (event,player){ + return get.attitude(player,event.player)>0; + }, + logTarget:"player", + content:function (){ + 'step 0' + trigger.player.chooseControl('releiji','guidao').set('prompt',''+get.translation(trigger.player)+'获得一项技能'); + goon=true; + if(!goon){ + event.finish(); + } + 'step 1' trigger.player.addSkillLog(result.control); trigger.player.recover(1-trigger.player.hp); trigger.player.draw(2); @@ -6407,7 +6699,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_yui:'ユイ', key_tsumugi:'紬文德斯', key_saya:'朱鹭户沙耶', - key_harukakanata:'三枝二木', + key_harukakanata:'三枝叶留佳&二木佳奈多', + key_harukakanata_ab:'三枝二木', + key_inari:'稻荷', + key_shiina:'椎名', lucia_duqu:'毒躯', lucia_duqu_info:'锁定技,①当你对其他角色造成伤害或受到其他角色的伤害时,你和对方各获得一张花色点数随机的【毒】。
②当你因【毒】失去体力时,你改为回复等量的体力。
③当你处于濒死状态时,你可以使用一张【毒】(每回合限一次)。', lucia_zhenren:'振刃', @@ -6483,6 +6778,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ kanata_shuangche:'双掣', haruka_shuangche_backup:'双掣', haruka_shuangche_info:'出牌阶段,你可以将一张牌当做任意基本牌或锦囊牌使用。此牌结算完成后,你选择一项:1.弃置X张牌。2.失去1点体力且本回合内不能再发动〖双掣〗。', + //你不能以此法使用【回魂】 saya_shouji:'授计', saya_shouji_info:'每回合限一次,当你使用的牌结算完成后,你可以将此牌对应的所有实体牌交给一名其他角色。其可以使用这些牌中的一张,若如此做,你摸一张牌。', saya_powei:'破围', @@ -6490,7 +6786,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){ saya_judge:'破围', saya_nodis:'破围', //〖破围〗不会因为〖铁骑〗无效 + inari_baiwei:'摆尾', + inari_baiwei_info:'你可以将一张♦牌当做任意基本牌使用或打出。此牌结算完成后,你摸一张牌。', + //你不能以此法使用【毒】 + inari_baiwei_backup:'摆尾', + inari_baiwei_sha:'摆尾', + inari_baiwei_shan:'摆尾', + inari_huhun:'狐魂', + inari_huhun_info:'锁定技,你的♣牌的花色均视为♦。你的手牌上限+1。', + shiina_qingshen:'轻身', + shiina_qingshen_info:'当你受到或造成伤害后,你可以获得此次伤害的渠道对应的实体牌,然后将等量的武将牌置于你的武将牌上,称为「轻」。锁定技,你的手牌上限和攻击范围+X(X为「轻」数)。', + shiina_feiyan:'飞燕', + shiina_feiyan_info:'一名其他角色的回合开始时,若其在你的攻击范围内,则你可以将一张「轻」置于弃牌堆,然后视为对其使用一张【杀】。若此【杀】未造成伤害,你摸一张牌。你于此【杀】的结算流程中视为拥有技能【铁骑】。', + shiina_retieji:'铁骑', + //你不能对稻荷发动【飞燕】 + ns_chendao:'SP陈到', + nsjianglie:'将烈', + nsjianglie_info:'当你使用【杀】指定目标后,你可以令其展示所有手牌,然后弃置其中一种颜色的牌。', ns_zhangwei:'张葳', nsqiyue:'骑钺', nsqiyue_info:'锁定技,当有角色的武将牌状态改变后,你摸一张牌。', diff --git a/character/extra.js b/character/extra.js index e04689c48..39dcaf1e9 100755 --- a/character/extra.js +++ b/character/extra.js @@ -3,6 +3,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return { name:'extra', connect:true, + characterSort:{ + extra:{ + extra_feng:['shen_guanyu','shen_lvmeng'], + extra_huo:['shen_zhugeliang','shen_zhouyu'], + extra_lin:['shen_caocao','shen_lvbu'], + extra_shan:['shen_zhaoyun','shen_simayi'], + extra_yin:['shen_liubei','shen_luxun'], + extra_lei:['shen_ganning','shen_zhangliao'], + extra_ol:['ol_zhangliao'], + }, + }, character:{ shen_guanyu:['male','shen',5,['new_wuhun','wushen'],['shu']], shen_zhaoyun:['male','shen',2,['xinjuejing','xinlonghun'],['shu']], @@ -17,6 +28,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "shen_luxun":["male","shen",4,["nzry_junlve","nzry_cuike","nzry_dinghuo"],["wu"]], "shen_zhangliao":["male","shen",4,["drlt_duorui","drlt_zhiti"],["wei"]], "shen_ganning":["male","shen","3/6",["drlt_poxi","drlt_jieying"],["wu"]], + ol_zhangliao:['male','shen',4,['olduorui','olzhiti'],['wei']], }, characterIntro:{ shen_guanyu:'关羽,字云长。曾水淹七军、擒于禁、斩庞德、威震华夏,吓得曹操差点迁都躲避,但是东吴偷袭荆州,关羽兵败被害。后传说吕蒙因关羽之魂索命而死。', @@ -28,6 +40,146 @@ game.import('character',function(lib,game,ui,get,ai,_status){ //shen_ganning:"体力上限:6", }, skill:{ + olzhiti:{ + audio:'drlt_zhiti', + global:'olzhiti2', + mod:{ + maxHandcard:function(player,num){ + if(game.hasPlayer(function(current){ + return current.isDamaged(); + })) return num+1; + }, + }, + trigger:{player:['phaseDrawBegin2','phaseEnd']}, + forced:true, + filter:function(event,player){ + var num=event.name=='phase'?5:3; + if(num==3?event.numFixed:!game.hasPlayer(function(current){ + return current.countDisabled()<5; + })) return false; + return game.countPlayer(function(current){ + return current.isDamaged(); + })>=num; + }, + direct:true, + content:function(){ + if(trigger.name=='phaseDraw'){ + player.logSkill('olzhiti'); + trigger.num++; + } + else{ + var list=game.filterPlayer(function(current){ + return current.countDisabled()<5; + }); + if(get.isLuckyStar()){ + for(var i=0;i1&&player.getFriends.contains(list[i])) list.splice(i--,1); + } + } + var target=list.randomGet(); + player.logSkill('olzhiti',target); + list.length=0; + for(var i=1;i<6;i++){ + if(!target.isDisabled(i)) list.push(i); + } + target.disableEquip(list.randomGet()); + } + }, + }, + olzhiti2:{ + mod:{ + maxHandcard:function(player,num){ + if(player.isDamaged()) return num-game.countPlayer(function(current){ + return current.hasSkill('olzhiti')&¤t.inRange(player); + }) + }, + }, + }, + olduorui:{ + audio:'drlt_duorui', + trigger:{ + source:'damageSource' + }, + filter:function(event,player){ + if(!player.isPhaseUsing()||event.player.isDead()) return false; + for(var i in event.player.disabledSkills){ + if(event.player.disabledSkills[i].contains('olduorui2')) return false; + } + var list=[]; + var listm=[]; + var listv=[]; + if(event.player.name1!=undefined) listm=lib.character[event.player.name1][3]; + else listm=lib.character[event.player.name][3]; + if(event.player.name2!=undefined) listv=lib.character[event.player.name2][3]; + listm=listm.concat(listv); + var func=function(skill){ + var info=get.info(skill); + if(!info||info.charlotte) return false; + return true; + }; + for(var i=0;i0; + }, + check:function(event,player){ + if(get.attitude(player,event.player)>=0) return false; + if(event.getParent('phaseUse').skipped) return true; + var nd=player.needsToDiscard(); + return player.countCards('h',function(card){ + return (nd?true:get.tag(card,'damage'))&&player.getUseValue(card)>0; + })==0; + }, + logTarget:'player', + content:function(){ + 'step 0' + var list=[]; + var listm=[]; + var listv=[]; + if(trigger.player.name1!=undefined) listm=lib.character[trigger.player.name1][3]; + else listm=lib.character[trigger.player.name][3]; + if(trigger.player.name2!=undefined) listv=lib.character[trigger.player.name2][3]; + listm=listm.concat(listv); + var func=function(skill){ + var info=get.info(skill); + if(!info||info.charlotte) return false; + return true; + }; + for(var i=0;i=num; - //}, content:function(){ 'step 0' if(player.storage.nzry_chenglve==true){ @@ -1690,9 +1689,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }; 'step 1' if(result.bool){ - player.storage.nzry_chenglve1=result.cards; - player.syncStorage('nzry_chenglve1'); - player.addTempSkill('nzry_chenglve1',{player:'phaseAfter'}); + player.storage.nzry_chenglve1=[]; + for(var i=0;iplayer.hp) return 0; + if(player.countCards('h')>player.maxHp) return 0; var att=get.attitude(player,target); - if(att<=0||target.hasSkillTag('nogain')) return false; - if(target.hp-target.countCards('h')>=2) return att; + if(att<=0||target.hasSkillTag('nogain')) return 0; + if(target.maxHp-target.countCards('h')>=2) return att; return att/2; }); 'step 1' @@ -854,9 +860,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } else event.finish(); 'step 2' - if(player.countCards('h')>player.hp) player.chooseToDiscard(2,'he',true); + if(player.countCards('h')>player.maxHp) player.chooseToDiscard(2,'he',true); 'step 3' - if(target.countCards('h')>target.hp) target.chooseToDiscard(2,'he',true); + if(target.countCards('h')>target.maxHp) target.chooseToDiscard(2,'he',true); + }, + ai:{ + expose:0.25, }, }, yidian:{ @@ -902,7 +911,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.logSkill('yidian',event.targets); trigger.targets.addArray(event.targets); } - } + }, + ai:{ + expose:0.25, + }, }, //王双 spzhuilie:{ @@ -1051,6 +1063,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger.player.markSkill('spmingjian_charlotte'); } }, + ai:{ + expose:0.25, + }, }, spmingjian_charlotte:{ trigger:{player:['judgeBefore','phaseAfter']}, @@ -1401,8 +1416,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }).set('ai',function(target){ var player=_status.event.player; var att=get.attitude(player,target); - if(att>0&&target.countCards('e',function(card){ - return get.position(card)=='j'||get.value(card)<=0; + if(att>0&&target.countCards('ej',function(card){ + return get.position(card)=='j'||get.value(card,target)<=0; })) return 2*att; else if(att<0&&target.countCards('e',function(card){ return get.value(card)>0; @@ -1650,6 +1665,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger.num+=(event.triggername=='damageBegin1'?1:-1); } }, + ai:{ + expose:0.25, + }, }, souying2:{}, zhanyuan:{ @@ -1780,6 +1798,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 1' if(result.bool) trigger.player.addTempSkill('yuxu'); }, + ai:{ + expose:0.25, + }, }, pingjian:{ mode:['identity','single','guozhan'], @@ -1964,7 +1985,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ check:function(){return 1}, filterCard:true, filterTarget:function(event,player,target){ - return target!=player&&!target.isDisabled(get.subtype(ui.selected.cards[0])); + return target!=player&&target.canEquip(ui.selected.cards[0],true); }, prepare:'give', discard:false, @@ -2049,7 +2070,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } game.log(list,'已被移出游戏'); - //game.log('Key公式你可长点心吧 要不然把你也移出游戏'); game.cardsGotoSpecial(list); }, }, @@ -2099,6 +2119,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 1' if(result.bool) trigger.num++; }, + ai:{ + expose:0.25, + }, }, pyzhuren_club:{ audio:true, @@ -2246,6 +2269,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.bool){ var target=result.targets[0]; player.line(target); + player.addExpose(0.2); target.gain(cards,'gain2'); } }, @@ -2360,6 +2384,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.removeMark('lslixun',1); } }, + ai:{ + expose:0.25, + }, }, xpchijie:{ audio:2, @@ -2836,6 +2863,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, lvli:{ audio:2, + init:function(player,skill){ + player.storage[skill]=0; + }, enable:'chooseToUse', filter:function(event,player){ if(player.storage.lvli>1) return false; @@ -3201,8 +3231,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ used:{sub:true}, }, }, - //和沙摩柯一起上线的新服三将 - spjiedao:{ + //和沙摩柯一起上线的新服三将 + spjiedao:{ audio:2, trigger:{ source:"damageBegin1", @@ -4933,6 +4963,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, logTarget:'player', filter:function(event,player){ + if(!['basic','trick'].contains(get.type(event.card))) return false; if(!event.targets||event.targets.length!=1) return false; return event.player.hasMark('zongkui_mark'); }, @@ -10409,7 +10440,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ direct:true, content:function(){ "step 0" - var next=player.chooseToDiscard(get.prompt('jieyuan'),{color:'red'}); + var next=player.chooseToDiscard(get.prompt('jieyuan')); if(!player.hasSkill('fenxin_nei')){ next.set('filterCard',function(card){ return get.color(card)=='red'; @@ -12604,19 +12635,29 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, qiluan:{ audio:'qiluan2', - group:'qiluan_draw', - subfrequent:['draw'], + //group:'qiluan_draw', + //subfrequent:['draw'], trigger:{global:'phaseEnd'}, frequent:true, filter:function(event,player){ - return player.getStat('kill')>0; + return game.hasPlayer2(function(current){ + return current.getStat('kill')>0 + }); + }, + prompt:function(event,player){ + var num=game.countPlayer2(function(current){ + return (current.getStat('kill')||0)*(current==player?3:1); + }); + return get.prompt('qiluan')+'(可摸'+get.cnNumber(num)+'张牌)'; }, content:function(){ //if(get.mode()=='guozhan'){ // player.draw(3); //} //else{ - player.draw(3*player.getStat('kill')); + player.draw(game.countPlayer2(function(current){ + return (current.getStat('kill')||0)*(current==player?3:1); + })); //} }, subSkill:{ @@ -14154,12 +14195,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:false, content:function(){ "step 0" + var cards=player.getCards('he'); player.removeSkill('lihun2'); - if(player.storage.lihun.classList.contains('dead')){ + if(player.storage.lihun.classList.contains('dead')||player.storage.lihun.hp<=0||cards.length==0){ event.finish(); } else{ - player.chooseCard('he',true,player.storage.lihun.hp); + if(cards.length1){ - player.node.marks.lastChild.remove(); - } - game.broadcast(function(player){ - while(player.node.marks.childNodes.length>1){ - player.node.marks.lastChild.remove(); - } - },player); - } - for(var i in player.tempSkills){ - player.removeSkill(i); - } - var skills=player.getSkills(); - for(var i=0;i1){ + player.node.marks.lastChild.remove(); + } + game.broadcast(function(player){ + while(player.node.marks.childNodes.length>1){ + player.node.marks.lastChild.remove(); + } + },player); + } + for(var i in player.tempSkills){ + player.removeSkill(i); + } + var skills=player.getSkills(); + for(var i=0;i0?'markSkill':'unmarkSkill'](name); + } + else if(typeof storage=='number'){ + this[storage.length>0?'markSkill':'unmarkSkill'](name); + } + } + }, + unmarkAuto:function(name,info){ + var storage=this.storage[name] + if(Array.isArray(info)&&Array.isArray(storage)){ + storage.removeArray(info.slice(0)); + this.markAuto(name); + } + }, + getStorage:function(name){ + return this.storage[name]||[]; + }, markSkill:function(name,info,card){ if(info===true){ this.syncStorage(name); @@ -21015,7 +21049,7 @@ } var range=get.subtype(name); if(this.isDisabled(range)) return false; - if(['equip3','equip4'].contains(range)&&(!this.isDisabled(6)||this.getEquip(6))) return false; + if(['equip3','equip4'].contains(range)&&this.getEquip(6)) return false; if(!replace&&!this.isEmpty(range)) return false; return true; }, @@ -48115,6 +48149,7 @@ return num.toString(); }, rawName:function(str){ + if(lib.translate[str+'_ab']) return lib.translate[str+'_ab']; var str2=lib.translate[str]; if(!str2) return ''; if(str2.indexOf('SP')==0){ @@ -48147,6 +48182,7 @@ return str2; }, rawName2:function(str){ + if(lib.translate[str+'_ab']) return lib.translate[str+'_ab']; var str2=lib.translate[str]; if(!str2) return ''; if(str2.indexOf('SP')==0){ @@ -48171,6 +48207,7 @@ }, slimName:function(str){ var str2=lib.translate[str]; + if(lib.translate[str+'_ab']) str2=lib.translate[str+'_ab']; if(!str2) return ''; if(str2.indexOf('SP')==0){ str2=str2.slice(2); diff --git a/game/update.js b/game/update.js index 267182e4c..2b397c440 100644 --- a/game/update.js +++ b/game/update.js @@ -1,14 +1,14 @@ window.noname_update={ - version:'1.9.98.7', - update:'1.9.98.6.1', + version:'1.9.98.7.1', + update:'1.9.98.7', changeLog:[ - 'SP张郃,高览,荀谌,SP审配', + '孙邵,OL神张辽', 'bug修复', ], files:[ //'card/extra.js', //'card/huanlekapai.js', - //'card/sp.js', + 'card/sp.js', //'card/standard.js', //'card/swd.js', //'card/mtg.js', @@ -16,7 +16,7 @@ window.noname_update={ //'card/gwent.js', //'card/yunchou.js', //'card/zhenfa.js', - //'card/zhulu.js', + 'card/zhulu.js', 'character/diy.js', 'character/extra.js', //'character/hearth.js', @@ -33,7 +33,7 @@ window.noname_update={ 'character/standard.js', //'character/swd.js', //'character/xianjian.js', - //'character/xinghuoliaoyuan.js', + 'character/xinghuoliaoyuan.js', 'character/yijiang.js', //'character/yxs.js', //'extension/boss/extension.js', diff --git a/image/character/key_inari.jpg b/image/character/key_inari.jpg new file mode 100644 index 000000000..58203ad58 Binary files /dev/null and b/image/character/key_inari.jpg differ diff --git a/image/character/key_shiina.jpg b/image/character/key_shiina.jpg new file mode 100644 index 000000000..1add71fcb Binary files /dev/null and b/image/character/key_shiina.jpg differ diff --git a/image/character/ns_chendao.jpg b/image/character/ns_chendao.jpg new file mode 100644 index 000000000..0f9a1660f Binary files /dev/null and b/image/character/ns_chendao.jpg differ diff --git a/image/character/ol_zhangliao.jpg b/image/character/ol_zhangliao.jpg new file mode 100644 index 000000000..4d3db6253 Binary files /dev/null and b/image/character/ol_zhangliao.jpg differ diff --git a/image/character/sunshao.jpg b/image/character/sunshao.jpg new file mode 100644 index 000000000..67d550667 Binary files /dev/null and b/image/character/sunshao.jpg differ