'use strict'; game.import('card',function(lib,game,ui,get,ai,_status){ return { name:'yunchou', card:{ diaobingqianjiang:{ fullskin:true, type:'trick', enable:true, selectTarget:-1, filterTarget:function(card,player,target){ return player==target||target.countCards('h'); }, contentBefore:function(){ "step 0" game.delay(); player.draw(); "step 1" if(get.is.versus()){ player.chooseControl('顺时针','逆时针',function(event,player){ if(player.next.side==player.side) return '逆时针'; return '顺时针'; }).set('prompt','选择'+get.translation(card)+'的结算方向'); } else{ event.goto(3); } "step 2" if(result&&result.control=='顺时针'){ var evt=event.getParent(); evt.fixedSeat=true; evt.targets.sortBySeat(); evt.targets.reverse(); if(evt.targets[evt.targets.length-1]==player){ evt.targets.unshift(evt.targets.pop()); } } "step 3" ui.clear(); var cards=get.cards(Math.ceil(game.countPlayer()/2)); var dialog=ui.create.dialog('调兵遣将',cards,true); _status.dieClose.push(dialog); dialog.videoId=lib.status.videoId++; game.addVideo('cardDialog',null,['调兵遣将',get.cardsInfo(cards),dialog.videoId]); event.getParent().preResult=dialog.videoId; }, content:function(){ "step 0" for(var i=0;i<ui.dialogs.length;i++){ if(ui.dialogs[i].videoId==event.preResult){ event.dialog=ui.dialogs[i];break; } } if(!event.dialog||!target.countCards('h')){ event.finish(); return; } var minValue=20; var hs=target.getCards('h'); for(var i=0;i<hs.length;i++){ minValue=Math.min(minValue,get.value(hs[i],target)); } if(target.isUnderControl(true)){ event.dialog.setCaption('选择一张牌并用一张手牌替换之'); } var next=target.chooseButton(function(button){ return get.value(button.link,_status.event.player)-minValue; }); next.set('dialog',event.preResult); next.set('closeDialog',false); next.set('dialogdisplay',true); "step 1" event.dialog.setCaption('调兵遣将'); if(result.bool){ event.button=result.buttons[0]; target.chooseCard('用一张牌牌替换'+get.translation(result.links),true).ai=function(card){ return -get.value(card); } } else{ target.popup('不换'); event.finish(); } "step 2" if(result.bool){ target.lose(result.cards,ui.special); target.$throw(result.cards); game.log(target,'用',result.cards,'替换了',event.button.link); target.gain(event.button.link); target.$gain2(event.button.link); event.dialog.buttons.remove(event.button); event.dialog.buttons.push(ui.create.button(result.cards[0],'card',event.button.parentNode)); event.button.remove(); } "step 3" game.delay(2); }, contentAfter:function(){ 'step 0' event.dialog=get.idDialog(event.preResult); if(!event.dialog){ event.finish(); return; } var nextSeat=_status.currentPhase.next; var att=get.attitude(player,nextSeat); if(player.isUnderControl(true)&&!_status.auto){ event.dialog.setCaption('将任意张牌以任意顺序置于牌堆顶(先选择的在上)'); } var next=player.chooseButton([1,event.dialog.buttons.length],event.dialog); next.ai=function(button){ if(att>0){ return get.value(button.link,nextSeat)-5; } else{ return 5-get.value(button.link,nextSeat); } } next.set('closeDialog',false); next.set('dialogdisplay',true); 'step 1' if(result&&result.bool&&result.links&&result.links.length){ for(var i=0;i<result.buttons.length;i++){ event.dialog.buttons.remove(result.buttons[i]); } var cards=result.links.slice(0); while(cards.length){ ui.cardPile.insertBefore(cards.pop(),ui.cardPile.firstChild); } game.log(player,'将'+get.cnNumber(result.links.length)+'张牌置于牌堆顶'); } for(var i=0;i<event.dialog.buttons.length;i++){ event.dialog.buttons[i].link.discard(); } 'step 2' var dialog=event.dialog; dialog.close(); _status.dieClose.remove(dialog); game.addVideo('cardDialog',null,event.preResult); }, ai:{ wuxie:function(){ return 0; }, basic:{ order:2, useful:[3,1], value:[5,1] }, result:{ player:1, target:function(player,target){ if(target.countCards('h')==0) return 0; return (Math.sqrt(target.countCards('h'))-get.distance(player,target,'absolute')/game.countPlayer()/3)/2; } }, tag:{ loseCard:1, multitarget:1 } } }, caochuanjiejian:{ fullskin:true, type:'trick', enable:true, filterTarget:function(card,player,target){ return target.countCards('h')>0&&target!=player; }, content:function(){ 'step 0' if(target.countCards('h','sha')){ var name=get.translation(player.name); target.chooseControl().set('prompt',get.translation('caochuanjiejian')).set('choiceList',[ '将手牌中的所有杀交给'+name+',并视为对'+name+'使用一张杀','展示手牌并令'+name+'弃置任意一张' ],function(){ if(get.effect(player,{name:'sha'},target,target)<0) return 1; if(target.countCards('h','sha')>=3) return 1; return 0; }); } else{ event.directfalse=true; } 'step 1' if(event.directfalse||result.control=='选项二'){ if(target.countCards('h')){ if(!player.isUnderControl(true)){ target.showHandcards(); } else{ game.log(target,'展示了',target.getCards('h')); } player.discardPlayerCard(target,'h',true,'visible'); } event.finish(); } else{ var hs=target.getCards('h','sha'); player.gain(hs,target); target.$give(hs,player); } 'step 2' target.useCard({name:'sha'},player); }, ai:{ order:4, value:[5,1], result:{ target:function(player,target){ if(player.hasShan()) return -1; return 0; } } } }, // xiaolicangdao:{ // fullskin:true, // type:'trick', // enable:true, // filterTarget:function(card,player,target){ // return target!=player; // }, // multitarget:true, // content:function(){ // 'step 0' // if(cards&&cards.length){ // target.gain(cards,player); // target.$gain2(cards); // if(cards.length==1){ // event.card1=cards[0]; // } // } // 'step 1' // event.card2=target.getCards('h').randomGet(); // if(event.card2){ // target.discard(event.card2); // } // else{ // event.finish(); // } // 'step 2' // if(event.card1&&event.card1.name==event.card2.name){ // target.damage(); // } // }, // ai:{ // order:6, // value:[3,1], // result:{ // target:function(player,target){ // return -2/Math.sqrt(1+target.countCards('h')); // }, // }, // tag:{ // damage:1, // discard:1, // loseCard:1, // } // } // }, geanguanhuo:{ fullskin:true, type:'trick', filterTarget:function(card,player,target){ if(target==player) return false; return target.countCards('h')>0&&game.hasPlayer(function(current){ return target.canCompare(current); }); //return ui.selected.targets[0].canCompare(target); }, filterAddedTarget:function(card,player,target,preTarget){ return target!=player&&preTarget.canCompare(target); }, enable:function(){ return game.countPlayer()>2; }, recastable:function(){ return game.countPlayer()<=2; }, multicheck:function(card,player){ return game.countPlayer(function(current){ return current!=player&¤t.countCards('h'); })>1; }, multitarget:true, multiline:true, singleCard:true, complexSelect:true, content:function(){ 'step 0' if(!event.addedTarget||!target.canCompare(event.addedTarget)){ event.finish(); return; } target.chooseToCompare(event.addedTarget); 'step 1' if(!result.tie){ if(result.bool){ if(event.addedTarget.countCards('he')){ target.line(event.addedTarget); target.gainPlayerCard(event.addedTarget,true); } } else{ if(target.countCards('he')){ event.addedTarget.line(target); event.addedTarget.gainPlayerCard(target,true); } } event.finish(); } 'step 2' target.discardPlayerCard(player); target.line(player); }, ai:{ order:5, value:[7,1], useful:[4,1], result:{ target:-1, } } }, shezhanqunru:{ fullskin:true, type:'trick', enable:true, toself:true, filterTarget:function(card,player,target){ return target==player; }, selectTarget:-1, modTarget:true, content:function(){ 'step 0' var list=game.filterPlayer(function(current){ return current!=target&&target.canCompare(current); }); if(!list.length){ target.draw(3); event.finish(); } else{ list.sortBySeat(target); event.list=list; event.torespond=[]; } 'step 1' if(event.list.length){ event.current=event.list.shift(); event.current.chooseBool('是否响应'+get.translation(target)+'的舌战群儒?',function(event,player){ if(get.attitude(player,_status.event.source)>=0) return false; var hs=player.getCards('h'); var dutag=player.hasSkillTag('nodu'); for(var i=0;i<hs.length;i++){ var value=get.value(hs[i],player); if(hs[i].name=='du'&&dutag) continue; if(value<0) return true; if(!_status.event.hasTarget){ if(hs[i].number>=8&&value<=7) return true; if(value<=3) return true; } else if(_status.event.hasTarget%2==1){ if(hs[i].number>=11&&value<=6) return true; } } return false; }).set('source',target).set('hasTarget',event.torespond.length); } else{ event.goto(3); } 'step 2' if(result.bool){ event.torespond.push(event.current); event.current.line(target,'green'); event.current.popup('响应'); game.log(event.current,'响应了舌战群儒'); game.delayx(0.5); } event.goto(1); 'step 3' if(event.torespond.length==0){ event.num=1; } else{ event.num=0; target.chooseToCompare(event.torespond).callback=lib.card.shezhanqunru.callback; } 'step 4' if(event.num>0){ target.draw(3); } }, callback:function(){ if(event.card1.number>event.card2.number){ event.parent.parent.num++; } else{ event.parent.parent.num--; } }, ai:{ order:8.5, value:[6,1], useful:[3,1], tag:{ draw:1 }, result:{ target:function(player,target){ var hs=target.getCards('h'); for(var i=0;i<hs.length;i++){ var value=get.value(hs[i]); if(hs[i].number>=7&&value<=6) return 1; if(value<=3) return 1; } return 0; } } } }, youdishenru:{ fullskin:true, type:'trick', notarget:true, wuxieable:true, global:'g_youdishenru', content:function(){ 'step 0' var info=event.getParent(2).youdiinfo||event.getParent(3).youdiinfo; if(!info){ event.finish(); return; } info.evt.cancel(); event.source=info.source; event.source.storage.youdishenru=player; event.source.addSkill('youdishenru'); 'step 1' var next=event.source.chooseToUse({name:'sha'},player,-1,'对'+get.translation(player)+'使用一张杀,或受到1点伤害').set('addCount',false); next.ai2=function(){ return 1; }; 'step 2' if(result.bool){ if(event.source.storage.youdishenru){ event.goto(1); } else{ event.source.removeSkill('youdishenru'); } } else{ event.source.damage(player); event.source.removeSkill('youdishenru'); } }, ai:{ value:[5,1], useful:[5,1], order:1, wuxie:function(target,card,player,current,state){ return -state*get.attitude(player,current); }, result:{ player:function(player){ if(_status.event.parent.youdiinfo&& get.attitude(player,_status.event.parent.youdiinfo.source)<=0){ return 1; } return 0; } } } }, wangmeizhike:{ fullskin:true, type:'trick', enable:true, filterTarget:function(card,player,target){ return (target.isMinHp()&&target.isDamaged())||target.isMinHandcard(); }, content:function(){ 'step 0' if(target.isMinHp()&&target.isDamaged()){ target.recover(); event.rec=true; } 'step 1' if(target.isMinHandcard()){ target.draw(event.rec?1:2); } }, ai:{ order:2.5, value:7, result:{ target:function(player,target){ var num=0; if(target.isMinHp()&&get.recoverEffect(target)>0){ if(target.hp==1){ num+=3; } else{ num+=2; } } if(target.isMinHandcard()){ num+=2; } return num; } } } }, suolianjia:{ fullskin:true, type:"equip", subtype:"equip2", skills:['suolianjia'], onEquip:function(){ if(player.isLinked()==false) player.link(); }, onLose:function(){ if(player.isLinked()) player.link(); }, ai:{ basic:{ equipValue:5 }, }, }, chenhuodajie:{ fullskin:true, type:'trick', filterTarget:true, global:'g_chenhuodajie', content:function(){ if(target.countCards('he')){ player.gainPlayerCard('he',target,true); } }, ai:{ order:1, useful:6, value:6, result:{ target:-1 }, tag:{ loseCard:1 } } }, fudichouxin:{ fullskin:true, type:'trick', enable:true, filterTarget:function(card,player,target){ return player.canCompare(target); }, content:function(){ "step 0" player.chooseToCompare(target).set('preserve','win').clear=false; "step 1" if(result.bool){ player.gain([result.player,result.target]); result.player.clone.moveDelete(player); result.target.clone.moveDelete(player); game.addVideo('gain2',player,get.cardsInfo([result.player,result.target])); } else if(!result.cancelled){ result.player.clone.delete(); result.target.clone.delete(); game.addVideo('deletenode',player,get.cardsInfo([result.player,result.target])); } }, ai:{ order:4, value:[4,1], result:{ target:function(player){ if(player.countCards('h')<=1) return 0; return -1; }, player:function(player){ if(player.countCards('h')<=1) return 0; return 0.5; } }, tag:{ loseCard:1 } } }, shuiyanqijun:{ fullskin:true, type:'trick', enable:true, filterTarget:function(card,player,target){ return target.countCards('e'); }, selectTarget:-1, content:function(){ if(target.countCards('e')) target.chooseToDiscard('e',true); }, reverseOrder:true, ai:{ order:9, result:{ target:function(player,target){ if(target.countCards('e')) return -1; return 0; } }, tag:{ multitarget:1, multineg:1 } } }, toulianghuanzhu:{ fullskin:true, type:'trick', enable:true, filterTarget:function(card,player,target){ return target.countCards('h')>0; }, content:function(){ 'step 0' if(!target.countCards('h')){ event.finish(); return; } var hs=player.getCards('h'); if(hs.length){ var minval=get.value(hs[0]); var colors=[get.color(hs[0])]; for(var i=1;i<hs.length;i++){ var val=get.value(hs[i],player,'raw'); if(val<minval){ minval=val; colors=[get.color(hs[i])]; } else if(val==minval){ colors.add(get.color(hs[i])); } } player.chooseCardButton('偷梁换柱',target.getCards('h')).ai=function(button){ var val=get.value(button.link,player,'raw')-minval; if(val>=0){ if(colors.contains(get.color(button.link))){ val+=3; } } return val; } } else{ player.viewHandcards(target); event.finish(); } 'step 1' if(result.bool){ event.card=result.links[[0]]; player.chooseCard('h',true,'用一张手牌替换'+get.translation(event.card)).ai=function(card){ return -get.value(card); }; } else{ event.finish(); } 'step 2' if(result.bool){ player.gain(event.card,target); target.gain(result.cards,player); player.$giveAuto(result.cards,target); target.$giveAuto(event.card,player); game.log(player,'与',target,'交换了一张手牌'); if(get.color(event.card)==get.color(result.cards[0])){ player.draw(); } target.addTempSkill('toulianghuanzhu_ai1'); } else{ target.addTempSkill('toulianghuanzhu_ai2'); } }, ai:{ order:8, tag:{ loseCard:1, norepeat:1, }, result:{ target:function(player,target){ if(player.countCards('h')<=1) return 0; if(target.hasSkill('toulianghuanzhu_ai2')) return 0; if(target.hasSkill('toulianghuanzhu_ai1')) return 0.5; return -1; } }, useful:[4,1], value:[6,1] } }, huoshan:{ fullskin:true, type:'delay', cardcolor:'red', cardnature:'fire', modTarget:function(card,player,target){ return lib.filter.judge(card,player,target); }, enable:function(card,player){ return player.canAddJudge(card); }, filterTarget:function(card,player,target){ return (lib.filter.judge(card,player,target)&&player==target); }, selectTarget:[-1,-1], judge:function(card){ if(get.suit(card)=='heart'&&get.number(card)>1&&get.number(card)<10) return -6; return 0; }, effect:function(){ if(result.bool==false){ player.damage(2,'fire','nosource'); var players=game.filterPlayer(function(current){ return get.distance(player,current)<=1&&player!=current; }); players.sort(lib.sort.seat); for(var i=0;i<players.length;i++){ players[i].damage(1,'fire','nosource'); } } else{ player.addJudgeNext(card); } }, cancel:function(){ player.addJudgeNext(card); }, ai:{ basic:{ useful:0, value:0, }, order:1, result:{ target:function(player,target){ return lib.card.shandian.ai.result.target(player,target); } }, tag:{ // damage:1, // natureDamage:1, // fireDamage:1, } } }, hongshui:{ type:'delay', enable:function(card,player){ return player.canAddJudge(card); }, modTarget:function(card,player,target){ return lib.filter.judge(card,player,target); }, filterTarget:function(card,player,target){ return (lib.filter.judge(card,player,target)&&player==target); }, selectTarget:[-1,-1], judge:function(card){ if(get.suit(card)=='club'&&get.number(card)>1&&get.number(card)<10) return -3; return 0; }, fullskin:true, effect:function(){ if(result.bool==false){ if(player.countCards('he')==0) player.loseHp(); else{ player.discard(player.getCards('he').randomGets(3)); } var players=get.players(); for(var i=0;i<players.length;i++){ var dist=get.distance(player,players[i]); if(dist<=2&&player!=players[i]){ var cs=players[i].getCards('he'); if(cs.length==0) players[i].loseHp(); else{ players[i].discard(cs.randomGets(3-Math.max(1,dist))); } } } } else{ player.addJudgeNext(card); } }, cancel:function(){ player.addJudgeNext(card); }, ai:{ basic:{ useful:0, value:0, }, order:1, result:{ target:function(player,target){ return lib.card.shandian.ai.result.target(player,target); } }, } }, }, skill:{ toulianghuanzhu_ai1:{}, toulianghuanzhu_ai2:{}, suolianjia:{ trigger:{player:'damageBefore'}, filter:function(event,player){ if(event.source&&event.source.hasSkillTag('unequip',false,{ name:event.card?event.card.name:null, target:player, card:event.card })) return; if(event.nature) return true; }, forced:true, content:function(){ trigger.cancel(); }, ai:{ nofire:true, nothunder:true, effect:{ target:function(card,player,target,current){ if(player.hasSkillTag('unequip',false,{ name:card?card.name:null, target:player, card:card })) return; if(get.tag(card,'natureDamage')) return 'zerotarget'; if(card.name=='tiesuo'){ return [0,0]; } } } } }, toulianghuanzhu2:{}, youdishenru:{ trigger:{source:'damageEnd'}, silent:true, onremove:true, filter:function(event,player){ return event.card&&event.card.name=='sha'&&event.player==player.storage.youdishenru; }, content:function(){ delete player.storage.youdishenru; } }, g_youdishenru:{ trigger:{target:'shaBefore'}, direct:true, filter:function(event,player){ return !event.getParent().directHit.contains(player)&&player.hasUsableCard('youdishenru'); }, content:function(){ event.youdiinfo={ source:trigger.player, evt:trigger }; player.chooseToUse(function(card,player){ if(get.name(card)!='youdishenru') return false; return lib.filter.cardEnabled(card,player,'forceEnable'); },'是否使用诱敌深入?').set('source',trigger.player); } }, g_chenhuodajie:{ trigger:{global:'damageEnd'}, direct:true, filter:function(event,player){ if(event.player==player) return false; if(!event.player.countCards('he')) return false; if(!lib.filter.targetEnabled({name:'chenhuodajie'},player,event.player)) return false; if(event._notrigger.contains(event.player)) return false; return player.hasUsableCard('chenhuodajie'); }, content:function(){ player.chooseToUse(get.prompt('chenhuodajie',trigger.player).replace(/发动/,'使用'),function(card,player){ if(card.name!='chenhuodajie') return false; return lib.filter.cardEnabled(card,player,'forceEnable'); },trigger.player,-1).targetRequired=true; } }, }, translate:{ diaobingqianjiang:'调兵遣将', diaobingqianjiang_info:'出牌阶段,对你及其他有手牌的角色使用。你摸一张牌,然后亮出牌堆顶的X张牌(X为存活角色数的一半,向上取整),目标可以用一张手牌替换其中的一张牌。结算后,你可以将剩余的牌中的任意张以任意顺序置于牌堆顶。', caochuanjiejian:'草船借箭', caochuanjiejian_info:'出牌阶段对一名有手牌的其他角色使用,目标选择一项:将手牌中的所有杀(至少1张)交给你,并视为对你使用一张杀;或展示手牌并令你弃置任意张。', // xiaolicangdao:'笑里藏刀', // xiaolicangdao_info:'出牌阶段,对一名其他角色使用。你将此【笑里藏刀】交给目标,然后弃置其一张手牌,若这两张牌牌名相同,你对其造成1点伤害。', shezhanqunru:'舌战群儒', shezhanqunru_info:'出牌阶段,对你使用。你请求所有有手牌的其他角色响应,然后同时与响应的角色拼点。若有角色响应且结果中你赢的次数更多,或若没有角色响应,你摸三张牌。', youdishenru:'诱敌深入', youdishenru_info:'当以你为目标的【杀】生效前,对此【杀】使用。抵消此【杀】,然后此【杀】的使用者需对你使用【杀】(在此【杀】结算结束之后,若此【杀】未对你造成伤害,其重复此流程),否则受到你造成的1点伤害。', suolianjia:'锁链甲', suolianjia_info:'锁定技,你防止即将受到的属性伤害,当装备时进入连环状态,当卸下时解除连环状态。', suolianjia_bg:'链', geanguanhuo:'隔岸观火', geanguanhuo_info:'出牌阶段对一名其他角色使用,令目标与一名你指定的另一名角色拼点,赢的角色获得对方的一张牌;若点数相同,目标可弃置你一张牌(存活角色不超过2时可重铸)。', toulianghuanzhu:'偷梁换柱', toulianghuanzhu_info:'出牌阶段对一名其他角色使用,你观看其手牌,然后可以用一张手牌替牌其中的一张;若两张牌颜色相同,你摸一张牌。', toulianghuanzhu_bg:'柱', fudichouxin:'釜底抽薪', fudichouxin_info:'与一名角色进行拼点,若成功则获得双方拼点牌。', shuiyanqijun:'水攻', shuiyanqijun_info:'令所有有装备的角色各弃置一张装备牌。', wangmeizhike:'望梅止渴', wangmeizhike_info:'出牌阶段对一名角色使用,若没有角色体力比目标少,目标回复1点体力;若没有角色手牌比目标少,目标摸两张牌(若因此牌回复了体力则改为摸一张)。', chenhuodajie:'趁火打劫', chenhuodajie_info:'任意一名其他角色受到伤害时对其使用,获得其一张牌。', huoshan:'火山', huoshan_info:'出牌阶段,对自己使用。若判定结果为红桃2~9,则目标角色受到2点火焰伤害,距离目标1以内的其他角色受到1点火焰伤害。若判定不为红桃2~9,将之移动到下家的判定区里。', hongshui:'洪水', hongshui_info:'出牌阶段,对自己使用。若判定结果为梅花2~9,该角色随机弃置三张牌,距离该角色为X的角色随机弃置3-X张牌,若没有牌则失去1点体力。', }, list:[ ['heart',6,'huoshan','fire'], ['club',7,'hongshui'], ["diamond",3,'guohe'], ['diamond',4,'fudichouxin'], ['club',6,'fudichouxin'], ['spade',1,'fudichouxin'], ['club',7,'shuiyanqijun'], ['club',8,'shuiyanqijun'], ['club',8,'guohe'], ['spade',9,'shuiyanqijun'], ['heart',9,'toulianghuanzhu'], ['club',10,'toulianghuanzhu'], ['spade',13,'guohe'], ['heart',6,'wangmeizhike'], ['club',1,'wangmeizhike'], ['diamond',6,'chenhuodajie'], ['diamond',9,'chenhuodajie'], ['club',3,'chenhuodajie'], ['club',13,'suolianjia'], ['club',3,'caochuanjiejian'], ['spade',7,'caochuanjiejian'], // ['spade',5,'xiaolicangdao'], // ['diamond',11,'xiaolicangdao'], ['heart',1,'geanguanhuo'], ['spade',6,'geanguanhuo'], ['heart',4,'shezhanqunru'], ['club',8,'shezhanqunru'], ['diamond',1,'diaobingqianjiang'], ['spade',2,'diaobingqianjiang'], ['heart',12,'youdishenru'], ['club',2,'youdishenru'], ['spade',9,'youdishenru'], ], }; });