diff --git a/character/huicui.js b/character/huicui.js index 40251122e..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}}, @@ -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为其以此法弃置的牌数)。', @@ -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:'裴元绍', 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 5960fb672..b9ada1536 100644 --- a/character/shiji.js +++ b/character/shiji.js @@ -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 e25221bec..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'], @@ -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"], @@ -26272,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:'何太后', @@ -26338,9 +26318,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ bianfuren:'卞夫人', ol_bianfuren:'卞夫人', shamoke:'沙摩柯', - lvfan:'吕范', - liqueguosi:'李傕郭汜', - cuimao:'崔琰毛玠', caoying:"曹婴", simahui:"司马徽", @@ -26438,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:'出牌阶段开始时,你可以摸两张牌,若如此做,此阶段结束时,你与手牌数最少的角色交换手牌。', diff --git a/character/sp2.js b/character/sp2.js index e8200e6c6..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']], @@ -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, @@ -10739,34 +10767,23 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, direct:true, async content(event,trigger,player){ - const targetx=trigger.targets.filter(target=>{ + 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(targetx.length==1){ - const aim=targetx[0],info=get.info('dcmffengshi'); - const {result:{bool}}=await player.chooseBool(get.prompt('fengshi',targets[0]),info.prompt2({card:trigger.card,target:aim},player)).set('choice',info.check({card:trigger.card,target:aim},player)); - } - else{ - 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?targets[0]:aim); + const target=targets[0]; player.logSkill('fengshi',target); - player.chooseToDiscard('he',true); - player.discardPlayerCard(target,'he',true); + 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; @@ -10783,14 +10800,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{target:'useCardToTargeted'}, filter(event,player){ if(event.player==event.target) return false; - return event.player.countCards('h')>event.target.countCards('h')&&event.target.countCards('he')>0&&player.hasCard(card=>{ + return event.player.countCards('h')>player.countCards('h')&&event.player.countCards('he')>0&&player.hasCard(card=>{ return lib.filter.cardDiscardable(card,player,'fengshi'); },'he'); }, - content(){ - var target=lib.skill.dcmffengshi.logTarget(trigger,player); - player.chooseToDiscard('he',true); - player.discardPlayerCard(target,'he',true); + 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; @@ -10827,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; } @@ -11427,7 +11444,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dcmffengshi:'锋势', dcmffengshi_info:'当你使用牌指定唯一目标后,或成为其他角色使用牌的唯一目标后,若此牌使用者的手牌数大于此牌目标的手牌数,则你可弃置自己和对方的各一张牌,并令此牌的伤害值+1。', fengshi:'锋势', - fengshi_info:'当你使用牌指定第一个目标后,你可弃置你与其中一名手牌数小于你的目标角色和对方的各一张牌,并令此牌对其造成的伤害+1;当你称为其他角色使用牌的目标后,你可以弃置你与其的各一张牌,并令此牌对你造成的伤害+1。', + fengshi_info:'当你使用牌指定第一个目标后,你可弃置你与其中一名手牌数小于你的目标角色的各一张牌,并令此牌对其造成的伤害+1;当你成为其他角色使用牌的目标后,若你的手牌数小于其,则你可以弃置你与其的各一张牌,并令此牌对你造成的伤害+1。', tongyuan:'童渊', chaofeng:'朝凤', chaofeng_info:'出牌阶段限一次。当你造成伤害时,你可以弃置一张牌,然后摸一张牌。若此伤害的渠道为牌且你弃置的牌:与此牌颜色相同,则你改为摸两张牌;与此牌类型相同,则此伤害+1。', @@ -11616,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 53656c373..d3e44e41e 100644 --- a/character/tw.js +++ b/character/tw.js @@ -14038,22 +14038,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; diff --git a/character/xianding.js b/character/xianding.js index 5b8c1b842..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,6 +117,158 @@ 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')