diff --git a/character/clan.js b/character/clan.js index 83476ad9c..9939a030f 100644 --- a/character/clan.js +++ b/character/clan.js @@ -16,16 +16,264 @@ game.import('character',function(lib,game,ui,get,ai,_status){ clan_wukuang:['male','qun',4,['clanlianzhu','clanmuyin'],['clan:陈留吴氏']], clan_wangling:['male','wei',4,['clanbolong','clanzhongliu'],['clan:太原王氏']], clan_zhongyan:['female','jin',3,['clanguangu','clanxiaoyong','clanbaozu'],['clan:颍川钟氏']], + clan_wangyun:['male','qun',3,['clanjiexuan','clanmingjie','clanzhongliu'],['clan:太原王氏']], }, characterSort:{ clan:{ clan_wu:['clan_wuxian','clan_wuban','clan_wukuang'], clan_xun:['clan_xunshu','clan_xunchen','clan_xuncai','clan_xuncan'], clan_han:['clan_hanshao','clan_hanrong'], - clan_wang:['clan_wangling'], + clan_wang:['clan_wangling','clan_wangyun'], + clan_zhong:['clan_zhongyan'], }, }, skill:{ + //族王允 + clanjiexuan:{ + audio:2, + enable:'phaseUse', + limited:true, + zhuanhuanji:'number', + mark:true, + marktext:'☯', + intro:{ + markcount:()=>0, + content:function(storage){ + return '限定技,转换技。你可以将一张'+((storage||0)%2?'黑色牌当【过河拆桥】':'红色牌当【顺手牵羊】')+'使用。'; + }, + }, + viewAs:function(cards,player){ + var storage=player.storage.clanjiexuan; + var name=(storage||0)%2?'guohe':'shunshou'; + return {name:name}; + }, + check:function(card){ + var player=_status.event.player; + var storage=player.storage.clanjiexuan; + var name=(storage||0)%2?'guohe':'shunshou'; + var fix=player.hasSkill('clanzhongliu')&&get.position(card)!='h'?2:1; + return get.value({name:name},player)-get.value(card)+fix; + }, + position:'hes', + filterCard:function(card,player){ + var storage=player.storage.clanjiexuan; + return get.color(card)==((storage||0)%2?'black':'red'); + }, + skillAnimation:true, + animationColor:'thunder', + precontent:function(){ + 'step 0' + var skill='clanjiexuan'; + player.logSkill(skill); + player.changeZhuanhuanji(skill); + player.awakenSkill(skill,true); + delete event.result.skill; + }, + ai:{ + order:function(item,player){ + player=player||_status.event.player; + var storage=_status.event.player.storage.clanjiexuan; + var name=(storage||0)%2?'guohe':'shunshou'; + return get.order({name:name})+0.1; + }, + }, + }, + clanmingjie:{ + audio:2, + enable:'phaseUse', + limited:true, + filterTarget:true, + skillAnimation:true, + animationColor:'thunder', + content:function(){ + 'step 0' + player.awakenSkill('clanmingjie'); + player.addSkill('clanmingjie_effect'); + player.markAuto('clanmingjie_effect',[target]); + target.addTempSkill('clanmingjie_targeted',{player:'phaseAfter'}); + target.markAuto('clanmingjie_targeted',[player]); + }, + ai:{ + order:10, + result:{ + target:function(player,target){ + if(player.getStorage('clanmingjie_effect').contains(target)) return 0; + if(player.hasSkill('clanzhongliu')||player.hp==1){ + if(!player.hasCard(card=>{ + var info=get.info(card); + if(info.allowMultiple==false) return false; + if(!lib.filter.targetEnabled2(card,player,target)) return false; + return game.hasPlayer(current=>{ + return player.canUse(card,current)&&get.effect(current,card,player,player)>0&¤t!=target&&get.effect(target,card,player,player)>0; + }); + },'hs')) return 0; + } + else{ + if(player.countCards('hs',card=>{ + var info=get.info(card); + if(info.allowMultiple==false) return false; + if(!lib.filter.targetEnabled2(card,player,target)) return false; + return game.hasPlayer(current=>{ + return player.canUse(card,current)&&get.effect(current,card,player,player)>0&¤t!=target&&get.effect(target,card,player,player)>0; + }); + })<3) return 0; + } + return get.sgnAttitude(player,target); + }, + } + }, + subSkill:{ + effect:{ + trigger:{player:'useCard2'}, + charlotte:true, + filter:function(event,player){ + var card=event.card; + var info=get.info(card); + if(info.allowMultiple==false) return false; + if(event.targets&&!info.multitarget){ + if(player.getStorage('clanmingjie_effect').some(current=>{ + return current.isIn()&&!event.targets.contains(current)&&lib.filter.targetEnabled2(card,player,current); + })){ + return true; + } + } + return false; + }, + prompt:'是否发动【铭戒】?', + prompt2:function(event,player){ + var list=player.getStorage('clanmingjie_effect').filter(target=>{ + if(event.targets.contains(target)||!target.isIn()) return false; + return lib.filter.targetEnabled2(event.card,player,target); + }); + return '令'+get.translation(list)+'也成为'+get.translation(event.card)+'的目标'; + }, + logTarget:function(event,player){ + return player.getStorage('clanmingjie_effect').filter(target=>{ + if(event.targets.contains(target)||!target.isIn()) return false; + return lib.filter.targetEnabled2(event.card,player,target); + }); + }, + check:function(event,player){ + var eff=0; + var list=player.getStorage('clanmingjie_effect').filter(target=>{ + if(event.targets.contains(target)||!target.isIn()) return false; + return lib.filter.targetEnabled2(event.card,player,target); + }); + for(var i of list) eff+=get.effect(i,event.card,player,player); + return eff>0; + }, + content:function(){ + var list=player.getStorage('clanmingjie_effect').filter(target=>{ + if(trigger.targets.contains(target)||!target.isIn()) return false; + return lib.filter.targetEnabled2(trigger.card,player,target); + }); + if(list.length>0){ + trigger.targets.addArray(list); + game.log(list,'也成为了',trigger.card,'的目标'); + } + }, + intro:{ + content:'使用牌时可以额外指定$为目标', + }, + ai:{ + effect:{ + player:function(card,player,target){ + if(_status.event.getParent('useCard',true)||_status.event.getParent('_wuxie',true)) return; + if(player.getStorage('clanmingjie_effect').contains(target)) return [1,-0.5]; + }, + }, + }, + }, + targeted:{ + trigger:{ + player:'phaseEnd', + }, + filter:function(event,player){ + return player.getStorage('clanmingjie_targeted').length; + }, + forced:true, + popup:false, + onremove:['clanmingjie_targeted','clanmingjie_record'], + charlotte:true, + group:'clanmingjie_record', + content:function(){ + 'step 0' + var targets=player.getStorage('clanmingjie_targeted').slice(); + targets.sortBySeat(); + event.targets=targets; + event.targetsx=targets.slice(); + var cards=[]; + var list=player.getStorage('clanmingjie_record'); + if(list.length){ + cards.addArray(list); + } + cards=cards.filterInD('d'); + if(cards.length){ + event.cards=cards; + } + else event.goto(6); + 'step 1' + event.target=targets.shift(); + event.cards2=cards.filterInD('d'); + 'step 2' + target.chooseButton(['铭戒:是否使用这些牌?',event.cards2]).set('filterButton',button=>{ + return _status.event.player.hasUseTarget(button.link); + }).set('ai',button=>{ + return _status.event.player.getUseValue(button.link); + }); + 'step 3' + if(result.bool){ + var card=result.links[0]; + event.cards2.remove(card); + target.$gain2(card,false); + game.delayx(); + target.chooseUseTarget(card,true); + } + else event.goto(5); + 'step 4' + if(event.cards2.filter(card=>{ + return get.position(card,true)=='d'&&target.hasUseTarget(card); + }).length) event.goto(2); + 'step 5' + if(targets.length) event.goto(1); + 'step 6' + event.targetsx.forEach(target=>{ + target.unmarkAuto('clanmingjie_effect',[player]); + }); + player.removeSkill('clanmingjie_targeted'); + }, + marktext:'戒', + intro:{ + content:'已被$指定为〖铭戒〗目标', + }, + }, + record:{ + trigger:{ + global:['shaMiss','eventNeutralized','useCard1','phaseAfter'], + }, + silent:true, + forced:true, + charlotte:true, + filter:function(event,player){ + if(_status.currentPhase!=player) return false; + if(event.name=='useCard'){ + return get.suit(event.card)=='spade'; + } + if(event.name=='phase') return true; + if(event.type!='card') return false; + return true; + }, + content:function(){ + 'step 0' + if(trigger.name=='phase'){ + delete player.storage.clanmingjie_record; + return; + } + player.markAuto('clanmingjie_record',trigger.cards); + } + } + } + }, //钟琰族钟琰 clanguangu:{ audio:2, @@ -36,7 +284,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ marktext:'☯', intro:{ content:function(storage){ - return '转换技。出牌阶段限一次,你可以观看'+(storage?'一名角色的至多四张手':'牌堆顶的至多四张')+'牌,然后可以使用其中的一张牌'; + return '转换技。出牌阶段限一次,你可以观看'+(storage?'一名角色的至多四张手':'牌堆顶的至多四张')+'牌,然后可以使用其中的一张牌。'; }, }, filter:function(event,player){ @@ -132,7 +380,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ nature:get.nature(card,get.owner(card)), cards:[card], } - return player.hasUseTarget(cardx); + return player.hasUseTarget(cardx,null,false); }).set('ai',button=>{ var len=_status.event.len; var card=button.link; @@ -159,7 +407,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ nature:get.nature(card,get.owner(card)), cards:[card], } - var next=player.chooseUseTarget(cardx,[card],true).set('oncard',(card)=>{ + var next=player.chooseUseTarget(cardx,[card],true,false).set('oncard',(card)=>{ var owner=_status.event.getParent().owner; if(owner) owner.$throw(card.cards); }); @@ -348,7 +596,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, clanzhongliu:{ audio:2, - audioname:['clan_wangling'], + audioname:['clan_wangling','clan_wangyun'], trigger:{player:'useCard'}, forced:true, clanSkill:true, @@ -958,6 +1206,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ direct:true, forced:true, filter:function(event,player){ + if(!game.hasPlayer(current=>current!=player)) return false; var card=event.card,type=get.type2(card); for(var i=player.actionHistory.length-1; i>=0; i--){ var history=player.actionHistory[i].useCard; @@ -1392,7 +1641,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(cards.length) player.discard(cards); } 'step 1' - if(!player.isIn()) event.finish(); + if(!player.isIn()||!game.hasPlayer(current=>current!=player)) event.finish(); else player.chooseTarget('烈誓:令一名其他角色选择另一项',lib.filter.notMe,true).set('ai',target=>{ var player=_status.event.player,chosen=_status.event.getParent().choice,att=get.attitude(player,target); if(chosen=='damage'){ @@ -1881,6 +2130,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ clanxiaoyong_info:'锁定技。当你于回合内首次使用字数为X的牌时,你重置〖观骨〗(X为你上次发动〖观骨〗观看的牌数)。', clanbaozu:'保族', clanbaozu_info:'宗族技,限定技。当一名同族角色进入濒死状态时,你可以令其横置并回复1点体力。', + clan_wangyun:'族王允', + clanjiexuan:'解悬', + clanjiexuan_info:'限定技,转换技。阴:你可以将一张红色牌当【顺手牵羊】使用;阳:你可以将一张黑色牌当【过河拆桥】使用。', + clanmingjie:'铭戒', + clanmingjie_info:'限定技。出牌阶段,你可以选择一名角色,然后直到其下回合结束时,当你使用牌时你可以指定其为额外目标。然后其下回合结束时,你可以使用本回合使用过的黑桃牌和被抵消过的牌。', clan_wu:'陈留·吴氏', clan_xun:'颍川·荀氏', diff --git a/character/diy.js b/character/diy.js index 48ba89afc..153c0585a 100755 --- a/character/diy.js +++ b/character/diy.js @@ -8817,7 +8817,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return result.bool; }; 'step 1' - if(result.bool){ + if(result.bool&&game.hasPlayer(current=>current!=player)){ player.chooseTarget(lib.filter.notMe,true,'选择一名其他角色,对其造成1点雷属性伤害').set('ai',function(target){ var player=_status.event.player; return get.damageEffect(target,player,player,'thunder'); @@ -12731,6 +12731,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ popup:false, charlotte:true, filter:function(event,player){ + if(!game.hasPlayer(current=>current!=player)) return false; return event.skill=='junktaoluan_backup'||event.skill=='junktaoluan5'||event.skill=='junktaoluan4'; }, content:function(){ diff --git a/character/huicui.js b/character/huicui.js index 1d0d2362e..18b9dd342 100644 --- a/character/huicui.js +++ b/character/huicui.js @@ -1483,11 +1483,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return ui.discardPile.childNodes.length>0; }, onremove:true, + mark:true, marktext:'灵', intro:{ name2:'灵', - content:'mark', + mark:function(dialog,storage,player){ + dialog.addText('共有'+player.countMark(storage)+'个标记'); + dialog.addText('注:图标的颜色代表弃牌堆中较多的颜色'); + }, }, + global:'dchuiling_hint', content:function(){ 'step 0' var mark=false; @@ -1527,6 +1532,48 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.discardPlayerCard(target,'he',true); } }, + subSkill:{ + hint:{ + trigger:{ + global:['loseAfter','loseAsyncAfter','cardsDiscardAfter','equipAfter'], + }, + forced:true, + popup:false, + lastDo:true, + forceDie:true, + forceOut:true, + filter:function(event,player){ + if(event._dchuiling_checked) return false; + event._dchuiling_checked=true; + var cards=event.getd(); + if(!cards.filterInD('d').length) return false; + return true; + }, + markColor:[ + ['rgba(241, 42, 42, 0.75)', 'black'], + ['',''], + ['rgba(18, 4, 4, 0.75)', 'rgb(200, 200, 200)'] + ], + content:function(){ + 'step 0' + var red=0,black=0; + for(var i=0;i灵'; + for(var player of game.players){ + if(player.marks.dchuiling){ + player.marks.dchuiling.firstChild.style.backgroundColor=bgColor; + player.marks.dchuiling.firstChild.innerHTML=text; + } + } + },Math.sign(black-red)+1); + }, + } + }, mod:{ aiOrder:function(player,card,num){ if(get.itemtype(card)!='card') return; @@ -1575,7 +1622,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ filterCard:()=>false, selectCard:[0,1], prompt:function(){ - return '限定技。你可以失去〖汇灵〗,增加'+_status.event.player.countMark('dchuiling')+'点体力上限,然后获得〖踏寂〗和〖清荒〗。' + return '限定技。你可以失去〖汇灵〗,增加'+Math.min(game.countPlayer(),_status.event.player.countMark('dchuiling'))+'点体力上限,然后获得〖踏寂〗和〖清荒〗。' }, filter:function(event,player){ return player.countMark('dchuiling')>=4; @@ -1583,7 +1630,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' player.awakenSkill('dcchongxu'); - player.gainMaxHp(player.countMark('dchuiling')); + player.gainMaxHp(Math.min(game.countPlayer(),player.countMark('dchuiling'))); player.removeSkill('dchuiling'); 'step 1' player.addSkillLog('dctaji'); @@ -1598,7 +1645,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, result:{ player:function(player){ - return (player.countMark('dchuiling')>=6||player.hp<=2)?1:0; + var count=player.countMark('dchuiling'); + if(count>=game.countPlayer()-1) return 1; + return (count>=6||player.hp<=2)?1:0; } } } @@ -1764,6 +1813,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ get.translation(mark)+'】
'+lib.translate[mark+'_info']+'
']) } var target=game.filterPlayer(i=>i!=player)[0]; + if(!game.hasPlayer(current=>current!=player)) target=player; event.target=target; player.chooseButton(['引路:令'+get.translation(target)+'获得2枚〖引路〗标记',[list,'textbutton']]).set('ai',button=>{ var mark=button.link; @@ -3214,7 +3264,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ direct:true, onremove:['dcsilve','dcsilve_self'], filter:function(event,player){ - return (event.name!='phase'||game.phaseNumber==0); + return game.hasPlayer(current=>current!=player)&&(event.name!='phase'||game.phaseNumber==0); }, content:function(){ 'step 0' @@ -4113,6 +4163,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, enable:'phaseUse', usable:2, + filter:function(event,player){ + return game.hasPlayer(current=>current!=player); + }, chooseButton:{ dialog:function(event,player){ var dialog=ui.create.dialog('劝谏:令一名其他角色…','hidden'); @@ -6487,7 +6540,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 0' player.draw(); 'step 1' - if(player.countCards('h')>0){ + if(player.countCards('h')>0&&game.hasPlayer(current=>current!=player)){ var suits=lib.suit.slice(0),cards=player.getExpansions('yuanyu'); for(var i of cards) suits.remove(get.suit(i,false)); var str='选择一张手牌,作为“怨”置于武将牌上;同时选择一名其他角色,令该角色获得〖怨语〗的后续效果。' @@ -8414,6 +8467,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ direct:true, filter:function(event,player,name){ if(player.hasSkill('zhiwei2')) return false; + if(!game.hasPlayer(current=>current!=player)) return false; if(get.mode()=='guozhan') return event.name=='showCharacter'&&(event.toShow.contains('gz_luyusheng')||event.toShow.contains('luyusheng')); return event.name!='showCharacter'&&(name!='phaseBefore'||game.phaseNumber==0); }, @@ -10119,7 +10173,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dchuiling:'汇灵', dchuiling_info:'锁定技。当你使用牌时,若此牌颜色为弃牌堆中数量较少的颜色,你获得1枚“灵”标记。若弃牌堆中:红色牌数大于黑色牌数,你回复1点体力;黑色牌数大于红色牌数,你可以弃置一名其他角色的一张牌。', dcchongxu:'冲虚', - dcchongxu_info:'限定技。出牌阶段,若“灵”数不小于4,你可以失去〖汇灵〗,增加等同于“灵”数的体力上限,然后获得〖踏寂〗和〖清荒〗。', + dcchongxu_info:'限定技。出牌阶段,若“灵”数不小于4,你可以失去〖汇灵〗,增加等同于“灵”数的体力上限(至多增加场上人数的体力上限),然后获得〖踏寂〗和〖清荒〗。', dctaji:'踏寂', dctaji_info:'当你失去手牌后,根据你失去牌的原因执行以下效果:1.使用:你弃置其他角色一张牌;2.打出:你摸一张牌;3.弃置:你回复1点体力;4.其他:你下一次对其他角色造成伤害时,此伤害+1。', dcqinghuang:'清荒', diff --git a/character/mobile.js b/character/mobile.js index ab1231e86..831320e05 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -2011,7 +2011,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ direct:true, group:['sbanguo_move','sbanguo_damage','sbanguo_dying'], filter:function(event,player){ - return (event.name!='phase'||game.phaseNumber==0); + return game.hasPlayer(current=>current!=player)&&(event.name!='phase'||game.phaseNumber==0); }, content:function(){ 'step 0' @@ -2423,6 +2423,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ direct:true, group:['yijin_upstart','yijin_die'], filter:function(event,player){ + if(!game.hasPlayer(current=>current!=player)) return false; return lib.skill.yijin.getKane(player).length; }, getKane:function(player){ @@ -2691,7 +2692,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ enable:'phaseUse', usable:1, filter:function(event,player){ - return game.countPlayer()>2; + return game.countPlayer(current=>current!=player)>=2; }, filterTarget:lib.filter.notMe, selectTarget:2, @@ -8079,7 +8080,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else event.finish(); } 'step 1' - if(result.bool){ + if(result.bool&&game.hasPlayer(current=>current!=player)){ event.card=result.links[0]; player.chooseTarget(true,lib.filter.notMe,'选择一名其他角色获得'+get.translation(event.card)).set('ai',function(target){ return get.value(_status.event.getParent().card,target)*get.attitude(_status.event.player,target); @@ -9172,7 +9173,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else event.finish(); 'step 2' var max=Math.min(player.hp,target.countCards('he')); - if(max>0){ + if(max>0&&target.isIn()){ player.choosePlayerCard('he',target,true,[1,max]).set('forceAuto',true).set('prompt','将'+get.translation(target)+'的至多'+get.cnNumber(max)+'张牌置于其武将牌上'); } else event.finish(); diff --git a/character/sb.js b/character/sb.js index d8b3b01c4..ee57a1f77 100644 --- a/character/sb.js +++ b/character/sb.js @@ -3726,7 +3726,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ direct:true, dutySkill:true, filter:function(event,player){ - return (event.name!='phase'||game.phaseNumber==0); + return game.hasPlayer(current=>current!=player)&&(event.name!='phase'||game.phaseNumber==0); }, content:function(){ 'step 0' diff --git a/character/sp.js b/character/sp.js index 2773131a5..29cc1ad06 100755 --- a/character/sp.js +++ b/character/sp.js @@ -12145,7 +12145,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, forced:true, filter:function(event){ - return game.players.length>1&&(event.name!='phase'||game.phaseNumber==0); + return game.hasPlayer(current=>current!=player)&&(event.name!='phase'||game.phaseNumber==0); }, audio:6, content:function(){ @@ -18744,6 +18744,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ global:'loseAsyncAfter', }, filter:function(event,player){ + if(!game.hasPlayer(current=>current!=player)) return false; if(event.type!='discard'||event.getlx===false) return false; var evt=event.getl(player); if(!evt||!evt.cards2) return false; diff --git a/character/sp2.js b/character/sp2.js index 465099903..b172a08b5 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -3816,7 +3816,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } event.finish(); 'step 6' - player.chooseTarget('令一名其他角色弃置一张点数为6的牌,否则交给你一张牌',true,function(card,player,current){ + if(!game.hasPlayer(current=>current!=player)) event.finish(); + else player.chooseTarget('令一名其他角色弃置一张点数为6的牌,否则交给你一张牌',true,function(card,player,current){ return current!=player&¤t.countCards('he')>0; }).set('ai',function(target){ var player=_status.event.player,att=get.attitude(player,target); @@ -4504,7 +4505,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'phaseBegin'}, direct:true, filter:function(event,player){ - return player.phaseNumber==1&&!player.storage.jielie; + return player.phaseNumber==1&&!player.storage.jielie&&game.hasPlayer(current=>current!=player); }, content:function(){ 'step 0' @@ -9648,7 +9649,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, forced:true, filter:function(event){ - return game.players.length>1&&(event.name!='phase'||game.phaseNumber==0); + return game.hasPlayer(current=>current!=player)&&(event.name!='phase'||game.phaseNumber==0); }, content:function(){ 'step 0' diff --git a/character/tw.js b/character/tw.js index 7065bf410..07c871d2b 100644 --- a/character/tw.js +++ b/character/tw.js @@ -713,7 +713,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ direct:true, onremove:true, filter:function(event,player){ - return (event.name!='phase'||game.phaseNumber==0); + return game.hasPlayer(current=>current!=player)&&(event.name!='phase'||game.phaseNumber==0); }, group:['twyanshi_hurt','twyanshi_damage'], content:function(){ @@ -5019,7 +5019,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else event.finish(); 'step 2' game.delayx(); - if(player.getExpansions('twxingwu').length<3) event.finish(); + if(player.getExpansions('twxingwu').length<3||!game.hasPlayer(current=>current!=player)) event.finish(); 'step 3' player.chooseButton(['是否移去三张“星舞”牌并发射核弹?',player.getExpansions('twxingwu')],3).set('ai',function(button){ if(_status.event.goon) return 1; @@ -8300,7 +8300,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:3, trigger:{global:'phaseBefore',player:'enterGame'}, filter:function(event,player){ - return event.name!='phase'||game.phaseNumber==0; + return game.hasPlayer(current=>current!=player)&&(event.name!='phase'||game.phaseNumber==0); }, forced:true, content:function(){ @@ -10710,7 +10710,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }; } else event.finish(); 'step 3' - if(result.bool){ + if(result.bool&&game.hasPlayer(current=>current!=player)){ player.chooseTarget('选择一名其他角色,对其造成2点雷电伤害',lib.filter.notMe,true).set('ai',target=>get.damageEffect(target,player,player,'thunder')); } 'step 4' @@ -13294,6 +13294,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' var choiceList=['令一名其他角色与你各摸一张牌','令自己下个出牌阶段可以多发动一次【外使】']; + event.count=0; + if(game.hasPlayer(current=>current!=player)){ + choiceList.shift(); + event.count++; + } if(lib.skill.chijie.filter&&lib.skill.chijie.filter({},player)) choiceList.push('将自己的势力变更为场上存在的一个其他势力'); player.chooseControl('cancel2').set('prompt',get.prompt('renshe')).set('choiceList',choiceList).set('ai',function(){ if(game.hasPlayer(function(current){ @@ -13306,13 +13311,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else{ event.index=result.index; player.logSkill('renshe'); - if(event.index==0){ + if(event.index+event.count==0){ player.chooseTarget('请选择一名角色,与其各摸一张牌',lib.filter.notMe,true).ai=function(target){ if(target.hasSkillTag('nogain')) return 0.1; return get.attitude(_status.event.player,target); }; } - else if(result.index==1){ + else if(result.index+event.count==1){ player.storage.waishi++; event.finish(); } diff --git a/character/xianding.js b/character/xianding.js index e854f8e1d..d6e46944b 100644 --- a/character/xianding.js +++ b/character/xianding.js @@ -1384,11 +1384,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 2' if(get.position(card)=='h'&&get.owner(card)==player&&player.hasUseTarget(card)){ player.chooseUseTarget(card,true); - event.finish(); } 'step 3' - player.link(true); - target.link(true); + if(player.hasHistory('useCard',evt=>{ + return evt.getParent(2).name=='dcjianzheng'&&evt.targets.contains(target); + })){ + player.link(true); + target.link(true); + } + else event.finish(); 'step 4' target.viewHandcards(player); }, @@ -1491,7 +1495,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } 'step 5' if(event.targets.length) event.goto(3); - else if(event.num) event.goto(1); + // else if(event.num) event.goto(1); }, ai:{ maixie:true, @@ -2207,7 +2211,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' player.recover(); - player.chooseTarget('残肆:选择一名其他角色',true,lib.filter.notMe).set('ai',target=>{ + if(!game.hasPlayer(current=>current!=player)) event.finish(); + else player.chooseTarget('残肆:选择一名其他角色',true,lib.filter.notMe).set('ai',target=>{ var player=_status.event.player; var list=['recover','sha','juedou','huogong']; return list.reduce((p,c)=>{ @@ -3140,8 +3145,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else choiceList[0]=''+choiceList[0]+(used?'(同名牌被使用过)':'(已选择)')+''; if(!player.hasSkill('dczhanmeng_choice1')) list.push('选项二'); else choiceList[1]=''+choiceList[1]+'(已选择)'; - if(!player.hasSkill('dczhanmeng_choice2')) list.push('选项三'); - else choiceList[2]=''+choiceList[2]+'(已选择)'; + var other=game.hasPlayer(current=>current!=player); + if(!player.hasSkill('dczhanmeng_choice2')&&other) list.push('选项三'); + else choiceList[2]=''+choiceList[2]+(!other?'(没人啦)':'(已选择)')+''; list.push('cancel2'); player.chooseControl(list).set('prompt',get.prompt('dczhanmeng')).set('ai',()=>{ var choices=_status.event.controls.slice().remove('cancel2'); @@ -3375,7 +3381,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ forced:true, direct:true, filter:function(event,player){ - return (event.name!='phase'||game.phaseNumber==0); + return game.hasPlayer(current=>current!=player)&&(event.name!='phase'||game.phaseNumber==0); }, content:function(){ 'step 0' @@ -4157,7 +4163,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } else event.redo(); event.nowProperty++; 'step 2' - player.chooseTarget('梦解:对一名其他角色造成1点伤害',true,lib.filter.notMe).set('ai',target=>get.damageEffect(target,player,player)); + if(!game.hasPlayer(current=>current!=player)) event._result={bool:false}; + else player.chooseTarget('梦解:对一名其他角色造成1点伤害',true,lib.filter.notMe).set('ai',target=>get.damageEffect(target,player,player)); 'step 3' if(result.bool){ player.logSkill('dcmengjie',result.targets[0]); @@ -4196,7 +4203,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ game.delayx(); event.goto(1); 'step 10' - player.chooseTarget('梦解:令一名其他角色将手牌补至上限',true,(card,player,target)=>{ + if(!game.hasPlayer(current=>current!=player)) event._result={bool:false}; + else player.chooseTarget('梦解:令一名其他角色将手牌补至上限',true,(card,player,target)=>{ return target!=player; }).set('ai',target=>{ var att=get.attitude(_status.event.player,target); @@ -8836,6 +8844,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ direct:true, skillAnimation:true, animationColor:'gray', + filter:function(event,player){ + return game.hasPlayer(current=>current!=player); + }, content:function(){ 'step 0' player.chooseTarget('请选择【毒逝】的目标','选择一名其他角色,令其获得技能【毒逝】',true,lib.filter.notMe).set('forceDie',true).set('ai',function(target){ @@ -10918,7 +10929,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dcxinyou_info:'出牌阶段限一次。你可以将体力回复至上限并将手牌补至体力上限。若你以此法:获得了至少两张牌,你于结束阶段失去1点体力;回复了体力,你于结束阶段弃置两张牌。', zerong:'笮融', dccansi:'残肆', - dccansi_info:'锁定技。准备阶段,你回复1点体力并选择一名其他角色,其回复1点体力,然后你视为对其依次使用以下能使用的牌:【杀】(无距离限制)、【决斗】、【火攻】。当其以此法受到1点伤害后,你摸两张牌。', + dccansi_info:'锁定技。准备阶段,你回复1点体力,然后选择一名其他角色,其回复1点体力,你视为对其依次使用以下能使用的牌:【杀】(无距离限制)、【决斗】、【火攻】。当其以此法受到1点伤害后,你摸两张牌。', dcfozong:'佛宗', dcfozong_info:'锁定技。出牌阶段开始时,若你的手牌数大于7,你将X张手牌置于武将牌上(X为你的手牌数-7)。然后若你的武将牌上有至少七张牌,其他角色依次选择一项:1.获得其中的一张牌并令你回复1点体力;2.令你失去1点体力。', dc_ruiji:'芮姬', @@ -10931,9 +10942,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dcliying_info:'每回合限一次。当你于摸牌阶段外获得牌后,你可以将这些牌中的任意张交给一名其他角色,然后摸一张牌。', huanfan:'桓范', dcjianzheng:'谏诤', - dcjianzheng_info:'出牌阶段限一次。你可以观看一名其他角色的手牌,然后若其中有你可以使用的手牌,你获得并使用其中一张。若你未以此法使用牌,你令你与其横置,然后其观看你的手牌。', + dcjianzheng_info:'出牌阶段限一次。你可以观看一名其他角色的手牌,然后若其中有你可以使用的手牌,你获得并使用其中一张。若你以此法使用牌指定了其为目标,你令你与其横置,然后其观看你的手牌。', dcfumou:'腹谋', - dcfumou_info:'当你受到1点伤害后,你可以令至多X名角色依次选择一项:1.移动场上的一张牌;2.弃置所有手牌并摸两张牌;3.弃置装备区里的所有牌并回复1点体力(X为你已损失的体力值)。', + dcfumou_info:'当你受到伤害后,你可以令至多X名角色依次选择一项:1.移动场上的一张牌;2.弃置所有手牌并摸两张牌;3.弃置装备区里的所有牌并回复1点体力(X为你已损失的体力值)。', chentai:'陈泰', dcctjiuxian:'救陷', dcctjiuxian_info:'出牌阶段限一次。你可以重铸一半数量的手牌(向上取整),然后视为使用一张【决斗】。当此牌对目标角色造成伤害后,你可以令其攻击范围内的一名其他角色回复1点体力。', diff --git a/character/yijiang.js b/character/yijiang.js index 224696939..1f699b0b6 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -2409,6 +2409,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ popup:false, charlotte:true, filter:function(event,player){ + if(!game.hasPlayer(current=>current!=player)) return false; return event.skill=='xintaoluan_backup'||event.skill=='xintaoluan5'||event.skill=='xintaoluan4'; }, content:function(){ @@ -5084,6 +5085,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ popup:false, charlotte:true, filter:function(event,player){ + if(!game.hasPlayer(current=>current!=player)) return false; return event.skill=='taoluan_backup'||event.skill=='taoluan5'||event.skill=='taoluan4'; }, content:function(){ diff --git a/game/game.js b/game/game.js index a56ec517d..c1b546850 100644 --- a/game/game.js +++ b/game/game.js @@ -22462,6 +22462,7 @@ } if(!name) return false; if(this.hasJudge(name)) return false; + if(this.isOut()) return false; var mod=game.checkMod(card,this,this,'unchanged','targetEnabled',this); if(mod!='unchanged') return mod; return true; diff --git a/image/character/clan_wangyun.jpg b/image/character/clan_wangyun.jpg new file mode 100644 index 000000000..4bb5cf078 Binary files /dev/null and b/image/character/clan_wangyun.jpg differ diff --git a/image/character/dc_wangjun.jpg b/image/character/dc_wangjun.jpg new file mode 100644 index 000000000..c03b7580a Binary files /dev/null and b/image/character/dc_wangjun.jpg differ diff --git a/mode/boss.js b/mode/boss.js index d8c00504d..daad28e65 100644 --- a/mode/boss.js +++ b/mode/boss.js @@ -2642,7 +2642,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ forced:true, content:function(){ 'step 0' - var list=game.players.slice(0); + var list=game.filterPlayer(); list.remove(player); if(list.length){ var target=list.randomGet();