diff --git a/audio/die/caoxing.mp3 b/audio/die/caoxing.mp3 new file mode 100644 index 000000000..85b62de0e Binary files /dev/null and b/audio/die/caoxing.mp3 differ diff --git a/audio/skill/cxliushi1.mp3 b/audio/skill/cxliushi1.mp3 new file mode 100644 index 000000000..2bc805576 Binary files /dev/null and b/audio/skill/cxliushi1.mp3 differ diff --git a/audio/skill/cxliushi2.mp3 b/audio/skill/cxliushi2.mp3 new file mode 100644 index 000000000..54e54ce52 Binary files /dev/null and b/audio/skill/cxliushi2.mp3 differ diff --git a/audio/skill/zhanwan1.mp3 b/audio/skill/zhanwan1.mp3 new file mode 100644 index 000000000..8195d9d34 Binary files /dev/null and b/audio/skill/zhanwan1.mp3 differ diff --git a/audio/skill/zhanwan2.mp3 b/audio/skill/zhanwan2.mp3 new file mode 100644 index 000000000..d3cad087a Binary files /dev/null and b/audio/skill/zhanwan2.mp3 differ diff --git a/character/diy.js b/character/diy.js index 050852efc..f223ca6f2 100755 --- a/character/diy.js +++ b/character/diy.js @@ -6437,7 +6437,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ evt.after.push(next); next.player=player; next.setContent(function(){ - player.storage.junktaoluan=[]; + //player.storage.junktaoluan=[]; player.storage.junktaoluan2=[]; }); } @@ -6536,7 +6536,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ evt.junktaoluan=true; next.player=player; next.setContent(function(){ - player.storage.junktaoluan=[]; + //player.storage.junktaoluan=[]; player.storage.junktaoluan2=[]; }); } @@ -6593,7 +6593,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ evt.after.push(next); next.player=player; next.setContent(function(){ - player.storage.junktaoluan=[]; + //player.storage.junktaoluan=[]; player.storage.junktaoluan2=[]; }); } diff --git a/character/mobile.js b/character/mobile.js index f7744331b..d8eebe2d7 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -849,7 +849,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(player.countCards('h',function(card){ var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player); if(mod2!='unchanged') return mod2; - var mod=game.checkMod(card,player,'unchanged','cardSavable',player); + var mod=game.checkMod(card,player,event.player,'unchanged','cardSavable',player); if(mod!='unchanged') return mod; var savable=get.info(card).savable; if(typeof savable=='function') savable=savable(card,player,event.player); @@ -2412,7 +2412,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(player.countCards('h',function(card){ var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player); if(mod2!='unchanged') return mod2; - var mod=game.checkMod(card,player,'unchanged','cardSavable',player); + var mod=game.checkMod(card,player,event.player,'unchanged','cardSavable',player); if(mod!='unchanged') return mod; var savable=get.info(card).savable; if(typeof savable=='function') savable=savable(card,player,event.player); @@ -4325,70 +4325,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "pcaudio_xuanjian_card":{ audio:true, }, - "yizan_respond_sha":{ - audio:2, - enable:["chooseToRespond"], - filterCard:function(card,player,target){ - if(player.storage.yizan) return get.type(card)=='basic'; - else if(ui.selected.cards.length){ - if(get.type(ui.selected.cards[0])=='basic') return true; - return get.type(card)=='basic'; - } - return true; - }, - selectCard:function(){ - var player=_status.event.player; - if(player.storage.yizan) return 1; - return 2; - }, - position:"he", - viewAs:{ - name:"sha", - }, - complexCard:true, - viewAsFilter:function(player){ - if(!player.storage.yizan){ - if(player.countCards('h')<2) return false; - } - return player.hasCard(function(card){ - return get.type(card)=='basic'; - },'h'); - }, - prompt:function(){ - var player=_status.event.player; - var str=!player.storage.yizan?'两张牌(其中至少应有一张基本牌)':'一张基本牌'; - return '将'+str+'当做杀打出'; - }, - check:function(card){ - if(!ui.selected.cards.length&&get.type(card)=='basic') return 6; - return 5-get.value(card); - }, - ai:{ - skillTagFilter:function(player){ - if(!player.storage.yizan){ - if(player.countCards('he')<2) return false; - } - return player.hasCard(function(card){ - return get.type(card)=='basic'; - },'h'); - }, - respondSha:true, - }, - }, "yizan_use":{ - init:function(player){ - if(!player.storage.yizan_use) player.storage.yizan_use=0; - if(!player.storage.yizan) player.storage.yizan=false; - }, - mark:true, intro:{ content:"已发动过#次", }, - group:["yizan_respond_sha","yizan_respond_shan","yizan_count"], - enable:"chooseToUse", + enable:["chooseToUse","chooseToRespond"], filter:function(event,player){ - if(!player.storage.yizan&&player.countCards('he')<2) return false; + if(!player.storage.yizan&&player.countCards('he')<2) return false; if(event.filterCard({name:'sha'},player,event)|| + event.filterCard({name:'shan'},player,event)|| event.filterCard({name:'jiu'},player,event)|| event.filterCard({name:'tao'},player,event)){ return player.hasCard(function(card){ @@ -4405,6 +4350,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ list.push(['基本','','sha','fire']); list.push(['基本','','sha','thunder']); } + if(event.filterCard({name:'shan'},player,event)){ + list.push(['基本','','shan']); + } if(event.filterCard({name:'tao'},player,event)){ list.push(['基本','','tao']); } @@ -4416,11 +4364,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ check:function(button){ var player=_status.event.player; var card={name:button.link[2],nature:button.link[3]}; - if(game.hasPlayer(function(current){ + if(_status.event.getParent().type!='phase'||game.hasPlayer(function(current){ return player.canUse(card,current)&&get.effect(current,card,player,player)>0; })){ switch(button.link[2]){ - case 'tao':return 5; + case 'tao':case 'shan':return 5; case 'jiu':{ if(player.storage.yizan&&player.countCards('h',{type:'basic'})>2) return 3; }; @@ -4434,6 +4382,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, backup:function(links,player){ return { + audio:'yizan_respond_shan', filterCard:function(card,player,target){ if(player.storage.yizan) return get.type(card)=='basic'; else if(ui.selected.cards.length){ @@ -4456,13 +4405,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ position:'he', popname:true, precontent:function(){ - player.logSkill('yizan_respond_shan'); + player.addMark('yizan_use',1,false); }, } }, prompt:function(links,player){ var str=!player.storage.yizan?'两张牌(其中至少应有一张基本牌)':'一张基本牌'; - return '将'+str+'当做'+get.translation(links[0][3]||'')+get.translation(links[0][2])+'使用'; + return '将'+str+'当做'+get.translation(links[0][3]||'')+get.translation(links[0][2])+'使用或打出'; }, }, ai:{ @@ -4475,83 +4424,23 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return 3.1; }, save:true, - respondSha:true, skillTagFilter:function(player,tag,arg){ if(!player.storage.yizan&&player.countCards('he')<2) return false; - if(player.hasCard(function(card){ + if(!player.hasCard(function(card){ return get.type(card)=='basic'; },'he')){ - if(tag=='respondSha'){ - if(arg!='use') return false; - } - } - else{ return false; } }, result:{ player:1, }, + respondSha:true, + respondShan:true, }, }, "yizan_respond_shan":{ - complexCard:true, audio:2, - enable:["chooseToUse","chooseToRespond"], - filterCard:function(card,player,target){ - if(player.storage.yizan) return get.type(card)=='basic'; - else if(ui.selected.cards.length){ - if(get.type(ui.selected.cards[0])=='basic') return true; - return get.type(card)=='basic'; - } - return true; - }, - selectCard:function(){ - var player=_status.event.player; - if(player.storage.yizan) return 1; - return 2; - }, - position:"he", - viewAs:{ - name:"shan", - }, - viewAsFilter:function(player){ - if(!player.storage.yizan){ - if(player.countCards('he')<2) return false; - } - return player.hasCard(function(card){ - return get.type(card)=='basic'; - },'h'); - }, - prompt:function(){ - var player=_status.event.player; - var str=!player.storage.yizan?'两张牌(其中至少应有一张基本牌)':'一张基本牌'; - return '将'+str+'当做闪使用或打出'; - }, - check:function(card){ - if(!ui.selected.cards.length&&get.type(card)=='basic') return 6; - return 5-get.value(card); - }, - ai:{ - respondShan:true, - skillTagFilter:function(player){ - if(!player.storage.yizan){ - if(player.countCards('he')<2) return false; - } - return player.hasCard(function(card){ - return get.type(card)=='basic'; - },'h'); - }, - effect:{ - target:function(card,player,target,current){ - if(get.tag(card,'respondShan')&¤t<0) return 0.6 - }, - }, - basic:{ - useful:[7,2], - value:[7,2], - }, - }, }, "xinfu_longyuan":{ audio:2, @@ -4564,32 +4453,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ skillAnimation:true, animationColor:'orange', filter:function(event,player){ - if(player.storage.xinfu_longyuan) return false; - return player.storage.yizan_use&&player.storage.yizan_use>2; + return player.countMark('yizan_use')>=3; }, content:function(){ player.awakenSkill('xinfu_longyuan'); player.storage.yizan=true; - game.delay(1); }, derivation:'yizan_rewrite', }, - "yizan_count":{ - forced:true, - silent:true, - popup:false, - trigger:{ - player:["respond","useCard1"], - }, - filter:function(event,player){ - if(event.skill!='yizan_respond_sha'&&event.skill!='yizan_respond_shan'&&event.skill!='yizan_use_backup') return false; - return player.storage.yizan_use!=undefined; - }, - content:function(){ - player.storage.yizan_use++; - player.markSkill('yizan_use'); - }, - }, xinfu_jingxie:{audio:2}, "xinfu_jingxie1":{ group:["xinfu_jingxie2"], @@ -5977,6 +5848,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "yizan_respond_sha":"翊赞", "yizan_respond_sha_info":"", "yizan_use":"翊赞", + yizan_use_backup:'翊赞', "yizan_use_info":"你可以将两张牌(其中至少一张为基本牌)当做任意基本牌使用或打出。", "yizan_respond_shan":"翊赞", "yizan_respond_shan_info":"", diff --git a/character/rank.js b/character/rank.js index d00b2718d..e7e813d3b 100644 --- a/character/rank.js +++ b/character/rank.js @@ -937,6 +937,7 @@ window.noname_character_rank={ 'zhugedan', 'leitong', 'wulan', + 'caoxing', 'diy_wenyang', 'ns_caoshuang', 'ns_huangchengyan', diff --git a/character/refresh.js b/character/refresh.js index 59b14c516..54ab96141 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -10,7 +10,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ refresh_lin:['re_zhurong','re_menghuo','ol_sunjian','re_caopi','re_xuhuang','ol_dongzhuo'], refresh_shan:['re_dengai','re_jiangwei','re_caiwenji','ol_liushan','re_zhangzhang','re_zuoci','re_sunce','ol_dengai'], refresh_yijiang1:['re_wuguotai','re_gaoshun','re_caozhi','yujin_yujin','re_lingtong','re_masu','xin_xusheng','xin_fazheng'], - refresh_yijiang2:['old_madai','wangyi','guanzhang','re_handang','re_zhonghui','re_liaohua','re_chengpu','re_caozhang','re_liubiao','re_bulianshi'], + refresh_yijiang2:['old_madai','wangyi','guanzhang','re_handang','re_zhonghui','re_liaohua','re_chengpu','re_caozhang','re_liubiao','re_bulianshi','xin_lingtong'], refresh_yijiang3:['re_jianyong','re_guohuai','re_zhuran','re_panzhangmazhong','re_yufan','re_liru','re_manchong'], refresh_yijiang4:['re_sunluban','re_wuyi','re_hanhaoshihuan'], refresh_yijiang5:['re_zhangyi','re_quancong','re_caoxiu','re_sunxiu'], @@ -18,6 +18,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, connect:true, character:{ + xin_lingtong:['male','wu',4,['decadexuanfeng','yongjin'],['unseen']], re_caoxiu:['male','wei',4,['qianju','reqingxi']], re_sunxiu:['male','wu',3,['reyanzhu','rexingxue','zhaofu'],['zhu']], ol_dengai:['male','wei',4,['oltuntian','olzaoxian'],['unseen']], @@ -127,6 +128,267 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sunben:['zhouyu','taishici','daqiao'], }, skill:{ + yongjin:{ + unique:true, + limited:true, + skillAnimation:true, + animationColor:'wood', + enable:'phaseUse', + filter:function(event,player,cards){ + return game.hasPlayer(function(current){ + var es=current.getCards('e',function(card){ + return !cards||!cards.contains(card); + }); + for(var i=0;i0; + } + }); + next.set('ai',function(target){ + var player=_status.event.player; + var att=get.attitude(player,target); + var sgnatt=get.sgn(att); + if(ui.selected.targets.length==0){ + if(att>0){ + if(target.countCards('e',function(card){ + return get.value(card,target)<0&&!_status.event.cards.contains(card)&&game.hasPlayer(function(current){ + return current!=target&&get.attitude(player,current)<0&¤t.isEmpty(get.subtype(card)) + }); + })>0) return 9; + } + else if(att<0){ + if(game.hasPlayer(function(current){ + if(current!=target&&get.attitude(player,current)>0){ + var es=target.getCards('e',function(card){ + return !_status.event.cards.contains(card); + }); + for(var i=0;i0&¤t.isEmpty(get.subtype(es[i]))&&get.effect(current,es[i],player,current)>0) return true; + } + } + })){ + return -att; + } + } + return 0; + } + var es=ui.selected.targets[0].getCards('e',function(card){ + return !_status.event.cards.contains(card); + }); + var i; + var att2=get.sgn(get.attitude(player,ui.selected.targets[0])); + for(i=0;i0&&get.attitude(player,targets1)<0){ + if(get.value(button.link,targets0)<0&&get.effect(targets1,button.link,player,targets1)>0) return 10; + return 0; + } + else{ + return get.equipValue(button.link)*get.effect(targets1,button.link,player,targets1); + } + },targets[0]).set('nojudge',event.nojudge||false).set('targets0',targets[0]).set('targets1',targets[1]).set('filterButton',function(button){ + if(_status.event.cards.contains(button.link)) return false; + var targets1=_status.event.targets1; + return targets1.isEmpty(get.subtype(button.link)); + }).set('cards',cards); + } + else{ + event.finish(); + } + 'step 5' + if(result.bool&&result.links.length){ + var link=result.links[0]; + cards.add(link); + event.targets[1].equip(link); + event.targets[0].$give(link,event.targets[1]) + game.delay(); + } + else event.finish(); + 'step 6' + if(event.count>0) event.goto(1); + }, + ai:{ + order:7, + result:{ + player:function(player){ + var num=0; + var friends=game.filterPlayer(function(current){ + return get.attitude(player,current)>=4; + }); + var vacancies={ + equip1:0, + equip2:0, + equip3:0, + equip4:0, + equip5:0 + }; + for(var i=0;i0){ + num++; + if(num>=3){ + return 1; + } + vacancies[type]--; + } + } + } + if(num&&player.hp==1){ + return 0.5; + } + return 0; + } + } + } + }, + decadexuanfeng:{ + audio:'xuanfeng', + audioname:['boss_lvbu3','re_heqi'], + trigger:{ + player:['loseAfter','phaseDiscardEnd'], + global:['equipAfter','addJudgeAfter','gainAfter'], + }, + direct:true, + filter:function(event,player){ + if(event.name=='phaseDiscard'){ + var cards=[]; + player.getHistory('lose',function(evt){ + if(evt&&evt.getParent('phaseDiscard')==event&&evt.hs) cards.addArray(evt.hs); + }); + return cards.length>1; + } + else{ + var evt=event.getl(player); + return evt&&evt.es&&evt.es.length>0; + } + }, + content:function(){ + "step 0" + event.count=2; + event.targets=[]; + event.logged=false; + "step 1" + event.count--; + player.chooseTarget(get.prompt('decadexuanfeng'),'弃置一名其他角色的一张牌',function(card,player,target){ + if(player==target) return false; + return target.countDiscardableCards(player,'he'); + }).set('ai',function(target){ + return -get.attitude(_status.event.player,target); + }); + "step 2" + if(result.bool){ + if(!event.logged){ + player.logSkill('xuanfeng',result.targets); + event.logged=true; + } + else player.line(result.targets[0],'green'); + targets.add(result.targets[0]); + player.discardPlayerCard(result.targets[0],'he',true); + } + else if(!targets.length) event.finish(); + "step 3" + if(event.count) event.goto(1); + else if(player==_status.currentPhase){ + player.chooseTarget('是否对一名目标角色造成1点伤害',function(card,player,target){ + return _status.event.targets.contains(target); + }).set('targets',targets).set('ai',function(target){ + var player=_status.event.player; + return get.damageEffect(target,player,player); + }); + } + else event.finish(); + "step 4" + if(result.bool){ + player.line(result.targets[0],'thunder'); + result.targets[0].damage(); + } + }, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(get.type(card)=='equip'&&!get.cardtag(card,'gifts')) return [1,3]; + } + }, + reverseEquip:true, + noe:true + } + }, oltuntian:{ inherit:'tuntian', filter:function(event,player){ @@ -8000,6 +8262,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ olzaoxian_info:'觉醒技,准备阶段,若你武将牌上【田】的数量达到3张或更多,则你减1点体力上限,并获得技能〖急袭〗。你于当前回合结束后进行一个额外的回合。', re_sunxiu:'界孙休', re_caoxiu:'界曹休', + xin_lingtong:'界凌统', + decadexuanfeng:'旋风', + decadexuanfeng_info:'当你于弃牌阶段弃置过至少两张牌,或当你失去装备区里的牌后,你可以弃置至多两名其他角色的共计两张牌。若此时是你的回合内,你可以对其中一个目标造成1点伤害。', + yongjin:'勇进', + yongjin_info:'限定技,出牌阶段,你可以依次移动场上的至多三张不同的装备牌。', refresh_standard:'界限突破·标', refresh_feng:'界限突破·风', diff --git a/character/shenhua.js b/character/shenhua.js index 8cbc2ca21..17b884cfd 100755 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -566,7 +566,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(event.num==3) prompt="罪论:请按顺将卡牌置于牌堆顶(先选择的在上)"; else prompt="罪论:请按顺将"+get.cnNumber(event.num)+"张卡牌置于牌堆顶(先选择的在上),然后获得其余的牌。"; player.chooseCardButton(event.num,true,event.cards,prompt).set('ai',function(button){ - return 100-get.value(button.link); + var player=_status.event.player; + var next=player.getNext(); + var att=get.attitude(player,next); + var card=button.link; + var judge=next.getCards('j')[ui.selected.buttons.length]; + if(judge){ + return get.judge(judge)(card)*att; + } + return next.getUseValue(card)*att; }); } 'step 2' diff --git a/character/sp.js b/character/sp.js index 5ce525923..8dd3df888 100755 --- a/character/sp.js +++ b/character/sp.js @@ -9096,7 +9096,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ for(var i=0;i=0;i--){ + ui.cardPile.insertBefore(cards[i].fix(),ui.cardPile.firstChild); } - for(var i=0;i<2;i++){ - if(ui.cardPile.childNodes.length>i) cards.push(ui.cardPile.childNodes[i]); - } - player.chooseCardButton('傲才:选择一张卡牌打出',cards).set('filterButton',function(button){ - return get.type(button.link)=='basic'&&_status.event.getTrigger().filterCard(button.link); - }); - "step 1" - if(result.bool){ - game.log(player,'傲才发动成功'); - trigger.untrigger(); - trigger.responded=true; - result.links[0].remove(); - trigger.result={bool:true,card:result.links[0]} + player.chooseButton(['傲才:选择要'+(evt.name=='chooseToUse'?'使用':'打出')+'的牌',cards]).set('filterButton',function(button){ + return _status.event.cards.contains(button.link); + }).set('cards',cards.filter(function(card){ + return evt.filterCard(card,evt.player,evt) + })).set('ai',function(button){ + var evt=_status.event.getParent(3); + if(evt&&evt.ai){ + var tmp=_status.event; + _status.event=evt; + var result=(evt.ai||event.ai1)(button.link,_status.event.player,evt); + _status.event=tmp; + return result; + } + return 1; + });; + 'step 1' + var evt=event.getParent(2); + if(result.bool&&result.links&&result.links.length){ + if(evt.name=='chooseToUse'){ + game.broadcastAll(function(result){ + lib.skill.aocai_backup.viewAs={name:result.name,cards:[result],isCard:true}; + lib.skill.aocai_backup.prompt='选择'+get.translation(result)+'的目标'; + },result.links[0]); + evt.set('_backupevent','aocai_backup'); + evt.backup('aocai_backup'); + } + else{ + delete evt.result.skill; + delete evt.result.used; + evt.result.card=get.autoViewAs(result.links[0]); + evt.result.cards=[result.links[0]]; + evt.redo(); + return; + } } + evt.goto(0); }, ai:{ effect:{ @@ -12165,55 +12191,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(get.tag(card,'respondShan')) return 0.7; if(get.tag(card,'respondSha')) return 0.7; } - } - }, - group:'aocai2', - }, - aocai2:{ - enable:'chooseToUse', - filter:function(event,player){ - return _status.currentPhase!==player&&event.type!='wuxie'&&event.type!='trickuse'; - }, - onChooseToUse:function(event){ - if(!game.online){ - var cards=[]; - if(ui.cardPile.childNodes.length<2){ - var discardcards=get.cards(2); - game.cardsDiscard(discardcards); - } - for(var i=0;i<2;i++){ - if(ui.cardPile.childNodes.length>i) cards.push(ui.cardPile.childNodes[i]); - } - event.set('aocaicards',cards); - } - }, - chooseButton:{ - dialog:function(event,player){ - return ui.create.dialog('傲才:选择一张卡牌使用',event.aocaicards); }, - filter:function(button,player){ - var evt=_status.event.getParent(); - if(evt&&evt.filterCard){ - return get.type(button.link)=='basic'&&evt.filterCard(button.link,player,evt); - } - return false; - }, - check:function(button){ - return 1; - }, - backup:function(links,player){ - return { - audio:'aocai', - filterCard:function(){return false}, - selectCard:-1, - viewAs:links[0], - } - }, - prompt:function(links,player){ - return '选择'+get.translation(links)+'的目标'; - } - }, - ai:{ order:11, respondShan:true, respondSha:true, @@ -12226,6 +12204,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }, + aocai_backup:{ + sourceSkill:'aocai', + precontent:function(){ + delete event.result.skill; + event.result.cards=event.result.card.cards; + event.result.card=get.autoViewAs(event.result.cards[0]) + }, + filterCard:function(){return false}, + selectCard:-1, + }, hongyuan:{ trigger:{player:'phaseDrawBegin2'}, direct:true, @@ -12408,11 +12396,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ threaten:0.7 } }, + duwu:{ audio:2, enable:'phaseUse', filter:function(event,player){ - return player.hasSkill('duwu2')==false; + return player.hasSkill('duwu2')==false&&game.hasPlayer(function(current){ + return current.hp<=player.countCards('he')&&player.inRange(current); + }); }, filterCard:function(){ if(ui.selected.targets.length) return false; @@ -12426,25 +12417,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return target!=player&&player.inRange(target)&&ui.selected.cards.length==target.hp; }, check:function(card){ + var player=_status.event.player; + if(game.hasPlayer(function(current){ + return current!=player&&player.inRange(current)&&ui.selected.cards.length==current.hp&&get.damageEffect(current,player,player)>0; + })) return 0; switch(ui.selected.cards.length){ - case 0:return 7-get.value(card); + case 0:return 8-get.value(card); case 1:return 6-get.value(card); case 2:return 3-get.value(card); default:return 0; } }, content:function(){ - "step 0" - player.addSkill('duwu3'); + player.addTempSkill('duwu3'); target.damage('nocard'); - "step 1" - if(!player.hasSkill('duwu3')){ - player.addSkill('duwu2'); - player.loseHp(); - } - else{ - player.removeSkill('duwu3'); - } }, ai:{ damage:true, @@ -12458,24 +12444,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ expose:0.3 } }, - duwu2:{ - trigger:{player:'phaseZhunbeiBegin'}, + duwu2:{}, + duwu3:{ + trigger:{global:'dyingAfter'}, forced:true, popup:false, - audio:false, - content:function(){ - player.removeSkill('duwu2'); - } - }, - duwu3:{ - trigger:{global:'dying'}, - priority:15, - silent:true, + charlotte:true, filter:function(event,player){ - return event.reason&&event.reason.getParent().name=='duwu'; + return event.player.isAlive()&&event.reason&&event.reason.getParent().name=='duwu'; }, content:function(){ - player.removeSkill('duwu3'); + player.loseHp(); + player.addTempSkill('duwu2'); } }, yicong:{ @@ -15253,6 +15233,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ tianming:'天命', mizhao:'密诏', duwu:'黩武', + duwu3:'黩武', mingzhe:'明哲', huanshi:'缓释', hongyuan:'弘援', @@ -15423,12 +15404,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ wuji_info:'觉醒技,结束阶段开始时,若你于此回合内造成过3点或更多伤害,你加1点体力上限并回复1点体力,失去〖虎啸〗,然后从场上、牌堆或弃牌堆中获得【青龙偃月刀】', xueji_info:'出牌阶段限一次,你可以弃置一张红色牌,然后选择至多X名角色,横置这些角色并对其中一名角色造成1点火焰伤害。(X为你已损失的体力值且至少为1)', huxiao_info:'锁定技,当你造成火属性伤害时,该角色摸一张牌。然后,你于此回合内对其使用牌没有次数限制。', - aocai_info:'当你于回合外需要使用或打出一张基本牌时,你可以观看牌堆顶的两张牌。若你观看的牌中有此牌,你可以使用打出之。', + aocai_info:'当你于回合外需要使用或打出一张基本牌时,你可以观看牌堆顶的两张牌(若你没有手牌则改为四张)。若你观看的牌中有此牌,你可以使用打出之。', hongyuan_info:'摸牌阶段,你可以少摸一张牌并指定至多两名其他角色。若如此做,这些角色各摸一张牌。', hongyuan_info_combat:'摸牌阶段,你可以少摸一张牌。若如此做,其他友方角色各摸一张牌。', huanshi_info:'一名角色的判定牌生效前,你可令其观看你的手牌。若如此做,该角色选择你的一张牌,你打出此牌代替之。', mingzhe_info:'当你于回合外使用或打出红色牌,或因弃置失去一张红色牌后,你可以摸一张牌。', - duwu_info:'出牌阶段,你可以弃置X张牌对你攻击范围内的一名其他角色造成1点伤害(X为该角色的体力值)。若该角色因此法进入濒死状态,则你于濒死状态结算后失去1点体力,且本回合不能再发动〖黩武〗。', + duwu_info:'出牌阶段,你可以弃置X张牌对你攻击范围内的一名其他角色造成1点伤害(X为该角色的体力值)。若该角色因此法进入濒死状态且存活,则你于濒死状态结算后失去1点体力,且本回合不能再发动〖黩武〗。', tianming_info:'当你成为【杀】的目标时,你可以弃置两张牌(不足则全弃,无牌则不弃),然后摸两张牌;若此时全场体力值最多的角色仅有一名且不是你,该角色也可以如此做。', mizhao_info:'出牌阶段限一次,你可以将所有手牌交给一名其他角色。若如此做,你令该角色与你指定的另一名有手牌的角色拼点,视为拼点赢的角色对没赢的角色使用一张【杀】。', yuanhu_info:'结束阶段开始时,你可以将一张装备牌置于一名角色的装备区里,然后根据此装备牌的类型执行以下对应效果。武器牌:弃置该角色距离1以内的一名角色区域中的一张牌;防具牌:该角色摸一张牌;坐骑牌:该角色回复1点体力。', diff --git a/character/sp2.js b/character/sp2.js index d50160732..8e556c186 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -4,12 +4,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:'sp2', connect:true, character:{ + liubian:['male','qun',3,['shiyuan','dushi'],['unseen']], xin_baosanniang:['female','shu',3,['xinfu_wuniang','decadexushen']], re_hejin:['male','qun',4,['spmouzhu']], hansui:['male','qun',4,['spniluan','spweiwu']], liuhong:['male','qun',4,['yujue','tuxing'],['unseen']], zhujun:['male','qun',4,['gongjian','kuimang'],['unseen']], - caoxing:['male','qun',4,['cxliushi','zhanwan'],['unseen']], + caoxing:['male','qun',4,['cxliushi','zhanwan']], re_maliang:['male','shu',3,['rexiemu','heli'],[]], ol_yujin:['male','wei',4,['rezhenjun']], ol_xinxianying:['female','wei',3,['caishi','zhongjian']], @@ -70,6 +71,48 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, skill:{ + shiyuan:{ + trigger:{target:'useCardToTargeted'}, + frequent:true, + filter:function(event,player){ + return player!=event.player&&!player.getHistory('gain',function(evt){ + return evt.getParent(2).name=='shiyuan'&&evt.cards.length==(2+get.sgn(event.player.hp-player.hp)); + }).length; + }, + content:function(){ + player.draw(2+get.sgn(trigger.player.hp-player.hp)); + }, + }, + dushi:{ + global:'dushi2', + locked:true, + trigger:{player:'die'}, + forceDie:true, + direct:true, + skillAnimation:true, + animationColor:'gray', + content:function(){ + 'step 0' + player.chooseTarget('请选择【毒逝】的目标','选择一名其他角色,令其获得技能【毒逝】',true,lib.filter.notMe).set('forceDie',true).set('ai',function(target){ + return -get.attitude(_status.event.player,target); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('dushi',target); + target.markSkill('dushi'); + target.addSkillLog('dushi'); + } + }, + intro:{content:'您已经获得弘农王的诅咒'}, + }, + dushi2:{ + mod:{ + cardSavable:function(card,player,target){ + if(card.name=='tao'&&target!=player&&target.hasSkill('dushi')) return false; + }, + }, + }, decadexushen:{ derivation:'decadezhennan', audio:'xinfu_xushen', @@ -363,6 +406,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, cxliushi:{ + audio:2, enable:'phaseUse', filter:function(event,player){ return player.countCards('he',{suit:'heart'})>0; @@ -370,7 +414,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ filterCard:{suit:'heart'}, position:'he', filterTarget:function(card,player,target){ - return player.canUse('sha',target); + return player.canUse('sha',target,false); + }, + check:function(card){ + var player=_status.event.player; + var next=player.getNext(); + var att=get.attitude(player,next); + if(att>0){ + var js=next.getCards('j'); + if(js.length) return get.judge(js[0])+10-get.value(card); + return 9-get.value(card) + } + return 6-get.value(card); }, discard:false, prepare:'throw', @@ -379,15 +434,36 @@ game.import('character',function(lib,game,ui,get,ai,_status){ cards[0].fix(); ui.cardPile.insertBefore(cards[0],ui.cardPile.firstChild); game.updateRoundNumber(); - player.useCard({name:'sha',isCard:true},false,targets); - "step 1" - if(target.getHistory('damage',function(evt){ - var evt2=evt.getParent('useCard'); - return evt.card==evt2.card&&evt2.getParent()==event; - }).length){ - target.addSkill('cxliushi2'); - target.addMark('cxliushi2',1,false); - } + player.useCard({name:'sha',isCard:true},false,targets).card.cxliushi=true; + }, + group:'cxliushi_damage', + subSkill:{ + damage:{ + trigger:{source:'damageSource'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.card&&event.card.cxliushi==true&&event.player.isAlive()&&event.getParent(3).name=='cxliushi'; + }, + content:function(){ + trigger.player.addMark('cxliushi2',1); + trigger.player.addSkill('cxliushi2'); + }, + }, + }, + ai:{ + order:function(){ + return get.order({name:'sha'})-0.4; + }, + result:{ + target:function(player,target){ + var eff=get.effect(target,{name:'sha'},player,target); + var damageEff=get.damageEffect(target,player,player); + if(eff>0) return damageEff>0?0:eff; + if(target.hasSkill('bagua_skill')||target.hasSkill('rw_bagua_skill')||target.hasSkill('bazhen')) return 0; + return eff; + }, + }, }, }, cxliushi2:{ @@ -397,11 +473,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, onremove:true, + charlotte:true, intro:{ + name2:'流', content:'手牌上限-#', }, }, zhanwan:{ + audio:2, trigger:{global:'phaseDiscardEnd'}, forced:true, filter:function(event,player){ @@ -5701,9 +5780,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ wangshuang:'王双(?-228年),三国时期曹魏将领。蜀汉建兴六年(228年)冬,诸葛亮出散关,攻陈仓,后粮尽而退。王双率领骑兵追击蜀军,但在与蜀军的交战中被击败,王双也被蜀军所斩。在《三国演义》中,王双字子全,是陇西郡狄道县(今甘肃临洮县)人,有万夫不当之勇。在诸葛亮北伐期间,被魏延所斩。', wenyang:"文俶(238年—291年),一作文淑,字次骞,小名阿鸯,世称文鸯,谯郡(今安徽亳州市)人。魏末晋初名将,曹魏扬州刺史文钦之子。骁勇善战,依附大将军曹爽,效忠于王室。司马师废黜皇帝曹芳后,随父联合毌丘俭于淮南起兵勤王。兵败之后,向南投奔吴国。诸葛诞发动淮南叛乱,奉命率军驰援。双方发生内讧,父亲为诸葛诞所害,遂降于司马昭,封关内侯。西晋建立后,任平虏护军。咸宁三年(277年),拜平西将军、都督凉秦雍州三州军事,大破鲜卑首领秃发树机能,名震天下,迁使持节、护东夷校尉、监辽东军事。八王之乱中,为诸葛诞外孙、东安王司马繇所诬杀,惨遭灭族,时年五十四岁。", liuzan:'字正明,会稽长山人人,曾任左护军,有两子:留略、留平。少为会稽郡吏,曾参与镇压黄巾起义,后被东吴大将凌统所引用,任屯骑校尉。吴五凤二年(公元255年)留赞任左护军,随孙峻征淮南,因病撤军,被魏将蒋班围困于道,力战而死,时年73岁。', - caoxing:'曹性,东汉末年吕布部将,史载他曾与身为自己上司的反叛者郝萌交战,并砍去郝萌一臂,受到吕布的嘉奖。在罗贯中所著古典小说《三国演义》中,也有关于曹性箭射夏侯惇左目的描述,而曹性也随即被暴怒的夏侯惇所杀。', + caoxing:'曹性,东汉末年吕布部将,史载他曾与身为自己上司的反叛者郝萌交战,并砍去郝萌一臂,受到吕布的嘉奖。在罗贯中所著古典小说《三国演义》中,也有关于曹性箭射夏侯惇左目的描述,而曹性也随即被暴怒的夏侯惇所杀。在穿越小说《三国之银河射手》中,主角穿越成为曹性,经过一番闯荡之后,被封为“银河射手”。', zhujun:'朱儁(?-195年),字公伟。会稽郡上虞县(今浙江绍兴上虞区)人。东汉末年名将。朱儁出身寒门,赡养母亲,以好义轻财闻名,受乡里敬重。后被太守徐珪举为孝廉,任兰陵令,颇有治绩。再升任交州刺史,以家兵五千大破叛军,平定交州。战后以功封都亭侯,入朝为谏议大夫。光和七年(184年),黄巾起义爆发,朱儁以右中郎将、持节平定三郡之地,以功进封西乡侯,迁镇贼中郎将。又率军讨平黄巾,“威声满天下”。中平二年(185年),进拜右车骑将军,更封钱塘侯。后为河内太守,击退进逼的张燕。权臣董卓秉政时,想任朱儁为副手,遭其婉拒。其后出逃荆州,更屯军中牟,徐州刺史陶谦等欲推举他为太师,并传檄各州牧伯,相邀讨伐李傕、奉迎天子。但朱儁却奉诏入京任太仆。初平三年(192年),升任太尉、录尚书事。兴平元年(194年),行骠骑将军事,持节镇关东,因故未成行。兴平二年(195年),李傕与郭汜相互攻杀,郭汜扣留朱儁作为人质。朱儁性格刚烈,即日发病而死。', liuhong:'汉灵帝刘宏(157年,一作156年-189年5月13日),生于冀州河间国(今河北深州)。东汉第十二位皇帝(168年-189年在位),汉章帝刘炟的玄孙。刘宏早年世袭解渎亭侯。永康元年(167年)十二月,汉桓帝刘志逝世,刘宏被外戚窦氏挑选为皇位继承人,于建宁元年(168年)正月即位。刘宏在位的大部分时期,施行党锢及宦官政治。他又设置西园,巧立名目搜刮钱财,甚至卖官鬻爵以用于自己享乐。在位晚期,爆发了黄巾起义,而凉州等地也陷入持续动乱之中。中平六年(189年),刘宏去世,谥号孝灵皇帝,葬于文陵。刘宏喜好辞赋,作有《皇羲篇》、《追德赋》、《令仪颂》、《招商歌》等。', + liubian:'刘辩(176年-190年3月6日),是汉灵帝刘宏与何皇后的嫡长子。刘辩在灵帝驾崩后继位为帝,史称少帝,由于年幼,实权掌握在临朝称制的母亲何太后和母舅大将军何进手中。少帝在位时期,东汉政权已经名存实亡,他即位后不久即遭遇以何进为首的外戚集团和以十常侍为首的内廷宦官集团这两大敌对政治集团的火并,被迫出宫,回宫后又受制于以“勤王”为名进京的凉州军阀董卓,终于被废为弘农王,成为东汉唯一被废黜的皇帝,其同父异母弟陈留王刘协继位为帝,是为汉献帝。被废黜一年之后,刘辩在董卓胁迫下自尽,时年仅十五岁(一说十八岁),其弟献帝追谥他为怀王。中国古代的史书中称刘辩为皇子辩、少帝和弘农王等。因为在位不逾年,传统上称东汉共十二帝,刘辩与东汉另一位少帝刘懿都不在其中,亦皆无本纪;不过,现代史学界也有观点承认两位少帝均是汉朝皇帝,则刘辩为东汉第十三位皇帝。', }, characterTitle:{ wulan:'#b对决限定武将', @@ -6027,9 +6107,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ caoxing:'曹性', cxliushi:'流矢', cxliushi2:'流矢', - cxliushi_info:'出牌阶段,你可以将一张红桃牌置于牌堆顶,视为对一名角色使用一张不计入次数的【杀】。若此【杀】造成伤害,该角色手牌上限永久-1。', + cxliushi_info:'出牌阶段,你可以将一张红桃牌置于牌堆顶,视为对一名角色使用一张【杀】(无距离限制且不计入使用次数)。当此【杀】造成伤害后,受到伤害的角色获得一个“流”。有“流”的角色手牌上限-X(X为其“流”数)。', zhanwan:'斩腕', - zhanwan_info:'锁定技,受到【流矢】效果影响的角色若弃牌阶段有弃牌,你摸等量的牌,然后移除【流矢】的效果。', + zhanwan_info:'锁定技,有“流”的角色于弃牌阶段弃牌后,你摸等量的牌,然后其移去所有的“流”。', zhujun:'朱儁', gongjian:'攻坚', gongjian_info:'每回合限一次,当你使用【杀】指定目标后,若此【杀】和你使用的上一张【杀】有相同的目标,则你可以弃置其两张牌,然后获得以此法弃置的所有【杀】。', @@ -6051,6 +6131,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ decadexushen_info:"限定技,当你因其他角色而脱离濒死状态后,若场上没有“关索”,则你可发动此技能。你可令其选择是否将自己的一张武将牌变更为“关索”并摸三张牌。然后你回复一点体力,并获得技能〖镇南〗。", decadezhennan:"镇南", decadezhennan_info:"当你成为锦囊牌的目标后,若此牌的目标数大于1,则你可以对一名其他角色造成1点伤害。", + liubian:'刘辩', + shiyuan:'诗怨', + shiyuan_info:'每回合每项限一次, 当你成为其他角色使用牌的目标后: 1.若其体力值比你多,你摸三张牌; 2.若其体力值与你相同,你摸两张牌; 3.若其体力值比你少,你摸一张牌。', + dushi:'毒逝', + dushi_info:'锁定技,你处于濒死状态时,其他角色不能对你使用【桃】。你死亡时,你选择一名其他角色获得〖毒逝〗。', sp_whlw:"文和乱武", sp_zlzy:"逐鹿中原", diff --git a/character/standard.js b/character/standard.js index 3d394d210..a7eddcee0 100755 --- a/character/standard.js +++ b/character/standard.js @@ -843,34 +843,52 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:'jijiang1', audioname:['liushan','re_liubei','re_liushan','ol_liushan'], unique:true, - group:['jijiang1','jijiang2'], + group:['jijiang1'], zhuSkill:true, + filter:function(event,player){ + if(!player.hasZhuSkill('jijiang')||!game.hasPlayer(function(current){ + return current!=player&¤t.group=='shu'; + })) return false; + return !event.jijiang&&(event.type!='phase'||!player.hasSkill('jijiang3')); + }, + enable:['chooseToUse','chooseToRespond'], + viewAs:{name:'sha'}, + filterCard:function(){return false}, + selectCard:-1, + ai:{ + order:function(){ + return get.order({name:'sha'})+0.3; + }, + respondSha:true, + skillTagFilter:function(player){ + if(!player.hasZhuSkill('jijiang')||!game.hasPlayer(function(current){ + return current!=player&¤t.group=='shu'; + })) return false; + }, + }, }, jijiang1:{ audio:2, audioname:['liushan','re_liubei','re_liushan','ol_liushan'], - trigger:{player:'chooseToRespondBegin'}, - check:function(event){ - if(event.jijiang) return false; - return true; - }, + trigger:{player:['useCardBegin','respondBegin']}, + logTarget:'targets', filter:function(event,player){ - if(event.responded) return false; - if(player.storage.jijianging) return false; - if(!player.hasZhuSkill('jijiang')) return false; - if(!event.filterCard({name:'sha'},player,event)) return false; - return game.hasPlayer(function(current){ - return current!=player&¤t.group=='shu'; - }); + return event.skill=='jijiang'; }, + forced:true, content:function(){ "step 0" + delete trigger.skill; + trigger.getParent().set('jijiang',true); + "step 1" if(event.current==undefined) event.current=player.next; if(event.current==player){ + player.addTempSkill('jijiang3'); event.finish(); + trigger.cancel(); + trigger.getParent().goto(0); } else if(event.current.group=='shu'){ - player.storage.jijianging=true; var next=event.current.chooseToRespond('是否替'+get.translation(player)+'打出一张杀?',{name:'sha'}); next.set('ai',function(){ var event=_status.event; @@ -886,13 +904,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.current=event.current.next; event.redo(); } - "step 1" - player.storage.jijianging=false; + "step 2" if(result.bool){ event.finish(); - trigger.result=result; - trigger.responded=true; - trigger.animate=false; + trigger.card=result.card; + trigger.cards=result.cards; + trigger.throw=false; if(typeof event.current.ai.shown=='number'&&event.current.ai.shown<0.95){ event.current.ai.shown+=0.3; if(event.current.ai.shown>0.95) event.current.ai.shown=0.95; @@ -900,104 +917,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } else{ event.current=event.current.next; - event.goto(0); + event.goto(1); } } }, - jijiang2:{ - audio:'jijiang1', - audioname:['liushan','re_liubei','re_liushan','ol_liushan'], - enable:'chooseToUse', - prompt:'选择一名目标角色。若有其他蜀势力角色打出【杀】响应,则视为你对其使用此【杀】。', - filter:function(event,player){ - if(event.filterCard&&!event.filterCard({name:'sha'},player,event)) return false; - if(!player.hasZhuSkill('jijiang')) return false; - if(player.hasSkill('jijiang3')) return false; - if(!lib.filter.cardUsable({name:'sha'},player)) return false; - return game.hasPlayer(function(current){ - return current!=player&¤t.group=='shu'; - }); - }, - filterTarget:function(card,player,target){ - if(_status.event._backup&& - typeof _status.event._backup.filterTarget=='function'&& - !_status.event._backup.filterTarget({name:'sha'},player,target)){ - return false; - } - return player.canUse({name:'sha'},target); - }, - content:function(){ - "step 0" - if(event.current==undefined) event.current=player.next; - if(event.current==player){ - player.addSkill('jijiang3'); - event.getParent(2).step=0; - event.finish(); - } - else if(event.current.group=='shu'){ - var next=event.current.chooseToRespond('是否替'+get.translation(player)+'对'+get.translation(target)+'使用一张杀', - function(card,player,event){ - event=event||_status.event; - return card.name=='sha'&&event.source.canUse(card,event.target); - }); - next.set('ai',function(card){ - var event=_status.event; - return get.effect(event.target,card,event.source,event.player); - }); - next.set('source',player); - next.set('target',target); - next.set('jijiang',true); - next.set('skillwarn','替'+get.translation(player)+'打出一张杀'); - next.noOrdering=true; - next.autochoose=lib.filter.autoRespondSha; - } - else{ - event.current=event.current.next; - event.redo(); - } - "step 1" - if(result.bool){ - event.finish(); - if(result.cards&&result.cards.length){ - player.useCard({name:'sha',isCard:true},result.cards,target).animate=false; - } - else{ - 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; - if(event.current.ai.shown>0.95) event.current.ai.shown=0.95; - } - } - else{ - event.current=event.current.next; - event.goto(0); - } - }, - ai:{ - respondSha:true, - skillTagFilter:function(player){ - if(!player.hasZhuSkill('jijiang')) return false; - return game.hasPlayer(function(current){ - return current!=player&¤t.group=='shu'; - }); - }, - result:{ - target:function(player,target){ - if(player.hasSkill('jijiang3')) return 0; - return get.effect(target,{name:'sha'},player,target); - } - }, - order:function(){ - return get.order({name:'sha'})-0.1; - }, - } - }, jijiang3:{ trigger:{global:['useCardAfter','useSkillAfter','phaseAfter']}, silent:true, + charlotte:true, filter:function(event){ - return event.skill!='jijiang2'&&event.skill!='qinwang2'; + return event.skill!='jijiang'&&event.skill!='qinwang'; }, content:function(){ player.removeSkill('jijiang3'); diff --git a/character/yijiang.js b/character/yijiang.js index 54092abb8..bb5b03ee7 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -6950,103 +6950,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){ qinwang:{ audio:'qinwang1', unique:true, - group:['qinwang1','qinwang2'], + group:['qinwang1'], zhuSkill:true, - subSkill:{ - ai:{} - } - }, - qinwang1:{ - audio:2, - trigger:{player:'chooseToRespondBegin'}, filter:function(event,player){ - if(event.responded) return false; - if(!player.hasZhuSkill('qinwang')) return false; - if(!player.countCards('he')) return false; - if(!event.filterCard({name:'sha'},player,event)) return false; - return game.hasPlayer(function(current){ + if(!player.hasZhuSkill('qinwang')||!game.hasPlayer(function(current){ return current!=player&¤t.group=='shu'; - }); + })||!player.countCards('he')) return false; + return !event.jijiang&&(event.type!='phase'||!player.hasSkill('jijiang3')); }, - direct:true, - content:function(){ - "step 0" - var yep=false; - if(!player.storage.jijianging&&!trigger.jijiang){ - var players=game.filterPlayer(); - for(var i=0;i2&&(nh>=3&&players[i].countCards('h','sha'))){ - yep=true;break; - } - } - } - var next=player.chooseToDiscard(get.prompt('qinwang'),'弃置一张牌并发动【激将】','he'); - next.set('ai',function(card){ - if(_status.event.yep) return 5-get.value(card); - return 0; - }); - next.set('yep',yep); - next.logSkill='qinwang' - "step 1" - if(!result.bool){ - event.finish(); - } - "step 2" - if(event.current==undefined) event.current=player.next; - if(event.current==player){ - event.finish(); - } - else if(event.current.group=='shu'){ - player.storage.jijianging=true; - var next=event.current.chooseToRespond('是否替'+get.translation(player)+'打出一张杀?',{name:'sha'}); - next.set('ai',function(){ - var event=_status.event; - return (get.attitude(event.player,event.sourcex)-2); - }); - next.set('sourcex',player); - next.set('jijiang',true); - next.noOrdering=true; - next.autochoose=lib.filter.autoRespondSha; - } - else{ - event.current=event.current.next; - event.redo(); - } - "step 3" - player.storage.jijianging=false; - if(result.bool){ - event.finish(); - trigger.result=result; - trigger.responded=true; - trigger.animate=false; - event.current.draw(); - if(typeof event.current.ai.shown=='number'&&event.current.ai.shown<0.95){ - event.current.ai.shown+=0.3; - if(event.current.ai.shown>0.95) event.current.ai.shown=0.95; - } - } - else{ - event.current=event.current.next; - event.goto(2); - } - } - }, - qinwang2:{ - audio:'qinwang1', - enable:'chooseToUse', - filter:function(event,player){ - if(event.filterCard&&!event.filterCard({name:'sha'},player,event)) return false; - if(!player.hasZhuSkill('qinwang')) return false; - if(!lib.filter.cardUsable({name:'sha'},player)) return false; - return game.hasPlayer(function(current){ - return current!=player&¤t.group=='shu'; - }); + enable:['chooseToUse','chooseToRespond'], + viewAs:{ + name:'sha', + cards:[], + suit:'none', + number:null, + isCard:true, }, - filterCard:true, + filterCard:lib.filter.cardDiscardable, position:'he', check:function(card){ var player=_status.event.player,players=game.filterPlayer(); + if(player.hasSkill('qinwang_ai')) return false; for(var i=0;i2&&(nh>=3&&players[i].countCards('h','sha'))){ @@ -7055,36 +6979,51 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } return 0; }, - filterTarget:function(card,player,target){ - if(_status.event._backup&& - typeof _status.event._backup.filterTarget=='function'&& - !_status.event._backup.filterTarget({name:'sha'},player,target)){ - return false; - } - return player.canUse({name:'sha'},target); + ai:{ + order:function(){ + return get.order({name:'sha'})-0.3; + }, + respondSha:true, + skillTagFilter:function(player){ + if(!player.hasZhuSkill('qinwang')||!game.hasPlayer(function(current){ + return current!=player&¤t.group=='shu'; + })||!player.countCards('he')) return false; + }, }, + }, + qinwang1:{ + audio:2, + trigger:{player:['useCardBegin','respondBegin']}, + logTarget:'targets', + filter:function(event,player){ + return event.skill=='qinwang'; + }, + forced:true, content:function(){ "step 0" + delete trigger.skill; + delete trigger.card.cards; + player.discard(trigger.cards); + delete trigger.cards; + trigger.getParent().set('jijiang',true); + "step 1" if(event.current==undefined) event.current=player.next; if(event.current==player){ - player.addSkill('jijiang3'); + player.addTempSkill('jijiang3'); player.addTempSkill('qinwang_ai'); - event.getParent(2).step=0; event.finish(); + trigger.cancel(); + trigger.getParent().goto(0); } else if(event.current.group=='shu'){ - var next=event.current.chooseToRespond('是否替'+get.translation(player)+'对'+get.translation(target)+'使用一张杀', - function(card,player,event){ - var evt=event||_status.event; - return card.name=='sha'&&evt.source.canUse(card,evt.target); - }); - next.set('ai',function(card){ + var next=event.current.chooseToRespond('是否替'+get.translation(player)+'打出一张杀?',{name:'sha'}); + next.set('ai',function(){ var event=_status.event; - return get.effect(event.target,card,event.source,event.player); + return (get.attitude(event.player,event.source)-2); }); next.set('source',player); - next.set('target',target); next.set('jijiang',true); + next.set('skillwarn','替'+get.translation(player)+'打出一张杀'); next.noOrdering=true; next.autochoose=lib.filter.autoRespondSha; } @@ -7092,16 +7031,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.current=event.current.next; event.redo(); } - "step 1" + "step 2" if(result.bool){ - event.finish(); event.current.draw(); - if(result.cards&&result.cards.length){ - player.useCard({name:'sha',isCard:true},result.cards,target).animate=false; - } - else{ - player.useCard({name:'sha',isCard:true},target).animate=false; - } + event.finish(); + trigger.card=result.card; + trigger.cards=result.cards; + trigger.throw=false; if(typeof event.current.ai.shown=='number'&&event.current.ai.shown<0.95){ event.current.ai.shown+=0.3; if(event.current.ai.shown>0.95) event.current.ai.shown=0.95; @@ -7109,21 +7045,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } else{ event.current=event.current.next; - event.goto(0); + event.goto(1); } - }, - ai:{ - respondSha:true, - result:{ - target:function(player,target){ - if(player.hasSkill('jijiang3')) return 0; - if(player.hasSkill('qinwang_ai')) return 0; - return get.effect(target,{name:'sha'},player,target); - } - }, - order:function(){ - return get.order({name:'sha'})-0.1; - }, } }, zuoding:{ diff --git a/game/asset.js b/game/asset.js index b3d32e66b..1bfa895ce 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'v1.9.105.10', + 'v1.9.106', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -634,6 +634,7 @@ window.noname_asset_list=[ 'audio/die/sp_zhangliao.mp3', 'audio/die/re_caoxiu.mp3', 'audio/die/re_sunxiu.mp3', + 'audio/die/caoxing.mp3', 'audio/skill/anguo1.mp3', 'audio/skill/anguo2.mp3', @@ -2799,6 +2800,10 @@ window.noname_asset_list=[ 'audio/skill/reyanzhu2.mp3', 'audio/skill/tongqu1.mp3', 'audio/skill/tongqu2.mp3', + 'audio/skill/cxliushi1.mp3', + 'audio/skill/cxliushi2.mp3', + 'audio/skill/zhanwan1.mp3', + 'audio/skill/zhanwan2.mp3', 'font/huangcao.ttf', 'font/shousha.ttf', @@ -3447,6 +3452,7 @@ window.noname_asset_list=[ 'image/character/junk_zhangrang.jpg', 'image/character/key_shiroha.jpg', 'image/character/ns_caimao.jpg', + 'image/character/caoxing.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', @@ -5281,14 +5287,14 @@ window.noname_skin_list={ key_hinata:1, key_iwasawa:2, - key_nao:3, - key_shiki:4, + key_nao:4, + key_shiki:6, key_yui:2, key_yuri:4, key_yuzuru:2, - sp_key_kanade:1, + sp_key_kanade:8, key_kamome:1, - key_umi:1, + key_umi:2, key_umi2:1, key_mio:3, key_midori:1, @@ -5298,4 +5304,6 @@ window.noname_skin_list={ key_misuzu:1, key_nagisa:1, key_rin:3, + key_miki:1, + key_shiroha:6, }; \ No newline at end of file diff --git a/game/game.js b/game/game.js index bd2fca312..0fa50465a 100644 --- a/game/game.js +++ b/game/game.js @@ -9932,7 +9932,7 @@ if(info.notarget||range[1]==-1){ if(!info.notarget&&range[1]==-1){ for(var i=0;i=4; - }); - var vacancies={ - equip1:0, - equip2:0, - equip3:0, - equip4:0, - equip5:0 - }; - for(var i=0;i0){ - num++; - if(num>=3){ - return 1; - } - vacancies[type]--; - } - } - } - if(num&&player.hp==1){ - return 0.5; - } - return 0; - } - } - } - }, xuanlve:{ trigger:{ player:'loseAfter', @@ -7564,8 +7502,6 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gzdiancai_info:'其他角色的出牌阶段结束时,若你于此阶段失去了x张或更多的牌,则你可以将手牌摸至体力上限。若如此做,你可以变更副将(x为你的体力值)。', xuanlve:'旋略', xuanlve_info:'当你失去装备区里的牌后,你可以弃置一名其他角色的一张牌。', - yongjin:'勇进', - yongjin_info:'限定技,出牌阶段,你可以依次移动场上的至多三张装备牌。', lianzi:'敛资', lianzi_info:'出牌阶段限一次,你可以弃置一张手牌,然后亮出牌堆顶X张牌(X为吴势力角色装备区里的牌和“烽火”的总和),获得其中所有与你弃置牌类别相同的牌,将其余的牌置入弃牌堆,若你以此法一次获得了三张或更多的牌,则你失去技能〖敛资〗并获得技能〖制衡〗。', gzqice:'奇策',