diff --git a/card/yongjian.js b/card/yongjian.js index d74361f41..b0b0035bf 100644 --- a/card/yongjian.js +++ b/card/yongjian.js @@ -348,6 +348,12 @@ game.import('card',function(lib,game,ui,get,ai,_status){ forced:true, equipSkill:true, filter:function(event,player){ + if(player.hasSkillTag('unequip2')) return false; + if(event.player.hasSkillTag('unequip',false,{ + name:event.card?event.card.name:null, + target:player, + card:event.card + })) return false; return event.card.name=='sha'&&player.hasSex('male'); }, content:function(){ @@ -373,7 +379,15 @@ game.import('card',function(lib,game,ui,get,ai,_status){ forced:true, trigger:{player:['damageBegin3','loseHpBegin']}, filter:function(event,player){ - if(event.name=='damage') return event.card&&get.type2(event.card)=='trick'; + if(player.hasSkillTag('unequip2')) return false; + if(event.name=='damage'){ + if(event.source&&event.source.hasSkillTag('unequip',false,{ + name:event.card?event.card.name:null, + target:player, + card:event.card + })) return false; + return event.card&&get.type2(event.card)=='trick'; + } return event.type=='du'; }, content:function(){ diff --git a/character/extra.js b/character/extra.js index be1b58ddf..19114661b 100755 --- a/character/extra.js +++ b/character/extra.js @@ -353,6 +353,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ logTarget:'target', content:function(){ trigger.directHit.add(trigger.target); + if(player.getHistory('gain',function(evt){ + return evt.getParent(2).name=='scfuhai'; + }).length<2) player.draw(); }, group:['scfuhai_die'], ai:{ @@ -447,13 +450,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ tianzuo:{ audio:2, trigger:{ - global:'gameStart', + global:'phaseBefore', player:'enterGame', }, forced:true, locked:false, filter:function(event,player){ - return !lib.inpile.contains('qizhengxiangsheng'); + return (event.name!='phase'||game.phaseNumber==0)&&!lib.inpile.contains('qizhengxiangsheng'); }, content:function(){ game.addGlobalSkill('tianzuo_global'); @@ -4864,7 +4867,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yingba:'英霸', yingba_info:'①出牌阶段限一次,你可令一名体力上限大于1的其他角色减少1点体力上限并获得“平定”标记,然后你减少1点体力上限。②你对拥有“平定”标记的角色使用牌没有距离限制。③拥有“平定”标记的角色的手牌上限+X(X为其“平定”数)。', scfuhai:'覆海', - scfuhai_info:'锁定技。①当你使用牌指定目标后,若目标角色有“平定”标记,则其不可响应此牌。②拥有“平定”标记的角色死亡时,你增加X点体力上限并摸X张牌。(X为其拥有的“平定”标记数)。', + scfuhai_info:'锁定技。①当你使用牌指定目标后,若目标角色有“平定”标记,则其不可响应此牌。若你本回合内以此法获得的牌数小于2,则你摸一张牌。②拥有“平定”标记的角色死亡时,你增加X点体力上限并摸X张牌。(X为其拥有的“平定”标记数)。', pinghe:'冯河', pinghe_info:'锁定技。①你的手牌上限基数等于你已损失的体力值。②当你受到其他角色造成的伤害时,若你有牌且你的体力上限大于1,则你防止此伤害,减一点体力上限并将一张手牌交给一名其他角色。然后若你拥有〖英霸〗,则伤害来源获得一个“平定”标记。', diff --git a/character/mobile.js b/character/mobile.js index 70b09fe5c..fe0d76fc2 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -7,12 +7,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ characterSort:{ mobile:{ mobile_default:["miheng","taoqian","lingcao","sunru","lifeng","zhuling","liuye","zhaotongzhaoguang","majun","simazhao","wangyuanji","pangdegong","shenpei","hujinding","zhangyì","jiakui","yangbiao","chendeng","dongcheng","yangyi","dengzhi","zhengxuan","sp_sufei","furong","dingyuan","simashi","yanghuiyu","hucheer","gongsunkang","nanhualaoxian","zhouqun","qiaozhou","fuqian","simafu","mayuanyi","yanpu","sunhanhua"], - mobile_yijiang:["yj_zhanghe","yj_zhangliao","yj_xuhuang","yj_ganning"], + mobile_yijiang:["yj_zhanghe","yj_zhangliao","yj_xuhuang","yj_ganning",'yj_huangzhong'], mobile_shijizhi:["sp_wangcan","sp_chenzhen","sp_sunshao","sp_xunchen","luotong","sp_duyu","sp_bianfuren","feiyi"], mobile_shijixin:['wujing','sp_mifuren','sp_xinpi','wangling','wangfuzhaolei','zhouchu','sp_kongrong','sp_yanghu'], mobile_shijiren:['caizhenji','xiangchong','sp_huaxin','sp_xujing','zhangzhongjing','sp_zhangwen','liuzhang','qiaogong'], mobile_shijiyong:['db_wenyang','sp_chendong','yuanhuan','sp_zongyu','sp_wangshuang','sunyi','sp_gaolan','sp_huaman'], - mobile_shijiyan:['sp_cuiyan','sp_zhangchangpu','sp_jiangwan','sp_jiangqing'], + mobile_shijiyan:['sp_cuiyan','sp_zhangchangpu','sp_jiangwan','sp_jiangqing','sp_lvfan','sp_huangfusong'], + mobile_mougongtong:['sp_yangwan','liucheng'], mobile_sunben:["re_sunben"], mobile_standard:["xin_xiahoudun","xin_zhangfei"], mobile_shenhua:["re_pangtong","re_guanqiujian","xin_yuanshao","re_liushan","re_dongzhuo","re_sp_zhugeliang","re_sunjian","re_dengai","re_jiangwei","re_zhurong"], @@ -25,6 +26,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, character:{ + liucheng:['female','qun',3,['splveying','spyingwu']], + sp_yangwan:['female','shu',3,['spmingxuan','spxianchou']], + sp_huangfusong:['male','qun',4,['spzhengjun','spshiji','sptaoluan']], + yj_huangzhong:['male','qun',4,['spshidi','spyishi','spqishe']], + sp_lvfan:['male','wu',3,['spdiaodu','spdiancai','spyanji']], re_yufan:['male','wu',3,['zhiyan','rezongxuan']], sunhanhua:['female','wu',3,['chongxu','miaojian','shhlianhua']], sp_jiangqing:['male','wu',4,['spjianyi','spshangyi']], @@ -42,10 +48,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_zongyu:['male','shu',3,['zhibian','yuyan']], yuanhuan:['male','wei',3,['qingjue','fengjie']], sp_chendong:['male','wu',4,['spyilie','spfenming']], - xin_caozhen:['male','wei',4,['disordersidi']], + xin_caozhen:['male','wei',4,['discretesidi']], xin_sunluban:['female','wu',3,['xinzenhui','xinjiaojin']], qiaozhou:['male','shu',3,['zhiming','xingbu']], - db_wenyang:['male','wei',4,['dbquedi','dbxinzhuifeng','dbchongjian','dbchoujue'],['doublegroup:wei:wu']], + db_wenyang:['male','wei',4,['dbquedi','dbzhuifeng','dbchongjian','dbchoujue'],['doublegroup:wei:wu']], xin_guyong:['male','wu',3,['xinshenxing','xinbingyi']], re_zhonghui:['male','wei',4,['requanji','zili']], xin_caifuren:['female','qun',3,['xinqieting','xianzhou']], @@ -154,6 +160,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_sunben:['male','wu',4,['jiang','rehunzi','zhiba'],['zhu']], }, characterIntro:{ + liucheng:'游卡桌游的原创人物。设定为黄忠的妻子。', jiangwan:'蒋琬(?-246年),字公琰。零陵郡湘乡县人。三国时期蜀汉政治家,与诸葛亮、董允、费祎合称“蜀汉四相”。蒋琬最初随刘备入蜀,为广都县长。因其不理政事,惹怒刘备,在诸葛亮的劝说下才免于一死。后重获启用,受到诸葛亮的悉心培养,累官丞相长史兼抚军将军。建兴十二年(234年),诸葛亮去世,蒋琬继其执政,拜尚书令,又加行都护、假节,领益州刺史,再迁大将军,录尚书事,封安阳亭侯。延熙元年(238年),受命开府,加大司马,总揽蜀汉军政。曾制定由水路进攻曹魏的计划,但未被采纳。延熙九年(246年),蒋琬病逝,谥号为恭。', sunhanhua:'孙寒华,三国时女仙。梁·陶弘景《真诰》卷一三、五代·杜光庭《墉城集仙录》卷七:其父孙贲为孙权堂兄,寒华少时与杜契有私情,后从杜契受玄白之要,颜容日少。周旋吴越诸山十馀年,得道仙去。《鉴后集》卷四:一云即吴大帝孙权之女。于茅山修道,道成,冲虚而去,因号其山为华姥山。山在茅山崇禧观前。《神异典》卷二五九人于明代,误。', yanpu:'阎圃,生卒年不详,是益州巴西安汉(今四川省南充市)人。张鲁割据巴、汉,就以阎圃为功曹。东汉末年人物,本为张鲁部下谋士,后随张鲁一同投降曹操,封平乐乡侯。', @@ -595,6 +602,508 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + //刘赪 + splveying:{ + audio:2, + trigger:{player:'useCardAfter'}, + forced:true, + filter:function(event,player){ + return event.card.name=='sha'&&player.countMark('splveying')>1; + }, + logTarget:'targets', + content:function(){ + player.removeMark('splveying',2); + for(var i of trigger.targets) player.discardPlayerCard(i,true,'he'); + }, + marktext:'椎', + intro:{ + name:'椎(掠影/莺舞)', + name2:'椎', + content:'mark', + }, + group:'splveying_add', + subSkill:{ + add:{ + trigger:{player:'useCardToPlayered'}, + forced:true, + usable:2, + filter:function(event,player){ + return event.card.name=='sha'&&player.isPhaseUsing(); + }, + content:function(){ + player.addMark('splveying',1); + }, + }, + }, + }, + spyingwu:{ + group:'spyingwu_add', + audio:2, + trigger:{player:'useCardAfter'}, + forced:true, + locked:false, + filter:function(event,player){ + return player.hasSkill('splveying')&&(get.type(event.card)=='trick'&&!get.tag(event.card,'damage'))&&player.countMark('splveying')>1; + }, + content:function(){ + player.removeMark('splveying',2); + player.chooseUseTarget('sha',false); + }, + ai:{combo:'splveying'}, + subSkill:{ + add:{ + trigger:{player:'useCardToPlayered'}, + forced:true, + locked:false, + usable:2, + filter:function(event,player){ + return player.hasSkill('splveying')&&(get.type(event.card)=='trick'&&!get.tag(event.card,'damage'))&&player.isPhaseUsing(); + }, + content:function(){ + player.addMark('splveying',1); + }, + }, + }, + }, + //手杀杨婉 + spmingxuan:{ + audio:2, + trigger:{player:'phaseUseBegin'}, + forced:true, + filter:function(event,player){ + var list=player.getStorage('spmingxuan'); + return player.countCards('h')>0&&game.hasPlayer(function(current){ + return current!=player&&!list.contains(current); + }); + }, + content:function(){ + 'step 0' + var list=player.getStorage('spmingxuan'),num=Math.min(player.countCards('h'),game.countPlayer(function(current){ + return current!=player&&!list.contains(current); + })); + player.chooseCard('h',true,[1,num],'瞑昡:请选择至多'+get.cnNumber(num)+'张牌随机分发').set('ai',(card)=>6-get.value(card)); + 'step 1' + if(result.bool){ + var list=player.getStorage('spmingxuan'),cards=result.cards.randomSort(); + var targets=game.filterPlayer((current)=>(current!=player&&!list.contains(current))).randomGets(cards.length).sortBySeat(); + player.line(targets,'green'); + for(var i=0;i0); + } + else event.finish(); + 'step 2' + if(result.bool){ + if(target.canUse('sha',trigger.source,false)) target.useCard({name:'sha',isCard:true},trigger.source,false); + else event.finish(); + } + else event.finish(); + 'step 3' + if(target.hasHistory('sourceDamage',function(evt){ + var card=evt.card; + if(!card||card.name!='sha') return false; + var evtx=evt.getParent('useCard'); + return evtx.card==card&&evtx.getParent()==event; + })) player.recover(); + }, + }, + //手杀皇甫嵩 + spzhengjun:{ + audio:2, + trigger:{player:'phaseUseBegin'}, + direct:true, + filter:function(event,player){ + return !player.hasSkill('zhengsu'); + }, + content:function(){ + 'step 0' + player.chooseButton([get.prompt('spyanji'),[['zhengsu_leijin','zhengsu_bianzhen','zhengsu_mingzhi'],'vcard']]).set('ai',()=>Math.random()); + 'step 1' + if(result.bool){ + player.logSkill('spzhengjun',player); + var name=result.links[0][2]; + player.addTempSkill('zhengsu',{player:'phaseDiscardAfter'}); + player.addTempSkill(name,{player:'phaseDiscardAfter'}); + player.popup(name,'thunder'); + game.delayx(); + } + }, + group:'spzhengjun_share', + subSkill:{ + share:{ + trigger:{player:['drawAfter','recoverAfter']}, + direct:true, + filter:function(event,player){ + return event.getParent(2).name=='zhengsu'; + }, + content:function(){ + 'step 0' + player.chooseTarget('整军:是否令一名其他角色也回复1点体力或摸两张牌?',lib.filter.notMe).set('ai',function(target){ + var player=_status.event.player; + return Math.max(get.effect(target,{name:'wuzhong'},target,player),get.recoverEffect(target,target,player)); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('spzhengjun',target); + target.chooseDrawRecover(2,true); + } + }, + }, + }, + }, + spshiji:{ + audio:2, + trigger:{source:'damageBegin2'}, + logTarget:'player', + filter:function(event,player){ + return player!=event.player&&lib.linked.contains(event.nature)&&event.player.countCards('h')>0&&!player.isMaxHandcard(true); + }, + check:function(event,player){ + return get.attitude(player,event.player)<=0; + }, + content:function(){ + var target=trigger.player; + player.viewHandcards(target); + var hs=target.getCards('h',{color:'red'}); + if(hs.length){ + target.discard(hs); + player.draw(hs.length); + } + }, + }, + sptaoluan:{ + audio:2, + trigger:{global:'judgeEnd'}, + filter:function(event,player){ + return event.result&&event.result.suit=='spade'; + }, + check:function(event,player){ + return event.result.judge*get.attitude(player,event.player)<=0; + }, + content:function(){ + 'step 0' + var evt=trigger.getParent(); + if(evt.name=='phaseJudge') evt.excluded=true; + else evt.finish(); + var list=[]; + if(get.position(trigger.result.card)=='d') list.push(0); + if(trigger.player.isIn()&&player.canUse({name:'sha',nature:'fire',isCard:true},trigger.player,false)) list.push(1); + if(list.length==2) player.chooseControl().set('choiceList',[ + '获得'+get.translation(trigger.result.card), + '视为对'+get.translation(trigger.player)+'使用一张火【杀】', + ]).set('choice',(get.effect(target,{name:'sha'},player,player)>0)?1:0); + else if(list.length==1) event._result={index:list[0]}; + else event.finish(); + 'step 1' + if(result.index==0) player.gain(trigger.result.card,'gain2'); + else player.useCard({name:'sha',nature:'fire',isCard:true},trigger.player,false) + }, + }, + //猩黄忠 + spshidi:{ + audio:2, + trigger:{player:['phaseZhunbeiBegin','phaseJieshuBegin']}, + forced:true, + zhuanhuanji:true, + filter:function(event,player){ + return (player.countMark('spshidi')%2)==['phaseJieshu','phaseZhunbei'].indexOf(event.name); + }, + content:function(){ + player.addMark('spshidi',1,false); + }, + mod:{ + globalFrom:function(from,to,distance){ + if(from.countMark('spshidi')%2==0) return distance-1; + }, + globalTo:function(from,to,distance){ + if(to.countMark('spshidi')%2==1) return distance+1; + }, + }, + mark:true, + marktext:'☯', + intro:{ + content:function(storage,player){ + return '已转换过'+(storage||0)+'次'; + }, + }, + ai:{ + directHit_ai:true, + skillTagFilter:function(player,tag,arg){ + if(!arg||!arg.card||!arg.target||(arg.card.name!='sha')) return false; + return player.countMark('spshidi')%2==0&&get.color(arg.card)=='black'; + }, + }, + group:['spshidi_use','spshidi_beused'], + subSkill:{ + use:{ + trigger:{player:'useCard'}, + forced:true, + filter:function(event,player){ + return event.card.name=='sha'&&player.countMark('spshidi')%2==0&&get.color(event.card,false)=='black'; + }, + content:function(){ + trigger.directHit.addArray(game.players); + }, + }, + beused:{ + trigger:{target:'useCardToTargeted'}, + forced:true, + filter:function(event,player){ + return event.card.name=='sha'&&player.countMark('spshidi')%2==1&&get.color(event.card,false)=='red'; + }, + content:function(){ + trigger.directHit.add(player); + }, + }, + }, + }, + spyishi:{ + audio:2, + trigger:{source:'damageBegin2'}, + filter:function(event,player){ + return player!=event.player&&event.player.countCards('e')>0; + }, + check:function(event,player){ + return get.damageEffect(event.player,player,player)<0||(!event.player.hasSkillTag('noe')&&event.player.hasCard(function(card){ + return get.value(card)>6; + },'e')) + }, + logTarget:'player', + content:function(){ + trigger.num--; + player.gainPlayerCard(trigger.player,'e',true); + }, + }, + spqishe:{ + enable:'chooseToUse', + viewAs:{name:'jiu'}, + filterCard:{type:'equip'}, + position:'hes', + viewAsFilter:function(player){ + return player.hasCard({type:'equip'},'ehs'); + }, + check:(card)=>5-get.value(card), + locked:false, + mod:{ + maxHandcard:function(player,num){ + return num+player.countCards('e'); + }, + }, + }, + //吕范 + spdiaodu:{ + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('spdiaodu'),'令一名角色摸一张牌,然后移动其装备区内的一张牌').set('ai',function(target){ + var player=_status.event.player,att=get.attitude(player,target); + if(att>0){ + if(target.hasCard(function(card){ + if(get.value(card,target)<=0&&game.hasPlayer(function(current){ + return current!=target&¤t.isEmpty(get.subtype(card,false))&&get.effect(current,card,player,player)>0; + })) return true; + return false; + },'e')) return 2*att; + if(!target.hasCard(function(card){ + var sub=get.subtype(card,false); + return game.hasPlayer(function(current){ + return current!=target&¤t.isEmpty(sub); + }) + },'e')) return 1; + } + else if(att<0){ + if(target.hasCard(function(card){ + if(get.value(card,target)>=4.5&&game.hasPlayer(function(current){ + return current!=target&¤t.isEmpty(get.subtype(card,false))&&get.effect(current,card,player,player)>0; + })) return true; + return false; + },'e')) return -att; + } + return 0; + }) + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('spdiaodu',target); + target.draw(); + } + else event.finish(); + 'step 2' + var es=target.getCards('e',function(card){ + var sub=get.subtype(card,false); + return game.hasPlayer(function(current){ + return current!=target&¤t.isEmpty(sub); + }) + }); + if(es.length){ + if(es.length==1) event._result={bool:true,links:es}; + else player.chooseButton(['移动'+get.translation(target)+'的一张装备牌',es],true).set('ai',function(button){ + var player=_status.event.player,target=_status.event.getParent().target,card=button.link; + if(game.hasPlayer(function(current){ + return current!=target&¤t.isEmpty(get.subtype(card,false))&&get.effect(current,card,player,player)>0; + })) return -get.value(card,target)*get.attitude(player,target); + return 0; + }); + } + else event.finish(); + 'step 3' + if(result.bool){ + event.card=result.links[0]; + player.chooseTarget(true,'选择'+get.translation(event.card)+'的移动目标',function(card,player,target){ + return target.isEmpty(_status.event.subtype); + }).set('subtype',get.subtype(event.card)).set('ai',function(target){ + var evt=_status.event; + return get.effect(target,evt.getParent().card,evt.player,evt.player); + }); + } + else event.finish(); + 'step 4' + if(result.bool){ + var target2=result.targets[0]; + target.line(target2); + target.$give(card,target2); + game.delay(0.5); + target2.equip(card); + } + }, + }, + spdiancai:{ + audio:2, + trigger:{global:'phaseJieshuBegin'}, + direct:true, + filter:function(event,player){ + return player!=event.player&&player.hasHistory('lose',function(evt){ + return evt.hs&&evt.hs.length>0; + }); + }, + content:function(){ + 'step 0' + var num=0; + player.getHistory('lose',function(evt){ + if(evt.hs) num+=evt.hs.length; + }); + num=Math.min(num,game.countPlayer()); + player.chooseTarget(get.prompt('spdiancai'),[1,num],'令至多'+get.cnNumber(num)+'名角色各摸一张牌').set('ai',function(target){ + return get.attitude(_status.event.player,target); + }); + 'step 1' + if(result.bool){ + var targets=result.targets.sortBySeat(trigger.player); + player.logSkill('spdiancai',targets); + if(targets.length==1){ + targets[0].draw(); + event.finish(); + } + else game.asyncDraw(targets); + } + else event.finish(); + 'step 2' + game.delayx(); + }, + }, + spyanji:{ + audio:2, + trigger:{player:'phaseUseBegin'}, + direct:true, + filter:function(event,player){ + return !player.hasSkill('zhengsu'); + }, + content:function(){ + 'step 0' + player.chooseButton([get.prompt('spyanji'),[['zhengsu_leijin','zhengsu_bianzhen','zhengsu_mingzhi'],'vcard']]); + 'step 1' + if(result.bool){ + player.logSkill('spyanji',player); + var name=result.links[0][2]; + player.addTempSkill('zhengsu',{player:'phaseDiscardAfter'}); + player.addTempSkill(name,{player:'phaseDiscardAfter'}); + player.popup(name,'thunder'); + game.delayx(); + } + }, + }, //虞翻 rezongxuan:{ inherit:'zongxuan', @@ -1003,7 +1512,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ usable:1, content:function(){ 'step 0' - var next=player.chooseToDiscard('he','抵诽:弃置一张牌或摸一张牌'); + var next=player.chooseToDiscard('h','抵诽:弃置一张手牌或摸一张牌'); if(trigger.card){ var suit=get.suit(trigger.card,false); if(lib.suit.contains(suit)){ @@ -1028,7 +1537,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.showHandcards(); if(trigger.card){ var suit=get.suit(trigger.card,false); - if(lib.suit.contains(suit)&&!player.countCards('h',{suit:suit})) player.recover(); + if(!lib.suit.contains(suit)||!player.countCards('h',{suit:suit})) player.recover(); } }, }, @@ -1538,27 +2047,54 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var target=trigger.source,hs=player.getCards('h'); if(target&&target.isIn()&&hs.length>=cards.length&&cards.filter(function(i){ return hs.contains(i); - }).length==cards.length&&player.canUse({name:'sha',cards:cards},target,false)) player.useCard({name:'sha'},cards,target,false); + }).length==cards.length&&player.canUse({name:'sha',cards:cards},target,false)){ + var next=player.useCard({name:'sha'},cards,target,false); + if(!target.getEquip(1)) next.baseDamage=2; + } }, }, shanxie:{ audio:2, enable:'phaseUse', usable:1, + filterTarget:function(card,player,target){ + return target!=player&&target.getEquip(1); + }, + selectTarget:[0,1], content:function(){ - var card=get.cardPile2(function(card){ - return get.subtype(card)=='equip1'; - }); - if(card) player.gain(card,'gain2'); - else{ - var targets=game.filterPlayer(function(current){ - return current!=player&¤t.getEquip(1); + 'step 0' + if(!target){ + var card=get.cardPile2(function(card){ + return get.subtype(card)=='equip1'; }); - if(targets.length){ - var target=targets.randomGet(); - player.gain(target,target.getEquip(1),'give'); - } + if(card) player.gain(card,'gain2'); + event.finish(); } + else{ + var card=target.getEquip(1); + if(card){ + event.card=card; + player.gain(card,target,'give'); + } + else event.finish(); + } + 'step 1' + if(player.getCards('h').contains(card)&&get.type(card,player)=='equip'&&player.hasUseTarget(card)) player.chooseUseTarget(card,true,'nopopup'); + 'step 2' + var hs=target.getCards('h',function(card){ + return target.canUse(get.autoViewAs({name:'sha'},[card]),player,false); + }); + if(hs.length){ + if(hs.length==1) event._result={bool:true,cards:hs}; + else target.chooseCard('h',true,'将一张牌当做【杀】对'+get.translation(player)+'使用',function(card){ + return _status.event.cards.contains(card); + }).set('cards',hs).set('ai',function(card){ + return get.effect(_status.event.getParent().player,get.autoViewAs({name:'sha',},[card]),_status.event.player) + }) + } + else event.finish(); + 'step 3' + if(result.bool) target.useCard({name:'sha'},result.cards,player,false); }, ai:{ order:9, @@ -2601,19 +3137,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, //曹真 - disordersidi:{ + disordersidi:{audio:2}, + discretesidi:{ + audio:'disordersidi', trigger:{player:'useCardAfter'}, direct:true, filter:function(event,player){ return get.type(event.card,false)!='delay'&&game.hasPlayer(function(current){ - return player!=current&&(!player.storage.disordersidi||!player.storage.disordersidi.contains(current)); + return player!=current&&(!player.storage.discretesidi||!player.storage.discretesidi.contains(current)); }); }, content:function(){ 'step 0' - player.chooseTarget(get.prompt('disordersidi'),'选择两名角色a,b建立二元序偶,或仅选择一名角色,建立二元序偶',[1,2],function(card,player,target){ + player.chooseTarget(get.prompt('discretesidi'),'选择两名角色a,b建立二元序偶,或仅选择一名角色,建立二元序偶',[1,2],function(card,player,target){ if(ui.selected.targets.length) return true; - return target!=player&&(!player.storage.disordersidi||!player.storage.disordersidi.contains(target)); + return target!=player&&(!player.storage.discretesidi||!player.storage.discretesidi.contains(target)); }).set('complexTarget',true).set('complexSelect',true).set('targetprompt',['第一元素','第二元素']).set('ai',function(target){ var player=_status.event.player; if(!ui.selected.targets.length){ @@ -2627,13 +3165,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 1' if(result.bool&&result.targets.length){ var targets=result.targets; - player.logSkill('disordersidi',targets[0]); + player.logSkill('discretesidi',targets[0]); if(targets.length==1) targets.push(targets[0]); - if(!player.storage.disordersidi) player.storage.disordersidi=[]; - if(!player.storage.disordersidi2) player.storage.disordersidi2=[]; - player.storage.disordersidi.push(targets[0]); - player.storage.disordersidi2.push(targets[1]); - player.markSkill('disordersidi'); + if(!player.storage.discretesidi) player.storage.discretesidi=[]; + if(!player.storage.discretesidi2) player.storage.discretesidi2=[]; + player.storage.discretesidi.push(targets[0]); + player.storage.discretesidi2.push(targets[1]); + player.markSkill('discretesidi'); game.delayx(); } }, @@ -2642,7 +3180,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if((player==game.me||player.isUnderControl())&&!game.observe){ var str='R={ '; for(var i=0;i(player.getStat('skill').dbxinzhuifeng||0); - }, - selectCard:-1, - filterCard:()=>false, - log:false, - prompt:function(){ - return '失去'+get.cnNumber((_status.event.player.getStat('skill').dbxinzhuifeng||0)+1)+'点体力并视为使用【决斗】'; - }, - precontent:function(){ - player.logSkill('dbxinzhuifeng',event.result.targets); - var stat=player.getStat('skill'); - player.loseHp((stat.dbxinzhuifeng||0)+1); - }, - }, dbzhuifeng:{ audio:2, groupSkill:true, - enable:'chooseToUse', - filter:function(event,player){ - return player.group=='wei'&&player.hp>0&& - (event.filterCard({name:'sha',isCard:true},player,event)||event.filterCard({name:'juedou',isCard:true},player,event)); + enable:'phaseUse', + usable:2, + viewAsFilter:function(player){ + return player.group=='wei'&&player.hp>0; }, - chooseButton:{ - dialog:function(){ - return ui.create.dialog('椎锋',[['sha','juedou'],'vcard']); - }, - filter:function(button,player){ - var evt=_status.event.getParent(); - return evt.filterCard({name:button.link[2],isCard:true},player,evt); - }, - check:function(card){ - return _status.event.player.getUseValue({name:card.link[2]})*(card.link[2]=='juedou')?2:1; - }, - backup:function(links){ - return { - viewAs:{name:links[0][2],isCard:true}, - filterCard:()=>false, - selectCard:-1, - precontent:function(){ - player.logSkill('dbzhuifeng'); - delete event.result.skill; - player.loseHp(); - }, - } - }, - prompt:function(links){ - return '请选择【'+get.translation(links[0][2])+'】的目标'; - }, + viewAs:{name:'juedou',isCard:true}, + filterCard:()=>false, + selectCard:-1, + log:false, + precontent:function(){ + player.logSkill('dbzhuifeng'); + player.loseHp(); }, ai:{ - respondSha:true, - skillTagFilter:function(player,tag,arg){ - return player.group=='wei'&&player.hp>0&&arg=='use'; - }, order:function(){ - var player=_status.event.player; - if(player.hasValueTarget({name:'juedou'})) return get.order({name:'juedou'})-0.5; - return get.order({name:'sha'})-0.5; + return get.order({name:'juedou'})-0.5; }, - result:{ - player:function(player){ - if(player.hp>1) return 1; - return -1; + }, + group:'dbzhuifeng_self', + subSkill:{ + self:{ + trigger:{player:'damageBegin2'}, + forced:true, + filter:function(event,player){ + var evt=event.getParent(); + return evt.skill=='dbzhuifeng'&&evt.player==player; + }, + content:function(){ + trigger.cancel(); + player.getStat().skill.dbzhuifeng=2; }, }, }, @@ -3344,8 +3846,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, ai:{ + unequip:true, respondSha:true, skillTagFilter:function(player,tag,arg){ + if(tag=='unequip') return arg.card&&arg.card.storage&&arg.card.storage.dbchongjian; return player.group=='wu'&&arg=='use'&&player.hasCard(function(card){ return get.type(card)=='equip'; },'hes'); @@ -4936,25 +5440,39 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ 'step 0' - var list=['tiaojiyanmei']; - list.addArray(get.zhinangs()); + var list=get.zhinangs(); player.chooseButton(['是否发动【生息】获得一张智囊?',[list,'vcard']]).set('ai',function(card){ return (Math.random()+0.5)*get.value({name:card.link[2]},_status.event.player) }); 'step 1' if(result.bool){ player.logSkill('mjshengxi'); - if(result.links[0][2]=='tiaojiyanmei'&&(!_status.tiaojiyanmei_suits||_status.tiaojiyanmei_suits.length>0)){ - if(!lib.inpile.contains('tiaojiyanmei')) lib.inpile.add('tiaojiyanmei'); - if(!_status.tiaojiyanmei_suits) _status.tiaojiyanmei_suits=lib.suit.slice(0); - player.gain(game.createCard2('tiaojiyanmei',_status.tiaojiyanmei_suits.randomRemove(),6),'gain2'); - } - else{ - var card=get.cardPile2(function(card){ - return card.name==result.links[0][2]; - }); - if(card) player.gain(card,'gain2'); - } + var card=get.cardPile2(function(card){ + return card.name==result.links[0][2]; + }); + if(card) player.gain(card,'gain2'); + } + }, + group:'mjshengxi_zhunbei', + subfrequent:['zhunbei'], + subSkill:{ + zhunbei:{ + trigger:{player:'phaseZhunbeiBegin'}, + frequent:true, + prompt2:'从游戏外或牌堆中获得一张【调剂盐梅】', + content:function(){ + if(!_status.tiaojiyanmei_suits||_status.tiaojiyanmei_suits.length>0){ + if(!lib.inpile.contains('tiaojiyanmei')) lib.inpile.add('tiaojiyanmei'); + if(!_status.tiaojiyanmei_suits) _status.tiaojiyanmei_suits=lib.suit.slice(0); + player.gain(game.createCard2('tiaojiyanmei',_status.tiaojiyanmei_suits.randomRemove(),6),'gain2'); + } + else{ + var card=get.cardPile2(function(card){ + return card.name=='tiaojiyanmei'; + }); + if(card) player.gain(card,'gain2'); + } + }, } }, }, @@ -6926,7 +7444,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ game.countChoose(); setTimeout(function(){ _status.imchoosing=false; - var max=1+player.countMark('yufeng'); + var max=Math.max(2,1+game.me.countMark('yufeng')); var score=Math.random()<0.5?max:get.rand(1,max); event._result={ bool:true, @@ -6955,7 +7473,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.score=0; event.dialog=ui.create.dialog('forcebutton','hidden'); event.dialog.textPrompt=event.dialog.add('
准备好了吗?准备好了的话就点击屏幕开始吧!
'); - var max=1+game.me.countMark('yufeng'); + var max=Math.max(2,1+game.me.countMark('yufeng')); event.dialog.textPrompt.style["z-index"]=10; event.switchToAuto=function(){ event._result={ @@ -14515,6 +15033,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ '当你成为【杀】的目标后,你摸一张牌。然后此【杀】的使用者选择一项:①弃置一张牌。②令此【杀】对你无效。', ][player.countMark('shhlianhua')]; }, + spshidi:function(player){ + if(player.countMark('spshidi')%2==0) return '转换技,锁定技。①准备阶段或结束阶段开始时,若你发动此分支的累计次数为奇数/偶数,则你获得一个“☯”。②若你的“☯”数为偶数,则你至其他角色的距离-1,且你使用的黑色【杀】不可被响应。③若你的“☯”数为奇数,则其他角色至你的距离+1,且你不可响应红色【杀】。'; + return '转换技,锁定技。①准备阶段或结束阶段开始时,若你发动此分支的累计次数为奇数/偶数,则你获得一个“☯”。②若你的“☯”数为偶数,则你至其他角色的距离-1,且你使用的黑色【杀】不可被响应。③若你的“☯”数为奇数,则其他角色至你的距离+1,且你不可响应红色【杀】。'; + }, }, perfectPair:{ wujing:['sunce','sunben','wuguotai'], @@ -14768,7 +15290,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ reshanxi:'闪袭', reshanxi2:'闪袭', reshanxi_info:'出牌阶段开始时,你可以弃置一张红色基本牌并选择一名有牌的其他角色,将其的至多X张牌置于其的武将牌上(X为你的体力值)。回合结束时,该角色获得这些牌。', - chendeng:'陈登', + chendeng:'手杀陈登', zhouxuan:'周旋', zhouxuan2:'周旋', zhouxuan_info:'出牌阶段限一次,你可以弃置一张牌并指定一名角色,然后选择一个基本牌的名称或非基本牌的类型。其使用或打出下一张牌时,若此牌的名称或类型和你选择的相同,则你观看牌堆顶的三张牌,然后将这些牌分配给任意角色。', @@ -15082,7 +15604,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mjfubi:'辅弼', mjfubi_info:'每轮限一次。出牌阶段,你可选择一项:①更换一名角色的〖定仪〗效果。②弃置一张牌并令一名角色的〖定仪〗效果翻倍直到你的下回合开始。', mjshengxi:'生息', - mjshengxi_info:'结束阶段,若你本回合使用过牌且未造成伤害,则你可以获得一张智囊或【调剂盐梅】。', + mjshengxi_info:'准备阶段,你可以获得一张【调剂盐梅】;结束阶段,若你本回合使用过牌且未造成伤害,则你可以获得一张智囊。', mjkuanji:'宽济', mjkuanji_info:'每回合限一次。当你因弃置而失去牌后,你可令一名其他角色获得其中的一张牌,然后你摸一张牌。', tiaojiyanmei:'调剂盐梅', @@ -15163,13 +15685,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dbquedi:'却敌', dbquedi_info:'每回合限一次。当你使用【杀】或【决斗】指定唯一目标后,你可选择:①获得目标角色的一张手牌。②弃置一张基本牌,并令此牌的伤害值基数+1。③背水:减1点体力上限,然后依次执行上述所有选项。', dbzhuifeng:'椎锋', - dbzhuifeng_backup:'椎锋', - dbzhuifeng_info:'魏势力技。当你需要使用【杀】或【决斗】时,你可以失去1点体力,然后视为使用此牌。', - dbxinzhuifeng:'椎锋', - dbxinzhuifeng_info:'魏势力技。若你的体力值大于X,则你可以失去X+1点体力并视为使用一张【决斗】(X为你本回合内发动过〖椎锋〗的次数)。', + dbzhuifeng_info:'魏势力技。每回合限两次,你可以失去1点体力并视为使用一张【决斗】。当你因此【决斗】而受到伤害时,你防止此伤害并令此技能失效直到出牌阶段结束。', dbchongjian:'冲坚', dbchongjian_backup:'冲坚', - dbchongjian_info:'吴势力技。你可以将一张装备牌当做【杀】(无距离限制)或【酒】使用。当你以此法使用【杀】造成伤害后,你获得目标角色装备区内的X张牌(X为伤害值)。', + dbchongjian_info:'吴势力技。你可以将一张装备牌当做【杀】(无距离限制且无视防具)或【酒】使用。当你以此法使用【杀】造成伤害后,你获得目标角色装备区内的X张牌(X为伤害值)。', dbchoujue:'仇决', dbchoujue_info:'锁定技。当你杀死其他角色后,你加1点体力上限并摸两张牌,然后本回合发动【却敌】的次数上限+1。', qiaozhou:'谯周', @@ -15191,8 +15710,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xinjiaojin:'骄矜', xinjiaojin_info:'当你受到男性角色造成的伤害时,你可以弃置一张装备牌并防止此伤害。', xin_caozhen:'手杀曹真', - disordersidi:'司敌', - disordersidi_info:'①当你使用的不为延时锦囊牌的牌结算结束后,你可选择一名R内不存在以a为第一序偶的二元序偶的其他角色a,并选择一名角色b,在关系R内建立二元序偶(b对其他角色不可见)。②一名角色a使用不为延时锦囊牌的牌指定b为目标时,若(aRb)∧(此牌目标数为1)为真,则{你从R内移除,且:若b为你,你摸一张牌;若b不为你,你可选择:⒈取消此牌的目标,然后若场上没有处于濒死状态的角色,则你对a造成1点伤害。⒉摸两张牌};否则{你清除R内以a为第一元素的二元序偶}。', + discretesidi:'司敌', + discretesidi_info:'①当你使用的不为延时锦囊牌的牌结算结束后,你可选择一名R内不存在以a为第一序偶的二元序偶的其他角色a,并选择一名角色b,在关系R内建立二元序偶(b对其他角色不可见)。②一名角色a使用不为延时锦囊牌的牌指定b为目标时,若(aRb)∧(此牌目标数为1)为真,则{你从R内移除,且:若b为你,你摸一张牌;若b不为你,你可选择:⒈取消此牌的目标,然后若场上没有处于濒死状态的角色,则你对a造成1点伤害。⒉摸两张牌};否则{你清除R内以a为第一元素的二元序偶}。', sp_chendong:'陈武董袭', spyilie:'毅烈', spyilie_info:'出牌阶段开始时,你可选择:①本阶段内使用【杀】的次数上限+1。②本回合内使用【杀】被【闪】抵消时,摸一张牌。③背水:失去1点体力,然后依次执行上述所有选项。', @@ -15241,9 +15760,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ bihuo_info:'限定技。一名角色脱离濒死状态时,你可以令其摸三张牌,然后其他角色计算至其的距离时+X直到本轮结束(X为角色数)。', sp_wangshuang:'手杀王双', yiyong:'异勇', - yiyong_info:'当你受到其他角色造成的渠道为【杀】的伤害后,若你的装备区内有武器牌,则你可以获得此【杀】对应的所有实体牌,然后将这些牌当做【杀】对伤害来源使用(无距离限制)。', + yiyong_info:'当你受到其他角色造成的渠道为【杀】的伤害后,若你的装备区内有武器牌,则你可以获得此【杀】对应的所有实体牌,然后将这些牌当做【杀】对伤害来源使用(无距离限制)。若其装备区内没有武器牌,则此伤害+1。', shanxie:'擅械', - shanxie_info:'①出牌阶段限一次,你可以从牌堆中获得一张武器牌(没有则改为从场上随机获得一张)。②当其他角色使用【闪】响应你使用的【杀】时,若此【闪】没有点数或点数不大于你攻击范围的二倍,则你令此【闪】无效。', + shanxie_info:'①出牌阶段限一次,你可选择一项:⒈从牌堆中获得一张武器牌。⒉获得其装备区内的一张武器牌并使用,然后其将一张手牌当做【杀】对你使用。②当其他角色使用【闪】响应你使用的【杀】时,若此【闪】没有点数或点数不大于你攻击范围的二倍,则你令此【闪】无效。', sunyi:'孙翊', zaoli:'躁厉', zaoli_info:'锁定技。①你不能于回合内使用你手牌中不为本回合获得的牌。②当你使用或打出手牌时,你获得一个“厉”(至多4个)。③回合开始时,若你有“厉”,则你移去所有“厉”并弃置任意张牌,然后摸X+Y张牌并失去1点体力(X为你移去的标记数,Y为你弃置的牌数)。', @@ -15266,7 +15785,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ spzundi_info:'出牌阶段限一次,你可以弃置一张手牌并选择一名角色,然后你进行判定。若结果为:黑色,其摸三张牌;红色,其可以移动场上的一张牌。', sp_zhangchangpu:'手杀张昌蒲', spdifei:'抵诽', - spdifei_info:'锁定技。每回合限一次,当你受到伤害后,你摸一张牌或弃置一张牌,然后展示所有手牌。若此伤害的渠道为有花色的牌且你的手牌中没有与此牌花色相同的牌,则你回复1点体力。', + spdifei_info:'锁定技。每回合限一次,当你受到伤害后,你摸一张牌或弃置一张手牌,然后展示所有手牌。若此伤害的渠道为没有花色的牌或你的手牌中没有与此牌花色相同的牌,则你回复1点体力。', spyanjiao:'严教', spyanjiao_info:'出牌阶段限一次。你可以将手牌中一种花色的所有牌交给一名其他角色,对其造成1点伤害。然后你于自己的下回合开始时摸等量的牌。', sp_jiangwan:'蒋琬', @@ -15298,6 +15817,37 @@ game.import('character',function(lib,game,ui,get,ai,_status){ rezongxuan:'纵玄', rezongxuan_place:'纵玄', rezongxuan_info:'当你的牌因弃置而进入弃牌堆后,你可以将其以任意顺序置于牌堆顶。出牌阶段限一次,你可以摸一张牌,然后将一张牌置于牌堆顶。', + sp_lvfan:'吕范', + spdiaodu:'调度', + spdiaodu_info:'准备阶段,你可令一名角色摸一张牌,然后移动其装备区内的一张牌。', + spdiancai:'典财', + spdiancai_info:'其他角色的结束阶段开始时,你可以令至多X名角色各摸一张牌(X为你本回合失去的手牌数)。', + spyanji:'严纪', + spyanji_info:'出牌阶段开始时,你可以进行“整肃”。', + yj_huangzhong:'☆黄忠', + spshidi:'势敌', + spshidi_info:'转换技,锁定技。①准备阶段或结束阶段开始时,若你发动此分支的累计次数为奇数/偶数,则你获得一个“☯”。②若你的“☯”数为偶数,则你至其他角色的距离-1,且你使用的黑色【杀】不可被响应。③若你的“☯”数为奇数,则其他角色至你的距离+1,且你不可响应红色【杀】。', + spyishi:'义释', + spyishi_info:'当你对装备区有牌的其他角色造成伤害时,你可令此伤害-1,然后获得其装备区内的一张牌。', + spqishe:'骑射', + spqishe_info:'你可以将一张装备牌当做【酒】使用。你的手牌上限+X(X为你装备区内的牌数)。', + sp_huangfusong:'手杀皇甫嵩', + spzhengjun:'整军', + spzhengjun_info:'①出牌阶段开始时,你可进行“整肃”。②当你因整肃而摸牌或回复体力后,你可令一名其他角色选择摸两张牌或回复1点体力。', + spshiji:'势击', + spshiji_info:'当你对其他角色造成属性伤害时,若你的手牌数不为全场唯一最多,则你可以观看其手牌。你令其弃置其中的所有红色牌,然后摸等量的牌。', + sptaoluan:'讨乱', + sptaoluan_info:'一名角色的判定牌生效后,若判定结果的花色为♠,则你可以终止导致此判定发生的上级事件。然后选择一项:①获得判定牌对应的实体牌。②视为对判定角色使用一张火【杀】(无距离和次数限制)', + sp_yangwan:'杨婉', + spmingxuan:'瞑昡', + spmingxuan_info:'锁定技。出牌阶段开始时,你须选择至多X张牌(X为未选择过选项①的角色),将这些牌随机交给这些角色中的等量角色。然后这些角色依次选择一项:①对你使用一张【杀】。②交给你一张牌,然后你摸一张牌。', + spxianchou:'陷仇', + spxianchou_info:'当你受到有来源的伤害后,你可选择一名不为伤害来源的其他角色。该角色可以弃置一张牌,然后视为对伤害来源使用一张【杀】。若其因此【杀】造成了伤害,则你回复1点体力。', + liucheng:'刘赪', + splveying:'掠影', + splveying_info:'锁定技。①每回合限两次,当你使用【杀】指定目标后,你获得一个“椎”。②当你使用的【杀】结算结束后,若你的“椎”数大于1,则你弃置两个“椎”,然后弃置所有目标角色的各一张手牌。', + spyingwu:'莺舞', + spyingwu_info:'若你拥有〖掠影〗,则:①每回合限两次,当你使用非伤害类普通锦囊牌指定目标后,你获得一个“椎”。②当你使用的非伤害类普通锦囊牌结算结束后,若你的“椎”数大于1,则你弃置两个“椎”,然后可以视为使用一张【杀】。', mobile_standard:'手杀异构·标准包', mobile_shenhua:'手杀异构·神话再临', @@ -15312,6 +15862,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mobile_shijixin:'始计篇·信', mobile_shijiyong:'始计篇·勇', mobile_shijiyan:'始计篇·严', + mobile_mougongtong:'谋攻篇·同', } }; }); diff --git a/character/rank.js b/character/rank.js index 48c8cf602..36a87bd84 100644 --- a/character/rank.js +++ b/character/rank.js @@ -491,6 +491,7 @@ window.noname_character_rank={ 're_xunchen', 'sp_cuiyan', 'ol_dongzhao', + 'xin_jushou', ], bp:[ 'chess_diaochan', @@ -731,6 +732,8 @@ window.noname_character_rank={ 'tw_re_caohong', 'tw_mayunlu', 'tw_hucheer', + 'sp_lvfan', + 're_chendeng', ], b:[ 'diy_feishi', @@ -939,6 +942,10 @@ window.noname_character_rank={ 'sp_jiangqing', 'tw_hejin', 'xuangongzhu', + 'sp_huangfusong', + 'yj_huangzhong', + 're_xiahoushi', + 'sp_yangwan', ], bm:[ 'diy_xizhenxihong', @@ -1092,6 +1099,7 @@ window.noname_character_rank={ 'xin_sunluban', 'ol_bianfuren', 'sp_ol_zhanghe', + 'liucheng', ], c:[ 'xiahoudun', @@ -1454,6 +1462,7 @@ window.noname_character_rank={ 'db_wenyang', 'qiaozhou', 'lvlingqi', + 'xin_jushou', 'key_kano', 'key_haruko', 'key_akiko', @@ -1816,6 +1825,9 @@ window.noname_character_rank={ 'tw_mayunlu', 'tw_re_caohong', 'tw_hucheer', + 'sp_yangwan', + 're_xiahoushi', + 're_chendeng', ], junk:[ 'sunshao', diff --git a/character/refresh.js b/character/refresh.js index a5cd60c2d..388ef041a 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -12,12 +12,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 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','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'], + refresh_yijiang4:['re_sunluban','re_wuyi','re_hanhaoshihuan','re_caozhen','re_zhoucang','re_chenqun','re_caifuren','re_guyong','xin_jushou'], + refresh_yijiang5:['re_zhangyi','re_quancong','re_caoxiu','re_sunxiu','re_gongsunyuan','re_guotufengji','re_xiahoushi'], }, }, connect:true, character:{ + re_xiahoushi:['female','shu',3,['reqiaoshi','reyanyu']], + xin_jushou:['male','qun',3,['xinjianying','shibei']], ol_lusu:['male','wu',3,['olhaoshi','oldimeng']], re_jiaxu:['male','qun',3,['rewansha','luanwu','reweimu']], re_guyong:['male','wu',3,['reshenxing','rebingyi']], @@ -139,6 +141,193 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_xushu:['zhaoyun','sp_zhugeliang'], }, skill:{ + //夏侯氏 + reqiaoshi:{ + audio:2, + trigger:{global:'phaseJieshuBegin'}, + filter:function(event,player){ + return event.player!=player&&event.player.countCards('h')==player.countCards('h')&&event.player.isAlive(); + }, + check:function(event,player){ + return get.attitude(player,event.player)>=0; + }, + //priority:-5, + logTarget:'player', + content:function(){ + 'step 0' + game.asyncDraw([trigger.player,player]); + 'step 1' + game.delayx(); + if(player.isIn()&&trigger.player.isIn()){ + var getGainSuit=function(player){ + var last=player.getHistory('gain',function(evt){ + return evt.getParent(2)==event; + }); + if(last.length){ + var evt=last.pop(); + if(evt.cards.length==1&&player.getCards('h').contains(evt.cards[0])) return get.suit(evt.cards[0],player); + } + else return player; + } + if(getGainSuit(player)==getGainSuit(trigger.player)) player.chooseBool('是否继续发动【樵拾】?','和'+get.translation(trigger.player)+'各摸一张牌'); + } + else event.finish(); + 'step 2' + if(result.bool) event.goto(0); + }, + ai:{ + expose:0.1 + } + }, + reyanyu:{ + audio:2, + enable:'phaseUse', + filter:function(event,player){ + return player.countCards('h','sha')>0; + }, + filterCard:{name:'sha'}, + prepare:function(cards,player){ + player.$throw(cards,1000); + game.log(player,'将',cards,'置入了弃牌堆'); + }, + discard:false, + loseTo:'discardPile', + visible:true, + delay:0.5, + content:function(){ + player.draw(); + }, + ai:{ + basic:{ + order:1 + }, + result:{ + player:1, + }, + }, + group:'reyanyu2' + }, + reyanyu2:{ + trigger:{player:'phaseUseEnd'}, + direct:true, + filter:function(event,player){ + return player.getHistory('lose',function(evt){ + var evt2=evt.getParent(); + return evt2.name=='useSkill'&&evt2.skill=='reyanyu'&&evt.getParent(3)==event; + }).length>0; + }, + content:function(){ + 'step 0' + event.num=Math.min(3,player.getHistory('lose',function(evt){ + var evt2=evt.getParent(); + return evt2.name=='useSkill'&&evt2.skill=='reyanyu'&&evt.getParent(3)==trigger; + }).length); + player.chooseTarget(get.prompt('reyanyu'),'令一名男性角色摸'+get.cnNumber(event.num)+'张牌',function(card,player,target){ + return target.hasSex('male')&&target!=player; + }).set('ai',function(target){ + return get.attitude(_status.event.player,target); + }); + 'step 1' + if(result.bool){ + player.logSkill('reyanyu',result.targets); + result.targets[0].draw(event.num); + } + } + }, + //沮授 + xinjianying:{ + audio:'jianying', + audioname:['xin_jushou'], + subfrequent:['draw'], + group:['xinjianying_draw'], + enable:'phaseUse', + usable:1, + filter:function(event,player){ + if(!player.countCards('he')) return false; + for(var i of lib.inpile){ + if(i!='du'&&get.type(i,false)=='basic'){ + if(event.filterCard({name:i},player,event)) return true; + if(i=='sha'){ + for(var j of lib.inpile_nature){ + if(event.filterCard({name:i,nature:j},player,event)) return true; + } + } + } + } + return false; + }, + onChooseToUse:function(event){ + if(event.type=='phase'&&!game.online){ + var last=event.player.getLastUsed(); + if(last&&last.getParent('phaseUse')==event.getParent()){ + var suit=get.suit(last.card,false); + if(suit!='none') event.set('xinjianying_suit',suit); + } + } + }, + chooseButton:{ + dialog:function(event,player){ + var list=[]; + var suit=event.xinjianying_suit||'',str=get.translation(suit); + for(var i of lib.inpile){ + if(i!='du'&&get.type(i,false)=='basic'){ + if(event.filterCard({name:i},player,event)) list.push(['基本',str,i]); + if(i=='sha'){ + for(var j of lib.inpile_nature){ + if(event.filterCard({name:i,nature:j},player,event)) list.push(['基本',str,i,j]); + } + } + } + } + return ui.create.dialog('渐营',[list,'vcard']); + }, + check:function(button){ + if(button.link[2]=='jiu') return 0; + return _status.event.player.getUseValue({name:button.link[2],nature:button.link[3]}); + }, + backup:function(links,player){ + var next={ + audio:'jianying', + audioname:['xin_jushou'], + filterCard:true, + popname:true, + position:'he', + viewAs:{ + name:links[0][2], + nature:links[0][3], + }, + ai1:function(card){ + return 7-_status.event.player.getUseValue(card,null,true); + }, + precontent:function(){ + event.getParent().addCount=false; + var evtx=event.getParent(2); + if(player.hasHistory('useCard',function(evt){ + return evt.skill=='xinjianying_backup'&&evt.getParent(2)==evtx; + })){ + alert('检测到您安装了十周年UI等具有出牌特效的扩展。该扩展会导致【渐营】出现无视次数限制发动的bug。为避免无限循环,即将重启游戏。请卸载相关扩展以解决此问题。'); + game.reload(); + } + }, + }; + if(_status.event.xinjianying_suit) next.viewAs.suit=_status.event.xinjianying_suit; + return next; + }, + prompt:function(links){ + return '将一张牌当做'+(get.translation(links[0][3])||'')+get.translation(links[0][2])+(_status.event.xinjianying_suit?('('+get.translation(_status.event.xinjianying_suit)+')'):'')+'使用'; + }, + }, + ai:{ + order:function(item,player){ + if(_status.event.xinjianying_suit) return 16; + return 3; + }, + result:{player:1}, + }, + subSkill:{ + draw:{inherit:'jianying'}, + }, + }, //虞翻 xinzongxuan:{ audio:2, @@ -331,7 +520,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var list=game.filterPlayer(function(target){ return target!=player&&target.hasZhuSkill('xinhuangtian',player); }); - var str='将一张【闪】或【闪电】交给'+get.translation(list); + var str='将一张【闪】或黑桃手牌交给'+get.translation(list); if(list.length>1) str+='中的一人'; return str; }, @@ -5521,15 +5710,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ forced:true, filter:function(event,player){ if(!player.hasZhuSkill('olruoyu')) return false; - if(player.storage.olruoyu) return false; return player.isMinHp(); }, content:function(){ 'step 0' - player.storage.olruoyu=true; + player.awakenSkill('olruoyu'); player.gainMaxHp(); 'step 1' - player.recover(); + if(player.hp<3) player.recover(3-player.hp); game.log(player,'获得了技能','#g【思蜀】','和','#g【激将】'); player.addSkill('sishu'); if(player.hasSkill('olruoyu')){ @@ -5544,7 +5732,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else{ event.trigger('zhuUpdate'); } - player.awakenSkill('olruoyu'); } }, olfangquan:{ @@ -10172,7 +10359,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ olfangquan:'放权', olfangquan_info:'出牌阶段开始前,你可以跳过此阶段。若如此做,弃牌阶段开始时,你可以弃置一张手牌,令一名其他角色进行一个额外回合。', olruoyu:'若愚', - olruoyu_info:'主公技,觉醒技,准备阶段,若你的体力值为全场最少,则你加1点体力上限并回复1点体力,然后获得技能〖思蜀〗和〖激将〗。', + olruoyu_info:'主公技,觉醒技,准备阶段,若你的体力值为全场最少,则你加1点体力上限,将体力回复至3点,然后获得技能〖思蜀〗和〖激将〗。', sishu:'思蜀', sishu_info:'出牌阶段开始时,你可以选择一名角色。该角色本局游戏内【乐不思蜀】的判定效果反转。', olluanji:'乱击', @@ -10647,6 +10834,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xinzongxuan_info:'当你的牌因弃置而进入弃牌堆后,你可将其中的任意张牌置于牌堆顶。若剩余的牌中有锦囊牌,则你可以令一名其他角色获得其中的一张。', xinzhiyan:'直言', xinzhiyan_info:'结束阶段开始时,你可令一名角色摸一张牌(正面朝上移动)。若此牌为基本牌,则你摸一张牌。若此牌为装备牌,则其回复1点体力并使用此装备牌。', + xin_jushou:'界沮授', + xinjianying:'渐营', + xinjianying_info:'锁定技。①当你于出牌阶段内使用与此阶段你使用的上一张牌点数或花色相同的牌时,你可以摸一张牌。②出牌阶段限一次,你可以将一张牌当做任意基本牌使用(不计入次数限制)。若你于此阶段内使用的上一张牌有花色,则此牌的花色视为上一张牌的花色。', + re_xiahoushi:'界夏侯氏', + reqiaoshi:'樵拾', + reqiaoshi_info:'其他角色的结束阶段开始时,若你的手牌数与其相等,则你可以与其各摸一张牌。若这两张牌花色相同,则你可以重复此步骤。', + reyanyu:'燕语', + reyanyu2:'燕语', + reyanyu_info:'①出牌阶段,你可以重铸【杀】。②出牌阶段结束时,你可以令一名男性角色摸X张牌(X为你本阶段内发动过〖燕语①〗的次数且至多为3)。', refresh_standard:'界限突破·标', refresh_feng:'界限突破·风', diff --git a/character/sp.js b/character/sp.js index 74f8c84ae..f90645d27 100755 --- a/character/sp.js +++ b/character/sp.js @@ -17,7 +17,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_wanglang:['wanglang'], sp_tongque:["sp_fuwan","sp_fuhuanghou","sp_jiben"], sp_zhongdan:["cuiyan","huangfusong"], - sp_guozhan2:["mateng","tianfeng","sp_dongzhuo","jiangfei","liqueguosi","lvfan","cuimao","jiling","zhangren","zongyu"], + sp_guozhan2:["mateng","tianfeng","sp_dongzhuo","liqueguosi","lvfan","cuimao","jiling","zhangren","zongyu"], //sp_single:["niujin"], sp_others:["hanba","caiyang"], }, @@ -132,7 +132,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ tianfeng:['male','qun',3,['sijian','suishi']], yuejin:['male','wei',4,['xiaoguo']], sp_dongzhuo:['male','qun',5,['hengzheng']], - jiangfei:['male','shu',3,['reshengxi','shoucheng']], + //jiangfei:['male','shu',3,['reshengxi','shoucheng']], //jiangqing:['male','wu',4,['shangyi','zniaoxiang']], hetaihou:['female','qun',3,['zhendu','qiluan']], //kongrong:['male','qun',3,['lirang','mingshi']], @@ -405,7 +405,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, zhuangshu_basic:{ - //fullskin:true, + fullskin:true, vanish:true, derivation:'fengfangnv', type:'equip', @@ -424,7 +424,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ loseDelay:false, }, zhuangshu_trick:{ - //fullskin:true, + fullskin:true, vanish:true, derivation:'fengfangnv', type:'equip', @@ -443,7 +443,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ loseDelay:false, }, zhuangshu_equip:{ - //fullskin:true, + fullskin:true, vanish:true, derivation:'fengfangnv', type:'equip', @@ -569,15 +569,30 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, intro:{content:'已声明【$】'}, - group:'olxianlve_use', + group:['olxianlve_use','olxianlve_count'], subSkill:{ + count:{ + trigger:{global:'useCard1'}, + silent:true, + forced:true, + popup:false, + firstDo:true, + filter:function(event,player){ + return event.player!=player&&event.card.name==player.storage.olxianlve; + }, + content:function(){ + if(!trigger.olxianlve_map) trigger.olxianlve_map={}; + trigger.olxianlve_map[player.playerid]=true; + }, + }, use:{ audio:'olxianlve', trigger:{global:'useCardAfter'}, forced:true, locked:false, + usable:1, filter:function(event,player){ - return event.player!=player&&event.card.name==player.storage.olxianlve; + return event.player!=player&&event.olxianlve_map&&event.olxianlve_map[player.playerid]&&event.card.name==player.storage.olxianlve; }, content:function(){ 'step 0' @@ -757,7 +772,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ 'step 0' - player.chooseToDiscard('he',get.prompt2('zhuangshu',trigger.player),function(card){ + player.chooseToDiscard('he',get.prompt('zhuangshu',trigger.player),'弃置一张牌,并根据此牌的类型,按如下关系将一张宝物牌置入该角色的装备区:{<基本牌,【琼梳】>,<锦囊牌,【犀梳】>,<装备牌,【金梳】>}。',function(card){ var type=get.type2(card); return type=='basic'||type=='trick'||type=='equip'; }).set('ai',function(card){ @@ -790,6 +805,32 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }, + group:'zhuangshu_gameStart', + subSkill:{ + gameStart:{ + trigger:{global:'phaseBefore'}, + direct:true, + filter:function(event,player){ + return game.phaseNumber==0; + }, + content:function(){ + 'step 0' + player.chooseButton([get.prompt('zhuangshu'),[['zhuangshu_basic','zhuangshu_trick','zhuangshu_equip'],'vcard']]).set('filterButton',function(button){ + return !game.hasPlayer(function(current){ + return current.getEquip(button.link[2]); + }) + }); + 'step 1' + if(result.bool){ + player.logSkill('zhuangshu'); + var name=result.links[0][2],card=game.createCard(name,lib.card[name].suit,12); + player.$gain2(card,false); + game.delayx(); + player.equip(card); + } + }, + }, + }, }, chuiti:{ audio:2, @@ -825,7 +866,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, zhuangshu_basic:{ equipSkill:true, - usable:1, + trigger:{player:'damageBegin2'}, + direct:true, + filter:function(event,player){ + var equip=player.getEquip('zhuangshu_basic'); + return event.num<=player.countCards('he',function(card){ + return card!=equip; + }) + }, + content:function(){ + 'step 0' + player.chooseToDiscard('he',trigger.num,get.prompt('zhuangshu_basic'),'弃置'+get.cnNumber(trigger.num)+'张牌并防止伤害',function(card,player){ + return card!=player.getEquip('zhuangshu_basic'); + }).set('ai',function(card){ + var player=_status.event.player; + return 4+player.getUseValue(card)-get.value(card,player); + }); + 'step 1' + if(result.bool) trigger.cancel(); + }, + /*usable:1, trigger:{player:'useCard2'}, direct:true, filter:function(event,player){ @@ -863,7 +923,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.logSkill('zhuangshu_basic',targets); trigger.targets.addArray(targets); trigger.directHit.addArray(targets); - }, + },*/ }, zhuangshu_trick:{ trigger:{player:['phaseJudgeBefore']}, @@ -4624,12 +4684,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } 'step 2' target.storage.xiongsuan_restore=result.control; - target.addTempSkill('xiongsuan_restore','phaseZhunbeiBegin'); + target.addTempSkill('xiongsuan_restore'); }, subSkill:{ restore:{ trigger:{global:'phaseAfter'}, silent:true, + charlotte:true, content:function(){ player.restoreSkill(player.storage.xiongsuan_restore); } @@ -4665,92 +4726,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, diancai:{ audio:2, - trigger:{global:'phaseUseEnd'}, - filter:function(event,player){ - if(_status.currentPhase==player) return false; - var num=0; - player.getHistory('lose',function(evt){ - if(evt.cards2&&evt.getParent('phaseUse')==event) num+=evt.cards2.length; - }); - return num>=player.hp; - }, - content:function(){ - 'step 0' - var num=player.maxHp-player.countCards('h'); - if(num>0){ - player.draw(num); - } - }, }, diaodu:{ audio:2, - group:"diaodu_use", - subfrequent:['use'], - subSkill:{ - use:{ - trigger:{ - player:"useCard", - }, - audio:"diaodu", - frequent:true, - prompt:'是否发动【调度】摸一张牌?', - filter:function (event,player){ - return get.type(event.card)=='equip' - }, - content:function (){ - player.draw('nodelay'); - }, - ai:{ - reverseEquip:true, - effect:{ - target:function (card,player,target,current){ - if(player==target&&get.type(card)=='equip') return [1,3]; - }, - }, - }, - }, - }, - trigger:{ - player:"phaseUseBegin", - }, - filter:function (event,player){ - return game.hasPlayer(function(current){ - return current!=player&¤t.countGainableCards(player,'e')>0; - }); - }, - direct:true, - content:function (){ - 'step 0' - player.chooseTarget(get.prompt2('diaodu'),function(card,player,current){ - return current!=player&¤t.countGainableCards(player,'e')>0; - }).ai=function(target){ - var num=get.attitude(_status.event.player,target); - if(target.isDamaged()&&target.getEquip('baiyin')&&num>0) return 2*num - return -num; - }; - 'step 1' - if(result.bool){ - event.target1=result.targets[0]; - player.logSkill('diaodu',event.target1); - player.line(event.target1,'diaodu'); - player.gainPlayerCard(event.target1,'e',true); - } - else event.finish(); - 'step 2' - if(result.bool){ - event.card=result.cards[0]; - player.chooseTarget('是否将'+get.translation(event.card)+'交给一名其他角色?',function(card,player,current){ - return current!=player&¤t!=event.target1; - }); - } - else event.finish(); - 'step 3' - if(result.bool){ - var target=result.targets[0]; - player.line(target,'green'); - target.gain(card,player,'give'); - } - }, }, zhengbi:{ audio:2, @@ -16629,12 +16607,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ oldingcuo_info:'每回合限一次。当你受到或造成伤害后,你可摸两张牌。若这两张牌颜色不同,则你弃置一张手牌。', fengfangnv:'冯方女', zhuangshu:'妆梳', - zhuangshu_info:'一名角色的回合开始时,若其宝物区为空,则你可以弃置一张牌,并根据此牌的类型,按如下关系将一张宝物牌置入该角色的装备区:{<基本牌,【琼梳】>,<锦囊牌,【犀梳】>,<装备牌,【金梳】>}。', + zhuangshu_info:'①游戏开始时,你可将{【琼梳】,【犀梳】,【金梳】}中的一张牌置于装备区。②一名角色的回合开始时,若其宝物区为空,则你可以弃置一张牌,并根据此牌的类型,按如下关系将一张宝物牌置入该角色的装备区:{<基本牌,【琼梳】>,<锦囊牌,【犀梳】>,<装备牌,【金梳】>}。', chuiti:'垂涕', chuiti_info:'每回合限一次。当你或拥有〖妆梳〗牌角色的牌因弃置而进入弃牌堆后,你可使用其中的一张牌。', zhuangshu_basic:'琼梳', zhuangshu_basic_bg:'琼', - zhuangshu_basic_info:'每回合限一次。当你使用【杀】或普通锦囊牌选择唯一目标后,你可为此牌增加一名体力值/手牌数相同的额外目标(无距离限制),且该目标不可响应此牌。当此牌不因交换装备或移动至其他装备区而离开你的装备区后,销毁之。', + zhuangshu_basic_info:'当你受到伤害时,你可以弃置X张牌并防止此伤害(X为伤害值)。当此牌不因交换装备或移动至其他装备区而离开你的装备区后,销毁之。', zhuangshu_trick:'犀梳', zhuangshu_trick_bg:'犀', zhuangshu_trick_info:'判定阶段开始前,你可选择:①跳过此阶段。②跳过本回合的弃牌阶段。当此牌不因交换装备或移动至其他装备区而离开你的装备区后,销毁之。', @@ -16643,7 +16621,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhuangshu_equip_info:'锁定技。出牌阶段结束时,你将手牌摸至手牌上限(至多摸五张)。当此牌不因交换装备或移动至其他装备区而离开你的装备区后,销毁之。', ol_dongzhao:'董昭', olxianlve:'先略', - olxianlve_info:'①主公的回合开始时,你可声明并记录一个锦囊牌的名称并移除先前的记录。②其他角色使用〖先略〗记录过的锦囊牌后,你可摸两张牌并可以分配给任意其他角色,然后你可声明并记录一个锦囊牌的名称并移除先前的记录。', + olxianlve_info:'①主公的回合开始时,你可声明并记录一个锦囊牌的名称并移除先前的记录。②每回合限一次,其他角色使用〖先略〗记录过的锦囊牌后,你可摸两张牌并可以分配给任意其他角色,然后你可声明并记录一个锦囊牌的名称并移除先前的记录。', olzaowang:'造王', olzaowang2:'造王', olzaowang_info:'限定技。出牌阶段,你可以令一名角色加1点体力上限,回复1点体力并摸三张牌,且获得如下效果:主公死亡时,若其身份为忠臣,则其和主公交换身份牌;其死亡时,若其身份为反贼且伤害来源的身份为主公或忠臣,则以主忠胜利结束本局游戏。', diff --git a/character/sp2.js b/character/sp2.js index 26ca58ebe..bbfde0d1e 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:{ + re_chendeng:['male','qun',3,['refuyuan','reyingshui','rewangzu']], caojinyu:['female','wei',3,['yuqi','shanshen','xianjing']], hanmeng:['male','qun',4,['jieliang','quanjiu']], xinping:['male','qun',3,['fuyuan','zhongjie','yongdi']], @@ -123,6 +124,98 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, skill:{ + //陈登 + refuyuan:{ + audio:2, + trigger:{global:'useCardToTargeted'}, + logTarget:'target', + filter:function(event,player){ + return event.card.name=='sha'&&event.target.isIn()&&!game.hasPlayer2(function(current){ + return current.hasHistory('useCard',function(evt){ + return evt.card!=event.card&&get.color(evt.card,false)=='red'&&evt.targets&&evt.targets.contains(event.target); + }); + }); + }, + check:function(event,player){ + return get.attitude(player,event.target)>0; + }, + content:function(){ + trigger.target.draw(); + }, + }, + reyingshui:{ + audio:2, + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.countCards('he')>0&&game.hasPlayer((current)=>player.inRange(current)); + }, + position:'he', + filterCard:true, + filterTarget:function(card,player,target){ + return player.inRange(target); + }, + discard:false, + lose:false, + delay:false, + check:function(card){ + if(get.type(card)=='equip') return 3-get.value(card); + return 6.5-get.value(card); + }, + content:function(){ + 'step 0' + target.gain(cards,player,'giveAuto'); + 'step 1' + var next=target.chooseCard('he',2,'交给'+get.translation(player)+'两张装备牌,否则受到1点伤害',{type:'equip'}); + if(get.damageEffect(target,player,target)>=0) next.set('ai',()=>-1); + else next.set('ai',(card)=>6-get.value(card)); + 'step 2' + if(result.bool) player.gain(result.cards,target,'giveAuto'); + else target.damage('nocard'); + }, + ai:{ + order:5, + tag:{ + damage:0.5, + }, + result:{ + target:-1.5, + }, + }, + }, + rewangzu:{ + audio:2, + trigger:{player:'damageBegin1'}, + direct:true, + filter:function(event,player){ + return player.hasCard((card)=>lib.filter.cardDiscardable(card,player,'rewangzu'),'he'); + }, + usable:1, + content:function(){ + 'step 0' + var num=player.getFriends().length; + if(!game.hasPlayer(function(current){ + return current!=player&¤t.getFriends().length>num; + })){ + player.chooseToDiscard('he',get.prompt('rewangzu'),'弃置一张牌并令伤害-1').set('ai',function(card){ + return 7-get.value(card); + }).logSkill='rewangzu'; + } + else{ + player.chooseBool(get.prompt('rewangzu'),'随机弃置一张牌并令伤害-1'); + } + 'step 1' + if(result.bool){ + trigger.num--; + if(!result.cards||!result.cards.length){ + player.logSkill('rewangzu'); + var cards=player.getCards('he',(card)=>lib.filter.cardDiscardable(card,player,'rewangzu')); + if(cards.length) player.discard(cards.randomGet()); + } + } + else player.storage.counttrigger.rewangzu--; + }, + }, //曹金玉 yuqi:{ audio:2, @@ -2754,7 +2847,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{source:'damageSource'}, logTarget:'player', filter:function(event,player){ - return event.player.countCards('h')>0&&player.isPhaseUsing(); + return event.player.isDamaged()&&event.player.countCards('h')>0&&player.isPhaseUsing(); }, check:function(event,player){ if(player.hp==1&&player.isHealthy()) return false; @@ -2762,19 +2855,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ 'step 0' - player.choosePlayerCard(trigger.player,'h',true); + player.choosePlayerCard(trigger.player,'h',true,trigger.player.getDamagedHp()); 'step 1' - var card=result.cards[0]; - event.card=card; + var card=result.cards; + event.cards=card; player.showCards(card,get.translation(player)+'发动了【宼略】'); 'step 2' - var target=trigger.player,type=get.type2(card,target); - if((type=='basic'||type=='trick')&&get.tag(card,'damage')>0) player.gain(card,target,'give'); - 'step 3' - if(get.color(card,trigger.player)=='red'){ - player[player.isDamaged()?'loseMaxHp':'loseHp'](); - player.draw(2); + var gains=[],red=false; + var target=trigger.player; + for(var card of cards){ + var type=get.type2(card,target); + if((type=='basic'||type=='trick')&&get.tag(card,'damage')>0) gains.push(card); + if(!red&&get.color(card,target)=='red') red=true; } + if(gains.length) player.gain(gains,'gain2'); + if(!red) event.finish(); + 'step 3' + player[player.isDamaged()?'loseMaxHp':'loseHp'](); + player.draw(2); }, }, qljsuiren:{ @@ -3106,16 +3204,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ enable:'phaseUse', usable:1, filter:function(event,player){ - return player.hp>0&&player.countCards('h')>0; + return player.maxHp>0&&player.countCards('h')>0; }, filterCard:true, position:'h', filterTarget:lib.filter.notMe, selectTarget:function(){ - return [1,_status.event.player.hp]; + return [1,_status.event.player.maxHp]; }, check:function(card){ - return 2*(_status.event.player.hp+2)-get.value(card); + return 2*(_status.event.player.maxHp+2)-get.value(card); }, content:function(){ 'step 0' @@ -3488,9 +3586,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else event.finish(); 'step 2' if(result.bool&&result.cards&&result.cards.length){ - target.$give(result.cards[0],player); + var card=result.cards[0]; + target.$give(card,player); game.delayx(); - player.addJudge(result.cards[0]); + var name=card.viewAs||card.name; + if(card.name!=name){ + player.addJudge(name,card); + } + else{ + player.addJudge(card); + } } }, }, @@ -11154,21 +11259,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.line(target,'green'); game.log(target,'成为了','【点虎】','的目标'); target.storage.xinfu_dianhu2=player; - target.addSkill('xinfu_dianhu2'); + target.addTempSkill('xinfu_dianhu2',{player:'die'}); } }, }, - "xinfu_dianhu2":{ + xinfu_dianhu2:{ mark:"character", intro:{ content:"当你受到来自$的伤害或回复体力后,$摸一张牌", }, nopop:true, trigger:{ - player:["damageAfter","recoverAfter"], + player:["damageEnd","recoverEnd"], }, forced:true, popup:false, + charlotte:true, filter:function(event,player){ if(player.storage.xinfu_dianhu2&&player.storage.xinfu_dianhu2.isIn()){ if(event.name=='damage') return event.source==player.storage.xinfu_dianhu2; @@ -11556,7 +11662,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ fanchou:['fanchou','ns_fanchou'], zhangji:['zhangji','ns_zhangji'], zhangchangpu:['zhangchangpu','sp_zhangchangpu','ol_zhangchangpu'], - huangfusong:['huangfusong','old_huangfusong'], + huangfusong:['huangfusong','sp_huangfusong','old_huangfusong'], wenyang:['wenyang','db_wenyang','diy_wenyang'], dingyuan:['ol_dingyuan','dingyuan'], quyi:['quyi','re_quyi'], @@ -11573,6 +11679,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ panshu:['panshu','re_panshu'], nanhualaoxian:['re_nanhualaoxian','nanhualaoxian'], kanze:['re_kanze','kanze'], + yangwan:['yangwan','sp_yangwan'], + chendeng:['re_chendeng','chendeng'], }, translate:{ lijue:"李傕", @@ -12033,7 +12141,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhuihuan_info:'结束阶段开始时,你可以选择一名角色(对其他角色不可见)。记录所有对该角色造成过伤害的角色。该角色的下个准备阶段开始时停止记录,且所有记录过的角色:若体力值大于该角色,则受到其造成的2点伤害;若体力值小于等于该角色,则随机弃置两张手牌。', re_dongcheng:'董承', xuezhao:'血诏', - xuezhao_info:'出牌阶段限一次,你可弃置一张手牌并选择至多X名其他角色(X为你的体力值)。这些角色依次选择是否交给你一张牌,若选择是,该角色摸一张牌且你本回合可多使用一张【杀】;若选择否,该角色本回合无法响应你使用的牌。', + xuezhao_info:'出牌阶段限一次,你可弃置一张手牌并选择至多X名其他角色(X为你的体力上限)。这些角色依次选择是否交给你一张牌,若选择是,该角色摸一张牌且你本回合可多使用一张【杀】;若选择否,该角色本回合无法响应你使用的牌。', re_hucheer:'胡车儿', redaoji:'盗戟', redaoji2:'盗戟', @@ -12047,7 +12155,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ qingtan_info:'出牌阶段限一次,你可令所有有手牌的角色同时选择一张手牌并同时展示。你可以获得其中一种花色的牌,然后展示此花色牌的角色各摸一张牌。若如此做,弃置其他的牌。', qiuliju:'丘力居', koulve:'寇略', - koulve_info:'当你于出牌阶段内对其他角色造成伤害后,你可以展示其一张手牌。若此牌:为带有伤害标签的基本牌或锦囊牌,则你获得之;为红色牌,你失去1点体力(若已受伤则改为减1点体力上限),然后摸两张牌。', + koulve_info:'当你于出牌阶段内对其他角色造成伤害后,你可以展示其X张手牌(X为其已损失的早)。若这些牌中:有带有伤害标签的基本牌或锦囊牌,则你获得之;有红色牌,则你失去1点体力(若已受伤则改为减1点体力上限),然后摸两张牌。', qljsuiren:'随认', qljsuiren_info:'当你死亡时,你可以将手牌中所有的带有伤害标签的基本牌或锦囊牌交给一名其他角色。', re_dongbai:'董白', @@ -12183,6 +12291,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shanshen_info:'当有角色死亡时,你可令你的〖隅泣〗中的一个具有颜色的数字+2。然后若你未对该角色造成过伤害,则你回复1点体力。', xianjing:'娴静', xianjing_info:'准备阶段,你可令你的〖隅泣〗中的一个具有颜色的数字+1。若你的体力值等于体力上限,则你可以重复一次此流程。', + re_chendeng:'陈登', + refuyuan:'扶援', + refuyuan_info:'一名角色成为【杀】的目标后,若其本回合内没有成为过其他红色牌的目标,则你可以令其摸一张牌。', + reyingshui:'营说', + reyingshui_info:'出牌阶段限一次,你可将一张牌交给攻击范围内的一名其他角色,然后其选择一项:①交给你至少两张装备牌。②受到1点伤害。', + rewangzu:'望族', + rewangzu_info:'每回合限一次。当你受到其他角色造成的伤害时,你可随机弃置一张牌,令此伤害-1。若你所在阵营的存活角色数是全场最多的,则你可以自行选择弃置的牌。', sp_whlw:"文和乱武", sp_zlzy:"逐鹿中原", diff --git a/character/tw.js b/character/tw.js index bbdcdf5b1..7e3ba5d17 100644 --- a/character/tw.js +++ b/character/tw.js @@ -196,7 +196,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ case 'equip2': target.draw(); break; - case 'equip3': + case 'equip3': case 'equip4': case 'equip6': target.recover(); break; } @@ -384,7 +384,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 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; + return current!=player&¤t!=target&¤t.hp<=player.hp; }); if(!list.length){ player.loseHp(); @@ -400,7 +400,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 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); 'step 1' if(result.bool){ player.gain(result.cards,target,'giveAuto'); @@ -424,11 +424,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var target=event.getParent()._target; event.target=target; event.num=num; - var bool1=target.canUse('sha',player,false),bool2=target.canUse('juedou',player,false); - if(bool1&&bool2) target.chooseControl('sha','juedou').set('prompt','谋诛:视为对'+get.translation(player)+'使用一张…').set('prompt2','(伤害值基数:'+num+')').set('ai',function(){ - var player=_status.event.player,target=_status.event.getParent().player; - if(!target.hasShan()&&get.effect(target,{name:'sha'},player,player)>0) return 'sha'; - if(get.effect(target,{name:'juedou'},player,player)>0) return 'juedou'; + var bool1=player.canUse('sha',target,false),bool2=player.canUse('juedou',target,false); + if(bool1&&bool2) target.chooseControl('sha','juedou').set('prompt','谋诛:视为被'+get.translation(player)+'使用一张…').set('prompt2','(伤害值基数:'+num+')').set('ai',function(){ + var target=_status.event.player,player=_status.event.getParent().player; + if(target.hasShan()||get.effect(target,{name:'sha'},player,target)>0) return 'sha'; + if(get.effect(target,{name:'juedou'},player,target)>0) return 'juedou'; return 'sha'; }); else if(bool1) event._result={control:'sha'}; @@ -436,10 +436,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else event.finish(); } 'step 1' - if(result.control&&lib.card[result.control]) target.useCard({ + if(result.control&&lib.card[result.control]) player.useCard({ name:result.control, isCard:true, - },false,player).baseDamage=num; + },false,target).baseDamage=num; }, }, twyanhuo:{ @@ -2148,7 +2148,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ twdaoji_info:'出牌阶段限一次,你可以弃置一张非基本牌并选择一名攻击范围内的角色,获得其一张牌。若你以此法获得的牌为:基本牌,你摸一张牌;装备牌,你使用此牌并对其造成1点伤害。', tw_hejin:'TW何进', twmouzhu:'谋诛', - twmouzhu_info:'出牌阶段限一次,你可以选择一名其他角色A。你令除A外所有体力值小于等于A的其他角色依次选择是否交给你一张牌。若你以此法获得的牌数X:等于0,你和所有进行选择的角色依次失去1点体力。大于0,你令A选择视为对你使用一张伤害值基数为X的【杀】或【决斗】。', + twmouzhu_info:'出牌阶段限一次,你可以选择一名其他角色A。你令除A外所有体力值小于等于你的其他角色依次选择是否交给你一张牌。若你以此法获得的牌数X:等于0,你和所有进行选择的角色依次失去1点体力。大于0,你令A选择由你视为对其使用一张伤害值基数为X的【杀】或【决斗】。', twyanhuo:'延祸', twyanhuo_info:'当你死亡时,你可以选择一项:①令一名其他角色弃置X张牌。②令X名其他角色依次弃置一张牌。(X为你的牌数)', tw_mayunlu:'TW马云禄', diff --git a/character/yijiang.js b/character/yijiang.js index 83cd09831..c6cfdd40c 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -196,6 +196,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ skill:{ //孙体 xinzhaofu:{ + mark:false, + init:function(player){ + if(player.hasZhuSkill('xinzhaofu')){ + player.markSkill('xinzhaofu'); + player.storage.xinzhaofu=false; + } + }, audio:'zhaofu', enable:'phaseUse', usable:1, @@ -12203,7 +12210,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sunluban:['re_sunluban','xin_sunluban','sunluban'], zhuhuan:['zhuhuan','old_zhuhuan'], caoxiu:['re_caoxiu','caoxiu','old_caoxiu'], - //xiahoushi:['xiahoushi','sp_xiahoushi'], + xiahoushi:['re_xiahoushi','xiahoushi'], zhangyi:['re_zhangyi','zhangyi'], quancong:['re_quancong','quancong','old_quancong'], sunxiu:['re_sunxiu','sunxiu'], @@ -12218,6 +12225,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ guanping:['re_guanping','guanping'], caifuren:['xin_caifuren','re_caifuren','caifuren'], guyong:['re_guyong','xin_guyong','guyong'], + yj_jushou:['xin_jushou','yj_jushou'], }, translate:{ old_huaxiong:'华雄', @@ -12574,7 +12582,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shibei:'矢北', shibei_info:'锁定技,当你受到伤害后:若此伤害是你本回合第一次受到的伤害,则你回复1点体力;否则你失去1点体力。', jianying:'渐营', - jianying_info:'当你于出牌阶段内使用与此阶段你使用的上一张牌点数或花色相同的牌时,你可以摸一张牌', + jianying_info:'当你于出牌阶段内使用与此阶段你使用的上一张牌点数或花色相同的牌时,你可以摸一张牌。', xinenyuan:'恩怨', xinenyuan2:'恩怨', xinenyuan_info:'当你获得一名其他角色两张或更多的牌后,你可以令其摸一张牌;当你受到1点伤害后,你可以令伤害来源选择一项:1、将一张手牌交给你;2、失去1点体力。', diff --git a/game/asset.js b/game/asset.js index 2b2a943c3..b1bba0b7f 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'v1.9.112.1', + 'v1.9.112.2', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -4279,6 +4279,9 @@ window.noname_asset_list=[ 'image/card/yitianjian.png', 'image/card/yonglv.png', 'image/card/zhanxiang.png', + 'image/card/zhuangshu_basic.png', + 'image/card/zhuangshu_trick.png', + 'image/card/zhuangshu_equip.png', 'image/character/shenpei.jpg', 'image/character/re_menghuo.jpg', @@ -4787,6 +4790,14 @@ window.noname_asset_list=[ 'image/character/xin_yufan.jpg', 'image/character/xinchang.jpg', 'image/character/xuangongzhu.jpg', + 'image/character/liucheng.jpg', + 'image/character/re_chendeng.jpg', + 'image/character/re_xiahoushi.jpg', + 'image/character/sp_huangfusong.jpg', + 'image/character/sp_lvfan.jpg', + 'image/character/sp_yangwan.jpg', + 'image/character/xin_jushou.jpg', + 'image/character/yj_huangzhong.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', diff --git a/game/game.js b/game/game.js index a39a06a72..49cee12c7 100644 --- a/game/game.js +++ b/game/game.js @@ -56,6 +56,7 @@ characterReplace:{}, dynamicTranslate:{}, cardPack:{}, + skin:{}, onresize:[], onphase:[], onwash:[], @@ -10363,6 +10364,13 @@ group_qun_bg:"群", group_key_bg:"键", group_jin_bg:"晋", + zhengsu:'整肃', + zhengsu_leijin:'擂进', + zhengsu_bianzhen:'变阵', + zhengsu_mingzhi:'鸣止', + zhengsu_leijin_info:'回合内所有于出牌阶段使用的牌点数递增且不少于三张。', + zhengsu_bianzhen_info:'回合内所有于出牌阶段使用的牌花色相同且不少于两张。', + zhengsu_mingzhi_info:'回合内所有于弃牌阶段弃置的牌花色均不相同且不少于两张。', }, element:{ content:{ @@ -12244,7 +12252,10 @@ if(!event.cancelled&&!event.nojudge) player.judge(event.card).set('type','phase'); "step 3" var name=event.card.viewAs||event.card.name; - if(event.cancelled&&!event.direct){ + if(event.excluded){ + delete event.excluded; + } + else if(event.cancelled&&!event.direct){ if(lib.card[name].cancel){ var next=game.createEvent(name+'Cancel'); next.setContent(lib.card[name].cancel); @@ -14842,21 +14853,21 @@ else{ player.stat[player.stat.length-1].card[card.name]++; } - if(event.skill){ - if(player.stat[player.stat.length-1].skill[event.skill]==undefined){ - player.stat[player.stat.length-1].skill[event.skill]=1; + } + if(event.skill){ + if(player.stat[player.stat.length-1].skill[event.skill]==undefined){ + player.stat[player.stat.length-1].skill[event.skill]=1; + } + else{ + player.stat[player.stat.length-1].skill[event.skill]++; + } + var sourceSkill=get.info(event.skill).sourceSkill; + if(sourceSkill){ + if(player.stat[player.stat.length-1].skill[sourceSkill]==undefined){ + player.stat[player.stat.length-1].skill[sourceSkill]=1; } else{ - player.stat[player.stat.length-1].skill[event.skill]++; - } - var sourceSkill=get.info(event.skill).sourceSkill; - if(sourceSkill){ - if(player.stat[player.stat.length-1].skill[sourceSkill]==undefined){ - player.stat[player.stat.length-1].skill[sourceSkill]=1; - } - else{ - player.stat[player.stat.length-1].skill[sourceSkill]++; - } + player.stat[player.stat.length-1].skill[sourceSkill]++; } } } @@ -18236,7 +18247,7 @@ } if(i=='ghujia'||((!this.marks[i].querySelector('.image')||this.storage[i+'_markcount'])&& lib.skill[i]&&lib.skill[i].intro&&!lib.skill[i].intro.nocount&& - (this.storage[i]||lib.skill[i].intro.markcount))){ + (this.storage[i]||this.storage[i+'_markcount']||lib.skill[i].intro.markcount))){ this.marks[i].classList.add('overflowmark') var num=0; if(typeof lib.skill[i].intro.markcount=='function'){ @@ -18834,7 +18845,7 @@ },this,time); return this; }, - setIdentity:function(identity){ + setIdentity:function(identity,nature){ if(!identity) identity=this.identity; if(get.is.jun(this)){ this.node.identity.firstChild.innerHTML='君'; @@ -18842,7 +18853,7 @@ else{ this.node.identity.firstChild.innerHTML=get.translation(identity); } - this.node.identity.dataset.color=identity; + this.node.identity.dataset.color=nature||identity; return this; }, insertPhase:function(skill,insert){ @@ -25992,6 +26003,9 @@ type:"equip", subtype:"equip5", }, + zhengsu_leijin:{}, + zhengsu_mingzhi:{}, + zhengsu_bianzhen:{}, disable_judge:{}, group_wei:{fullskin:true}, group_shu:{fullskin:true}, @@ -26534,6 +26548,180 @@ } }, skill:{ + zhengsu:{ + trigger:{player:'phaseDiscardEnd'}, + forced:true, + charlotte:true, + filter:function(event,player){ + return (player.storage.zhengsu_leijin||player.storage.zhengsu_bianzhen||player.storage.zhengsu_mingzhi); + }, + content:function(){ + player.chooseDrawRecover(2,'整肃奖励:摸两张牌或回复1点体力'); + }, + subSkill:{ + leijin:{ + mark:true, + trigger:{player:'useCard1'}, + lastDo:true, + charlotte:true, + forced:true, + popup:false, + onremove:true, + filter:function(event,player){ + return player.isPhaseUsing()&&player.storage.zhengsu_leijin!==false; + }, + content:function(){ + var list=player.getHistory('useCard',function(evt){ + return evt.isPhaseUsing(player); + }); + var goon=true; + for(var i=0;i0){ + var num2=get.number(list[i-1].card); + if(typeof num2!='number'||num2>=num){ + goon=false; + break; + } + } + } + if(!goon){ + game.broadcastAll(function(player){ + player.storage.zhengsu_leijin=false; + if(player.marks.zhengsu_leijin) player.marks.zhengsu_leijin.firstChild.innerHTML='╳'; + delete player.storage.zhengsu_leijin_markcount; + },player); + } + else{ + if(list.length>2){ + game.broadcastAll(function(player,num){ + if(player.marks.zhengsu_leijin) player.marks.zhengsu_leijin.firstChild.innerHTML='○'; + player.storage.zhengsu_leijin=true; + player.storage.zhengsu_leijin_markcount=num; + },player,num); + } + else game.broadcastAll(function(player,num){ + player.storage.zhengsu_leijin_markcount=num; + },player,num); + } + player.markSkill('zhengsu_leijin'); + }, + intro:{ + content:'
  • 条件:回合内所有于出牌阶段使用的牌点数递增且不少于三张。', + }, + }, + bianzhen:{ + mark:true, + trigger:{player:'useCard1'}, + firstDo:true, + charlotte:true, + forced:true, + popup:false, + onremove:true, + filter:function(event,player){ + return player.isPhaseUsing()&&player.storage.zhengsu_bianzhen!==false; + }, + content:function(){ + var list=player.getHistory('useCard',function(evt){ + return evt.isPhaseUsing(); + }); + var goon=true,suit=get.suit(list[0].card,false); + if(suit=='none'){ + goon=false; + } + else{ + for(var i=1;i1){ + game.broadcastAll(function(player){ + if(player.marks.zhengsu_bianzhen) player.marks.zhengsu_bianzhen.firstChild.innerHTML='○'; + player.storage.zhengsu_bianzhen=true; + },player); + } + else game.broadcastAll(function(player,suit){ + if(player.marks.zhengsu_bianzhen) player.marks.zhengsu_bianzhen.firstChild.innerHTML=get.translation(suit); + },player,suit); + } + player.markSkill('zhengsu_bianzhen'); + }, + intro:{ + content:'
  • 条件:回合内所有于出牌阶段使用的牌花色相同且不少于两张。', + }, + }, + mingzhi:{ + mark:true, + trigger:{player:'loseAfter'}, + firstDo:true, + charlotte:true, + forced:true, + popup:false, + onremove:true, + filter:function(event,player){ + if(player.storage.zhengsu_mingzhi===false||event.type!='discard') return false; + var evt=event.getParent('phaseDiscard'); + return evt&&evt.player==player; + }, + content:function(){ + var goon=true,list=[]; + player.getHistory('lose',function(event){ + if(!goon||event.type!='discard') return false; + var evt=event.getParent('phaseDiscard'); + if(evt&&evt.player==player){ + for(var i of event.cards2){ + var suit=get.suit(i,player); + if(list.contains(suit)){ + goon=false; + break; + } + else list.push(suit); + } + } + }); + if(!goon){ + game.broadcastAll(function(player){ + player.storage.zhengsu_mingzhi=false; + if(player.marks.zhengsu_mingzhi) player.marks.zhengsu_mingzhi.firstChild.innerHTML='╳'; + delete player.storage.zhengsu_mingzhi_list; + },player); + } + else{ + if(list.length>1){ + game.broadcastAll(function(player,list){ + if(player.marks.zhengsu_mingzhi) player.marks.zhengsu_mingzhi.firstChild.innerHTML='○'; + player.storage.zhengsu_mingzhi=true; + player.storage.zhengsu_mingzhi_list=list; + player.storage.zhengsu_mingzhi_markcount=list.length; + },player,list); + } + else game.broadcastAll(function(player,list){ + player.storage.zhengsu_mingzhi_list=list; + player.storage.zhengsu_mingzhi_markcount=list.length; + },player,list); + } + player.markSkill('zhengsu_mingzhi'); + }, + intro:{ + content:'
  • 条件:回合内所有于弃牌阶段弃置的牌花色均不相同且不少于两张。', + }, + }, + }, + }, renku:{ intro:{ markcount:function(){ @@ -48311,8 +48499,8 @@ if(typeof get.info(event.skill).viewAs=='function') event.result.card=get.info(event.skill).viewAs(event.result.cards,event.player); else event.result.card=get.copy(get.info(event.skill).viewAs); if(event.result.cards.length==1&&event.result.card){ - event.result.card.suit=get.suit(event.result.cards[0]); - event.result.card.number=get.number(event.result.cards[0]); + if(!event.result.card.suit) event.result.card.suit=get.suit(event.result.cards[0]); + if(!event.result.card.number) event.result.card.number=get.number(event.result.cards[0]); } if(event.skillDialog&&get.objtype(event.skillDialog)=='div'){ event.skillDialog.close(); diff --git a/game/update.js b/game/update.js index b59d72842..2353d2453 100644 --- a/game/update.js +++ b/game/update.js @@ -1,8 +1,9 @@ window.noname_update={ - version:'1.9.112.1', - update:'1.9.112.0.1', + version:'1.9.112.2', + update:'1.9.112.1', changeLog:[ - '新武将', + '界夏侯氏、陈登', + '界沮授、吕范、皇甫嵩、星黄忠、手杀杨婉、刘赪', 'bug修复', ], files:[ @@ -17,7 +18,7 @@ window.noname_update={ //'card/swd.js', //'card/yunchou.js', //'card/yingbian.js', - //'card/yongjian.js', + 'card/yongjian.js', //'card/zhenfa.js', //'card/zhulu.js', //'character/diy.js', @@ -33,15 +34,15 @@ window.noname_update={ //'character/ow.js', 'character/rank.js', 'character/refresh.js', - 'character/shenhua.js', + //'character/shenhua.js', 'character/sp.js', 'character/sp2.js', 'character/tw.js', - 'character/standard.js', + //'character/standard.js', //'character/swd.js', //'character/xianjian.js', //'character/xinghuoliaoyuan.js', - 'character/yingbian.js', + //'character/yingbian.js', 'character/yijiang.js', //'character/yxs.js', //'extension/boss/extension.js', @@ -51,7 +52,7 @@ window.noname_update={ //'layout/nova/layout.css', //'layout/mobile/equip.css', 'mode/boss.js', - //'mode/brawl.js', + 'mode/brawl.js', //'mode/chess.js', //'mode/connect.js', //'mode/doudizhu.js', diff --git a/image/card/zhuangshu_basic.png b/image/card/zhuangshu_basic.png new file mode 100644 index 000000000..524a05826 Binary files /dev/null and b/image/card/zhuangshu_basic.png differ diff --git a/image/card/zhuangshu_equip.png b/image/card/zhuangshu_equip.png new file mode 100644 index 000000000..690d0ce93 Binary files /dev/null and b/image/card/zhuangshu_equip.png differ diff --git a/image/card/zhuangshu_trick.png b/image/card/zhuangshu_trick.png new file mode 100644 index 000000000..1066149ff Binary files /dev/null and b/image/card/zhuangshu_trick.png differ diff --git a/image/character/liucheng.jpg b/image/character/liucheng.jpg new file mode 100644 index 000000000..1a3450ecb Binary files /dev/null and b/image/character/liucheng.jpg differ diff --git a/image/character/re_chendeng.jpg b/image/character/re_chendeng.jpg new file mode 100644 index 000000000..01f05031d Binary files /dev/null and b/image/character/re_chendeng.jpg differ diff --git a/image/character/re_xiahoushi.jpg b/image/character/re_xiahoushi.jpg new file mode 100644 index 000000000..c4cfa105a Binary files /dev/null and b/image/character/re_xiahoushi.jpg differ diff --git a/image/character/sp_huangfusong.jpg b/image/character/sp_huangfusong.jpg new file mode 100644 index 000000000..881925933 Binary files /dev/null and b/image/character/sp_huangfusong.jpg differ diff --git a/image/character/sp_lvfan.jpg b/image/character/sp_lvfan.jpg new file mode 100644 index 000000000..af5079bcd Binary files /dev/null and b/image/character/sp_lvfan.jpg differ diff --git a/image/character/sp_yangwan.jpg b/image/character/sp_yangwan.jpg new file mode 100644 index 000000000..d04a80051 Binary files /dev/null and b/image/character/sp_yangwan.jpg differ diff --git a/image/character/xin_jushou.jpg b/image/character/xin_jushou.jpg new file mode 100644 index 000000000..d20fe4ae1 Binary files /dev/null and b/image/character/xin_jushou.jpg differ diff --git a/image/character/yj_huangzhong.jpg b/image/character/yj_huangzhong.jpg new file mode 100644 index 000000000..b8ab62eb6 Binary files /dev/null and b/image/character/yj_huangzhong.jpg differ diff --git a/mode/boss.js b/mode/boss.js index 5cf44b705..610f8c992 100644 --- a/mode/boss.js +++ b/mode/boss.js @@ -9628,7 +9628,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ boss_chujiangwang:'楚江王·厉温', boss_bingfeng:'冰封', boss_bingfeng_info:'锁定技,你死亡时,若杀死你的角色武将牌是正面朝上, 你令其翻面。', - boss_songdiwang:'余懃', + boss_songdiwang:'宋帝王·余懃', boss_heisheng:'黑绳', boss_heisheng_info:'锁定技,你死亡时,横置所有场上角色。', boss_shengfu:'绳缚', diff --git a/mode/brawl.js b/mode/brawl.js index e7bee2412..d7fa9265e 100644 --- a/mode/brawl.js +++ b/mode/brawl.js @@ -3704,6 +3704,30 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, }, }, + { + name:'雒城之战', + place:[true,false,false,true], + character:['liubei','re_wuyi','zhangren','pangtong'], + lib:{ + character:{ + liubei:['male','shu',4,['rezhijian','jijiu','reyingzi'],[]], + re_wuyi:['male','qun',4,['weijing','rerende'],[]], + zhangren:['male','qun',4,['shefu','gnsheque'],[]], + pangtong:['male','shu',3,['dujin'],[]], + }, + translate:{ + liubei:'雒城刘备', + re_wuyi:'雒城吴懿', + zhangren:'雒城张任', + pangtong:'雒城庞统', + rezhijian:'厚恩', + zhijian:'厚恩', + jijiu:'驰援', + reyingzi:'征令', + rerende:'遣军', + }, + }, + }, ]; if(_status.keyVerified) list=[ { diff --git a/mode/doudizhu.js b/mode/doudizhu.js index efa7e9e91..5d00f8965 100644 --- a/mode/doudizhu.js +++ b/mode/doudizhu.js @@ -486,7 +486,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ if(player==game.zhu){ player.addSkill(game.zhuSkill); } - else player.addSkill(['binglin_shaxue','binglin_neihong']); + else player.addSkill('binglin_neihong'); } game.zhu.hp++; game.zhu.maxHp++; @@ -1809,10 +1809,13 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ zhuSkill_xiangyang:'襄阳', zhuSkill_xiangyang_info:'回合结束时,你可获得一个额外的出牌阶段或摸牌阶段。', zhuSkill_jiangling:'江陵', - zhuSkill_jiangling_info:'当你使用【杀】或普通锦囊牌选择唯一目标时,你可为此牌增加一个目标(该目标不可响应此牌)。', + zhuSkill_jiangling0:'江陵', + zhuSkill_jiangling1:'江陵', + zhuSkill_jiangling_info:'出牌阶段开始时,你可选择一项:①本阶段内使用【杀】或普通锦囊牌选择唯一目标时可增加一个目标。②本阶段内使用【杀】或普通锦囊牌无次数限制。', zhuSkill_fancheng:'樊城', - zhuSkill_fancheng2:'樊城', - zhuSkill_fancheng_info:'限定技,出牌阶段,你可摸X张牌获得如下效果直到回合结束:每回合限X次,当你造成伤害时,此伤害+1(X为游戏轮数)。', + zhuSkill_fancheng0:'樊城', + zhuSkill_fancheng1:'樊城', + zhuSkill_fancheng_info:'限定技,出牌阶段,你可选择获得一项效果直到游戏结束:①因执行【杀】的效果而对其他角色造成的伤害+1。②对其他角色造成的渠道不为【杀】的伤害+1。', binglin_shaxue:'歃血', binglin_shaxue_info:'锁定技,每局游戏限三次,当你受到队友造成的伤害时,你防止此伤害。', binglin_neihong:'内讧', @@ -1952,6 +1955,21 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, }, zhuSkill_jiangling:{ + trigger:{player:'phaseUseBegin'}, + direct:true, + charlotte:true, + content:function(){ + 'step 0' + player.chooseControl('加目标','多刀','取消').set('prompt',get.prompt2('zhuSkill_jiangling')).set('ai',()=>(3-game.countPlayer())); + 'step 1' + if(result.index<2){ + player.logSkill('zhuSkill_jiangling'); + player.addTempSkill('zhuSkill_jiangling'+result.index,'phaseUseAfter'); + game.log(player,'选择了','#y'+result.control,'的效果'); + } + }, + }, + zhuSkill_jiangling0:{ trigger:{player:'useCard2'}, direct:true, charlotte:true, @@ -1994,12 +2012,20 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ player.logSkill('zhuSkill_jiangling',event.targets); if(trigger.targets.contains(event.targets[0])) trigger.targets.removeArray(event.targets); else{ - trigger.directHit.addArray(event.targets); + //trigger.directHit.addArray(event.targets); trigger.targets.addArray(event.targets); } } }, }, + zhuSkill_jiangling1:{ + charlotte:true, + mod:{ + cardUsable:function(card,player){ + if(card.name=='sha'||get.type(card)=='trick') return Infinity; + }, + }, + }, zhuSkill_fancheng:{ enable:'phaseUse', limited:true, @@ -2007,24 +2033,47 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ skillAnimation:true, animationColor:'gray', content:function(){ - player.draw(game.roundNumber); + 'step 0' player.awakenSkill('zhuSkill_fancheng'); - player.addTempSkill('zhuSkill_fancheng2'); + player.chooseControl('杀','其他').set('prompt','选择要强化的伤害').set('ai',()=>get.rand(0,1)); + 'step 1' + player.addSkill('zhuSkill_fancheng'+result.index); + game.log(player,'本局游戏内',result.index?'#g杀以外':'#y杀','的伤害+1'); + }, + ai:{ + order:100, + result:{player:100}, }, }, - zhuSkill_fancheng2:{ + zhuSkill_fancheng0:{ trigger:{source:'damageBegin2'}, forced:true, charlotte:true, - onremove:true, filter:function(event,player){ - return player.countMark('zhuSkill_fancheng2')0) player.draw(num); 'step 4' if(trigger.player.isIn()){ - var target=trigger.player,tao=(lib.filter.cardEnabled({name:'tao',isCard:true},player)&&lib.filter.targetEnabled2({name:'tao',isCard:true},player,target)),sha=game.filterPlayer(function(current){ + var target=trigger.player,tao=(lib.filter.cardEnabled({name:'tao',isCard:true},player,'forceEnable')&&lib.filter.targetEnabled2({name:'tao',isCard:true},player,target)),sha=game.filterPlayer(function(current){ return current!=target&¤t!=player&&target.canUse({name:'sha',nature:'thunder',isCard:true},current,false); }); if(sha.length){ @@ -5367,7 +5367,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ event.targets=result.targets; event.players=game.filterPlayer(function(current){ if(current==player) return false; - return current.isFriendOf(player)||current.isUnseen(); + return current.isFriendOf(player)||(player.identity!='ye'&¤t.isUnseen()); }).sort(lib.sort.seat); event.num=0; event.filterName=function(name){ @@ -8324,12 +8324,13 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } 'step 2' target.storage.gzxiongsuan_restore=result.control; - target.addTempSkill('gzxiongsuan_restore','phaseZhunbeiBegin'); + target.addTempSkill('gzxiongsuan_restore'); }, subSkill:{ restore:{ trigger:{global:'phaseAfter'}, silent:true, + charlotte:true, content:function(){ player.restoreSkill(player.storage.gzxiongsuan_restore); } @@ -10197,23 +10198,29 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }); 'step 6' if(result.bool){ - game.broadcastAll(function(player,target){ - player.say('加入'); - player.identity='ye'; - player.setIdentity('ye'); - player.storage.yexinjia_friend=target; - },target,source); - target.markSkill('yexinjia_friend'); - source.removeMark('yexinjia_mark',1); - target.drawTo(4); - target.recover(); + target.chat('加入'); + if(!_status.yexinjia_list) _status.yexinjia_list=['夏','商','周','秦','汉','隋','唐','宋','辽','金','元','明']; + source.chooseControl(_status.yexinjia_list).set('prompt','请选择自己所属的野心家势力的标识').set('ai',()=>(_status.yexinjia_list?_status.yexinjia_list.randomGet():0)); } else{ target.chat('拒绝'); game.delay(1.5); if(targets.length) event.goto(5); + else event.goto(8); } 'step 7' + game.broadcastAll(function(player,target,text){ + player.identity='ye'; + source.setIdentity(text,'ye'); + player.setIdentity(text,'ye'); + player.storage.yexinjia_friend=target; + },target,source,result.control); + _status.yexinjia_list.remove(result.control); + target.markSkill('yexinjia_friend'); + source.removeMark('yexinjia_mark',1); + target.drawTo(4); + target.recover(); + 'step 8' if(event.targets2.length) event.goto(3); else delete _status.showYexings; });