diff --git a/character/huicui.js b/character/huicui.js index 86bf56dc2..5a6c57c2b 100644 --- a/character/huicui.js +++ b/character/huicui.js @@ -4,6 +4,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:'huicui', connect:true, character:{ + zangba:['male','wei',4,['rehengjiang']], dc_simashi:['male','wei',3,['dcsanshi','dczhenrao','dcchenlve']], dc_wangling:['male','wei',4,['dcjichou','dcmouli'],['clan:太原王氏']], dc_jiangji:['male','wei',3,['dcshiju','dcyingshi']], @@ -108,7 +109,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_baigei:['re_panfeng','xingdaorong','caoxing','re_chunyuqiong','xiahoujie','dc_caiyang','zhoushan'], sp_caizijiaren:['dc_kongrong','re_dongbai','re_sunluyu','heyan','zhaoyan','wangtao','wangyue','zhangxuan','tengyin','zhangyao','xiahoulingnv','dc_sunru','pangshanmin','kuaiqi'], sp_zhilan:['dc_liuli','liuyong','wanniangongzhu','zhanghu','lvlingqi','tenggongzhu','panghui','dc_zhaotongzhaoguang','yuantanyuanxiyuanshang','yuechen','dc_lingcao'], - sp_guixin:['re_kanze','re_chendeng','caimaozhangyun','dc_lvkuanglvxiang','dc_gaolan','yinfuren','chengui','chenjiao','dc_sp_jiaxu','qinlang','dc_dongzhao'], + sp_guixin:['zangba','re_kanze','re_chendeng','caimaozhangyun','dc_lvkuanglvxiang','dc_gaolan','yinfuren','chengui','chenjiao','dc_sp_jiaxu','qinlang','dc_dongzhao'], sp_daihan:['mamidi','dc_jiling','zhangxun','dc_yuejiu','wanglie','leibo','qiaorui','dongwan','yuanyin'], sp_jianghu:['guanning','huzhao','dc_huangchengyan','mengjie'], sp_zongheng:['huaxin','luyusheng','re_xunchen','re_miheng','fengxi','re_dengzhi','dc_yanghu','zongyu'], @@ -3675,7 +3676,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, filter:function(event,player){ if(event.dcgue||event.type=='wuxie'||player==_status.currentPhase) return false; - if(!player.countCards('h')||player.hasSkill('dcgue_blocker',null,null,false)) return false; + if(player.hasSkill('dcgue_blocker',null,null,false)) return false; for(var name of ['sha','shan']){ if(event.filterCard({name:name,isCard:true},player,event)) return true; } @@ -3707,7 +3708,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 0' player.logSkill('dcgue'); player.addTempSkill('dcgue_blocker'); - player.showHandcards(); + if(player.countCards('h')) player.showHandcards(); delete event.result.skill; 'step 1' if(player.countCards('h',{name:['sha','shan']})>1){ @@ -3722,7 +3723,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, prompt:function(links,player){ - return '展示所有手牌'+(player.countCards('h',{name:['sha','shan']})<=1?',然后视为使用【'+get.translation(links[0][2])+'】':''); + return (player.countCards?'展示所有手牌':'')+(player.countCards('h',{name:['sha','shan']})<=1?',然后视为使用【'+get.translation(links[0][2])+'】':''); } }, subSkill:{blocker:{charlotte:true}}, @@ -4982,7 +4983,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ source:'damageSource', player:'damageEnd', }, - usable:1, + usable:2, logTarget:'source', check:function(event,player){ if(typeof player.storage.dchaochong!='number'||player.storage.dchaochong==0) return true; @@ -5871,16 +5872,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dccuijin:{ audio:2, trigger:{global:'useCard'}, - direct:true, filter:function(event,player){ - return event.card.name=='sha'&&(event.player==player||player.inRange(event.player))&&player.countCards('he')>0; + return (event.card.name=='sha'||event.card.name=='juedou')&&(event.player==player||player.inRange(event.player))&&player.countCards('he')>0; }, + direct:true, content:function(){ 'step 0' if(player!=game.me&&!player.isOnline()) game.delayx(); var target=trigger.player; event.target=target; - player.chooseToDiscard('he',get.prompt('dccuijin',target),'弃置一张牌并令'+get.translation(trigger.player)+'使用的【杀】伤害+1,但若其未造成伤害,则你摸一张牌并对其造成1点伤害。').set('ai',function(card){ + player.chooseToDiscard('he',get.prompt('dccuijin',target),'弃置一张牌并令'+get.translation(trigger.player)+'使用的【杀】伤害+1,但若其未造成伤害,则你摸两张牌并对其造成1点伤害。').set('ai',function(card){ if(_status.event.goon) return 7-get.value(card); return 0; }).set('goon',lib.skill.cuijin.checkx(trigger,player)).logSkill=['dccuijin',target]; @@ -5938,7 +5939,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ })){ player.logSkill('dccuijin_damage',source); player.storage.dccuijin_map[card.cardid].remove(target); - player.draw(); + player.draw(2); if(source&&source.isIn()){ player.line(trigger.player,'green'); trigger.player.damage(); @@ -12523,7 +12524,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dcanliao_info:'出牌阶段限X次(X为群势力角色数)。你可以重铸一名角色的一张牌。', dc_yuejiu:'乐就', dccuijin:'催进', - dccuijin_info:'当你或你攻击范围内的角色使用【杀】时,你可以弃置一张牌,令此【杀】的伤害基数+1。然后当此杀被目标角色抵消或无效或防止伤害后,你摸一张牌,对使用者造成1点伤害。', + dccuijin_info:'当你或你攻击范围内的角色使用【杀】或【决斗】时,你可以弃置一张牌,令此【杀】的伤害基数+1。然后当此牌被目标角色抵消或无效或防止伤害后,你摸两张牌并对使用者造成1点伤害。', panghui:'庞会', dcyiyong:'异勇', dcyiyong_info:'当你对其他角色造成伤害时,若你有牌,你可以与其同时弃置至少一张牌。若你以此法弃置的牌的点数之和:不大于其,你摸X张牌;不小于其,此伤害+1(X为其以此法弃置的牌数)。', @@ -12574,7 +12575,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dchaochong:'昊宠', dchaochong_info:'当你使用牌后,你可以将手牌摸至或弃置至你的手牌上限数(至多摸五张)。然后若你以此法:得到牌,你的手牌上限-1;失去牌,你的手牌上限+1。', dcjinjin:'矜谨', - dcjinjin_info:'每回合限一次。当你造成或受到伤害后,你可以重置因〖昊宠〗增加或减少的手牌上限,令伤害来源弃置至多X张牌,然后你摸Y张牌(X为你以此法变化的手牌上限且至少为1,Y为X减其以此法弃置的牌数)。', + dcjinjin_info:'每回合限两次。当你造成或受到伤害后,你可以重置因〖昊宠〗增加或减少的手牌上限,令伤害来源弃置至多X张牌,然后你摸Y张牌(X为你以此法变化的手牌上限且至少为1,Y为X减其以此法弃置的牌数)。', xianglang:'向朗', dckanji:'勘集', dckanji_info:'出牌阶段限两次。你可以展示所有手牌,若花色均不同,你摸两张牌。然后若你的手牌因此包含了四种花色,你跳过下一个弃牌阶段。', @@ -12621,7 +12622,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dcqinghuang_info:'出牌阶段开始时,你可以减1点体力上限,然后你于本回合发动〖踏寂〗时额外随机执行一种效果。', dc_huojun:'霍峻', dcgue:'孤扼', - dcgue_info:'每回合限一次。当你需要于回合外使用或打出【杀】或【闪】时,若你有手牌,你可以展示之。若其中【杀】和【闪】的数量之和不超过1,你视为使用或打出此牌。', + dcgue_info:'每回合限一次。当你需要于回合外使用或打出【杀】或【闪】时,你可以发动此技能:你展示所有手牌,若其中【杀】和【闪】的数量之和不超过1,你视为使用或打出此牌。', dcsigong:'伺攻', dcsigong_info:'其他角色的回合结束时,若其于本回合内使用牌被响应过,你可以将手牌摸至或弃置至1,视为对其使用一张需使用X张【闪】抵消的【杀】,且此【杀】的伤害基数+1(X为你以此法弃置的牌数且至少为1)。当你以此法造成伤害后,该技能于本轮失效。', peiyuanshao:'裴元绍', @@ -12761,7 +12762,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dcshiju_info:'其他角色的出牌阶段限一次。其可以交给你一张牌,若此牌为装备牌,你可以使用之,然后其本回合攻击范围+X(X为你装备区里的牌数)。若你以此法替换了装备,你与其各摸两张牌。', dcyingshi:'应时', dcyingshi_info:'每回合每项各限一次。当你使用普通锦囊牌指定第一个目标后,若有目标不为本回合第一次成为牌的目标,则你可以令其选择一项:⒈令你于此牌结算结束后视为对其使用一张与此牌牌名相同的牌;⒉弃置X张牌,此牌对其无效(X为你装备区里的牌数)。', - dc_wangling:'王凌', + dc_wangling:'王淩', dcjichou:'集筹', dcjichou_info:'出牌阶段结束时,若你于此阶段使用过牌且这些牌的牌名均不同,你可以观看位于弃牌堆中的这些牌,选择任意张牌并选择等量角色,将这些牌交给这些角色各一张,然后你摸X张牌(X为你本局游戏首次发动〖集筹〗给出的牌数)。', dcmouli:'谋立', diff --git a/character/mobile.js b/character/mobile.js index b8d54c128..e09cc052b 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -16029,7 +16029,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ requanfeng_info:'限定技。①其他角色死亡时,你可失去〖弘仪〗,然后获得其武将牌上的所有非主公技,非隐匿技和非Charlotte技,加1点体力上限并回复1点体力。②当你处于濒死状态时,你可以加2点体力上限,然后回复4点体力。', quanfeng:'劝封', quanfeng_info:'锁定技,限定技,一名角色死亡时,你选择获得其的一个技能(主公技,限定技,觉醒技,隐匿技,使命技,带有Charlotte标签的技能除外),然后加1点体力上限并回复1点体力。', - simashi:'司马师', + simashi:'手杀司马师', + simashi_prefix:'手杀', baiyi:'败移', baiyi_info:'限定技,出牌阶段,若你已受伤,你可以交换两名其他角色的座次。', jinglve:'景略', diff --git a/character/offline.js b/character/offline.js index 6b365cc6a..a70b27dc3 100644 --- a/character/offline.js +++ b/character/offline.js @@ -11,7 +11,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ offline_yijiang:['ol_xinxianying'], offline_luanwu:["ns_lijue","ns_zhangji","ns_fanchou"], offline_yongjian:["ns_chendao","yj_caoang","yj_caocao",'yj_liru','yj_caohong','yj_zhangfei','yongjian_ganning','yj_dongzhuo','yj_xuyou','yj_jiaxu','yj_zhenji'], - offline_piracyE:['shen_jiaxu','pe_wangyun','pe_zhonghui','pe_sunchen','pe_mengda','pe_wenqin','ns_caoanmin','chendong','jiangqing','kongrong','jiling','tianfeng','mateng'], + offline_piracyE:['shen_jiaxu','pe_wangyun','pe_zhonghui','pe_sunchen','pe_mengda','pe_wenqin','ns_caoanmin','jiangqing','kongrong','jiling','tianfeng','mateng'], offline_piracyS:['ns_jiaxu','longyufei','ps_guanyu','ps1059_guojia','ps2070_guojia','ps2063_zhaoyun','ps2067_zhaoyun','ps1062_zhouyu','ps2080_zhouyu','ps_caozhi','ps_jin_simayi','ps_caopi','ps_simayi','ps2068_simayi','ps_machao','ps_zhugeliang','ps2066_zhugeliang','ps_jiaxu','ps_lvbu','ps_shen_machao','jsp_liubei'], offline_piracyK:['pk_sp_duyu'], offline_vtuber:['vtb_xiaosha','vtb_xiaoshan','vtb_xiaotao','vtb_xiaole','vtb_xiaojiu'], @@ -34,7 +34,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ tianfeng:['male','qun',3,['sijian','gzsuishi']], jiling:['male','qun',4,['shuangren']], kongrong:['male','qun',3,['zymingshi','lirang']], - chendong:['male','wu',4,['duanxie','fenming']], jiangqing:['male','wu',4,['zyshangyi']], pk_sp_duyu:['male','qun',4,['pkwuku','pksanchen']], ps_lvbu:['male','qun',4,['wushuang','pssheji']], @@ -6791,8 +6790,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhangliang_prefix:'SP', ol_xinxianying:'将辛宪英', ol_xinxianying_prefix:'将', - chendong:'战役篇陈武董袭', - chendong_prefix:'战役篇', jiangqing:'战役篇蒋钦', jiangqing_prefix:'战役篇', tianfeng:'战役篇田丰', diff --git a/character/rank.js b/character/rank.js index 2fda41539..b1f773f0e 100644 --- a/character/rank.js +++ b/character/rank.js @@ -922,6 +922,9 @@ window.noname_character_rank={ 'tw_mayunlu', 'tw_hucheer', 'sp_lvfan', + 'lvfan', + 'cuimao', + 'liqueguosi', 're_chendeng', 'wuyan', 'wangyue', @@ -1644,6 +1647,7 @@ window.noname_character_rank={ 'sb_yl_luzhi', ], d:[ + 'chendong', 'lvmeng', 'huaxiong', 'gongsunzan', diff --git a/character/sb.js b/character/sb.js index df2ac8796..6df7a98e7 100644 --- a/character/sb.js +++ b/character/sb.js @@ -1421,20 +1421,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, marktext:'破', intro:{ - markcount:function(storage,player){ - if(player.isUnderControl(true)) return storage[1].length; - return '?'; + markcount:function(storage){ + return storage[1].length; }, mark:function(dialog,content,player){ - if(player.isUnderControl(true)){ - const storage=player.getStorage('sbkanpo'); - const sum=storage[0]; - const names=storage[1]; - dialog.addText('剩余可记录'+sum+'次牌名'); - if(names.length){ - dialog.addText('已记录牌名:'); - dialog.addSmall([names,'vcard']); - } + const storage=player.getStorage('sbkanpo'); + const sum=storage[0]; + const names=storage[1]; + dialog.addText('剩余可记录'+sum+'次牌名'); + if(player.isUnderControl(true)&&names.length){ + dialog.addText('当前记录牌名:'); + dialog.addSmall([names,'vcard']); } }, }, diff --git a/character/shiji.js b/character/shiji.js index 4225f338b..b9ada1536 100644 --- a/character/shiji.js +++ b/character/shiji.js @@ -6661,7 +6661,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ spchijie_info:'每回合限一次。当你成为其他角色使用牌的唯一目标时,你可判定。若结果大于6,则你取消此牌的所有目标。', reduoji:'夺冀', reduoji_info:'出牌阶段限一次,你可将一张牌置于其他角色的武将牌上,称为“冀”。当有装备牌因使用而进入一名角色的装备区后,若该角色有“冀”且其为使用者,则你获得此装备牌,其移去一个“冀”并摸一张牌。一名其他角色的回合结束后,若其有“冀”,则你获得其的所有“冀”。', - wangling:'王淩', + wangling:'手杀王淩', mouli:'谋立', mouli_info:'出牌阶段限一次,你可以将一张手牌交给一名其他角色,其获得如下效果直到你的下回合开始:其可以将黑色牌当做【杀】,红色牌当做【闪】使用。其第一次触发“使用【杀】/【闪】结算完成后”的时机时,你摸三张牌。', zifu:'自缚', @@ -6769,7 +6769,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dbchongjian_info:'吴势力技。你可以将一张装备牌当做一种【杀】(无距离限制且无视防具)或【酒】使用。当你以此法使用【杀】造成伤害后,你获得目标角色装备区内的X张牌(X为伤害值)。', dbchoujue:'仇决', dbchoujue_info:'锁定技。当你杀死其他角色后,你加1点体力上限并摸两张牌,然后本回合发动【却敌】的次数上限+1。', - sp_chendong:'陈武董袭', + sp_chendong:'手杀陈武董袭', + sp_chendong_prefix:'手杀', spyilie:'毅烈', spyilie_info:'出牌阶段开始时,你可选择:①本阶段内使用【杀】的次数上限+1。②本回合内使用【杀】被【闪】抵消时,摸一张牌。③背水:失去1点体力,然后依次执行上述所有选项。', spfenming:'奋命', @@ -6826,7 +6827,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ spjianyi_info:'锁定技。其他角色的回合结束时,若弃牌堆中有于本回合内因弃置而进入弃牌堆的防具牌,则你获得其中一张。', spshangyi:'尚义', spshangyi_info:'出牌阶段限一次。你可以弃置一张牌并选择一名其他角色。其观看你的手牌,然后你观看其手牌并获得其中的一张。', - sp_lvfan:'吕范', + sp_lvfan:'手杀吕范', + sp_lvfan_prefix:'手杀', spdiaodu:'调度', spdiaodu_info:'准备阶段,你可令一名角色摸一张牌,然后移动其装备区内的一张牌。', spdiancai:'典财', diff --git a/character/sp.js b/character/sp.js index 017faff3f..b39b65725 100755 --- a/character/sp.js +++ b/character/sp.js @@ -10,7 +10,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_tianzhu:['liyi','zhangyan','niujin','hejin','hansui',"wutugu","yanbaihu","shamoke","zhugedan",'huangzu','gaogan',"tadun","fanjiangzhangda","ahuinan","dongtuna",'ol_wenqin'], sp_nvshi:['ol_dingshangwan',"lingju","guanyinping","zhangxingcai","mayunlu","dongbai","zhaoxiang",'ol_zhangchangpu',"daxiaoqiao","jin_guohuai",'ol_hujinding'], sp_shaowei:["simahui","zhangbao","zhanglu","zhugeguo","xujing","zhangling",'huangchengyan','zhangzhi','lushi'], - sp_huben:['duanjiong','ol_mengda',"caohong","xiahouba","zhugeke","zumao","wenpin","litong","mazhong","heqi","quyi","luzhi","zangba","yuejin","dingfeng","wuyan","ol_zhuling","tianyu","huojun",'zhaoyǎn','dengzhong','ol_furong','macheng','ol_zhangyì','ol_zhujun','maxiumatie','luoxian','ol_huban','haopu','ol_qianzhao'], + sp_huben:['duanjiong','ol_mengda',"caohong","xiahouba","zhugeke","zumao","wenpin","litong","mazhong","heqi","quyi","luzhi","yuejin","dingfeng","wuyan","ol_zhuling","tianyu","huojun",'zhaoyǎn','dengzhong','ol_furong','macheng','ol_zhangyì','ol_zhujun','maxiumatie','luoxian','ol_huban','haopu','ol_qianzhao'], sp_liesi:['lvboshe','mizhu','weizi','ol_liuba','zhangshiping'], sp_default:["sp_diaochan","sp_zhaoyun","sp_sunshangxiang","sp_caoren","sp_jiangwei","sp_machao","sp_caiwenji","jsp_guanyu","jsp_huangyueying","sp_pangde","sp_jiaxu","yuanshu",'sp_zhangliao','sp_ol_zhanghe','sp_menghuo'], sp_qifu:['ol_feiyi',"caoying",'panshu',"caochun","yuantanyuanshang",'caoshuang','wolongfengchu','guansuo','baosanniang','fengfangnv','jin_zhouchu'], @@ -119,7 +119,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jianggan:["male","wei",3,["weicheng","daoshu"]], - caoying:["female","wei",4,["xinfu_lingren","xinfu_fujian"],[]], + caoying:["female","wei",4,["xinfu_lingren","fujian"],[]], simahui:["male","qun",3,["jianjie","xinfu_chenghao","xinfu_yinshi"],[]], baosanniang:["female","shu",4,["olwuniang","olxushen"],[]], @@ -186,16 +186,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ kanze:['male','wu',3,['xiashu','kuanshi']], heqi:['male','wu',4,['olqizhou','olshanxi']], - //mifuren:['female','shu',3,['guixiu','cunsi']], yuejin:['male','wei',4,['xiaoguo']], sp_dongzhuo:['male','qun',5,['hengzheng']], hetaihou:['female','qun',3,['zhendu','qiluan']], dingfeng:['male','wu',4,['reduanbing','refenxun']], shamoke:['male','shu',4,['gzjili']], - //liqueguosi:['male','qun',4,['xiongsuan']], - //cuimao:['male','wei',3,['zhengbi','fengying']], - zangba:['male','wei',4,['rehengjiang']], zhangren:['male','qun',4,['chuanxin','zfengshi']], wangyun:['male','qun',4,['xinlianji','xinmoucheng'],['clan:太原王氏']], @@ -15142,21 +15138,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, } }, - xiongsuan:{ - audio:2, - }, - diancai:{ - audio:2, - }, - diaodu:{ - audio:2, - }, - zhengbi:{ - audio:2, - }, - fengying:{ - audio:2, - }, //新服曹笨 xinshanjia:{ group:["xinshanjia_count"], @@ -16955,7 +16936,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{global:'phaseEnd'}, forced:true, charlotte:true, - filter:function(event,player){ + filterx:function(event,player){ if(!event.player.countMark('rehengjiang2')) return false; if(event.player.hasHistory('lose',function(evt){ return evt.type=='discard'&&evt.cards2.length>0&&evt.getParent('phaseDiscard').player==event.player; @@ -16964,10 +16945,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, logTarget:'player', content:function(){ - var num=player.getHistory('useSkill',function(evt){ - return evt.skill=='rehengjiang'&&evt.targets.includes(trigger.player); - }).length; - if(num>0) player.draw(num); + if(lib.skill.rehengjiang3.filterx(trigger,player)){ + var num=player.getHistory('useSkill',function(evt){ + return evt.skill=='rehengjiang'&&evt.targets.includes(trigger.player); + }).length; + if(num>0) player.draw(num); + } + else player.draw(); }, }, shuangren:{ @@ -24891,20 +24875,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else trigger.player.discard(event.card); } }, - "xinfu_lingren":{ - usable:1, + xinfu_lingren:{ audio:2, trigger:{ player:"useCardToPlayered", }, - direct:true, filter:function(event,player){ if(event.getParent().triggeredTargets3.length>1) return false; - if(!player.isPhaseUsing()) return false; if(!['basic','trick'].includes(get.type(event.card))) return false; if(get.tag(event.card,'damage')) return true; return false; }, + usable:1, + direct:true, content:function(){ 'step 0' player.chooseTarget(get.prompt('xinfu_lingren'),'选择一名目标角色并猜测其手牌构成',function(card,player,target){ @@ -25051,6 +25034,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, }, + fujian:{ + audio:'xinfu_fujian', + trigger:{player:['phaseZhunbeiBegin','phaseJieshuBegin']}, + filter(event,player){ + return game.hasPlayer(target=>target!=player&&target.countCards('h')&&!target.isMaxHandcard()); + }, + forced:true, + async content(event,trigger,player){ + const target=game.filterPlayer(target=>{ + return target!=player&&target.countCards('h')&&!target.isMaxHandcard(); + }).randomGet(); + player.line(target); + game.log(player,'观看了',target,'的手牌'); + player.viewHandcards(target); + }, + }, xinfu_xionghuo:{ audio:2, enable:'phaseUse', @@ -26167,7 +26166,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, translate:{ "xinfu_lingren":"凌人", - "xinfu_lingren_info":"每回合限一次。当你于出牌阶段内使用带有「伤害」标签的基本牌或普通锦囊牌指定目标后,你可以猜测其中的一个目标的手牌中是否有基本牌,锦囊牌或装备牌。若你猜中的项目数:≥1,此牌对该角色的伤害+1;≥2,你摸两张牌;≥3,你获得技能〖奸雄〗和〖行殇〗直到你的下回合开始。", + "xinfu_lingren_info":"每回合限一次。当你使用带有「伤害」标签的基本牌或普通锦囊牌指定目标后,你可以猜测其中的一个目标的手牌中是否有基本牌,锦囊牌或装备牌。若你猜中的项目数:≥1,此牌对该角色的伤害+1;≥2,你摸两张牌;≥3,你获得技能〖奸雄〗和〖行殇〗直到你的下回合开始。", "lingren_adddamage":"凌人", "lingren_adddamage_info":"", "lingren_jianxiong":"奸雄", @@ -26175,7 +26174,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "lingren_xingshang":"行殇", "lingren_xingshang_info":"当有角色死亡后,你可以选择一项:1.回复1点体力。2.获得该角色的所有牌。", "xinfu_fujian":"伏间", - "xinfu_fujian_info":"锁定技,结束阶段开始时,你观看一名随机的其他角色的随机X张手牌。(X为场上手牌最少的角色的手牌数)", + "xinfu_fujian_info":"锁定技,结束阶段,你观看一名随机的其他角色的随机X张手牌。(X为场上手牌最少的角色的手牌数)", + fujian:'伏间', + fujian_info:'锁定技,准备阶段和结束阶段,你随机观看一名手牌数不为全场最多的其他角色的张手牌。', xinfu_xionghuo:'凶镬', xinfu_xionghuo_info:'游戏开始时,你获得3个“暴戾”标记(标记上限为3)。出牌阶段,你可以交给一名其他角色一个“暴戾”标记。当你对有“暴戾”标记的其他角色造成伤害时,此伤害+1。有“暴戾”标记的其他角色的出牌阶段开始时,其移去所有“暴戾”标记并随机执行一项:1.受到1点火焰伤害且本回合不能对你使用【杀】;2.失去1点体力且本回合手牌上限-1;3.你随机获得其一张手牌和一张装备区的牌。', xinfu_shajue:'杀绝', @@ -26252,7 +26253,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mifuren:'糜夫人', sp_dongzhuo:'SP董卓', sp_dongzhuo_prefix:'SP', - gz_chendong:'陈武董袭', gz_jiangfei:'蒋琬费祎', gz_jiangqing:'蒋钦', hetaihou:'何太后', @@ -26318,9 +26318,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ bianfuren:'卞夫人', ol_bianfuren:'卞夫人', shamoke:'沙摩柯', - lvfan:'吕范', - liqueguosi:'李傕郭汜', - cuimao:'崔琰毛玠', caoying:"曹婴", simahui:"司马徽", @@ -26418,16 +26415,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ wanwei_info:'当你因被其他角色获得或弃置而失去牌时,你可以改为自己选择失去的牌。', gzjili:'蒺藜', gzjili_info:'当你于一回合内使用或打出第X张牌时,你可以摸X张牌(X为你的攻击范围)。', - xiongsuan:'凶算', - xiongsuan_info:'限定技,出牌阶段,你可以弃置一张手牌并选择一名角色,对其造成1点伤害,然后你摸三张牌。若该角色有已发动的限定技,则你选择其中一个限定技。此回合结束后,视为该限定技未发动过。', - diaodu:"调度", - diaodu_info:"当你使用装备牌时,你可以摸一张牌;出牌阶段开始时,你可以获得一名其他角色装备区里的一张牌,然后你可以将此牌交给另一名角色。", - diancai:'典财', - diancai_info:'其他角色的出牌阶段结束时,若你于此阶段失去了X张或更多的牌,则你可以将手牌摸至体力上限。(X为你的体力值)', - zhengbi:'征辟', - zhengbi_info:'出牌阶段开始时,你可以选择一项:选择一名未受伤的其他角色,你对其使用的牌无距离限制且不计入使用次数直到回合结束;或将一张基本牌交给一名其他角色,然后其交给你一张非基本牌或两张基本牌。', - fengying:'奉迎', - fengying_info:'限定技,出牌阶段,你可以弃置所有手牌。若如此做,你可以令等量的角色将手牌摸至X张(X为其体力上限且至多为5)。然后,你结束出牌阶段,并在当前回合结束后进行一个新的回合。', qingzhong:'清忠', qingzhong_info:'出牌阶段开始时,你可以摸两张牌,若如此做,此阶段结束时,你与手牌数最少的角色交换手牌。', @@ -26487,7 +26474,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ rehengjiang:'横江', rehengjiang2:'横江', rehengjiang3:'横江', - rehengjiang_info:'当你受到1点伤害后,你可以令当前回合角色本回合的手牌上限-1。然后若其弃牌阶段内没有弃牌,则你摸X张牌(X为你本回合内对其发动过〖横江〗的次数)。', + rehengjiang_info:'当你受到1点伤害后,你可以令当前回合角色本回合的手牌上限-1。然后若其弃牌阶段内有/没有弃牌,则你摸一/X张牌(X为你本回合内对其发动过〖横江〗的次数)。', shuangren:'双刃', shuangren_info:'出牌阶段开始时,你可以与一名角色拼点。若你赢,你视为对其或与其势力相同的另一名角色使用一张【杀】(不计入出牌阶段的次数限制);若你没赢,你本回合内不能对其他角色使用牌。', xiashu:'下书', diff --git a/character/sp2.js b/character/sp2.js index 4600aef42..267e709b3 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:{ + liqueguosi:['male','qun',4,['xiongsuan']], star_zhangchunhua:['female','wei',3,['starliangyan','starminghui']], star_yuanshao:['male','qun',4,['starxiaoyan','starzongshi','starjiaowang','staraoshi'],['zhu']], star_dongzhuo:['male','qun',5,['starweilin','starzhangrong','starhaoshou'],['zhu']], @@ -38,7 +39,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xinping:['male','qun',3,['fuyuan','zhongjie','yongdi']], zhangning:['female','qun',3,['tianze','difa']], tongyuan:['male','qun',4,['chaofeng','chuanshu']], - sp_mifangfushiren:['male','shu',4,['dcmffengshi']], + sp_mifangfushiren:['male','shu',4,['fengshi']], re_nanhualaoxian:['male','qun',4,['gongxiu','jinghe']], dufuren:['female','wei',3,['yise','shunshi']], caoanmin:['male','wei',4,['xianwei']], @@ -97,7 +98,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, characterSort:{ sp2:{ - sp_whlw:["xurong","lijue","zhangji","fanchou","guosi","duanwei","liangxing","zhangheng",'tangji','niufu','dongxie'], + sp_whlw:["xurong","lijue","zhangji","fanchou","guosi","duanwei","liangxing","zhangheng",'tangji','niufu','dongxie','liqueguosi'], sp_zlzy:["zhangqiying","lvkai","zhanggong","weiwenzhugezhi","beimihu"], sp_longzhou:["xf_tangzi","xf_huangquan","xf_sufei","sp_liuqi"], sp_zizouqi:["mangyachang","xugong","zhangchangpu"], @@ -118,6 +119,33 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, skill:{ + //李傕郭汜 + xiongsuan:{ + audio:2, + enable:'phaseUse', + filterTarget:true, + filterCard:lib.filter.cardDiscardable, + position:'h', + usable:1, + async content(event,trigger,player){ + const target=event.target; + await target.damage(); + await player.draw(3); + if(target!=player) await player.loseHp(); + }, + ai:{ + order:9, + result:{ + target(player,target){ + if(player.getHp()+player.countCards('hs',card=>player.canSaveCard(card,player))<=1) return 0; + const num=get.sgn(get.attitude(player,target)); + if(num*get.damageEffect(target,player,player)>0) return num*get.damageEffect(target,player,player); + if(target==player) return 0.00001; + return 0; + }, + }, + }, + }, //张春华 starliangyan:{ audio:2, @@ -10725,6 +10753,72 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, //糜芳傅士仁 + fengshi:{ + audio:'mffengshi', + audioname:['sp_mifangfushiren'], + trigger:{player:'useCardToPlayered'}, + filter(event,player){ + if(!event.isFirstTarget) return false; + return event.targets.some(target=>{ + return player.countCards('h')>target.countCards('h')&&target.countCards('he')>0&&player.hasCard(card=>{ + return lib.filter.cardDiscardable(card,player,'fengshi'); + },'he'); + }); + }, + direct:true, + async content(event,trigger,player){ + const {result:{bool,targets}}=await player.chooseTarget(get.prompt('fengshi'),'弃置你与一名目标角色的各一张牌,然后令'+get.translation(event.card)+'对其造成的伤害+1',(card,player,target)=>{ + const targets=get.event().getTrigger().targets; + if(!targets.includes(target)) return false; + return player.countCards('h')>target.countCards('h')&&target.countCards('he')>0&&player.hasCard(card=>{ + return lib.filter.cardDiscardable(card,player,'fengshi'); + },'he'); + }).set('ai',target=>{ + const player=get.event('player'); + const card=get.event().getTrigger().card; + if(!get.info('dcmffengshi').check({card:card,target:target})) return 0; + return get.effect(target,{name:'guohe_copy2'},player,player); + }); + if(bool){ + const target=targets[0]; + player.logSkill('fengshi',target); + await player.chooseToDiscard('he',true); + await player.discardPlayerCard(target,'he',true); + if(get.tag(trigger.card,'damage')){ + var id=target.playerid; + var map=trigger.getParent().customArgs; + if(!map[id]) map[id]={}; + if(typeof map[id].extraDamage!='number') map[id].extraDamage=0; + map[id].extraDamage++; + } + } + }, + group:'fengshi_target', + subSkill:{ + target:{ + inherit:'dcmffengshi', + trigger:{target:'useCardToTargeted'}, + filter(event,player){ + if(event.player==event.target) return false; + return event.player.countCards('h')>player.countCards('h')&&event.player.countCards('he')>0&&player.hasCard(card=>{ + return lib.filter.cardDiscardable(card,player,'fengshi'); + },'he'); + }, + async content(event,trigger,player){ + const target=trigger.player; + await player.chooseToDiscard('he',true); + await player.discardPlayerCard(target,'he',true); + if(get.tag(trigger.card,'damage')){ + var id=player.playerid; + var map=trigger.getParent().customArgs; + if(!map[id]) map[id]={}; + if(typeof map[id].extraDamage!='number') map[id].extraDamage=0; + map[id].extraDamage++; + } + }, + }, + }, + }, dcmffengshi:{ audio:'mffengshi', audioname:['sp_mifangfushiren'], @@ -10750,7 +10844,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(viewer==player){ if(get.attitude(viewer,target)>=0) return false; if(player.countCards('he',(card)=>get.value(card,player)<5)) return true; - var card=_status.event.getTrigger().card; + var card=get.event().getTrigger().card; if((get.tag(card,'damage')||target.countCards('he',(card)=>get.value(card,target)>6))&&player.countCards('he',(card)=>get.value(card,player)<7)) return true; return false; } @@ -11349,6 +11443,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mffengshi_info:'当你使用牌指定唯一目标后,或成为其他角色使用牌的唯一目标后,若此牌使用者的手牌数大于此牌目标的手牌数,则此牌的使用者可令你弃置自己和对方的各一张牌,并令此牌的伤害值+1。', dcmffengshi:'锋势', dcmffengshi_info:'当你使用牌指定唯一目标后,或成为其他角色使用牌的唯一目标后,若此牌使用者的手牌数大于此牌目标的手牌数,则你可弃置自己和对方的各一张牌,并令此牌的伤害值+1。', + fengshi:'锋势', + fengshi_info:'当你使用牌指定第一个目标后,你可弃置你与其中一名手牌数小于你的目标角色的各一张牌,并令此牌对其造成的伤害+1;当你成为其他角色使用牌的目标后,若你的手牌数小于其,则你可以弃置你与其的各一张牌,并令此牌对你造成的伤害+1。', tongyuan:'童渊', chaofeng:'朝凤', chaofeng_info:'出牌阶段限一次。当你造成伤害时,你可以弃置一张牌,然后摸一张牌。若此伤害的渠道为牌且你弃置的牌:与此牌颜色相同,则你改为摸两张牌;与此牌类型相同,则此伤害+1。', @@ -11537,6 +11633,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ starliangyan_info:'出牌阶段限一次。你可以选择一名其他角色,你摸/弃置至多两张牌,令其弃置/摸等量的牌。然后若你与其手牌数相同,以此法摸牌的角色跳过其下一个弃牌阶段。', starminghui:'明慧', starminghui_info:'一名角色的回合结束时,若你的手牌数:最少,你可以视为使用一张无距离限制的【杀】;最多,你可以将手牌弃置至你手牌数不为最多,然后令一名角色回复1点体力。', + liqueguosi:'李傕郭汜', + xiongsuan:'凶算', + xiongsuan_info:'出牌阶段限一次,你可以弃置一张手牌并对一名角色造成1点伤害,然后你摸三张牌。若该角色不为你,你失去1点体力。', sp_whlw:"文和乱武", sp_zlzy:"逐鹿中原", diff --git a/character/tw.js b/character/tw.js index cb1e9c1e4..08f2e1a68 100644 --- a/character/tw.js +++ b/character/tw.js @@ -575,7 +575,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ target.addTempSkill(control,{player:'phaseAfter'}); target.addTempSkill('twhuajing_blocker',{player:'phaseAfter'}); target.getHistory('custom').push({twhuajing_skills:[control]}); - await player.draw(); + await player.draw(2); } } }, @@ -610,14 +610,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } return cards; }, - direct:true, + //direct:true, + frequent:true, async content(event,trigger,player){ const cards=lib.skill.twdengjian.getCards(player,trigger.player); - const {result:{bool}}=await player.chooseToDiscard(get.prompt('twdengjian'),'he') + /*const {result:{bool}}=await player.chooseToDiscard(get.prompt('twdengjian'),'he') .set('prompt2','弃置一张牌并随机获得本回合所有造成伤害的牌对应的实体牌的其中一张与你本轮以此法获得的牌的颜色均不同的【杀】') .set('ai',card=>7-get.value(card)) .set('logSkill','twdengjian'); - if(bool) player.gain(cards.randomGet(),'gain2').gaintag.add('twdengjianx'); + if(bool) */player.gain(cards.randomGet(),'gain2').gaintag.add('twdengjianx'); }, group:'twdengjian_buff', subSkill:{ @@ -898,7 +899,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, forced:true, async content(event,trigger,player){ - const num=player.getHistory('sourceDamage',evt=>evt.card&&evt.card==trigger.card).reduce((sum,evt)=>sum+evt.num,0); + //const num=player.getHistory('sourceDamage',evt=>evt.card&&evt.card==trigger.card).reduce((sum,evt)=>sum+evt.num,0); + const num=game.countPlayer2(target=>{ + return target.hasHistory('damage',evt=>{ + return evt.card&&evt.card==trigger.card; + }); + }); const num2=1+player.getAllHistory('custom',evt=>evt.twzhongyi).length; let choice=['摸牌'],choiceList=['摸'+get.cnNumber(num)+'张牌']; if(player.isDamaged()){ @@ -973,9 +979,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{global:'phaseEnd'}, filter(event,player){ const card=new lib.element.VCard({name:'sha'}); - return player.hasUseTarget(card)&&player.getHistory('useSkill',evt=>{ + return player.hasUseTarget(card)&&/*player.getHistory('useSkill',evt=>{ return evt.skill=='twchue_gain'; - }).length&&player.getHp()&&player.countMark('twchue')>=player.getHp(); + }).length&&player.getHp()&&*/player.countMark('twchue')>=player.getHp(); }, check(event,player){ return player.hasValueTarget(new lib.element.VCard({name:'sha'})); @@ -2031,7 +2037,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ filter(event,player){ if(!player.hasZhuSkill('twniju')) return false; if(event.iwhile||(event.target&&event.compareMeanwhile)) return false; - return true; + const participant=[event.player]; + if(event.targets) participant.addArray(event.targets); + else participant.add(event.target); + return participant.includes(player); }, direct:true, async content(event,trigger,player){ @@ -14084,22 +14093,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){ let d1=true,e=false; if(event.player.hasSkill('jueqing')||event.player.hasSkill('gangzhi')) d1=false; for(let tar of event.targets){ - if(!tar.mayHaveShan(player,'use',tar.getCards('h',i=>{ - return i.hasGaintag('sha_notshan'); - }))||event.player.hasSkillTag('directHit_ai',true,{ - target:tar, - card:event.card, - },true)){ - if(!tar.hasSkill('gangzhi')) d1=false; - if(!tar.hasSkillTag('filterDamage',null,{ - player:event.player, + if(event.card.name=='sha'){ + if(!tar.mayHaveShan(player,'use',tar.getCards('h',i=>{ + return i.hasGaintag('sha_notshan'); + }))||event.player.hasSkillTag('directHit_ai',true,{ + target:tar, card:event.card, - })){ - let att=get.attitude(_status.event.player,tar); - if(att>0) return false; - if(att<0) e=true; + },true)){ + if(!tar.hasSkill('gangzhi')) d1=false; + if(!tar.hasSkillTag('filterDamage',null,{ + player:event.player, + card:event.card, + })){ + let att=get.attitude(_status.event.player,tar); + if(att>0) return false; + if(att<0) e=true; + } } } + else e=true; } if(e) return true; if(d1) return get.damageEffect(event.player,player,_status.event.player)>0; @@ -15422,7 +15434,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return '转换技。阴:出牌阶段限一次。你可以弃置一张牌并对攻击范围内的一名角色造成1点伤害。阳:当你或你攻击范围内的一名角色于你的回合外受到伤害时,你可以弃置一张牌令此伤害-1。然后若你以此法弃置的牌颜色与“任”的颜色相同,你摸一张牌。'; }, twdengjian:function(player){ - let str='①其他角色的弃牌阶段结束时,你可以弃置一张牌并随机获得本回合所有造成伤害的牌对应的实体牌的其中一张与你本轮以此法获得的牌的颜色均不同的【杀】,称为“剑法”。'; + let str='①其他角色的弃牌阶段结束时,你可以随机获得本回合所有造成伤害的牌对应的实体牌的其中一张与你本轮以此法获得的牌的颜色均不同的【杀】,称为“剑法”。'; if(player.hasSkill('twdengjian_ban')) str=''+str+''; str+='②你使用“剑法”牌不计入次数限制。'; return str; @@ -16066,9 +16078,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xia_guanyu:'侠关羽', xia_guanyu_prefix:'侠', twzhongyi:'忠义', - twzhongyi_info:'锁定技。①你使用【杀】无距离限制。②当你使用【杀】结算完毕后,你选择一项:⒈摸X张牌;⒉回复X点体力;⒊背水:失去Y点体力,依次执行以上两项(X为此牌造成的伤害值,Y为你本局游戏此前选择此项的次数+1)。', + twzhongyi_info:'锁定技。①你使用【杀】无距离限制。②当你使用【杀】结算完毕后,你选择一项:⒈摸X张牌;⒉回复X点体力;⒊背水:失去Y点体力,依次执行以上两项(X为受到此牌造成的伤害的角色数,Y为你本局游戏选择此项的次数)。', twchue:'除恶', - twchue_info:'①当你使用【杀】指定唯一目标时,你可以失去1点体力,为此牌额外指定Z个目标。②当你受到伤害或失去体力后,你摸一张牌并获得1个“勇”标记。③回合结束时,若你本回合发动过〖除恶②〗,则你可以失去Z个“勇”标记,视为使用一张伤害+1且可以额外指定Z个目标的【杀】。(Z为你的体力值)', + twchue_info:'①当你使用【杀】指定唯一目标时,若场上存在可称为此【杀】目标的非目标角色,则你可以失去1点体力,为此牌额外指定Z个目标。②当你受到伤害或失去体力后,你摸一张牌并获得1个“勇”标记。③回合结束时,若你的“勇”标记数大于等于Z,则你可以失去Z个“勇”标记,视为使用一张伤害+1且可以额外指定Z个目标的【杀】。(Z为你的体力值)', xia_shitao:'石韬', twjieqiu:'劫囚', twjieqiu_info:'出牌阶段限一次,你可以选择一名装备区没有废除栏的其他角色,废除其所有装备栏,然后其摸X张牌(X为其废除装备栏前的装备区牌数),直到其恢复所有装备栏前:其弃牌阶段结束时,其恢复等同于其弃置牌数的装备栏;其回合结束时,若其仍有已废除的装备栏,则你执行一个额外回合(每轮限一次)。', @@ -16077,7 +16089,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xia_shie:'史阿', twdengjian:'登剑', twdengjianx:'剑法', - twdengjian_info:'①其他角色的弃牌阶段结束时,你可以弃置一张牌并随机获得本回合所有造成伤害的牌对应的实体牌的其中一张与你本轮以此法获得的牌的颜色均不同的【杀】,称为“剑法”。②你使用“剑法”牌不计入次数限制。', + twdengjian_info:'①其他角色的弃牌阶段结束时,你可以随机获得本回合所有造成伤害的牌对应的实体牌的其中一张与你本轮以此法获得的牌的颜色均不同的【杀】,称为“剑法”。②你使用“剑法”牌不计入次数限制。', twxinshou:'心授', twxinshou_info:'①当你于出牌阶段使用【杀】时,若此【杀】与你本回合使用的所有其他【杀】的颜色均不相同,则你可以选择执行以下一项本回合未执行过的项:⒈摸一张牌;⒉交给一名其他角色一张牌。②当你使用【杀】时,若〖心授①〗的两项本回合均已被你选择过,则你可以令〖登剑①〗失效并令一名其他角色获得〖登剑〗,你的下个回合开始时,其失去〖登剑〗,若其这期间使用【杀】造成过伤害,则你结束〖登剑①〗的失效状态。', xia_yuzhenzi:'玉真子', @@ -16096,7 +16108,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ twhuajing_gong:'弓', twhuajing_gong_info:'当你使用【杀】造成伤害后,你随机弃置受伤角色装备区里的一张牌。', twtianshou:'天授', - twtianshou_info:'锁定技,回合结束时,若你本回合使用【杀】造成过伤害,且你拥有本回合获得过效果的“武”标记,则你须将其中一个“武”标记交给一名其他角色并令其获得此标记的效果直到其回合结束,然后你摸一张牌。', + twtianshou_info:'锁定技,回合结束时,若你本回合使用【杀】造成过伤害,且你拥有本回合获得过效果的“武”标记,则你须将其中一个“武”标记交给一名其他角色并令其获得此标记的效果直到其回合结束,然后你摸两张牌。', tw_mobile:'海外服·稀有专属', tw_yunchouzhi:'运筹帷幄·智', diff --git a/character/xianding.js b/character/xianding.js index 7a3d624f4..c7065740d 100644 --- a/character/xianding.js +++ b/character/xianding.js @@ -4,6 +4,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:'xianding', connect:true, character:{ + chendong:['male','wu',4,['dcduanxie','fenming']], + lvfan:['male','wu',3,['diaodu','diancai']], + cuimao:['male','wei',3,['zhengbi','fengying']], huzun:['male','wei',4,['dczhantao','dcanjing']], zhugemengxue:['female','wei',3,['dcjichun','dchanying']], bailingyun:['female','wei',3,['dclinghui','dcxiace','dcyuxin']], @@ -96,16 +99,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, characterSort:{ xianding:{ - sp2_huben:['wangshuang','wenyang','re_liuzan','dc_huangzu','wulan','leitong','chentai','dc_duyu','dc_wangjun','dc_xiahouba','old_huangfusong','huzun'], + sp2_huben:['chendong','wangshuang','wenyang','re_liuzan','dc_huangzu','wulan','leitong','chentai','dc_duyu','dc_wangjun','dc_xiahouba','old_huangfusong','huzun'], sp2_shengun:["puyuan","guanlu","gexuan",'wufan','re_zhangbao','dukui','zhaozhi','zhujianping','dc_zhouxuān','zerong'], - sp2_bizhe:['dc_luotong','dc_wangchang','chengbing','dc_yangbiao','ruanji'], + sp2_bizhe:['dc_luotong','dc_wangchang','chengbing','dc_yangbiao','ruanji','cuimao'], sp2_huangjia:['caomao','liubian','dc_liuyu','quanhuijie','dingshangwan','yuanji','xielingyu','sunyu','ganfurenmifuren','dc_ganfuren','dc_mifuren','dc_shixie'], sp2_zhangtai:['guozhao','fanyufeng','ruanyu','yangwan','re_panshu'], sp2_jinse:['caojinyu','re_sunyi','re_fengfangnv','caohua','laiyinger','zhangfen','zhugeruoxue','caoxian','dc_qinghegongzhu','zhugemengxue'], sp2_yinyu:['zhouyi','luyi','sunlingluan','caoyi'], sp2_wangzhe:['dc_daxiaoqiao','dc_sp_machao'], sp2_doukou:['re_xinxianying','huaman','xuelingyun','dc_ruiji','duanqiaoxiao','tianshangyi','malingli','bailingyun'], - sp2_jichu:['zhaoang','dc_liuye','dc_wangyun','yanghong','huanfan','xizheng'], + sp2_jichu:['zhaoang','dc_liuye','dc_wangyun','yanghong','huanfan','xizheng','lvfan'], sp2_yuxiu:['dongguiren','dc_tengfanglan','zhangjinyun','zhoubuyi','dc_xujing'], sp2_qifu:['dc_guansuo','xin_baosanniang','dc_zhaoxiang'], sp2_gaoshan:['wanglang','liuhui','zhangjian'], @@ -114,12 +117,165 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, skill:{ + //陈武董袭 + dcduanxie:{ + audio:'duanxie', + inherit:'duanxie', + selectTarget:1, + }, + //吕范 + diaodu:{ + audio:2, + trigger:{player:['phaseUseBegin','logSkill']}, + filter(event,player){ + if(event.name=='logSkill'&&event.skill!='diancai') return false; + return game.hasPlayer(target=>{ + return get.distance(player,target)<=1&&target.countGainableCards(player,'e'); + }); + }, + direct:true, + async content(event,trigger,player){ + const {result:{bool,targets}}=await player.chooseTarget(get.prompt2('diaodu'),(card,player,target)=>{ + return get.distance(player,target)<=1&&target.countGainableCards(player,'e'); + }).set('ai',target=>{ + const player=get.event('player'),att=get.attitude(player,target); + let num=0; + if(target.hasSkill('gzxiaoji')) num+=2.5; + if(target.isDamaged()&&target.getEquip('baiyin')) num+=2.5; + if(target.hasSkill('xuanlve')) num+=2; + return get.sgn(att)*num+(target==player?1:0); + }); + if(bool){ + const aim=targets[0]; + player.logSkill('diaodu',aim); + const {result:{bool,cards}}=await player.gainPlayerCard(aim,'e',true); + if(bool&&game.hasPlayer(target=>target!=aim)){ + const card=cards[0]; + const {result:{bool,targets}}=await player.chooseTarget('调度:将'+get.translation(card)+'交给另一名角色',(card,player,target)=>{ + return target!=get.event('aim'); + },true).set('ai',target=>{ + const player=get.event('player'); + return att=get.attitude(player,target); + }).set('aim',aim); + if(bool&&get.owner(card)==player){ + const target=targets[0]; + player.line(target,'green'); + await player.give([card],target); + if(get.owner(card)==target){ + const {result:{bool}}=await target.chooseUseTarget(card); + if(bool) await player.draw(); + else await target.draw(); + } + } + } + } + }, + }, + diancai:{ + audio:2, + inherit:'mbdiancai', + filter(event,player){ + if(!player.getHp()||_status.currentPhase===player) return false; + let num=player.getHistory('lose',evt=>{ + return evt.cards2&&evt.cards2.length&&evt.getParent('phaseUse')==event; + }).reduce((sum,evt)=>{ + return sum+evt.cards2.length; + },0); + return num>=Math.min(5,player.getHp()); + }, + }, + //崔琰毛玠 + zhengbi:{ + audio:2, + trigger:{player:'phaseUseBegin'}, + filter(event,player){ + return game.hasPlayer(target=>target!=player); + }, + direct:true, + async content(event,trigger,player){ + const {result:{bool,targets}}=await player.chooseTarget(get.prompt2('zhengbi'),lib.filter.notMe).set('ai',target=>{ + const player=get.event('player'); + return -get.attitude(player,target)*target.countCards('he'); + }); + if(bool){ + const target=targets[0],str=get.translation(target); + player.logSkill('zhengbi',target); + let choiceList=['此阶段结束时,若'+str+'本阶段获得过牌,则你获得其手牌区和装备区各一张牌']; + if(player.countCards('h',{type:'basic'})) choiceList.push('交给'+str+'一张基本牌,然后其交给你一张非基本牌或两张基本牌'); + const {result:{index}}=await player.chooseControl().set('choiceList',choiceList).set('ai',()=>get.event('controls').length-1); + if(index==0){ + player.line(target); + player.when('phaseUseEnd').filter(evt=>evt==trigger).then(()=>{ + if(target.isIn()&&target.getHistory('gain',evt=>evt.getParent('phaseUse')==trigger).length){ + player.line(target); + let num=(target.countGainableCards(player,'h')>0)+(target.countCardsGainableCards(player,'e')>0); + if(num){ + player.gainPlayerCard(target,num,'he',true).set('filterButton',button=>{ + return !ui.selected.buttons.some(but=>get.position(button.link)==get.position(but.link)); + }); + } + } + }).vars({target:target}); + } + else{ + const {result:{bool}}=await player.chooseToGive(target,{type:'basic'},true).set('prompt','征辟:交给'+str+'一张基本牌'); + if(bool){ + let choices=[]; + if(target.countCards('he',{type:['trick','delay','equip']})) choices.push('一张非基本牌'); + if(target.countCards('h',{type:'basic'})>1) choices.push('两张基本牌'); + if(choices.length){ + const {result:{control}}=await target.chooseControl(choices).set('ai',function(event,player){ + if(choices.length>1){ + if(player.countCards('he',{type:['trick','delay','equip']},function(card){return get.value(card)<7})) return 0; + return 1; + } + return 0; + }).set('prompt','征辟:交给'+get.translation(player)+'…'); + const check=(control=='一张非基本牌'); + await target.chooseToGive('he',(check?1:2),{type:(check?['trick','delay','equip']:'basic')},player,true).set('prompt','征辟:交给'+get.translation(player)+control); + } + else if(target.countCards('h')) await target.give(target.getCards('h'),player); + } + } + } + }, + }, + fengying:{ + unique:true, + limited:true, + audio:2, + enable:'phaseUse', + filter(event,player){ + return player.countCards('h')&&player.countCards('h')==player.countDiscardableCards(player,'h'); + }, + skillAnimation:true, + animationColor:'thunder', + async content(event,trigger,player){ + player.awakenSkill('fengying'); + await player.discard(player.getCards('h')); + const evt=player.insertPhase(); + player.when('phaseBegin').filter(evtx=>evtx==evt).then(()=>{ + if(player.isMinHp()&&player.maxHp>0&&player.countCards('h'){ - const evt=get.event().getParent().getTrigger(); + const evt=get.event().getParent(get.event('eventName')).getTrigger(); if(!evt.source.isIn()||!evt.card||typeof get.number(evt.card)!=='number') return 0; if(get.number(card)>get.number(evt.card)) return 1.5; return 0; }).set('judge2',r=>r.bool).set('callback',()=>{ - const evt=event.getParent(2).getTrigger(); + const evtx=event.getParent(); + const evt=event.getParent(evtx.eventName).getTrigger(); if(!evt.source.isIn()||!evt.card||typeof get.number(evt.card)!=='number') return; if(event.judgeResult.number>get.number(evt.card)){ const sha=new lib.element.VCard({name:'sha'}),target=evt.source; @@ -142,6 +299,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }) + .set('eventName',event.name) } }, dcanjing:{ @@ -151,6 +309,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return game.hasPlayer(current=>current.isDamaged()); }, usable:1, + direct:true, async content(event,trigger,player){ const maxCount=player.getAllHistory('useSkill',evt=>evt.skill==='dcanjing').length+1; const result=await player.chooseTarget(get.prompt2('dcanjing'),(card,player,target)=>target.isDamaged(),[1,maxCount]) @@ -158,7 +317,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return get.attitude(get.player(),target)>0; }) .forResult(); - if(!result.bool) return; + if(!result.bool) return player.storage.counttrigger.dcanjing--; const targets=result.targets.slice(); targets.sortBySeat(_status.currentPhase); player.logSkill('dcanjing',targets); @@ -13811,6 +13970,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, characterIntro:{ + cuimao:'请分别查看“崔琰”和“毛玠”的武将介绍。', bailingyun:'柏灵筠,女,是电视剧《大军师司马懿之军师联盟》、《虎啸龙吟》中的主要角色之一,由张钧甯饰演。20岁,是曹丕赏赐司马懿的美人,也是曹丕的眼线,被送入司马府中为妾室。柔弱美貌、心机极深。', caoxian:'曹宪(生卒年不详),女,沛国谯县(今安徽省亳州市)人。东汉末年历史人物,汉献帝刘协嫔妃,魏武帝曹操女儿。建安十八年,嫁给汉献帝刘协,受封为贵人。黄初元年(220年),兄弟曹丕称帝后,汉献帝成为山阳公,不知所终。', zhangjian:'张臶(136年-240年),字子明,钜鹿人。汉末三国时期隐士、音乐家,精通谶纬之学。张臶生活的年代从东汉一直到曹魏齐王时期,受到朝廷多次征召,一直回避,不愿做官。他活了一百零五岁,是三国时期有可靠记载的最长寿的人之一。', @@ -14513,6 +14673,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dczhantao_info:'当你或你攻击范围内的角色受到伤害后,若你不为伤害来源,你可以判定,若造成此伤害的渠道为牌且此牌有点数且判定结果点数大于此牌的点数,你视为对来源使用一张【杀】。', dcanjing:'安境', dcanjing_info:'每回合限一次。当你造成伤害后,你可以令至多X名已受伤的角色各摸一张牌,然后其中体力值最少的角色回复1点体力(X为你本局游戏发动〖安境〗的次数)。', + cuimao:'崔琰毛玠', + zhengbi:'征辟', + zhengbi_info:'出牌阶段开始时,你可以选择一名其他角色并选择一项:①本阶段结束时,若其本阶段得到过牌,则你获得其手牌区和装备区各一张牌;②将一张基本牌交给该角色,然后其交给你一张非基本牌或两张基本牌。', + fengying:'奉迎', + fengying_info:'限定技,出牌阶段,你可以弃置所有手牌。若如此做,你于本回合结束后进行一个额外回合,此额外回合开始时,若你的体力值为全场最低,则你将手牌数摸至体力上限。', + lvfan:'吕范', + diaodu:'调度', + diaodu_info:'出牌阶段开始时,或当你发动〖典财〗后,你可以获得一名距离不大于1的一名角色A装备区里的一张牌,然后你将此牌交给另一名角色B,然后B选择是否使用此牌,若B使用/不使用,则你/B摸一张牌。', + diancai:'典财', + diancai_info:'其他角色的出牌阶段结束时,若你于此阶段失去了至少X张牌,则你可以将手牌摸至体力上限(X为你的体力值且X至多为5)。', + chendong:'陈武董袭', + dcduanxie:'断绁', + dcduanxie_info:'出牌阶段限一次,你可以令一名其他角色横置,然后你横置。', sp2_yinyu:'隐山之玉', sp2_huben:'百战虎贲', diff --git a/character/yijiang.js b/character/yijiang.js index 3b0e9373b..33a14296c 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -654,7 +654,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' player.addTempSkill('shiming_round','roundStart'); - var cards=get.cards(2); + var cards=get.cards(3); player.chooseButton(['识命:是否将其中一张置于牌堆底?',cards.slice(0)]).set('ai',button=>{ var att=_status.event.att,damage=_status.event.damage,val=get.value(button.link,_status.event.player); if(att>0&&damage<0||att<=0&&damage>0) return 6-val; @@ -713,6 +713,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.logSkill('jiangxi'); event.logged=true; player.removeSkill('shiming_round'); + player.draw(); } 'step 2' if(!game.hasPlayer2(current=>current.getHistory('damage').length>0)){ @@ -14578,9 +14579,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shuojian_info:'出牌阶段限三次。你可以交给一名其他角色一张牌,其选择一项:1.令你摸X张牌并弃置X-1张牌;2.视为使用X张【过河拆桥】,然后此技能本回合失效(X为此技能本阶段剩余发动次数+1)。', yj_qiaozhou:'谯周', shiming:'识命', - shiming_info:'每轮限一次。一名角色的摸牌阶段,你可以观看牌堆顶的两张牌,并可以将其中一张置于牌堆底。然后该角色可以改为对自己造成1点伤害,然后从牌堆底摸三张牌。', + shiming_info:'每轮限一次。一名角色的摸牌阶段,你可以观看牌堆顶的三张牌,并可以将其中一张置于牌堆底。然后该角色可以改为对自己造成1点伤害,然后从牌堆底摸三张牌。', jiangxi:'将息', - jiangxi_info:'一名角色的回合结束时,若一号位于此回合内进入过濒死状态或未受到过伤害,你可以重置〖识命〗;若所有角色均未受到过伤害,你可以与当前回合角色各摸一张牌。', + jiangxi_info:'一名角色的回合结束时,若一号位于此回合内进入过濒死状态或未受到过伤害,你可以重置〖识命〗并摸一张牌;若所有角色均未受到过伤害,你可以与当前回合角色各摸一张牌。', hanlong:'韩龙', duwang:'独往', duwang_info:'锁定技。①游戏开始时,你从牌堆顶将五张不为【杀】的牌置于武将牌上,称为“刺”。②若你有牌名不为【杀】“刺”,你至其他角色或其他角色至你的距离+1。', diff --git a/mode/identity.js b/mode/identity.js index 3f8026c59..fe6fd96bd 100644 --- a/mode/identity.js +++ b/mode/identity.js @@ -3623,7 +3623,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } if(fan){ if(to.hp>1&&to.hp>fan.hp&&to.countCards('he')>fan.countCards('he')){ - return -3; + return -1.7; } } return 0;