diff --git a/character/extra.js b/character/extra.js index ab803de6f..be1b58ddf 100755 --- a/character/extra.js +++ b/character/extra.js @@ -549,7 +549,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{global:'useCard'}, forced:true, filter:function(event,player){ - return event.card.name=='qizhengxiangsheng'||get.zhinangs().contains(event.card.name)||player.getStorage('dinghan').contains(event.card.name); + return (event.card.name=='qizhengxiangsheng'||get.zhinangs().contains(event.card.name)||player.getStorage('dinghan').contains(event.card.name))&&event.card.isCard&&event.cards.length==1; }, content:function(){player.draw()}, }, @@ -4857,7 +4857,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ tianzuo:'天佐', tianzuo_info:'①游戏开始时,你将8张【奇正相生】加入牌堆。②当一名角色成为【奇正相生】的目标后,你可观看其手牌,然后可以更改其标记。', lingce:'灵策', - lingce_info:'锁定技。当有【奇正相生】或智囊或〖定汉①〗记录过的锦囊牌被使用时,你摸一张牌。', + lingce_info:'锁定技。当有【奇正相生】或智囊或〖定汉①〗记录过的锦囊牌被使用时,若此牌不为转化牌且对应实体牌数量为1,则你摸一张牌。', dinghan:'定汉', dinghan_info:'①当你成为未记录过的锦囊牌的目标时,你记录此牌名并取消之。②准备阶段,你可在〖定汉①〗的记录中添加或减少一种锦囊牌的牌名。', shen_sunce:'神孙策', diff --git a/character/mobile.js b/character/mobile.js index bb5ebb252..70b09fe5c 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -18,13 +18,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mobile_shenhua:["re_pangtong","re_guanqiujian","xin_yuanshao","re_liushan","re_dongzhuo","re_sp_zhugeliang","re_sunjian","re_dengai","re_jiangwei","re_zhurong"], mobile_yijiang1:["re_xusheng","re_lingtong","ol_yujin"], mobile_yijiang2:["old_bulianshi","xin_liaohua","xin_caozhang","re_liubiao","re_handang","xin_chengpu","xin_gongsunzan","re_zhonghui"], - mobile_yijiang3:["xin_jianyong","xin_zhuran","xin_guohuai","xin_panzhangmazhong","xin_fuhuanghou"], + mobile_yijiang3:["xin_jianyong","xin_zhuran","xin_guohuai","xin_panzhangmazhong","xin_fuhuanghou","re_yufan"], mobile_yijiang4:["xin_zhoucang","xin_caifuren","xin_guyong","xin_sunluban","xin_caozhen"], mobile_yijiang67:["re_jikang"], mobile_sp:["old_yuanshu","re_wangyun","re_baosanniang","re_weiwenzhugezhi","re_zhanggong","re_xugong","re_heqi","liuzan","xin_hansui"], }, }, character:{ + re_yufan:['male','wu',3,['zhiyan','rezongxuan']], sunhanhua:['female','wu',3,['chongxu','miaojian','shhlianhua']], sp_jiangqing:['male','wu',4,['spjianyi','spshangyi']], sp_jiangwan:['male','shu',3,['spzhenting','spjincui']], @@ -594,6 +595,39 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + //虞翻 + rezongxuan:{ + inherit:'zongxuan', + group:'rezongxuan_place', + }, + rezongxuan_place:{ + audio:'rezongxuan', + enable:'phaseUse', + usable:1, + content:function(){ + 'step 0' + player.draw(); + 'step 1' + player.chooseCard('he',true,'将一张牌置于牌堆顶'); + 'step 2' + if(result&&result.cards){ + event.card=result.cards[0]; + player.lose(result.cards,ui.cardPile,'insert'); + game.log(player,'将',(get.position(event.card)=='h'?'一张牌':event.card),'置于牌堆顶'); + game.broadcastAll(function(player){ + var cardx=ui.create.card(); + cardx.classList.add('infohidden'); + cardx.classList.add('infoflip'); + player.$throw(cardx,1000,'nobroadcast'); + },player); + } + else event.finish(); + }, + ai:{ + order:1, + result:{player:1}, + }, + }, //孙寒华 chongxu:{ enable:'phaseUse', @@ -1438,7 +1472,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.getHistory('gain',function(evt){ hs.removeArray(evt.cards); }); - if(hs.length) player.addGaintag(cards,'zaoli'); + if(hs.length) player.addGaintag(hs,'zaoli'); } }, onremove:function(player){ @@ -2486,7 +2520,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ filter:function(event,player){ if(!player.storage.fengjie2||!player.storage.fengjie2.isIn()) return false; var num1=player.countCards('h'),num2=player.storage.fengjie2.hp; - return num1>num2||num1player.storage.fengjie2, content:function(){ @@ -15183,7 +15217,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jutu:'据土', jutu_info:'锁定技,准备阶段,你获得所有你武将牌上的“生”,然后摸X+1张牌,然后将X张牌置于你的武将牌上,称为“生”(X为你因〖邀虎〗选择势力的角色数量)。', yaohu:'邀虎', - yaohu_info:'每轮限一次,你的回合开始时,你须选择场上一个势力。该势力其他角色的出牌阶段开始时,其可以获得你的一张“生”,然后其须选择一项:①对你指定的另一名的其他角色使用一张【杀】(无距离和次数限制);②交给你两张牌。', + yaohu_info:'每轮限一次,你的回合开始时,你须选择场上一个势力。该势力其他角色的出牌阶段开始时,其获得你的一张“生”,然后其须选择一项:①对你指定的另一名的其他角色使用一张【杀】(无距离和次数限制);②交给你两张牌。', rehuaibi:'怀璧', rehuaibi_info:'主公技,锁定技,你的手牌上限+X(X为你因〖邀虎〗选择势力的角色数量)。', simafu:'司马孚', @@ -15260,6 +15294,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shhlianhua1_info:'当你成为【杀】的目标后,你摸一张牌。然后你进行判定,若结果为黑桃,则此【杀】对你无效。', shhlianhua2:'莲华·极', shhlianhua2_info:'当你成为【杀】的目标后,你摸一张牌。然后此【杀】的使用者选择一项:①弃置一张牌。②令此【杀】对你无效。', + re_yufan:'手杀虞翻', + rezongxuan:'纵玄', + rezongxuan_place:'纵玄', + rezongxuan_info:'当你的牌因弃置而进入弃牌堆后,你可以将其以任意顺序置于牌堆顶。出牌阶段限一次,你可以摸一张牌,然后将一张牌置于牌堆顶。', mobile_standard:'手杀异构·标准包', mobile_shenhua:'手杀异构·神话再临', diff --git a/character/rank.js b/character/rank.js index d9b376049..48c8cf602 100644 --- a/character/rank.js +++ b/character/rank.js @@ -28,6 +28,7 @@ window.noname_character_rank={ 'sp_xiahoushi', 'ns_zhangwei', 'wanglang', + 'caojinyu', 'key_mio', 'key_midori', 'key_yuri', @@ -489,6 +490,7 @@ window.noname_character_rank={ 'qiaozhou', 're_xunchen', 'sp_cuiyan', + 'ol_dongzhao', ], bp:[ 'chess_diaochan', @@ -724,6 +726,11 @@ window.noname_character_rank={ 'ol_yangyi', 'sp_zhangchangpu', 'sp_jiangwan', + 'xinchang', + 'xin_yufan', + 'tw_re_caohong', + 'tw_mayunlu', + 'tw_hucheer', ], b:[ 'diy_feishi', @@ -930,6 +937,8 @@ window.noname_character_rank={ 'sp_wangshuang', 'yanpu', 'sp_jiangqing', + 'tw_hejin', + 'xuangongzhu', ], bm:[ 'diy_xizhenxihong', @@ -1082,6 +1091,7 @@ window.noname_character_rank={ 'yuejiu', 'xin_sunluban', 'ol_bianfuren', + 'sp_ol_zhanghe', ], c:[ 'xiahoudun', @@ -1234,6 +1244,7 @@ window.noname_character_rank={ 're_nanhualaoxian', 'shen_sunce', 'sunhanhua', + 'caojinyu', 'key_yuri', 'key_yuzuru', 'sp_key_kanade', @@ -1798,6 +1809,13 @@ window.noname_character_rank={ 'ol_yangyi', 'sp_cuiyan', 'sp_zhangchangpu', + 'ol_dongzhao', + 'xin_yufan', + 'xuangongzhu', + 'xinchang', + 'tw_mayunlu', + 'tw_re_caohong', + 'tw_hucheer', ], junk:[ 'sunshao', @@ -1815,6 +1833,7 @@ window.noname_character_rank={ 'junk_simayi', 'wolongfengchu', 're_chenqun', + 'sp_ol_zhanghe', 'key_youta', ], } diff --git a/character/refresh.js b/character/refresh.js index 75f51191d..a5cd60c2d 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -11,7 +11,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ refresh_shan:['ol_jiangwei','re_caiwenji','ol_liushan','re_zhangzhang','re_zuoci','re_sunce','ol_dengai'], refresh_yijiang1:['re_wuguotai','re_gaoshun','re_caozhi','yujin_yujin','re_masu','xin_xusheng','re_fazheng','xin_lingtong','re_zhangchunhua'], refresh_yijiang2:['old_madai','re_wangyi','guanzhang','xin_handang','xin_zhonghui','re_liaohua','re_chengpu','re_caozhang','re_bulianshi','xin_liubiao'], - refresh_yijiang3:['re_jianyong','re_guohuai','re_zhuran','re_panzhangmazhong','re_yufan','re_liru','re_manchong','re_fuhuanghou','re_guanping'], + refresh_yijiang3:['re_jianyong','re_guohuai','re_zhuran','re_panzhangmazhong','xin_yufan','re_liru','re_manchong','re_fuhuanghou','re_guanping'], refresh_yijiang4:['re_sunluban','re_wuyi','re_hanhaoshihuan','re_caozhen','re_zhoucang','re_chenqun','re_caifuren','re_guyong'], refresh_yijiang5:['re_zhangyi','re_quancong','re_caoxiu','re_sunxiu','re_gongsunyuan','re_guotufengji'], }, @@ -41,7 +41,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_gongsunzan:['male','qun',4,['reqiaomeng','reyicong']], re_manchong:['male','wei',3,['rejunxing','yuce']], re_liru:['male','qun',3,['rejuece','remieji','xinfencheng']], - re_yufan:['male','wu',3,['zhiyan','rezongxuan']], + xin_yufan:['male','wu',3,['xinzhiyan','xinzongxuan']], re_bulianshi:['female','wu',3,['reanxu','zhuiyi']], re_hanhaoshihuan:['male','wei',4,['reshenduan','reyonglve']], re_panzhangmazhong:['male','wu',4,['reduodao','reanjian']], @@ -139,6 +139,173 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_xushu:['zhaoyun','sp_zhugeliang'], }, skill:{ + //虞翻 + xinzongxuan:{ + audio:2, + trigger:{player:'loseAfter'}, + filter:function(event,player){ + if(event.type!='discard') return false; + for(var i=0;i0&&!current.hasSkillTag('nogain'); + })) return false; + for(var i=0;i0; + }); + next.set('processAI',function(list){ + var cards=list[0][1].slice(0),player=_status.event.player; + var result=[[],[]]; + if(game.hasPlayer(function(current){ + return current!=player&&get.attitude(player,current)>0&&!current.hasSkillTag('nogain'); + })){ + var max_val=0; + var max_card=false; + for(var i of cards){ + if(get.type2(i,false)=='trick'){ + var val=get.value(i,'raw'); + if(val>max_val){ + max_card=i; + max_val=val; + } + } + } + if(max_card){ + result[0].push(max_card); + cards.remove(max_card); + } + } + if(cards.length){ + var max_val=0; + var max_card=false; + var equip=game.hasPlayer(function(current){ + return current.isDamaged()&&get.recoverEffect(current,player,player)>0; + }) + for(var i of cards){ + var val=get.value(i); + var type=get.type2(i,false); + if(type=='basic') val+=3; + if(type=='equip'&&equip) val+=9; + if(max_val==0||val>max_val){ + max_card=i; + max_val=val; + } + } + if(max_card){ + result[1].push(max_card); + cards.remove(max_card); + } + result[0].addArray(cards); + } + return result; + }) + 'step 1' + if(result.bool){ + var cards=result.moved[1].slice(0); + if(cards.length){ + game.log(player,'将',cards,'置于了牌堆顶'); + while(cards.length) ui.cardPile.insertBefore(cards.pop().fix(),ui.cardPile.firstChild); + } + var list=result.moved[0].filter(function(i){ + return get.type2(i,false)=='trick'; + }); + if(list.length&&game.hasPlayer((current)=>(current!=player))){ + var next=player.chooseButton(['是否将一张锦囊牌交给一名其他角色?',list]).set('ai',function(button){ + return get.value(button.link,'raw'); + }); + if(!result.moved[1].length) next.set('forced',true); + } + else event.finish(); + } + else event.finish(); + 'step 2' + if(result.bool){ + var card=result.links[0]; + event.card=card; + player.chooseTarget(lib.filter.notMe,true,'令一名其他角色获得'+get.translation(card)).set('card',card).set('ai',function(target){ + var card=_status.event.card,player=_status.event.player; + var eff=get.value(card,target)*get.attitude(player,target); + if(target.hasSkill('nogain')) eff/=10; + return eff; + }); + } + else event.finish(); + 'step 3' + if(result.bool){ + var target=result.targets[0]; + player.line(target,'green'); + target.gain(card,'gain2'); + } + }, + }, + xinzhiyan:{ + audio:'zhiyan', + audioname:['gexuan','re_yufan','xin_yufan'], + trigger:{player:'phaseJieshuBegin'}, + direct:true, + content:function(){ + "step 0" + player.chooseTarget(get.prompt('zhiyan'),'令一名角色摸一张牌并展示之。若为基本牌则你摸一张牌;若为装备牌,则其回复1点体力').set('ai',function(target){ + return get.attitude(_status.event.player,target)*(target.isDamaged()?2:1); + }); + "step 1" + if(result.bool){ + event.target=result.targets[0]; + player.logSkill('zhiyan',result.targets); + event.bool=false; + event.target.draw('visible'); + } + else{ + event.finish(); + } + "step 2" + var card=result[0]; + event.card=card; + if(get.type(card)=='basic') player.draw(); + "step 3" + if(get.type(card)=='equip'){ + if(target.getCards('h').contains(card)&&target.hasUseTarget(card)){ + event.target.chooseUseTarget(card,true,'nopopup'); + game.delay(); + } + event.bool=true; + } + "step 4" + if(event.bool) target.recover(); + }, + ai:{ + expose:0.2, + threaten:1.2 + } + }, //新主公技 xinhuangtian:{ unique:true, @@ -3044,38 +3211,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }, - rezongxuan:{ - inherit:'zongxuan', - group:'rezongxuan_place', - }, - rezongxuan_place:{ - audio:'rezongxuan', - enable:'phaseUse', - usable:1, - content:function(){ - 'step 0' - player.draw(); - 'step 1' - player.chooseCard('he',true,'将一张牌置于牌堆顶'); - 'step 2' - if(result&&result.cards){ - event.card=result.cards[0]; - player.lose(result.cards,ui.cardPile,'insert'); - game.log(player,'将',(get.position(event.card)=='h'?'一张牌':event.card),'置于牌堆顶'); - game.broadcastAll(function(player){ - var cardx=ui.create.card(); - cardx.classList.add('infohidden'); - cardx.classList.add('infoflip'); - player.$throw(cardx,1000,'nobroadcast'); - },player); - } - else event.finish(); - }, - ai:{ - order:1, - result:{player:1}, - }, - }, decadelihuo:{ trigger:{player:'useCard1'}, filter:function(event,player){ @@ -9949,7 +10084,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return lib.skill.rezaiqi.count()>0; }, trigger:{ - player:'phaseDiscardEnd' + player:'phaseJieshuBegin' }, content:function(){ 'step 0' @@ -9984,36 +10119,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ game.delay(); if(targets.length) event.goto(2); }, - group:'rezaiqi_count', - }, - rezaiqi_count:{ - trigger:{ - global:["loseEnd","cardsDiscardEnd"], - player:'phaseAfter', - }, - silent:true, - forced:true, - popup:false, - filter:function (event,player,name){ - if(name=='phaseAfter') return true; - if(_status.currentPhase!=player) return false; - var evt=event.getParent(); - if(evt&&evt.name=='useCard'&&evt.card&&['equip','delay'].contains(get.type(evt.card))) return false; - var cards=event.cards; - for(var i=0;i0; + }, + content:function(){ + 'step 0' + var num=Math.min(5-player.getStorage('spolzhouxuan').length,player.countCards('h')); + player.chooseCard('h',get.prompt('spolzhouxuan'),[1,num],'将任意张牌置于武将牌上作为“旋”').set('ai',function(card){ + if(ui.selected.cards.length>=player.needsToDiscard()) return 0; + return 100-get.useful(card); + }); + 'step 1' + if(result.bool){ + var cards=result.cards; + player.logSkill('spolzhouxuan'); + player.markAuto('spolzhouxuan',cards); + player.lose(cards,ui.special,'toStorage'); + game.log(player,'将',cards,'置于了武将牌上'); + } + }, + marktext:'旋', + intro:{ + content:'cards', + onunmark:'throw', + }, + group:['spolzhouxuan_use','spolzhouxuan_discard'], + subSkill:{ + use:{ + audio:'spolzhouxuan', + trigger:{player:'useCard'}, + forced:true, + locked:false, + filter:function(event,player){ + return player.getStorage('spolzhouxuan').length>0; + }, + content:function(){ + 'step 0' + player.chooseButton(['选择移去一张“旋”',player.getStorage('spolzhouxuan')],true); + 'step 1' + if(result.bool){ + var card=result.links[0]; + player.$throw(card,1000); + game.cardsDiscard(card); + var num=player.isMaxHandcard(true)?1:player.getStorage('spolzhouxuan').length-1; + if(num>0) player.draw(num); + player.unmarkAuto('spolzhouxuan',[card]); + game.log(card,'进入了弃牌堆'); + game.delayx(); + } + }, + }, + discard:{ + trigger:{player:'phaseUseEnd'}, + forced:true, + locked:false, + filter:function(event,player){ + return player.getStorage('spolzhouxuan').length>0; + }, + content:function(){ + player.unmarkSkill('spolzhouxuan'); + }, + }, + }, + }, + //董昭 + olxianlve:{ + audio:2, + mode:['identity'], + trigger:{ + global:'phaseZhunbeiBegin', + }, + direct:true, + filter:function(event,player){ + return event.player==game.zhu&&event.player.isZhu; + }, + content:function(){ + 'step 0' + var list=lib.inpile.filter(function(i){ + return get.type2(i)=='trick'; + }).map(function(i){ + return ['锦囊','',i]; + }); + if(!list.length) event.finish(); + else player.chooseButton([get.prompt('olxianlve'),[list,'vcard']]).set('ai',function(button){ + switch(button.link[2]){ + case 'wuxie': return 0.6+Math.random(); + case 'wuzhong': case 'dongzhuxianji':return 0.5+Math.random(); + case 'guohe': case 'zhujinqiyuan': return 0.4+Math.random(); + default: return Math.random(); + } + }); + 'step 1' + if(result.bool){ + var name=result.links[0][2]; + player.logSkill('olxianlve'); + player.storage.olxianlve=name; + player.markSkill('olxianlve'); + game.log(player,'声明了','#g'+get.translation(name)); + } + }, + intro:{content:'已声明【$】'}, + group:'olxianlve_use', + subSkill:{ + use:{ + audio:'olxianlve', + trigger:{global:'useCardAfter'}, + forced:true, + locked:false, + filter:function(event,player){ + return event.player!=player&&event.card.name==player.storage.olxianlve; + }, + content:function(){ + 'step 0' + player.draw(2); + 'step 1' + var cards=result; + if(get.itemtype(cards)!='cards'){ + event.goto(5); + return; + } + var hs=player.getCards('h'); + cards=cards.filter(function(card){ + return hs.contains(card); + }); + if(!cards.length){ + event.goto(5); + return; + } + event.cards=cards; + if(_status.connectMode) game.broadcastAll(function(){_status.noclearcountdown=true}); + event.given_map={}; + event.ai_list=[]; + 'step 2' + player.chooseCardTarget({ + filterCard:function(card){ + return _status.event.cards.contains(card)&&!card.hasGaintag('olxianlve'); + }, + cards:cards, + filterTarget:lib.filter.notMe, + selectCard:[1,cards.length], + prompt:'是否将获得的牌分配给其他角色?', + ai1:function(card){ + if(!ui.selected.cards.length) return 1; + return 0; + }, + ai2:function(target){ + var player=_status.event.player,card=ui.selected.cards[0]; + var val=target.getUseValue(card); + if(target.isPhaseUsing()&&get.type2(card)=='trick') val*=3; + if(val>0) return val*get.attitude(player,target)*2; + return get.value(card,target)*get.attitude(player,target); + }, + }); + 'step 3' + if(result.bool){ + var res=result.cards,target=result.targets[0].playerid; + player.addGaintag(res,'olxianlve'); + cards.removeArray(res); + if(!event.given_map[target]) event.given_map[target]=[]; + event.given_map[target].addArray(res); + if(result.targets[0].isPhaseUsing()&&get.type2(res[0])=='trick') event.ai_list.push(res[0].name); + if(cards.length) event.goto(2); + } + 'step 4' + if(_status.connectMode){ + game.broadcastAll(function(){delete _status.noclearcountdown}); + game.stopCountChoose(); + } + for(var i in event.given_map){ + var source=(_status.connectMode?lib.playerOL:game.playerMap)[i]; + player.line(source,'green'); + source.gain(event.given_map[i],player,'giveAuto'); + } + event.next.sort(function(a,b){ + return lib.sort.seat(a.player,b.player); + }); + 'step 5' + var list=lib.inpile.filter(function(i){ + return get.type2(i)=='trick'; + }).map(function(i){ + return ['锦囊','',i]; + }); + if(!list.length) event.finish(); + else player.chooseButton([get.prompt('olxianlve'),[list,'vcard']]).set('list',event.ai_list).set('ai',function(button){ + if(_status.event.list.contains(button.link[2])) return 2+Math.random(); + switch(button.link[2]){ + case 'wuxie': return 0.6+Math.random(); + case 'wuzhong': case 'dongzhuxianji':return 0.5+Math.random(); + case 'guohe': case 'zhujinqiyuan': return 0.4+Math.random(); + default: return Math.random(); + } + }); + 'step 6' + if(result.bool){ + var name=result.links[0][2]; + player.storage.olxianlve=name; + player.markSkill('olxianlve'); + game.log(player,'声明了','#g'+get.translation(name)); + } + }, + }, + }, + }, + olzaowang:{ + mode:['identity'], + audio:2, + enable:'phaseUse', + limited:true, + skillAnimation:true, + animationColor:'water', + filterTarget:true, + content:function(){ + player.awakenSkill('olzaowang'); + target.gainMaxHp(); + target.recover(); + target.draw(3); + target.addSkill('olzaowang2'); + }, + ai:{ + order:2, + result:{ + target:function(player,target){ + if(player.hasUnknown(2)) return 0; + if(target.identity=='zhong') return 20; + if(target.identity=='zhu') return 10; + if(target.identity=='nei') return 5; + if(!target.hasFriend()) return 5; + return 0; + }, + }, + }, + }, + olzaowang2:{ + charlotte:true, + trigger:{global:'dieBegin'}, + forced:true, + filter:function(event,player){ + return event.player.identity=='zhu'&&(player.identity=='zhong'||player.identity=='mingzhong'); + }, + logTarget:'player', + skillAnimation:true, + animationColor:'orange', + content:function(){ + game.broadcastAll(function(player,target){ + target.identity=player.identity; + if(player.identity=='mingzhong') game.zhong=target; + delete target.isZhu; + player.identity='zhu'; + game.zhu=player; + player.showIdentity(); + target.showIdentity(); + },player,trigger.player); + event.trigger('zhuUpdate'); + }, + mark:true, + marktext:'王', + intro:{content:'造了个王'}, + group:'olzaowang2_kill', + subSkill:{ + kill:{ + trigger:{player:'die'}, + forced:true, + forceDie:true, + skillAnimation:true, + animationColor:'wood', + filter:function(event,player){ + return player.identity=='fan'&&event.source&&(event.source.identity=='zhu'||event.source.identity=='zhong'||event.source.identity=='mingzhong'); + }, + content:function(){ + game.over((game.me.identity=='zhu'||game.me.identity=='zhong'||game.me.identity=='mingzhong')); + }, + }, + }, + }, //冯方女 zhuangshu:{ audio:2, @@ -15477,7 +15757,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ characterReplace:{ caoshuang:['caoshuang','ns_caoshuang'], caoang:['caoang','yj_caoang','tw_caoang'], - caohong:['caohong','tw_caohong'], + caohong:['tw_re_caohong','caohong','tw_caohong'], xiahouba:['xiahouba','tw_xiahouba'], maliang:['maliang','re_maliang','tw_maliang','ol_maliang','old_maliang'], dingfeng:['dingfeng','tw_dingfeng'], @@ -15500,6 +15780,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dengzhi:['ol_dengzhi','dengzhi'], wangrong:['wangrong','ol_wangrong'], zongyu:['sp_zongyu','zongyu'], + ol_dongzhao:['ol_dongzhao','tw_dongzhao'], + mayunlu:['tw_mayunlu','mayunlu'], }, translate:{ "xinfu_lingren":"凌人", @@ -15613,7 +15895,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhanglu:'张鲁', wutugu:'兀突骨', mateng:'马腾', - sp_caiwenji:'SP蔡文姬', + sp_caiwenji:'SP蔡琰', zhugeguo:'诸葛果', lingcao:'凌操', sunru:'孙茹', @@ -16359,6 +16641,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhuangshu_equip:'金梳', zhuangshu_equip_bg:'金', zhuangshu_equip_info:'锁定技。出牌阶段结束时,你将手牌摸至手牌上限(至多摸五张)。当此牌不因交换装备或移动至其他装备区而离开你的装备区后,销毁之。', + ol_dongzhao:'董昭', + olxianlve:'先略', + olxianlve_info:'①主公的回合开始时,你可声明并记录一个锦囊牌的名称并移除先前的记录。②其他角色使用〖先略〗记录过的锦囊牌后,你可摸两张牌并可以分配给任意其他角色,然后你可声明并记录一个锦囊牌的名称并移除先前的记录。', + olzaowang:'造王', + olzaowang2:'造王', + olzaowang_info:'限定技。出牌阶段,你可以令一名角色加1点体力上限,回复1点体力并摸三张牌,且获得如下效果:主公死亡时,若其身份为忠臣,则其和主公交换身份牌;其死亡时,若其身份为反贼且伤害来源的身份为主公或忠臣,则以主忠胜利结束本局游戏。', + sp_ol_zhanghe:'SP张郃', + spolzhouxuan:'周旋', + spolzhouxuan_info:'①弃牌阶段开始时,你可将任意张手牌置于武将牌上,称为“旋”(上限为5)。②当你使用牌时,你将一张“旋”置入弃牌堆并摸一张牌(若你的手牌数不为全场唯一最多则改为摸X张牌,X为“旋”数)。③出牌阶段结束时,你将所有“旋”置入弃牌堆。', sp_tianji:'天极·皇室宗亲', sp_sibi:'四弼·辅国文曲', diff --git a/character/sp2.js b/character/sp2.js index 5db05afab..26ca58ebe 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -4,6 +4,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:'sp2', connect:true, character:{ + caojinyu:['female','wei',3,['yuqi','shanshen','xianjing']], hanmeng:['male','qun',4,['jieliang','quanjiu']], xinping:['male','qun',3,['fuyuan','zhongjie','yongdi']], wanniangongzhu:['female','qun',3,['zhenge','xinghan']], @@ -109,17 +110,175 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_shengun:["puyuan","guanlu","gexuan","xushao"], sp_baigei:['re_panfeng','xingdaorong','caoxing','re_chunyuqiong','xiahoujie'], sp_guandu:["sp_zhanghe","xunchen","sp_shenpei","gaolan","lvkuanglvxiang","chunyuqiong","sp_xuyou","xinping","hanmeng"], - sp_caizijiaren:['re_dongbai','re_sunluyu','huaxin','luyusheng'], - sp_huangjin:['liuhong','zhujun','re_hejin','re_hansui'], - sp_qihuan:['liubian','zhaozhong'], + sp_caizijiaren:['re_dongbai','re_sunluyu','huaxin','luyusheng','re_xunchen','heyan'], + sp_huangjin:['liuhong','zhujun','re_hansui'], + sp_qihuan:['liubian','zhaozhong','re_hejin'], sp_fadong:['ol_dingyuan','wangrong','re_quyi','hanfu'], sp_xuzhou:['re_taoqian','caosong','zhangmiao','qiuliju'], - sp_zhongyuan:['re_hucheer','re_zoushi','caoanmin'], + sp_zhongyuan:['re_hucheer','re_zoushi','caoanmin','re_dongcheng'], sp_binglin:['re_niujin',"sp_mifangfushiren"], - sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','caobuxing','re_maliang','xin_baosanniang','re_xinxianying','dongxie','guozhao','fanyufeng','ruanyu','liangxing','re_dongzhao','re_dongcheng','yangwan','heyan','re_panshu','zhanghu','dufuren','zhouyi','re_nanhualaoxian','lvlingqi','re_kanze','re_xunchen','wanniangongzhu','tongyuan','liuyong','zhangning'], + sp_zhilan:['liuyong','wanniangongzhu','zhanghu'], + sp_fenghuo:['re_nanhualaoxian','tongyuan','zhangning'], + sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','caobuxing','re_maliang','xin_baosanniang','re_xinxianying','dongxie','guozhao','fanyufeng','ruanyu','liangxing','re_dongzhao','yangwan','re_panshu','dufuren','zhouyi','lvlingqi','re_kanze','caojinyu'], } }, skill:{ + //曹金玉 + yuqi:{ + audio:2, + trigger:{global:'damageEnd'}, + init:function(player){ + if(!player.storage.yuqi) player.storage.yuqi=[0,3,1,1]; + }, + getInfo:function(player){ + if(!player.storage.yuqi) player.storage.yuqi=[0,3,1,1]; + return player.storage.yuqi; + }, + onremove:true, + usable:2, + filter:function(event,player){ + var list=lib.skill.yuqi.getInfo(player); + return event.player.isIn()&&get.distance(player,event.player)<=list[0]; + }, + logTarget:'player', + content:function(){ + 'step 0' + event.list=lib.skill.yuqi.getInfo(player); + var cards=get.cards(event.list[1]); + event.cards=cards; + game.cardsGotoOrdering(cards); + var next=player.chooseToMove(true,'隅泣(若对话框显示不完整,可下滑操作)'); + next.set('list',[ + ['牌堆顶的牌',cards], + ['交给'+get.translation(trigger.player)+'(至少一张'+(event.list[2]>1?(',至多'+get.cnNumber(event.list[2])+'张'):'')+')'], + ['交给自己(至多'+get.cnNumber(event.list[3])+'张)'], + ]); + next.set('filterMove',function(from,to,moved){ + var info=lib.skill.yuqi.getInfo(_status.event.player); + if(to==1) return moved[1].length0) card2=cards.shift(); + else card2=cards.pop(); + return [cards,[card2],cards1]; + }); + next.set('filterOk',function(moved){ + return moved[1].length>0; + }); + 'step 1' + if(result.bool){ + var moved=result.moved; + cards.removeArray(moved[1]); + cards.removeArray(moved[2]); + while(cards.length){ + ui.cardPile.insertBefore(cards.pop().fix(),ui.cardPile.firstChild); + } + trigger.player.gain(moved[1],'gain2'); + if(moved[2].length) player.gain(moved[2],'gain2'); + game.updateRoundNumber(); + } + }, + mark:true, + intro:{ + content:function(storage,player){ + var info=lib.skill.yuqi.getInfo(player); + return '
蓝色:'+info[0]+' 红色:'+info[1]+'
绿色:'+info[2]+' 黄色:'+info[3]+'
' + }, + }, + ai:{ + threaten:8.8, + }, + }, + shanshen:{ + audio:2, + trigger:{global:'die'}, + direct:true, + content:function(){ + 'step 0' + event.goon=!player.hasAllHistory('sourceDamage',function(evt){ + return evt.player==trigger.player; + }); + player.chooseControl('蓝色','红色','绿色','黄色','cancel2').set('prompt',get.prompt('shanshen')).set('prompt2','令〖隅泣〗中的一个数字+2'+(event.goon?'并回复1点体力':'')).set('ai',function(){ + var player=_status.event.player,info=lib.skill.yuqi.getInfo(player); + if(info[0]info[0]; + })) return 0; + return 2; + }); + 'step 1' + if(result.control!='cancel2'){ + player.logSkill('shanshen',trigger.player); + var list=lib.skill.yuqi.getInfo(player); + list[result.index]=Math.min(5,list[result.index]+2); + game.log(player,'将',result.control,'数字改为','#y'+list[result.index]) + player.markSkill('yuqi'); + if(event.goon) player.recover(); + } + }, + }, + xianjing:{ + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + direct:true, + content:function(){ + 'step 0' + player.chooseControl('蓝色','红色','绿色','黄色','cancel2').set('prompt',get.prompt('xianjing')).set('prompt2','令〖隅泣〗中的一个数字+1').set('ai',function(){ + var player=_status.event.player,info=lib.skill.yuqi.getInfo(player); + if(info[0]info[0]; + })) return 0; + return 2; + }); + 'step 1' + if(result.control!='cancel2'){ + player.logSkill('xianjing'); + var list=lib.skill.yuqi.getInfo(player); + list[result.index]=Math.min(5,list[result.index]+1); + game.log(player,'将',result.control,'数字改为','#y'+list[result.index]) + player.markSkill('yuqi'); + if(player.isDamaged()) event.finish(); + } + else event.finish(); + 'step 2' + player.chooseControl('蓝色','红色','绿色','黄色','cancel2').set('prompt','是否令〖隅泣〗中的一个数字+1?').set('ai',function(){ + var player=_status.event.player,info=lib.skill.yuqi.getInfo(player); + if(info[0]info[0]; + })) return 0; + return 2; + }); + 'step 3' + if(result.control!='cancel2'){ + var list=lib.skill.yuqi.getInfo(player); + list[result.index]=Math.min(5,list[result.index]+1); + game.log(player,'将',result.control,'数字改为','#y'+list[result.index]) + player.markSkill('yuqi'); + } + }, + }, //韩猛 jieliang:{ trigger:{global:'phaseDrawBegin2'}, @@ -1510,6 +1669,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ filter:function(event,player){ return player.countCards('h')>0; }, + preHidden:true, content:function(){ 'step 0' var hs=player.getCards('h'); @@ -3873,7 +4033,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(player.countCards('e')>trigger.player.countCards('e')) num++; if(num){ player.draw(num); - if(num==3) player.gainMaxHp(); + if(num==3&&player.maxHp<8) player.gainMaxHp(); } else{ player.addMark('liedan',1); @@ -3975,7 +4135,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return 0; }, ai2:function(target){ - return Math.sqrt(5-Math.max(4,target.countCards('h')))*get.attitude(_status.event.player,target); + return Math.sqrt(5-Math.min(4,target.countCards('h')))*get.attitude(_status.event.player,target); }, goon:function(){ if(!game.hasPlayer(function(current){ @@ -11328,6 +11488,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ wanniangongzhu:'刘氏(生卒年不详),河南郡雒阳县(今河南省洛阳市)人,汉灵帝刘宏之女,汉少帝刘辩与汉献帝刘协的姐妹,封万年公主。', xinping:'辛评(?-204年),字仲治,颍川阳翟人,东汉末年人物。曹魏卫尉辛毗之兄。原是韩馥部下,韩馥逃亡后转而辅佐袁绍。袁绍死后,辛评、郭图欲立袁谭为主,与审配等不和。后来曹操破邺,其弟辛毗在城下劝降。审配怒遣手下将辛评全家杀害。', hanmeng:'韩猛,又名韩若、韩荀、韩泣(上荀下大) ,东汉末年袁绍帐下名将,或与《曹瞒传》所言韩莒子为同一人。公元200年,官渡之战爆发。袁绍派遣韩猛劫掠曹操军的西道,被曹军部将曹仁击破于鸡洛山。袁绍又派韩猛前去运送粮车,因为轻敌被曹军部将徐晃、史涣击退。', + caojinyu:'金乡公主,本姓曹氏,名字不详,沛国谯县(今安徽省亳州市)人。魏武帝曹操的女儿,母为杜夫人。适婚的时候,嫁给曹操的养子何晏。高平陵之变,何晏作为大将军曹爽的党羽,遭到太傅司马懿处死。在何晏母亲尹夫人苦苦哀求下,何晏的儿子得以保全。', }, characterTitle:{ wulan:'#b对决限定武将', @@ -11383,6 +11544,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ cuijian:function(player){ return '出牌阶段限一次,你可以选择一名有手牌的其他角色。若其手牌中有【闪】,则其将所有【闪】和防具牌交给你'+(player.hasMark('zhtongyuan_basic')?'':',然后你交给其等量的牌')+'。'+(player.hasMark('zhtongyuan_trick')?'若其手牌中没有【闪】,则你摸两张牌。':''); }, + yuqi:function(player){ + var info=lib.skill.yuqi.getInfo(player); + return '每回合限两次。当有角色受到伤害后,若你至其的距离不大于'+info[0]+',则你可以观看牌堆顶的'+info[1]+'张牌。你将其中至多'+info[2]+'张牌交给受伤角色,然后可以获得剩余牌中的至多'+info[3]+'张牌,并将其余牌以原顺序放回牌堆顶。(所有具有颜色的数字至多为5)'; + }, }, perfectPair:{ }, @@ -11402,7 +11567,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ taoqian:['taoqian','re_taoqian'], sp_liubei:['sp_liubei','jsp_liubei'], dongcheng:['re_dongcheng','dongcheng'], - hucheer:['re_hucheer','hucheer'], + hucheer:['tw_hucheer','re_hucheer','hucheer'], dongbai:['re_dongbai','dongbai'], gexuan:['gexuan','tw_gexuan'], panshu:['panshu','re_panshu'], @@ -11818,7 +11983,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ reyirang_info:'出牌阶段开始时,你可以将所有非基本牌交给一名其他角色。若其体力上限大于你,则你将体力上限调整至与其相同。然后你回复X点体力(X为你以此法交给其的牌数)。', xiahoujie:'夏侯杰', liedan:'裂胆', - liedan_info:'锁定技,其他角色的准备阶段开始时,若X大于0,则你摸X张牌。若X等于3,则你加1点体力上限。若X为0,则你失去1点体力并获得一枚“裂”(X为你的手牌数,体力值,装备区牌数中大于其的数量)。准备阶段,若“裂”数大于4,则你死亡。', + liedan_info:'锁定技,其他角色的准备阶段开始时,若X大于0,则你摸X张牌。若X等于3,则你加1点体力上限(至多加到8)。若X为0,则你失去1点体力并获得一枚“裂”(X为你的手牌数,体力值,装备区牌数中大于其的数量)。准备阶段,若“裂”数大于4,则你死亡。', zhuangdan:'壮胆', zhuangdan_mark:'壮胆', zhuangdan_info:'锁定技,其他角色的回合结束时,若你的手牌数为全场唯一最多,则你令〖裂胆〗失效直到你下回合结束。', @@ -12011,6 +12176,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jieliang_info:'其他角色的摸牌阶段开始时,你可弃置一张牌,令其本阶段的摸牌数和本回合的手牌上限-1。然后当其于本回合的弃牌阶段内因弃置而失去牌后,你可获得其中的一张。', quanjiu:'劝酒', quanjiu_info:'锁定技。①你手牌区中的【酒】的牌名视为【杀】。②你使用对应的实体牌为一张【酒】的非转化【杀】不计入次数限制。', + caojinyu:'曹金玉', + yuqi:'隅泣', + yuqi_info:'每回合限两次。当有角色受到伤害后,若你至其的距离不大于0,则你可以观看牌堆顶的3张牌。你将其中至多1张牌交给受伤角色,然后可以获得剩余牌中的至多1张牌,并将其余牌以原顺序放回牌堆顶。(所有具有颜色的数字至多为5)', + shanshen:'善身', + shanshen_info:'当有角色死亡时,你可令你的〖隅泣〗中的一个具有颜色的数字+2。然后若你未对该角色造成过伤害,则你回复1点体力。', + xianjing:'娴静', + xianjing_info:'准备阶段,你可令你的〖隅泣〗中的一个具有颜色的数字+1。若你的体力值等于体力上限,则你可以重复一次此流程。', sp_whlw:"文和乱武", sp_zlzy:"逐鹿中原", @@ -12028,7 +12200,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_zhongyuan:'中原狼烟', sp_binglin:'兵临城下', sp_yinyu:'隐玉包', - sp_zhilan:'芝兰包', + sp_zhilan:'芝兰玉树', + sp_fenghuo:'烽火连天', sp_decade:'其他新服武将', }, }; diff --git a/character/standard.js b/character/standard.js index 5ca0acd17..d5e8840d0 100755 --- a/character/standard.js +++ b/character/standard.js @@ -83,7 +83,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ daqiao:['xiaoqiao'], zhouyu:['huanggai','xiaoqiao','zhouyi'], sunquan:['zhoutai'], - lvbu:['diaochan'], + lvbu:['diaochan','lvlingqi'], machao:['madai','mayunlu'], zhangliao:['zangba'], ganning:['lingtong','xf_sufei'], diff --git a/character/tw.js b/character/tw.js index c35451a11..bbdcdf5b1 100644 --- a/character/tw.js +++ b/character/tw.js @@ -5,12 +5,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ connect:true, characterSort:{ tw:{ - tw_mobile:['tw_beimihu','nashime','tw_gexuan','tw_dongzhao','jiachong','duosidawang','wuban','yuejiu','tw_fuwan','tw_yujin','tw_zhaoxiang'], + tw_mobile:['tw_beimihu','nashime','tw_gexuan','tw_dongzhao','jiachong','duosidawang','wuban','yuejiu','tw_fuwan','tw_yujin','tw_zhaoxiang','tw_hucheer','tw_hejin','tw_mayunlu','tw_re_caohong'], tw_yijiang:['tw_caoang','tw_caohong','tw_zumao','tw_dingfeng','tw_maliang','tw_xiahouba'], tw_english:['kaisa'], }, }, character:{ + tw_re_caohong:['male','wei',4,['twyuanhu','twjuezhu']], + tw_mayunlu:['female','shu',4,['mashu','twfengpo']], + tw_hejin:['male','qun',4,['twmouzhu','twyanhuo']], + tw_hucheer:['male','qun',4,['twshenxing','twdaoji']], tw_yujin:['male','qun',4,['xinzhenjun']], tw_fuwan:['male','qun',4,['twmoukui']], tw_zhaoxiang:['female','shu',4,['refanghun','twfuhan','twqueshi']], @@ -149,6 +153,406 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + twyuanhu:{ + audio:'yuanhu', + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.hasCard({type:'equip'},'eh'); + }, + filterCard:{type:'equip'}, + filterTarget:function(card,player,target){ + var card=ui.selected.cards[0]; + return target.isEmpty(get.subtype(card)); + }, + discard:false, + lose:false, + prepare:'give', + position:'he', + check:function(card){ + if(get.position(card)=='h') return 9-get.value(card); + return 7-get.value(card); + }, + content:function(){ + 'step 0' + target.equip(cards[0]); + 'step 1' + event.goto(3); + switch(get.subtype(cards[0])){ + case 'equip1': + if(game.hasPlayer(function(current){ + return current!=target&&get.distance(target,current)==1&¤t.countCards('hej')>0; + })){ + player.chooseTarget(true,'弃置一名距离'+get.translation(target)+'为1的角色区域内的一张牌',function(card,player,target){ + var current=_status.event.current; + return current!=target&&get.distance(current,target)==1&¤t.countCards('hej')>0; + }).set('current',target).set('ai',function(target){ + var player=_status.event.player; + return get.effect(target,{name:'guohe_copy'},player,player); + }); + event.goto(2); + } + break; + case 'equip2': + target.draw(); + break; + case 'equip3': + target.recover(); + break; + } + 'step 2' + var target=result.targets[0]; + player.line(target); + player.discardPlayerCard(target,true,'hej'); + 'step 3' + if(target.hp<=player.hp||target.countCards('h')<=player.countCards('h')){ + player.draw(); + player.addTempSkill('twyuanhu_end'); + } + }, + ai:{ + order:10, + result:{ + player:function(player,target){ + if(get.attitude(player,target)==0) return 0; + if(!ui.selected.cards.length) return; + var eff=get.effect(target,ui.selected.cards[0],player,player),sub=get.subtype(ui.selected.cards[0],false); + if(target==player) eff+=4; + else{ + var hp=player.hp,hs=player.countCards('h',(card)=>card!=ui.selected.cards[0]); + var tp=target.hp,ts=target.countCards('h'); + if(sub=='equip2') ts++; + if(tpb-a); + if(list.length) eff+=list[0]; + } + return eff; + }, + target:function(player,target){ + if(!ui.selected.cards.length) return 0; + var sub=get.subtype(ui.selected.cards[0],false); + var eff=get.effect(target,ui.selected.cards[0],player,target); + if(sub=='equip2') eff+=(get.effect(target,{name:'wuzhong'},target,target)/2); + if(target.isDamaged()&&(sub=='equip3'||sub=='equip4')) eff+=get.recoverEffect(target,player,player); + return eff; + }, + }, + }, + subSkill:{ + end:{ + trigger:{player:'phaseJieshuBegin'}, + direct:true, + charlotte:true, + filter:function(event,player){ + return player.hasSkill('twyuanhu')&&player.hasCard({type:'equip'},'eh'); + }, + content:function(){ + 'step 0' + player.chooseCardTarget({ + prompt:get.prompt('twyuanhu'), + prompt2:'将一张装备牌置入一名角色的装备区内。若此牌为:武器牌,你弃置与其距离为1的另一名角色区域的一张牌;防具牌,其摸一张牌;坐骑牌,其回复1点体力。若其的体力值或手牌数不大于你,则你可摸一张牌。', + filterCard:lib.skill.twyuanhu.filterCard, + filterTarget:lib.skill.twyuanhu.filterTarget, + position:'he', + ai1:lib.skill.twyuanhu.check, + ai2:function(target){ + var player=_status.event.player; + return get.effect(target,'twyuanhu',player,player); + }, + }); + 'step 1' + if(result.bool){ + result.skill='twyuanhu'; + player.useResult(result,event); + } + }, + }, + }, + }, + twjuezhu:{ + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + direct:true, + filter:function(event,player){ + return !player.isDisabled('equip3')||!player.isDisabled('equip4'); + }, + skillAnimation:true, + animationColor:'water', + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('twjuezhu'),[1,2],function(card,player,target){ + return !ui.selected.targets.length&&!target.hasSkill('feiying'); + }).set('promptbar','none').set('ai',function(target){ + if(player.hasUnknown()) return false; + return get.attitude(player,target); + }); + 'step 1' + if(result.bool){ + event.target=result.targets[0]; + var list=[]; + if(!player.isDisabled(3)) list.push('equip3'); + if(!player.isDisabled(4)) list.push('equip4'); + if(list.length==1) event._result={control:list[0]}; + else player.chooseControl(list).set('prompt','选择废除一个坐骑栏'); + } + else event.finish(); + 'step 2' + player.logSkill('twjuezhu',target); + player.awakenSkill('twjuezhu'); + player.disableEquip(result.control); + target.disableJudge(); + player.markAuto('twjuezhu_restore',[[target,result.control]]); + player.addSkill('twjuezhu_restore'); + target.addSkill('feiying'); + }, + subSkill:{ + restore:{ + trigger:{global:'die'}, + forced:true, + charlotte:true, + filter:function(event,player){ + for(var i of player.getStorage('twjuezhu_restore')){ + if(i[0]==event.player&&player.isDisabled(i[1])) return true; + } + return false; + }, + content:function(){ + var list=[]; + for(var i of player.getStorage('twjuezhu_restore')){ + if(i[0]==trigger.player&&player.isDisabled(i[1])) list.add(i[1]); + } + for(var i of list) player.enableEquip(i); + }, + }, + }, + derivation:'feiying', + }, + twfengpo:{ + audio:'fengpo', + trigger:{player:'useCardToPlayered'}, + logTarget:'target', + filter:function(event,player){ + return (event.card.name=='sha'||event.card.name=='juedou')&&event.targets.length==1&&event.target.countCards('h')>0; + }, + onremove:true, + content:function(){ + 'step 0' + event.target=trigger.target; + player.viewHandcards(trigger.target); + 'step 1' + var num=target.countCards('h',player.storage.twfengpo?{color:'red'}:{suit:'diamond'}); + if(!num){ + event.finish(); + return; + } + event.num=num; + player.chooseControl().set('choiceList',[ + '摸'+num+'张牌', + '令'+get.translation(trigger.card)+'的伤害值基数+'+num, + ]); + 'step 2' + if(result.index==0) player.draw(num); + else trigger.getParent().baseDamage+=num; + }, + group:'twfengpo_kill', + subSkill:{ + kill:{ + trigger:{source:'die'}, + forced:true, + filter:(event,player)=>!player.storage.twfengpo, + skillAnimation:true, + animationColor:'fire', + content:function(){ + player.storage.twfengpo=true; + }, + }, + }, + }, + twmouzhu:{ + audio:'mouzhu', + enable:'phaseUse', + usable:1, + filterTarget:lib.filter.notMe, + contentBefore:function(){ + var target=targets[0],evt=event.getParent(); + evt._target=target; + var list=game.filterPlayer(function(current){ + return current!=player&¤t!=target&¤t.hp<=target.hp; + }); + if(!list.length){ + player.loseHp(); + evt.finish(); + } + else{ + evt.targets=list.sortBySeat(); + player.line(list); + } + }, + content:function(){ + 'step 0' + target.chooseCard('he','是否交给'+get.translation(player)+'一张牌?').set('ai',function(card){ + if(_status.event.goon) return 7-get.value(card); + return 0; + }).set('goon',get.attitude(target,player)>0||Math.random()0) return 'sha'; + if(get.effect(target,{name:'juedou'},player,player)>0) return 'juedou'; + return 'sha'; + }); + else if(bool1) event._result={control:'sha'}; + else if(bool2) event._result={control:'juedou'}; + else event.finish(); + } + 'step 1' + if(result.control&&lib.card[result.control]) target.useCard({ + name:result.control, + isCard:true, + },false,player).baseDamage=num; + }, + }, + twyanhuo:{ + audio:'yanhuo', + trigger:{player:'die'}, + direct:true, + forceDie:true, + skillAnimation:true, + animationColor:'thunder', + filter:function(event,player){ + return player.countCards('he')>0&&game.hasPlayer(function(current){ + return current!=player&¤t.countCards('h')>0; + }); + }, + content:function(){ + 'step 0' + var num=player.countCards('he'),str=get.cnNumber(num); + event.num1=num; + event.num2=1; + var list=['令一名其他角色弃置'+str+'张牌']; + if(num>1){ + list.push('令至多'+str+'名其他角色各弃置一张牌'); + } + player.chooseControl('cancel2').set('choiceList',list).set('prompt',get.prompt('twyanhuo')).set('forceDie',true); + 'step 1' + if(result.control!='cancel2'){ + if(result.index==0){ + event.num2=event.num1; + event.num1=1; + } + player.chooseTarget([1,event.num1],true,'请选择【延祸】的目标',function(card,player,target){ + return target!=player&&target.countCards('he')>0; + }).set('forceDie',true).set('ai',function(target){ + return -get.attitude(_status.event.player,target) + }); + } + else event.finish(); + 'step 2' + if(result.bool){ + var targets=result.targets.sortBySeat(); + player.logSkill('twyanhuo',targets); + for(var i of targets) i.chooseToDiscard(true,'he',event.num2); + } + }, + }, + twshenxing:{ + mod:{ + globalFrom:function(player,target,distance){ + var es=player.getCards('e',function(card){ + return !ui.selected.cards.contains(card); + }); + for(var i of es){ + var type=get.subtype(i); + if(type=='equip3'||type=='equip4'||type=='equip6') return distance; + } + return distance-1; + }, + maxHandcard:function(player,distance){ + var es=player.getCards('e',function(card){ + return !ui.selected.cards.contains(card); + }); + for(var i of es){ + var type=get.subtype(i); + if(type=='equip3'||type=='equip4'||type=='equip6') return distance; + } + return distance+1; + }, + }, + }, + twdaoji:{ + audio:2, + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.hasCard(lib.skill.twdaoji.filterCard,'he'); + }, + filterCard:function(card){ + return get.type(card)!='basic'; + }, + position:'he', + filterTarget:function(card,player,target){ + return target!=player&&player.inRange(target)&&target.hasCard((card)=>lib.filter.canBeGained(card,target,player),'he'); + }, + check:function(card){ + return 8-get.value(card); + }, + content:function(){ + 'step 0' + player.gainPlayerCard(target,'he',true); + 'step 1' + if(result.bool&&result.cards&&result.cards.length==1){ + var card=result.cards[0]; + if(player.getCards('h').contains(card)){ + var type=get.type(card); + if(type=='basic') player.draw(); + else if(type=='equip'){ + if(player.hasUseTarget(card)) player.chooseUseTarget(card,'nopopup',true); + target.damage('nocard'); + } + } + } + }, + ai:{ + order:6, + result:{ + target:function(player,target){ + var eff=get.effect(target,{name:'shunshou_copy2'},player,target); + if(target.countCards('e')>0) eff+=get.damageEffect(target,player,target); + return eff; + }, + }, + }, + }, xinzhenjun:{ audio:2, trigger:{ @@ -799,7 +1203,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 0' var suit=get.suit(trigger.card); var num=trigger.target.countCards('h','shan'); - var next=trigger.target.chooseToDiscard('弃置一张牌,或不能响应'+get.translation(trigger.card)).set('ai','he',function(card){ + var next=trigger.target.chooseToDiscard('弃置一张牌,或不能响应'+get.translation(trigger.card),'he').set('ai',function(card){ var num=_status.event.num; if(num==0) return 0; if(card.name=='shan') return num>1?2:0; @@ -1645,6 +2049,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, }, + dynamicTranslate:{ + twfengpo:function(player){ + if(player.storage.twfengpo) return '当你使用【杀】或【决斗】指定唯一目标后,你可观看目标角色的手牌并选择一项:⒈摸X张牌。⒉令此牌的伤害值基数+X(X为其手牌中的红色牌数)。'; + return '①当你使用【杀】或【决斗】指定唯一目标后,你可观看目标角色的手牌并选择一项:⒈摸X张牌。⒉令此牌的伤害值基数+X(X为其手牌中的♦数)。②当你杀死一名角色后,你将〖凤魄①〗中的“♦数”改为“红色牌数”。'; + }, + }, translate:{ tw_beimihu:'TW卑弥呼', nashime:'难升米', @@ -1731,6 +2141,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){ tw_yujin:'SP于禁', xinzhenjun:'镇军', xinzhenjun_info:'出牌阶段开始时,你可以将一张牌交给一名其他角色,令其选择是否使用一张不为黑色的【杀】。若其选择是,则你于此【杀】结算完成后摸1+X张牌(X为此【杀】造成的伤害总点数)。若其选择否,则你对其或其攻击范围内的一名其他角色造成1点伤害。', + tw_hucheer:'TW胡车儿', + twshenxing:'神行', + twshenxing_info:'锁定技。若你的装备区内没有坐骑牌,则你至其他角色的距离-1且手牌上限+1。', + twdaoji:'盗戟', + twdaoji_info:'出牌阶段限一次,你可以弃置一张非基本牌并选择一名攻击范围内的角色,获得其一张牌。若你以此法获得的牌为:基本牌,你摸一张牌;装备牌,你使用此牌并对其造成1点伤害。', + tw_hejin:'TW何进', + twmouzhu:'谋诛', + twmouzhu_info:'出牌阶段限一次,你可以选择一名其他角色A。你令除A外所有体力值小于等于A的其他角色依次选择是否交给你一张牌。若你以此法获得的牌数X:等于0,你和所有进行选择的角色依次失去1点体力。大于0,你令A选择视为对你使用一张伤害值基数为X的【杀】或【决斗】。', + twyanhuo:'延祸', + twyanhuo_info:'当你死亡时,你可以选择一项:①令一名其他角色弃置X张牌。②令X名其他角色依次弃置一张牌。(X为你的牌数)', + tw_mayunlu:'TW马云禄', + twfengpo:'凤魄', + twfengpo_info:'①当你使用【杀】或【决斗】指定唯一目标后,你可观看目标角色的手牌并选择一项:⒈摸X张牌。⒉令此牌的伤害值基数+X(X为其手牌中的♦数)。②当你杀死一名角色后,你将〖凤魄①〗中的“♦数”改为“红色牌数”。', + tw_re_caohong:'TW手杀曹洪', + tw_re_caohong_ab:'曹洪', + twyuanhu:'援护', + twyuanhu_info:'出牌阶段限一次。你可将一张装备牌置入一名角色的装备区内。若此牌为:武器牌,你弃置与其距离为1的另一名角色区域的一张牌;防具牌,其摸一张牌;坐骑牌,其回复1点体力。若其的体力值或手牌数不大于你,则你可摸一张牌,且可以于本回合的结束阶段再发动一次〖援护〗。', + twjuezhu:'决助', + twjuezhu_info:'限定技。准备阶段,你可废除一个坐骑栏,令一名角色获得〖飞影〗并废除判定区。该角色死亡后,你恢复以此法废除的装备栏。', tw_mobile:'移动版', tw_yijiang:'一将成名TW', tw_english:'英文版', diff --git a/character/yijiang.js b/character/yijiang.js index e2a83fb17..83cd09831 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -10169,7 +10169,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "step 2" var card=result[0]; if(get.type(card)=='equip'){ - if(!event.target.isDisabled(get.subtype(card))){ + if(target.getCards('h').contains(card)&&target.hasUseTarget(card)){ event.target.chooseUseTarget(card,true,'nopopup'); game.delay(); } @@ -12192,7 +12192,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ guohuai:['guohuai','re_guohuai','xin_guohuai','ol_guohuai'], jianyong:['re_jianyong','xin_jianyong','jianyong'], panzhangmazhong:['xin_panzhangmazhong','re_panzhangmazhong','panzhangmazhong'], - yufan:['re_yufan','yufan'], + yufan:['xin_yufan','re_yufan','yufan'], zhuran:['re_zhuran','xin_zhuran','zhuran','old_zhuran'], liru:['re_liru','xin_liru','liru'], fuhuanghou:['re_fuhuanghou','xin_fuhuanghou','fuhuanghou','old_fuhuanghou'], diff --git a/character/yingbian.js b/character/yingbian.js index a32a3ceaf..3cad04ff9 100644 --- a/character/yingbian.js +++ b/character/yingbian.js @@ -4,6 +4,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:'yingbian', connect:true, character:{ + xuangongzhu:['female','jin',3,['gaoling','qimei','ybzhuiji'],['hiddenSkill']], + xinchang:['male','jin',3,['canmou','congjian']], yangzhi:['female','jin',3,['wanyi','maihuo']], yangyan:['female','jin',3,['xuanbei','xianwan']], ol_huaxin:['male','wei',3,['caozhao','olxibing']], @@ -27,12 +29,218 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yingbian:{ yingbian_pack1:['jin_simayi','jin_zhangchunhua','ol_lisu','simazhou','cheliji','ol_huaxin'], yingbian_pack2:['jin_simashi','jin_xiahouhui','zhanghuyuechen','shibao','jin_yanghuiyu'], - yingbian_pack3:['jin_simazhao','jin_wangyuanji','duyu','weiguan'], - yingbian_pack4:['zhongyan'], + yingbian_pack3:['jin_simazhao','jin_wangyuanji','duyu','weiguan','xuangongzhu'], + yingbian_pack4:['zhongyan','xinchang'], yingbian_pack5:['yangyan','yangzhi'], }, }, skill:{ + gaoling:{ + audio:2, + trigger:{player:'showCharacterAfter'}, + hiddenSkill:true, + filter:function(event,player){ + return event.toShow.contains('xuangongzhu')&&player!=_status.currentPhase&&game.hasPlayer(function(current){ + return current.isDamaged(); + }); + }, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('gaoling'),'令一名角色回复1点体力',function(card,player,target){ + return target.isDamaged(); + }).set('ai',function(target){ + var player=_status.event.player; + return get.recoverEffect(target,player,player); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('gaoling',target); + target.recover(); + } + }, + }, + qimei:{ + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('qimei'),'选择一名其他角色并获得“齐眉”效果',lib.filter.notMe).set('',function(target){ + var player=_status.event.player; + return get.attitude(player,target)/(Math.abs(player.countCards('h')+2-target.countCards('h'))+1) + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('qimei',target); + player.storage.qimei_draw=target; + player.addTempSkill('qimei_draw',{player:'phaseBegin'}); + game.delayx(); + } + }, + subSkill:{ + draw:{ + audio:'qimei', + charlotte:true, + forced:true, + trigger:{global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','loseAfter','gainAfter']}, + logTarget:function(event,player){ + return player.storage.qimei_draw; + }, + usable:1, + filter:function(event,player){ + var target=player.storage.qimei_draw; + if(!target||!target.isIn()) return false; + if(event.name!='gain'||(event.player!=player&&event.player!=target)){ + var evt1=event.getl(player); + if(!evt1||!evt1.hs||!evt1.hs.length){ + var evt2=event.getl(target); + if(!evt2||!evt2.hs||!evt2.hs.length) return false; + } + } + return player.countCards('h')==target.countCards('h'); + }, + content:function(){ + if(trigger.delay===false) game.delayx(); + player.storage.qimei_draw.draw(); + }, + group:'qimei_hp', + onremove:true, + mark:'character', + intro:{content:'已和$组成齐眉组合'}, + }, + hp:{ + audio:'qimei', + trigger:{global:'changeHp'}, + charlotte:true, + forced:true, + logTarget:function(event,player){ + return player.storage.qimei_draw; + }, + usable:1, + filter:function(event,player){ + var target=player.storage.qimei_draw; + if(!target||!target.isIn()) return false; + if(player!=event.player&&target!=event.player) return false; + return player.hp==target.hp; + }, + content:function(){ + game.delayx(); + player.storage.qimei_draw.draw(); + }, + }, + }, + }, + ybzhuiji:{ + audio:2, + trigger:{player:'phaseUseBegin'}, + direct:true, + content:function(){ + 'step 0' + var list=['摸两张牌,并于出牌阶段结束时失去1点体力']; + if(player.isDamaged()) list.push('回复1点体力,并于出牌阶段结束时弃置两张牌'); + player.chooseControl('cancel2').set('choiceList',list).set('prompt',get.prompt('ybzhuiji')).set('ai',function(){ + var player=_status.event.player; + if(player.isDamaged()&&player.countCards('h','tao')0; + }, + content:function(){ + trigger.targets.push(player); + game.log(player,'也成为了',trigger.card,'的目标'); + var next=game.createEvent('congjian_draw',false); + next.player=player; + event.next.remove(next); + trigger.getParent().after.push(next); + next.setContent(function(){ + if(player.hasHistory('damage',function(evt){ + return evt.card==event.parent.card; + })) player.draw(2); + }); + }, + }, wanyi:{ audio:2, enable:'phaseUse', @@ -612,7 +820,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ hiddenSkill:true, filter:function(event,player){ var target=_status.currentPhase; - return target&&target!=player&&target.countGainableCards(player,'he')>0; + return event.toShow.contains('jin_simayi')&&target&&target!=player&&target.countGainableCards(player,'he')>0; }, direct:true, content:function(){ @@ -2543,6 +2751,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhongyan:' 钟琰 (?—?年)颍川人,王浑之妻。生卒年不详,约魏末晋初间前后在世。王浑的妻子钟琰,是颍川人,为魏太傅钟繇的曾孙女,父亲钟徽,为黄门郎。她平时广泛阅读各种书籍,因此几岁的时候就能撰写文章。她聪慧弘雅,善于啸咏,她的礼仪法度,为中表所推崇,她写有文集五卷。', yangyan:'杨艳(238年-274年8月25日),字琼芝,弘农郡华阴县(今陕西省华阴市)人,晋武帝司马炎第一任皇后,曹魏通事郎杨炳之女。自幼父母双亡,为舅舅赵俊所养,跟随继母段氏生活。聪明贤慧,善于书法,天生丽质,娴熟女红,嫁给了世子司马炎。泰始元年(265年),晋武帝即位,建立西晋。泰始二年(266年),杨艳受册为皇后,深得晋武帝宠幸,生下三子三女,包括晋惠帝司马衷。泰始十年(274年),去世,时年三十七,陪葬于峻阳陵,谥号武元皇后。', yangzhi:'杨芷(259年-292年3月6日),字季兰,小字男胤,弘农郡华阴县(今陕西省华阴市)人,晋武帝司马炎第二任皇后,东汉太尉杨震幼子杨奉后裔,东汉末年东莱太守、蓩亭侯杨众曾孙女,西晋太傅杨骏与嫡妻庞氏之女,武元皇后杨艳堂妹。咸宁二年(276年),立为皇后,史称“婉嫕有妇德, 美映椒房”,得宠于晋武帝。生渤海殇王,早薨,之后再无生育。其父杨骏擅权引起皇后贾南风忌恨,贾南风联络汝南王司马亮、楚王司马玮发动政变,杀死杨骏,并唆使大臣上书状告杨芷谋反,让晋惠帝司马衷将其贬为庶人,押到金墉城居住。元康二年(292年),杨芷冻饿而死,谥号武悼皇后。', + xinchang:'辛敞(生卒年不详),字泰雍,陇西人氏,是曹魏时代官员。卫尉辛毗之子,辛宪英之弟。', + xuangongzhu:'高陵宣公主(?—?)司马氏,晋宣帝司马懿第二女。司马氏下嫁杜预。其兄弟司马炎登基时,司马氏已经去世。泰始年间(265年—274年)追赠高陵公主。', }, characterTitle:{}, perfectPair:{}, @@ -2704,6 +2914,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ wanyi_info:'每回合每项限一次。出牌阶段,你可以将一张具有应变效果的牌当做【逐近弃远】/【出其不意】/【水淹七军】/【洞烛先机】使用。', maihuo:'埋祸', maihuo_info:'①当你成为其他角色使用【杀】的目标后,若此【杀】不为转化牌且有对应的实体牌且其武将牌上没有“祸”且你是此牌的唯一目标,则你可以令此牌对你无效,并将此【杀】置于其武将牌上,称为“祸”。②一名其他角色的出牌阶段开始时,若其武将牌上有“祸”,则其对你使用此“祸”(有距离限制且计入次数限制)。③当你对有“祸”的其他角色造成伤害后,你移去其“祸”。', + xinchang:'辛敞', + canmou:'参谋', + canmou_info:'一名角色使用普通锦囊牌指定第一个目标时,若其手牌数为全场唯一最多,则你可以为此牌增加一个额外目标。', + congjian:'从鉴', + congjian_info:'一名其他角色成为普通锦囊牌的唯一目标时,若其体力值为全场唯一最多,则你也可以成为此牌的目标。此牌结算结束后,若你受到过渠道为此牌的伤害,则你摸两张牌。', + xuangongzhu:'宣公主', + gaoling:'高陵', + gaoling_info:'隐匿技。当你于回合外明置此武将牌时,你可以令一名角色回复1点体力。', + qimei:'齐眉', + qimei_info:'准备阶段,你可以选择一名其他角色。你获得如下效果直到下回合开始:①每回合限一次,当你或其获得牌/失去手牌后,若你与其手牌数相等,则其摸一张牌。②每回合限一次,当你或其的体力值变化后,若你与其体力值相等,则其摸一张牌。', + ybzhuiji:'追姬', + ybzhuiji_info:'出牌阶段开始时,你可选择一项:①摸两张牌,并于出牌阶段结束时失去1点体力;②回复1点体力,并于出牌阶段结束时弃置两张牌。', yingbian_pack1:'文德武备·理', yingbian_pack2:'文德武备·备', diff --git a/game/asset.js b/game/asset.js index cc1d5e709..2b2a943c3 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'v1.9.112', + 'v1.9.112.1', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -4777,6 +4777,16 @@ window.noname_asset_list=[ 'image/character/sunhanhua.jpg', 'image/character/xinping.jpg', 'image/character/yj_caocao.jpg', + 'image/character/caojinyu.jpg', + 'image/character/ol_dongzhao.jpg', + 'image/character/sp_ol_zhanghe.jpg', + 'image/character/tw_hejin.jpg', + 'image/character/tw_hucheer.jpg', + 'image/character/tw_mayunlu.jpg', + 'image/character/tw_re_caohong.jpg', + 'image/character/xin_yufan.jpg', + 'image/character/xinchang.jpg', + 'image/character/xuangongzhu.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', diff --git a/game/game.js b/game/game.js index d0499d025..a39a06a72 100644 --- a/game/game.js +++ b/game/game.js @@ -10619,6 +10619,7 @@ },event.chooseTime); } if(event.isMine()){ + delete ui.selected.guanxing_button; var list=event.list,filterMove=event.filterMove,filterOk=event.filterOk; _status.imchoosing=true; var event=_status.event; @@ -14941,18 +14942,6 @@ } return null; } - var info=get.info(card,false); - if(!info.nodelay&&event.animate!=false){ - if(event.delayx!==false){ - if(event.waitingForTransition){ - _status.waitingForTransition=event.waitingForTransition; - game.pause(); - } - else{ - game.delayx(); - } - } - } "step 4" if(event.all_excluded) return; if(!event.triggeredTargets1) event.triggeredTargets1=[]; @@ -14994,6 +14983,19 @@ event.redo(); } "step 6" + var info=get.info(card,false); + if(!info.nodelay&&event.animate!=false){ + if(event.delayx!==false){ + if(event.waitingForTransition){ + _status.waitingForTransition=event.waitingForTransition; + game.pause(); + } + else{ + game.delayx(); + } + } + } + "step 7" if(event.all_excluded) return; if(!event.triggeredTargets3) event.triggeredTargets3=[]; var target=event.getTriggerTarget(targets,event.triggeredTargets3); @@ -15013,7 +15015,7 @@ if(event.forceDie) next.forceDie=true; event.redo(); } - "step 7" + "step 8" if(event.all_excluded) return; if(!event.triggeredTargets4) event.triggeredTargets4=[]; var target=event.getTriggerTarget(targets,event.triggeredTargets4); @@ -15036,7 +15038,7 @@ } event.redo(); } - "step 8" + "step 9" var info=get.info(card,false); if(info.contentBefore){ var next=game.createEvent(card.name+'ContentBefore'); @@ -15058,7 +15060,7 @@ next.type='precard'; if(event.forceDie) next.forceDie=true; } - "step 9" + "step 10" if(event.all_excluded) return; var info=get.info(card,false); if(num==0&&targets.length>1){ @@ -15122,13 +15124,13 @@ game.delayx(0.5); } } - "step 10" + "step 11" if(event.all_excluded) return; if(!get.info(event.card,false).multitarget&&num四季映姬到阴曹地府
——阴(映)到家了!', //孟婆: "boss_mengpo":"孟婆", "boss_shiyou":"拾忧", diff --git a/mode/guozhan.js b/mode/guozhan.js index 4b5baa0ce..3aedc0baf 100644 --- a/mode/guozhan.js +++ b/mode/guozhan.js @@ -361,7 +361,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ guozhan_double:['gz_tangzi','gz_liuqi','gz_mengda','gz_mifangfushiren','gz_zhanglu','gz_shixie','gz_xuyou','gz_xiahouba','gz_panjun','gz_xf_sufei','gz_wenqin','gz_pengyang'], guozhan_yexinjia:['gz_zhonghui','gz_simazhao','gz_gongsunyuan','gz_sunchen'], guozhan_zongheng:['gz_huaxin','gz_luyusheng','gz_zongyu','gz_miheng','gz_fengxi','gz_dengzhi','gz_re_xunchen'], - guozhan_others:["gz_lingcao","gz_lifeng","gz_beimihu","gz_jianggan","gz_key_ushio","gz_sp_duyu","gz_re_nanhualaoxian","gz_zhouyi"], + guozhan_others:["gz_lingcao","gz_lifeng","gz_beimihu","gz_jianggan","gz_key_ushio","gz_sp_duyu","gz_re_nanhualaoxian","gz_zhouyi","gz_lvlingqi"], } }, characterPack:{ @@ -515,6 +515,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gz_re_nanhualaoxian:['male','qun',4,['gzgongxiu','gzjinghe']], gz_zhouyi:['female','wu',3,['gzzhukou','gzduannian','gzlianyou']], gz_re_xunchen:['male','qun',3,['gzfenglve','gzanyong']], + gz_lvlingqi:['female','qun',4,['guowu','gzshenwei','gzzhuangrong']], gz_cuimao:['male','wei',3,['gzzhengbi','gzfengying'],[]], gz_yujin:['male','wei',4,['gzjieyue'],['gzskin']], @@ -544,6 +545,42 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } }, skill:{ + //吕玲绮 + gzshenwei:{ + audio:'llqshenwei', + mainSkill:true, + init:function(player){ + if(player.checkMainSkill('gzshenwei')){ + player.removeMaxHp(); + } + }, + trigger:{player:'phaseDrawBegin2'}, + forced:true, + filter:(event)=>!event.numFixed, + preHidden:true, + content:function(){ + trigger.num+=2; + }, + mod:{ + maxHandcard:(player,num)=>num+2, + }, + }, + gzzhuangrong:{ + audio:'zhuangrong', + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return !player.hasSkill('wushuang')&&player.hasCard(function(card){ + return get.type(card,player)=='trick'; + },'h'); + }, + filterCard:function(card,player){ + return get.type(card,player)=='trick'; + }, + content:function(){ + player.addTempSkill('wushuang','phaseUseEnd'); + }, + }, //荀谌 gzfenglve:{ audio:'refenglve', @@ -11068,6 +11105,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ pengyang:'彭羕', sunchen:'孙綝', gz_dengzhi:'邓芝', + gzshenwei:'神威', + gzshenwei_info:'主将技,此武将牌的阴阳鱼个数减0.5。摸牌阶段,你令额定摸牌数+2。你的手牌上限+2。', + gzzhuangrong:'妆戎', + gzzhuangrong_info:'出牌阶段限一次。你可弃置一张锦囊牌并获得〖无双〗至出牌阶段结束。', gzfenglve:'锋略', gzfenglve_info:'出牌阶段限一次,你可以和一名其他角色进行拼点。若你赢,其将区域内的两张牌交给你;若你输,你交给其一张牌。', gzfenglve_zongheng:'锋略·纵横', diff --git a/mode/identity.js b/mode/identity.js index 310944538..51c3f2359 100644 --- a/mode/identity.js +++ b/mode/identity.js @@ -2474,7 +2474,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ this.ai.shown=1; this.setIdentity(); if(this.special_identity){ - this.node.identity.firstChild.innerHTML=get.translation(game.players[i].special_identity+'_bg'); + this.node.identity.firstChild.innerHTML=get.translation(this.special_identity+'_bg'); } if(this.identity=='zhu'){ this.isZhu=true;