diff --git a/audio/skill/gzyinghun_re_sunyi1.mp3 b/audio/skill/gzyinghun_re_sunyi1.mp3 new file mode 100644 index 000000000..6d4551fff Binary files /dev/null and b/audio/skill/gzyinghun_re_sunyi1.mp3 differ diff --git a/audio/skill/reyingzi_re_sunyi1.mp3 b/audio/skill/reyingzi_re_sunyi1.mp3 new file mode 100644 index 000000000..13a5a7d88 Binary files /dev/null and b/audio/skill/reyingzi_re_sunyi1.mp3 differ diff --git a/character/extra.js b/character/extra.js index 953de5394..4a1c6edcd 100755 --- a/character/extra.js +++ b/character/extra.js @@ -5752,7 +5752,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var map={sha:'diamond',tao:'heart'} for(var i=0;i0&&player.getUseValue({name:name,nature:name=='sha'?'fire':null})>0){ var temp=get.order({name:name,nature:name=='sha'?'fire':null}); @@ -5767,7 +5767,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } return 1; }, - position:'hs', + position:'hes', filterCard:function(card,player,event){ event=event||_status.event; var filter=event._backup.filterCard; @@ -5780,10 +5780,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, filter:function(event,player){ var filter=event.filterCard; - if(filter({name:'sha',nature:'fire'},player,event)&&player.countCards('hs',{suit:'diamond'})) return true; - if(filter({name:'shan'},player,event)&&player.countCards('hs',{suit:'club'})) return true; - if(filter({name:'tao'},player,event)&&player.countCards('hs',{suit:'heart'})) return true; - if(filter({name:'wuxie'},player,event)&&player.countCards('hs',{suit:'spade'})) return true; + if(filter({name:'sha',nature:'fire'},player,event)&&player.countCards('hes',{suit:'diamond'})) return true; + if(filter({name:'shan'},player,event)&&player.countCards('hes',{suit:'club'})) return true; + if(filter({name:'tao'},player,event)&&player.countCards('hes',{suit:'heart'})) return true; + if(filter({name:'wuxie'},player,event)&&player.countCards('hes',{suit:'spade'})) return true; return false; }, ai:{ @@ -5796,7 +5796,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ case 'respondShan':name='club';break; case 'save':name='heart';break; } - if(!player.countCards('hs',{suit:name})) return false; + if(!player.countCards('hes',{suit:name})) return false; }, order:function(item,player){ if(player&&_status.event.type=='phase'){ @@ -5805,7 +5805,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var map={sha:'diamond',tao:'heart'} for(var i=0;i0&&player.getUseValue({name:name,nature:name=='sha'?'fire':null})>0){ var temp=get.order({name:name,nature:name=='sha'?'fire':null}); @@ -5819,9 +5819,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, hiddenCard:function(player,name){ - if(name=='wuxie'&&_status.connectMode&&player.countCards('hs')>0) return true; - if(name=='wuxie') return player.countCards('hs',{suit:'spade'})>0; - if(name=='tao') return player.countCards('hs',{suit:'heart'})>0; + if(name=='wuxie'&&_status.connectMode&&player.countCards('hes')>0) return true; + if(name=='wuxie') return player.countCards('hes',{suit:'spade'})>0; + if(name=='tao') return player.countCards('hes',{suit:'heart'})>0; }, }, xinjuejing:{ @@ -6955,7 +6955,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ relonghun:'龙魂', relonghun_info:'你可以将同花色的一至两张牌按下列规则使用或打出:红桃当【桃】,方块当火【杀】,梅花当【闪】,黑桃当普【无懈可击】。若你以此法使用了两张红色牌,则此牌回复值或伤害值+1。若你以此法使用了两张黑色牌,则你弃置当前回合角色一张牌。', xinlonghun:'龙魂', - xinlonghun_info:'你可以将你的手牌按下列规则使用或打出:红桃当【桃】,方块当火【杀】,梅花当【闪】,黑桃当普【无懈可击】。', + xinlonghun_info:'你可以将你的牌按下列规则使用或打出:红桃当【桃】,方块当火【杀】,梅花当【闪】,黑桃当普【无懈可击】。', longhun:'龙魂', longhun1:'龙魂♥︎', longhun2:'龙魂♦︎', diff --git a/character/refresh.js b/character/refresh.js index b8b6aef28..0570fa5ee 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -437,7 +437,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); 'step 2' player.give(result.cards,trigger.player); - trigger.player.addSkill('rexiantu_check'); + trigger.player.addTempSkill('rexiantu_check','phaseUseAfter'); trigger.player.markAuto('rexiantu_check',[player]); }, ai:{ @@ -12444,6 +12444,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ reyingzi:{ audio:2, audioname:['heqi','sunce','gexuan','re_sunben','re_sunce','re_heqi'], + audioname2:{re_sunyi:'reyingzi_re_sunyi'}, trigger:{player:'phaseDrawBegin2'}, forced:true, preHidden:true, diff --git a/character/shenhua.js b/character/shenhua.js index c4eb1f74f..7d9ae8ab2 100755 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -5085,6 +5085,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ gzyinghun:{ audio:'yinghun', audioname:['re_sunjian','sunce','re_sunben','re_sunce','ol_sunjian','sb_sunce'], + audioname2:{re_sunyi:'gzyinghun_re_sunyi'}, trigger:{player:'phaseZhunbeiBegin'}, filter:function(event,player){ return player.getDamagedHp()>0; diff --git a/character/sp.js b/character/sp.js index 882c26801..03b919fdf 100755 --- a/character/sp.js +++ b/character/sp.js @@ -8271,10 +8271,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ai:{ effect:{ target:function(card,player,target){ - if(!_status.olxiuhao_judging&&get.tag(card,'damage')&&get.attitude(target,player)>0&&(!target.storage.counttrigger||!target.storage.counttrigger.olxiuhao)) return [0,0.5,0,0.5]; + if(!_status.olxiuhao_judging&&get.tag(card,'damage')&&get.attitude(target,player)>0&&player!=target&&(!target.storage.counttrigger||!target.storage.counttrigger.olxiuhao)) return [0,0.5,0,0.5]; }, player:function(card,player,target){ - if(!_status.olxiuhao_judging&&get.tag(card,'damage')&&get.attitude(player,target)>0&&(!player.storage.counttrigger||!player.storage.counttrigger.olxiuhao)) return [0,0.5,0,0.5]; + if(!_status.olxiuhao_judging&&get.tag(card,'damage')&&get.attitude(player,target)>0&&player!=target&&(!player.storage.counttrigger||!player.storage.counttrigger.olxiuhao)) return [0,0.5,0,0.5]; }, }, }, @@ -9209,7 +9209,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ backup:function(links,player){ return { selectCard:player.countMark('jinzhi2')+1, - filterCard:lib.filter.cardDiscardable, + filterCard:function(card,player){ + if(ui.selected.cards.length){ + if(get.color(card)!=get.color(ui.selected.cards[0])) return false; + } + return lib.filter.cardDiscardable.apply(this,arguments); + }, + complexCard:true, viewAs:{ name:links[0][2], nature:links[0][3], @@ -9258,7 +9264,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ prompt:function(links,player){ var name=links[0][2]; var nature=links[0][3]; - return '弃置'+get.cnNumber(player.countMark('jinzhi2')+1)+'张牌并摸一张牌。若弃置的牌颜色均相同,则视为使用'+(get.translation(nature)||'')+get.translation(name); + return '弃置'+get.cnNumber(player.countMark('jinzhi2')+1)+'张颜色相同的牌并摸一张牌,然后视为使用'+(get.translation(nature)||'')+get.translation(name); }, }, ai:{ @@ -22991,7 +22997,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ weiyi_info:'每名角色限一次。当有角色受到伤害后,你可选择:①若其体力值不小于你,则其失去1点体力。②若其体力值不大于你且其已受伤,则其回复1点体力。', jinzhi:'锦织', jinzhi2:'锦织', - jinzhi_info:'当你需要使用或打出一张基本牌时,你可弃置X+1张牌并摸一张牌。若你以此法弃置的牌均为同一颜色,则视为你使用或打出了此牌。(X为你于本轮内发动此技能的次数)', + jinzhi_info:'当你需要使用或打出一张基本牌时,你可弃置X+1张颜色相同的牌并摸一张牌,然后视为你使用或打出了此牌。(X为你于本轮内发动此技能的次数)', yanxiao_card:'言笑', yanxiao_global:'言笑', yanxiao_card_info:'判定阶段开始时,你获得判定区内的所有牌。', diff --git a/character/sp2.js b/character/sp2.js index 63fd35807..a29865cf5 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -17200,6 +17200,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, derivation:['olhunzi','reyingzi','gzyinghun'], }, + gzyinghun_re_sunyi:{audio:1}, + reyingzi_re_sunyi:{audio:1}, //庞德公 heqia:{ audio:2, @@ -27424,10 +27426,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xpchijie:{ audio:2, trigger:{ - player:'useCardToAfter', + target:'useCardToAfter', }, filter:function(event,player){ - return !player.hasSkill('xpchijie4')&&event.player!=player; + var evt=event.getParent(); + var targets=evt.targets.slice(evt.num+1); + return event.player!=player&&targets.length>0; + }, + usable:1, + prompt2:function(event,player){ + var evt=event.getParent(); + var targets=evt.targets.slice(evt.num+1); + return '令'+get.translation(event.card)+'对'+get.translation(targets)+'无效'; }, check:function(event,player){ var evt=event.getParent(); @@ -27439,7 +27449,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return num<-1; }, content:function(){ - player.addTempSkill('xpchijie4'); var evt=trigger.getParent(); evt.excluded.addArray(evt.targets); }, @@ -27449,17 +27458,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{global:'useCardAfter'}, audio:'xpchijie', filter:function(event,player){ - return event.player!=player&&event.targets.contains(player)&&!player.hasSkill('xpchijie4')&&event.cards.filterInD().length>0&&!game.hasPlayer2(function(current){ + return event.player!=player&&event.targets.contains(player)&&event.cards.filterInD().length>0&&!game.hasPlayer2(function(current){ return current.getHistory('damage',function(evt){ return evt.card==event.card; }).length>0; }); }, + usable:1, check:function(event,player){ return get.value(event.cards.filterInD(),player,'raw')>0; }, + prompt2:function(event,player){ + return '获得'+get.translation(event.cards.filterInD())+'。'; + }, content:function(){ - player.addTempSkill('xpchijie4'); player.gain(trigger.cards.filterInD(),'log','gain2'); }, }, @@ -27476,6 +27488,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.storage.yinju2=target; player.addTempSkill('yinju2'); }, + ai:{ + result:{ + player:function(player,target){ + if(player.countCards('hs',function(card){ + return get.tag(card,'damage')&&player.canUse(card,target); + })>=1&&target.hp<=2) return 0.1; + if(player.countCards('hes',function(card){ + return player.canUse(card,target); + })<=2) return -100; + return 1; + }, + target:function(player,target){ + return target.isDamaged()?5:3; + }, + } + } }, yinju2:{ trigger:{ @@ -27504,6 +27532,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 1' game.delayx(); }, + ai:{ + effect:{ + player:function(card,player,target){ + if(target!=player.storage.yinju2) return; + if(card.name=='lebu') return; + return [0,0.5,0,0.5]; + }, + }, + }, }, //管辂和葛玄 gxlianhua:{ @@ -29779,7 +29816,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ lskuizhu:'馈珠', lskuizhu_info:'出牌阶段结束时,你可以选择体力值为全场最多的一名其他角色,将手牌摸至与该角色相同(最多摸至五张),然后该角色观看你的手牌,弃置任意张手牌并从观看的牌中获得等量的牌。若其获得的牌大于一张,则你选择一项:移去一个“珠”;或令其对其攻击范围内的一名角色造成1点伤害。', xpchijie:'持节', - xpchijie_info:'每回合限一次。①当你其他角色使用的牌对你结算结束后,你可以令此牌对所有后续目标无效。②其他角色使用的牌结算完成时,若你是此牌的目标之一且此牌未造成过伤害,则你可以获得此牌对应的所有实体牌。', + xpchijie_info:'每回合每项各限一次。1.当其他角色使用的牌对你结算结束后,你可以令此牌对所有后续目标无效。2.其他角色使用的牌结算完成时,若你是此牌的目标之一且此牌未造成过伤害,则你可以获得此牌对应的所有实体牌。', xpchijie2:'持节', yinju:'引裾', yinju_info:'限定技,出牌阶段,你可以选择一名其他角色。若如此做,当你于此阶段内使用牌指定其为目标后,你与其各摸一张牌;当你即将对其造成伤害时,防止此伤害,然后其回复等量的体力。', diff --git a/character/tw.js b/character/tw.js index 0a6a6f79f..ff0e2a516 100644 --- a/character/tw.js +++ b/character/tw.js @@ -2211,16 +2211,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return '选项一'; }).set('list',list); 'step 1' - if(result.control=='背水!'&&player!=trigger.player) player.give(player.getCards('h'),trigger.player); - if(result.control!='选项二'){ + event.choice=result.control; + if(event.choice=='背水!'&&player!=trigger.player) player.give(player.getCards('h'),trigger.player); + 'step 2' + if(event.choice!='选项二'){ var card=get.cardPile2(function(card){ return card.name=='sha'; }); if(card) trigger.player.gain(card,'gain2'); else game.log('但牌堆里已经没有','#y杀','了!'); - if(result.control=='选项一') event.finish(); + if(event.choice=='选项一') event.finish(); } - if(result.control!='选项一'){ + 'step 3' + if(event.choice!='选项一'){ if(trigger.player.countCards('h')) trigger.player.chooseCardTarget({ prompt:'将一张手牌交给另一名其他角色并摸两张牌', filterCard:true, @@ -2237,7 +2240,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); else event.finish(); } - 'step 2' + 'step 4' var target=result.targets[0]; trigger.player.line(target); trigger.player.give(result.cards,target); diff --git a/mode/doudizhu.js b/mode/doudizhu.js index cf7a3590c..2acb75a04 100644 --- a/mode/doudizhu.js +++ b/mode/doudizhu.js @@ -1096,8 +1096,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } "step 3" for(var i=0;i