diff --git a/audio/die/dengzhi.mp3 b/audio/die/dengzhi.mp3 new file mode 100644 index 000000000..4ba4f165e Binary files /dev/null and b/audio/die/dengzhi.mp3 differ diff --git a/audio/die/re_handang.mp3 b/audio/die/re_handang.mp3 new file mode 100644 index 000000000..b9eb956c9 Binary files /dev/null and b/audio/die/re_handang.mp3 differ diff --git a/audio/die/re_zhonghui.mp3 b/audio/die/re_zhonghui.mp3 new file mode 100644 index 000000000..541e9aba2 Binary files /dev/null and b/audio/die/re_zhonghui.mp3 differ diff --git a/audio/die/xin_chengpu.mp3 b/audio/die/xin_chengpu.mp3 new file mode 100644 index 000000000..4f49caf88 Binary files /dev/null and b/audio/die/xin_chengpu.mp3 differ diff --git a/audio/die/zhengxuan.mp3 b/audio/die/zhengxuan.mp3 new file mode 100644 index 000000000..d09684169 Binary files /dev/null and b/audio/die/zhengxuan.mp3 differ diff --git a/audio/skill/chunlao_xin_chengpu1.mp3 b/audio/skill/chunlao_xin_chengpu1.mp3 new file mode 100644 index 000000000..17c4015d5 Binary files /dev/null and b/audio/skill/chunlao_xin_chengpu1.mp3 differ diff --git a/audio/skill/chunlao_xin_chengpu2.mp3 b/audio/skill/chunlao_xin_chengpu2.mp3 new file mode 100644 index 000000000..24e68cb93 Binary files /dev/null and b/audio/skill/chunlao_xin_chengpu2.mp3 differ diff --git a/audio/skill/jiefan_re_handang1.mp3 b/audio/skill/jiefan_re_handang1.mp3 new file mode 100644 index 000000000..4a9417b67 Binary files /dev/null and b/audio/skill/jiefan_re_handang1.mp3 differ diff --git a/audio/skill/jiefan_re_handang2.mp3 b/audio/skill/jiefan_re_handang2.mp3 new file mode 100644 index 000000000..08aae04a6 Binary files /dev/null and b/audio/skill/jiefan_re_handang2.mp3 differ diff --git a/audio/skill/jimeng1.mp3 b/audio/skill/jimeng1.mp3 new file mode 100644 index 000000000..6a07e7861 Binary files /dev/null and b/audio/skill/jimeng1.mp3 differ diff --git a/audio/skill/jimeng2.mp3 b/audio/skill/jimeng2.mp3 new file mode 100644 index 000000000..00308d5e8 Binary files /dev/null and b/audio/skill/jimeng2.mp3 differ diff --git a/audio/skill/paiyi_re_zhonghui1.mp3 b/audio/skill/paiyi_re_zhonghui1.mp3 new file mode 100644 index 000000000..3323adca1 Binary files /dev/null and b/audio/skill/paiyi_re_zhonghui1.mp3 differ diff --git a/audio/skill/paiyi_re_zhonghui2.mp3 b/audio/skill/paiyi_re_zhonghui2.mp3 new file mode 100644 index 000000000..06de908a9 Binary files /dev/null and b/audio/skill/paiyi_re_zhonghui2.mp3 differ diff --git a/audio/skill/regongji1.mp3 b/audio/skill/regongji1.mp3 new file mode 100644 index 000000000..0498805c2 Binary files /dev/null and b/audio/skill/regongji1.mp3 differ diff --git a/audio/skill/regongji2.mp3 b/audio/skill/regongji2.mp3 new file mode 100644 index 000000000..5b2fabbc8 Binary files /dev/null and b/audio/skill/regongji2.mp3 differ diff --git a/audio/skill/relihuo1.mp3 b/audio/skill/relihuo1.mp3 new file mode 100644 index 000000000..d428815c3 Binary files /dev/null and b/audio/skill/relihuo1.mp3 differ diff --git a/audio/skill/relihuo2.mp3 b/audio/skill/relihuo2.mp3 new file mode 100644 index 000000000..ead3b391b Binary files /dev/null and b/audio/skill/relihuo2.mp3 differ diff --git a/audio/skill/requanji1.mp3 b/audio/skill/requanji1.mp3 new file mode 100644 index 000000000..4432c4435 Binary files /dev/null and b/audio/skill/requanji1.mp3 differ diff --git a/audio/skill/requanji2.mp3 b/audio/skill/requanji2.mp3 new file mode 100644 index 000000000..6bff81665 Binary files /dev/null and b/audio/skill/requanji2.mp3 differ diff --git a/audio/skill/shuaiyan1.mp3 b/audio/skill/shuaiyan1.mp3 new file mode 100644 index 000000000..22f5bc018 Binary files /dev/null and b/audio/skill/shuaiyan1.mp3 differ diff --git a/audio/skill/shuaiyan2.mp3 b/audio/skill/shuaiyan2.mp3 new file mode 100644 index 000000000..e9bc68bc9 Binary files /dev/null and b/audio/skill/shuaiyan2.mp3 differ diff --git a/audio/skill/zili_re_zhonghui1.mp3 b/audio/skill/zili_re_zhonghui1.mp3 new file mode 100644 index 000000000..bb1db7620 Binary files /dev/null and b/audio/skill/zili_re_zhonghui1.mp3 differ diff --git a/audio/skill/zili_re_zhonghui2.mp3 b/audio/skill/zili_re_zhonghui2.mp3 new file mode 100644 index 000000000..c97cdf95e Binary files /dev/null and b/audio/skill/zili_re_zhonghui2.mp3 differ diff --git a/card/extra.js b/card/extra.js index f2a2a7b4d..862f7fd49 100644 --- a/card/extra.js +++ b/card/extra.js @@ -766,6 +766,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ vanish:true, silent:true, popup:false, + nopop:true, onremove:function(player){ if(player.node.jiu){ player.node.jiu.delete(); diff --git a/card/guozhan.js b/card/guozhan.js index 6432495eb..2af1d7eca 100644 --- a/card/guozhan.js +++ b/card/guozhan.js @@ -1086,7 +1086,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ trigger:{player:'phaseDrawBegin2'}, forced:true, filter:function(event,player){ - return !player.isUnseen(); + return !player.isUnseen()&&!event.numFixed; }, content:function(){ trigger.num++; diff --git a/card/standard.js b/card/standard.js index a01f85b00..8053968a8 100644 --- a/card/standard.js +++ b/card/standard.js @@ -1066,7 +1066,9 @@ game.import('card',function(lib,game,ui,get,ai,_status){ }, result:{ target:function(player,target){ - if(get.attitude(player,target)<=0) return (target.countCards('he')>0)?-1.5:1.5; + if(get.attitude(player,target)<=0) return (target.countCards('he',function(card){ + return get.value(card)>0; + })>0)?-1.5:1.5; var js=target.getCards('j'); if(js.length){ var jj=js[0].viewAs?{name:js[0].viewAs}:js[0]; @@ -1163,7 +1165,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ } var es=target.getCards('e'); var noe=(es.length==0||target.hasSkillTag('noe')); - var noe2=(es.length==1&&es[0].name=='baiyin'&&target.isDamaged()); + var noe2=(es.length==1&&es[0].name!='tengjia'&&get.value(es[0])<=0); var noh=(nh==0||target.hasSkillTag('noh')); if(noh&&(noe||noe2)) return 0; if(att<=0&&!target.countCards('he')) return 1.5; diff --git a/character/diy.js b/character/diy.js index 86de6c245..20b05c072 100755 --- a/character/diy.js +++ b/character/diy.js @@ -47,6 +47,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_ao:['female','key',3,['ao_xishi','ao_kuihun','ao_shixin']], key_yuzuru:['male','key',5,['yuzuru_wuxin','yuzuru_deyi']], sp_key_kanade:['female','key',3,['kanade_mapo','kanade_benzhan']], + key_mio:['female','key',3,['mio_tuifu','mio_tishen']], + key_midori:['female','key',3,['midori_nonghuan','midori_tishen']], // diy_caocao:['male','wei',4,['xicai','diyjianxiong','hujia']], // diy_hanlong:['male','wei',4,['siji','ciqiu']], diy_feishi:['male','shu',3,['shuaiyan','moshou']], @@ -129,7 +131,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ diy:{ diy_tieba:["diy_wenyang","ns_zuoci","ns_lvzhi","ns_wangyun","ns_nanhua","ns_nanhua_left","ns_nanhua_right","ns_huamulan","ns_huangzu","ns_jinke","ns_yanliang","ns_wenchou","ns_caocao","ns_caocaosp","ns_zhugeliang","ns_wangyue","ns_yuji","ns_xinxianying","ns_guanlu","ns_simazhao","ns_sunjian","ns_duangui","ns_zhangbao","ns_masu","ns_zhangxiu","ns_lvmeng","ns_shenpei","ns_yujisp","ns_yangyi","ns_liuzhang","ns_xinnanhua","ns_zhangwei"], diy_default:["diy_feishi","diy_liuyan","diy_yuji","diy_caiwenji","diy_lukang","diy_zhenji","diy_liufu","diy_xizhenxihong","diy_liuzan","diy_zaozhirenjun","diy_yangyi","diy_tianyu"], - diy_key:["key_lucia","key_kyousuke","key_yuri","key_haruko","key_kagari","key_umi","key_rei","key_komari","key_yukine","key_yusa","key_misa","key_masato","key_iwasawa","key_kengo","key_yoshino","key_yui","key_tsumugi","key_saya","key_harukakanata","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"], + diy_key:["key_lucia","key_kyousuke","key_yuri","key_haruko","key_kagari","key_umi","key_rei","key_komari","key_yukine","key_yusa","key_misa","key_masato","key_iwasawa","key_kengo","key_yoshino","key_yui","key_tsumugi","key_saya","key_harukakanata","key_inari","key_shiina","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"], diy_yongjian:["ns_chendao","yj_caoang"], }, }, @@ -227,6 +229,132 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_iwasawa:['key_hisako'], }, skill:{ + yuzuru_bujin:{ + global:'yuzuru_bujin2', + trigger:{global:'phaseDrawBegin'}, + forced:true, + logTarget:'player', + filter:function(event,player){ + return event.player!=player&&event.player.isFriendOf(player); + }, + content:function(){trigger.num++}, + }, + yuzuru_bujin2:{ + mod:{ + globalFrom:function(from,to,num){ + return num-game.countPlayer(function(current){ + return current!=from&¤t.isFriendOf(from)&¤t.hasSkill('yuzuru_bujin'); + }); + }, + }, + }, + mio_tuifu:{ + trigger:{global:'damageBegin1'}, + forced:true, + filter:function(event,player){ + return event.source&&event.source.sex=='male'&&event.player.sex=='male'; + }, + content:function(){ + player.draw(); + }, + }, + mio_tishen:{ + trigger:{player:'phaseZhunbeiBegin'}, + limited:true, + unique:true, + skillAnimation:true, + animationColor:'water', + filter:function(event,player){ + return player.isDamaged(); + }, + check:function(event,player){ + return player.hp<=1||player.getDamagedHp()>1; + }, + content:function(){ + player.awakenSkill(event.name); + var num=player.maxHp-player.hp; + player.recover(num); + player.draw(num); + if(_status.characterlist&&_status.characterlist.contains('key_midori')){ + player.reinit('key_mio','key_midori',false); + _status.characterlist.remove('key_midori'); + _status.characterlist.add('key_mio'); + } + }, + }, + midori_nonghuan:{ + enable:'phaseUse', + filter:function(event,player){ + return (player.getStat('skill').midori_nonghuan||0)0; + }, + content:function(){ + 'step 0' + var stat=player.getStat(); + if(!stat.midori_nonghuan) stat.midori_nonghuan=[]; + stat.midori_nonghuan.push(target); + player.gainPlayerCard(target,'hej',true); + player.draw(); + 'step 1' + if(player.countCards('he')>0) player.chooseCard('he',true,'交给'+get.translation(target)+'一张牌'); + else event.goto(3); + 'step 2' + target.gain(result.cards,player,'giveAuto'); + 'step 3' + var history=game.getGlobalHistory('cardMove'); + for(var i=0;i1; + }, + content:function(){ + player.awakenSkill(event.name); + var num=player.maxHp-player.hp; + player.recover(num); + player.draw(num); + if(_status.characterlist&&_status.characterlist.contains('key_mio')){ + player.reinit('key_midori','key_mio',false); + _status.characterlist.remove('key_mio'); + _status.characterlist.add('key_midori'); + } + }, + }, kanade_mapo:{ derivation:'mapodoufu', enable:'chooseToUse', @@ -1293,6 +1421,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ discard:false, line:true, direct:true, + clearTime:true, delay:false, lose:false, prepare:function(cards,player,targets){ @@ -8257,6 +8386,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_ao:'空门苍', key_yuzuru:'音无结弦', sp_key_kanade:'SP立华奏', + key_mio:'西园美鱼', + key_midori:'西园美鸟', lucia_duqu:'毒躯', lucia_duqu_info:'锁定技,①当你对其他角色造成伤害或受到其他角色的伤害时,你和对方各获得一张花色点数随机的【毒】。
②当你因【毒】失去体力时,你改为回复等量的体力。
③当你处于濒死状态时,你可以使用一张【毒】(每回合限一次)。', lucia_zhenren:'振刃', @@ -8329,7 +8460,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ tsumugi_mugyu_info:'当你成为牌的目标后,若你的手牌数小于体力上限,则你可以摸一张牌。', tsumugi_huilang:'回廊', tsumugi_huilang2:'回廊', - tsumugi_huilang_info:'回合结束时,不可以将任意张牌扣置于武将牌下(均称为「隐」)。回合开始时,你获得所有「隐」,然后可令等量的角色各摸一张牌。', + tsumugi_huilang_info:'回合结束时,你可以将任意张牌扣置于武将牌下(均称为「隐」)。回合开始时,你获得所有「隐」,然后可令等量的角色各摸一张牌。', //〖回廊〗涉及的所有卡牌移动的结算不会触发〖良姻〗 haruka_shuangche:'双掣', kanata_shuangche:'双掣', @@ -8443,10 +8574,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yuzuru_kunfen_rewrite_info:'锁定技,结束阶段,你摸两张牌。然后你可以将两张牌交给一名其他角色。', yuzuru_quji_rewrite:'去疾·改', yuzuru_quji_rewrite_info:'出牌阶段限一次,你可以弃置X张牌并选择至多等量已受伤的其他角色,这些角色各回复1点体力。(X为你已损失的体力值)', + yuzuru_bujin:'步进', + yuzuru_bujin_info:'锁定技,己方其他角色计算与其他角色的距离-1且摸牌阶段的额定摸牌数+1。', kanade_mapo:'麻婆', kanade_mapo_info:'你可以将一张♥牌当做【麻婆豆腐】使用。你使用的【麻婆豆腐】可以多指定一个目标。', kanade_benzhan:'奔战', kanade_benzhan_info:'当你使用或打出牌响应其他角色,或其他角色使用或打出牌响应你后,若此牌为:基本牌,你可令一名角色弃置两张牌或令一名角色摸两张牌;非基本牌,你可对一名角色造成1点伤害或令一名其他角色回复1点体力。', + mio_tuifu:'推腐', + mio_tuifu_info:'锁定技,当一名男性角色对一名男性角色造成伤害后,你摸一张牌。', + mio_tishen:'替身', + mio_tishen_info:'限定技,准备阶段,你可以将体力值回复至体力上限并摸等同于回复量的牌,然后将武将牌替换为【西园美鸟】。', + midori_nonghuan:'弄幻', + midori_nonghuan_info:'出牌阶段限X次(X为你的体力值),你可以获得一名本阶段内未选择过的其他角色的区域内的一张牌。你摸一张牌,然后将一张牌交给该角色。然后你清除此技能结算过程中所有卡牌移动事件的移动记录。', + //即技能结算完成后,所有涉及到的牌移动事件不会再被getHistory获取 + midori_tishen:'替身', + midori_tishen_info:'限定技,准备阶段,你可以将体力值回复至体力上限并摸等同于回复量的牌,然后将武将牌替换为【西园美鱼】。', yj_caoang:'SP曹昂', diff --git a/character/extra.js b/character/extra.js index 592f09d07..7b17c39c7 100755 --- a/character/extra.js +++ b/character/extra.js @@ -16,7 +16,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, character:{ shen_guanyu:['male','shen',5,['new_wuhun','wushen'],['shu']], - shen_zhaoyun:['male','shen',2,['xinjuejing','xinlonghun'],['shu']], + shen_zhaoyun:['male','shen',2,['xinjuejing','relonghun'],['shu']], shen_zhugeliang:['male','shen',3,['qixing','kuangfeng','dawu'],['shu']], shen_lvmeng:['male','shen',3,['shelie','gongxin'],['wu']], shen_zhouyu:['male','shen',4,['yeyan','qinyin'],['wu']], @@ -1868,6 +1868,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, longhun:{ + audio:4, group:['longhun1','longhun2','longhun3','longhun4'], ai:{ skillTagFilter:function(player,tag){ @@ -2005,6 +2006,107 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger.num+=(player.getDamagedHp()); } }, + relonghun:{ + audio:'longhun', + enable:['chooseToUse','chooseToRespond'], + prompt:'将♦牌当做杀,♥牌当做桃,♣牌当做闪,♠牌当做无懈可击使用或打出', + viewAs:function(cards,player){ + var name=false; + var nature=null; + switch(get.suit(cards[0],player)){ + case 'club':name='shan';break; + case 'diamond':name='sha';nature='fire';break; + case 'spade':name='wuxie';break; + case 'heart':name='tao';break; + } + if(name) return {name:name,nature:nature}; + return null; + }, + check:function(card){ + if(ui.selected.cards.length) return 0; + var player=_status.event.player; + if(_status.event.type=='phase'){ + var max=0; + var name2; + var list=['sha','tao']; + var map={sha:'diamond',tao:'heart'} + for(var i=0;i0&&player.getUseValue({name:name,nature:name=='sha'?'fire':null})>0){ + var temp=get.order({name:name,nature:name=='sha'?'fire':null}); + if(temp>max){ + max=temp; + name2=map[name]; + } + } + } + if(name2==get.suit(card,player)) return (name2=='diamond'?(5-get.value(card)):20-get.value(card)); + return 0; + } + return 1; + }, + selectCard:[1,2], + complexCard:true, + position:'he', + filterCard:function(card,player,event){ + if(ui.selected.cards.length) return get.suit(card,player)==get.suit(ui.selected.cards[0],player); + event=event||_status.event; + var filter=event._backup.filterCard; + var name=get.suit(card,player); + if(name=='club'&&filter({name:'shan',cards:[card]},player,event)) return true; + if(name=='diamond'&&filter({name:'sha',cards:[card],nature:'fire'},player,event)) return true; + if(name=='spade'&&filter({name:'wuxie',cards:[card]},player,event)) return true; + if(name=='heart'&&filter({name:'tao',cards:[card]},player,event)) return true; + return false; + }, + filter:function(event,player){ + var filter=event.filterCard; + if(filter({name:'sha',nature:'fire'},player,event)&&player.countCards('he',{suit:'diamond'})) return true; + if(filter({name:'shan'},player,event)&&player.countCards('he',{suit:'club'})) return true; + if(filter({name:'tao'},player,event)&&player.countCards('he',{suit:'heart'})) return true; + if(filter({name:'wuxie'},player,event)&&player.countCards('he',{suit:'spade'})) return true; + return false; + }, + ai:{ + respondSha:true, + respondShan:true, + save:true, + skillTagFilter:function(player,tag){ + var name; + switch(tag){ + case 'respondSha':name='diamond';break; + case 'respondShan':name='club';break; + case 'save':name='heart';break; + } + if(!player.countCards('he',{suit:name})) return false; + }, + order:function(item,player){ + if(player&&_status.event.type=='phase'){ + var max=0; + var list=['sha','tao']; + var map={sha:'diamond',tao:'heart'} + for(var i=0;i0&&player.getUseValue({name:name,nature:name=='sha'?'fire':null})>0){ + var temp=get.order({name:name,nature:name=='sha'?'fire':null}); + if(temp>max) max=temp; + } + } + max/=1.1; + return max; + } + return 2; + }, + }, + hiddenCard:function(player,name){ + return name=='wuxie'&&player.countCards('he',{suit:'spade'})>0; + }, + group:['xinlonghun_num','xinlonghun_discard'], + }, xinlonghun:{ group:['xinlonghun1','xinlonghun2','xinlonghun3','xinlonghun4','xinlonghun_num','xinlonghun_discard'], ai:{ @@ -2031,19 +2133,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, subSkill:{ num:{ - trigger:{source:['damageBegin','recoverBegin']}, + trigger:{player:'useCard'}, forced:true, popup:false, filter:function(event){ - var evt=event.getParent(); - return (evt.skill=='xinlonghun1'||evt.skill=='xinlonghun2')&&evt.cards&&evt.cards.length==2; + var evt=event; + return (evt.skill=='xinlonghun1'||evt.skill=='xinlonghun2'||(['sha','tao'].contains(evt.card.name)&&evt.skill=='relonghun'))&&evt.cards&&evt.cards.length==2; }, content:function(){ - trigger.num++; + trigger.baseDamage++; } }, discard:{ - trigger:{player:['useCard','respond']}, + trigger:{player:['useCardAfter','respondAfter']}, forced:true, popup:false, logTarget:function(){ @@ -2053,7 +2155,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return event.name=='respond'?0.5:false; }, filter:function(evt,player){ - return (evt.skill=='xinlonghun3'||evt.skill=='xinlonghun4')&& + return (evt.skill=='xinlonghun3'||evt.skill=='xinlonghun4'||(['shan','wuxie'].contains(evt.card.name)&&evt.skill=='relonghun'))&& evt.cards&&evt.cards.length==2&&_status.currentPhase&&_status.currentPhase!=player&&_status.currentPhase.countDiscardableCards(player,'he'); }, content:function(){ @@ -2150,7 +2252,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, audio:'juejing', - trigger:{player:['dyingBegin','dyingAfter']}, + trigger:{player:['dying','dyingAfter']}, forced:true, content:function(){ player.draw(); @@ -2998,6 +3100,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shen_lvbu:'神吕布', xinjuejing:'绝境', xinjuejing_info:'锁定技,你的手牌上限+2;当你进入或脱离濒死状态时,你摸一张牌。', + relonghun:'龙魂', + relonghun_info:'你可以将同花色的一至两张牌按下列规则使用或打出:红桃当【桃】,方块当火【杀】,梅花当【闪】,黑桃当普【无懈可击】。若你以此法使用了两张红色牌,则此牌回复值或伤害值+1。若你以此法使用了两张黑色牌,则你弃置当前回合角色一张牌。', xinlonghun:'龙魂', xinlonghun1:'龙魂♥︎', xinlonghun2:'龙魂♦︎', diff --git a/character/mobile.js b/character/mobile.js index 5471537a7..3ac8bf1ed 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -6,12 +6,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ connect:true, characterSort:{ mobile:{ - mobile_default:["miheng","taoqian","lingcao","sunru","lifeng","zhuling","liuye","zhaotongzhaoguang","majun","simazhao","wangyuanji","pangdegong","shenpei","hujinding","zhangyì","jiakui","yangbiao","chendeng","dongcheng","yangyi"], - mobile_others:["re_jikang","old_bulianshi","old_yuanshu","re_wangyun","re_baosanniang","re_weiwenzhugezhi","re_zhanggong","re_xugong","xin_yuanshao","re_liushan","xin_xiahoudun","re_sp_zhugeliang","re_heqi","re_guanqiujian","re_pangtong","old_liuzan"], + mobile_default:["miheng","taoqian","lingcao","sunru","lifeng","zhuling","liuye","zhaotongzhaoguang","majun","simazhao","wangyuanji","pangdegong","shenpei","hujinding","zhangyì","jiakui","yangbiao","chendeng","dongcheng","yangyi","dengzhi"], + mobile_others:["re_jikang","old_bulianshi","old_yuanshu","re_wangyun","re_baosanniang","re_weiwenzhugezhi","re_zhanggong","re_xugong","xin_yuanshao","re_liushan","xin_xiahoudun","re_sp_zhugeliang","re_heqi","re_guanqiujian","re_pangtong","old_liuzan","xin_chengpu"], mobile_sunben:["re_sunben"], }, }, character:{ + dengzhi:['male','shu',3,['jimeng','shuaiyan']], + xin_chengpu:['male','wu',4,['relihuo','chunlao']], yangyi:['male','shu',3,['duoduan','gongsun']], dongcheng:['male','qun',4,['chengzhao']], re_pangtong:['male','shu',3,['xinlianhuan','niepan'],[]], @@ -55,6 +57,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_sunben:['male','wu',4,['jiang','rehunzi','zhiba'],['zhu']], }, characterIntro:{ + dengzhi:'邓芝(178年-251年),字伯苗。义阳郡新野县(今河南新野)人。东汉名将邓禹之后,三国时期蜀汉重臣。邓芝早年曾被预言能位至大将,后被刘备任为郫令,升迁为广汉太守。因任官公廉且有治绩,被征入朝为尚书。刘备逝世后,奉命出使吴国,成功修复两国关系,并深为吴大帝孙权所赏识。建兴六年(228年),丞相诸葛亮策划北伐,命邓芝与大将赵云佯攻郿城,以吸引魏国曹真军主力。建兴十二年(234年),迁前军师、前将军,领兖州刺史,封阳武亭侯,不久督领江州。延熙六年(243年),迁车骑将军,后授假节。又率军平定涪陵叛乱。延熙十四年(251年),邓芝病逝。邓芝性格正直、简单,不刻意修饰情绪。他为将二十多年,赏罚明断,体恤士卒。身上的衣食取自官府,从未经营过私产,妻儿甚至还有忍饥挨饿之时,死时家中也没有多余财物。', yangyi:'杨仪(?-235年),字威公,襄阳(今湖北襄阳)人,三国时期蜀汉官员。最初为荆州刺史傅群的主簿,后投奔关羽,任为功曹。关羽遣其至成都,大受刘备赞赏,擢为尚书。因与尚书令刘巴不和,调为弘农太守。建兴三年(225年)任丞相参军,此后一直跟随诸葛亮战斗。亮卒,他部署安全退军。诸葛亮在生前定蒋琬继己任,杨仪仅拜中军师。建兴十三年(235年),因多出怨言,被削职流放至汉嘉郡。但杨仪仍不自省,又上书诽谤,言辞激烈,最后下狱,自杀身亡。', dongcheng:'董承(?~200年),字号不详,冀州河间人(今河北献县)人。东汉末年外戚大臣,汉灵帝母亲董太后侄子,汉献帝嫔妃董贵人之父。初从西凉军,为董卓女婿牛辅部曲。护卫汉献帝刘协从长安东归洛阳,拜为卫将军,受封列侯。建安四年(199年),拜车骑将军。自称领受汉献帝衣带诏,联合刘备、种辑、吴子兰、王子服、吴硕等人密谋诛杀曹操。五年正月,图谋泄露,董承诸人及董贵人全部遇害。', chendeng:'陈登(163—201),字元龙,下邳淮浦(今江苏涟水西)人。东汉末年将领、官员。沛相陈珪之子。为人爽朗,性格沈静,智谋过人,少年时有扶世济民之志,并且博览群书,学识渊博。二十五岁时,举孝廉,任东阳县长。虽然年轻,但他能够体察民情,抚弱育孤,深得百姓敬重。后来,徐州牧陶谦提拔他为典农校尉,主管一州农业生产。他亲自考察徐州的土壤状况,开发水利,发展农田灌溉,使汉末迭遭破坏的徐州农业得到一定程度的恢复,百姓们安居乐业,“秔稻丰积”。建安初奉使赴许,向曹操献灭吕布之策,被授广陵太守。以灭吕布有功,加伏波将军。又迁东城太守。年三十九卒。其子陈肃,魏文帝时追陈登之功,为郎中。', @@ -272,6 +275,125 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, characterFilter:{}, skill:{ + jimeng:{ + audio:2, + trigger:{player:'phaseUseBegin'}, + direct:true, + filter:function(event,player){ + return game.hasPlayer(function(current){ + return current.countGainableCards(player,'he')>0; + }) + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('jimeng'),function(card,player,target){ + return target!=player&&target.countGainableCards(player,'he')>0; + }).set('ai',function(target){ + var player=_status.event.player; + if(player.hp>1&&get.attitude(player,target)<2) return 0; + return get.effect(target,{name:'shunshou'},player,player); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('jimeng',target); + player.gainPlayerCard(target,'he',true); + } + else event.finish(); + 'step 2' + var hs=player.getCards('he'); + if(player.hp>0&&hs.length){ + if(hs.length<=player.hp) event._result={bool:true,cards:hs}; + else player.chooseCard(player.hp,true,'交给'+get.translation(target)+get.cnNumber(player.hp)+'张牌','he',true); + } + else event.finish(); + 'step 3' + target.gain(result.cards,player,'giveAuto'); + }, + }, + shuaiyan:{ + audio:2, + trigger:{player:'phaseDiscardBegin'}, + filter:function(event,player){ + return player.countCards('h')>1; + }, + check:function(event,player){ + return game.hasPlayer(function(current){ + return current!=player&¤t.countCards('he')&&lib.skill.shuaiyan.check2(current,player); + }); + }, + check2:function(target,player){ + if(get.itemtype(player)!='player') player=_status.event.player; + return -get.attitude(player,target)/target.countCards('he'); + }, + content:function(){ + 'step 0' + player.showHandcards(get.translation(player)+'发动了【率言】'); + 'step 1' + var filter=function(card,player,target){ + return player!=target&&target.countCards('he')>0; + }; + if(game.hasPlayer(function(current){ + return filter('我约等于白板',player,current); + })){ + player.chooseTarget(true,filter,'选择一名其他角色,令其交给你一张牌').set('ai',lib.skill.shuaiyan.check2); + } + else event.finish(); + 'step 2' + var target=result.targets[0]; + event.target=target; + player.line(target,'green'); + target.chooseCard('he',true,'交给'+get.translation(player)+'一张牌'); + 'step 3' + player.gain(result.cards,target,'giveAuto') + }, + }, + relihuo:{ + audio:2, + group:['relihuo_baigei','relihuo_damage'], + trigger:{player:'useCard1'}, + filter:function(event,player){ + if(event.card.name=='sha'&&!event.card.nature) return true; + }, + check:function(event,player){ + return false; + }, + content:function(){ + trigger.card.nature='fire'; + trigger.relihuo=true; + }, + }, + relihuo_damage:{ + trigger:{source:'damageBegin1'}, + forced:true, + audio:'relihuo', + filter:function(event,player){ + return event.getParent(2).relihuo==true; + }, + content:function(){ + trigger.num++; + }, + }, + relihuo_baigei:{ + trigger:{player:'useCardAfter'}, + forced:true, + audio:'relihuo', + filter:function(event,player){ + var num=0; + player.getHistory('sourceDamage',function(evt){ + if(evt.card==event.card) num+=evt.num; + }); + return num>1; + }, + content:function(){ + var num=0; + player.getHistory('sourceDamage',function(evt){ + if(evt.card==trigger.card) num+=evt.num; + }); + player.loseHp(Math.floor(num/2)); + }, + }, gongsun:{ audio:2, trigger:{player:'phaseUseBegin'}, @@ -4222,6 +4344,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ gongsun:'共损', gongsun_info:'出牌阶段开始时,你可以弃置两张牌并指定一名其他角色。你选择一个基本牌或普通锦囊牌的牌名。直到你的下回合开始或你死亡,你与其不能使用或打出或弃置此名称的牌。', gongsun_shadow:'共损', + xin_chengpu:'手杀程普', + relihuo:'疠火', + relihuo_damage:'疠火', + relihuo_baigei:'疠火', + relihuo_info:'当你使用普【杀】时,你可以将此杀改为火属性。若如此做,当你因执行此【杀】的效果而对横置角色造成伤害时,此伤害+1;当你使用的火【杀】结算完成后,你失去X点体力(X为你因此【杀】造成的伤害总点数的一半且向下取整)', + dengzhi:'邓芝', + jimeng:'急盟', + jimeng_info:'出牌阶段开始时,你可以获得一名其他角色的一张牌,然后交给该角色X张牌(X为你当前体力值)。', + shuaiyan:'率言', + shuaiyan_info:'弃牌阶段开始时,若你的手牌数大于1,则你可以展示所有手牌,然后你令一名其他角色交给你一张牌。', } }; }); diff --git a/character/refresh.js b/character/refresh.js index d9242ea9f..7ba670b5f 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -9,11 +9,13 @@ 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","re_pangde"], refresh_lin:['re_zhurong','re_menghuo','re_dongzhuo','re_sunjian','re_caopi','re_xuhuang'], refresh_shan:['re_dengai','re_jiangwei','re_caiwenji','ol_liushan','re_zhangzhang','re_zuoci','re_sunce'], - refresh_yijiang:['re_xusheng','re_wuguotai','re_gaoshun','re_zhangyi','re_caozhi','re_zhuran','re_wuyi','re_liaohua','re_guohuai','re_zhuran','re_chengpu','re_caozhang','re_quancong','yujin_yujin','re_lingtong'], + refresh_yijiang:['re_xusheng','re_wuguotai','re_gaoshun','re_zhangyi','re_caozhi','re_zhuran','re_wuyi','re_liaohua','re_guohuai','re_zhuran','re_chengpu','re_caozhang','re_quancong','yujin_yujin','re_lingtong','re_handang','re_zhonghui'], }, }, connect:true, character:{ + re_zhonghui:['male','wei',4,['requanji','zili']], + re_handang:['male','wu',4,['regongji','jiefan']], re_lingtong:['male','wu',4,['rexuanfeng']], yujin_yujin:['male','wei',4,['rejieyue']], re_caozhang:['male','wei',4,['new_jiangchi']], @@ -103,6 +105,129 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sunben:['zhouyu','taishici','daqiao'], }, skill:{ + regongji:{ + mod:{ + attackFrom:function(player){ + if(player.getEquip(3)||player.getEquip(4)||player.getEquip(6)) return -Infinity + }, + }, + enable:'phaseUse', + usable:1, + position:'he', + filter:function(event,player){ + return player.countCards('he',function(card){ + return lib.skill.regongji.filterCard(card,player); + })>0; + }, + filterCard:function(card,player){ + return get.type(card,player)!='basic'; + }, + filterTarget:function(card,player,target){ + return target!=player&&target.countDiscardableCards(player,'he')>0; + }, + check:function(card){ + return 4.5-get.value(card); + }, + content:function(){ + if(target.countDiscardableCards(player,'he')>0) player.discardPlayerCard(target,'he',true); + }, + ai:{ + order:5, + result:{ + target:function(player,target){ + var att=get.attitude(player,target); + var nh=target.countCards('h'); + if(att>0){ + if(target.getEquip('baiyin')&&target.isDamaged()&& + get.recoverEffect(target,player,player)>0){ + if(target.hp==1&&!target.hujia) return 1.6; + if(target.hp==2) return 0.01; + return 0; + } + } + var es=target.getCards('e'); + var noe=(es.length==0||target.hasSkillTag('noe')); + var noe2=(es.length==1&&es[0].name!='tengjia'&&get.value(es[0])<=0); + var noh=(nh==0||target.hasSkillTag('noh')); + if(noh&&(noe||noe2)) return 0; + if(att<=0&&!target.countCards('he')) return 1.5; + return -1.5; + }, + }, + tag:{ + loseCard:1, + discard:1 + }, + }, + }, + requanji:{ + audio:2, + trigger:{player:['damageEnd','phaseUseEnd']}, + frequent:true, + locked:false, + notemp:true, + init:function(player){ + if(!player.storage.quanji) player.storage.quanji=[]; + }, + filter:function(event,player){ + if(event.name=='phaseUse') return player.countCards('h')>player.hp; + return event.num>0; + }, + content:function(){ + "step 0" + event.count=trigger.num||1; + "step 1" + event.count--; + player.draw(); + "step 2" + if(player.countCards('he')){ + player.chooseCard('将一张手牌置于武将牌上作为“权”',true); + } + else{ + event.goto(4); + } + "step 3" + if(result.cards&&result.cards.length){ + player.lose(result.cards,ui.special,'toStorage'); + player.storage.quanji=player.storage.quanji.concat(result.cards); + player.syncStorage('quanji'); + player.markSkill('quanji'); + game.log(player,'将',result.cards,'置于武将牌上作为“权”'); + } + "step 4" + if(event.count>0){ + player.chooseBool(get.prompt2('requanji')).set('frequentSkill','requanji'); + } + else event.finish(); + "step 5" + if(result.bool){ + player.logSkill('requanji'); + event.goto(1); + } + }, + mod:{ + maxHandcard:function(player,num){ + return num+player.storage.quanji.length; + } + }, + ai:{ + maixie:true, + maixie_hp:true, + threaten:0.8, + effect:{ + target:function(card,player,target){ + if(get.tag(card,'damage')){ + if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; + if(!target.hasFriend()) return; + if(target.hp>=4) return [0.5,get.tag(card,'damage')*2]; + if(!target.hasSkill('paiyi')&&target.hp>1) return [0.5,get.tag(card,'damage')*1.5]; + if(target.hp==3) return [0.5,get.tag(card,'damage')*1.5]; + if(target.hp==2) return [1,get.tag(card,'damage')*0.5]; + } + } + } + } + }, ollongdan:{ audio:'longdan_sha', audioname:['re_zhaoyun','sp_zhaoyun'], @@ -1965,6 +2090,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(targets[0].hasZhuSkill('olzhiba',player)) targets[0].logSkill('olzhiba'); }, direct:true, + clearTime:true, contentBefore:function(){ 'step 0' var list=[]; @@ -6687,9 +6813,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ oltishen_info:'限定技,准备阶段,你可以将体力回复至上限,然后摸X张牌(X为你回复的体力值)。', ollongdan:'龙胆', ollongdan_info:'你可以将一张【杀】当做【闪】、【闪】当做【杀】、【酒】当做【桃】、【桃】当做【酒】使用或打出。', - ollongdan_jiu:'龙胆(酒)', olyajiao:'涯角', olyajiao_info:'当你于回合外因使用或打出而失去手牌后,你可以展示牌堆顶的一张牌。若这两张牌的类别相同,你可以将展示的牌交给一名角色;若类别不同,你可弃置攻击范围内包含你的角色区域里的一张牌。', + re_zhonghui:'界钟会', + re_handang:'界韩当', + requanji:'权计', + requanji_info:'出牌阶段结束时,若你的手牌数大于体力值,或当你受到1点伤害后,你可以摸一张牌,然后将一张手牌置于武将牌上,称为“权”;你的手牌上限+X(X为“权”的数量)。', + regongji:'弓骑', + regongji_info:'出牌阶段限一次,你可以弃置一张非基本牌,然后弃置一名其他角色的一张牌。锁定技,当你的装备区内有坐骑牌时,你的攻击范围无限。', refresh_standard:'界限突破·标', refresh_feng:'界限突破·风', diff --git a/character/shenhua.js b/character/shenhua.js index ebad27668..32a0dab4f 100755 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -659,8 +659,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 0' player.chooseToDisable(true).set('ai',function(event,player,list){ if(list.contains('equip2')) return 'equip2'; - if(list.contains('equip1')&&player.countCards('h',{name:'sha'})>2) return 'equip1'; - if(list.contains('equip5')&&player.countCards('h',{type:'trick'})>=1) return 'equip5'; + if(list.contains('equip1')&&(player.countCards('h',function(card){ + return get.name(card,player)=='sha'&&player.hasUseTarget(card); + })-player.getCardUsable('sha'))>1) return 'equip1'; + if(list.contains('equip5')&&player.countCards('h',function(card){ + return get.type2(card,player)=='trick'&&player.hasUseTarget(card); + })>1) return 'equip5'; }); 'step 1' if(result.control=='equip1'){ @@ -682,8 +686,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ result:{ player:function(player){ if(!player.isDisabled('equip2')) return 1; - if(!player.isDisabled('equip1')&&player.countCards('h',{name:'sha'})>2) return 1; - if(!player.isDisabled('equip5')&&player.countCards('h',{type:'trick'})>=1) return 1; + if(!player.isDisabled('equip1')&&(player.countCards('h',function(card){ + return get.name(card,player)=='sha'&&player.hasUseTarget(card); + })-player.getCardUsable('sha'))>1) return 1; + if(!player.isDisabled('equip5')&&player.countCards('h',function(card){ + return get.type2(card,player)=='trick'&&player.hasUseTarget(card); + })>1) return 1; return -1; }, }, @@ -3389,6 +3397,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return target.hasZhuSkill('zhiba',player)&&player.canCompare(target); }, direct:true, + clearTime:true, prepare:function(cards,player,targets){ targets[0].logSkill('zhiba'); }, @@ -4161,7 +4170,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{source:'damageSource'}, filter:function(event,player){ if(event._notrigger.contains(event.player)) return false; - return (event.card&&event.card.name=='sha'&& + return (event.card&&event.card.name=='sha'&&event.getParent().name=='sha'&& event.player.isAlive()&& player.canCompare(event.player)); }, @@ -6643,6 +6652,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ delay:false, line:true, direct:true, + clearTime:true, prepare:function(cards,player,targets){ targets[0].logSkill('huangtian'); }, diff --git a/character/sp.js b/character/sp.js index 43d145164..c89ec9816 100755 --- a/character/sp.js +++ b/character/sp.js @@ -83,7 +83,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xiahouba:['male','shu',4,['baobian']], yuanshu:['male','qun',4,['yongsi','weidi']], sp_diaochan:['female','qun',3,['lihun','rebiyue']], - sp_zhaoyun:['male','qun',3,['longdan','chongzhen']], + sp_zhaoyun:['male','qun',3,['ollongdan','chongzhen']], jsp_zhaoyun:['male','qun',3,['chixin','yicong','suiren']], liuxie:['male','qun',3,['tianming','mizhao']], zhugejin:['male','wu',3,['hongyuan','huanshi','mingzhe']], @@ -102,7 +102,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhugedan:['male','wei',4,['gongao','juyi']], sp_jiangwei:['male','wei',4,['kunfen','fengliang']], sp_machao:['male','qun',4,['zhuiji','ol_shichou']], - sunhao:['male','wu',5,['canshi','chouhai','guiming'],['zhu']], + sunhao:['male','wu',5,['recanshi','rechouhai','guiming'],['zhu']], shixie:['male','qun',3,['biluan','lixia']], mayunlu:['female','shu',4,['fengpo','mashu']], zhanglu:['male','qun',3,['yishe','bushi','midao']], @@ -144,7 +144,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dongbai:['female','qun',3,['lianzhu','xiehui']], - zhaoxiang:['female','shu',4,['fanghun','fuhan']], + zhaoxiang:['female','shu',4,['refanghun','refuhan']], mazhong:['male','shu',4,['fuman']], dongyun:['male','shu',3,['bingzheng','sheyan']], kanze:['male','wu',3,['xiashu','kuanshi']], @@ -1766,11 +1766,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var name=get.type(result.cards[0])=='basic'?'neifa_basic':'neifa_nobasic'; player.addTempSkill(name); var num=Math.min(5,player.countCards('h',function(cardx){ - return !lib.filter.cardEnabled(cardx,player); + return (name=='neifa_basic')!=(get.type(cardx,player)=='basic') })); player.addMark(name,num,false); } }, + ai:{ + threaten:3, + }, }, neifa_basic:{ mark:true, @@ -1882,6 +1885,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, group:'neifa_use', + ai:{ + reverseOrder:true, + skillTagFilter:function(player){ + if(player.storage.counttrigger&&player.storage.counttrigger.neifa_use>=2) return false; + }, + effect:{ + target:function(card,player,target){ + if((!player.storage.counttrigger||!player.storage.counttrigger.neifa_use||player.storage.counttrigger.neifa_use<2)&&player==target&&get.type(card)=='equip') return [1,3]; + }, + }, + }, }, neifa_use:{ audio:'neifa', @@ -3304,7 +3318,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.popup(trigger.card.name,trigger.name=='useCard'?'metal':'wood'); 'step 1' var random=0.5+player.countCards('e')*0.1; - if(get.isLuckyStar()) random=1; + if(get.isLuckyStar()||event.card.name=='wuxie') random=1; if(random>=Math.random()){ player.popup('洗具'); } @@ -7338,6 +7352,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' if(player.storage.fanghun) player.draw(player.storage.fanghun); + player.removeMark('fanghun',player.storage.fanghun); event.num=Math.max(2,player.storage.fanghun2||0); var list; if(_status.characterlist){ @@ -7383,14 +7398,71 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.recover(); } }, + refuhan:{ + audio:'fuhan', + trigger:{player:'phaseBegin'}, + unique:true, + limited:true, + skillAnimation:true, + animationColor:'orange', + forceunique:true, + filter:function(event,player){ + return player.countMark('fanghun')>0; + }, + content:function(){ + 'step 0' + if(player.storage.fanghun) player.draw(player.storage.fanghun); + player.removeMark('fanghun',player.storage.fanghun); + var list; + if(_status.characterlist){ + list=[]; + for(var i=0;i<_status.characterlist.length;i++){ + var name=_status.characterlist[i]; + if(lib.character[name][1]=='shu') list.push(name); + } + } + else if(_status.connectMode){ + list=get.charactersOL(function(i){ + return lib.character[i][1]!='shu'; + }); + } + else{ + list=get.gainableCharacters(function(info){ + return info[1]=='shu'; + }); + } + var players=game.players.concat(game.dead); + for(var i=0;i(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); }, - prompt:'将一张闪当杀使用或打出', - onuse:function(result,player){ - player.storage.fanghun--; - if(!player.storage.fanghun||player.storage.fanghun<0){ - player.storage.fanghun=0; - player.unmarkSkill('fanghun'); - } - else{ - player.updateMarks(); - } + 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; + }, }, - check:function(){return 1}, - ai:{ - respondSha:true, - skillTagFilter:function(player){ - if(!player.storage.fanghun||player.storage.fanghun<0) return false; - if(!player.countCards('h','shan')) return false; - }, - order:function(){ - return get.order({name:'sha'})+0.1; - }, - useful:-1, - value:-1 - } }, - shan:{ - enable:['chooseToUse','chooseToRespond'], - audio:'fanghun', - filterCard:{name:'sha'}, - viewAs:{name:'shan'}, - prompt:'将一张杀当闪使用或打出', - viewAsFilter:function(player){ - if(!player.storage.fanghun||player.storage.fanghun<0) return false; - if(!player.countCards('h','sha')) return false; - }, - onrespond:function(result,player){ - player.storage.fanghun--; - if(!player.storage.fanghun||player.storage.fanghun<0){ - player.storage.fanghun=0; - player.unmarkSkill('fanghun'); - } - else{ - player.updateMarks(); - } - }, - onuse:function(result,player){ - player.storage.fanghun--; - if(!player.storage.fanghun||player.storage.fanghun<0){ - player.storage.fanghun=0; - player.unmarkSkill('fanghun'); - } - else{ - player.updateMarks(); - } - }, - check:function(){return 1}, - ai:{ - respondShan:true, - skillTagFilter:function(player){ - if(!player.storage.fanghun||player.storage.fanghun<0) return false; - if(!player.countCards('h','sha')) return false; - }, - order:4, - useful:-1, - value:-1 - } - } } }, yjixi:{ @@ -11655,6 +11742,77 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }, + recanshi:{ + audio:2, + trigger:{player:'phaseDrawBegin2'}, + check:function(event,player){ + if(player.skipList.contains('phaseUse')||!player.countCards('h',function(card){ + return get.type(card,'trick')=='trick'&&player.hasUseTarget(card); + })) return true; + var num=game.countPlayer(function(current){ + if(player.hasZhuSkill('guiming')&¤t.group=='wu') return true; + return current.isDamaged(); + }); + return num>1; + }, + prompt:function(event,player){ + var num=game.countPlayer(function(current){ + if(player.hasZhuSkill('guiming')&¤t.group=='wu'&¤t!=player) return true; + return current.isDamaged(); + }); + return '残蚀:是否多摸'+get.cnNumber(num)+'张牌?'; + }, + filter:function(event,player){ + return !event.numFixed&&game.hasPlayer(function(current){ + if(player.hasZhuSkill('guiming')&¤t.group=='wu'&¤t!=player) return true; + return current.isDamaged(); + }); + }, + content:function(){ + var num=game.countPlayer(function(current){ + if(player.hasZhuSkill('guiming')&¤t.group=='wu'&¤t!=player) return true; + return current.isDamaged(); + }); + if(num>0){ + trigger.num+=num; + } + player.addTempSkill('recanshi2'); + } + }, + recanshi2:{ + trigger:{player:'useCard'}, + forced:true, + filter:function(event,player){ + if(player.countCards('he')==0) return false; + var type=get.type(event.card,'trick'); + return type=='trick'; + }, + autodelay:true, + content:function(){ + player.chooseToDiscard(true,'he'); + } + }, + rechouhai:{ + audio:2, + trigger:{player:'damageBegin3'}, + forced:true, + check:function(){ + return false; + }, + filter:function(event,player){ + return event.card.name=='sha'&&player.countCards('h')==0; + }, + content:function(){ + trigger.num++; + }, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(card.name=='sha'&&target.countCards('h')==0) return [1,-2]; + } + } + } + }, kunfen:{ audio:2, trigger:{player:'phaseJieshuBegin'}, @@ -14433,7 +14591,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ chongzhen:{ group:['chongzhen1','chongzhen2'], ai:{ - combo:'longdan', + combo:'ollongdan', mingzhi:false, effect:{ target:function(card,player,target,current){ @@ -14454,8 +14612,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, trigger:{player:'useCard'}, filter:function(event,player){ - if(event.skill!='longdan_shan'&&event.skill!='longdan_sha'&& - event.skill!='fanghun_shan'&&event.skill!='fanghun_sha') return false; + if((event.card.name!='sha'&&event.card.name!='shan')||(event.skill!='longdan_shan'&&event.skill!='longdan_sha'&& + event.skill!='fanghun_shan'&&event.skill!='fanghun_sha'&&event.skill!='ollongdan')) return false; var target=lib.skill.chongzhen1.logTarget(event,player); return target&&target.countGainableCards(player,'h')>0; }, @@ -14474,7 +14632,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'respond'}, filter:function(event,player){ if(event.skill!='longdan_shan'&&event.skill!='longdan_sha'&& - event.skill!='fanghun_shan'&&event.skill!='fanghun_sha') return false; + event.skill!='fanghun_shan'&&event.skill!='fanghun_sha'&&event.skill!='ollongdan') return false; return event.source&&event.source.countGainableCards(player,'h')>0; }, logTarget:'source', @@ -17435,7 +17593,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xinfenyue:'奋钺', xinfenyue_info:'出牌阶段限X次(X为与你不同阵营的存活角色数),你可以与一名其他角色拼点,若你赢,根据你拼点牌的点数依次执行以下效果:不大于5,你获得其一张牌;不大于9,你获得牌堆里的一张【杀】; 不大于K,视为你对其使用一张雷【杀】。', neifa:'内伐', - neifa_info:'出牌阶段开始时,你可以摸两张牌或获得场上的一张牌,然后弃置一张牌。若弃置的牌是基本牌,本回合你不能使用锦囊和装备牌,且【杀】的使用次数+X且目标+1;若弃置的不是基本牌,本回合你不能使用基本牌,且使用普通锦囊牌选择目标时可以增加或减少一个目标,前两次使用装备牌时摸X张牌(X为你发动〖内伐〗弃牌后手牌中不能使用的牌的数量且最多为5)。', + neifa_info:'出牌阶段开始时,你可以摸两张牌或获得场上的一张牌,然后弃置一张牌。若弃置的牌是基本牌,本回合你不能使用锦囊和装备牌,且【杀】的使用次数+X且目标+1;若弃置的不是基本牌,本回合你不能使用基本牌,且使用普通锦囊牌选择目标时可以增加或减少一个目标,前两次使用装备牌时摸X张牌(X为你发动〖内伐〗弃牌后手牌中因〖内伐〗而不能使用的牌的数量且最多为5)。', neifa_use:'内伐', hmmanyi:'蛮裔', hmmanyi_info:'锁定技,【南蛮入侵】对你无效。', @@ -17714,8 +17872,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ duanbing_info:'当你使用【杀】选择目标后,你可以令一名距离为1的其他角色也成为此牌的目标。', fanghun:'芳魂', fanghun_info:'当你使用【杀】造成伤害或受到【杀】的伤害后,你获得X个“梅影”标记(X为伤害点数);你可以移去1个“梅影”标记来发动〖龙胆〗并摸一张牌。', + refanghun:'芳魂', + refanghun_info:'当你使用【杀】或成为【杀】的目标后,你获得1个“梅影”标记;你可以移去1个“梅影”标记来发动〖龙胆〗并摸一张牌。', + fanghun_sha:'龙胆', fuhan:'扶汉', fuhan_info:'限定技,回合开始时,你可以移去所有“梅影”标记并摸等量的牌,随机观看五名未登场的蜀势力角色,将武将牌替换为其中一名角色,并将体力上限数调整为本局游戏中移去“梅影”标记的数量(至少为2,至多为8),然后回复1点体力。', + refuhan:'扶汉', + refuhan_info:'限定技,回合开始时,你可以移去所有“梅影”标记并摸等量的牌,随机观看五名未登场的蜀势力角色,获得其中一张武将牌上的所有技能。', yjixi:'觊玺', yjixi_info:'觉醒技,结束阶段,若你连续三回合没有因〖庸肆〗而失去过体力,则你增加1点体力上限并回复1点体力,然后选择一项:获得技能〖妄尊〗;摸两张牌并获得当前主公的主公技。', xinyongsi:'庸肆', @@ -17994,6 +18157,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhuiji:'追击', chouhai:'仇海', chouhai_info:'锁定技,当你受到伤害时,若你没有手牌,此伤害+1。', + rechouhai:'仇海', + rechouhai_info:'锁定技,当你受到渠道为【杀】的伤害时,若你没有手牌,此伤害+1。', guiming:'归命', guiming_info:'主公技,锁定技,你将残蚀描述中的“已受伤角色”改为“已受伤角色或其他吴势力角色”', chixin:'赤心', @@ -18005,6 +18170,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ canshi:'残蚀', canshi2:'残蚀', canshi_info:'摸牌阶段开始时,你可以改为摸X张牌(X为已受伤的角色数),若如此做,当你于此回合内使用基本牌或锦囊牌时,你弃置一张牌。', + recanshi:'残蚀', + recanshi2:'残蚀', + recanshi_info:'摸牌阶段开始时,你可以多摸X张牌(X为已受伤的角色数),若如此做,当你于此回合内使用锦囊牌时,你弃置一张牌。', zhuiji_info:'锁定技,你与体力值不大于你的角色的距离视为1。', kunfen:'困奋', kunfen_info:'锁定技,结束阶段开始时,你失去1点体力,然后摸两张牌。', diff --git a/character/yijiang.js b/character/yijiang.js index 059276b9a..c5d02454f 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -37,7 +37,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ handang:['male','wu',4,['gongji','jiefan']], fuhuanghou:['female','qun',3,['qiuyuan','zhuikong']], zhonghui:['male','wei',4,['quanji','zili']], - jianyong:['male','shu',3,['qiaoshui','jyzongshi']], + jianyong:['male','shu',3,['reqiaoshui','jyzongshi']], madai:['male','shu',4,['mashu','qianxi']], liufeng:['male','shu',4,['xiansi']], manchong:['male','wei',3,['xinjunxing','yuce']], @@ -51,7 +51,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhuhuan:['male','wu',4,['fenli','pingkou']], xiahoushi:['female','shu',3,['qiaoshi','yanyu']], - panzhangmazhong:['male','wu',4,['duodao','anjian']], + panzhangmazhong:['male','wu',4,['reduodao','reanjian']], zhoucang:['male','shu',4,['xinzhongyong']], guanping:['male','shu',4,['longyin']], liaohua:['male','shu',4,['dangxian','fuli']], @@ -429,7 +429,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ subSkill:{ damage:{ sub:true, - trigger:{global:'damage'}, + trigger:{global:'damageBegin1'}, audio:'benxi', forced:true, filter:function(event,player){ @@ -909,10 +909,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ evt.after.push(next); next.player=player; next.setContent(function(){ - game.broadcastAll(function(player){ - player.storage.xintaoluan=[]; - delete player.storage.xintaoluan2; - },player); + player.storage.xintaoluan=[]; + delete player.storage.xintaoluan2; }); } player.storage.xintaoluan.add(result.card.name); @@ -1006,10 +1004,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ evt.xintaoluan=true; next.player=player; next.setContent(function(){ - game.broadcastAll(function(player){ - player.storage.xintaoluan=[]; - delete player.storage.xintaoluan2; - },player); + player.storage.xintaoluan=[]; + delete player.storage.xintaoluan2; }); } player.storage.xintaoluan.add('shan'); @@ -1059,10 +1055,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ evt.after.push(next); next.player=player; next.setContent(function(){ - game.broadcastAll(function(player){ - player.storage.xintaoluan=[]; - delete player.storage.xintaoluan2; - },player); + player.storage.xintaoluan=[]; + delete player.storage.xintaoluan2; }); } player.storage.xintaoluan.add('wuxie'); @@ -2893,6 +2887,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else{ event.finish(); } + delete _status.noclearcountdown; + game.stopCountChoose(); "step 3" if(event.target.getCards('he').contains(event.card)){ event.target.chooseControlList('问卦','将'+get.translation(event.card)+'置于牌堆顶','将'+get.translation(event.card)+'置于牌堆底',event.target==player,function(){ @@ -5131,6 +5127,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'phaseJieshuBegin'}, direct:true, audio:2, + audioname:['xin_chengpu'], filter:function(event,player){ return player.countCards('h')>0&&(_status.connectMode||player.countCards('h','sha')>0)&&!player.storage.chunlao.length; }, @@ -5186,6 +5183,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return target==_status.event.dying; }, direct:true, + clearTime:true, delay:false, selectTarget:-1, content:function(){ @@ -5193,7 +5191,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.chooseCardButton(get.translation('chunlao'),player.storage.chunlao,true); "step 1" if(result.bool){ - player.logSkill('chunlao'); + player.logSkill('chunlao',target); player.$throw(result.links); player.storage.chunlao.remove(result.links[0]); game.cardsDiscard(result.links[0]); @@ -7074,13 +7072,119 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); 'step 1' if(result.bool&&trigger.source.getEquip(1)){ - player.gain(trigger.source.getEquip(1),trigger.source,'give'); + player.gain(trigger.source.getEquip(1),trigger.source,'give','bySelf'); } }, ai:{ maixie_defend:true, } }, + reanjian:{ + trigger:{player:'useCardToPlayered'}, + forced:true, + audio:'anjian', + filter:function(event,player){ + return event.card.name=='sha'&&!event.target.inRange(player); + }, + logTarget:'target', + content:function(){ + trigger.getParent().reanjian_buffed=true; + var map=trigger.customArgs; + var id=trigger.target.playerid; + if(!map[id]) map[id]={}; + if(!map[id].extraDamage) map[id].extraDamage=0; + map[id].extraDamage++; + trigger.target.addTempSkill('reanjian2'); + trigger.target.addTempSkill('reanjian4'); + trigger.target.storage.reanjian2.add(trigger.card); + }, + ai:{ + unequip_ai:true, + skillTagFilter:function(player,tag,arg){ + if(arg&&arg.name=='sha'&&arg.target&&!arg.target.inRange(player)) return true; + return false; + } + }, + }, + reanjian2:{ + firstDo:true, + ai:{unequip2:true}, + init:function(player,skill){ + if(!player.storage[skill]) player.storage[skill]=[]; + }, + onremove:true, + trigger:{ + player:['damage','damageCancelled','damageZero'], + target:['shaMiss','useCardToExcluded'], + }, + charlotte:true, + filter:function(event,player){ + return player.storage.reanjian2&&event.card&&player.storage.reanjian2.contains(event.card); + }, + silent:true, + forced:true, + popup:false, + priority:12, + content:function(){ + player.storage.reanjian2.remove(trigger.card); + if(!player.storage.reanjian2.length) player.removeSkill('reanjian2'); + }, + }, + reanjian3:{ + mod:{ + cardSavable:function(card){ + if(card.name=='tao') return false; + }, + }, + }, + reanjian4:{ + trigger:{player:'dyingBegin'}, + forced:true, + silent:true, + firstDo:true, + filter:function(event,player){ + return event.getParent(2).reanjian_buffed=true; + }, + content:function(){ + player.addTempSkill('reanjian3',{global:['dyingEnd','phaseEnd']}); + }, + }, + reduodao:{ + trigger:{target:'useCardToTargeted'}, + filter:function(event,player){ + return event.card.name=='sha'&&(get.color(event.card)=='red'?event.player.getEquip(1):player.countCards('he')>0); + }, + direct:true, + audio:'duodao', + content:function(){ + 'step 0' + if(get.color(trigger.card)!='red'){ + var prompt='弃置一张牌' + if(trigger.player.getEquip(1)) prompt+=(',然后获得'+get.translation(trigger.player)+'装备区中的'+get.translation(trigger.player.getEquip(1))); + var next=player.chooseToDiscard('he',get.prompt('reduodao',trigger.player),prompt); + next.logSkill=['reduodao',trigger.player]; + next.set('ai',function(card){ + if(!_status.event.getTrigger().player.getEquip(1)) return 0; + if(get.attitude(_status.event.player,_status.event.getTrigger().player)*get.value(_status.event.getTrigger().player.getEquip(1))<=0){ + return 6-get.value(card); + } + return 0; + }); + } + else{ + player.chooseBool('是否发动夺刀】,获得'+get.translation(trigger.player)+'装备区的'+get.translation(trigger.player.getEquip(1))+'?').set('ai',function(){ + var player=_status.event.player; + var source=_status.event.getTrigger().player; + return get.attitude(player,source)*get.value(source.getEquip(1))<=0; + }); + } + 'step 1' + if(result.bool&&trigger.player.getEquip(1)){ + if(!result.cards||!result.cards.length) player.logSkill('reduodao',trigger.player); + player.gain(trigger.player.getEquip(1),trigger.player,'give','bySelf'); + } + }, + }, anjian:{ audio:2, trigger:{source:'damageBegin1'}, @@ -7485,6 +7589,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ skillAnimation:true, animationColor:'wood', audio:2, + audioname:['re_handang'], unique:true, limited:true, mark:true, @@ -7693,6 +7798,48 @@ game.import('character',function(lib,game,ui,get,ai,_status){ order:7 } }, + reqiaoshui:{ + audio:'qiaoshui', + enable:'phaseUse', + filterTarget:function(card,player,target){ + return player.canCompare(target); + }, + filter:function(event,player){ + return player.countCards('h')>0; + }, + content:function(){ + 'step 0' + player.chooseToCompare(target); + 'step 1' + if(result.bool) player.addTempSkill('qiaoshui3','phaseUseEnd'); + else{ + player.addTempSkill('qiaoshui4'); + event.getParent(3).skipped=true; + } + }, + ai:{ + order:10, + result:{ + target:function (player,target){ + if(player.hasSkill('qiaoshui3')) return 0; + var nd=!player.needsToDiscard(); + if(player.hasCard(function(card){ + if(get.position(card)!="h") return false; + var val=get.value(card) + if(nd&&val<0) return true; + if(val<=5){ + return card.number>=12; + } + if(val<=6){ + return card.number>=13; + } + return false; + })) return -1; + return 0; + }, + }, + }, + }, qiaoshui:{ audio:2, trigger:{player:'phaseUseBegin'}, @@ -7810,6 +7957,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.logSkill('qiaoshui',event.targets); } }, + qiaoshui4:{ + mod:{ + ignoredHandcard:function(card,player){ + if(get.type(card,'trick',player)=='trick'){ + return true; + } + }, + cardDiscardable:function(card,player,name){ + if(name=='phaseDiscard'&&get.type(card,'trick',player)=='trick'){ + return false; + } + }, + }, + }, jyzongshi_old:{ audio:2, trigger:{target:'useCardToBegin'}, @@ -8263,7 +8424,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zili:{ skillAnimation:true, animationColor:'thunder', - audio:3, + audio:2, + audioname:['re_zhonghui'], unique:true, juexingji:true, trigger:{player:'phaseZhunbeiBegin'}, @@ -8287,6 +8449,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ enable:'phaseUse', usable:1, audio:2, + audioname:['re_zhonghui'], filter:function(event,player){ return player.storage.quanji&&player.storage.quanji.length>0; }, @@ -8297,6 +8460,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ backup:function(links,player){ return { audio:'paiyi', + audioname:['re_zhonghui'], filterTarget:true, filterCard:function(){return false}, selectCard:-1, @@ -8308,7 +8472,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ result:{ target:function(player,target){ if(player!=target) return 0; - if(player.countCards('h')+2<=player.hp+player.storage.quanji.length) return 1; + if(!player.hasSkill('requanji')&&player.countCards('h')+2<=player.hp+player.storage.quanji.length) return 1; return 0; } }, @@ -11285,7 +11449,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ benxi:'奔袭', benxi_info:'锁定技,你的回合内,你每使用一次牌后,你的进攻距离+1直到回合结束;你的回合内,若你与所有角色的距离均为1,你无视其他角色的防具,且你使用的【杀】可额外指定一个目标', xinbenxi:'奔袭', - xinbenxi_info:'锁定技,当你于回合内使用牌时,你本回合计算与其他角色的距离-1。你的回合内,若你至场上所有其他角色的距离均不大于1,则当你使用【杀】或普通锦囊牌选择唯一目标后,你选择至多两项:1.为此牌多指定一个目标;2.令此牌无视防具;3.令此牌不可被抵消;4.你因此牌造成伤害时摸一张牌。', + xinbenxi_info:'锁定技,当你于回合内使用牌时,你本回合计算与其他角色的距离-1。你的回合内,若你至场上所有其他角色的距离均不大于1,则当你使用【杀】或普通锦囊牌选择唯一目标后,你选择至多两项:1.为此牌多指定一个目标;2.令此牌无视防具;3.令此牌不可被抵消;4.此牌造成伤害时摸一张牌。', sidi:'司敌', sidi2:'司敌', sidi3:'司敌', @@ -11349,6 +11513,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mingjian_info:'出牌阶段限一次,你可以将所有手牌交给一名其他角色,若如此做,该角色于其下个回合的手牌上限+1,且使用【杀】的次数上限+1', xingshuai:'兴衰', xingshuai_info:'主公技,限定技,当你进入濒死状态时,其他魏势力角色可依次令你回复1点体力,然后这些角色依次受到1点伤害。', + reduodao:'夺刀', + reduodao_info:'当你成为【杀】的目标后,若此杀:为红色,你可点击确定键。不为红色,你可以弃置一张牌。然后你获得此【杀】使用者装备区里的武器牌。', + reanjian:'暗箭', + reanjian_info:'锁定技,当你使用【杀】指定目标后,若你不在其攻击范围内,则此杀伤害+1且无视其防具。若其因执行此【杀】的效果受到伤害而进入濒死状态,则其不能使用【桃】直到此濒死事件结算结束。', duodao:'夺刀', duodao_info:'当你受到【杀】造成的伤害后,你可以弃置一张牌,然后获得伤害来源装备区里的武器牌', anjian:'暗箭', @@ -11417,6 +11585,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jyzongshi_info:'当你拼点赢时,你可以获得对方此次拼点的牌;当你拼点没赢时,你可以收回你此次拼点的牌。', qiaoshui:'巧说', qiaoshui_info:'出牌阶段开始时,你可与一名其他角色拼点。若你赢,你使用的下一张基本牌或普通锦囊牌可以额外指定任意一名其他角色为目标或减少指定一个目标;若你没赢,你不能使用锦囊牌直到回合结束', + reqiaoshui:'巧说', + reqiaoshui_info:'出牌阶段,你可与一名其他角色拼点。若你赢,你使用的下一张基本牌或普通锦囊牌可以额外指定任意一名其他角色为目标或减少指定一个目标;若你没赢,你结束出牌阶段且本回合内锦囊牌不计入手牌上限。', junxing:'峻刑', junxing_info:'出牌阶段限一次,你可以弃置至少一张手牌并选择一名其他角色,该角色需弃置一张与你弃置的牌类别均不同的手牌,否则其先将其武将牌翻面再摸X张牌(X为你以此法弃置的手牌数量)。', xinjunxing:'峻刑', diff --git a/game/asset.js b/game/asset.js index 03113ae70..cc8004a3b 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'v1.9.100', + 'v1.9.100.1', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -568,6 +568,11 @@ window.noname_asset_list=[ 'audio/die/yangyi.mp3', 'audio/die/yujin_yujin.mp3', 'audio/die/ol_weiyan.mp3', + 'audio/die/dengzhi.mp3', + 'audio/die/re_handang.mp3', + 'audio/die/re_zhonghui.mp3', + 'audio/die/xin_chengpu.mp3', + 'audio/die/zhengxuan.mp3', 'audio/skill/anguo1.mp3', 'audio/skill/anguo2.mp3', @@ -2492,6 +2497,24 @@ window.noname_asset_list=[ 'audio/skill/kuanggu_ol_weiyan2.mp3', 'audio/skill/reqimou1.mp3', 'audio/skill/reqimou2.mp3', + 'audio/skill/chunlao_xin_chengpu1.mp3', + 'audio/skill/chunlao_xin_chengpu2.mp3', + 'audio/skill/jiefan_re_handang1.mp3', + 'audio/skill/jiefan_re_handang2.mp3', + 'audio/skill/jimeng1.mp3', + 'audio/skill/jimeng2.mp3', + 'audio/skill/paiyi_re_zhonghui1.mp3', + 'audio/skill/paiyi_re_zhonghui2.mp3', + 'audio/skill/regongji1.mp3', + 'audio/skill/regongji2.mp3', + 'audio/skill/relihuo1.mp3', + 'audio/skill/relihuo2.mp3', + 'audio/skill/requanji1.mp3', + 'audio/skill/requanji2.mp3', + 'audio/skill/shuaiyan1.mp3', + 'audio/skill/shuaiyan2.mp3', + 'audio/skill/zili_re_zhonghui1.mp3', + 'audio/skill/zili_re_zhonghui2.mp3', 'font/huangcao.ttf', 'font/shousha.ttf', @@ -3049,7 +3072,11 @@ window.noname_asset_list=[ 'image/character/key_yuzuru.jpg', 'image/character/old_wangyun.jpg', 'image/character/old_zhaoyun.jpg', - 'image/character/sp_key_kanade.jpg', + 'image/character/sp_key_kanade.jpg','image/character/key_mio.jpg', + 'image/character/re_handang.jpg', + 'image/character/re_zhonghui.jpg', + 'image/character/xin_chengpu.jpg', + 'image/character/key_midori.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', diff --git a/game/game.js b/game/game.js index 62fb1b042..de0d48e6e 100644 --- a/game/game.js +++ b/game/game.js @@ -10692,7 +10692,10 @@ return event.filter2(info2)&&event.filter1(info2)&&info2[1]==info[1]&&info[2]==info2[2]&&(lib.skill.global.contains(info2[0])||info[1].hasSkill(info2[0],true)); } 'step 1' - if(event.list.length){ + if(trigger.filterStop&&trigger.filterStop()){ + event.finish(); + } + else if(event.list.length){ var info=event.list.shift(); game.createTrigger(event.triggername,info[0],info[1],trigger); event.redo(); @@ -10764,7 +10767,10 @@ game.createTrigger(event.triggername,info[0],info[1],trigger); } 'step 7' - event.goto(event.doing.list.length?3:2); + if(trigger.filterStop&&trigger.filterStop()){ + event.finish(); + } + else event.goto(event.doing.list.length?3:2); }, createTrigger:function(){ "step 0" @@ -14648,39 +14654,14 @@ damage:function(){ "step 0" event.forceDie=true; - if(event.source&&event.source.isDead()) delete event.source; - if(num<=0){ - event.trigger('damageZero'); - event.finish(); - event._triggered=null; - } - else event.trigger('damageBegin1'); + event.trigger('damageBegin1'); "step 1" - if(event.source&&event.source.isDead()) delete event.source; - if(num<=0){ - event.trigger('damageZero'); - event.finish(); - event._triggered=null; - } - else event.trigger('damageBegin2'); + event.trigger('damageBegin2'); "step 2" - if(event.source&&event.source.isDead()) delete event.source; - if(num<=0){ - event.trigger('damageZero'); - event.finish(); - event._triggered=null; - } - else event.trigger('damageBegin3'); + event.trigger('damageBegin3'); "step 3" - if(event.source&&event.source.isDead()) delete event.source; - if(num<=0){ - event.trigger('damageZero'); - event.finish(); - event._triggered=null; - } - else event.trigger('damageBegin4'); + event.trigger('damageBegin4'); "step 4" - if(event.source&&event.source.isDead()) delete event.source; if(num>0&&player.hujia&&!player.hasSkillTag('nohujia')){ if(num>=player.hujia){ event.hujia=player.hujia; @@ -14700,7 +14681,6 @@ event._triggered=null; } "step 5" - if(event.source&&event.source.isDead()) delete event.source; if(lib.config.background_audio){ game.playAudio('effect','damage'+(num>1?'2':'')); } @@ -14761,7 +14741,6 @@ } } "step 6" - if(event.source&&event.source.isDead()) delete event.source; if(player.hp<=0&&player.isAlive()){ game.delayx(); player.dying(event); @@ -14807,7 +14786,6 @@ } } "step 7" - if(event.source&&event.source.isDead()) delete event.source; if(!event.notrigger) event.trigger('damageSource'); }, recover:function(){ @@ -14907,6 +14885,7 @@ event.trigger('dying'); game.log(player,'濒死'); "step 1" + delete event.filterStop; if(player.hp>0){ _status.dying.remove(player); game.broadcast(function(list){ @@ -18169,7 +18148,7 @@ if(info.onuse){ info.onuse(result,this); } - if(info.direct){ + if(info.direct&&!info.clearTime){ _status.noclearcountdown=true; } } @@ -18650,6 +18629,7 @@ }, damage:function(){ var next=game.createEvent('damage'); + //next.forceDie=true; next.player=this; var nocard,nosource; var event=_status.event; @@ -18690,6 +18670,14 @@ if(next.num==undefined) next.num=1; if(next.nature=='poison') delete next._triggered; next.setContent('damage'); + next.filterStop=function(){ + if(this.source&&this.source.isDead()) delete this.source; + if(this.num<=0){ + this.trigger('damageZero'); + this._triggered=null; + return true; + } + }; return next; }, recover:function(){ @@ -18891,6 +18879,9 @@ next.reason=reason; if(reason&&reason.source) next.source=reason.source; next.setContent('dying'); + next.filterStop=function(){ + return this.player.hp>0; + }; return next; }, die:function(reason){ diff --git a/game/update.js b/game/update.js index 75604b8cb..4abf89e9d 100644 --- a/game/update.js +++ b/game/update.js @@ -1,9 +1,9 @@ window.noname_update={ - version:'1.9.100', - update:'1.9.99.3', + version:'1.9.100.1', + update:'1.9.100', changeLog:[ - '新界赵云,界张飞,王允', - '立华奏,音无结弦', + '界钟会,界韩当,界程普,邓芝', + '新潘璋马忠,简雍,赵襄,孙皓', 'bug修复', ], files:[ @@ -13,23 +13,23 @@ window.noname_update={ 'card/standard.js', //'card/swd.js', //'card/mtg.js', - 'card/gujian.js', - //'card/guozhan.js', + //'card/gujian.js', + 'card/guozhan.js', //'card/gwent.js', //'card/yunchou.js', //'card/zhenfa.js', - 'card/zhulu.js', + //'card/zhulu.js', 'character/diy.js', - //'character/extra.js', + 'character/extra.js', //'character/hearth.js', //'character/gujian.js', //'character/gwent.js', //'character/hearth.js', - //'character/mobile.js', + 'character/mobile.js', //'character/mtg.js', - 'character/old.js', + //'character/old.js', 'character/refresh.js', - //'character/shenhua.js', + 'character/shenhua.js', 'character/sp.js', //'character/tw.js', //'character/standard.js', @@ -48,8 +48,8 @@ window.noname_update={ //'mode/tafang.js', 'mode/single.js', //'mode/stone.js', - //'mode/brawl.js', - //'mode/versus.js', + 'mode/brawl.js', + 'mode/versus.js', //'mode/boss.js', 'game/game.js', //'game/NoSleep.js', diff --git a/image/character/key_midori.jpg b/image/character/key_midori.jpg new file mode 100644 index 000000000..0da257a06 Binary files /dev/null and b/image/character/key_midori.jpg differ diff --git a/image/character/key_mio.jpg b/image/character/key_mio.jpg new file mode 100644 index 000000000..ff7ec43f0 Binary files /dev/null and b/image/character/key_mio.jpg differ diff --git a/image/character/re_handang.jpg b/image/character/re_handang.jpg new file mode 100644 index 000000000..818a5ad70 Binary files /dev/null and b/image/character/re_handang.jpg differ diff --git a/image/character/re_zhonghui.jpg b/image/character/re_zhonghui.jpg new file mode 100644 index 000000000..0ce6591ef Binary files /dev/null and b/image/character/re_zhonghui.jpg differ diff --git a/image/character/xin_chengpu.jpg b/image/character/xin_chengpu.jpg new file mode 100644 index 000000000..b6d41dc2f Binary files /dev/null and b/image/character/xin_chengpu.jpg differ diff --git a/mode/brawl.js b/mode/brawl.js index 5ebd703f1..cfec85f7b 100644 --- a/mode/brawl.js +++ b/mode/brawl.js @@ -1871,7 +1871,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ ['sunquan','zhangzhang','zhouyu'], ['re_yuanshao','guotufengji','yj_jushou'] ]; - if(_status.forceKey) list.push(['key_yuri','key_kyousuke','key_umi']) + if(_status.forceKey) list.push(['key_yuri','key_yuzuru','sp_key_kanade']) list.randomSort(); var list2=[]; for(var i=0;i0) return 1; return (get.attitude(trigger.source,trigger.player)<0&&get.junlingEffect(player,result.junling,trigger.source,result.targets,trigger.source)>=-2)?1:0; return 0; }); @@ -1102,11 +1103,11 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ sub:true, equipSkill:true, noHidden:true, - trigger:{global:'phaseDrawBegin2'}, + trigger:{player:'phaseDrawBegin2'}, //priority:8, forced:true, filter:function(event,player){ - if(event.player!=player||event.num<=0||player.isDisabled(5)) return false; + if(event.numFixed||player.isDisabled(5)) return false; return !game.hasPlayer(function(current){ return current.getEquip('yuxi'); }) @@ -1116,13 +1117,13 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, eff2:{ sub:true, - trigger:{global:'phaseUseBegin'}, + trigger:{player:'phaseUseBegin'}, //priority:8, forced:true, noHidden:true, equipSkill:true, filter:function(event,player){ - if(event.player!=player||player.isDisabled(5)) return false; + if(player.isDisabled(5)) return false; return game.hasPlayer(function(current){ return player.canUse('zhibi',current); })&&!game.hasPlayer(function(current){ @@ -1721,10 +1722,9 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ subSkill:{ eff:{ sub:true, - trigger:{global:'phaseDrawBegin2'}, + trigger:{player:'phaseDrawBegin2'}, filter:function(event,player){ - if(event.player!=player) return false; - return event.num>0; + return !event.numFixed; }, silent:true, content:function(){ @@ -1858,17 +1858,24 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ position:'he', filterCard:true, selectCard:2, - complexSelect:true, - complexCard:true, - check:function(card,player,target){ - if(get.position(card)=='h') return 8-get.value(card); - return 6-get.value(card); + check:function(card){ + var player=_status.event.player; + if(player.hasSkill('new_paoxiao',true)||player.getEquip('zhuge')||game.hasPlayer(function(current){ + return current.hasSkill('new_paoxiao'); + })) return 0; + if(player.countCards('h',function(cardx){ + return !ui.selected.cards.contains(cardx)&&cardx!=card&&cardx.name=='sha'&&player.hasUseTarget(cardx); + })<2) return 0; + if(get.position(card)=='h') return 6-get.value(card); + return 5-get.value(card); }, filterTarget:function(card,player,target){return target!=player&&target.hasSkill('gzxuanhuo')&&target.isFriendOf(player)}, discard:false, lose:false, + delay:false, content:function(){ 'step 0' + if(player!=game.me&&!player.isOnline()) cards.reverse(); target.gain(cards[0],player); player.$giveAuto(cards[0],target); player.discard(cards[1]); @@ -1881,6 +1888,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } if(!list.length) event.finish(); else player.chooseControl(list).set('ai',function(){ + if(list.contains('new_paoxiao')) return 'new_paoxiao'; return list.randomGet(); }).set('prompt','选择并获得一项技能直到回合结束'); 'step 2' @@ -1891,6 +1899,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, forceaudio:true, audio:['xuanhuo',2], + ai:{ + order:8, + result:{target:1}, + }, }, //used:{}, }, @@ -2821,6 +2833,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ player:"phaseDrawBegin2", }, frequent:true, + filter:function(event){return !event.numFixed}, content:function (){ trigger.num++; }, @@ -5696,6 +5709,9 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ filter:function(event,player){ return player.hasViceCharacter(); }, + check:function(event,player){ + return player.hp<=1||get.guozhanRank(name)<=3; + }, content:function(){ 'step 0' player.removeCharacter(1); diff --git a/mode/versus.js b/mode/versus.js index 52ddc77ae..54a6aeeff 100644 --- a/mode/versus.js +++ b/mode/versus.js @@ -100,6 +100,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ else if(_status.mode=='three'){ if(lib.character.wenpin) lib.character.wenpin[3]=['zhenwei_three']; if(lib.character.zhugejin) lib.character.zhugejin[3]=['hongyuan','huanshi_three','mingzhe']; + if(lib.character.key_yuzuru){ + lib.character.key_yuzuru[2]=4; + lib.character.key_yuzuru[3]=['yuzuru_bujin']; + } if(!get.config('enable_all_cards')){ lib.translate.wuzhong_info+='若对方存活角色多于己方,则额外摸一张牌'; lib.translate.zhuge_info='锁定技,出牌阶段,你使用杀的次数上限+3';