diff --git a/character/extra.js b/character/extra.js index b64afd467..b4c2be2b3 100755 --- a/character/extra.js +++ b/character/extra.js @@ -1126,13 +1126,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, dcxianjin:{ + init:function(player){ + var num=game.getAllGlobalHistory('changeHp',evt=>{ + return evt.getParent().name=='damage'&&(evt.getParent().player==player||(evt.getParent().source&&evt.getParent().source==player)); + }).concat(game.getAllGlobalHistory('changeHp',evt=>{ + return evt.getParent().name=='damage'&&evt.getParent().player==player&&evt.getParent().source&&evt.getParent().source==player; + })).length; + if(num) player.addMark('dcxianjin',num,false); + }, + onremove:true, audio:2, trigger:{ player:'damageEnd', source:'damageSource', }, filter:function(event,player){ - return game.getGlobalHistory('damage',evt=>evt.player==player||(evt.source&&evt.source==player)).indexOf(event)%2==1; + return player.countMark('dcxianjin')%2==0; }, forced:true, content:function(){ @@ -1155,6 +1164,23 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(player.isMaxHandcard()) player.draw(); else player.draw(player.getStorage('dctuoyu').length) }, + group:'dcxianjin_mark', + intro:{content:'已造成或受到#次伤害'}, + subSkill:{ + mark:{ + charlotte:true, + trigger:{ + player:'damageEnd', + source:'damageSource', + }, + forced:true, + popup:false, + firstDo:true, + content:function(){ + player.addMark('dcxianjin',1,false); + }, + }, + }, }, dcqijing:{ derivation:'dccuixin', @@ -1178,9 +1204,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var evt=trigger.getParent(); if(evt.name=='phaseLoop'&&evt._isStandardLoop) evt.player=player.next; } - player.chooseTarget(true,'请选择一名要更换座次的角色,将自己移动到该角色的上家位置',function(card,player,target){ + player.chooseTarget('请选择一名要更换座次的角色,将自己移动到该角色的上家位置',function(card,player,target){ return target!=player&&target!=player.next; - }).set('ai',function(target){ + },true).set('ai',function(target){ var player=_status.event.player; var current=_status.currentPhase.next; var max=20,att=0; @@ -1193,7 +1219,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return att; }) } - else event.goto(3); + else event.finish(); 'step 2' if(result.bool){ var target=result.targets[0]; @@ -1201,6 +1227,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ game.swapSeat(target1,target2,null,true); },player,target); } + else event.finish(); 'step 3' player.insertPhase(); }, @@ -4517,10 +4544,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' event.logged=false; - //event.targets=[]; + event.targets=[]; event.goto(player.countCards('h')%2==1?1:4); 'step 1' - player.chooseTarget(get.prompt('shenfu'),'对一名其他角色造成1点雷属性伤害',lib.filter.notMe).set('ai',function(target){ + player.chooseTarget(get.prompt('shenfu'),'对一名其他角色造成1点雷属性伤害',function(card,player,target){ + return target!=player&&!_status.event.getParent().targets.includes(target); + }).set('ai',function(target){ var player=_status.event.player; return get.damageEffect(target,player,player,'thunder')*(target.hp==1?2:1); }); @@ -4533,16 +4562,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.logSkill('shenfu',target,'thunder'); } else player.line(target,'thunder'); + event.targets.push(target); target.damage('thunder'); } else event.finish(); 'step 3' - if(target.isDead()) event.goto(1); + if(target.getHistory('damage',function(evt){ + return evt.getParent('shenfu')==event&&evt._dyinged; + }).length) event.goto(1); else event.finish(); 'step 4' - player.chooseTarget(get.prompt('shenfu'),'令一名角色摸一张牌或弃置其一张手牌'/*,function(card,player,target){ + player.chooseTarget(get.prompt('shenfu'),'令一名角色摸一张牌或弃置其一张手牌',function(card,player,target){ return !_status.event.getParent().targets.includes(target); - }*/).set('ai',function(target){ + }).set('ai',function(target){ var att=get.attitude(_status.event.player,target); var delta=target.hp-target.countCards('h'); if(Math.abs(delta)==1&&get.sgn(delta)==get.sgn(att)) return 3*Math.abs(att); @@ -4558,7 +4590,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.logSkill('shenfu',target); } else player.line(target,'green'); - //targets.push(target); + event.targets.push(target); if(target.countCards('h')==0) event._result={index:0}; else player.chooseControl('摸一张牌','弃置一张手牌').set('prompt','选择一项令'+get.translation(target)+'执行…').set('goon',get.attitude(player,target)>0?0:1).set('ai',()=>_status.event.goon); //else player.discardPlayerCard(target,'h','弃置'+get.translation(target)+'一张手牌,或点【取消】令其摸一张牌。'); @@ -7810,7 +7842,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shen_zhenji:'神甄宓', shen_zhenji_prefix:'神', shenfu:'神赋', - shenfu_info:'回合结束时,若你的手牌数为:奇数,你可对一名其他角色造成1点雷属性伤害。若其死亡,你可重复此流程。偶数,你可选择一名角色,你令其摸一张牌或弃置一张手牌。若其手牌数等于体力值,你可重复此流程。', + shenfu_info:'回合结束时,若你的手牌数为:奇数,你可对一名其他角色造成1点雷属性伤害。若其因此进入过濒死状态,你可重复此流程(不能选择本次已选择过的角色)。偶数,你可选择一名角色,你令其摸一张牌或弃置一张手牌。若其手牌数等于体力值,你可重复此流程(不能选择本次已选择过的角色)。', qixian:'七弦', qixian_info:'锁定技,你的手牌上限视为7。', caopi_xingdong:'行动', @@ -7978,7 +8010,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dcxianjin:'险进', dcxianjin_info:'锁定技。当你每造成或受到两次伤害后,你激活一个副区域标签并摸X张牌(X为你已激活的副区域数,若你的手牌数为全场最多则改为摸一张牌)。', dcqijing:'奇径', - dcqijing_info:'觉醒技。一名角色的回合结束后,若你的三个副区域标签均被激活,则你减1点体力上限,获得〖摧心〗,将座位移动至一名其他角色的上家之后,然后执行一个额外回合。', + dcqijing_info:'觉醒技。一名角色的回合结束后,若你的三个副区域标签均被激活,则你减1点体力上限,获得〖摧心〗,将座位移动至两名相邻的其他角色之间并执行一个额外回合。', dccuixin:'摧心', dccuixin_info:'当你不因此技能使用的基本牌或普通锦囊牌结算结束后,若此牌的目标于你使用此牌指定第一个目标时包含你的上家或下家,则你可以视为对下家或上家再使用一张牌名和元素相同的牌。', shen_dianwei:'神典韦', diff --git a/character/xianding.js b/character/xianding.js index 800e4074e..9182083ca 100644 --- a/character/xianding.js +++ b/character/xianding.js @@ -180,13 +180,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, trigger:{player:'useCardAfter'}, filter:function(event,player){ - var num=Math.max(player.getHistory('useSkill',evt=>evt.skill=='dczhifou').length,1); + var num=player.getHistory('useSkill',evt=>evt.skill=='dczhifou').length+1; return player.getExpansions('dclingxi').length>=num; }, direct:true, content:function*(event,map){ var player=map.player,cards=player.getExpansions('dclingxi'); - var num=Math.max(player.getHistory('useSkill',evt=>evt.skill=='dczhifou').length,1); + var num=player.getHistory('useSkill',evt=>evt.skill=='dczhifou').length+1; var result=yield player.chooseButton(['###'+get.prompt('dczhifou')+'###移去至少'+get.cnNumber(num)+'张武将牌上的“翼”',cards],[num,cards.length]).set('ai',button=>{ var player=_status.event.player; if(2*player.getExpansions('dclingxi').filter(card=>!ui.selected.buttons.some(but=>but.link==card)).reduce((list,card)=>list.add(get.suit(card,false)),[]).length-player.countCards('h')<=0) return 0; @@ -197,7 +197,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.logSkill('dczhifou'); player.loseToDiscardpile(result.links); var list=[],choiceList=[ - '将一张牌称为“翼”置于'+get.translation(player)+'的武将牌上', + '将一张牌称为“翼”置于你的武将牌上', '弃置两张牌', '失去1点体力', ]; @@ -241,18 +241,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return; } else if(list.length==1) result3={control:list[0]}; - else result3=yield target.chooseControl(list).set('prompt','知否:请选择一项').set('choiceList',choiceList).set('ai',()=>{ + else result3=yield player.chooseControl(list).set('prompt','知否:请选择一项').set('choiceList',choiceList.map(str=>'令'+get.translation(target)+str)).set('ai',()=>{ var player=_status.event.player; + var target=_status.event.target; var getNum=function(control){ return [ - get.effect(player,{name:'guohe_copy2'},player,player)/2, - get.effect(player,{name:'guohe_copy2'},player,player), - get.effect(player,{name:'losehp'},player,player), + get.effect(target,{name:'guohe_copy2'},target,player)/2, + get.effect(target,{name:'guohe_copy2'},target,player), + get.effect(target,{name:'losehp'},target,player), ][['置入“翼”','弃置卡牌','失去体力'].indexOf(control)]; }; var controls=_status.event.controls.slice(); return controls.sort((a,b)=>getNum(b)-getNum(a))[0]; - }); + }).set('target',target); switch(result3.control){ case '置入“翼”': player.addTempSkill('dczhifou_0'); @@ -13886,7 +13887,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dclingxi:'灵犀', dclingxi_info:'出牌阶段开始和结束时,你可以将至多X张牌称为“翼”置于你的武将牌上(X为你的体力上限)。当你失去武将牌上的“翼”时,你将手牌数调整至Y张(Y为你武将牌上的“翼”所含有的花色数的两倍)。', dczhifou:'知否', - dczhifou_info:'当你使用牌结算完毕后,你可以移去至少X张武将牌上的“翼”(X为本回合此前发动此技能的次数,且X至少为1),然后令一名角色选择执行以下一项:①将一张牌称为“翼”置于你的武将牌上;②弃置两张牌;③失去1点体力。', + dczhifou_info:'当你使用牌结算完毕后,你可以移去至少X张武将牌上的“翼”(X为本回合此前发动此技能的次数+1),然后选择一名角色并选择一项令其执行(每个选项每回合限选择一次):①将一张牌称为“翼”置于你的武将牌上;②弃置两张牌;③失去1点体力。', sp2_yinyu:'隐山之玉', sp2_huben:'百战虎贲',