diff --git a/card/standard.js b/card/standard.js index 25713431a..f0465801d 100644 --- a/card/standard.js +++ b/card/standard.js @@ -771,7 +771,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ value:5 }, result:{ - target:function(player,target){ + target_use:function(player,target){ if(player.hasUnknown(2)&&get.mode()!='guozhan') return 0; var nh=target.countCards('h'); if(get.mode()=='identity'){ @@ -781,6 +781,15 @@ game.import('card',function(lib,game,ui,get,ai,_status){ if(nh==1) return -1.7 return -1.5; }, + target:function(player,target){ + var nh=target.countCards('h'); + if(get.mode()=='identity'){ + if(target.isZhu&&nh<=2&&target.hp<=1) return -100; + } + if(nh==0) return -2; + if(nh==1) return -1.7 + return -1.5; + }, }, tag:{ respond:1, @@ -836,7 +845,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ value:5 }, result:{ - target:function(player,target){ + target_use:function(player,target){ if(player.hasUnknown(2)&&get.mode()!='guozhan') return 0; var nh=target.countCards('h'); if(get.mode()=='identity'){ @@ -846,6 +855,15 @@ game.import('card',function(lib,game,ui,get,ai,_status){ if(nh==1) return -1.7 return -1.5; }, + target:function(player,target){ + var nh=target.countCards('h'); + if(get.mode()=='identity'){ + if(target.isZhu&&nh<=2&&target.hp<=1) return -100; + } + if(nh==0) return -2; + if(nh==1) return -1.7 + return -1.5; + }, }, tag:{ respond:1, diff --git a/card/zhulu.js b/card/zhulu.js index 663d3b275..74d2a04e2 100644 --- a/card/zhulu.js +++ b/card/zhulu.js @@ -234,15 +234,21 @@ game.import('card',function(lib,game,ui,get,ai,_status){ order:5 }, result:{ - target:function(player,target){ - var hs=target.getCards('h'); - if(hs.length<=1){ - if(target==player&&(hs.length==0||hs[0].name=='kaihua')){ - return 0; - } - return 0.3; - } - return Math.sqrt(target.countCards('he')); + target:function(player,target,card){ + var cards=ui.selected.cards.concat(card.cards||[]); + var num=player.countCards('he',function(card){ + if(cards.contains(card)) return false; + if(get.type(card)=='equip') return 8>get.value(card); + return 6>get.value(card); + }); + if(!num) return 0; + if(player.countCards('he',function(card){ + if(cards.contains(card)) return false; + if(get.type(card)=='equip') return 4>get.value(card); + return false; + })) return 1.6; + if(num<2) return 0.5; + return 1.2; }, }, tag:{ @@ -325,9 +331,13 @@ game.import('card',function(lib,game,ui,get,ai,_status){ }, ai:{ order:9, + value:function(card,player){ + if(player.getEquip(4)==card) return 0; + return 4; + }, equipValue:function(card,player){ - if(get.position(card)=='e') return 0; - return 1; + if(player.getCards('e').contains(card)) return 0; + return -get.value(player.getCards('e')); }, basic:{ equipValue:5, @@ -335,8 +345,8 @@ game.import('card',function(lib,game,ui,get,ai,_status){ result:{ keepAI:true, target:function(player,target){ - var card=target.getCards('e'); - var val=get.value(card); + var cards=target.getCards('e'); + var val=get.value(cards,target); if(val>0) return -val; return 0; }, @@ -351,10 +361,13 @@ game.import('card',function(lib,game,ui,get,ai,_status){ skills:['yajiaoqiang_skill'], ai:{ equipValue:function(card,player){ - var skills=['longdan','kanpo','rekanpo','qingguo','reqingguo']; + var skills=['longdan','kanpo','rekanpo','qingguo','reqingguo','ollongdan','refanghun']; for(var i=0;i0) val+=4/num; return -val; } - return 0; + if(card){ + var val2=get.value(card,target); + if(val2>0) return val2/4; + } }, }, } @@ -581,10 +624,13 @@ game.import('card',function(lib,game,ui,get,ai,_status){ ai:{ order:9.5, equipValue:function(card,player){ - if(get.position(card)!='e') return 5; + if(card!=player.getEquip(5)) return 5; if(_status.jinhe&&_status.jinhe[card.cardid]&&(_status.event.name=='discardPlayerCard'||_status.event.name=='chooseToDiscard')) return 2*player.countCards('h'); return 0; }, + value:function(){ + return lib.card.jinhe.ai.equipValue.apply(this,arguments); + }, basic:{ equipValue:5, }, diff --git a/character/diy.js b/character/diy.js index f223ca6f2..d6589e6f9 100755 --- a/character/diy.js +++ b/character/diy.js @@ -6,10 +6,6 @@ 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','key_yuu'], character:{ sp_key_yuri:['female','qun',4,['mubing','ziqu','diaoling']], - ns_zhangwei:['female','shu',3,['nsqiyue','nsxuezhu']], - ns_chendao:['male','shu',4,['nsjianglie']], - yj_caoang:['male','wei',4,['yjxuepin']], - 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']], key_yuri:['female','key',3,['yuri_xingdong','key_huanjie','yuri_wangxi'],['zhu']], @@ -73,6 +69,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ns_sunchensunjun:['male','wu',5,['nsxianhai','nsxingchu']], ns_yuanxi:['male','qun',4,['nsshengyan','nsdaizhan']], ns_caoshuang:['male','wei',4,['nsjiquan','nsfuwei']], + + ns_jiaxu:['male','qun',3,['nsyice','luanwu']], + ns_zhangwei:['female','shu',3,['nsqiyue','nsxuezhu']], + ns_chendao:['male','shu',4,['nsjianglie']], + yj_caoang:['male','wei',4,['yjxuepin']], + diy_wenyang:['male','wei','4/6',['lvli','choujue']], // diy_caocao:['male','wei',4,['xicai','diyjianxiong','hujia']], // diy_hanlong:['male','wei',4,['siji','ciqiu']], diy_feishi:['male','shu',3,['nsshuaiyan','moshou']], @@ -170,7 +172,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ diy_fakenews:["diy_wenyang","ns_zhangwei","ns_caimao"], 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_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","key_sunohara","key_rin","key_sasami","key_akane","key_doruji","key_yuiko","key_riki","key_hisako","key_hinata","key_noda","key_tomoya","key_nagisa","key_ayato","key_ao","key_yuzuru","sp_key_kanade","key_mio","key_midori","key_kyoko","key_shizuru","key_shiorimiyuki","key_miki","key_shiori","key_kaori","sp_key_yuri","key_akiko","key_abyusa","key_godan","key_yuu","key_ryoichi","key_kotori","key_jojiro","key_shiroha"], - diy_yongjian:["ns_chendao","yj_caoang"], + diy_yongjian:["ns_chendao","yj_caoang","ns_jiaxu"], diy_trashbin:['old_jiakui','ol_guohuai','junk_zhangrang'], }, }, @@ -3406,7 +3408,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' event.bool=player.inRange(trigger.player); - player.addTempSkill('tomoya_wangjin_'+event.bool,{global:'roundStart'}); + player.addTempSkill('tomoya_wangjin_'+event.bool,'roundStart'); if(event.bool){ trigger.player.draw(); } @@ -4298,12 +4300,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, inari_baiwei:{ - enable:'chooseToUse', + enable:['chooseToUse','chooseToRespond'], filter:function(event,player){ if(event.type=='wuxie'||!player.countCards('he',{suit:'diamond'})) return false; for(var i=0;i0; }, }, - group:['inari_baiwei_sha','inari_baiwei_shan','inari_baiwei_draw'], + group:['inari_baiwei_shan','inari_baiwei_draw'], }, inari_baiwei_shan:{ - prompt:'将一张♦牌当做闪打出', - enable:'chooseToRespond', + prompt:'将一张♦牌当做闪使用或打出', + enable:['chooseToRespond','chooseToUse'], viewAs:{name:'shan'}, selectCard:1, filterCard:{suit:'diamond'}, @@ -4393,7 +4396,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, position:'he', ai:{ - order:1, + order:10, result:{player:1}, respondShan:true, skillTagFilter:function(player){ @@ -4401,26 +4404,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, }, - 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, @@ -5289,8 +5272,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, nsxuezhu:{ trigger:{player:'damageEnd',source:'damageSource'}, - filter:function(event,player){return event.player.isAlive()}, - content:function(){trigger.player.draw(2);trigger.player.turnOver();}, + filter:function(event,player){ + return event.player.isAlive(); + }, + logTarget:'player', + content:function(){ + trigger.player.draw(2); + trigger.player.turnOver(); + }, + check:function(event,player){ + return !event.player.isTurnedOver()||get.attitude(player,event.player)>0; + }, }, yukine_wenzhou:{ trigger:{global:'phaseUseBegin'}, @@ -6372,6 +6364,92 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, + nsyice:{ + trigger:{ + player:'loseAfter', + global:'cardsDiscardAfter', + }, + filter:function(event,player){ + if(event.name=='lose'){ + if(event.type!='discard') return false; + } + else{ + var evt=event.getParent(); + if(evt.name!='orderingDiscard'||!evt.relatedEvent||evt.relatedEvent.player!=player||!['useCard','respond'].contains(evt.relatedEvent.name)) return false; + } + return event.cards.filterInD('d').length>0; + }, + forced:true, + content:function(){ + 'step 0' + var evt=trigger.getParent().relatedEvent; + if((trigger.name=='discard'&&!trigger.delay)||evt&&evt.name=='respond') game.delayx(); + 'step 1' + var cards=trigger.cards.filterInD('d'); + player.$gain2(cards); + if(cards.length==1) event._result={bool:true,links:cards}; + else{ + var dialog=['遗策:选择要放置的卡牌','
(从左到右为从旧到新,后选择的后置入)
',cards]; + var cards2=player.getStorage('nsyice'); + if(cards2.length){ + dialog.push('
原有“策”
'); + dialog.push(cards2); + } + player.chooseButton(dialog,true,cards.length).set('filterButton',function(button){ + return _status.event.cards.contains(button.link); + }).set('cards',cards); + } + 'step 2' + game.cardsGotoSpecial(result.links); + player.markAuto('nsyice',result.links); + game.delayx(); + 'step 3' + var storage=player.storage.nsyice; + var bool=false; + for(var i=0;ii;j--){ + if(get.number(storage[i])==get.number(storage[j])){ + bool=true; + break; + } + } + if(bool) break; + } + if(bool){ + event.cards=storage.slice(0); + event.cards=storage.splice(i,j-i+1); + player.unmarkAuto('nsyice',event.cards); + } + else event.finish(); + 'step 4' + var cardsx=[]; + cardsx.push(cards.shift()); + cardsx.push(cards.pop()); + if(cards.length) player.gain(cards,'gain2'); + event.cards=cardsx; + 'step 5' + player.chooseButton(['将一张牌置于牌堆顶,将另一张牌置于牌堆底',cards],true); + 'step 6' + ui.cardPile.insertBefore(result.links[0].fix(),ui.cardPile.firstChild); + cards.remove(result.links[0]); + ui.cardPile.appendChild(cards[0].fix()); + game.updateRoundNumber(); + if(_status.dying.length) event.finish(); + 'step 7' + player.chooseTarget('对一名角色造成1点伤害',true).set('ai',function(target){ + var player=_status.event.player; + return get.damageEffect(target,player,player); + }); + 'step 8' + if(result.bool){ + var target=result.targets[0]; + player.line(target); + target.damage('nocard'); + } + }, + marktext:'策', + intro:{content:'cards'}, + }, junktaoluan:{ audio:'taoluan', enable:'chooseToUse', @@ -12080,10 +12158,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ns_caimao:'蔡瑁', nsdingzhou:'定州', nsdingzhou_info:'出牌阶段限一次,你可以选择一名区域内有牌的其他角色。你随机获得其区域内的一张牌,然后摸一张牌。若你以此法获得了两张颜色不同的牌,则你失去1点体力。', + ns_jiaxu:'贾诩', + nsyice:'遗策', + nsyice_info:'锁定技,当你使用/打出/弃置的牌进入弃牌堆后,你将这些牌以任意顺序置于你的武将牌上,称为“策”。若这些“策”中有点数相同的牌,则你获得这两张牌中的所有牌,将这两张牌置于牌堆两端。若场上没有处于濒死状态的角色,则你对一名角色造成1点伤害。', diy_tieba:'吧友设计', diy_default:'常规', diy_key:'论外', - diy_yongjian:'用间篇', + diy_yongjian:'其他官方武将', diy_yijiang:'设计比赛2020', diy_fakenews:'假新闻', diy_trashbin:'垃圾桶', diff --git a/character/rank.js b/character/rank.js index e7e813d3b..cd2c9ced0 100644 --- a/character/rank.js +++ b/character/rank.js @@ -943,6 +943,7 @@ window.noname_character_rank={ 'ns_huangchengyan', 'ns_sunchensunjun', 'ns_yuanxi', + 'ns_jiaxu', 'key_haruko', 'key_akiko', 'key_sunohara', diff --git a/character/refresh.js b/character/refresh.js index 54ab96141..8673f30c0 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -9,8 +9,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ refresh_huo:["ol_sp_zhugeliang","re_xunyu","re_dianwei","re_yanwen","ol_pangtong","ol_yuanshao","ol_pangde","re_taishici"], 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','xin_lingtong'], + refresh_yijiang1:['re_wuguotai','re_gaoshun','re_caozhi','yujin_yujin','re_lingtong','re_masu','xin_xusheng','xin_fazheng','xin_lingtong'], + refresh_yijiang2:['old_madai','wangyi','guanzhang','re_handang','re_zhonghui','re_liaohua','re_chengpu','re_caozhang','re_liubiao','re_bulianshi','xin_liubiao'], 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'], @@ -19,6 +19,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ connect:true, character:{ xin_lingtong:['male','wu',4,['decadexuanfeng','yongjin'],['unseen']], + xin_liubiao:['male','qun',3,['decadezishou','decadezongshi'],['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']], @@ -128,6 +129,71 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sunben:['zhouyu','taishici','daqiao'], }, skill:{ + decadezongshi:{ + audio:2, + mod:{ + maxHandcard:function(player,num){ + return num+game.countGroup(); + }, + }, + trigger:{target:'useCardToTargeted'}, + forced:true, + filter:function(event,player){ + return player!=_status.currentPhase&&player.countCards('h')>player.getHandcardLimit()&& + (get.type(event.card)=='delay'||get.color(event.card)=='nocolor'); + }, + content:function(){ + trigger.excluded.add(player); + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(target!=_status.currentPhase&&target.countCards('h')>target.getHandcardLimit()&& + (get.type(card)=='delay'||get.color(card)=='nocolor')) return 'zerotarget'; + }, + }, + }, + }, + decadezishou:{ + audio:2, + inherit:'rezishou', + group:'decadezishou_zhiheng', + ai:{ + threaten:1.8, + }, + }, + decadezishou_zhiheng:{ + trigger:{player:'phaseJieshuBegin'}, + direct:true, + filter:function(event,player){ + return player.countCards('h')>0&&!player.getHistory('useCard',function(evt){ + return evt.targets.filter(function(target){ + return target!=player; + }).length>0; + }).length; + }, + content:function(){ + 'step 0' + var list=[]; + var hs=player.getCards('h'); + for(var i of hs){ + list.add(get.suit(i,player)); + } + player.chooseToDiscard('h',get.prompt('decadezishou'),'弃置任意张花色不同的手牌并摸等量的牌',[1,list.length],function(card,player){ + if(ui.selected.cards.length){ + var suit=get.suit(card,player); + for(var i of ui.selected.cards){ + if(get.suit(i,player)==suit) return false; + } + } + return true; + }).set('ai',lib.skill.zhiheng.check).set('complexCard',true).logSkill='decadezishou'; + 'step 1' + if(result.bool){ + player.draw(result.cards.length); + } + }, + }, yongjin:{ unique:true, limited:true, @@ -211,7 +277,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var i; var att2=get.sgn(get.attitude(player,ui.selected.targets[0])); for(i=0;i0){ if(target.countCards('e',function(card){ return get.value(card,target)<0&&game.hasPlayer(function(current){ - return current!=player&¤t!=target&&get.attitude(player,current)<0&¤t.isEmpty(get.subtype(card)) + return current!=player&¤t!=target&&get.attitude(player,current)<0&¤t.isEmpty(get.subtype(card))&&get.effect(current,card,player,player)>0; }); })>0) return 9; } @@ -1785,7 +1851,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(current!=target&¤t!=player&&get.attitude(player,current)>0){ var es=target.getCards('e'); for(var i=0;i0&¤t.isEmpty(get.subtype(es[i]))&&get.value(es[i],current)>0) return true; + if(get.value(es[i],target)>0&¤t.isEmpty(get.subtype(es[i]))&&get.effect(current,es[i],player,player)>0) return true; } } })){ @@ -1798,7 +1864,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var i; var att2=get.sgn(get.attitude(player,ui.selected.targets[0])); for(i=0;iget.attitude(player,targets1)){ - if(get.value(button.link,targets0)<0) return 10; + if(get.value(button.link,targets0)<0) return get.effect(targets1,button.link,player,player); return 0; } else{ - return get.equipValue(button.link); + return get.value(button.link,targets0)*get.effect(targets1,button.link,player,player); } },targets[0]).set('targets0',targets[0]).set('targets1',targets[1]).set('filterButton',function(button){ var targets1=_status.event.targets1; @@ -1866,7 +1932,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(withatt){ if(get.sgn(get.value(es[i],current))!=-att) return false; var att2=get.sgn(get.attitude(player,current2)); - if(att2!=get.sgn(get.value(es[i],current2))) return false; + if(att==att2||att2!=get.sgn(get.value(es[i],current2))) return false; } return current!=current2&&!current2.isMin()&¤t2.isEmpty(get.subtype(es[i])); })){ @@ -3261,7 +3327,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, enable:'phaseUse', - usable:1, + //usable:1, prompt:'请选择〖制霸〗的目标', filter:function(event,player){ if(player.hasZhuSkill('olzhiba')&&!player.hasSkill('olzhiba3')&&game.hasPlayer(function(current){ @@ -3653,10 +3719,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ reguhuo:{ audio:2, derivation:'rechanyuan', - enable:'chooseToUse', + enable:['chooseToUse','chooseToRespond'], filter:function(event,player){ - return player.countCards('h')>0&&!player.hasSkill('reguhuo_phase')&& - event.type!='respondShan'&&event.type!='wuxie'; + if(!player.countCards('h')||player.hasSkill('reguhuo_phase')) return false; + for(var i of lib.inpile){ + if(i=='shan'||i=='wuxie') continue; + var type=get.type(i); + if((type=='basic'||type=='trick')&&event.filterCard({name:i},player,event)) return true; + if(i=='sha'&&(event.filterCard({name:i,nature:'fire'},player,event)||event.filterCard({name:i,nature:'thunder'},player,event))) return true; + } + return false; }, chooseButton:{ dialog:function(){ @@ -3682,7 +3754,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return current!=player&&!current.hasSkill('rechanyuan')&&(get.realAttitude||get.attitude)(current,player)<0; }); var card={name:button.link[2],nature:button.link[3]}; - var val=player.getUseValue(card); + var val=_status.event.getParent().type=='phase'?player.getUseValue(card):1; if(val<=0) return 0; if(hasEnemy){ if(!player.countCards('h',function(cardx){ @@ -3736,36 +3808,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player:1, }, }, - group:['reguhuo_sha','reguhuo_shan','reguhuo_wuxie','reguhuo_guess'], - }, - reguhuo_sha:{ - enable:'chooseToRespond', - viewAs:{ - name:'sha', - suit:'none', - number:null, - }, - viewAsFilter:function(player){ - return player.countCards('h')&&!player.hasSkill('reguhuo_phase'); - }, - check:function(card){ - var player=_status.event.player; - var hasEnemy=game.hasPlayer(function(current){ - return current!=player&&!current.hasSkill('rechanyuan')&&(get.realAttitude||get.attitude)(current,player)<0; - }); - var cardx='sha'; - if(hasEnemy){ - if(card.name==cardx) return 10; - return 0; - } - return 6-get.value(card); - }, - prompt:'将一张牌当做【杀】打出', - filterCard:true, - position:'h', - ai:{ - order:4, - }, + group:['reguhuo_shan','reguhuo_wuxie','reguhuo_guess'], }, reguhuo_shan:{ enable:['chooseToUse','chooseToRespond'], @@ -3841,7 +3884,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.addTempSkill('reguhuo_phase'); event.fake=false; var card=trigger.cards[0]; - if(card.name!=trigger.card.name||(trigger.name!='respond'&&card.name=='sha'&&(trigger.card.nature||card.nature)&&trigger.card.nature!=card.nature)) event.fake=true; + if(card.name!=trigger.card.name||(card.name=='sha'&&(trigger.card.nature||card.nature)&&trigger.card.nature!=card.nature)) event.fake=true; player.logSkill('reguhuo'); player.line(trigger.targets,get.nature(trigger.card)); event.cardTranslate=get.translation(trigger.card.name); @@ -8264,9 +8307,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_caoxiu:'界曹休', xin_lingtong:'界凌统', decadexuanfeng:'旋风', - decadexuanfeng_info:'当你于弃牌阶段弃置过至少两张牌,或当你失去装备区里的牌后,你可以弃置至多两名其他角色的共计两张牌。若此时是你的回合内,你可以对其中一个目标造成1点伤害。', + decadexuanfeng_info:'当你于弃牌阶段弃置过至少两张牌,或当你失去装备区里的牌后,你可以弃置至多两名其他角色的共计两张牌。若此时是你的回合内,你可以对其中一名目标造成1点伤害。', yongjin:'勇进', yongjin_info:'限定技,出牌阶段,你可以依次移动场上的至多三张不同的装备牌。', + xin_liubiao:'界刘表', + decadezishou:'自守', + decadezishou_zhiheng:'自守', + decadezishou_info:'摸牌阶段,你可以多摸X张牌,然后本回合你对其他角色造成伤害时,防止此伤害。结束阶段,若你本回合没有使用牌指定其他角色为目标,你可以弃置任意张花色不同的手牌,然后摸等量的牌。', + decadezongshi:'宗室', + decadezongshi_info:'锁定技,你的手牌上限+X(X为现存势力数)。你的回合外,若你的手牌数大于等于手牌上限,延时类锦囊牌或无颜色的牌对你无效。', refresh_standard:'界限突破·标', refresh_feng:'界限突破·风', diff --git a/character/sp.js b/character/sp.js index 8dd3df888..797b4e431 100755 --- a/character/sp.js +++ b/character/sp.js @@ -588,12 +588,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.addSkillLog(result.control); game.broadcastAll(function(skill){ var list=[skill];game.expandSkills(list); - for(var i of list){ - var info=lib.skill[i]; - if(!info) continue; - if(!info.audioname2) info.audioname2={}; - info.audioname2.caoshuang='tuogu'; - } + for(var i of list){ + var info=lib.skill[i]; + if(!info) continue; + if(!info.audioname2) info.audioname2={}; + info.audioname2.caoshuang='tuogu'; + } },result.control); }, }, @@ -625,12 +625,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ game.broadcastAll(function(skill){ var list=[skill]; game.expandSkills(list); - for(var i of list){ - var info=lib.skill[i]; - if(!info) continue; - if(!info.audioname2) info.audioname2={}; - info.audioname2.caoshuang='tuogu'; - } + for(var i of list){ + var info=lib.skill[i]; + if(!info) continue; + if(!info.audioname2) info.audioname2={}; + info.audioname2.caoshuang='tuogu'; + } },result.control); }, mark:true, @@ -783,11 +783,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ if(trigger.name=='lose'){ - for(var i of trigger.cards2){ - if(player.getStorage('zlshoufu2').filter(function(magic){ - return get.type2(magic)==get.type(i,trigger.hs.contains(i)?player:false); - }).length) player.storage.zlshoufu2_markcount++; - } + for(var i of trigger.cards2){ + if(player.getStorage('zlshoufu2').filter(function(magic){ + return get.type2(magic)==get.type(i,trigger.hs.contains(i)?player:false); + }).length) player.storage.zlshoufu2_markcount++; + } } if(trigger.name=='damage'||player.storage.zlshoufu2_markcount>=2) player.unmarkSkill('zlshoufu2'); else player.markSkill('zlshoufu2'); @@ -845,9 +845,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); if(card){ if(card.name=='qinggang'&&!lib.inpile.contains('qibaodao')){ - card.remove(); - card=game.createCard('qibaodao',card.suit,card.number); - } + card.remove(); + card=game.createCard('qibaodao',card.suit,card.number); + } targets[0].chooseUseTarget(card,true,'nopopup','nothrow'); } else{ @@ -2139,28 +2139,28 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, gzjili:{ mod:{ - aiOrder:function(player,card,num){ - if(player.isPhaseUsing()&&get.subtype(card)=='equip1'&&!get.cardtag(card,'gifts')){ - var range0=player.getAttackRange(); - var range=0; - var info=get.info(card); - if(info&&info.distance&&info.distance.attackFrom){ - range-=info.distance.attackFrom; - } - if(player.getEquip(1)){ - var num=0; - var info=get.info(player.getEquip(1)); - if(info&&info.distance&&info.distance.attackFrom){ - num-=info.distance.attackFrom; - } - range0-=num; - } - range0+=range; - if(range0==(player.getHistory('useCard').length+player.getHistory('respond').length+2)&&player.countCards('h',function(cardx){ - return get.subtype(cardx)!='equip1'&&player.getUseValue(cardx)>0; - })) return num+10; - } - }, + aiOrder:function(player,card,num){ + if(player.isPhaseUsing()&&get.subtype(card)=='equip1'&&!get.cardtag(card,'gifts')){ + var range0=player.getAttackRange(); + var range=0; + var info=get.info(card); + if(info&&info.distance&&info.distance.attackFrom){ + range-=info.distance.attackFrom; + } + if(player.getEquip(1)){ + var num=0; + var info=get.info(player.getEquip(1)); + if(info&&info.distance&&info.distance.attackFrom){ + num-=info.distance.attackFrom; + } + range0-=num; + } + range0+=range; + if(range0==(player.getHistory('useCard').length+player.getHistory('respond').length+2)&&player.countCards('h',function(cardx){ + return get.subtype(cardx)!='equip1'&&player.getUseValue(cardx)>0; + })) return num+10; + } + }, }, trigger:{player:['useCard','respond']}, frequent:true, @@ -2176,31 +2176,31 @@ game.import('character',function(lib,game,ui,get,ai,_status){ threaten:1.8, effect:{ target:function(card,player,target,current){ - if(player!=target||!player.isPhaseUsing()) return; - if(get.subtype(card)=='equip1'&&!get.cardtag(card,'gifts')){ - var range0=player.getAttackRange(); - var range=0; - var info=get.info(card); - if(info&&info.distance&&info.distance.attackFrom){ - range-=info.distance.attackFrom; - } - if(player.getEquip(1)){ - var num=0; - var info=get.info(player.getEquip(1)); - if(info&&info.distance&&info.distance.attackFrom){ - num-=info.distance.attackFrom; - } - range0-=num; - } - range0+=range; - var delta=range0-(player.getHistory('useCard').length+player.getHistory('respond').length); - if(delta<0) return; - var num=player.countCards('h',function(card){ - return (get.cardtag(card,'gifts')||get.subtype(card)!='equip1')&&player.getUseValue(card)>0; - }); - if(delta==2&&num>0) return [1,3]; - if(num>=delta) return 'zeroplayertarget'; - } + if(player!=target||!player.isPhaseUsing()) return; + if(get.subtype(card)=='equip1'&&!get.cardtag(card,'gifts')){ + var range0=player.getAttackRange(); + var range=0; + var info=get.info(card); + if(info&&info.distance&&info.distance.attackFrom){ + range-=info.distance.attackFrom; + } + if(player.getEquip(1)){ + var num=0; + var info=get.info(player.getEquip(1)); + if(info&&info.distance&&info.distance.attackFrom){ + num-=info.distance.attackFrom; + } + range0-=num; + } + range0+=range; + var delta=range0-(player.getHistory('useCard').length+player.getHistory('respond').length); + if(delta<0) return; + var num=player.countCards('h',function(card){ + return (get.cardtag(card,'gifts')||get.subtype(card)!='equip1')&&player.getUseValue(card)>0; + }); + if(delta==2&&num>0) return [1,3]; + if(num>=delta) return 'zeroplayertarget'; + } }, }, } @@ -5266,16 +5266,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ for(var i of map.skills) player.addSkillLog(i); } game.broadcastAll(function(list){ - game.expandSkills(list); - for(var i of list){ - var info=lib.skill[i]; - if(!info) continue; - if(!info.audioname2) info.audioname2={}; - info.audioname2.old_yuanshu='weidi'; - } - },map.skills); - 'step 3' - if(player.isMinHp()) player.recover(); + game.expandSkills(list); + for(var i of list){ + var info=lib.skill[i]; + if(!info) continue; + if(!info.audioname2) info.audioname2={}; + info.audioname2.old_yuanshu='weidi'; + } + },map.skills); + 'step 3' + if(player.isMinHp()) player.recover(); }, }, refanghun:{ @@ -5321,94 +5321,94 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sha:{ audio:'fanghun', enable:['chooseToUse','chooseToRespond'], - prompt:'弃置一枚【梅影】标记,将杀当做闪,或将闪当做杀,或将桃当做酒,或将酒当做桃使用或打出', - viewAs:function(cards,player){ - var name=false; - switch(get.name(cards[0],player)){ - case 'sha':name='shan';break; - case 'shan':name='sha';break; - case 'tao':name='jiu';break; - case 'jiu':name='tao';break; - } - if(name) return {name:name}; - return null; - }, - check:function(card){ - var player=_status.event.player; - if(_status.event.type=='phase'){ - var max=0; - var name2; - var list=['sha','tao','jiu']; - var map={sha:'shan',tao:'jiu',jiu:'tao'} - for(var i=0;i(name=='jiu'?1:0)&&player.getUseValue({name:name})>0){ - var temp=get.order({name:name}); - if(temp>max){ - max=temp; - name2=map[name]; - } - } - } - if(name2==get.name(card,player)) return 1; - return 0; - } - return 1; - }, - filterCard:function(card,player,event){ - event=event||_status.event; - var filter=event._backup.filterCard; - var name=get.name(card,player); - if(name=='sha'&&filter({name:'shan',cards:[card]},player,event)) return true; - if(name=='shan'&&filter({name:'sha',cards:[card]},player,event)) return true; - if(name=='tao'&&filter({name:'jiu',cards:[card]},player,event)) return true; - if(name=='jiu'&&filter({name:'tao',cards:[card]},player,event)) return true; - return false; - }, - filter:function(event,player){ - if(!player.storage.fanghun||player.storage.fanghun<0) return false; - var filter=event.filterCard; - if(filter({name:'sha'},player,event)&&player.countCards('h','shan')) return true; - if(filter({name:'shan'},player,event)&&player.countCards('h','sha')) return true; - if(filter({name:'tao'},player,event)&&player.countCards('h','jiu')) return true; - if(filter({name:'jiu'},player, event)&&player.countCards('h','tao')) return true; - return false; - }, - onrespond:function(){return this.onuse.apply(this,arguments)}, - onuse:function(result,player){ + prompt:'弃置一枚【梅影】标记,将杀当做闪,或将闪当做杀,或将桃当做酒,或将酒当做桃使用或打出', + viewAs:function(cards,player){ + var name=false; + switch(get.name(cards[0],player)){ + case 'sha':name='shan';break; + case 'shan':name='sha';break; + case 'tao':name='jiu';break; + case 'jiu':name='tao';break; + } + if(name) return {name:name}; + return null; + }, + check:function(card){ + var player=_status.event.player; + if(_status.event.type=='phase'){ + var max=0; + var name2; + var list=['sha','tao','jiu']; + var map={sha:'shan',tao:'jiu',jiu:'tao'} + for(var i=0;i(name=='jiu'?1:0)&&player.getUseValue({name:name})>0){ + var temp=get.order({name:name}); + if(temp>max){ + max=temp; + name2=map[name]; + } + } + } + if(name2==get.name(card,player)) return 1; + return 0; + } + return 1; + }, + filterCard:function(card,player,event){ + event=event||_status.event; + var filter=event._backup.filterCard; + var name=get.name(card,player); + if(name=='sha'&&filter({name:'shan',cards:[card]},player,event)) return true; + if(name=='shan'&&filter({name:'sha',cards:[card]},player,event)) return true; + if(name=='tao'&&filter({name:'jiu',cards:[card]},player,event)) return true; + if(name=='jiu'&&filter({name:'tao',cards:[card]},player,event)) return true; + return false; + }, + filter:function(event,player){ + if(!player.storage.fanghun||player.storage.fanghun<0) return false; + var filter=event.filterCard; + if(filter({name:'sha'},player,event)&&player.countCards('h','shan')) return true; + if(filter({name:'shan'},player,event)&&player.countCards('h','sha')) return true; + if(filter({name:'tao'},player,event)&&player.countCards('h','jiu')) return true; + if(filter({name:'jiu'},player, event)&&player.countCards('h','tao')) return true; + return false; + }, + onrespond:function(){return this.onuse.apply(this,arguments)}, + onuse:function(result,player){ player.removeMark('fanghun',1); }, - ai:{ - respondSha:true, - respondShan:true, - save:true, - skillTagFilter:function(player,tag){ - if(!player.storage.fanghun||player.storage.fanghun<0) return false; - var name; - switch(tag){ - case 'respondSha':name='shan';break; - case 'respondShan':name='sha';break; - case 'save':name='jiu';break; - } - if(!player.countCards('h',name)) return false; - }, - order:function(item,player){ - if(player&&_status.event.type=='phase'){ - var max=0; - var list=['sha','tao','jiu']; - var map={sha:'shan',tao:'jiu',jiu:'tao'} - for(var i=0;i(name=='jiu'?1:0)&&player.getUseValue({name:name})>0){ - var temp=get.order({name:name}); - if(temp>max) max=temp; - } - } - if(max>0) max+=0.3; - return max; - } - return 4; - }, + ai:{ + respondSha:true, + respondShan:true, + save:true, + skillTagFilter:function(player,tag){ + if(!player.storage.fanghun||player.storage.fanghun<0) return false; + var name; + switch(tag){ + case 'respondSha':name='shan';break; + case 'respondShan':name='sha';break; + case 'save':name='jiu';break; + } + if(!player.countCards('h',name)) return false; + }, + order:function(item,player){ + if(player&&_status.event.type=='phase'){ + var max=0; + var list=['sha','tao','jiu']; + var map={sha:'shan',tao:'jiu',jiu:'tao'} + for(var i=0;i(name=='jiu'?1:0)&&player.getUseValue({name:name})>0){ + var temp=get.order({name:name}); + if(temp>max) max=temp; + } + } + if(max>0) max+=0.3; + return max; + } + return 4; + }, }, }, } @@ -5467,14 +5467,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.popup(event.list[0]); player.storage.zhuSkill_yjixi=event.list; game.broadcastAll(function(list){ - game.expandSkills(list); - for(var i of list){ - var info=lib.skill[i]; - if(!info) continue; - if(!info.audioname2) info.audioname2={}; - info.audioname2.old_yuanshu='weidi'; - } - },event.list); + game.expandSkills(list); + for(var i of list){ + var info=lib.skill[i]; + if(!info) continue; + if(!info.audioname2) info.audioname2={}; + info.audioname2.old_yuanshu='weidi'; + } + },event.list); } } }, @@ -9557,12 +9557,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); "step 1" if(result.bool){ - player.addSkill('rebiluan2'); - var ng=Math.min(4,game.countPlayer()); - player.$damagepop(ng,'unknownx'); - player.storage.rebiluan2+=ng; - player.markSkill('rebiluan2'); - game.addVideo('storage',player,['rebiluan2',player.storage.rebiluan2]); + player.addSkill('rebiluan2'); + var ng=Math.min(4,game.countPlayer()); + player.$damagepop(ng,'unknownx'); + player.storage.rebiluan2+=ng; + player.markSkill('rebiluan2'); + game.addVideo('storage',player,['rebiluan2',player.storage.rebiluan2]); } }, }, @@ -9629,10 +9629,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); "step 1" if(event.videoId!=undefined){ - if(player.isOnline2()){ - player.send('closeDialog',event.videoId); - } - event.dialog.close(); + if(player.isOnline2()){ + player.send('closeDialog',event.videoId); + } + event.dialog.close(); } var map=[ function(trigger,player,event){ @@ -9652,7 +9652,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ game.log(player,'选择了','#g【礼下】','的','#y选项'+get.cnNumber(result.links[i]+1,true)); map[result.links[i]](trigger,player,event); } - player.addSkill('rebiluan2'); + player.addSkill('rebiluan2'); player.storage.rebiluan2-=result.links.length; player.markSkill('rebiluan2'); game.addVideo('storage',player,['rebiluan2',player.storage.rebiluan2]); @@ -9866,7 +9866,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(!player.storage.kunfen){ event.skillHidden=true; } - player.chooseBool(get.prompt2('kunfen')).set('ai',function(){ + player.chooseBool(get.prompt('kunfen'),'结束阶段开始时,你可以失去1点体力,然后摸两张牌。').set('ai',function(){ var player=_status.event.player; if(player.hp>3) return true; if(player.hp==3&&player.countCards('h')<3) return true; @@ -10286,12 +10286,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, ai:{ - effect:function(card,player,target){ - var type=get.type2(card); - var list=target.getStorage('zuixiang2'); - for(var i of list){ - if(get.type2(i)==type) return 'zeroplayertarget'; - } + effect:{ + target:function(card,player,target){ + var type=get.type2(card); + var list=target.getStorage('zuixiang2'); + for(var i of list){ + if(get.type2(i)==type) return 'zeroplayertarget'; + } + }, }, }, }, @@ -12162,7 +12164,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return result; } return 1; - });; + }); 'step 1' var evt=event.getParent(2); if(result.bool&&result.links&&result.links.length){ @@ -13406,6 +13408,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, init:{ + audio:'xinfu_xionghuo', trigger:{ global:"gameDrawAfter", player:"enterGame", @@ -13433,13 +13436,34 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ai:{ order:11, result:{ - target:function (player,target){ - var mark=player.countMark('xionghuo'); - if(mark>2) return -1; - return Math.min(-(1+mark-target.hp),0); + target:function(player,target){ + if((player.countMark('xionghuo')>=2||!game.hasPlayer(function(current){ + return current!=player&&get.attitude(player,current)<0&¤t.hasMark('xionghuo'); + }))&&player.countCards('h',function(card){ + return get.tag(card,'damage')&&player.canUse(card,target,null,true) + &&player.getUseValue(card)>0&&get.effect_use(target,card,player)>0 + &&target.hasSkillTag('filterDamage',null,{ + player:player, + card:card, + }); + })) return 3/Math.max(1,target.hp); + if((!player.hasUnknown()&&game.countPlayer(function(current){ + return get.attitude(player,current)<0; + })<=1)||player.countMark('xionghuo')>=2){ + return -1; + } + return 0; }, }, - threaten:1.1, + effect:{ + player:function(card,player,target){ + if(player!=target&&get.tag(card,'damage')&&target&&target.hasMark('xionghuo')&&!target.hasSkillTag('filterDamage',null,{ + player:player, + card:card, + })) return [1,0,1,-2]; + }, + }, + threaten:1.6, }, }, xionghuo:{ diff --git a/character/sp2.js b/character/sp2.js index 8e556c186..46c3f8e71 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -1416,56 +1416,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, check:function(button){ var player=_status.event.player; - var players=game.filterPlayer(); - if(player.countCards('h',button.link)) return 0; - if(button.link[2]=='wuzhong'){ - if(player.countCards('h')0){ - return 1+Math.random(); - } - return 0; - } - if(button.link[2]=='nanman'||button.link[2]=='wanjian'||button.link[2]=='taoyuan'||button.link[2]=='wugu'){ - var eff=0; - for(var i=0;i0){ - return eff+Math.random(); - } - return 0; - } - return Math.random(); + if(player.countCards('h',button.link[2])) return 0; + if(_status.event.getParent().type!='phase') return 1; + return player.getUseValue({name:button.link[2]}); }, backup:function(links,player){ return { @@ -1475,7 +1428,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ check:function(card){ return 1; }, - viewAs:{name:links[0][2],nature:links[0][3]}, + viewAs:{name:links[0][2],nature:links[0][3],isCard:true}, } }, prompt:function(links,player){ diff --git a/character/tw.js b/character/tw.js index 28852b685..e2e237911 100644 --- a/character/tw.js +++ b/character/tw.js @@ -16,7 +16,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ tw_xiahouba:['male','shu',4,['twyanqin','twbaobian']], tw_zumao:['male','wu',4,['twtijin']], tw_caoang:['male','wei',4,['twxiaolian']], - tw_dingfeng:['male','wu',4,['twqijia','twzhulin']], + tw_dingfeng:['male','wu',4,['twqijia','twzhuchen']], tw_caohong:['male','wei',4,['twhuzhu','twliancai']], tw_maliang:['male','shu',3,['twrangyi','twbaimei']], kaisa:["male","western",4,["zhengfu"]], @@ -52,9 +52,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ target.chooseToUse({ prompt:'请使用得到的一张牌,或者受到来自'+get.translation(player)+'的一点伤害', filterCard:function(card,player,event){ - if(get.itemtype(card)!='card'||!cards.contains(card)) return false; + if(get.itemtype(card)!='card'||!event.cards.contains(card)) return false; return lib.filter.filterCard(card,player,event); }, + cards:cards, }); 'step 2' if(result.bool){ @@ -88,18 +89,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player:"damageBegin4", }, forced:true, - priority:15, - filter:function (event,player){ + filter:function(event,player){ if(player.countCards('h')) return false; if(event.nature) return true; return get.type(event.card,'trick')=='trick'; }, - content:function (){ + content:function(){ trigger.cancel(); }, ai:{ effect:{ - target:function (card,player,target,current){ + target:function(card,player,target,current){ if(target.countCards('h')) return; if(get.tag(card,'natureDamage')) return 'zerotarget'; if(get.type(card)=='trick'&&get.tag(card,'damage')){ @@ -128,9 +128,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(player.countGainableCards(player,'e')) target.gainPlayerCard(player,'e',true); 'step 3' if(target.isDamaged()&&target.hp<=player.hp){ - player.chooseBool('是否令'+get.translation(target)+'回复1点体力?').ai=function(){ + player.chooseBool('是否令'+get.translation(target)+'回复1点体力?').set('ai',function(){ return get.recoverEffect(target,player,player); - }; + }); } 'step 4' if(result.bool) target.recover(); @@ -139,7 +139,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ order:8, result:{ target:function(player,target){ - var eff=(target.isDamaged()&&target.hp<=player.hp)?get.recoverEffect(target,player,player):0; + var eff=(target.isDamaged()&&target.hp<=player.hp)?get.recoverEffect(target,player,target):0; if(eff<=0&&!player.countGainableCards(target,'e')) return -1; return eff; }, @@ -148,15 +148,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, twliancai:{ audio:2, - trigger:{player:['turnOverEnd','phaseEnd']}, + trigger:{player:['turnOverEnd','phaseJieshuBegin']}, filter:function(card,player,target){ - return target=='phaseEnd'||player.countCards('h')0; }, check:function(card,player){ - if(card.name=='turnOve') return true; + if(card.name=='turnOver') return true; if(player.isTurnedOver()) return true; if(player.hp-player.countCards('h')>1) return true; return game.hasPlayer(function(current){ @@ -170,11 +170,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return -att; }, prompt2:function(card,player,target){ - return card.name=='phase'?'将武将牌翻面,然后获得一名其他角色装备区内的一张牌':'将手牌摸至与体力值相同'; + return card.name=='phaseJieshu'?'将武将牌翻面,然后获得一名其他角色装备区内的一张牌':'将手牌摸至与体力值相同'; }, content:function(){ 'step 0' - if(event.triggername=='phaseEnd') player.turnOver(); + if(event.triggername=='phaseJieshuBegin') player.turnOver(); else{ player.draw(player.hp-player.countCards('h')); event.finish(); @@ -189,12 +189,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, twqijia:{ - group:'twqijia_alka', + //group:'twqijia_alka', audio:2, enable:'phaseUse', filter:function(event,player){ return player.countCards('e',function(card){ - return !player.storage.twqijia.contains(get.subtype(card)); + return !player.getStorage('twqijia_alka').contains(get.subtype(card)); }); }, filterTarget:function(card,player,target){ @@ -202,21 +202,30 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, position:'e', filterCard:function(card,player){ - return !player.storage.twqijia.contains(get.subtype(card)); + return !player.getStorage('twqijia_alka').contains(get.subtype(card)); }, content:function(){ 'step 0' - player.storage.twqijia.push(get.subtype(cards[0])); + player.addTempSkill('twqijia_alka'); + player.storage.twqijia_alka.push(get.subtype(cards[0])); player.useCard({name:'sha'},target,false); }, subSkill:{ alka:{ - sub:true, - trigger:{player:['phaseUseBegin','phaseUseEnd']}, - silent:true, - content:function(){ - player.storage.twqijia=[]; - player.storage.twzhulin=[]; + charlotte:true, + onremove:function(player){ + delete player.storage.twqijia_alka; + delete player.storage.twzhuchen; + player.unmarkSkill('twzhuchen'); + }, + init:function(player,skill){ + if(!player.storage[skill]) player.storage[skill]=[]; + if(!player.storage.twzhuchen) player.storage.twzhuchen=[]; + }, + mod:{ + globalFrom:function(from,to,distance){ + if(from.storage.twzhuchen&&from.storage.twzhuchen.contains(to)) return -Infinity; + } }, }, }, @@ -234,25 +243,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, }, - twzhulin:{ - group:'twqijia_alka', - locked:false, - mod:{ - globalFrom:function(from,to,distance){ - if(from.storage.twzhulin&&from.storage.twzhulin.contains(to)) return -Infinity; - } - }, + twzhuchen:{ enable:'phaseUse', filter:function(event,player){ - return player.countCards('h',lib.skill.twzhulin.filterCard)>0; + return player.countCards('h',lib.skill.twzhuchen.filterCard)>0; }, - filterCard:function(card){ - return card.name=='tao'||card.name=='jiu'; + filterCard:function(card,player){ + var name=get.name(card,player); + return name=='tao'||name=='jiu'; }, filterTarget:lib.filter.notMe, content:function(){ - player.storage.twzhulin.add(target); - player.markSkill('twzhulin'); + player.addTempSkill('twqijia_alka'); + player.storage.twzhuchen.add(target); + player.markSkill('twzhuchen'); }, intro:{ content:function(content,player){ @@ -274,7 +278,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ trigger.getParent().twxiaolian=trigger.targets[0]; trigger.targets.length=0; - trigger.getParent().triggeredTargets2.length=0; + trigger.getParent().triggeredTargets2.length=0; trigger.targets.push(player); }, group:'twxiaolian_damage', @@ -344,6 +348,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ next.player=player; next.target=trigger.player; next.setContent(function(){ + if(target.isDead()||!target.countCards('he')) return; player.line(target,'green'); player.discardPlayerCard(target,true,'he'); }); @@ -556,8 +561,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ twxiaolian_info:'当一名其他角色使用【杀】指定另一名其他角色为目标时,你可以将此【杀】的目标改为你。若如此做,当你受到此【杀】的伤害后,你可以将一张牌放在此【杀】原目标的武将牌旁,称之为“马”。锁定技,场上的一名角色每有一张“马”,其他角色计算与其的距离便+1。', twqijia:'弃甲', twqijia_info:'出牌阶段,你可以弃置一张装备区内的牌(每种类型的装备牌限一次),然后视为对攻击范围内的一名其他角色使用了一张【杀】。', - twzhulin:'诛綝', - twzhulin_info:'出牌阶段,你可以弃置一张【桃】或【酒】并选择一名其他角色。你与其的距离视为1直到此阶段结束。', + twzhuchen:'诛綝', + twzhuchen_info:'出牌阶段,你可以弃置一张【桃】或【酒】并选择一名其他角色。你与其的距离视为1直到此阶段结束。', twhuzhu:'护主', twhuzhu_info:'出牌阶段限一次,若你的装备区内有牌,则你可以令一名其他角色交给你一张手牌,然后获得你装备区内的一张牌。若其体力值不大于你,则你可以令其回复1点体力。', twliancai:'敛财', diff --git a/character/yijiang.js b/character/yijiang.js index bb5b03ee7..10810488c 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -6192,21 +6192,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, shifei:{ audio:2, - trigger:{player:['chooseToRespondBegin','chooseToUseBegin']}, + enable:['chooseToRespond','chooseToUse'], filter:function(event,player){ - if(!_status.currentPhase) return false; - if(event.responded) return false; - if(!event.filterCard({name:'shan'},player,event)) return false; - if(event.name!='chooseToUse'&&!lib.filter.cardRespondable({name:'shan'},player,event)) return false; + if(!_status.currentPhase||event.shifei) return false; + if(!event.filterCard({name:'shan',isCard:true},player,event)) return false; + if(event.name!='chooseToUse'&&!lib.filter.cardRespondable({name:'shan',isCard:true},player,event)) return false; return true; }, - check:function(event,player){ + delay:false, + checkx:function(player){ if(get.attitude(player,_status.currentPhase)>0) return true; var nh=_status.currentPhase.countCards('h')+1; var players=game.filterPlayer(); for(var i=0;inh){ - if(!player.hasShan()||get.attitude(player,players[i])<=0) return true; + if(!player.countCards('h','shan')||get.attitude(player,players[i])<=0) return true; } } return false; @@ -6218,6 +6218,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 1' if(_status.currentPhase.isMaxHandcard(true)){ event.finish(); + var evt=event.getParent(2); + evt.set('shifei',true); + evt.goto(0); return; } var targets=game.filterPlayer(function(current){ @@ -6237,6 +6240,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.finish(); } 'step 2' + var evt=event.getParent(2); var target; if(event.onlytarget){ target=event.onlytarget; @@ -6247,9 +6251,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(target){ player.line(target,'green'); player.discardPlayerCard(target,'he',true); - trigger.untrigger(); - trigger.responded=true; - trigger.result={bool:true,card:{name:'shan',isCard:true}} + evt.result={bool:true,card:{name:'shan',isCard:true},cards:[]}; + evt.redo(); + } + else{ + evt.set('shifei',true); + evt.goto(0); } }, ai:{ @@ -6264,7 +6271,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } } - } + }, + order:8, + result:{ + player:function(player){ + return lib.skill.shifei.checkx(player)?1:0; + }, + }, } }, huaiyi:{ @@ -12290,7 +12303,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jigong:'急攻', jigong_info:'出牌阶段开始时,你可以摸两张牌。若如此做,你本回合的手牌上限改为X(X为你此阶段造成的伤害点数之和)。', shifei:'饰非', - shifei_info:'当你需要使用或打出【闪】时,你可以令当前回合角色摸一张牌,然后若其手牌数不为全场最多,则你弃置全场手牌数最多(或之一)角色的一张牌,视为你使用或打出了一张【闪】。', + shifei_info:'当你需要使用或打出【闪】时,你可以令当前回合角色摸一张牌。然后若其手牌数不为全场最多,则你弃置全场手牌数最多(或之一)角色的一张牌,视为你使用或打出了一张【闪】。', huaiyi:'怀异', huaiyi_info:'出牌阶段限一次,你可以展示所有手牌,若这些牌的颜色不全部相同,则你选择一种颜色并弃置该颜色的所有手牌,然后你可以获得至多X名角色的各一张牌(X为你以此法弃置的手牌数)。若你以此法获得的牌不少于两张,则你失去1点体力。', yaoming:'邀名', diff --git a/game/asset.js b/game/asset.js index 1bfa895ce..a08654ed4 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'v1.9.106', + 'v1.9.106.1', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -3453,6 +3453,7 @@ window.noname_asset_list=[ 'image/character/key_shiroha.jpg', 'image/character/ns_caimao.jpg', 'image/character/caoxing.jpg', + 'image/character/ns_jiaxu.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', @@ -4540,6 +4541,7 @@ window.noname_asset_list=[ 'image/mode/chess/character/leader_caocao.jpg', 'image/mode/chess/character/leader_liubei.jpg', 'image/mode/chess/character/leader_sunquan.jpg', + 'image/mode/chess/character/leader_yuri.jpg', 'image/mode/chess/difficulty/leader_easy.jpg', 'image/mode/chess/difficulty/leader_hard.jpg', 'image/mode/chess/difficulty/leader_medium.jpg', @@ -5293,8 +5295,8 @@ window.noname_skin_list={ key_yuri:4, key_yuzuru:2, sp_key_kanade:8, - key_kamome:1, - key_umi:2, + key_kamome:5, + key_umi:5, key_umi2:1, key_mio:3, key_midori:1, diff --git a/game/game.js b/game/game.js index 0fa50465a..698a06542 100644 --- a/game/game.js +++ b/game/game.js @@ -13645,7 +13645,7 @@ })) return 14; if(target.countCards('e',function(card){ return get.value(card,target)<0&&game.hasPlayer(function(current){ - return current!=target&&get.attitude(player,current)<0&¤t.isEmpty(get.subtype(card)) + return current!=target&&get.attitude(player,current)<0&¤t.isEmpty(get.subtype(card))&&get.effect(target,card,player,player)<0; }); })>0) return 9; } @@ -13654,7 +13654,7 @@ if(current!=target&&get.attitude(player,current)>0){ var es=target.getCards('e'); for(var i=0;i0&¤t.isEmpty(get.subtype(es[i]))&&get.effect(current,es[i],player,current)>0) return true; + if(get.value(es[i],target)>0&¤t.isEmpty(get.subtype(es[i]))&&get.effect(current,es[i],player,player)>0) return true; } } })){ @@ -13667,7 +13667,7 @@ var i; var att2=get.sgn(get.attitude(player,ui.selected.targets[0])); for(i=0;i