diff --git a/character/huicui.js b/character/huicui.js index 181fd9b55..489ec6979 100644 --- a/character/huicui.js +++ b/character/huicui.js @@ -6473,25 +6473,31 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.choosePlayerCard(trigger.player,true,'h'); } 'step 1' - var card=result.cards[0]; - event.card=card; - var str=get.translation(player); - if(player!=trigger.player) str+=('对'+get.translation(trigger.player)); - str+='发动了【忧恤】'; - player.showCards(card,str); - player.chooseTarget('令一名角色获得'+get.translation(card),'若其体力值为全场最少,则其回复1点体力',function(card,player,target){ - return target!=_status.event.getTrigger().player; - }).set('ai',function(target){ - var player=_status.event.player,att=get.attitude(player,target); - if(att<0) return 0; - if(target.isDamaged()&&target.isMinHp&&get.recoverEffect(target,player,player)>0) return 4*att; - return att; - }); + if(result.bool){ + var card=result.cards[0]; + event.card=card; + var str=get.translation(player); + if(player!=trigger.player) str+=('对'+get.translation(trigger.player)); + str+='发动了【忧恤】'; + player.showCards(card,str); + player.chooseTarget('令一名角色获得'+get.translation(card),'若其体力值为全场最少,则其回复1点体力',function(card,player,target){ + return target!=_status.event.getTrigger().player; + }).set('ai',function(target){ + var player=_status.event.player,att=get.attitude(player,target); + if(att<0) return 0; + if(target.isDamaged()&&target.isMinHp&&get.recoverEffect(target,player,player)>0) return 4*att; + return att; + }); + } + else event.finish(); 'step 2' - var target=result.targets[0]; - event.target=target; - player.line(target,'green'); - target.gain(card,trigger.player,'give').giver=player; + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.line(target,'green'); + target.gain(card,trigger.player,'give').giver=player; + } + else event.finish(); 'step 3' if(target.isMinHp()) target.recover(); }, diff --git a/character/old.js b/character/old.js index 81cc25b84..e1e8ea14c 100755 --- a/character/old.js +++ b/character/old.js @@ -7,7 +7,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ old:{ old_standard:['ol_yuanshu'], old_shenhua:['old_caocao',"yuji","zhangjiao","old_zhugezhan","old_guanqiujian","xiahouyuan","weiyan","old_xiaoqiao","pangde","xuhuang",'junk_sunquan',"huangzhong","new_caoren",'old_chendao'], - old_refresh:["old_zhangfei","old_huatuo","old_zhaoyun","ol_huaxiong",'old_re_lidian'], + old_refresh:["old_zhangfei","old_huatuo","old_zhaoyun","ol_huaxiong",'old_re_lidian','old_guanyu'], old_yijiang1:["masu","xushu","xin_yujin","old_xusheng","old_lingtong","fazheng",'old_gaoshun','re_yujin'], old_yijiang2:["old_zhonghui","madai",'old_handang','old_liubiao','oldre_liubiao','old_guanzhang','old_wangyi'], old_yijiang3:["liru","old_zhuran","old_fuhuanghou","old_caochong"], @@ -57,6 +57,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ old_zhangfei:['male','shu',4,['new_repaoxiao','new_tishen']], old_zhaoyun:['male','shu',4,['longdan','new_yajiao']], old_huatuo:['male','qun',3,['jijiu','chulao']], + old_guanyu:['male','shu',4,['wusheng','yijue']], old_caochun:['male','wei',4,['shanjia']], masu:['male','shu',3,['xinzhan','huilei']], xushu:['male','shu',3,['xswuyan','jujian'],['border:wei']], @@ -1035,6 +1036,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ old_zhangfei_prefix:'新杀', old_huatuo:'OL华佗', old_huatuo_prefix:'OL', + old_guanyu:'旧关羽', + old_guanyu_prefix:'旧', ol_zhangrang:'旧张让', ol_zhangrang_prefix:'旧', ol_liaohua:'OL廖化', diff --git a/character/refresh.js b/character/refresh.js index b57f108c2..c977cbf85 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -15475,7 +15475,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ol_lingtong:'OL界凌统', ol_lingtong_prefix:'OL界', olxuanfeng:'旋风', - olxuanfeng_info:'当你一次性失去超过两张牌后,或失去装备区的牌后,你可以依次弃置一至两名其他角色的共计两张牌。', + olxuanfeng_info:'当你一次性失去至少两张牌后,或失去装备区的牌后,你可以依次弃置一至两名其他角色的共计两张牌。', refresh_standard:'界限突破·标', refresh_feng:'界限突破·风', diff --git a/character/sp.js b/character/sp.js index 3b45dd158..52a61508d 100755 --- a/character/sp.js +++ b/character/sp.js @@ -28,9 +28,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ol_dongzhao:function(mode){ return mode=='identity'&&['normal','zhong'].contains(_status.mode); }, - lvboshe:function(mode){ - return mode=='doudizhu'; - }, }, character:{ ol_liwan:['female','wei',3,['ollianju','olsilv']], @@ -38,7 +35,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhangyan:['male','qun',4,['olsuji','ollangdao']], ol_tw_zhangji:['male','wei',3,['skill_zhangji_A','skill_zhangji_B'],['unseen']], ol_feiyi:['male','shu',3,['skill_feiyi_A','skill_feiyi_B'],['unseen']], - lvboshe:['male','qun',4,['skill_lvboshe'],['unseen']], + lvboshe:['male','qun',4,['olfushi','oldongdao']], ol_luyusheng:['female','wu',3,['olcangxin','olrunwei']], caoxi:['male','wei',3,['olgangshu','oljianxuan']], ol_pengyang:['male','shu',3,['olqifan','oltuishi','nzry_cunmu']], @@ -1548,14 +1545,263 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, //吕伯奢 - skill_lvboshe:{ + olfushi:{ + audio:2, + trigger:{global:'useCardAfter'}, + filter:function(event,player){ + return event.player.isIn()&&event.card.name=='sha'&&event.cards&&event.cards.filterInD().length&&get.distance(player,event.player)<=1; + }, + forced:true, + locked:false, + logTarget:'player', + content:function(){ + player.addToExpansion(trigger.cards.filterInD(),'gain2').gaintag.add('olfushi'); + }, + intro:{ + content:'expansion', + markcount:'expansion', + }, + onremove:function(player,skill){ + var cards=player.getExpansions(skill); + if(cards.length) player.loseToDiscardpile(cards); + }, + group:'olfushi_wusheng', + subSkill:{ + wusheng:{ + enable:'chooseToUse', + filter:function(event,player){ + if(event.olfushi) return false; + return player.getExpansions('olfushi').length; + }, + filterCard:()=>false, + selectCard:-1, + viewAs:{name:'sha'}, + prompt:'将任意“缚豕”牌置入弃牌堆并摸等量的牌,视为使用一张【杀】', + precontent:function(){ + 'step 0' + delete event.result.skill; + player.chooseButton([2,Infinity],[ + '###缚豕###
将任意“缚豕”牌置入弃牌堆并摸等量的牌,并选择执行等量项(超过三张默认全部执行)
', + player.getExpansions('olfushi'), + [['额外目标','伤害-1','伤害+1'],'tdnodes'], + ]).set('filterOk',()=>{ + if(!ui.selected.buttons.length) return false; + var controls=ui.selected.buttons.filter(button=>typeof button.link=='string'); + var cards=ui.selected.buttons.filter(button=>typeof button.link=='object'); + return Math.min(cards.length,3)==controls.length; + }).set('ai',function(button){ + var player=_status.event.player; + var trigger=_status.event.getParent().result; + var targets=game.filterPlayer(target=>{ + return !trigger.targets.contains(target)&&player.canUse(trigger.card,target); + }); + var num1=targets.filter(target=>get.effect(target,trigger.card,player,player)>0).length; + var num2=targets.length-num1; + var list; + var num3=player.getExpansions('olfushi').length; + if((num1>0&&num2>0)||(num1==0&&num2==0)){ + switch(num3){ + case 1: + list=[['额外目标','伤害+1'].randomGet()]; + break; + case 2: + list=[['额外目标','伤害+1'].randomGet(),'伤害-1']; + break; + default: + list=['额外目标','伤害-1','伤害+1']; + break; + } + } + else if(num2==0){ + switch(num3){ + case 1: + list=['伤害+1']; + break; + case 2: + list=['额外目标','伤害+1']; + break; + default: + list=['额外目标','伤害-1','伤害+1']; + break; + } + } + else if(num1==0){ + switch(num3){ + case 1: + list=['伤害-1']; + break; + default: + list=['伤害-1','伤害+1']; + break; + } + } + if(typeof button.link=='string'){ + if(list.contains(button.link)) return 114514; + return -1; + } + else{ + var cards=ui.selected.buttons.filter(button=>typeof button.link=='object'); + if(list.length==3||cards.lengthtypeof button=='string'); + var cards=result.links.filter(button=>typeof button=='object'); + player.logSkill('olfushi'); + player.recast(cards); + event.result.card.olfushi_buff=controls; + player.addTempSkill('olfushi_buff'); + } + else{ + event.getParent().olfushi=true; + event.getParent().goto(0); + return; + } + }, + order:function(item,player){ + return get.order({name:'sha'})+0.1; + }, + ai:{ + respondSha:true, + skillTagFilter:function(player,tag,arg){ + if(arg=='respond'||_status.event.olfushi) return false; + if(!player.getExpansions('olfushi').length) return false; + }, + }, + }, + buff:{ + charlotte:true, + trigger:{player:['useCard2','useCardToPlayered']}, + filter:function(event,player,name){ + if(!event.card.olfushi_buff) return false; + if(name=='useCard2') return true; + return event.getParent().triggeredTargets3.length==event.targets.length&&event.card.olfushi_buff.length>1&&event.card.olfushi_buff.contains('伤害-1')&&!event.targets.some(target=>!event.targets.contains(target.getPrevious())&&!event.targets.contains(target.getNext())); + }, + forced:true, + popup:false, + content:function(){ + 'step 0' + if(event.triggername=='useCardToPlayered'){ + trigger.getParent().addCount=false; + if(player.stat[player.stat.length-1].card.sha>0){ + player.stat[player.stat.length-1].card.sha--; + } + game.log(trigger.card,'不计入次数'); + event.finish(); + return; + } + var list=trigger.card.olfushi_buff; + event.list=list; + if(list.contains('额外目标')&&game.hasPlayer(target=>{ + return !trigger.targets.contains(target)&&player.canUse(trigger.card,target); + })){ + player.chooseTarget('请选择'+get.translation(trigger.card)+'的额外目标',function(card,player,target){ + var trigger=_status.event.getTrigger(); + return !trigger.targets.contains(target)&&player.canUse(trigger.card,target); + },true).set('ai',function(target){ + var player=_status.event.player; + return get.attitude(player,target); + }); + } + else event._result={bool:false}; + 'step 1' + if(result.bool){ + var targets=result.targets.sortBySeat(); + player.line(targets); + trigger.targets.addArray(targets); + game.log(targets,'成为了',trigger.card,'的额外目标'); + } + 'step 2' + if(event.list.contains('伤害-1')){ + player.chooseTarget('请选择'+get.translation(trigger.card)+'伤害-1的目标',function(card,player,target){ + var trigger=_status.event.getTrigger(); + return trigger.targets.contains(target); + },true).set('ai',function(target){ + var player=_status.event.player; + return get.attitude(player,target); + }); + } + else event._result={bool:false}; + 'step 3' + if(result.bool){ + var target=result.targets[0]; + player.line(target); + game.log(target,'受到',trigger.card,'的伤害-1'); + target.addTempSkill('olfushi_buff2'); + target.markAuto('olfushi_buff2',[trigger.card]); + } + 'step 4' + if(event.list.contains('伤害+1')){ + player.chooseTarget('请选择'+get.translation(trigger.card)+'伤害+1的目标',function(card,player,target){ + var trigger=_status.event.getTrigger(); + return trigger.targets.contains(target); + },true).set('ai',function(target){ + var player=_status.event.player; + return get.damageEffect(target,player,player); + }); + } + else event.finish(); + 'step 5' + if(result.bool){ + var target=result.targets[0]; + player.line(target); + game.log(target,'受到',trigger.card,'的伤害+1'); + target.addTempSkill('olfushi_buff3'); + target.markAuto('olfushi_buff3',[trigger.card]); + } + }, + }, + buff2:{ + charlotte:true, + onremove:true, + trigger:{player:'damageBegin2'}, + filter:function(event,player){ + return event.card&&player.getStorage('olfushi_buff2').contains(event.card); + }, + forced:true, + popup:false, + content:function(){ + trigger.num--; + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(player.hasSkillTag('jueqing',false,target)) return; + if(!card||!player.getStorage('olfushi_buff2').contains(card)) return; + var num=get.tag(card,'damage'); + if(num){ + if(num>1) return 0.5; + return 0; + } + }, + }, + }, + }, + buff3:{ + charlotte:true, + onremove:true, + trigger:{player:'damageBegin1'}, + filter:function(event,player){ + return event.card&&player.getStorage('olfushi_buff3').contains(event.card); + }, + forced:true, + popup:false, + content:function(){ + trigger.num++; + }, + }, + }, + }, + oldongdao:{ mode:['doudizhu'], zhuanhuanji:true, mark:true, - markcount:'☯', + marktext:'☯', intro:{ content:function(storage){ - if(storage) return '农民的回合结束时,你可以令其进行一个额外回合'; + if(storage) return '农民的回合结束时,其可以进行一个额外回合'; return '农民的回合结束时,你可以令地主进行一个额外回合'; }, }, @@ -1564,17 +1810,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){ filter:function(event,player){ return event.player.identity=='fan'; }, - prompt2:function(event,player){ - return '令'+get.translation(lib.skill.skill_lvboshe.logTarget(event,player))+'进行一个额外回合'; - }, - logTarget:function(event,player){ - var storage=player.storage.skill_lvboshe; - return storage?event.player:game.zhu; - }, + direct:true, content:function(){ - var target=lib.skill.skill_lvboshe.logTarget(trigger,player); - player.changeZhuanhuanji('skill_lvboshe'); - target.insertPhase(); + 'step 0' + var target=(player.storage.oldongdao?trigger.player:game.zhu); + event.target=target; + var target2=(player.storage.oldongdao?trigger.player:player); + event.target2=target2; + target2.chooseBool(get.prompt('oldongdao'),'令'+get.translation(target)+'进行一个额外回合'); + 'step 1' + if(result.bool){ + player.logSkill('oldongdao'); + event.target2.line(target); + player.changeZhuanhuanji('oldongdao'); + target.insertPhase(); + } }, }, //OL陆郁生 @@ -2190,6 +2440,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return event.isFirstTarget&&event.targets.length>player.getHp(); }, direct:true, + usable:1, content:function(){ 'step 0' player.chooseTarget(get.prompt('olkuansai'),'令其中一个目标选择一项:1.交给你一张牌;2.令你回复1点体力。',(card,player,target)=>{ @@ -2237,7 +2488,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return true; }()); } - else event.finish(); + else{ + player.storage.counttrigger.olkuansai--; + event.finish(); + } 'step 2' if(result.bool){ target.give(result.cards,player); @@ -24885,9 +25139,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(player.storage.olsaogu) return '转换技。①出牌阶段,你可以。阴:弃置两张牌(不能包含你本阶段弃置过的花色),然后使用其中的【杀】;阳:摸一张牌。②结束阶段,你可以弃置一张牌,令一名其他角色执行你当前〖扫谷①〗的分支。'; return '转换技。①出牌阶段,你可以。阴:弃置两张牌(不能包含你本阶段弃置过的花色),然后使用其中的【杀】;阳:摸一张牌。②结束阶段,你可以弃置一张牌,令一名其他角色执行你当前〖扫谷①〗的分支。'; }, - skill_lvboshe:function(player){ - if(player.storage.skill_lvboshe) return '农民的回合结束时:阴,你可以令地主进行一个额外回合;阳,你可以令其进行一个额外回合。'; - return '农民的回合结束时:阴,你可以令地主进行一个额外回合;阳,你可以令其进行一个额外回合。'; + oldongdao:function(player){ + if(player.storage.oldongdao) return '农民的回合结束时:阴,你可以令地主进行一个额外回合;阳,其可以进行一个额外回合。'; + return '农民的回合结束时:阴,你可以令地主进行一个额外回合;阳,其可以进行一个额外回合。'; }, ollangdao:function(player){ var str='当你使用【杀】指定唯一目标时,你可以与该目标角色同时选择一项:'; @@ -26126,7 +26380,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ olweifu:'威抚', olweifu_info:'出牌阶段,你可以弃置一张牌并判定。你本回合下次使用与结果类型相同的牌无距离限制,且可以额外指定一个目标。若你弃置的牌与判定牌类型相同,你摸一张牌。', olkuansai:'款塞', - olkuansai_info:'当一张牌指定第一个目标后,若目标数大于你的体力值,你可以令其中一个目标选择一项:1.交给你一张牌;2.令你回复1点体力。', + olkuansai_info:'每回合限一次,当一张牌指定第一个目标后,若目标数大于你的体力值,你可以令其中一个目标选择一项:1.交给你一张牌;2.令你回复1点体力。', ol_luyusheng:'OL陆郁生', ol_luyusheng_prefix:'OL', olcangxin:'藏心', @@ -26155,8 +26409,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ skill_feiyi_B:'技能', skill_feiyi_B_info:'每回合每项限一次,当你的手牌数变为1后,你可以展示此唯一手牌A并摸一张牌,然后你选择一项:①本回合使用点数大于A的点数的牌额外结算一次;②本回合使用点数小于A的点数的牌额外结算一次。', lvboshe:'吕伯奢', - skill_lvboshe:'技能', - skill_lvboshe_info:'农民的回合结束时:阴,你可以令地主进行一个额外回合;阳,你可以令其进行一个额外回合。', + olfushi:'缚豕', + olfushi_info:'①一名角色使用【杀】结算完毕后,若你与其的距离不大于1,你将此【杀】对应的所有实体牌置于武将牌上。②你可以将任意张“缚豕“牌置入弃牌堆并摸等量的牌,视为使用一张具有以下等同于置入弃牌堆牌数量的效果的【杀】:1.此【杀】额外指定一个目标;2.此【杀】对其中一个目标角色造成的伤害-1;3.此【杀】对其中一个目标造成的伤害+1。且此【杀】指定最后一个目标后,若此【杀】选择的效果和选择的目标均相邻,则此【杀】不计入次数限制。', + oldongdao:'东道', + oldongdao_info:'农民的回合结束时:阴,你可以令地主进行一个额外回合;阳,其可以进行一个额外回合。', zhangyan:'张燕', olsuji:'肃疾', olsuji_info:'一名角色的出牌阶段开始时,若其已受伤,你可以将一张黑色牌当【杀】使用。若其受到此【杀】的伤害,你获得其一张牌。', diff --git a/character/standard.js b/character/standard.js index 5ab0fdc71..3b97cf3c3 100755 --- a/character/standard.js +++ b/character/standard.js @@ -1013,7 +1013,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, wusheng:{ audio:2, - audioname2:{old_guanzhang:'old_fuhun'}, + audioname2:{ + old_guanzhang:'old_fuhun', + old_guanyu:'wusheng_re_guanyu', + }, audioname:['re_guanyu','guanzhang','jsp_guanyu','guansuo','re_guanzhang','dc_jsp_guanyu'], enable:['chooseToRespond','chooseToUse'], filterCard:function(card,player){ @@ -1048,6 +1051,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ respondSha:true, } }, + wusheng_re_guanyu:{audio:2}, zhongyi:{ audio:2, enable:'phaseUse', diff --git a/game/game.js b/game/game.js index c4e80fc49..72d7859f2 100644 --- a/game/game.js +++ b/game/game.js @@ -42192,16 +42192,19 @@ if(info.forbid&&info.forbid.contains(mode)){ lib.skill[i]={}; if(lib.translate[iInfo]) lib.translate[iInfo]='此模式下不可用'; + if(lib.dynamicTranslate[i]) lib.dynamicTranslate[i]=()=>'此模式下不可用'; return; } if(info.mode&&info.mode.contains(mode)==false){ lib.skill[i]={}; if(lib.translate[iInfo]) lib.translate[iInfo]='此模式下不可用'; + if(lib.dynamicTranslate[i]) lib.dynamicTranslate[i]=()=>'此模式下不可用'; return; } if(info.available&&info.available(mode)==false){ lib.skill[i]={}; if(lib.translate[iInfo]) lib.translate[iInfo]='此模式下不可用'; + if(lib.dynamicTranslate[i]) lib.dynamicTranslate[i]=()=>'此模式下不可用'; return; } if(info.viewAs&&typeof info.viewAs!='function'){ diff --git a/image/character/lvboshe.jpg b/image/character/lvboshe.jpg new file mode 100644 index 000000000..76a118405 Binary files /dev/null and b/image/character/lvboshe.jpg differ diff --git a/image/character/ol_lingtong.jpg b/image/character/ol_lingtong.jpg new file mode 100644 index 000000000..45f3a32dc Binary files /dev/null and b/image/character/ol_lingtong.jpg differ diff --git a/image/character/old_guanyu.jpg b/image/character/old_guanyu.jpg new file mode 100644 index 000000000..f6c1fe524 Binary files /dev/null and b/image/character/old_guanyu.jpg differ