'use strict'; game.import('mode',function(lib,game,ui,get,ai,_status){ return { name:'guozhan', startBefore:function(){ var playback=localStorage.getItem(lib.configprefix+'playback'); for(var i in lib.characterPack.mode_guozhan){ if(!get.config('onlyguozhan')&&!playback){ if(lib.character[i.slice(3)]) continue; } lib.character[i]=lib.characterPack.mode_guozhan[i]; if(!lib.character[i][4]){ lib.character[i][4]=[]; } if(!lib.translate[i]){ lib.translate[i]=lib.translate[i.slice(3)]; } } for(var i in lib.character){ if(lib.character[i][1]=='shen'){ if(lib.character[i][4]&&(lib.group.contains(lib.character[i][4][0])||lib.character[i][4][0]=='key')){ lib.character[i][1]=lib.character[i][4][0]; } else{ lib.character[i][1]='qun'; } } } if(lib.skill.sanchen) lib.skill.sanchen.derivation='pozhu'; }, onreinit:function(){ var pack=lib.characterPack.mode_guozhan; for(var i in pack){ lib.character[i]=pack[i]; if(!lib.character[i][4]){ lib.character[i][4]=[]; } if(!lib.translate[i]){ lib.translate[i]=lib.translate[i.slice(3)]; } } for(var i in lib.character){ if(lib.character[i][1]=='shen'){ if(lib.character[i][4]&&(lib.group.contains(lib.character[i][4][0])||lib.character[i][4][0]=='key')){ lib.character[i][1]=lib.character[i][4][0]; } else{ lib.character[i][1]='qun'; } } } }, start:function(){ "step 0" var playback=localStorage.getItem(lib.configprefix+'playback'); if(playback){ ui.create.me(); ui.arena.style.display='none'; ui.system.style.display='none'; _status.playback=playback; localStorage.removeItem(lib.configprefix+'playback'); var store=lib.db.transaction(['video'],'readwrite').objectStore('video'); store.get(parseInt(playback)).onsuccess=function(e){ if(e.target.result){ game.playVideoContent(e.target.result.video); } else{ alert('播放失败:找不到录像'); game.reload(); } } event.finish(); } else if(_status.connectMode){ game.waitForPlayer(); } else{ _status.mode=get.config('guozhan_mode'); if(!['normal','yingbian','old','free'].contains(_status.mode)) _status.mode='normal'; //决定牌堆 switch(_status.mode){ case 'old':lib.card.list=lib.guozhanPile_old.slice(0);break; case 'yingbian': lib.card.list=lib.guozhanPile_yingbian.slice(0); delete lib.translate.shuiyanqijunx_info_guozhan; break; case 'normal':lib.card.list=lib.guozhanPile.slice(0);break; } if(_status.mode!='free') game.fixedPile=true; else{ delete lib.translate.shuiyanqijunx_info_guozhan; } game.prepareArena(); // game.delay(); game.showChangeLog(); } if(!_status.connectMode){ _status.mode=get.config('guozhan_mode'); if(_status.brawl&&_status.brawl.submode){ _status.mode=_status.brawl.submode; } } "step 1" if(_status.connectMode){ _status.mode=lib.configOL.guozhan_mode; if(!['normal','yingbian','old'].contains(_status.mode)) _status.mode='normal'; //决定牌堆 switch(_status.mode){ case 'old':lib.card.list=lib.guozhanPile_old.slice(0);break; case 'yingbian':lib.card.list=lib.guozhanPile_yingbian.slice(0);break; default:lib.card.list=lib.guozhanPile.slice(0);break; } game.fixedPile=true; game.broadcastAll(function(mode){ _status.mode=mode; if(mode=='yingbian'){ delete lib.translate.shuiyanqijunx_info_guozhan; } for(var i=0;i!event.numFixed, preHidden:true, content:function(){ trigger.num+=2; }, mod:{ maxHandcard:(player,num)=>num+2, }, }, gzzhuangrong:{ audio:'zhuangrong', enable:'phaseUse', usable:1, filter:function(event,player){ return !player.hasSkill('wushuang')&&player.hasCard(function(card){ return get.type2(card,player)=='trick'; },'h'); }, filterCard:function(card,player){ return get.type2(card,player)=='trick'; }, content:function(){ player.addTempSkill('wushuang','phaseUseEnd'); }, }, //荀谌 gzfenglve:{ audio:'refenglve', derivation:'gzfenglve_zongheng', enable:'phaseUse', usable:1, filter:function(event,player){ return player.countCards('h')>0&&!player.hasSkillTag('noCompareSource')&&game.hasPlayer(function(current){ return current!=player&¤t.countCards('h')>0&&!current.hasSkillTag('noCompareTarget'); }); }, filterTarget:function(card,player,target){ return target!=player&&target.countCards('h')>0&&!target.hasSkillTag('noCompareTarget'); }, content:function(){ 'step 0' player.chooseToCompare(target); 'step 1' if(result.bool){ if(!target.countCards('hej')) event.goto(3); else{ event.giver=target; event.gainner=player; target.choosePlayerCard(target,true,'hej',2,'交给'+get.translation(player)+'两张牌'); } } else if(result.tie){ event.goto(3); } else{ if(!player.countCards('he')) event.goto(3); else{ event.giver=player; event.gainner=target; player.chooseCard(true,'he','交给'+get.translation(target)+'一张牌'); } } 'step 2' if(result.bool) event.gainner.gain(result.cards,event.giver,'giveAuto'); 'step 3' if(target.isIn()) player.chooseBool('纵横:是否令'+get.translation(target)+'获得【锋略】?').set('ai',function(){ var evt=_status.event.getParent(); return get.attitude(evt.player,evt.target)>0; }); else event.finish(); 'step 4' if(result.bool){ target.addTempSkill('gzfenglve_zongheng',{player:'phaseEnd'}); game.log(player,'发起了','#y纵横',',令',target,'获得了技能','#g【锋略】'); } }, ai:{ order:8, result:{ target:function(player,target){ if(!player.hasCard(function(card){ if(get.position(card)!="h") return false; var val=get.value(card); if(val<0) return true; if(val<=5){ return card.number>=10; } if(val<=6){ return card.number>=13; } return false; })) return 0; return -Math.sqrt(1+target.countCards('he'))/(1+target.countCards('j')); }, }, }, }, gzfenglve_zongheng:{ inherit:'gzfenglve', content:function(){ 'step 0' player.chooseToCompare(target); 'step 1' if(result.bool){ if(!target.countCards('hej')) event.finish(); else{ event.giver=target; event.gainner=player; target.choosePlayerCard(target,true,'hej','交给'+get.translation(player)+'一张牌'); } } else if(result.tie){ event.finish(); } else{ if(!player.countCards('he')) event.finish(); else{ event.giver=player; event.gainner=target; player.chooseCard(true,'he',2,'交给'+get.translation(target)+'两张牌'); } } 'step 2' if(result.bool) event.gainner.gain(result.cards,event.giver,'giveAuto'); }, ai:{ order:8, result:{ target:function(player,target){ if(!player.hasCard(function(card){ if(get.position(card)!="h") return false; var val=get.value(card); if(val<0) return true; if(val<=5){ return card.number>=12; } if(val<=6){ return card.number>=13; } return false; })) return 0; return -Math.sqrt(1+target.countCards('he'))/(1+target.countCards('j')); }, }, }, }, gzanyong:{ audio:'anyong', trigger:{global:'damageBegin1'}, usable:1, filter:function(event,player){ return event.source&&event.player!=event.source&& event.source.isFriendOf(player)&&event.player.isIn(); }, check:function(event,player){ if(event.player.hasSkillTag('filterDamage',null,{ player:event.source, card:event.card, })) return false; if(event.player.isUnseen()) return true; if(event.player.hp>event.num&&event.player.hp<=event.num*2) return player.hp>1||trigger.player.isUnseen(2); return false; }, logTarget:'player', preHidden:true, content:function(){ trigger.num*=2; if(!trigger.player.isUnseen(2)){ player.loseHp(); player.removeSkill('gzanyong'); } else if(!trigger.player.isUnseen()){ player.chooseToDiscard('h',2,true); } }, }, //周夷 gzzhukou:{ audio:'zhukou', trigger:{source:'damageSource'}, preHidden:true, filter:function(event,player){ if(!player.getHistory('useCard').length) return false; var evt=event.getParent('phaseUse'); if(!evt||!evt.player) return false; return player.getHistory('sourceDamage',function(evtx){ return evtx.getParent('phaseUse')==evt; }).indexOf(event)==0; }, frequent:true, content:function(){ player.draw(player.getHistory('useCard').length); }, }, gzduannian:{ audio:2, trigger:{player:'phaseUseEnd'}, preHidden:true, filter:function(event,player){ return player.countCards('h')>0&&!player.hasCard(function(card){ return !lib.filter.cardDiscardable(card,player,'gzduannian'); },'h'); }, check:function(event,player){ return player.countCards('h',function(card){ return get.value(card)>=6; })<=Math.max(1,player.countCards('h')/2); }, content:function(){ 'step 0' var cards=player.getCards('h',function(card){ return lib.filter.cardDiscardable(card,player,'gzduannian'); }); if(cards.length){ player.discard(cards); } else event.finish(); 'step 1' player.drawTo(Math.min(5,player.maxHp)); }, }, gzlianyou:{ trigger:{player:'die'}, direct:true, forceDie:true, skillAnimation:true, animationColor:'fire', content:function(){ 'step 0' player.chooseTarget(lib.filter.notMe,get.prompt('gzlianyou'),'令一名其他角色获得〖兴火〗').set('forceDie',true).set('ai',function(target){ return 10+(get.attitude(_status.event.player,target)*target.hasSkillTag('fireAttack',null,null,true)?2:1) }); 'step 1' if(result.bool){ var target=result.targets[0]; player.logSkill('gzlianyou',target); target.addSkillLog('gzxinghuo'); game.delayx(); } }, derivation:'gzxinghuo', }, gzxinghuo:{ trigger:{source:'damageBegin1'}, forced:true, filter:function(event){ return event.nature=='fire'; }, content:function(){ trigger.num++; }, }, //南华老仙 gzgongxiu:{ audio:'gongxiu', trigger:{player:'phaseDrawBegin2'}, preHidden:true, filter:function(event,player){ return !event.numFixed&&event.num>0&&player.maxHp>0; }, content:function(){ trigger.num--; player.addTempSkill('gzgongxiu2','phaseDrawAfter'); }, }, gzgongxiu2:{ trigger:{player:'phaseDrawEnd'}, forced:true, charlotte:true, popup:false, content:function(){ 'step 0' var str='令至多'+get.cnNumber(player.maxHp)+'名角色'; if(typeof player.storage.gzgongxiu!='number'){ player.chooseControl().set('choiceList',[ str+'各摸一张牌', str+'各弃置一张牌', ]); } else event._result={index:1-player.storage.gzgongxiu}; 'step 1' var num=result.index; event.index=num; player.storage.gzgongxiu=num; player.chooseTarget(true,[1,player.maxHp],'选择至多'+get.cnNumber(player.maxHp)+'名角色各'+(num?'弃置':'摸')+'一张牌').set('goon',event.index?-1:1).set('ai',function(target){ var evt=_status.event; return evt.goon*get.attitude(evt.player,target); }); 'step 2' if(result.bool){ var targets=result.targets.sortBySeat(); player.line(targets,'green'); if(event.index==0) game.asyncDraw(targets); else{ for(var i of targets) i.chooseToDiscard('he',true); event.finish(); } } 'step 3' game.delayx(); }, }, gzjinghe:{ audio:'jinghe', enable:'phaseUse', filter:function(event,player){ return player.maxHp>0&&player.countCards('h')>0&&!player.hasSkill('gzjinghe_clear'); }, selectCard:function(){ var max=_status.event.player.maxHp; if(ui.selected.targets.length) return [ui.selected.targets.length,max]; return [1,max]; }, selectTarget:function(){ return ui.selected.cards.length; }, filterTarget:function(card,player,target){ return !target.isUnseen(); }, filterCard:function(card){ if(ui.selected.cards.length){ var name=get.name(card); for(var i of ui.selected.cards){ if(get.name(i)==name) return false; } } return true; }, position:'h', check:function(card){ var player=_status.event.player; if(game.countPlayer(function(current){ return get.attitude(player,current)>0&&!current.isUnseen(); })>ui.selected.cards.length) return get.position(card)=='e'?2:1; return 0; }, complexCard:true, discard:false, lose:false, delay:false, multitarget:true, multiline:true, content:function(){ 'step 0' player.showCards(cards,get.translation(player)+'发动了【经合】'); event.skills=lib.skill.gzjinghe.derivation.randomGets(targets.length); player.addTempSkill('gzjinghe_clear',{player:'phaseBegin'}); event.targets.sortBySeat(); event.num=0; 'step 1' event.target=targets[num]; event.num++; event.target.chooseControl(event.skills,'cancel2').set('choiceList',event.skills.map(function(i){ return '
【'+get.translation(lib.translate[i+'_ab']||get.translation(i).slice(0,2))+'】
'+get.skillInfoTranslation(i,player)+'
'; })).set('displayIndex',false).set('prompt','选择获得一个技能'); 'step 2' var skill=result.control; if(skill!='cancel2'){ event.skills.remove(skill); target.addAdditionalSkill('gzjinghe_'+player.playerid,skill); target.popup(skill); game.log(target,'获得了技能','#g【'+get.translation(skill)+'】'); } if(event.num0&&player.countCards('he')>0; }, direct:true, content:function(){ 'step 0' var num=Math.min(player.getStorage('gzshilu').length,player.countCards('he')); player.chooseToDiscard('he',get.prompt('gzshilu'),'弃置至多'+get.cnNumber(num)+'张牌并摸等量的牌',[1,num]).logSkill='gzshilu'; 'step 1' if(result.bool&&result.cards&&result.cards.length) player.draw(result.cards.length); }, }, }, }, gzxiongnve:{ audio:2, trigger:{player:'phaseUseBegin'}, direct:true, filter:function(event,player){ return player.getStorage('gzshilu').length>0; }, content:function(){ 'step 0' player.chooseButton([get.prompt('gzxiongnve'),[player.storage.gzshilu,'character']]).set('ai',function(button){ if(!_status.event.goon) return 0; var name=button.link,group=get.is.double(name,true); if(!group) group=[lib.character[name][1]]; for(var i of group){ if(game.hasPlayer(function(current){ return player.inRange(current)&¤t.identity==i; })) return 1+Math.random(); } return 0; }).set('goon',player.countCards('hs',function(card){ return get.tag(card,'damage')&&player.hasValueTarget(card); })>1); 'step 1' if(result.bool){ player.logSkill('gzxiongnve'); lib.skill.gzxiongnve.throwCharacter(player,result.links); game.delayx(); var group=get.is.double(result.links[0],true); if(!group) group=[lib.character[result.links[0]][1]]; event.group=group; var str=get.translation(group); player.chooseControl().set('prompt','选择获得一项效果').set('choiceList',[ '本回合对'+str+'势力的角色造成的伤害+1', '本回合对'+str+'势力的角色造成伤害后,获得对方的一张牌', '本回合对'+str+'势力的角色使用牌没有次数限制', ]).set('ai',function(){ var player=_status.event.player; if(player.countCards('hs',function(card){ return get.name(card)=='sha'&&player.hasValueTarget(card); })>player.getCardUsable('sha')) return 0; return get.rand(1,2); }); } else event.finish(); 'step 2' var skill='gzxiongnve_effect'+result.index; player.markAuto(skill,event.group); player.addTempSkill(skill); game.log(player,'本回合对'+get.translation(event.group)+'势力的角色','#g'+lib.skill[skill].promptx) }, group:'gzxiongnve_end', throwCharacter:function(player,list){ player.unmarkAuto('gzshilu',list); _status.characterlist.addArray(list); game.log(player,'从','#y“戮”','中移去了','#g'+get.translation(list)); game.broadcastAll(function(player,list){ var cards=[]; for(var i=0;i0; }, logTarget:'player', content:function(){ player.gainPlayerCard(trigger.player,true,'he'); } }, effect2:{ promptx:'使用牌没有次数限制', charlotte:true, onremove:true, intro:{ content:'对$势力的角色使用牌没有次数限制', }, mod:{ cardUsableTarget:function(card,player,target){ if(player.getStorage('gzxiongnve_effect2').contains(target.identity)) return true; }, }, }, effect3:{ charlotte:true, audio:'gzxiongnve', mark:true, intro:{ content:'受到的伤害-1', }, trigger:{player:'damageBegin1'}, forced:true, content:function(){ trigger.num--; }, ai:{ effect:{ target:function(card,player,target){ if(player.hasSkillTag('jueqing',false,target)) return; var num=get.tag(card,'damage'); if(num){ if(num>1) return 0.5; return 0; } } } }, }, end:{ trigger:{player:'phaseUseEnd'}, direct:true, filter:function(event,player){ return player.getStorage('gzshilu').length>1; }, content:function(){ 'step 0' player.chooseButton(['是否移去两张“戮”获得减伤?',[player.storage.gzshilu,'character']],2).set('ai',function(button){ var name=button.link,group=get.is.double(name,true); if(!group) group=[lib.character[name][1]]; for(var i of group){ if(game.hasPlayer(function(current){ return current.identity==i; })) return 0; } return 1; }); 'step 1' if(result.bool){ player.logSkill('gzxiongnve'); lib.skill.gzxiongnve.throwCharacter(player,result.links); player.addTempSkill('gzxiongnve_effect3',{player:'phaseBegin'}); game.delayx(); } }, }, }, }, //邓芝 gzjianliang:{ audio:2, trigger:{player:'phaseDrawBegin2'}, frequent:true, preHidden:true, filter:function(event,player){ return player.isMinHandcard(); }, logTarget:function(event,player){ var isFriend; if(player.identity=='unknown'){ var group='shu'; if(!player.wontYe('shu')) group=null; isFriend=function(current){ return current==player||current.identity==group; } } else isFriend=function(target){ return target.isFriendOf(player); }; return game.filterPlayer(isFriend); }, content:function(){ 'step 0' var list=game.filterPlayer(function(current){ return current.isFriendOf(player); }); if(list.length==1){ list[0].draw(); event.finish(); } else game.asyncDraw(list); 'step 1' game.delayx(); }, }, gzweimeng:{ audio:2, enable:'phaseUse', usable:1, filterTarget:function(card,player,target){ return target!=player&&target.countGainableCards(player,'h')>0; }, content:function(){ 'step 0' player.gainPlayerCard(target,'h',true,event.name=='gzweimeng'?[1,player.hp]:1); 'step 1' if(result.bool&&target.isIn()){ var num=result.cards.length,hs=player.getCards('he'); if(!hs.length) event.goto(3); else if(hs.length<=num) event._result={bool:true,cards:hs}; else player.chooseCard('he',true,'选择交给'+get.translation(target)+get.cnNumber(num)+'张牌',num); } else event.goto(3); 'step 2' target.gain(result.cards,player,'giveAuto'); 'step 3' if(target.isIn()&&event.name=='gzweimeng') player.chooseBool('纵横:是否令'+get.translation(target)+'获得【危盟】?').set('ai',function(){ var evt=_status.event.getParent(); return get.attitude(evt.player,evt.target)>0; }); else event.finish(); 'step 4' if(result.bool){ target.addTempSkill('gzweimeng_zongheng',{player:'phaseEnd'}); game.log(player,'发起了','#y纵横',',令',target,'获得了技能','#g【危盟】'); } }, derivation:'gzweimeng_zongheng', subSkill:{ zongheng:{ inherit:'gzweimeng', ai:{ order:6, tag:{ lose:1, loseCard:1, gain:1, }, result:{ target:-1, }, }, }, }, ai:{ order:6, tag:{ lose:1, loseCard:1, gain:1, }, result:{ target:function(player,target){ return -Math.pow(Math.min(player.hp,target.countCards('h')),2)/4; }, }, }, }, //邹氏 huoshui:{ audio:2, forced:true, global:'huoshui_mingzhi' }, huoshui_mingzhi:{ ai:{ nomingzhi:true, skillTagFilter:function(player){ if(_status.currentPhase&&_status.currentPhase!=player&&_status.currentPhase.hasSkill('huoshui')){ return true; } return false; } } }, qingcheng:{ audio:2, }, qingcheng_ai:{ ai:{ effect:{ target:function(card){ if(get.tag(card,'damage')) return 2; } } } }, //朱灵 gzjuejue:{ audio:2, trigger:{player:'phaseDiscardBegin'}, check:function(event,player){ return player.hp>2&&player.needsToDiscard()>0&&game.countPlayer(function(current){ return get.attitude(current,player)<=0; })>game.countPlayer()/2; }, preHidden:true, content:function(){ player.addTempSkill('gzjuejue_effect'); player.loseHp(); }, subSkill:{ effect:{ trigger:{player:'phaseDiscardAfter'}, forced:true, charlotte:true, popup:false, filter:function(event,player){ return player.getHistory('lose',function(evt){ return evt.type=='discard'&&evt.cards2&&evt.cards2.length>0&&evt.getParent('phaseDiscard')==event; }).length>0; }, content:function(){ 'step 0' var num=0; player.getHistory('lose',function(evt){ if(evt.type=='discard'&&evt.getParent('phaseDiscard')==trigger) num+=evt.cards2.length; }); event.num=num; event.targets=game.filterPlayer(function(current){ return current!=player; }).sortBySeat(); player.line(event.targets,'green'); 'step 1' var target=targets.shift(); event.target=target; if(target.isIn()){ target.animate('target'); target.chooseCard('h',num,'将'+get.cnNumber(num)+'张牌置入弃牌堆,或受到1点伤害').set('ai',function(card){ var evt=_status.event.getParent(); if(get.damageEffect(evt.target,evt.player,evt.target)>=0) return 0; return (8/Math.sqrt(evt.num)+evt.target.getDamagedHp())-get.value(card); }); } else if(targets.length) event.redo(); else event.finish(); 'step 2' if(result.bool){ target.lose(result.cards,ui.discardPile,'visible'); target.$throw(result.cards,1000); game.log(target,'将',result.cards,'置入了弃牌堆'); } else target.damage(); 'step 3' game.delayx(); if(targets.length) event.goto(1); }, }, }, ai:{ noDieAfter2:true, skillTagFilter:function(player,tag,target){ return target.isFriendOf(player); }, }, }, gzfangyuan:{ audio:2, trigger:{player:'phaseJieshuBegin'}, zhenfa:'siege', direct:true, locked:true, filter:function(event,player){ return game.countPlayer()>4&&game.hasPlayer(function(current){ return player.sieged(current)&&player.canUse('sha',current,false); }); }, preHidden:true, content:function(){ 'step 0' var list=game.filterPlayer(function(current){ return player.sieged(current)&&player.canUse('sha',current,false); }); if(player.hasSkill('gzfangyuan')){ if(list.length==1) event._result={bool:true,targets:list}; else player.chooseTarget('方圆:视为对一名围攻你的角色使用【杀】',function(card,player,target){ return _status.event.list.contains(target); },true).set('list',list).set('ai',function(target){ var player=_status.event.player; return get.effect(target,{name:'sha',isCard:true},player,player); }).setHiddenSkill('gzfangyuan'); } else{ player.chooseTarget(get.prompt('gzfangyuan'),'视为对一名围攻你的角色使用【杀】',function(card,player,target){ return _status.event.list.contains(target); }).set('list',list).set('ai',function(target){ var player=_status.event.player; return get.effect(target,{name:'sha',isCard:true},player,player); }); } 'step 1' if(result.bool){ player.useCard({name:'sha',isCard:true},result.targets[0],'gzfangyuan',false); } }, global:'gzfangyuan_siege', subSkill:{ siege:{ mod:{ maxHandcard:function(player,num){ if(game.countPlayer()<4) return; var next=player.getNext(),prev=player.getPrevious(),siege=[]; if(player.siege(next)) siege.push(next.getNext()); if(player.siege(prev)) siege.push(prev.getPrevious()); if(siege.length){ siege.push(player); num+=siege.filter(function(source){ return source.hasSkill('gzfangyuan'); }).length; } if(player.sieged()){ if(next.hasSkill('gzfangyuan')) num--; if(prev.hasSkill('gzfangyuan')) num--; } return num; }, }, }, }, }, //彭羕 daming:{ audio:2, trigger:{global:'phaseUseBegin'}, direct:true, preHidden:true, filter:function(event,player){ if(!player.isFriendOf(event.player)||!game.hasPlayer(function(current){ return !current.isLinked(); })) return false; if(_status.connectMode&&player.hasSkill('daming')) return player.countCards('h')>0; return player.countCards('h',function(card){ return get.type2(card,player)=='trick'; }); }, content:function(){ 'step 0' player.chooseCardTarget({ prompt:get.prompt('daming'), prompt2:'弃置一张锦囊牌并选择要横置的角色', filterCard:function(card,player){ return get.type2(card,player)=='trick'&&lib.filter.cardDiscardable(card,player,'daming'); }, filterTarget:function(card,player,target){ return !target.isLinked(); }, goon:function(){ var target=trigger.player; if(player.canUse('tao',target)&&get.effect(target,{name:'tao',isCard:true},player,player)>0) return true; var card={name:'sha',nature:'thunder',isCard:true}; if(game.hasPlayer(function(current){ return current!=player&¤t!=target&&target.canUse(card,current,false)&&get.effect(current,card,target,player)>0; })) return true; return false; }(), ai1:function(card){ if(_status.event.goon) return 7-get.value(card); return 0; }, ai2:function(target){ var player=_status.event.player; return ((target.identity!='unknown'&&!game.hasPlayer(function(current){ return current!=target&¤t.isFriendOf(target)&¤t.isLinked(); }))?3:1)*(-get.attitude(target,player,player)+1); }, }).setHiddenSkill(event.name); 'step 1' if(result.bool){ var target=result.targets[0]; event.target=target; player.logSkill('daming',target); player.discard(result.cards); } else event.finish(); 'step 2' if(!target.isLinked()) target.link(); 'step 3' var map={},sides=[],pmap=_status.connectMode?lib.playerOL:game.playerMap,player; for(var i of game.players){ if(i.identity=='unknown') continue; var added=false; for(var j of sides){ if(i.isFriendOf(pmap[j])){ added=true; map[j].push(i); if(i==this) player=j; break; } } if(!added){ map[i.playerid]=[i]; sides.push(i.playerid); if(i==this) player=i.playerid; } } var num=0; for(var i in map){ if(map[i].filter(function(i){ return i.isLinked(); }).length) num++; } if(num>0) player.draw(num); 'step 4' if(trigger.player.isIn()){ var target=trigger.player,tao=(lib.filter.cardEnabled({name:'tao',isCard:true},player,'forceEnable')&&lib.filter.targetEnabled2({name:'tao',isCard:true},player,target)),sha=game.filterPlayer(function(current){ return current!=target&¤t!=player&&target.canUse({name:'sha',nature:'thunder',isCard:true},current,false); }); if(sha.length){ var next=player.chooseTarget('请选择'+get.translation(target)+'使用雷【杀】的目标',function(card,player,target){ return _status.event.list.contains(target); }); if(tao){ next.set('prompt2','或点「取消」并视为对其使用【桃】'); next.set('goon',get.effect(target,{name:'tao',isCard:true},player,player)); } else{ next.set('forced',true); next.set('goon',0); } next.set('list',sha); next.set('ai',function(target){ var player=_status.event.player; return get.effect(target,{name:'sha',nature:'thunder',isCard:true},_status.event.getTrigger().player,player)-_status.event.goon; }); } else if(tao) event._result={bool:false}; else event.finish(); } else event.finish(); 'step 5' if(result.bool){ var target=result.targets[0]; if(player==trigger.player) player.line(target); else{ player.line2([trigger.player,target]); game.delay(0.5); } trigger.player.useCard({name:'sha',nature:'thunder',isCard:true},target,false).animate=false; } else player.useCard({name:'tao',isCard:true},trigger.player); }, }, xiaoni:{ audio:2, trigger:{ player:'useCard', target:'useCardToTargeted', }, forced:true, filter:function(event,player){ var type=get.type2(event.card); if(type!='basic'&&type!='trick') return false; var list=game.filterPlayer(function(current){ return current!=player&¤t.isFriendOf(player); }); if(!list.length) return false; var hs=player.countCards('h'); for(var i of list){ if(i.countCards('h')>hs) return false; } return true; }, check:()=>false, preHidden:true, content:function(){ if(trigger.name=='useCard') trigger.directHit.addArray(game.players); else trigger.directHit.add(player); }, global:'xiaoni_ai', ai:{ halfneg:true, directHit_ai:true, skillTagFilter:function(player,tag,arg){ if(!arg.card) return false; var type=get.type2(arg.card); if(type!='basic'&&type!='trick') return false; var list=game.filterPlayer(function(current){ return current!=player&¤t.isFriendOf(player); }); if(!list.length) return false; var cards=[arg.card]; if(arg.card.cards) cards.addArray(arg.card.cards); cards.addArray(ui.selected.cards); var hhs=function(card){ return !cards.contains(card); }; var hs=player.countCards('h',hhs); for(var i of list){ if(i.countCards('h',hhs)>hs) return false; } return true; }, }, subSkill:{ ai:{ ai:{ directHit_ai:true, skillTagFilter:function(playerx,tag,arg){ if(!arg.card) return false; var type=get.type2(arg.card); if(type!='basic'&&type!='trick') return false; var player; if(arg.target&&arg.target.hasSkill('xiaoni')) player=arg.target; else return false; var list=game.filterPlayer(function(current){ return current!=player&¤t.isFriendOf(player); }); if(!list.length) return false; var cards=[arg.card]; if(arg.card.cards) cards.addArray(arg.card.cards); cards.addArray(ui.selected.cards); var hhs=function(card){ return !cards.contains(card); }; var hs=player.countCards('h',hhs); for(var i of list){ if(i.countCards('h',hhs)>hs) return false; } return true; }, }, }, }, }, //刘巴 tongduo:{ audio:2, trigger:{global:'phaseJieshuBegin'}, direct:true, preHidden:true, filter:function(event,player){ if(player!=event.player&&!player.hasSkill('tongduo')||!event.player.isFriendOf(player)) return false; return event.player.getHistory('lose',function(evt){ return evt.type=='discard'&&evt.cards2.length>0&&evt.getParent('phaseDiscard').player==event.player; }).length>0; }, content:function(){ 'step 0' var num=0; trigger.player.getHistory('lose',function(evt){ if(evt.type=='discard'&&evt.getParent('phaseDiscard').player==trigger.player) num+=evt.cards2.length; }); num=Math.min(3,num); event.num=num; var next=trigger.player.chooseBool('是否发动【统度】摸'+get.cnNumber(num)+'张牌?'); if(player==trigger.player) next.setHiddenSkill('tongduo'); 'step 1' if(result.bool){ player.logSkill('tongduo',trigger.player); trigger.player.draw(num); } }, }, qingyin:{ audio:2, enable:'phaseUse', limited:true, delay:false, filter:function(event,player){ var isFriend; if(player.identity=='unknown'){ var group='shu'; if(!player.wontYe('shu')) group=null; isFriend=function(current){ return current==player||current.identity==group; } } else isFriend=function(target){ return target.isFriendOf(player); }; return game.hasPlayer(function(current){ return isFriend(current)&¤t.isDamaged(); }); }, selectTarget:-1, filterTarget:function(card,player,target){; if(player==target) return true; if(player.identity=='unknown'){ var group='shu'; if(!player.wontYe('shu')) return false; return target.identity==group; } return target.isFriendOf(player); }, selectCard:[0,1], filterCard:()=>false, multitarget:true, multiline:true, skillAnimation:true, animationColor:'orange', content:function(){ 'step 0' player.awakenSkill('qingyin'); event.num=0; 'step 1' if(targets[num].isDamaged()){ targets[num].recover(targets[num].maxHp-targets[num].hp); } event.num++; if(event.num=(1/Math.max(1.6,game.roundNumber))?1:-1; }, result:{ player:1, }, }, }, //苏飞 gzlianpian:{ audio:2, trigger:{global:'phaseJieshuBegin'}, direct:true, preHidden:true, filter:function(event,player){ if(player!=event.player&&!player.hasSkill('gzlianpian')) return false; var num=0; game.getGlobalHistory('cardMove',function(evt){ if(evt.name=='lose'&&evt.type=='discard'&&evt.getParent(2).player==event.player) num+=evt.cards2.length; }); if(num<=player.hp) return false; if(player==event.player) return game.hasPlayer(function(current){ return current.isFriendOf(player)&¤t.countCards('h')0||player.isDamaged(); }, content:function(){ 'step 0' if(player==trigger.player){ player.chooseTarget(get.prompt('gzlianpian'),'令一名己方角色将手牌摸至手牌上限',function(card,player,target){ return target.isFriendOf(player)&&target.maxHp>target.countCards('h'); }).set('ai',function(target){ var att=get.attitude(_status.event.player,target); if(target.hasSkillTag('nogain')) att/=6; if(att>2){ return Math.min(5,target.maxHp)-target.countCards('h'); } return att/3; }).setHiddenSkill(event.name); } else{ event.goto(2); event.addIndex=0; var list=[],target=trigger.player,str=get.translation(player); event.target=target; if(player.countDiscardableCards('he',target)>0) list.push('弃置'+str+'的一张牌'); else event.addIndex++; if(player.isDamaged()) list.push('令'+str+'回复1点体力'); target.chooseControl('cancel2').set('choiceList',list).set('ai',function(){ var evt=_status.event.getParent(); if(get.attitude(evt.target,evt.player)>0) return 1-evt.addIndex; return evt.addIndex; }).set('prompt','是否对'+str+'发动【连翩】?'); } 'step 1' if(result.bool){ var target=result.targets[0]; player.logSkill('gzlianpian',target); target.draw(Math.min(5,target.maxHp-target.countCards('h'))); } event.finish(); 'step 2' if(result.control=='cancel2'){ event.finish(); return; } player.logSkill('gzlianpian',target,false); target.line(player,'green'); if(result.index+event.addIndex==0){ target.discardPlayerCard('he',player,true); event.finish(); } else player.recover(); 'step 3' game.delayx(); }, }, //冯熙 gzyusui:{ audio:'yusui', trigger:{target:'useCardToTargeted'}, filter:function(event,player){ return event.player!=player&&event.player.isIn()&&event.player.isEnemyOf(player)&&get.color(event.card)=='black'; }, logTarget:'player', check:function(event,player){ var target=event.player; if(player.hp<3||get.attitude(player,target)>-3) return false; if(player.hp3) return true; return false; }, preHidden:true, content:function(){ 'step 0' player.loseHp(); event.target=trigger.player; 'step 1' event.addIndex=0; var list=[]; if(target.maxHp>0&&target.countCards('h')>0) list.push('令其弃置'+get.cnNumber(target.maxHp)+'张手牌'); else event.addIndex++; if(target.hp>player.hp) list.push('令其失去'+get.cnNumber(target.hp-player.hp)+'点体力'); if(!list.length) event.finish(); else if(list.length==1) event._result={index:0}; else player.chooseControl().set('choiceList',list).set('prompt','令'+get.translation(target)+'执行一项').set('ai',function(){ var player=_status.event.player,target=_status.event.getParent().target; return (target.hp-player.hp)>(Math.min(target.maxHp,target.countCards('h'))/2)?1:0; }); 'step 2' if(result.index+event.addIndex==0) target.chooseToDiscard(target.maxHp,true,'h'); else target.loseHp(target.hp-player.hp); }, }, gzboyan:{ audio:'boyan', enable:'phaseUse', usable:1, filter:function(event,player){ return game.hasPlayer((target)=>lib.skill.gzboyan.filterTarget(null,player,target)); }, filterTarget:function(card,player,target){ return target!=player&&target.countCards('h')0; }); else event.finish(); 'step 3' if(result.bool){ target.addTempSkill('gzboyan_zongheng',{player:'phaseEnd'}); game.log(player,'发起了','#y纵横',',令',target,'获得了技能','#g【驳言】'); } }, derivation:'gzboyan_zongheng', subSkill:{ zongheng:{ enable:'phaseUse', usable:1, filterTarget:lib.filter.notMe, content:function(){ target.addTempSkill('gzboyan_block'); }, ai:{ order:4, result:{ target:function(player,target){ if(target.countCards('h','shan')&&!target.hasSkillTag('respondShan',true,null,true)&&player.countCards('h',function(card){ return get.tag(card,'respondShan')&&get.effect(target,card,player,player)>0&&player.getUseValue(card)>0; })) return -target.countCards('h'); return -0.5; }, }, }, }, block:{ mark:true, intro:{content:'不能使用或打出手牌'}, charlotte:true, mod:{ cardEnabled2:function(card){ if(get.position(card)=='h') return false; }, }, }, }, ai:{ order:4, result:{ target:function(player,target){ if(get.attitude(player,target)>0) return Math.min(5,target.maxHp-target.countCards('h')); if(target.maxHp-target.countCards('h')==1&&target.countCards('h','shan')&&!target.hasSkillTag('respondShan',true,null,true)&&player.countCards('h',function(card){ return get.tag(card,'respondShan')&&get.effect(target,card,player,player)>0&&player.getUseValue(card,null,true)>0; })) return -2; }, }, }, }, //文钦 gzjinfa:{ audio:2, enable:'phaseUse', usable:1, filter:function(event,player){ return player.countCards('he')>0&&game.hasPlayer(function(current){ return current!=player&¤t.countCards('he')>0; }) }, filterCard:true, filterTarget:function(card,player,target){ return target!=player&&target.countCards('he')>0; }, check:function(card){ return 6-get.value(card); }, content:function(){ 'step 0' target.chooseCard('he','交给'+get.translation(player)+'一张装备牌,或令其获得你的一张牌',{type:'equip'}).set('ai',function(card){ if(_status.event.goon&&get.suit(card)=='spade') return 8-get.value(card); return 5-get.value(card); }).set('goon',target.canUse('sha',player,false)&&get.effect(player,{name:'sha'},target,target)>0); 'step 1' if(!result.bool){ player.gainPlayerCard(target,'he',true); event.finish(); } else player.gain(result.cards,target,'give'); 'step 2' if(result.bool&&result.cards&&result.cards.length&& target.isIn()&&player.isIn()&&get.suit(result.cards[0],target)=='spade'&&target.canUse('sha',player,false)) target.useCard({name:'sha',isCard:true},false,player); }, ai:{ order:6, result:{ player:function(player,target){ if(target.countCards('e',function(card){ return get.suit(card)=='spade'&&get.value(card)<8; })&&target.canUse('sha',player,false)) return get.effect(player,{name:'sha'},target,player); return 0; }, target:function(player,target){ var es=target.getCards('e').sort(function(a,b){ return get.value(b,target)-get.value(a,target); }); if(es.length) return -Math.min(2,get.value(es[0])) return -2; }, }, }, }, //诸葛恪 gzduwu:{ limited:true, audio:2, enable:'phaseUse', delay:false, filter:function(event,player){ var isEnemy; if(player.identity=='unknown'){ if(!player.wontYe('wu')) isEnemy=function(current){ return current!=player; }; else isEnemy=function(current){ return current!=player&¤t.identity!='wu'; } } else isEnemy=function(target){ return target.isEnemyOf(player); }; return game.hasPlayer(function(current){ return isEnemy(current)&&player.inRange(current); }); }, filterTarget:function(card,player,target){ if(player==target||!player.inRange(target)) return false; if(player.identity=='unknown'){ if(!player.wontYe('wu')) return true; return target.identity!='wu'; } return target.isEnemyOf(player); }, selectTarget:-1, filterCard:()=>false, selectCard:[0,1], multitarget:true, multiline:true, content:function(){ 'step 0' player.awakenSkill('gzduwu'); player.addSkill('gzduwu_count'); targets.sortBySeat(); event.players=targets.slice(0); game.delayx(); player.chooseJunlingFor(event.players[0]).set('prompt','为所有目标角色选择军令牌'); 'step 1' event.junling=result.junling; event.targets=result.targets; event.num=0; 'step 2' if(num(get.damageEffect(evt.current,evt.player,evt.current)/get.attitude(evt.current,evt.current))?0:1; }); } else event.goto(4); 'step 3' if(result.index==0){ event.current.carryOutJunling(player,event.junling,targets); } else{ player.draw(); event.current.damage(); } 'step 4' game.delayx(); event.num++; if(event.num0&&player.canUse('sha',event.player,false); }, content:function(){ 'step 0' player.chooseCard('e',get.prompt('gzxishe',trigger.player),'将装备区内的一张牌当做'+(player.hp>trigger.player.hp?'不可响应的':'')+'【杀】对其使用',function(card,player){ return player.canUse({ name:'sha', cards:[card], },_status.event.target,false); }).set('target',trigger.player).set('ai',function(card){ var evt=_status.event,eff=get.effect(evt.target,{ name:'sha', cards:[card], },evt.player,evt.player); if(eff<=0) return 0; var val=get.value(card); if(get.attitude(evt.player,evt.target)<-2&&evt.target.hp<=Math.min(2,evt.player.countCards('e'),evt.player.hp-1)) return 2/Math.max(1,val); return eff-val; }).setHiddenSkill(event.name); 'step 1' if(result.bool){ var next=player.useCard({name:'sha'},result.cards,'gzxishe',trigger.player,false); if(player.hp>trigger.player.hp) next.oncard=function(){ _status.event.directHit.add(trigger.player); } } else event.finish(); 'step 2' if(trigger.player.isDead()){ player.mayChangeVice(null,'hidden'); } else if(lib.skill.gzxishe.filter(trigger,player)) event.goto(0); }, ai:{ directHit_ai:true, skillTagFilter:function(player,tag,arg){ if(_status.event.getParent().name=='gzxishe'&&arg.card&&arg.card.name=='sha'&& arg.target&&arg.target==_status.event.target&&player.hp>arg.target.hp) return true; return false; }, }, }, //公孙渊 gzhuaiyi:{ audio:2, enable:'phaseUse', usable:1, delay:false, filter:function(event,player){ return player.countCards('h')>0; }, content:function(){ 'step 0' player.showHandcards(); 'step 1' if(!player.countCards('h',{color:'red'})) event._result={control:'黑色'}; else if(!player.countCards('h',{color:'black'})) event._result={control:'红色'}; else player.chooseControl('红色','黑色').set('ai',function(){ var player=_status.event.player,num=player.maxHp-player.getExpansions('gzhuaiyi').length; if(player.countCards('h',{color:'red'})<=num&& player.countCards('h',{color:'black'})>num) return '红色'; return '黑色'; }); 'step 2' event.control=result.control; var cards; if(event.control=='红色'){ cards=player.getCards('h',{color:'red'}); } else{ cards=player.getCards('h',{color:'black'}); } player.discard(cards); event.num=cards.length; 'step 3' player.chooseTarget('请选择至多'+get.cnNumber(event.num)+'名有牌的其他角色,获得这些角色的各一张牌。',[1,event.num],function(card,player,target){ return target!=player&&target.countCards('he')>0; }).set('ai',function(target){ return -get.attitude(_status.event.player,target)+0.5; }); 'step 4' if(result.bool&&result.targets){ player.line(result.targets,'green'); event.targets=result.targets; event.targets.sort(lib.sort.seat); event.cards=[]; } else{ event.finish(); } 'step 5' if(player.isAlive()&&event.targets.length){ player.gainPlayerCard(event.targets.shift(),'he',true); } else event.finish(); 'step 6' if(result.bool&&result.cards&&result.cards.length) event.cards.addArray(result.cards); if(event.targets.length) event.goto(5); 'step 7' var hs=player.getCards('h'); cards=cards.filter(function(card){ return get.type(card)=='equip'&&hs.contains(card); }); if(cards.length){ player.addToExpansion(cards,player,'give').gaintag.add('gzhuaiyi'); } }, ai:{ order:10, result:{ player:function(player,target){ var num=player.maxHp-player.getExpansions('gzhuaiyi').length; if(player.countCards('h',{color:'red'})<=num) return 1; if(player.countCards('h',{color:'black'})<=num) return 1; return 0; }, } }, marktext:'异', intro:{content:'expansion',markcount:'expansion'}, onremove:function(player,skill){ var cards=player.getExpansions(skill); if(cards.length) player.loseToDiscardpile(cards); }, }, gzzisui:{ audio:2, trigger:{player:'phaseDrawBegin2'}, forced:true, filter:function(event,player){ return !event.numFixed&&player.getExpansions('gzhuaiyi').length>0; }, content:function(){ trigger.num+=player.getExpansions('gzhuaiyi').length; }, group:'gzzisui_die', subSkill:{ die:{ audio:'gzzisui', trigger:{player:'phaseJieshuBegin'}, forced:true, filter:function(event,player){ return player.getExpansions('gzhuaiyi').length>player.maxHp; }, content:function(){ player.die(); }, }, }, }, //潘濬 gzcongcha:{ audio:2, trigger:{player:'phaseZhunbeiBegin'}, direct:true, filter:function(event,player){ return game.hasPlayer(function(current){ return current!=player&¤t.isUnseen(); }) }, preHidden:'gzcongcha_draw', prompt2:'选择一名武将牌均暗置的其他角色', content:function(){ 'step 0' player.chooseTarget(get.prompt2('gzcongcha'),function(card,player,target){ return target!=player&&target.isUnseen(); }).set('ai',function(target){ if(get.attitude(_status.event.player,target)>0) return Math.random()+Math.sqrt(target.hp); return Math.random()+Math.sqrt(Math.max(1,4-target.hp)); }); 'step 1' if(result.bool){ var target=result.targets[0]; player.logSkill('gzcongcha',target); player.storage.gzcongcha2=target; player.addTempSkill('gzcongcha2',{player:'phaseBegin'}); target.addSkill('gzcongcha_ai'); game.delayx(); } }, subfrequent:['draw'], group:'gzcongcha_draw', subSkill:{ draw:{ audio:'gzcongcha', trigger:{player:'phaseDrawBegin2'}, frequent:true, filter:function(event,player){ return !event.numFixed&&!game.hasPlayer(function(current){ return current.isUnseen(); }); }, prompt:'是否发动【聪察】多摸两张牌?', content:function(){ trigger.num+=2; }, }, }, }, gzcongcha_ai:{ charlotte:true, ai:{ mingzhi_yes:true, mingzhi_no:true, skillTagFilter:function(player,tag){ if(_status.brawl) return false; var group=lib.character[player.name1][1]; if(tag=='mingzhi_yes'){ if(group!='ye'&&player.wontYe(group)&&game.hasPlayer(function(current){ return current.storage.gzcongcha2==player&¤t.identity==group; })) return true; return false; } if(group=='ye'&&!player.wontYe(group)) return true; return game.hasPlayer(function(current){ return current.storage.gzcongcha2==player&¤t.identity!=group; }) }, }, }, gzcongcha2:{ trigger:{global:'showCharacterAfter'}, forced:true, charlotte:true, onremove:true, filter:function(event,player){ return event.player==player.storage.gzcongcha2; }, logTarget:'player', content:function(){ 'step 0' player.removeSkill('gzcongcha2'); trigger.player.removeSkill('gzcongcha_ai'); if(player.isFriendOf(trigger.player)) game.asyncDraw([player,trigger.player].sortBySeat(_status.currentPhase),2); else trigger.player.loseHp(); 'step 1' game.delayx(); }, mark:'character', intro:{content:'已指定$为目标'}, }, //司马昭 gzzhaoxin:{ audio:2, trigger:{player:'damageEnd'}, filter:function(event,player){ return player.countCards('h')>0; }, check:()=>false, preHidden:true, content:function(){ 'step 0' player.showHandcards(); 'step 1' var hs=player.countCards('h'); if(game.hasPlayer(function(current){ return current!=player&¤t.countCards('h')<=hs; })){ player.chooseTarget(true,'请选择要交换手牌的目标角色',function(card,player,target){ return target!=player&&target.countCards('h')<=player.countCards('h'); }) } else event.finish(); 'step 2' if(result.bool){ var target=result.targets[0]; player.line(target,'green'); player.swapHandcards(target); } }, }, gzsuzhi:{ audio:2, derivation:'gzfankui', mod:{ targetInRange:function(card,player,target){ if(player==_status.currentPhase&&player.countMark('gzsuzhi_count')<3&&get.type2(card)=='trick') return true; }, }, trigger:{player:'phaseJieshuBegin'}, forced:true, filter:function(event,player){ return player.countMark('gzsuzhi_count')<3; }, content:function(){ player.addTempSkill('fankui',{player:'phaseBegin'}); }, group:['gzsuzhi_damage','gzsuzhi_draw','gzsuzhi_gain'], preHidden:['gzsuzhi_damage','gzsuzhi_draw','gzsuzhi_gain'], subSkill:{ damage:{ audio:'gzsuzhi', trigger:{source:'damageBegin1'}, forced:true, filter:function(event,player){ return player==_status.currentPhase&&player.countMark('gzsuzhi_count')<3&&event.card&& (event.card.name=='sha'||event.card.name=='juedou')&&event.getParent().type=='card'; }, content:function(){ trigger.num++; player.addTempSkill('gzsuzhi_count'); player.addMark('gzsuzhi_count',1,false); }, }, draw:{ audio:'gzsuzhi', trigger:{player:'useCard'}, forced:true, filter:function(event,player){ return player==_status.currentPhase&&player.countMark('gzsuzhi_count')<3&&get.type2(event.card)=='trick'; }, content:function(){ player.draw(); player.addTempSkill('gzsuzhi_count'); player.addMark('gzsuzhi_count',1,false); }, }, gain:{ audio:'gzsuzhi', trigger:{global:'loseAfter'}, forced:true, filter:function(event,player){ if(player!=_status.currentPhase||event.type!='discard'||player==event.player||player.countMark('gzsuzhi_count')>=3) return false; return event.cards2&&event.cards2.filterInD('d').length>0; }, content:function(){ 'step 0' player.addTempSkill('gzsuzhi_count'); player.addMark('gzsuzhi_count',1,false); if(trigger.delay==false) game.delay(); 'step 1' var cards=trigger.cards2.filterInD('d'); if(cards.length==1){ event._result={ bool:true, links:cards, } } else player.chooseButton(['夙智:选择获得一张牌',cards],true); 'step 2' if(result.bool) player.gain(result.links[0],'gain2'); }, }, count:{ onremove:true, }, }, }, gzfankui:{ audio:2, inherit:'fankui', }, //夏侯霸 gzbaolie:{ audio:2, mod:{ targetInRange:function(card,player,target){ if(card.name=='sha'&&target.hp>=player.hp) return true; }, cardUsableTarget:function(card,player,target){ if(card.name=='sha'&&target.hp>=player.hp) return true; }, }, trigger:{player:'phaseUseBegin'}, forced:true, preHidden:true, filter:function(event,player){ return game.hasPlayer(function(current){ return current.isEnemyOf(player)&&player.inRangeOf(current); }); }, logTarget:function(event,player){ return game.filterPlayer(function(current){ return current.isEnemyOf(player)&&player.inRangeOf(current); }); }, check:()=>false, content:function(){ 'step 0' event.targets=game.filterPlayer(function(current){ return current.isEnemyOf(player)&&player.inRangeOf(current); }).sortBySeat(); 'step 1' var target=event.targets.shift(); if(target.isIn()){ event.target=target; target.chooseToUse(function(card,player,event){ if(get.name(card)!='sha') return false; return lib.filter.filterCard.apply(this,arguments); },'豹烈:对'+get.translation(player)+'使用一张杀,或令其弃置你的一张牌').set('targetRequired',true).set('complexSelect',true).set('filterTarget',function(card,player,target){ if(target!=_status.event.sourcex&&!ui.selected.targets.contains(_status.event.sourcex)) return false; return lib.filter.filterTarget.apply(this,arguments); }).set('sourcex',player); } else if(targets.length) event.redo(); else event.finish(); 'step 2' if(result.bool==false&&target.countCards('he')>0){ player.discardPlayerCard(target,'he',true); } if(targets.length) event.goto(1); }, }, //许攸 gzchenglve:{ audio:2, trigger:{global:'useCardAfter'}, filter:function(event,player){ return event.targets.length>1&&event.player.isIn()&&event.player.isFriendOf(player); }, logTarget:'player', check:function(event,player){ return get.attitude(player,event.player)>0; }, preHidden:true, content:function(){ 'step 0' trigger.player.draw(); if(player.hasHistory('damage',function(evt){ return evt.card==trigger.card; })&&game.hasPlayer(function(current){ return current.isFriendOf(player)&&!current.hasMark('yinyang_mark'); })){ player.chooseTarget('是否令一名己方角色获得“阴阳鱼”标记?',function(card,player,target){ return target.isFriendOf(player)&&!target.hasMark('yinyang_mark'); }).set('ai',function(target){ return get.attitude(_status.event.player,target)*Math.sqrt(1+target.needsToDiscard()); }); } else event.finish(); 'step 1' if(result.bool){ var target=result.targets[0]; player.line(target,'green'); target.addMark('yinyang_mark',1,false); game.delayx(); } }, }, gzshicai:{ audio:2, trigger:{player:'damageEnd'}, forced:true, preHidden:true, filter:function(event,player){ return event.num==1||player.countCards('h')>0; }, check:function(event,player){ return event.num==1; }, content:function(){ if(trigger.num==1) player.draw(2); else player.chooseToDiscard(true,player.countCards('h')); }, }, gzzhuosheng:{ trigger:{global:'damageEnd'}, logTarget:'player', filter:function(event,player){ return event.player.isFriendOf(player); }, preHidden:true, content:function(){ var target=trigger.player; target.addTempSkill('gzzhuosheng2',{player:'phaseJieshuBegin'}); target.draw().gaintag=['gzzhuosheng2']; }, }, gzzhuosheng2:{ onremove:function(player,skill){ player.removeGaintag(skill); }, mod:{ targetInRange:function(card,player,target){ if(!card.cards||get.type(card)!='basic') return; for(var i of card.cards){ if(i.hasGaintag('gzzhuosheng2')) return (game.online?player==_status.currentPhase:player.isPhaseUsing()); } }, cardUsable:function(card,player,target){ if(!card.cards||get.type(card)!='basic'||!(game.online?player==_status.currentPhase:player.isPhaseUsing())) return; for(var i of card.cards){ if(i.hasGaintag('gzzhuosheng2')) return Infinity; } }, aiOrder:function(player,card,num){ if(get.itemtype(card)=='card'&&card.hasGaintag('gzzhuosheng2')&&get.type(card)=='basic') return num-0.1; }, }, trigger:{player:'useCard2'}, direct:true, filterx:function(event,player){ if(!player.isPhaseUsing()) return false; return player.getHistory('lose',function(evt){ if(evt.getParent()!=event) return false; for(var i in evt.gaintag_map){ if(evt.gaintag_map[i].contains('gzzhuosheng2')) return true; } return false; }).length>0; }, filter:function(event,player){ if(!lib.skill.gzzhuosheng2.filterx(event,player)) return false; if(get.type(event.card)!='trick') return false; if(event.targets&&event.targets.length>0) return true; var info=get.info(event.card); if(info.allowMultiple==false) return false; if(event.targets&&!info.multitarget){ if(game.hasPlayer(function(current){ return !event.targets.contains(current)&&lib.filter.targetEnabled2(event.card,player,current)&&lib.filter.targetInRange(event.card,player,current); })){ return true; } } return false; }, content:function(){ 'step 0' var prompt2='为'+get.translation(trigger.card)+'增加或减少一个目标' player.chooseTarget(get.prompt('gzzhuosheng2'),function(card,player,target){ var player=_status.event.player; if(_status.event.targets.contains(target)) return true; return lib.filter.targetEnabled2(_status.event.card,player,target)&&lib.filter.targetInRange(_status.event.card,player,target); }).set('prompt2',prompt2).set('ai',function(target){ var trigger=_status.event.getTrigger(); var player=_status.event.player; return get.effect(target,trigger.card,player,player)*(_status.event.targets.contains(target)?-1:1); }).set('targets',trigger.targets).set('card',trigger.card); 'step 1' if(result.bool){ if(!event.isMine()&&!event.isOnline()) game.delayx(); event.targets=result.targets; } else{ event.finish(); } 'step 2' if(event.targets){ player.logSkill('gzzhuosheng2',event.targets); if(trigger.targets.contains(event.targets[0])) trigger.targets.removeArray(event.targets); else trigger.targets.addArray(event.targets); } }, group:['gzzhuosheng2_equip','gzzhuosheng2_silent'], subSkill:{ equip:{ audio:'gzzhuosheng2', trigger:{player:'useCard'}, filter:function(event,player){ return get.type(event.card)=='equip'&&lib.skill.gzzhuosheng2.filterx(event,player); }, prompt:'是否发动【擢升】摸一张牌?', content:function(){ player.draw(); }, }, silent:{ trigger:{ player:'useCard1', }, silent:true, firstDo:true, filter:function(event,player){ return get.type(event.card)=='basic'&&lib.skill.gzzhuosheng2.filterx(event,player)&&event.addCount!==false; }, content:function(){ trigger.addCount=false; var stat=player.getStat(); if(stat&&stat.card&&stat.card[trigger.card.name]) stat.card[trigger.card.name]--; }, }, }, }, gzzhuhai:{ audio:'zhuhai', audioname:['gz_re_xushu'], trigger:{global:'phaseJieshuBegin'}, direct:true, preHidden:true, filter:function(event,player){ return event.player.isAlive()&&event.player.getStat('damage')&& lib.filter.targetEnabled({name:'sha'},player,event.player)&&(player.hasSha()||_status.connectMode&&player.countCards('h')>0); }, content:function(){ var next=player.chooseToUse(function(card,player,event){ if(get.name(card)!='sha') return false; return lib.filter.filterCard.apply(this,arguments); },'诛害:是否对'+get.translation(trigger.player)+'使用一张杀?').set('logSkill','gzzhuhai').set('complexSelect',true).set('filterTarget',function(card,player,target){ if(target!=_status.event.sourcex&&!ui.selected.targets.contains(_status.event.sourcex)) return false; return lib.filter.targetEnabled.apply(this,arguments); }).set('sourcex',trigger.player).setHiddenSkill(event.name); player.addTempSkill('gzzhuhai2'); next.oncard=function(card,player){ try{ if(trigger.player.getHistory('sourceDamage',function(evt){ return evt.player.isFriendOf(player); }).length){ player.addTempSkill('gzzhuhai2'); card.gzzhuhai_tag=true; } }catch(e){ alert('发生了一个导致【诛害】无法正常触发无视防具效果的错误。请关闭十周年UI/手杀UI等扩展以解决'); } } }, ai:{ unequip_ai:true, skillTagFilter:function(player,tag,arg){ var evt=_status.event.getParent(); if(evt.name!='gzzhuhai'||!arg||!arg.target) return false; if(!arg.target.getHistory('sourceDamage',function(evt){ return evt.player.sameIdentityAs(player); }).length) return false; return true; }, }, }, gzzhuhai2:{ trigger:{player:'shaMiss'}, forced:true, popup:false, filter:function(event,player){ return event.card.gzzhuhai_tag==true&&event.target.countCards('he')>0; }, content:function(){ player.line(trigger.target); trigger.target.chooseToDiscard('he',true); }, ai:{ unequip:true, skillTagFilter:function(player,tag,arg){ if(!arg||!arg.card||!arg.card.gzzhuhai_tag) return false; }, }, }, quanjin:{ audio:2, enable:'phaseUse', usable:1, onChooseToUse:function(event){ if(!game.online){ event.set('quanjin_list',game.filterPlayer((i)=>(i!=event.player&&i.getHistory('damage').length))); } }, filter:function(event,player){ return event.quanjin_list&&event.quanjin_list.length>0&&player.countCards('h')>0; }, filterCard:true, filterTarget:function(card,player,target){ return _status.event.quanjin_list.contains(target); }, discard:false, lose:false, delay:false, check:function(card){ var evt=_status.event; if(evt.quanjin_list.filter(function(target){ return get.attitude(evt.player,target)>0; }).length) return 8-get.value(card); return 6.5-get.value(card); }, content:function(){ 'step 0' target.gain(cards,player,'giveAuto'); 'step 1' player.chooseJunlingFor(target); 'step 2' event.junling=result.junling; event.targets=result.targets; var str=get.translation(player); target.chooseJunlingControl(player,result.junling,result.targets).set('prompt','劝进').set('choiceList',[ '执行该军令,然后'+str+'摸一张牌', '不执行该军令,然后其将手牌摸至与全场最多相同', ]).set('ai',function(){ var evt=_status.event.getParent(2),player=evt.target,source=evt.player,junling=evt.junling,targets=evt.targets; var num=0; game.countPlayer(function(current){ var num2=current.countCards('h'); if(num2>num) num=num2; }); num=Math.max(0,num-source.countCards('h')); if(num>1){ if(get.attitude(player,target)>0) return get.junlingEffect(source,junling,player,targets,player)>num; return get.junlingEffect(source,junling,player,targets,player)>-num; } if(get.attitude(player,target)>0) return get.junlingEffect(source,junling,player,targets,player)>0; return get.junlingEffect(source,junling,player,targets,player)>1; }); 'step 3' if(result.index==0){ target.carryOutJunling(player,event.junling,targets); player.draw(); } else{ var num=0; game.countPlayer(function(current){ var num2=current.countCards('h'); if(num2>num) num=num2; }); num-=player.countCards('h'); if(num>0) player.draw(Math.min(num,5)); } }, ai:{ order:1, result:{ player:function(player,target){ if(get.attitude(player,target)>0) return 3.3; var num=0; game.countPlayer(function(current){ var num2=current.countCards('h'); if(player==current) num2--; if(target==current) num2++; if(num2>num) num=num2; }); num=Math.max(0,num-player.countCards('h')); if(!num) return 0; if(num>1) return 2; if(ui.selected.cards.length&&get.value(ui.selected.cards[0])>5) return 0; return 1; }, }, }, }, zaoyun:{ audio:2, enable:'phaseUse', usable:1, filter:function(event,player){ var num=player.countCards('h'); return game.hasPlayer(function(current){ if(current.isEnemyOf(player)){ var dist=get.distance(player,current); return dist>1&&dist<=num; } }); }, selectCard:function(){ var list=[],player=_status.event.player; if(ui.selected.targets.length) return get.distance(player,ui.selected.targets[0])-1; game.countPlayer(function(current){ if(current.isEnemyOf(player)){ var dist=get.distance(player,current); if(dist>1) list.push(dist-1); } }); list.sort(); return [list[0],list[list.length-1]]; }, filterCard:true, filterTarget:function(card,player,target){ return target.isEnemyOf(player)&&get.distance(player,target)==ui.selected.cards.length+1; }, check:function(card){ var player=_status.event.player; if(ui.selected.cards.length&&game.hasPlayer(function(current){ return current.isEnemyOf(player)&&get.distance(player,current)==(ui.selected.cards.length+1)&&get.damageEffect(current,player,player)>0; })) return 0; return (7-ui.selected.cards.length*2)-get.value(card); }, content:function(){ target.damage('nocard'); if(!player.storage.zaoyun2) player.storage.zaoyun2=[]; player.storage.zaoyun2.push(target); player.addTempSkill('zaoyun2'); }, ai:{ order:5, result:{ target:function(player,target){ return get.damageEffect(target,player,target); }, }, }, }, zaoyun2:{ onremove:true, charlotte:true, mod:{ globalFrom:function(player,target){ if(player.getStorage('zaoyun2').contains((target))) return -Infinity; }, }, }, gzzhidao:{ audio:2, trigger:{player:'phaseUseBegin'}, forced:true, preHidden:true, content:function(){ 'step 0' player.chooseTarget('请选择【雉盗】的目标','本回合内只能对自己和该角色使用牌,且第一次对其造成伤害时摸一张牌',lib.filter.notMe).set('ai',function(target){ var player=_status.event.player; return (1-get.sgn(get.attitude(player,target)))*Math.max(1,get.distance(player,target)); }); 'step 1' if(result.bool){ var target=result.targets[0]; player.line(target,'green'); game.log(player,'选择了',target); player.storage.gzzhidao2=target; player.addTempSkill('gzzhidao2'); } }, }, gzzhidao2:{ mod:{ playerEnabled:function(card,player,target){ if(target!=player&&target!=player.storage.gzzhidao2) return false; }, globalFrom:function(from,to){ if(to==from.storage.gzzhidao2) return -Infinity; }, }, audio:'gzzhidao', trigger:{source:'damageSource'}, forced:true, charlotte:true, filter:function(event,player){ return event.player==player.storage.gzzhidao2&&player.getHistory('sourceDamage',function(evt){ return evt.player==event.player; }).indexOf(event)==0&&event.player.countGainableCards(player,'hej')>0; }, logTarget:'player', content:function(){ player.gainPlayerCard(trigger.player,'hej',true); }, }, gzyjili:{ audio:2, init:function(player,skill){ if(player.checkViceSkill(skill)&&!player.viceChanged) player.removeMaxHp(); }, viceSkill:true, forced:true, preHidden:true, trigger:{target:'useCardToTargeted'}, filter:function(event,player){ if(get.color(event.card)!='red'||event.targets.length!=1) return false; var type=get.type(event.card); return type=='basic'||type=='trick'; }, check:function(){ return false; }, content:function(){ player.addTempSkill('gzyjili2'); var evt=trigger.getParent(); if(!evt.gzyjili) evt.gzyjili=[]; evt.gzyjili.add(player); }, group:'gzyjili_remove', subSkill:{ remove:{ audio:'gzyjili', trigger:{player:'damageBegin2'}, forced:true, filter:function(event,player){ return player.getHistory('damage').length==1; }, content:function(){ trigger.cancel(); player.removeCharacter(1); }, }, }, }, gzyjili2:{ trigger:{global:'useCardAfter'}, charlotte:true, popup:false, forced:true, filter:function(event,player){ return event.gzyjili&&event.gzyjili.contains(player)&&!event.addedTarget&&event.player &&event.player.isAlive()&&event.player.canUse({ name:event.card.name, nature:event.card.nature, isCard:true, },player); }, content:function(){ trigger.player.useCard({ name:trigger.card.name, nature:trigger.card.nature, isCard:true, },player,false); }, }, donggui:{ audio:2, enable:'phaseUse', usable:1, filter:function(event,player){ return game.hasPlayer(function(current){ return lib.skill.donggui.filterTarget(null,player,current); }); }, filterTarget:function(card,player,target){ return target!=player&&!target.isUnseen(2)&&player.canUse('diaohulishan',target); }, content:function(){ 'step 0' player.chooseButton(['暗置'+get.translation(target)+'的一张武将牌',[[target.name1,target.name2],'character']],true).set('filterButton',function(button){ return !get.is.jun(button.link); }); 'step 1' var target1=target.getNext(); var target2=target.getPrevious(); if(target1==target2||target.inline(target1)||target.inline(target2)||target1.inline(target2)) event.finish(); else{ event.target1=target1; event.target2=target2; } target.hideCharacter(result.links[0]==target.name1?0:1); target.addTempSkill('donggui2'); player.useCard({name:'diaohulishan',isCard:true},target); 'step 2' if(event.target1.inline(event.target2)){ player.draw(game.countPlayer(function(current){ return current.inline(event.target1); })); } }, ai:{ order:2, result:{ player:function(player,target){ var target1=target.getNext(); var target2=target.getPrevious(); if(target1==target2||target.inline(target1)||target.inline(target2)||target1.inline(target2)||!target1.isFriendOf(target2)) return 0; var num=game.countPlayer(function(current){ return current!=target1&¤t!=target2&&(current.inline(target1)||current.inline(target2)); }); return 2+num; }, }, }, }, donggui2:{ai:{nomingzhi:true}}, fengyang:{ audio:2, zhenfa:'inline', trigger:{player:'phaseJieshuBegin'}, filter:function(event,player){ var bool=player.hasSkill('fengyang'); return game.hasPlayer(function(current){ return current!=player&¤t.inline(player); })&&game.hasPlayer(function(current){ return (current==player||bool)&¤t.inline(player)&¤t.countCards('e')>0; }); }, direct:true, preHidden:true, content:function(){ 'step 0' event.list=game.filterPlayer(function(current){ return current.inline(player); }).sortBySeat(); 'step 1' var target=event.list.shift(); if((target==player||player.hasSkill('fengyang'))&&target.countCards('e')){ event.target=target; var next=target.chooseToDiscard('e',get.prompt('fengyang'),'弃置装备区内的一张牌并摸两张牌').set('ai',function(card){ return 5.5-get.value(card); }); next.logSkill='fengyang'; if(player==target) next.setHiddenSkill('fengyang'); } else event.goto(3); 'step 2' if(result.bool){ target.draw(2); } 'step 3' if(event.list.length) event.goto(1); }, }, gzrekuangcai:{ audio:'gzkuangcai', forced:true, preHidden:true, trigger:{player:'phaseDiscardBegin'}, filter:function(event,player){ return !player.getHistory('useCard').length||!player.getHistory('sourceDamage').length; }, content:function(){ if(!player.getHistory('useCard').length) player.addTempSkill('gzrekuangcai_more'); else player.addTempSkill('gzrekuangcai_less'); }, mod:{ targetInRange:function(card,player){ if(player==_status.currentPhase) return true; }, cardUsable:function(card,player){ if(player==_status.currentPhase) return Infinity; }, }, subSkill:{ less:{ mod:{ maxHandcard:function(player,num){ return num-1; }, }, charlotte:true, }, more:{ mod:{ maxHandcard:function(player,num){ return num+1; }, }, charlotte:true, }, }, }, gzkuangcai:{ audio:2, trigger:{player:'useCard1'}, forced:true, firstDo:true, noHidden:true, preHidden:['gzkuangcai_discard'], filter:function(event,player){ return player==_status.currentPhase&&get.type(event.card)=='trick'; }, content:function(){ trigger.nowuxie=true; }, mod:{ targetInRange:function(card,player){ if(player==_status.currentPhase) return true; }, cardUsable:function(card,player){ if(player==_status.currentPhase) return Infinity; }, }, ai:{ unequip:true, skillTagFilter:function(player){ return player==_status.currentPhase; }, }, group:'gzkuangcai_discard', subSkill:{ discard:{ audio:'gzkuangcai', trigger:{player:'phaseDiscardBegin'}, forced:true, filter:function(event,player){ var use=player.getHistory('useCard').length; var damage=(player.getStat('damage')||0); if(use&&!damage) return true; if(damage>=use) return true; return false; }, check:function(event,player){ var use=player.getHistory('useCard').length; var damage=(player.getStat('damage')||0); if(use&&!damage) return false; return true; }, content:function(){ var use=player.getHistory('useCard').length; var damage=(player.getStat('damage')||0); if(use&&!damage) player.addTempSkill('gzkuangcai_less') else{ player.drawTo(player.maxHp); player.addTempSkill('gzkuangcai_more'); } }, }, more:{ mod:{ maxHandcard:function(player,num){ return num+2; }, }, charlotte:true, }, less:{ mod:{ maxHandcard:function(player,num){ return num-2; }, }, charlotte:true, }, }, }, gzshejian:{ audio:2, preHidden:true, trigger:{target:'useCardToTargeted'}, filter:function(event,player){ if(player==event.player||event.targets.length!=1) return false; var hs=player.getCards('h'); if(hs.length==0) return false; for(var i of hs){ if(!lib.filter.cardDiscardable(i,player,'gzshejian')) return false; } return true; }, check:function(event,player){ var target=event.player; if(get.damageEffect(target,player,player)<=0) return false; if(target.hp<=(player.hasSkill('gzcongjian')?2:1)&&!target.getEquip('huxinjing')&&!game.hasPlayer(function(current){ return current!=target&&!current.isFriendOf(player); })) return true; if(player.hasSkill('lirang')&&player.hasFriend()) return true; if((event.card.name=='guohe'||event.card.name=='shunshou'||event.card.name=='zhujinqiyuan')&&player.countCards('h')==1) return true; if(player.countCards('h')<3&&!player.countCards('h',function(card){ return get.value(card,player)>5; })) return true; if(player.hp<=event.getParent().baseDamage){ if(get.tag(event.card,'respondSha')){ if(player.countCards('h',{name:'sha'})==0){ return true; } } else if(get.tag(event.card,'respondShan')){ if(player.countCards('h',{name:'shan'})==0){ return true; } } else if(get.tag(event.card,'damage')){ if(event.card.name=='shuiyanqijunx') return player.countCards('e')==0; return true; } } return false; }, logTarget:'player', content:function(){ 'step 0' var cards=player.getCards('h'); event.num=cards.length; player.discard(cards); 'step 1' var target=trigger.player,str=get.translation(target); event.target=target; if(!target.isIn()) event.finish(); else if(!target.hasCard(function(card){ return lib.filter.canBeDiscarded(card,player,target); },'he')) event._result={index:1}; else player.chooseControl().set('choiceList',[ '弃置'+str+'的'+get.cnNumber(num)+'张牌', '对'+str+'造成1点伤害', ]).set('ai',()=>1); 'step 2' if(result.index==0) player.discardPlayerCard(target,num,true,'he'); else target.damage(); }, }, gzpozhen:{ audio:2, trigger:{global:'phaseBegin'}, limited:true, preHidden:true, filter:function(event,player){ return player!=event.player; }, logTarget:'player', skillAnimation:true, animationColor:'orange', check:function(event,player){ var target=event.player; if(get.attitude(player,target)>=-3) return false; if(event.player.hasJudge('lebu')&&!game.hasPlayer(function(current){ return get.attitude(current,target)>0&¤t.hasWuxie(); })) return false; var num=Math.min(target.getCardUsable('sha'),target.countCards('h',function(card){ return get.name(card,target)=='sha'&&target.hasValueTarget(card); }))+target.countCards('h',function(card){ return get.name(card,target)!='sha'&&target.hasValueTarget(card); }); return num>=Math.max(2,target.hp); }, content:function(){ 'step 0' player.awakenSkill('gzpozhen'); var target=trigger.player; target.addTempSkill('gzpozhen2'); var list=game.filterPlayer(function(current){ return current!=target&&(current.inline(target)|| (current==target.getNext().getNext()&¤t.siege(target.getNext())||current==target.getPrevious().getPrevious()&¤t.siege(target.getPrevious()))); }); if(list.length){ list.add(target); list.sortBySeat(target); event.targets=list; } else event.finish(); 'step 1' var target=targets.shift(); if(target.countDiscardableCards(player,'he')>0) player.discardPlayerCard(target,'he',true).boolline=true; if(targets.length) event.redo(); }, }, gzpozhen2:{ mod:{ cardEnabled2:function(card){ if(get.position(card)=='h') return false; }, cardChongzhuable:function(card){ if(get.position(card)=='h') return false; }, }, }, gzjiancai:{ audio:2, viceSkill:true, trigger:{global:'damageBegin4'}, preHidden:true, init:function(player,skill){ if(player.checkViceSkill(skill)&&!player.viceChanged) player.removeMaxHp(); }, filter:function(event,player){ return event.player.isFriendOf(player)&&event.num>=event.player.hp; }, check:function(event,player){ if(get.attitude(player,event.player)<3) return false; if(event.num>=1||player.storage.gzpozhen) return true; if(player.countCards('h',function(card){ var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player); if(mod2!='unchanged') return mod2; var mod=game.checkMod(card,player,event.player,'unchanged','cardSavable',player); if(mod!='unchanged') return mod; var savable=get.info(card).savable; if(typeof savable=='function') savable=savable(card,player,event.player); return savable; })>=1+event.num-event.player.hp) return false; return true; }, logTarget:'player', skillAnimation:true, animationColor:'orange', content:function(){ trigger.cancel(); player.changeVice(); }, group:'gzjiancai_add', subSkill:{ add:{ trigger:{global:'changeViceBegin'}, logTarget:'player', forced:true, locked:false, prompt:function(event,player){ return get.translation(event.player)+'即将变更副将,是否发动【荐才】,令其此次变更副将时增加两张可选武将牌?'; }, filter:function(event,player){ return event.player.isFriendOf(player); }, content:function(){ trigger.num+=2; }, }, }, }, gzxingzhao:{ audio:2, getNum:function(){ var num=0; var list=[]; game.countPlayer(function(current){ if(current.identity=='unknown'||current.isHealthy()) return; if(current.identity=='ye') num++; else list.add(current.identity); }); return num+list.length; }, mod:{ maxHandcard:function(player,num){ return num+(lib.skill.gzxingzhao.getNum()>2?4:0); }, }, group:['gzxingzhao_xunxun','gzxingzhao_use','gzxingzhao_lose'], preHidden:['gzxingzhao_xunxun','gzxingzhao_use','gzxingzhao_lose'], subfrequent:['use'], subSkill:{ xunxun:{ audio:2, name:'恂恂', description:'摸牌阶段,你可以观看牌堆顶的四张牌,然后将其中的两张牌置于牌堆顶,并将其余的牌以任意顺序置于牌堆底。', trigger:{player:'phaseDrawBegin1'}, filter:function(event,player){ return lib.skill.gzxingzhao.getNum()>0; }, content:function(){ "step 0" event.cards=get.cards(4); player.chooseCardButton(event.cards,2,'选择两张牌置于牌堆顶',true).set('ai',ai.get.buttonValue); "step 1" if(result.bool){ var choice=[]; for(var i=0;i1&&!player.isMaxHandcard(); }, frequent:true, content:function(){ player.draw(); }, }, draw:{ audio:'gzxingzhao', trigger:{player:'damageEnd'}, forced:true, filter:function(event,player){ return lib.skill.gzxingzhao.getNum()>1&&event.source &&event.source.isAlive()&&event.source.countCards('h')!=player.countCards('h'); }, logTarget:function(event,player){ var target=event.source; return target.countCards('h')>player.countCards('h')?player:target; }, check:function(event,player){ return get.attitude(player,lib.skill.gzxingzhao_draw.logTarget(event,player))>0; }, content:function(){ lib.skill.gzxingzhao_draw.logTarget(trigger,player).draw(); }, }, skip:{ audio:'gzxingzhao', trigger:{player:'phaseDiscardBefore'}, forced:true, filter:function(){ return lib.skill.gzxingzhao.getNum()>2; }, content:function(){ trigger.cancel(); game.log(player,'跳过了','#y弃牌阶段'); }, }, lose:{ audio:'gzxingzhao', trigger:{ player:'loseAfter', global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'], }, filter:function(event,player){ var evt=event.getl(player); return evt&&evt.player==player&&evt.es&&evt.es.length>0&&lib.skill.gzxingzhao.getNum()>3; }, forced:true, content:function(){player.draw()}, }, }, ai:{ threaten:3, effect:{ target:function(card,player,target,current){ if(lib.skill.gzxingzhao.getNum()>3&&get.type(card)=='equip'&&!get.cardtag(card,'gifts')) return [1,3]; } }, reverseEquip:true, skillTagFilter:function(){ return lib.skill.gzxingzhao.getNum()>3; }, }, }, qiuan:{ audio:2, trigger:{player:'damageBegin2'}, filter:function(event,player){ return event.cards&&event.cards.filterInD().length>0&&!player.getExpansions('qiuan').length; }, check:function(event,player){ if(get.damageEffect(player,event.source||player,player,event.nature)>=0) return false; return true; }, preHidden:true, content:function(){ var cards=trigger.cards.filterInD(); player.addToExpansion('gain2',cards).gaintag.add('qiuan'); trigger.cancel(); }, intro:{ content:'expansion', markcount:'expansion', }, marktext:'函', }, liangfan:{ audio:2, trigger:{player:'phaseZhunbeiBegin'}, forced:true, filter:function(event,player){ return player.getExpansions('qiuan').length>0; }, content:function(){ 'step 0' var cards=player.getExpansions('qiuan'); player.gain(cards,'gain2').gaintag.add('liangfan'); player.addTempSkill('liangfan2'); 'step 1' player.loseHp(); }, }, liangfan2:{ audio:'liangfan', mark:true, mod:{ aiOrder:function(player,card,num){ if(get.itemtype(card)=='card'&&card.hasGaintag('liangfan')) return num+0.1; }, }, intro:{content:'使用“量反”牌造成伤害后,可获得目标角色的一张牌'}, trigger:{source:'damageEnd'}, logTarget:'player', charlotte:true, onremove:function(player){ player.removeGaintag('liangfan'); }, prompt:(event)=>('量反:是否获得'+get.translation(event.player)+'的一张牌?'), filter:function(event,player){ var evt=event.getParent(2); if(evt.name!='useCard'||evt.card!=event.card) return false; if(!event.player.countGainableCards(player,'he')) return false; return player.getHistory('lose',function(evt2){ if(evt2.getParent()!=evt) return false; for(var i in evt2.gaintag_map){ if(evt2.gaintag_map[i].contains('liangfan')) return true; } return false; }).length>0; }, marktext:'反', content:function(){ player.gainPlayerCard(trigger.player,true,'he'); }, }, gzwenji:{ audio:2, trigger:{player:'phaseUseBegin'}, direct:true, filter:function(event,player){ return game.hasPlayer(function(current){ return current!=player&¤t.countCards('he'); }); }, preHidden:true, content:function(){ 'step 0' player.chooseTarget(get.prompt2('gzwenji'),function(card,player,target){ return target!=player&&target.countCards('he'); }).set('ai',function(target){ var att=get.attitude(_status.event.player,target); if(target.identity=='unknown'&&att<=0) return 20; if(att>0) return Math.sqrt(att)/10; return 5-att; }); 'step 1' if(result.bool){ var target=result.targets[0]; event.target=target; player.logSkill('gzwenji',target); target.chooseCard('he',true,'问计:将一张牌交给'+get.translation(player)); } else{ event.finish(); } 'step 2' if(result.bool){ event.card=result.cards[0]; player.gain(result.cards,target,'give').gaintag.add('gzwenji'); } 'step 3' if(target.identity=='unknown'||target.isFriendOf(player)){ player.addTempSkill('gzwenji_respond'); event.finish(); } else if(target.isIn()&&player.countCards('he',function(card){ return !card.hasGaintag('gzwenji'); })){ player.chooseCard('he','交给'+get.translation(target)+'一张其他牌,或令其摸一张牌',function(card){ return !card.hasGaintag('gzwenji'); }).set('ai',function(card){ return 5-get.value(card); }); } else event.finish(); 'step 4' if(result.bool){ target.gain(result.cards,player,'give'); player.removeGaintag('gzwenji'); } else{ target.draw(); } }, subSkill:{ respond:{ onremove:function(player){ player.removeGaintag('gzwenji'); }, mod:{ targetInRange:function(card,player,target){ if(!card.cards) return; for(var i of card.cards){ if(i.hasGaintag('gzwenji')) return true; } }, cardUsable:function(card,player,target){ if(!card.cards) return; for(var i of card.cards){ if(i.hasGaintag('gzwenji')) return Infinity; } }, }, trigger:{player:'useCard'}, forced:true, charlotte:true, audio:'gzwenji', filter:function(event,player){ return player.getHistory('lose',function(evt){ if(evt.getParent()!=event) return false; for(var i in evt.gaintag_map){ if(evt.gaintag_map[i].contains('gzwenji')) return true; } return false; }).length>0; }, content:function(){ trigger.directHit.addArray(game.filterPlayer(function(current){ return current!=player; })); if(trigger.addCount!==false){ trigger.addCount=false; var stat=player.getStat(); if(stat&&stat.card&&stat.card[trigger.card.name]) stat.card[trigger.card.name]--; } }, ai:{ directHit_ai:true, skillTagFilter:function(player,tag,arg){ return arg.card&&arg.card.cards&&arg.card.cards.filter((card)=>card.hasGaintag('gzwenji')).length>0; }, }, } } }, gztunjiang:{ audio:2, trigger:{player:'phaseJieshuBegin'}, frequent:true, preHidden:true, filter:function(event,player){ if(!player.getHistory('useCard',function(evt){ return evt.isPhaseUsing(); }).length) return false; return player.getHistory('useCard',function(evt){ if(evt.targets&&evt.targets.length&&evt.isPhaseUsing()){ var targets=evt.targets.slice(0); while(targets.contains(player)) targets.remove(player); return targets.length>0; } return false; }).length==0; }, content:function(){ player.draw(game.countGroup()); }, }, gzbushi:{ audio:2, trigger:{player:'damageEnd'}, frequent:true, preHidden:true, content:function(){ 'step 0' event.count=trigger.num; 'step 1' event.count--; player.draw(); 'step 2' if(event.count>0){ player.chooseBool(get.prompt2('gzbushi')).set('frequentSkill','gzbushi'); } else event.finish(); 'step 3' if(result.bool) event.goto(1); }, group:'gzbushi_draw', subSkill:{ draw:{ trigger:{source:'damageSource'}, direct:true, noHidden:true, filter:function(event,player){ return event.player.isEnemyOf(player)&&event.player.isIn(); }, content:function(){ 'step 0' trigger.player.chooseBool('是否对'+get.translation(player)+'发动【布施】?','你摸一张牌,然后其摸一张牌'); 'step 1' if(result.bool){ player.logSkill('gzbushi',trigger.player); game.asyncDraw([trigger.player,player]); } else event.finish(); 'step 2' game.delayx(); }, }, }, }, gzbushi_old:{ audio:2, trigger:{ player:'damageEnd', source:'damageSource', }, forced:true, filter:function(event,player,name){ if(name=='damageSource'&&player==event.player) return false; return game.hasPlayer(function(current){ return current.isFriendOf(event.player); }); }, check:function(event,player){ return player.isFriendOf(event.player); }, content:function(){ 'step 0' event.count=trigger.num; if(event.triggername=='damageSource') event.count=1; 'step 1' event.count--; var target=trigger.player; var list=game.filterPlayer(function(current){ return current.isFriendOf(target); }); if(list.length){ if(list.length==1) event._result={bool:true,targets:list}; else player.chooseTarget('布施:令一名与'+(player==target?'你':get.translation(target))+'势力相同的角色摸一张牌',true,function(card,player,target){ return target.isFriendOf(_status.event.target) }).set('target',target); } else event.finish(); 'step 2' if(result.bool){ var target=result.targets[0]; player.line(target,'green'); target.draw(); if(event.count) event.goto(1); } }, }, gzmidao:{ audio:2, trigger:{global:'useCardToPlayered'}, direct:true, //noHidden:true, filter:function(event,player){ var target=event.player; return event.isFirstTarget&&target.isFriendOf(player)&& target.isPhaseUsing()&&(target==player||player.hasSkill('gzmidao'))&& (['basic','trick'].contains(get.type(event.card))&&get.tag(event.card,'damage')>0)&& event.cards&&event.cards.length&&!target.hasSkill('gzmidao2'); }, preHidden:true, content:function(){ 'step 0' var next=trigger.player.chooseBool('是否对'+get.translation(player)+'发动【米道】?','令该角色修改'+get.translation(trigger.card)+'的花色和伤害属性'); if(player==next.player) next.setHiddenSkill(event.name); 'step 1' if(result.bool){ player.logSkill('gzmidao'); trigger.player.addTempSkill('gzmidao2'); if(player!=trigger.player){ trigger.player.line(player,'green'); //player.gain(result.cards,trigger.player,'giveAuto'); } } else event.finish(); 'step 2' if(player.isUnderControl()){ game.swapPlayerAuto(player); } var switchToAuto=function(){ _status.imchoosing=false; var listn=['普通'].concat(lib.inpile_nature); event._result={ bool:true, suit:lib.suit.randomGet(), nature:listn.randomGet(), }; if(event.dialog) event.dialog.close(); if(event.control) event.control.close(); }; var chooseButton=function(player,card){ var event=_status.event; player=player||event.player; if(!event._result) event._result={}; var dialog=ui.create.dialog('米道:请修改'+card+'的花色和属性','forcebutton','hidden'); event.dialog=dialog; dialog.addText('花色'); var table=document.createElement('div'); table.classList.add('add-setting'); table.style.margin='0'; table.style.width='100%'; table.style.position='relative'; var listi=['spade','heart','club','diamond']; for(var i=0;i'; td.addEventListener(lib.config.touchscreen?'touchend':'click',function(){ if(_status.dragged) return; if(_status.justdragged) return; _status.tempNoButton=true; setTimeout(function(){ _status.tempNoButton=false; },500); var link=this.link; var current=this.parentNode.querySelector('.bluebg'); if(current){ current.classList.remove('bluebg'); } this.classList.add('bluebg'); event._result.suit=link; }); } dialog.content.appendChild(table); dialog.addText('属性'); var table2=document.createElement('div'); table2.classList.add('add-setting'); table2.style.margin='0'; table2.style.width='100%'; table2.style.position='relative'; var listn=['普通'].concat(lib.inpile_nature); for(var i=0;i'; td.addEventListener(lib.config.touchscreen?'touchend':'click',function(){ if(_status.dragged) return; if(_status.justdragged) return; _status.tempNoButton=true; setTimeout(function(){ _status.tempNoButton=false; },500); var link=this.link; var current=this.parentNode.querySelector('.bluebg'); if(current){ current.classList.remove('bluebg'); } this.classList.add('bluebg'); event._result.nature=link; }); } dialog.content.appendChild(table2); dialog.add('  '); event.dialog.open(); event.switchToAuto=function(){ event._result={ bool:true, nature:listn.randomGet(), suit:listi.randomGet(), }; event.dialog.close(); event.control.close(); game.resume(); _status.imchoosing=false; }; event.control=ui.create.control('ok','cancel2',function(link){ var result=event._result; if(link=='cancel2') result.bool=false; else{ if(!result.nature||!result.suit) return; result.bool=true; } event.dialog.close(); event.control.close(); game.resume(); _status.imchoosing=false; }); for(var i=0;i0; }, content:function(){ 'step 0' trigger.player.chooseBool('是否对'+get.translation(player)+'发动【礼下】?','弃置其装备区内的一张牌,然后选择一项:①弃置两张牌。②失去1点体力。③令其摸两张牌。').set('ai',function(){ var player=_status.event.player; var target=_status.event.getParent().player; if(get.attitude(player,target)>0) return target.countCards('e',function(card){ return get.value(card,target)<3; })>0; if(target.countCards('e',function(card){ return get.value(card,target)>=7; })) return true; var dist=get.distance(player,target,'attack'); if(dist>1&&dist-target.countCards('e')<=1) return true; return false; }); 'step 1' if(result.bool){ var target=trigger.player; event.target=target; player.logSkill('gzlixia'); target.line(player,'green'); target.discardPlayerCard(player,'e',true); } else event.finish(); 'step 2' var list=['失去一点体力','令'+get.translation(player)+'摸两张牌']; event.addIndex=0; if(target.countCards('h',function(card){ return lib.filter.cardDiscardable(card,target,'gzlixia'); })>1) list.unshift('弃置两张牌'); else event.addIndex++; target.chooseControl().set('choiceList',list).set('ai',function(){ var num=2; var player=_status.event.player; var target=_status.event.getParent().player; if(get.attitude(player,target)>=0) num=2; else if(player.countCards('he',function(card){ return lib.filter.cardDiscardable(card,player,'gzlixia')&&get.value(card,player)<5; })>1) num=0; else if(player.hp+player.countCards('h','tao')>3&&!player.hasJudge('lebu')) num=1; return num-_status.event.getParent().addIndex; }); 'step 3' switch(result.index+event.addIndex){ case 0: target.chooseToDiscard(2,'h',true); break; case 1: target.loseHp(); break; case 2: player.draw(2); break; } }, }, yigui:{ audio:2, hiddenCard:function(player,name){ var storage=player.storage.yigui; if(name=='shan'||name=='wuxie'||!storage||!storage.character.length||storage.used.contains(name)||!lib.inpile.contains(name)) return false; return true; }, init:function(player,skill){ if(!player.storage.skill) player.storage[skill]={ character:[], used:[], } }, enable:"chooseToUse", filter:function(event,player){ if(event.type=='wuxie'||event.type=='respondShan') return false; var storage=player.storage.yigui; if(!storage||!storage.character.length) return false; if(event.type=='dying'){ if((!event.filterCard({name:'tao'},player,event)||storage.used.contains('tao'))&& (!event.filterCard({name:'jiu'},player,event)||storage.used.contains('jiu'))) return false; var target=event.dying; if(target.identity=='unknown'||target.identity=='ye') return true; for(var i=0;i1) return (1.7+Math.random())*Math.max(num,1); } } return 1+Math.random(); }, filter:function(button,player){ var evt=_status.event.getParent('chooseToUse'); if(!ui.selected.buttons.length){ if(typeof button.link!='string') return false; if(evt.type=='dying'){ if(evt.dying.identity=='unknown'||evt.dying.identity=='ye') return true; var double=get.is.double(button.link,true); return evt.dying.identity==lib.character[button.link][1]||lib.character[button.link][1]=='ye'||(double&&double.contains(evt.dying.identity)); } return true; } else{ if(typeof ui.selected.buttons[0].link!='string') return false; if(typeof button.link!='object') return false; var name=button.link[2]; if(player.storage.yigui.used.contains(name)) return false; var card={name:name}; if(button.link[3]) card.nature=button.link[3]; var info=get.info(card); var group=lib.character[ui.selected.buttons[0].link][1]; var double=get.is.double(ui.selected.buttons[0].link,true); if(evt.type=='dying'){ return evt.filterCard(card,player,evt); } if(!lib.filter.filterCard(card,player,evt)) return false; else if(evt.filterCard&&!evt.filterCard(card,player,evt)) return false; if(info.changeTarget){ var list=game.filterPlayer(function(current){ return player.canUse(card,current); }); for(var i=0;i0; }); }, direct:true, content:function(){ 'step 0' player.chooseTarget(get.prompt2('xindiaodu'),function(card,player,current){ return current.isFriendOf(player)&¤t.countGainableCards(player,'e')>0; }).setHiddenSkill(event.name).ai=function(target){ var num=1; if(target.hasSkill('gzxiaoji')) num+=2.5; if(target.isDamaged()&&target.getEquip('baiyin')) num+=2.5; if(target.hasSkill('xuanlve')) num+=2; return num; }; 'step 1' if(result.bool){ event.target1=result.targets[0]; player.logSkill('xindiaodu',event.target1); player.line(event.target1,'xindiaodu'); player.gainPlayerCard(event.target1,'e',true); } else event.finish(); 'step 2' if(result.bool&&player.getCards('h').contains(result.cards[0])){ event.card=result.cards[0]; player.chooseTarget('是否将'+get.translation(event.card)+'交给一名其他角色?',function(card,player,current){ return current!=player&¤t!=_status.event.target1&¤t.isFriendOf(player); }).set('target1',event.target1); } else event.finish(); 'step 3' if(result.bool){ var target=result.targets[0]; player.line(target,'green'); target.gain(card,player,'give'); } }, }, gzbuyi:{ trigger:{global:'dyingAfter'}, usable:1, filter:function(event,player){ if(!(event.player&&event.player.isAlive()&&event.source&&event.source.isAlive())) return false; return event.player.isFriendOf(player)&&event.reason&&event.reason.name=='damage'; }, check:function(event,player){return get.attitude(player,event.player)>0}, logTarget:'source', preHidden:true, content:function(){ 'step 0' player.chooseJunlingFor(trigger.source); 'step 1' event.junling=result.junling; event.targets=result.targets; var choiceList=[]; choiceList.push('执行该军令'); choiceList.push('令'+get.translation(trigger.player)+(trigger.player==trigger.source?'(你)':'')+'回复一点体力'); trigger.source.chooseJunlingControl(player,result.junling,result.targets).set('prompt','补益').set('choiceList',choiceList).set('ai',function(){ if(get.recoverEffect(trigger.player,player,_status.event.player)>0) return 1; return (get.attitude(trigger.source,trigger.player)<0&&get.junlingEffect(player,result.junling,trigger.source,result.targets,trigger.source)>=-2)?1:0; return 0; }); 'step 2' if(result.index==0) trigger.source.carryOutJunling(player,event.junling,targets); else trigger.player.recover(player); }, audio:['buyi',2], }, keshou:{ audio:2, trigger:{player:'damageBegin3'}, filter:function(event,player){ return event.num>0; }, direct:true, preHidden:true, content:function(){ 'step 0' var check=(player.countCards('h',{color:'red'})>1||player.countCards('h',{color:'black'})>1); player.chooseCard(get.prompt('keshou'),'弃置两张颜色相同的牌,令即将受到的伤害-1','he',2,function(card){ if(ui.selected.cards.length) return get.color(card)==get.color(ui.selected.cards[0]); return true; }).set('complexCard',true).set('ai',function(card){ if(!_status.event.check) return 0; var player=_status.event.player; if(player.hp==1){ if(!player.countCards('h',function(card){return get.tag(card,'save')})&&!player.hasSkillTag('save',true)) return 10-get.value(card); return 7-get.value(card); } return 6-get.value(card); }).set('check',check).setHiddenSkill(event.name); 'step 1' var logged=false; if(result.cards){ logged=true; player.logSkill('keshou'); player.discard(result.cards); trigger.num--; } if(!player.isUnseen()&&!game.hasPlayer(function(current){ return current!=player&¤t.isFriendOf(player); })){ if(!logged) player.logSkill('keshou'); player.judge(function(card){ if(get.color(card)=='red') return 1; return 0; }); } else event.finish(); 'step 2' if(result.judge>0) player.draw(); } }, zhuwei:{ audio:2, trigger:{player:'judgeEnd'}, filter:function(event){ if(get.owner(event.result.card)) return false; if(event.nogain&&event.nogain(event.result.card)) return false; return true; //return event.result.card.name=='sha'||event.result.card.name=='juedou'; }, frequent:true, preHidden:true, content:function(){ 'step 0' player.gain(trigger.result.card,'gain2'); player.chooseBool('是否令'+get.translation(_status.currentPhase)+'本回合的手牌上限和使用【杀】的次数上限+1?').ai=function(){ return get.attitude(player,_status.currentPhase)>0; }; 'step 1' if(result.bool){ var target=_status.currentPhase; if(!target.hasSkill('zhuwei_eff')){ target.addTempSkill('zhuwei_eff'); target.storage.zhuwei_eff=1; } else target.storage.zhuwei_eff++; target.updateMarks(); } }, subSkill:{ eff:{ sub:true, mod:{ cardUsable:function(card,player,num){ if(card.name=='sha') return num+player.storage.zhuwei_eff; }, maxHandcard:function(player,num){return num+player.storage.zhuwei_eff} }, mark:true, charlotte:true, intro:{ content:function(storage){if(storage) return '使用【杀】的次数上限+'+storage+',手牌上限+'+storage} } } } }, gzweidi:{ init:function(player){player.storage.gzweidi=[]}, enable:'phaseUse', usable:1, filter:function(event,player){ return player.storage.gzweidi.length>0 }, filterTarget:function(card,player,target){return target!=player&&player.storage.gzweidi.contains(target)}, content:function(){ 'step 0' player.chooseJunlingFor(target); 'step 1' event.junling=result.junling; event.targets=result.targets; var choiceList=['执行该军令']; if(target!=player) choiceList.push('令'+get.translation(player)+'获得你所有手牌,然后交给你等量的牌'); else choiceList.push('不执行该军令'); target.chooseJunlingControl(player,result.junling,result.targets).set('prompt','伪帝').set('choiceList',choiceList).set('ai',function(){ if(get.attitude(target,player)>=0) return get.junlingEffect(player,result.junling,target,result.targets,target)>=0?0:1; return get.junlingEffect(player,result.junling,target,result.targets,target)>=-1?0:1; }); 'step 2' if(result.index==0) target.carryOutJunling(player,event.junling,targets); else if(target!=player&&target.countCards('h')) { event.num=target.countCards('h'); player.gain(target.getCards('h'),target,'giveAuto'); player.chooseCard('交给'+get.translation(target)+get.cnNumber(event.num)+'张牌','he',event.num,true).set('ai',function(card){ return -get.value(card); }); } else event.finish(); 'step 3' if(result.cards){ target.gain(result.cards,player,'giveAuto'); } }, group:['gzweidi_ft','gzweidi_ftc'], ai:{ order:3, result:{ player:1, } }, subSkill:{ ft:{ sub:true, trigger:{global:'gainBefore'}, silent:true, filter:function(event,player){ if(player==event.player||player.storage.gzweidi.contains(event.player)||_status.currentPhase!=player) return false; if(event.cards.length){ if(event.getParent().name=='draw') return true; for(var i=0;i0}, content:function(){ 'step 0' var players=game.filterPlayer(function(current){ return current.isFriendOf(trigger.source)&¤t.hp>=player.hp&&!game.hasPlayer(function(current2){ return current2.hp>current.hp&¤t2.isFriendOf(trigger.source); }) }); var check=true; if(!players.length) check=false; else{ if(get.attitude(player,trigger.source)>=0) check=false; } player.chooseCard(get.prompt('gzfudi',trigger.source),'交给其一张手牌,然后对其势力中体力值最大且不小于你的一名角色造成1点伤害').set('aicheck',check).set('ai',function(card){ if(!_status.event.aicheck) return 0; return 9-get.value(card); }).setHiddenSkill(event.name); 'step 1' if(result.bool){ player.logSkill('gzfudi',trigger.source); trigger.source.gain(result.cards,player,'giveAuto'); } else event.finish(); 'step 2' var list=game.filterPlayer(function(current){ return current.hp>=player.hp&¤t.isFriendOf(trigger.source)&&!game.hasPlayer(function(current2){ return current2.hp>current.hp&¤t2.isFriendOf(trigger.source); }); }); if(list.length){ if(list.length==1) event._result={bool:true,targets:list}; else player.chooseTarget(true,'对'+get.translation(trigger.source)+'势力中体力值最大的一名角色造成1点伤害',function(card,player,target){ return _status.event.list.contains(target); }).set('list',list).set('ai',function(target){return get.damageEffect(target,player,player)}); } else event.finish(); 'step 3' if(result.bool&&result.targets.length){ player.line(result.targets[0]); result.targets[0].damage(); } }, ai:{ maixie:true, maixie_defend:true, effect:{ target:function(card,player,target){ if(get.tag(card,'damage')&&target.hp>1){ if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; if(!target.countCards('h')) return [1,-1]; if(game.countPlayer(function(current){return current.isFriendOf(player)&¤t.hp>=target.hp-1})) return [1,0,0,-2]; } } } } }, congjian:{ trigger:{ player:'damageBegin3', source:'damageBegin1', }, forced:true, preHidden:true, audio:'drlt_congjian', filter:function(event,player,name){ if(event.num<=0) return false; if(name=='damageBegin1'&&_status.currentPhase!=player) return true; if(name=='damageBegin3'&&_status.currentPhase==player) return true; return false; }, check:function(event,player){ return _status.currentPhase!=player; }, content:function(){trigger.num++}, }, jianan:{ audio:2, unique:true, forceunique:true, group:'wuziliangjiangdao', derivation:'wuziliangjiangdao', global:'g_jianan', }, g_jianan:{ trigger:{ player:['phaseZhunbeiBegin','phaseBefore','dieBegin'], }, audio:'jianan', forceaudio:true, filter:function(event,player,name){ if(name!='phaseZhunbeiBegin') return get.is.jun(player)&&player.identity=='wei'; return this.filter2.apply(this,arguments); }, filter2:function(event,player){ if(!get.zhu(player,'jianan')) return false; if(!player.countCards('he')) return false; return !player.isUnseen(); }, direct:true, content:function(){ 'step 0' if(event.triggername!='phaseZhunbeiBegin'){ event.trigger('jiananUpdate'); event.finish(); return; } var skills=['new_retuxi','qiaobian','gzxiaoguo','gzjieyue','new_duanliang']; game.countPlayer(function(current){ if(current==player) return; if(current.hasSkill('new_retuxi')) skills.remove('new_retuxi'); if(current.hasSkill('qiaobian')) skills.remove('qiaobian'); if(current.hasSkill('gzxiaoguo')) skills.remove('gzxiaoguo'); if(current.hasSkill('gzjieyue')) skills.remove('gzjieyue'); if(current.hasSkill('new_duanliang')) skills.remove('new_duanliang'); }); if(!skills.length) event.finish(); else{ event.skills=skills; var next=player.chooseToDiscard('he'); var str=''; for(var i=0;i1) rank=4; if(skills.contains('gzjieyue')&&player.countCards('h',function(card){ return get.value(card)<7; })>1) rank=5; if(skills.contains('qiaobian')&&player.countCards('h')>4) rank=6; if((get.guozhanRank(player.name1,player)3) return 'qiaobian'; if(skills.contains('gzjieyue')&&player.countCards('h',function(card){ return get.value(card)<7; })) return 'gzjieyue'; if(skills.contains('new_retuxi')) return 'new_retuxi'; return skills.randomGet(); }).set("prompt","选择获得其中的一个技能直到君主的回合开始"); 'step 4' var link=result.control; player.addTempSkill(link,"jiananUpdate"); player.addTempSkill("jianan_eff","jiananUpdate"); game.log(player,"获得了技能","#g【"+get.translation(result.control)+"】"); }, }, jianan_eff:{ ai:{nomingzhi:true} }, huibian:{ enable:'phaseUse', audio:2, usable:1, filter:function(event,player){ return game.countPlayer(function(current){ return current.identity=='wei'; })>1&&game.hasPlayer(function(current){ return current.isDamaged()&¤t.identity=='wei'; }); }, filterTarget:function(card,player,target){ if(ui.selected.targets.length) return target.isDamaged()&&target.identity=='wei'; return target.identity=='wei'; }, selectTarget:2, multitarget:true, targetprompt:['受到伤害
然后摸牌','回复体力'], content:function(){ 'step 0' targets[0].damage(player); 'step 1' if(targets[0].isAlive()) targets[0].draw(2); targets[1].recover(); }, ai:{ threaten:1.2, order:9, result:{ target:function(player,target){ if(ui.selected.targets.length) return 1; if(get.damageEffect(target,player,player)>0) return 2; if(target.hp>2) return 1; if(target.hp==1) return -1; return 0.1; } }, } }, gzzongyu:{ audio:2, unique:true, forceunique:true, group:['gzzongyu_others','gzzongyu_player'], ai:{ threaten:1.2, }, subSkill:{ others:{ trigger:{global:'equipAfter'}, direct:true, filter:function(event,player){ if(event.player==player||!player.countCards('e',{subtype:['equip3','equip4']})) return false; return event.card.name=='liulongcanjia'; }, check:function(event,player){ if(get.attitude(player,target)<=0) return player.countCards('e',{subtype:['equip4','equip4']})<2; return true; }, content:function(){ 'step 0' player.chooseBool('是否发动【总御】,与'+get.translation(trigger.player)+'交换装备区内坐骑牌?'); 'step 1' if(result.bool){ player.logSkill('gzzongyu',trigger.player); event.cards=[player.getCards('e',{subtype:['equip3','equip4']}),trigger.player.getCards('e',{name:'liulongcanjia'})]; player.lose(event.cards[0],ui.special); trigger.player.lose(event.cards[1],ui.special); if(event.cards[0].length) player.$give(event.cards[0],trigger.player); if(event.cards[1].length) trigger.player.$give(event.cards[1],player); } else event.finish(); 'step 2' for(var i=0;i0.7; return true; } }, preHidden:true, content:function(){ 'step 0' var choices=[]; if(game.hasPlayer(function(current){return current.isUnseen()})) choices.push('选择一名未确定势力的角色'); if(game.hasPlayer(function(current){return current!=player&&!current.isUnseen()})&&player.countCards('h',{type:'basic'})) choices.push('将一张基本牌交给一名已确定势力的角色'); if(choices.length==1){ event._result={index:choices[0]=='选择一名未确定势力的角色'?0:1}; } else player.chooseControl().set('ai',function(){ if(choices.length>1){ var player=_status.event.player; if(!game.hasPlayer(function(current){ return !current.isUnseen()&¤t.getEquip('yuxi')||current.hasSkill('gzyongsi')&&!game.hasPlayer(function(current){ return current.getEquip('yuxi'); }); })&&game.hasPlayer(function(current){return current!=player&¤t.isUnseen()})){ var identity; for(var i=0;i=get.population(identity)) return 0; return 1; } return 0; }).set('prompt','征辟:请选择一项').set('choiceList',choices); 'step 1' if(result.index==0) player.chooseTarget('请选择一名未确定势力的角色',function(card,player,target){ return target!=player&&target.identity=='unknown' },true); else player.chooseCardTarget({ prompt:'请将一张基本牌交给一名已确定势力的其他角色', position:'h', filterCard:function(card){return get.type(card)=='basic'}, filterTarget:function(card,player,target){ return target!=player&&target.identity!='unknown'; }, ai1:function(card){return 5-get.value(card)}, ai2:function(target){ var player=_status.event.player; var att=get.attitude(player,target); if(att>0) return 0; return -(att-1)/target.countCards('h'); } }).set('forced',true); 'step 2' event.target=result.targets[0]; player.line(result.targets,'green'); if(result.cards.length){ event.cards=result.cards; result.targets[0].gain(result.cards,player,'give'); } else{ player.storage.gzzhengbi_eff1=result.targets[0]; player.addTempSkill('gzzhengbi_eff1','phaseUseAfter'); event.finish(); } 'step 3' var choices=[]; if(target.countCards('he',{type:['trick','delay','equip']})) choices.push('一张非基本牌'); if(target.countCards('h',{type:'basic'})>1) choices.push('两张基本牌'); if(choices.length) target.chooseControl(choices).set('ai',function(event,player){ if(choices.length>1){ if(player.countCards('he',{type:['trick','delay','equip']},function(card){return get.value(card)<7})) return 0; return 1; } return 0; }).set('prompt','征辟:交给'+get.translation(player)+'…'); else{ if(target.countCards('h')){ var cards=target.getCards('h'); player.gain(cards,target,'giveAuto'); event.finish(); } else event.finish(); } 'step 4' var check=(result.control=='一张非基本牌'); target.chooseCard('he',(check?1:2),{type:(check?['trick','delay','equip']:'basic')},true); 'step 5' if(result.cards){ player.gain(result.cards,target,'giveAuto'); } }, subSkill:{ eff1:{ audio:'zhengbi', sub:true, onremove:true, trigger:{player:'phaseUseEnd'}, forced:true, charlotte:true, filter:function(event,player){ var target=player.storage.gzzhengbi_eff1; return target&&!target.isUnseen()&&target.countGainableCards(player,'he')>0; }, logTarget:function(event,player){ return player.storage.gzzhengbi_eff1; }, content:function(){ var num=0; var target=player.storage.gzzhengbi_eff1; if(target.countGainableCards(player,'h')) num++; if(target.countGainableCards(player,'e')) num++; if(num){ player.gainPlayerCard(target,num,'he',true).set('filterButton',function(button){ for(var i=0;i0; }, filterTarget:function(card,player,target){ return target==player; }, selectTarget:-1, discard:false, lose:false, content:function(){ 'step 0' player.awakenSkill('gzfengying'); player.storage.gzfengying=true; player.useCard({name:'xietianzi'},cards,target); 'step 1' var list=game.filterPlayer(function(current){ return current.isFriendOf(player)&¤t.countCards('h')=4) return 0; for(var i=0;i0) return 11-get.value(card); return 7-get.value(card); }, ai2:function(card,player,target){ var att=get.attitude(player,target); if(att<0) return -att; return 1; } }).setHiddenSkill('gzjieyue'); 'step 1' if(result.bool){ event.target=result.targets[0]; player.logSkill('gzjieyue',result.targets); result.targets[0].gain(result.cards[0],player,'giveAuto'); player.chooseJunlingFor(result.targets[0]); } else event.finish(); 'step 2' event.junling=result.junling; event.targets=result.targets; var choiceList=[]; choiceList.push('执行该军令,然后'+get.translation(player)+'摸一张牌'); choiceList.push('令'+get.translation(player)+'摸牌阶段额外摸三张牌'); target.chooseJunlingControl(player,result.junling,result.targets).set('prompt','节钺').set('choiceList',choiceList).set('ai',function(){ if(get.attitude(target,player)>0) return get.junlingEffect(player,result.junling,target,result.targets,target)>1?0:1; return get.junlingEffect(player,result.junling,target,result.targets,target)>=-1?0:1; }); 'step 3' if(result.index==0){ target.carryOutJunling(player,event.junling,targets); player.draw(); } else player.addTempSkill('gzjieyue_eff'); }, ai:{threaten:2}, subSkill:{ eff:{ sub:true, trigger:{player:'phaseDrawBegin2'}, filter:function(event,player){ return !event.numFixed; }, forced:true, popup:false, content:function(){ trigger.num+=3; } } }, audio:['jieyue',2], }, jianglue:{ limited:true, audio:2, enable:'phaseUse', prepare:function(cards,player){ var targets=game.filterPlayer(function(current){ return current.isFriendOf(player)||current.isUnseen(); }); player.line(targets,'fire'); }, content:function(){ 'step 0' player.awakenSkill('jianglue'); player.addTempSkill('jianglue_count'); player.chooseJunlingFor(player).set('prompt','选择一张军令牌,令与你势力相同的其他角色选择是否执行'); 'step 1' event.junling=result.junling; event.targets=result.targets; event.players=game.filterPlayer(function(current){ if(current==player) return false; return current.isFriendOf(player)||(player.identity!='ye'&¤t.isUnseen()); }).sort(lib.sort.seat); event.num=0; event.filterName=function(name){ return lib.character[name][1]==player.identity&&!get.is.double(name); } 'step 2' if(num1) event.current.chooseControl(['主将','副将']).set('ai',function(){ if(player.name1=='gz_fazheng') return 0; if(player.name2=='gz_fazheng') return 1; return Math.random()>0.5?0:1; }).prompt='选择并展示一张武将牌,然后执行军令'; else event._result={index:list[0]=='主将'?0:1}; } } 'step 4' if(!event.list) event.list=[player]; if(event.carry){ if(event.showCharacter) event.current.showCharacter(result.index); event.current.carryOutJunling(player,event.junling,targets); event.list.push(event.current); } event.num++; if(event.num0) player.draw(player.storage.jianglue_count); }, marktext:'略', skillAnimation:'epic', animationColor:'soil', ai:{ order:4, result:{ player:function(player){ if(player.isUnseen()&&player.wontYe()){ if(get.population(player._group)>=game.players.length/4) return 1; return Math.random()>0.7?1:0; } else return 1; } } }, subSkill:{ count:{ sub:true, trigger:{global:'recoverAfter'}, silent:true, filter:function(event){return event.getParent('jianglue')}, content:function(){player.storage.jianglue_count++} } } }, gzxuanhuo:{ global:'gzxuanhuo_others', derivation:['fz_wusheng','fz_gzpaoxiao','fz_new_longdan','fz_new_tieji','fz_liegong','fz_xinkuanggu'], ai:{ threaten:function(player,target){ if(game.hasPlayer(function(current){ return current!=target&¤t.isFriendOf(target); })) return 1.5; return 0.5; }, }, subSkill:{ others:{ enable:'phaseUse', usable:1, filter:function(event,player){ return (!player.isUnseen())&&player.countCards('h')>0&&game.hasPlayer(function(current){ return current!=player&¤t.hasSkill('gzxuanhuo')&&player.isFriendOf(current); }); }, prompt:'弃置一张手牌,然后获得以下技能中的一个:〖武圣〗〖咆哮〗〖龙胆〗〖铁骑〗〖烈弓〗〖狂骨〗', position:'h', filterCard:true, check:function(card){ var player=_status.event.player; if(player.hasSkill('gzpaoxiao',true)||player.getEquip('zhuge')) return 0; if(player.countCards('h',function(cardx){ return cardx!=card&&cardx.name=='sha'&&player.hasUseTarget(cardx); })<(player.getCardUsable('sha')+1)) return 0; return 7-get.value(card); }, content:function(){ 'step 0' var list=['wusheng','gzpaoxiao','new_longdan','new_tieji','liegong','xinkuanggu']; player.chooseControl(list).set('ai',function(){ if(list.contains('gzpaoxiao')) return 'gzpaoxiao'; return list.randomGet(); }).set('prompt','选择并获得一项技能直到回合结束'); 'step 1' player.popup(result.control); player.addTempSkill('fz_'+result.control); game.log(player,'获得了技能','#g【'+get.translation(result.control)+'】'); game.delay(); }, forceaudio:true, audio:['xuanhuo',2], ai:{ order:8, result:{player:1}, }, }, //used:{}, }, audio:['xuanhuo',2], }, fz_gzpaoxiao:{ audio:true, inherit:'gzpaoxiao', }, fz_new_tieji:{ audio:true, inherit:'new_tieji', }, fz_wusheng:{ audio:true, inherit:'wusheng', }, fz_liegong:{ audio:true, inherit:'liegong', }, fz_xinkuanggu:{ audio:true, inherit:'xinkuanggu', }, fz_new_longdan:{ audio:true, group:["fz_new_longdan_sha","fz_new_longdan_shan","fz_new_longdan_draw","fz_new_longdan_shamiss","fz_new_longdan_shanafter"], subSkill:{ shanafter:{ sub:true, audio:"fz_new_longdan", trigger:{ player:"useCard", }, //priority:1, filter:function(event,player){ return event.skill=='fz_new_longdan_shan'&&event.getParent(2).name=='sha'; }, direct:true, content:function(){ "step 0" player.chooseTarget("是否发动【龙胆】令一名其他角色回复1点体力?",function(card,player,target){ return target!=_status.event.source&&target!=player&&target.isDamaged(); }).set('ai',function(target){ return get.attitude(_status.event.player,target); }).set('source',trigger.getParent(2).player); "step 1" if(result.bool&&result.targets&&result.targets.length){ player.logSkill('fz_new_longdan',result.targets[0]); result.targets[0].recover(); } }, }, shamiss:{ sub:true, audio:"fz_new_longdan", trigger:{ player:"shaMiss", }, direct:true, filter:function(event,player){ return event.skill=='fz_new_longdan_sha'; }, content:function(){ "step 0" player.chooseTarget("是否发动【龙胆】对一名其他角色造成1点伤害?",function(card,player,target){ return target!=_status.event.target&&target!=player; }).set('ai',function(target){ return -get.attitude(_status.event.player,target); }).set('target',trigger.target); "step 1" if(result.bool&&result.targets&&result.targets.length){ player.logSkill('fz_new_longdan',result.targets[0]); result.targets[0].damage(); } }, }, draw:{ trigger:{ player:["useCard","respond"], }, audio:"fz_new_longdan", forced:true, locked:false, filter:function(event,player){ if(!get.zhu(player,'shouyue')) return false; return event.skill=='fz_new_longdan_sha'||event.skill=='fz_new_longdan_shan'; }, content:function(){ player.draw(); //player.storage.fanghun2++; }, sub:true, }, sha:{ audio:"fz_new_longdan", enable:["chooseToUse","chooseToRespond"], filterCard:{ name:"shan", }, viewAs:{ name:"sha", }, viewAsFilter:function(player){ if(!player.countCards('hs','shan')) return false; }, prompt:"将一张闪当杀使用或打出", position:'hs', check:function(){return 1}, ai:{ effect:{ target:function(card,player,target,current){ if(get.tag(card,'respondSha')&¤t<0) return 0.6 }, }, respondSha:true, skillTagFilter:function(player){ if(!player.countCards('hs','shan')) return false; }, order:function(){ return get.order({name:'sha'})+0.1; }, }, sub:true, }, shan:{ audio:"fz_new_longdan", enable:['chooseToRespond','chooseToUse'], filterCard:{ name:"sha", }, viewAs:{ name:"shan", }, position:'hs', prompt:"将一张杀当闪使用或打出", check:function(){return 1}, viewAsFilter:function(player){ if(!player.countCards('hs','sha')) return false; }, ai:{ respondShan:true, skillTagFilter:function(player){ if(!player.countCards('hs','sha')) return false; }, effect:{ target:function(card,player,target,current){ if(get.tag(card,'respondShan')&¤t<0) return 0.6 }, }, }, sub:true, }, }, }, gzenyuan:{ locked:true, audio:['enyuan',2], group:['gzenyuan_gain','gzenyuan_damage'], preHidden:true, ai:{ maixie_defend:true, effect:{ target:function(card,player,target){ if(player.hasSkillTag('jueqing',false,target)) return [1,-1.5]; if(!target.hasFriend()) return; if(get.tag(card,'damage')) return [1,0,0,-0.7]; } } }, subSkill:{ gain:{ trigger:{target:'useCardToTargeted'}, forced:true, filter:function(event,player){ return event.card.name=='tao'&&event.player!=player; }, logTarget:'player', content:function(){trigger.player.draw()}, audio:'enyuan1', }, damage:{ trigger:{player:'damageEnd'}, forced:true, filter:function(event,player){ return event.source&&event.source!=player&&event.num>0; }, content:function(){ 'step 0' player.logSkill('enyuan_damage',trigger.source); trigger.source.chooseCard('交给'+get.translation(player)+'一张手牌,或失去一点体力','h').set('ai',function(card){ if(get.attitude(_status.event.player,_status.event.getParent().player)>0) return 11-get.value(card); return 7-get.value(card); }); 'step 1' if(result.bool){ player.gain(result.cards[0],trigger.source,'giveAuto'); } else trigger.source.loseHp(); }, audio:'enyuan2', }, } }, gzjushou:{ audio:"xinjushou", trigger:{ player:"phaseJieshuBegin", }, preHidden:true, content:function(){ 'step 0' event.num=game.countGroup(); player.draw(event.num); if(event.num>2) player.turnOver(); 'step 1' player.chooseCard('h',true,'弃置一张手牌,若以此法弃置的是装备牌,则你改为使用之').set('ai',function(card){ if(get.type(card)=='equip'){ return 5-get.value(card); } return -get.value(card); }).set('filterCard',lib.filter.cardDiscardable); 'step 2' if(result.bool&&result.cards.length){ if(get.type(result.cards[0])=='equip'&&player.hasUseTarget(result.cards[0])){ player.chooseUseTarget(result.cards[0],true,'nopopup'); } else{ player.discard(result.cards[0]); } } }, ai:{ effect:{ target:function(card,player,target){ if(card.name=='guiyoujie') return [0,1]; }, }, }, }, "new_duanliang":{ subSkill:{ off:{ sub:true, }, }, mod:{ targetInRange:function(card,player,target){ if(card.name=='bingliang'){ return true; } }, }, audio:"duanliang1", enable:"chooseToUse", filterCard:function(card){ if(get.type(card)!='basic'&&get.type(card)!='equip') return false; return get.color(card)=='black'; }, filter:function(event,player){ if(player.hasSkill('new_duanliang_off')) return false; return player.countCards('hes',{type:['basic','equip'],color:'black'}) }, position:"hes", viewAs:{ name:"bingliang", }, onuse:function(result,player){ if(get.distance(player,result.targets[0])>2) player.addTempSkill('new_duanliang_off'); }, prompt:"将一黑色的基本牌或装备牌当兵粮寸断使用", check:function(card){return 6-get.value(card)}, ai:{ order:9, basic:{ order:1, useful:1, value:4, }, result:{ target:function(player,target){ if(target.hasJudge('caomu')) return 0; return -1.5/Math.sqrt(target.countCards('h')+1); }, }, tag:{ skip:"phaseDraw", }, }, }, new_shushen:{ audio:"shushen", trigger:{ player:"recoverAfter", }, direct:true, preHidden:true, content:function(){ 'step 0' event.num=trigger.num||1; "step 1" player.chooseTarget(get.prompt2('new_shushen'),function(card,player,target){ return target!=player; }).set('ai',function(target){ return get.attitude(_status.event.player,target); }).setHiddenSkill('new_shushen'); "step 2" if(result.bool){ player.logSkill('new_shushen',result.targets); result.targets[0].draw(); if(event.num>1){ event.num--; event.goto(1); } } }, ai:{ threaten:0.8, expose:0.1, }, }, "new_luanji":{ audio:"luanji", enable:"phaseUse", viewAs:{ name:"wanjian", }, filterCard:function(card,player){ if(!player.storage.new_luanji) return true; return !player.storage.new_luanji.contains(get.suit(card)); }, selectCard:2, position:'hs', filter:function(event,player){ return player.countCards('hs',function(card){ return !player.storage.new_luanji||!player.storage.new_luanji.contains(get.suit(card)); })>1; }, check:function(card){ var player=_status.event.player; var targets=game.filterPlayer(function(current){ return player.canUse('wanjian',current); }); var num=0; for(var i=0;i=7){ if(num<2) return 0; } else if(targets.length>=5){ if(num<1.5) return 0; } } return 6-get.value(card); }, group:["new_luanji_count","new_luanji_reset","new_luanji_respond"], subSkill:{ reset:{ trigger:{ player:"phaseAfter", }, silent:true, filter:function(event,player){ return player.storage.new_luanji?true:false; }, content:function(){ delete player.storage.new_luanji; }, sub:true, forced:true, popup:false, }, count:{ trigger:{ player:"useCard", }, silent:true, filter:function(event){ return event.skill=='new_luanji'; }, content:function(){ if(!player.storage.new_luanji){ player.storage.new_luanji=[]; } for(var i=0;i=0) return 0; if(player.hasCard(function(card){ return get.tag(card,'damage')&&player.canUse(card,target,true,true); })){ if(target.maxHp>3) return -0.5; return -1; } return 0; }, }, }, }, new_kongcheng:{ group:["new_kongcheng_gain","new_kongcheng_got"], subSkill:{ gain:{ audio:"kongcheng", trigger:{ player:"gainBefore", }, filter:function(event,player){ return event.source&&event.source!=player&&player!=_status.currentPhase&&!event.bySelf&&player.countCards('h')==0; }, content:function(){ trigger.name='addToExpansion'; trigger.setContent('addToExpansion'); trigger.gaintag=['new_kongcheng']; trigger.untrigger(); trigger.trigger('addToExpansionBefore'); }, sub:true, forced:true, }, got:{ trigger:{ player:"phaseDrawBegin1", }, filter:function(event,player){ return player.getExpansions('new_kongcheng').length>0; }, content:function(){ player.gain(player.getExpansions('new_kongcheng'),'draw'); }, sub:true, forced:true, }, }, audio:"kongcheng", trigger:{ target:"useCardToTarget", }, forced:true, check:function(event,player){ return get.effect(event.target,event.card,event.player,player)<0; }, filter:function(event,player){ return player.countCards('h')==0&&(event.card.name=='sha'||event.card.name=='juedou'); }, content:function(){ trigger.getParent().targets.remove(player); }, ai:{ effect:{ target:function(card,player,target,current){ if(target.countCards('h')==0&&(card.name=='sha'||card.name=='juedou')) return 'zeroplayertarget'; }, }, }, intro:{ markcount:'expansion', mark:function(dialog,content,player){ var content=player.getExpansions('new_kongcheng'); if(content&&content.length){ if(player==game.me||player.isUnderControl()){ dialog.addAuto(content); } else{ return '共有'+get.cnNumber(content.length)+'张牌'; } } }, content:function(content,player){ var content=player.getExpansions('new_kongcheng'); if(content&&content.length){ if(player==game.me||player.isUnderControl()){ return get.translation(content); } return '共有'+get.cnNumber(content.length)+'张牌'; } }, }, onremove:function(player,skill){ var cards=player.getExpansions(skill); if(cards.length) player.loseToDiscardpile(cards); }, }, "new_keji":{ audio:"keji", forced:true, trigger:{ player:"phaseDiscardBegin", }, filter:function(event,player){ var list=[]; player.getHistory('useCard',function(evt){ if(evt.isPhaseUsing(player)){ var color=get.color(evt.card); if(color!='nocolor') list.add(color); } }); return list.length<=1; }, content:function(){ player.addTempSkill('keji_add','phaseAfter'); }, }, "keji_add":{ mod:{ maxHandcard:function(player,num){ return num+4; }, }, }, "new_mouduan":{ trigger:{ player:"phaseJieshuBegin", }, //priority:2, audio:"botu", filter:function(event,player){ var history=player.getHistory('useCard'); var suits=[]; var types=[]; for(var i=0;i=4||types.length>=3; }, check:function(event,player){ return player.canMoveCard(true); }, content:function(){ player.moveCard(); }, }, "new_longdan":{ group:["new_longdan_sha","new_longdan_shan","new_longdan_draw","new_longdan_shamiss","new_longdan_shanafter"], subSkill:{ shanafter:{ sub:true, audio:"longdan_sha", trigger:{ player:"useCard", }, //priority:1, filter:function(event,player){ return event.skill=='new_longdan_shan'&&event.getParent(2).name=='sha'; }, direct:true, content:function(){ "step 0" player.chooseTarget("是否发动【龙胆】令一名其他角色回复1点体力?",function(card,player,target){ return target!=_status.event.source&&target!=player&&target.isDamaged(); }).set('ai',function(target){ return get.attitude(_status.event.player,target); }).set('source',trigger.getParent(2).player); "step 1" if(result.bool&&result.targets&&result.targets.length){ player.logSkill('new_longdan',result.targets[0]); result.targets[0].recover(); } }, }, shamiss:{ sub:true, audio:"longdan_sha", trigger:{ player:"shaMiss", }, direct:true, filter:function(event,player){ return event.skill=='new_longdan_sha'; }, content:function(){ "step 0" player.chooseTarget("是否发动【龙胆】对一名其他角色造成1点伤害?",function(card,player,target){ return target!=_status.event.target&&target!=player; }).set('ai',function(target){ return -get.attitude(_status.event.player,target); }).set('target',trigger.target); "step 1" if(result.bool&&result.targets&&result.targets.length){ player.logSkill('new_longdan',result.targets[0]); result.targets[0].damage(); } }, }, draw:{ trigger:{ player:["useCard","respond"], }, audio:"longdan_sha", forced:true, locked:false, filter:function(event,player){ if(!get.zhu(player,'shouyue')) return false; return event.skill=='new_longdan_sha'||event.skill=='new_longdan_shan'; }, content:function(){ player.draw(); //player.storage.fanghun2++; }, sub:true, }, sha:{ audio:"longdan_sha", enable:["chooseToUse","chooseToRespond"], filterCard:{ name:"shan", }, viewAs:{ name:"sha", }, position:'hs', viewAsFilter:function(player){ if(!player.countCards('hs','shan')) return false; }, prompt:"将一张闪当杀使用或打出", check:function(){return 1}, ai:{ effect:{ target:function(card,player,target,current){ if(get.tag(card,'respondSha')&¤t<0) return 0.6 }, }, respondSha:true, skillTagFilter:function(player){ if(!player.countCards('hs','shan')) return false; }, order:function(){ return get.order({name:'sha'})+0.1; }, }, sub:true, }, shan:{ audio:"longdan_sha", enable:['chooseToRespond','chooseToUse'], filterCard:{ name:"sha", }, viewAs:{ name:"shan", }, position:'hs', prompt:"将一张杀当闪使用或打出", check:function(){return 1}, viewAsFilter:function(player){ if(!player.countCards('hs','sha')) return false; }, ai:{ respondShan:true, skillTagFilter:function(player){ if(!player.countCards('hs','sha')) return false; }, effect:{ target:function(card,player,target,current){ if(get.tag(card,'respondShan')&¤t<0) return 0.6 }, }, }, sub:true, }, }, }, gzpaoxiao:{ audio:"paoxiao", trigger:{ player:"useCard", }, filter:function(event,player){ if(_status.currentPhase!=player) return false; if(event.card.name!='sha') return false; var history=player.getHistory('useCard',function(evt){ return evt.card.name=='sha'; }); return history&&history.indexOf(event)==1; }, forced:true, preHidden:true, content:function(){ player.draw(); }, mod:{ cardUsable:function(card,player,num){ if(card.name=='sha') return Infinity; }, }, ai:{ unequip:true, skillTagFilter:function(player,tag,arg){ if(!get.zhu(player,'shouyue')) return false; if(arg&&arg.name=='sha') return true; return false; }, }, }, "new_kurou":{ audio:"rekurou", enable:"phaseUse", usable:1, filterCard:true, check:function(card){ return 8-get.value(card); }, position:"he", content:function(){ player.loseHp(); player.draw(3); player.addTempSkill('kurou_effect','phaseAfter'); }, ai:{ order:8, result:{ player:function(player){ if(player.hp<=2) return player.countCards('h')==0?1:0; if(player.countCards('h',{name:'sha',color:'red'})) return 1; return player.countCards('h')<=player.hp?1:0; }, }, }, }, "kurou_effect":{ mod:{ cardUsable:function(card,player,num){ if(card.name=='sha') return num+1; }, }, }, "new_chuli":{ audio:"chulao", enable:"phaseUse", usable:1, filterTarget:function(card,player,target){ if(player==target) return false; for(var i=0;i0; }, filter:function(event,player){ return player.countCards('he')>0; }, filterCard:true, position:"he", selectTarget:[1,3], check:function(card){ if(get.suit(card)=='spade') return 8-get.value(card); return 5-get.value(card); }, contentBefore:function(){ var evt=event.getParent(); evt.draw=[]; if(get.suit(cards[0])=='spade') evt.draw.push(player); }, content:function(){ "step 0" player.discardPlayerCard(target,'he',true); "step 1" if(result.bool){ if(get.suit(result.cards[0])=='spade') event.getParent().draw.push(target); } }, contentAfter:function(){ 'step 0' var list=event.getParent().draw; if(!list.length) event.finish(); else game.asyncDraw(list); 'step 1' game.delay(); }, ai:{ result:{ target:-1, }, tag:{ discard:1, lose:1, loseCard:1, }, threaten:1.2, order:3, }, }, "baka_hunshang":{ skillAnimation:true, animationColor:'wood', audio:"hunzi", preHidden:true, derivation:["baka_yingzi","baka_yinghun"], viceSkill:true, init:function(player){ if(player.checkViceSkill('baka_hunshang')&&!player.viceChanged){ player.removeMaxHp(); } }, trigger:{ player:"phaseZhunbeiBegin", }, filter:function(event,player){ return player.hp<=1; }, forced:true, //priority:3, content:function(){ player.addTempSkill('baka_yingzi','phaseAfter'); player.addTempSkill('baka_yinghun','phaseAfter'); }, ai:{ threaten:function(player,target){ if(target.hp==1) return 2; return 0.5; }, maixie:true, effect:{ target:function(card,player,target){ if(!target.hasFriend()) return; if(get.tag(card,'damage')==1&&target.hp==2&&!target.isTurnedOver()&& _status.currentPhase!=target&&get.distance(_status.currentPhase,target,'absolute')<=3) return [0.5,1]; }, }, }, }, "baka_yinghun":{ inherit:"gzyinghun", filter:function(event,player){ return player.isDamaged(); }, audio:'yinghun_sunce', trigger:{ player:"phaseZhunbeiBegin", }, direct:true, content:function(){ "step 0" player.chooseTarget(get.prompt2('gzyinghun'),function(card,player,target){ return player!=target; }).set('ai',function(target){ var player=_status.event.player; if(player.maxHp-player.hp==1&&target.countCards('he')==0){ return 0; } if(get.attitude(_status.event.player,target)>0){ return 10+get.attitude(_status.event.player,target); } if(player.maxHp-player.hp==1){ return -1; } return 1; }); "step 1" if(result.bool){ event.num=player.maxHp-player.hp; player.logSkill(event.name,result.targets); event.target=result.targets[0]; if(event.num==1){ event.directcontrol=true; } else{ var str1='摸'+get.cnNumber(event.num,true)+'弃一'; var str2='摸一弃'+get.cnNumber(event.num,true); player.chooseControl(str1,str2,function(event,player){ return _status.event.choice; }).set('choice',get.attitude(player,event.target)>0?str1:str2); event.str=str1; } } else{ event.finish(); } "step 2" if(event.directcontrol||result.control==event.str){ event.target.draw(event.num); event.target.chooseToDiscard(true,'he'); } else{ event.target.draw(); event.target.chooseToDiscard(event.num,true,'he'); } }, ai:{ threaten:function(player,target){ if(target.hp==target.maxHp) return 0.5; if(target.hp==1) return 2; if(target.hp==2) return 1.5; return 0.5; }, maixie:true, effect:{ target:function(card,player,target){ if(target.maxHp<=3) return; if(get.tag(card,'damage')){ if(target.hp==target.maxHp) return [0,1]; } if(get.tag(card,'recover')&&player.hp>=player.maxHp-1) return [0,0]; }, }, }, }, "baka_yingzi":{ mod:{ maxHandcardBase:function(player,num){ return player.maxHp; }, }, audio:'reyingzi_sunce', trigger:{ player:"phaseDrawBegin2", }, frequent:true, filter:function(event){return !event.numFixed}, content:function(){ trigger.num++; }, ai:{ threaten:1.3, }, }, gzyiji:{ audio:"yiji", trigger:{ player:"damageEnd", }, frequent:true, preHidden:true, filter:function(event){ return (event.num>0) }, content:function(){ "step 0" event.cards=game.cardsGotoOrdering(get.cards(2)).cards; "step 1" if(event.cards.length>1){ player.chooseCardButton('将“遗计”牌分配给任意角色',true,event.cards,[1,event.cards.length]).set('ai',function(button){ if(ui.selected.buttons.length==0) return 1; return 0; }); } else if(event.cards.length==1){ event._result={links:event.cards.slice(0),bool:true}; } else{ event.finish(); } "step 2" if(result.bool){ for(var i=0;i0){ return att/(1+target.countCards('h')); } else{ return att/100; } }).set('enemy',get.value(event.togive[0])<0); } "step 3" if(result.targets.length){ result.targets[0].gain(event.togive,'draw'); player.line(result.targets[0],'green'); game.log(result.targets[0],'获得了'+get.cnNumber(event.togive.length)+'张牌'); event.goto(1); } }, ai:{ maixie:true, "maixie_hp":true, effect:{ target:function(card,player,target){ if(get.tag(card,'damage')){ if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; if(!target.hasFriend()) return; var num=1; if(get.attitude(player,target)>0){ if(player.needsToDiscard()){ num=0.7; } else{ num=0.5; } } if(target.hp>=4) return [1,num*2]; if(target.hp==3) return [1,num*1.5]; if(target.hp==2) return [1,num*0.5]; } }, }, }, }, gzjieming:{ audio:"jieming", trigger:{ player:"damageEnd", }, direct:true, preHidden:true, content:function(){ "step 0" player.chooseTarget(get.prompt('gzjieming'),'令一名角色将手牌补至X张(X为其体力上限且至多为5)',function(card,player,target){ return target.countCards('h')2){ return Math.min(5,target.maxHp)-target.countCards('h'); } return att/3; }).setHiddenSkill('gzjieming'); "step 1" if(result.bool){ player.logSkill('gzjieming',result.targets); for(var i=0;i1){ if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; var max=0; var players=game.filterPlayer(); for(var i=0;i0){ max=Math.max(Math.min(5,players[i].hp)-players[i].countCards('h'),max); } } switch(max){ case 0:return 2; case 1:return 1.5; case 2:return [1,2]; default:return [0,max]; } } if((card.name=='tao'||card.name=='caoyao')&& target.hp>1&&target.countCards('h')<=target.hp) return [0,0]; }, }, }, }, gzfangzhu:{ audio:"fangzhu", trigger:{ player:"damageEnd", }, direct:true, preHidden:true, content:function(){ "step 0" player.chooseTarget(get.prompt2('gzfangzhu'),function(card,player,target){ return player!=target }).setHiddenSkill('gzfangzhu').ai=function(target){ if(target.hasSkillTag('noturn')) return 0; var player=_status.event.player; if(get.attitude(_status.event.player,target)==0) return 0; if(get.attitude(_status.event.player,target)>0){ if(target.classList.contains('turnedover')) return 1000-target.countCards('h'); if(player.getDamagedHp()<3) return -1; return 100-target.countCards('h'); } else{ if(target.classList.contains('turnedover')) return -1; if(player.getDamagedHp()>=3) return -1; return 1+target.countCards('h'); } } "step 1" if(result.bool){ player.logSkill('gzfangzhu',result.targets); event.target=result.targets[0]; event.target.chooseToDiscard('he').set('ai',function(card){ var player=_status.event.player; if(player.isTurnedOver()) return -1; return (player.hp*player.hp)-Math.max(1,get.value(card)); }).set('prompt','弃置一张牌并失去一点体力;或选择不弃置,将武将牌翻面并摸'+(player.getDamagedHp())+'张牌。'); } else event.finish(); "step 2" if(result.bool){ event.target.loseHp(); } else{ event.target.draw(player.getDamagedHp()); event.target.turnOver(); } }, ai:{ maixie:true, "maixie_hp":true, effect:{ target:function(card,player,target){ if(get.tag(card,'damage')){ if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; if(target.hp<=1) return; if(!target.hasFriend()) return; var hastarget=false; var turnfriend=false; var players=game.filterPlayer(); for(var i=0;i0&&players[i].isTurnedOver()){ hastarget=true; turnfriend=true; } } if(get.attitude(player,target)>0&&!hastarget) return; if(turnfriend||target.hp==target.maxHp) return [0.5,1]; if(target.hp>1) return [1,0.5]; } }, }, }, }, fengyin_main:{ init:function(player,skill){ player.addSkillBlocker(skill); }, onremove:function(player,skill){ player.removeSkillBlocker(skill); }, charlotte:true, skillBlocker:function(skill,player){ return lib.character[player.name1][3].contains(skill)&&!lib.skill[skill].charlotte&&!get.is.locked(skill,player); }, mark:true, marktext:'主', intro:{ content:function(storage,player,skill){ var list=player.getSkills(null,null,false).filter(function(i){ return lib.skill.fengyin_main.skillBlocker(i,player); }); if(list.length) return '失效技能:'+get.translation(list); return '无失效技能'; } } }, fengyin_vice:{ init:function(player,skill){ player.addSkillBlocker(skill); }, onremove:function(player,skill){ player.removeSkillBlocker(skill); }, charlotte:true, skillBlocker:function(skill,player){ return lib.character[player.name2][3].contains(skill)&&!lib.skill[skill].charlotte&&!get.is.locked(skill,player); }, mark:true, marktext:'主', intro:{ content:function(storage,player,skill){ var list=player.getSkills(null,null,false).filter(function(i){ return lib.skill.fengyin_vice.skillBlocker(i,player); }); if(list.length) return '失效技能:'+get.translation(list); return '无失效技能'; } } }, "new_tieji":{ audio:"retieji", trigger:{ player:"useCardToPlayered", }, check:function(event,player){ return get.attitude(player,event.target)<0; }, filter:function(event){ return event.card.name=='sha'; }, logTarget:"target", content:function(){ "step 0" var target=trigger.target; var controls=[]; if(get.zhu(player,'shouyue')){ if(!target.isUnseen(0)) target.addTempSkill('fengyin_main'); if(!target.isUnseen(1)) target.addTempSkill('fengyin_vice'); event.goto(2); } if(!target.isUnseen(0)&&!target.hasSkill('fengyin_main')) controls.push("主将"); if(!target.isUnseen(1)&&!target.hasSkill('fengyin_vice')) controls.push("副将"); if(controls.length>0){ if(controls.length==1) event._result={control:controls[0]}; else{ player.chooseControl(controls).set('ai',function(){ var choice='主将'; var skills=lib.character[target.name2][3]; for(var i=0;i1?2:0; return 8-get.value(card); }).set('num',num).set('suit',suit); "step 4" if(!result.bool){ trigger.getParent().directHit.add(trigger.target); } }, }, hmkyuanyu:{ audio:'zongkui', trigger:{ player:"damageBegin4", }, forced:true, preHidden:true, filter:function(event,player){ if(event.num<=0||!event.source) return false; var n1=player.getNext(); var p1=player.getPrevious(); if(event.source!=n1&&event.source!=p1) return true; }, content:function(){ trigger.cancel(); }, ai:{ effect:{ target:function(card,player,target){ if(player.hasSkillTag('jueqing',false,target)) return; if(player==target.getNext()||player==target.getPrevious()) return; var num=get.tag(card,'damage'); if(num){ return 0; } }, }, }, }, hmkguishu:{ audio:'bmcanshi', enable:"phaseUse", filter:function(event,player){ return player.countCards('hs',{suit:'spade'})>0; }, init:function(player){ if(!player.storage.hmkguishu) player.storage.hmkguishu=0; }, chooseButton:{ dialog:function(event,player){ var list=['yuanjiao','zhibi']; for(var i=0;i2) return 1; return 0; } }, backup:function(links,player){ return { audio:'bmcanshi', filterCard:function(card,player){ return get.suit(card)=='spade'; }, position:"hs", selectCard:1, popname:true, ai:function(card){ return 6-ai.get.value(card); }, viewAs:{name:links[0][2]}, onuse:function(result,player){ player.logSkill('hmkguishu'); if(result.card.name=='yuanjiao') player.storage.hmkguishu=1; else player.storage.hmkguishu=2; }, } }, prompt:function(links,player){ return '将一张手牌当作'+get.translation(links[0][2])+'使用'; }, }, ai:{ order:4, result:{ player:function(player){ return 2; }, }, threaten:1.6, }, }, "_mingzhisuodingji":{ mode:["guozhan"], enable:"phaseUse", filter:function(event,player){ if(player.hasSkillTag('nomingzhi',false,null,true)) return false; var bool=false; var skillm=lib.character[player.name1][3]; var skillv=lib.character[player.name2][3]; if(player.isUnseen(0)){ for(var i=0;i1; }, content:function(){ var target=player.getNext(); player.viewCharacter(target,1); }, }, _aozhan_judge:{ trigger:{ player:"phaseBefore", }, forced:true, priority:22, filter:function(event,player){ if(get.mode()!='guozhan') return false; if(_status.connectMode&&!lib.configOL.aozhan) return false; else if(!_status.connectMode&&!get.config('aozhan')) return false; if(_status._aozhan) return false; if(game.players.length>4) return false; if(game.players.length>3&&game.players.length+game.dead.length<=7) return false; for(var i=0;i'+intro+''); var ul=uiintro.querySelector('ul'); if(ul){ ul.style.width='180px'; } uiintro.add(ui.create.div('.placeholder')); return uiintro; },250); game.playBackgroundMusic(); }); game.countPlayer(function(current){current.addSkill('aozhan')}); }, }, _guozhan_marks:{ ruleSkill:true, enable:'phaseUse', filter:function(event,player){ return player.hasMark('yexinjia_mark')||player.hasMark('xianqu_mark')||player.hasMark('yinyang_mark')||player.hasMark('zhulianbihe_mark'); }, chooseButton:{ dialog:function(event,player){ return ui.create.dialog('###国战标记###弃置一枚对应的标记,发动其对应的效果'); }, chooseControl:function(event,player){ var list=[],bool=player.hasMark('yexinjia_mark'); if(bool||player.hasMark('xianqu_mark')) list.push('先驱'); if(bool||player.hasMark('zhulianbihe_mark')){ list.push('珠联(摸牌)'); if(event.filterCard({name:'tao',isCard:true},player,event)) list.push('珠联(桃)'); } if(bool||player.hasMark('yinyang_mark')) list.push('阴阳鱼'); list.push('cancel2'); return list; }, check:function(){ var player=_status.event.player,bool=player.hasMark('yexinjia_mark'); if((bool||player.hasMark('xianqu_mark'))&&(4-player.countCards('h'))>1) return '先驱'; if(bool||player.hasMark('zhulianbihe_mark')){ if(_status.event.getParent().filterCard({name:'tao',isCard:true},player,event)&&get.effect_use(player,{name:'tao'},player)>0) return '珠联(桃)'; if(player.getHandcardLimit()-player.countCards('h')>1&&!game.hasPlayer(function(current){ return current!=player&¤t.isFriendOf(player)&¤t.hp+current.countCards('h','shan')<=2; })) return '珠联(摸牌)'; } if(player.hasMark('yinyang_mark')&&player.getHandcardLimit()-player.countCards('h')>0) return '阴阳鱼'; return 'cancel2'; }, backup:function(result,player){ switch(result.control){ case '珠联(桃)': return get.copy(lib.skill._zhulianbihe_mark_tao); case '珠联(摸牌)': return { content:function(){ player.draw(2); player.removeMark(player.hasMark('zhulianbihe_mark')?'zhulianbihe_mark':'yexinjia_mark',1); }, }; case '阴阳鱼': return { content:function(){ player.draw(); player.removeMark(player.hasMark('yinyang_mark')?'yinyang_mark':'yexinjia_mark',1); } }; case '先驱': return {content:lib.skill.xianqu_mark.content}; } }, }, ai:{ order:1, result:{ player:1, }, }, }, xianqu_mark:{ intro:{ content:"◇出牌阶段,你可以弃置此标记,然后将手牌摸至四张并观看一名其他角色的一张武将牌。", }, content:function(){ "step 0" player.removeMark(player.hasMark('xianqu_mark')?'xianqu_mark':'yexinjia_mark',1); var num=4-player.countCards('h'); if(num) player.draw(num); "step 1" if(game.hasPlayer(function(current){ return current!=player&¤t.isUnseen(2); })) player.chooseTarget('是否观看一名其他角色的一张暗置武将牌?',function(card,player,target){ return target!=player&&target.isUnseen(2); }).set('ai',function(target){ if(target.isUnseen()){ var next=_status.event.player.getNext(); if (target!=next) return 10; return 9; } return -get.attitude(_status.event.player,target); }); else event.finish(); "step 2" if(result.bool){ event.target=result.targets[0]; player.line(event.target,'green'); var controls=[]; if(event.target.isUnseen(0)) controls.push('主将'); if(event.target.isUnseen(1)) controls.push('副将'); if(controls.length>1){ player.chooseControl(controls); } if(controls.length==0) event.finish(); } else{ player.removeSkill('xianqu_mark'); event.finish(); } "step 3" if(result.control){ if(result.control=='主将'){ player.viewCharacter(event.target,0); } else{ player.viewCharacter(event.target,1); } } else if(target.isUnseen(0)){ player.viewCharacter(event.target,0); } else{ player.viewCharacter(event.target,1); } }, }, zhulianbihe_mark:{ intro:{ content:"◇出牌阶段,你可以弃置此标记 然后摸两张牌。
◇你可以将此标记当做【桃】使用。", }, }, yinyang_mark:{ intro:{ content:"◇出牌阶段,你可以弃置此标记,然后摸一张牌。
◇弃牌阶段,你可以弃置此标记,然后本回合手牌上限+2。", }, }, _zhulianbihe_mark_tao:{ ruleSkill:true, enable:"chooseToUse", filter:function(event,player){ return event.type!='phase'&&(player.hasMark('zhulianbihe_mark')||player.hasMark('yexinjia_mark')); }, viewAsFilter:function(player){ return player.hasMark('zhulianbihe_mark')||player.hasMark('yexinjia_mark'); }, viewAs:{ name:"tao", isCard:true, }, filterCard:function(){return false}, selectCard:-1, precontent:function(){ player.removeMark(player.hasMark('zhulianbihe_mark')?'zhulianbihe_mark':'yexinjia_mark',1); }, }, _yinyang_mark_add:{ ruleSkill:true, trigger:{ player:"phaseDiscardBegin", }, filter:function(event,player){ return (player.hasMark('yinyang_mark')||player.hasMark('yexinjia_mark'))&&player.needsToDiscard(); }, prompt:function(event,player){ return '是否弃置一枚【'+(player.hasMark('yinyang_mark')?'阴阳鱼':'野心家')+'】标记,使本回合的手牌上限+2?'; }, content:function(){ player.addTempSkill('yinyang_add','phaseAfter'); player.removeMark(player.hasMark('yinyang_mark')?'yinyang_mark':'yexinjia_mark',1); }, }, yinyang_add:{ mod:{ maxHandcard:function(player,num){ return num+2; }, }, }, yexinjia_mark:{ intro:{ content:'◇你可以弃置此标记,并发动【先驱】标记或【珠联璧合】标记或【阴阳鱼】标记的效果。', }, }, yexinjia_friend:{ marktext:'盟', intro:{ name:'结盟', content:'已经与$结成联盟', }, }, /*----分界线----*/ _lianheng:{ mode:['guozhan'], enable:'phaseUse', usable:1, prompt:'将至多三张可合纵的牌交给一名与你势力不同的角色,或未确定势力的角色,若你交给与你势力不同的角色,则你摸等量的牌', filter:function(event,player){ return (player.getCards('h',function(card){ return card.hasTag('lianheng'); }).length); }, filterCard:function(card){ return card.hasTag('lianheng'); }, filterTarget:function(card,player,target){ if(target==player) return false; if(player.isUnseen()) return target.isUnseen(); if(player.identity=='ye') return true; return target.identity!=player.identity; }, check:function(card){ if(card.name=='tao') return 0; return 5-get.value(card); }, selectCard:[1,3], prepare:'give', discard:false, // delay:0.5, content:function(){ "step 0" target.gain(cards,player); "step 1" if(!target.isUnseen()){ player.draw(cards.length); } }, ai:{ basic:{ order:2 }, result:{ player:function(player,target){ var huoshao=false; for(var i=0;i=lib.suit.length) return false; return player.isFriendOf(event.player)&&player.hasCard(function(card){ if(_status.connectMode&&get.position(card)=='h') return true; return !suits.contains(get.suit(card)); },'he'); }, direct:true, content:function(){ 'step 0' var suits=[],cards=player.getExpansions('qianhuan'); for(var i=0;i=3){ goon=false; } } else if(trigger.card.name=='guohe'){ if(trigger.target.countCards('he')>=3||!trigger.target.countCards('h')){ goon=false; } } else if(trigger.card.name=='shuiyanqijunx'){ if(trigger.target.countCards('e')<=1||trigger.target.hp>=3){ goon=false; } } else if(get.tag(trigger.card,'damage')&&trigger.target.hp>=3){ goon=false; } } player.chooseButton().set('goon',goon).set('ai',function(button){ if(_status.event.goon) return 1; return 0; }).set('createDialog',[get.prompt('qianhuan'),'
移去一张“千幻”牌令'+ get.translation(trigger.player)+'对'+get.translation(trigger.target)+'的'+get.translation(trigger.card)+'失效
',player.getExpansions('qianhuan')]); 'step 1' if(result.bool){ player.logSkill('qianhuan',trigger.player); trigger.getParent().targets.remove(trigger.target); var card=result.links[0]; player.loseToDiscardpile(card); } } } } }, gzzhiman:{ audio:'zhiman', inherit:'zhiman', preHidden:true, content:function(){ 'step 0' if(trigger.player.countGainableCards(player,'ej')){ player.gainPlayerCard(trigger.player,'ej',true); } trigger.cancel(); 'step 1' if(player.sameIdentityAs(trigger.player)){ trigger.player.mayChangeVice(); } } }, gzdiancai:{ audio:'diancai', trigger:{global:'phaseUseEnd'}, filter:function(event,player){ if(_status.currentPhase==player) return false; var num=0; player.getHistory('lose',function(evt){ if(evt.cards2&&evt.getParent('phaseUse')==event) num+=evt.cards2.length; }); return num>=player.hp; }, preHidden:true, content:function(){ 'step 0' var num=player.maxHp-player.countCards('h'); if(num>0){ player.draw(num); } 'step 1' player.mayChangeVice(); }, }, xuanlve:{ trigger:{ player:'loseAfter', global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'], }, direct:true, preHidden:true, filter:function(event,player){ var evt=event.getl(player); return evt&&evt.es&&evt.es.length>0; }, content:function(){ 'step 0' player.chooseTarget(get.prompt('xuanlve'),'弃置一名其他角色的一张牌',function(card,player,target){ return target!=player&&target.countDiscardableCards(player,'he'); }).set('ai',function(target){ var player=_status.event.player; return get.effect(target,{name:'guohe_copy2'},player,player); }).setHiddenSkill(event.name); 'step 1' if(result.bool){ player.logSkill('xuanlve',result.targets); player.discardPlayerCard(result.targets[0],'he',true); } }, ai:{ noe:true, reverseEquip:true, effect:{ target:function(card,player,target,current){ if(get.type(card)=='equip') return [1,1]; } } } }, lianzi:{ enable:'phaseUse', usable:1, audio:2, filterCard:true, check:function(card){ if(get.type(card)=='equip') return 0; var player=_status.event.player; var num=game.countPlayer(function(current){ if(current.identity=='wu'){ return current.countCards('e'); } })+player.getExpansions('yuanjiangfenghuotu').length; if(num>=5){ return 8-get.value(card); } if(num>=3){ return 7-get.value(card); } if(num>=2){ return 3-get.value(card); } return 0; }, content:function(){ 'step 0' var num=game.countPlayer(function(current){ if(current.identity=='wu'){ return current.countCards('e'); } })+player.getExpansions('yuanjiangfenghuotu').length; if(num){ event.shown=get.cards(num); player.showCards(event.shown,get.translation('lianzi')); } else{ event.finish(); return; } 'step 1' var list=[]; var discards=[]; var type=get.type(cards[0],'trick'); for(var i=0;i=3&&player.hasStockSkill('lianzi')){ player.removeSkill('lianzi'); player.addSkill('gzzhiheng'); } } }, ai:{ order:7, result:{ player:1 } } }, jubao:{ mod:{ canBeGained:function(card,source,player){ if(source!=player&&get.position(card)=='e'&&get.subtype(card)=='equip5') return false; } }, trigger:{player:'phaseJieshuBegin'}, audio:2, forced:true, unique:true, filter:function(event,player){ if(game.hasPlayer(function(current){ return current.countCards('ej',function(card){ return card.name=='dinglanyemingzhu'; }); })){ return true; } for(var i=0;i0; }, content:function(){ 'step 0' player.chooseCardButton('将一张“烽火”置入弃牌堆',player.getExpansions('yuanjiangfenghuotu'),true); 'step 1' if(result.bool){ var card=result.links[0]; player.loseToDiscardpile(card); } } }, jiahe_put:{ enable:'phaseUse', audio:2, forceaudio:true, filter:function(event,player){ var zhu=get.zhu(player,'jiahe'); if(zhu){ return player.countCards('he',{type:'equip'})>0; } return false; }, filterCard:{type:'equip'}, position:'he', usable:1, check:function(card){ var zhu=get.zhu(_status.event.player,'jiahe'); if(!zhu) return 0; var num=7-get.value(card); if(get.position(card)=='h'){ if(zhu.getExpansions('huangjintianbingfu').length>=5){ return num-3; } return num+3; } else{ var player=_status.event.player; var zhu=get.zhu(player,'jiahe'); var sub=get.subtype(card) if(player.countCards('h',function(card){ return get.type(card)=='equip'&&get.subtype(card)=='sub'&&player.hasValueTarget(card); })) return num+4; if(zhu.getExpansions('yuanjiangfenghuotu').length>=5&&!player.hasSkillTag('noe')){ return num-5; } } return num; }, discard:false, lose:false, delay:false, prepare:function(cards,player){ var zhu=get.zhu(player,'jiahe'); player.line(zhu); }, content:function(){ var zhu=get.zhu(player,'jiahe'); zhu.addToExpansion(cards,player,'give').gaintag.add('yuanjiangfenghuotu'); }, ai:{ order:function(item,player){ if(player.hasSkillTag('noe')||!player.countCards('h',function(card){ return get.type(card)=='equip'&&player.getEquip(get.subtype(card))&&player.hasValueTarget(card); })) return 1; return 10; }, result:{ player:1 } } }, jiahe_skill:{ trigger:{player:'phaseZhunbeiBegin'}, direct:true, audio:"jiahe_put", forceaudio:true, filter:function(event,player){ var zhu=get.zhu(player,'jiahe'); if(zhu&&zhu.getExpansions('yuanjiangfenghuotu').length){ return true; } return false; }, content:function(){ 'step 0' var zhu=get.zhu(player,'jiahe'); event.num=zhu.getExpansions('yuanjiangfenghuotu').length; 'step 1' var list=[]; if(event.num>=1&&!player.hasSkill('reyingzi')) list.push('reyingzi'); if(event.num>=2&&!player.hasSkill('haoshi')) list.push('haoshi'); if(event.num>=3&&!player.hasSkill('shelie')) list.push('shelie'); if(event.num>=4&&!player.hasSkill('duoshi')) list.push('duoshi'); if(!list.length){ event.finish(); return; } var prompt2='你可以获得下列一项技能直到回合结束'; if(list.length>=5){ if(event.done){ prompt2+=' (2/2)'; } else{ prompt2+=' (1/2)'; } } list.push('cancel2'); player.chooseControl(list).set('prompt',get.translation('yuanjiangfenghuotu')). set('prompt2',prompt2).set('centerprompt2',true).set('ai',function(evt,player){ var controls=_status.event.controls; if(controls.contains('haoshi')){ var nh=player.countCards('h'); if(player.hasSkill('reyingzi')){ if(nh==0) return 'haoshi'; } else{ if(nh<=1) return 'haoshi'; } } if(controls.contains('shelie')){ return 'shelie'; } if(controls.contains('reyingzi')){ return 'reyingzi'; } if(controls.contains('duoshi')){ return 'duoshi'; } return controls.randomGet(); }); 'step 2' if(result.control!='cancel2'){ player.addTempSkill(result.control); if(!event.done) player.logSkill('jiahe_put'); game.log(player,'获得了技能','【'+get.translation(result.control)+'】'); if(event.num>=5&&!event.done){ event.done=true; event.goto(1); } } } }, yuanjiangfenghuotu:{ unique:true, forceunique:true, nopop:true, mark:true, onremove:function(player,skill){ var cards=player.getExpansions(skill); if(cards.length) player.loseToDiscardpile(cards); }, intro:{ content:'expansion', markcount:'expansion', mark:function(dialog,content,player){ var content=player.getExpansions('yuanjiangfenghuotu'); if(content&&content.length){ dialog.addSmall(content); } dialog.addText('
  • 每名吴势力角色的出牌阶段限一次,该角色可以将一张装备牌置于“缘江烽火图”上,称之为“烽火”。
  • 根据“烽火”的数量,所有吴势力角色可于其准备阶段开始时选择并获得其中一个技能直到回合结束:一张以上~英姿;两张以上~好施;三张以上~涉猎;四张以上~度势;五张以上~可额外选择一项。
  • 锁定技,当你受到【杀】或锦囊牌造成的伤害后,你将一张“烽火”置入弃牌堆。',false) } } }, gzqice:{ enable:'phaseUse', usable:1, audio:"qice_backup", filter:function(event,player){ var hs=player.getCards('h'); if(!hs.length) return false; for(var i=0;inum){ return false; } } else if(info.changeTarget){ var giveup=true; var list=game.filterPlayer(function(current){ return player.canUse(card,current); }); for(var i=0;inh){ select[1]=nh; } return select; }, filterTarget:function(card,player,target){ var info=get.info(card); if(info.changeTarget){ var targets=[target]; info.changeTarget(player,targets); if(targets.length>player.countCards('h')){ return false; } } return lib.filter.filterTarget(card,player,target); }, audio:'qice_backup', popname:true, viewAs:{name:links[0][2]}, ai1:function(){ return 1; } } }, prompt:function(links,player){ return '将全部手牌当作'+get.translation(links[0][2])+'使用'; } }, ai:{ order:1, result:{ player:function(player){ var num=0; var cards=player.getCards('h'); if(cards.length>=3&&player.hp>=3) return 0; for(var i=0;i=2; }, content:function(){ 'step 0' var list=player.storage.gzhuashen.slice(0); if(!list.length){ event.finish(); return; } player.chooseButton().set('ai',function(){ return Math.random()-0.3; }).set('createDialog',['是否替换一张“化身”?',[list,'character']]); 'step 1' if(result.bool){ player.logSkill('gzhuashen'); game.log(player,'替换了一张','#g化身'); lib.skill.gzhuashen.addCharacter(player,_status.characterlist.randomGet(),true); lib.skill.gzhuashen.removeCharacter(player,result.links[0]); game.delayx(); } } }, triggered:{}, flash:{ hookTrigger:{ log:function(player,skill){ var sources=lib.skill.gzhuashen.getSkillSources(player,skill); if(sources.length){ player.flashAvatar('gzhuashen',sources.randomGet()); player.storage.gzhuashen_removing.add(skill); } } }, trigger:{player:['useSkillBegin','useCard','respond']}, silent:true, filter:function(event,player){ return event.skill&&lib.skill.gzhuashen.getSkillSources(player,event.skill).length>0; }, content:function(){ lib.skill.gzhuashen_flash.hookTrigger.log(player,trigger.skill); } }, clear:{ trigger:{player:'phaseAfter'}, silent:true, content:function(){ player.storage.gzhuashen_trigger.length=0; } }, disallow:{ hookTrigger:{ block:function(event,player,name,skill){ for(var i=0;i0){ return true; } } return false; } } }, remove:{ trigger:{player:['useSkillAfter','useCardAfter','respondAfter','triggerAfter','skillAfter']}, hookTrigger:{ after:function(event,player){ if(event._direct&&!player.storage.gzhuashen_removing.contains(event.skill)) return false; if(lib.skill[event.skill].silent) return false; return lib.skill.gzhuashen.getSkillSources(player,event.skill).length>0; } }, silent:true, filter:function(event,player){ return event.skill&&lib.skill.gzhuashen.getSkillSources(player,event.skill).length>0; }, content:function(){ 'step 0' if(trigger.name=='trigger'){ player.storage.gzhuashen_trigger.push([trigger._trigger,trigger.triggername]); } var sources=lib.skill.gzhuashen.getSkillSources(player,trigger.skill); if(sources.length==1){ event.directresult=sources[0]; } else{ player.chooseButton(true).set('createDialog',['移除一张“化身”牌',[sources,'character']]); } 'step 1' if(!event.directresult&&result&&result.links[0]){ event.directresult=result.links[0]; } var name=event.directresult; lib.skill.gzhuashen.removeCharacter(player,name); game.log(player,'移除了化身牌','#g'+get.translation(name)); } } }, ai:{ nofrequent:true, skillTagFilter:function(player,tag,arg){ if(arg&&player.storage.gzhuashen){ if(lib.skill.gzhuashen.getSkillSources(player,arg).length>0){ return true; } } return false; } } }, gzxiongsuan:{ limited:true, audio:'xiongsuan', enable:'phaseUse', filterCard:true, filter:function(event,player){ return player.countCards('h'); }, filterTarget:function(card,player,target){ return target.isFriendOf(player); }, check:function(card){ return 7-get.value(card); }, content:function(){ 'step 0' player.awakenSkill('gzxiongsuan'); target.damage('nocard'); 'step 1' player.draw(3); var list=[]; var skills=target.getOriginalSkills(); for(var i=0;i1){ player.chooseControl(list).set('prompt','选择一个限定技在回合结束后重置之'); } else{ event.finish(); } 'step 2' target.storage.gzxiongsuan_restore=result.control; target.addTempSkill('gzxiongsuan_restore'); }, subSkill:{ restore:{ trigger:{global:'phaseEnd'}, forced:true, popup:false, charlotte:true, onremove:true, content:function(){ player.restoreSkill(player.storage.gzxiongsuan_restore); } } }, ai:{ order:4, damage:true, result:{ target:function(player,target){ if(target.hp>1){ var skills=target.getOriginalSkills(); for(var i=0;i=0) return 10; if(target.hp>=4) return 5; if(target.hp==3){ if(player.countCards('h')<=2&&game.hasPlayer(function(current){ return current.hp<=1&&get.attitude(player,current)<0; })){ return 3; } } return 0; } } } }, gzsuishi:{ audio:'suishi', preHidden:['gzsuishi2'], trigger:{global:'dying'}, forced:true, //priority:6.5, check:function(){ return false; }, filter:function(event,player){ return event.player!=player&&event.parent.name=='damage'&&event.parent.source&&event.parent.source.isFriendOf(player); }, content:function(){ player.draw(); }, group:'gzsuishi2' }, gzsuishi2:{ audio:'suishi', trigger:{global:'dieAfter'}, forced:true, check:function(){return false}, filter:function(event,player){ return event.player.isFriendOf(player); }, content:function(){ player.loseHp(); } }, hongfa_respond:{ audio:'huangjintianbingfu', forceaudio:true, trigger:{player:'chooseToRespondBegin'}, direct:true, filter:function(event,player){ if(event.responded) return false; if(!event.filterCard({name:'sha'})) return false; var zhu=get.zhu(player,'hongfa'); if(zhu&&zhu.getExpansions('huangjintianbingfu').length>0){ return true; } return false; }, content:function(){ "step 0" var zhu=get.zhu(player,'hongfa'); player.chooseCardButton(get.prompt('huangjintianbingfu'),zhu.getExpansions('huangjintianbingfu')).set('ai',function(){ if(_status.event.goon) return 1; return 0; }).set('goon',player.countCards('h','sha')==0); "step 1" if(result.bool){ var card=result.links[0]; trigger.untrigger(); trigger.responded=true; trigger.result={bool:true,card:{name:'sha'},cards:[card]}; var zhu=get.zhu(player,'hongfa'); player.logSkill('hongfa_respond',zhu); } } }, hongfa_use:{ audio:'huangjintianbingfu', forceaudio:true, enable:'chooseToUse', filter:function(event,player){ if(!event.filterCard({name:'sha'},player)) return false; var zhu=get.zhu(player,'hongfa'); if(zhu&&zhu.getExpansions('huangjintianbingfu').length>0){ return true; } return false; }, chooseButton:{ dialog:function(event,player){ var zhu=get.zhu(player,'hongfa'); return ui.create.dialog('黄巾天兵符',zhu.getExpansions('huangjintianbingfu'),'hidden'); }, backup:function(links,player){ return { filterCard:function(){return false}, selectCard:-1, viewAs:{name:'sha',cards:links}, cards:links, precontent:function(){ var cards=lib.skill.hongfa_use_backup.cards; event.result.cards=cards; player.logSkill('hongfa_use',result.targets); } } }, prompt:function(links,player){ return '选择杀的目标'; } }, ai:{ respondSha:true, skillTagFilter:function(player){ var zhu=get.zhu(player,'hongfa'); if(zhu&&zhu.getExpansions('huangjintianbingfu').length>0){ return true; } return false; }, order:function(){ return get.order({name:'sha'})-0.1; }, result:{ player:function(player){ if(player.countCards('h','sha')) return 0; return 1; } } } }, hongfa:{ audio:2, derivation:'huangjintianbingfu', unique:true, forceunique:true, trigger:{player:'phaseZhunbeiBegin'}, forced:true, filter:function(event,player){ return player.getExpansions('huangjintianbingfu').length==0&&get.population('qun')>0; }, content:function(){ var cards=get.cards(get.population('qun')); player.addToExpansion(cards,'gain2').gaintag.add('huangjintianbingfu'); }, ai:{ threaten:2, }, group:'hongfa_hp', global:['hongfa_use','hongfa_respond'], subSkill:{ hp:{ audio:true, trigger:{player:'loseHpBefore'}, filter:function(event,player){ return player.getExpansions('huangjintianbingfu').length>0; }, direct:true, content:function(){ 'step 0' player.chooseCardButton(get.prompt('hongfa'),player.getExpansions('huangjintianbingfu')).set('ai',function(){ return 1; }); 'step 1' if(result.bool){ player.logSkill('huangjintianbingfu'); player.loseToDiscardpile(result.links); trigger.cancel(); } } } } }, wendao:{ audio:2, unique:true, forceunique:true, enable:'phaseUse', usable:1, filterCard:function(card){ return get.name(card)!='taipingyaoshu'&&get.color(card)=='red'; }, position:'he', check:function(card){ return 6-get.value(card); }, onChooseToUse:function(event){ if(game.online) return; event.set('wendao',function(){ for(var i=0;i
  • 当你计算群势力角色数时,每一张“天兵”均可视为一名群势力角色。
  • 每当你失去体力时,你可改为将一张“天兵”置入弃牌堆。
  • 与你势力相同的角色可将一张“天兵”当【杀】使用或打出。',false) } } }, wuxin:{ trigger:{player:'phaseDrawBegin1'}, audio:2, filter:function(event,player){ return get.population('qun')>0; }, content:function(){ 'step 0' var num=get.population('qun'); if(player.hasSkill('huangjintianbingfu')){ num+=player.getExpansions('huangjintianbingfu').length; } var cards=get.cards(num); game.cardsGotoOrdering(cards); var next=player.chooseToMove('悟心:将卡牌以任意顺序置于牌堆顶'); next.set('list',[['牌堆顶',cards]]); next.set('processAI',function(list){ var cards=list[0][1].slice(0); cards.sort(function(a,b){ return get.value(b)-get.value(a); }); return [cards]; }) 'step 1' if(result.bool){ var list=result.moved[0].slice(0); while(list.length){ ui.cardPile.insertBefore(list.pop(),ui.cardPile.firstChild); } game.updateRoundNumber(); } } }, zhangwu:{ audio:2, unique:true, forceunique:true, ai:{ threaten:2, }, group:['zhangwu_gain','zhangwu_clear','zhangwu_count1','zhangwu_count2','zhangwu_count3'], subSkill:{ gain:{ audio:'zhangwu', trigger:{global:['discardAfter','respondAfter','useCardAfter','equipAfter', 'judgeAfter','useSkillAfter','phaseDrawBegin','phaseAfter']}, forced:true, filter:function(event,player){ if(player.storage.zhangwu){ for(var i=0;i
    【武圣】
    将“红色牌”改为“任意牌”
    【咆哮】
    增加描述“你使用的【杀】无视其他角色的防具”
    【龙胆】
    增加描述“你每发动一次‘龙胆’便摸一张牌”
    【烈弓】
    增加描述“你的攻击范围+1”
    【铁骑】
    将“一张明置的武将牌”改为“所有明置的武将牌”
    ", } }, jizhao:{ derivation:'rerende', unique:true, audio:2, enable:'chooseToUse', mark:true, skillAnimation:true, animationColor:'fire', init:function(player){ player.storage.jizhao=false; }, filter:function(event,player){ if(player.storage.jizhao) return false; if(event.type=='dying'){ if(player!=event.dying) return false; return true; } return false; }, content:function(){ 'step 0' player.awakenSkill('jizhao'); player.storage.jizhao=true; var num=player.maxHp-player.countCards('h'); if(num>0){ player.draw(num); } 'step 1' if(player.hp<2){ player.recover(2-player.hp); } 'step 2' player.removeSkill('shouyue'); player.removeSkill('wuhujiangdaqi'); player.addSkill('rerende'); }, ai:{ order:1, skillTagFilter:function(player,arg,target){ if(player!=target||player.storage.jizhao) return false; }, save:true, result:{ player:10 }, }, intro:{ content:'limited' } }, gzshoucheng:{ inherit:'shoucheng', audio:'shoucheng', preHidden:true, filter:function(event,player){ return game.hasPlayer(function(current){ if(current==_status.currentPhase||!current.isFriendOf(player)) return false; var evt=event.getl(current); return evt&&evt.hs&&evt.hs.length&¤t.countCards('h')==0; }); }, content:function(){ "step 0" event.list=game.filterPlayer(function(current){ if(current==_status.currentPhase||!current.isFriendOf(player)) return false; var evt=trigger.getl(current); return evt&&evt.hs&&evt.hs.length; }).sortBySeat(_status.currentPhase); "step 1" var target=event.list.shift(); event.target=target; if(target.isAlive()&&target.countCards('h')==0){ player.chooseBool(get.prompt2('gzshoucheng',target)).set('ai',function(){ return get.attitude(_status.event.player,_status.event.getParent().target)>0; }).setHiddenSkill(event.name); } else event.goto(3); "step 2" if(result.bool){ player.logSkill(event.name,target); target.draw(); } "step 3" if(event.list.length) event.goto(1); }, }, yicheng:{ audio:2, trigger:{global:'useCardToTargeted'}, filter:function(event,player){ return event.card.name=='sha'&&event.target.isFriendOf(player); }, preHidden:true, logTarget:'target', content:function(){ 'step 0' trigger.target.draw(); 'step 1' trigger.target.chooseToDiscard('he',true); } }, gzjixi:{ inherit:'jixi', audio:'jixi', mainSkill:true, init:function(player){ if(player.checkMainSkill('gzjixi')){ player.removeMaxHp(); } } }, ziliang:{ audio:2, trigger:{global:'damageEnd'}, filter:function(event,player){ return event.player.isIn()&&event.player.isFriendOf(player)&&player.getExpansions('tuntian').length; }, init:function(player){ player.checkViceSkill('ziliang'); }, viceSkill:true, direct:true, content:function(){ 'step 0' player.chooseCardButton(get.prompt('ziliang',trigger.player),player.getExpansions('tuntian')).set('ai',function(button){ return get.value(button.link); }); 'step 1' if(result.bool){ var card=result.links[0]; player.logSkill('ziliang',trigger.player); trigger.player.gain(card,player,'give'); } } }, huyuan:{ audio:2, trigger:{player:'phaseJieshuBegin'}, direct:true, preHidden:true, filter:function(event,player){ return player.countCards('he',{type:'equip'})>0; }, content:function(){ "step 0" player.chooseCardTarget({ filterCard:function(card){ return get.type(card)=='equip'; }, position:'he', filterTarget:function(card,player,target){ return target.isEmpty(get.subtype(card)); }, ai1:function(card){ return 6-get.value(card); }, ai2:function(target){ return get.attitude(_status.event.player,target)-3; }, prompt:get.prompt2('huyuan') }).setHiddenSkill('huyuan'); "step 1" if(result.bool){ var target=result.targets[0]; player.logSkill('huyuan',target); event.current=target; target.equip(result.cards[0]); if(target!=player){ player.$give(result.cards,target,false); game.delay(2); } player.chooseTarget('弃置一名角色的一张牌',function(card,player,target){ var source=_status.event.source; return get.distance(source,target)<=1&&source!=target&&target.countCards('he'); }).set('ai',function(target){ var player=_status.event.player; return get.effect(target,{name:'guohe_copy2'},player,player); }).set('source',target); } else{ event.finish(); } "step 2" if(result.bool&&result.targets.length){ event.current.line(result.targets,'green'); player.discardPlayerCard(true,result.targets[0],'he'); } }, }, heyi:{ zhenfa:'inline', global:'heyi_distance' }, heyi_distance:{ mod:{ globalTo:function(from,to,distance){ if(game.hasPlayer(function(current){ return current.hasSkill('heyi')&¤t.inline(to)&¤t!=to; })){ return distance+1; } } } }, tianfu:{ init:function(player){ player.checkMainSkill('tianfu'); }, mainSkill:true, inherit:'kanpo', zhenfa:'inline', viewAsFilter:function(player){ return _status.currentPhase&&_status.currentPhase.inline(player)&&!player.hasSkill('kanpo')&&player.countCards('h',{color:'black'})>0; }, }, yizhi:{ init:function(player){ if(player.checkViceSkill('yizhi')&&!player.viceChanged){ player.removeMaxHp(); } }, viceSkill:true, inherit:'guanxing', filter:function(event,player){ return !player.hasSkill('guanxing'); } }, gzshangyi:{ audio:'shangyi', enable:'phaseUse', usable:1, filter:function(event,player){ return player.countCards('h')>0; }, filterTarget:function(card,player,target){ return player!=target&&(target.countCards('h')||target.isUnseen(2)); }, content:function(){ "step 0" target.viewHandcards(player); "step 1" if(!target.countCards('h')){ event._result={index:1}; } else if(!target.isUnseen(2)){ event._result={index:0}; } else{ player.chooseControl().set('choiceList',[ '观看'+get.translation(target)+'的手牌并可以弃置其中的一张黑色牌', '观看'+get.translation(target)+'的所有暗置的武将牌', ]); } "step 2" if(result.index==0){ player.discardPlayerCard(target,'h').set('filterButton',function(button){ return get.color(button.link)=='black'; }).set('visible',true); } else{ player.viewCharacter(target,2); } }, ai:{ order:11, result:{ target:function(player,target){ return -target.countCards('h'); } }, threaten:1.1 }, }, niaoxiang:{ zhenfa:'siege', audio:'zniaoxiang', global:'niaoxiang_sha', preHidden:true, trigger:{global:'useCardToPlayered'}, filter:function(event,player){ if(event.card.name!='sha') return false; if(game.countPlayer()<4) return false; return player.siege(event.target)&&event.player.siege(event.target); }, forced:true, audio:'zniaoxiang', forceaudio:true, logTarget:'target', content:function(){ var id=trigger.target.playerid; var map=trigger.getParent().customArgs; if(!map[id]) map[id]={}; if(typeof map[id].shanRequired=='number'){ map[id].shanRequired++; } else{ map[id].shanRequired=2; } } }, fengshi:{ audio:'zfengshi', zhenfa:'siege', trigger:{global:'useCardToPlayered'}, filter:function(event,player){ if(event.card.name!='sha'||game.countPlayer()<4) return false; return player.siege(event.target)&&event.player.siege(event.target)&&event.target.countCards('e'); }, logTarget:'target', content:function(){ trigger.target.chooseToDiscard('e',true); } }, gzguixiu:{ audio:'guixiu', trigger:{player:['showCharacterAfter','removeCharacterBefore']}, filter:function(event,player){ if(event.name=='removeCharacter'||event.name=='changeVice') return event.toRemove=='gz_mifuren'&&player.isDamaged(); return event.toShow.contains('gz_mifuren'); }, content:function(){ if(trigger.name=='showCharacter'){ player.draw(2); } else{ player.recover(); } }, }, gzcunsi:{ derivation:'gzyongjue', enable:'phaseUse', audio:'cunsi', filter:function(event,player){ return player.checkMainSkill('gzcunsi',false)||player.checkViceSkill('gzcunsi',false); }, unique:true, forceunique:true, filterTarget:true, skillAnimation:true, animationColor:'orange', content:function(){ 'step 0' if(player.checkMainSkill('gzcunsi',false)){ player.removeCharacter(0); } else{ player.removeCharacter(1); } 'step 1' target.addSkill('gzyongjue'); if(target!=player){ target.draw(2); } }, ai:{ order:9, result:{ player:function(player,target){ var num=0; if(player.isDamaged()&&target.isFriendOf(player)){ num++; if(target.hasSkill('kanpo')) num+=0.5; if(target.hasSkill('liegong')) num+=0.5; if(target.hasSkill('tieji')) num+=0.5; if(target.hasSkill('gzrende')) num+=1.2; if(target.hasSkill('longdan')) num+=1.2; if(target.hasSkill('paoxiao')) num+=1.2; if(target.hasSkill('zhangwu')) num+=1.5; if(target!=player) num+=0.5; } return num; } } } }, gzyongjue:{ audio:'yongjue', trigger:{global:'useCardAfter'}, filter:function(event,player){ if(event==event.player.getHistory('useCard')[0]&&event.card.name=='sha'&&_status.currentPhase==event.player&&event.player.isFriendOf(player)){ for(var i=0;i0&&event.source&&event.source.isUnseen(2); }, content:function(){ trigger.num--; }, ai:{ effect:{ target:function(card,player,target){ if(player.hasSkillTag('jueqing',false,target)) return; if(!player.isUnseen(2)) return; var num=get.tag(card,'damage'); if(num){ if(num>1) return 0.5; return 0; } } } }, }, hunshang:{ init:function(player){ if(player.checkViceSkill('hunshang')&&!player.viceChanged){ player.removeMaxHp(); } }, group:['hunshang_yingzi','hunshang_yinghun'], }, reyingzi_sunce:{audio:2}, yinghun_sunce:{audio:2}, hunshang_yingzi:{ inherit:'yingzi', audio:'reyingzi_sunce', filter:function(event,player){ return player.hp<=1&&!player.hasSkill('yingzi'); } }, hunshang_yinghun:{ inherit:'gzyinghun', audio:'yinghun_sunce', filter:function(event,player){ return player.hp<=1&&player.isDamaged()&&!player.hasSkill('gzyinghun'); } }, yingyang:{ audio:2, trigger:{player:'compare',target:'compare'}, filter:function(event){ return !event.iwhile; }, direct:true, preHidden:true, content:function(){ 'step 0' player.chooseControl('点数+3','点数-3','cancel2').set('prompt',get.prompt2('yingyang')).set('ai',function(){ if(_status.event.small) return 1; else return 0; }).set('small',trigger.small); 'step 1' if(result.index!=2){ player.logSkill('yingyang'); if(result.index==0){ game.log(player,'拼点牌点数+3'); if(player==trigger.player){ trigger.num1+=3; if(trigger.num1>13) trigger.num1=13; } else{ trigger.num2+=3; if(trigger.num2>13) trigger.num2=13; } } else{ game.log(player,'拼点牌点数-3'); if(player==trigger.player){ trigger.num1-=3; if(trigger.num1<1) trigger.num1=1; } else{ trigger.num2-=3; if(trigger.num2<1) trigger.num2=1; } } } } }, gzqianxi:{ audio:'qianxi', trigger:{player:'phaseZhunbeiBegin'}, content:function(){ "step 0" player.judge(); "step 1" event.color=result.color; player.chooseTarget(function(card,player,target){ return player!=target&&get.distance(player,target)<=1; },true).set('ai',function(target){ return -get.attitude(_status.event.player,target); }); "step 2" if(result.bool&&result.targets.length){ result.targets[0].storage.qianxi2=event.color; result.targets[0].addSkill('qianxi2'); player.line(result.targets,'green'); game.addVideo('storage',result.targets[0],['qianxi2',event.color]); } }, }, gzduanchang:{ audio:'duanchang', trigger:{player:'die'}, forced:true, forceDie:true, filter:function(event,player){ return event.source&&event.source.isIn()&&event.source!=player&& (event.source.hasMainCharacter()||event.source.hasViceCharacter()); }, content:function(){ 'step 0' if(!trigger.source.hasViceCharacter()){ event._result={control:'主将'} } else if(!trigger.source.hasMainCharacter()){ event._result={control:'副将'} } else{ player.chooseControl('主将','副将',function(){ return _status.event.choice; }).set('prompt','令'+get.translation(trigger.source)+'失去一张武将牌的所有技能').set('forceDie',true).set('choice',function(){ var rank=get.guozhanRank(trigger.source.name1,trigger.source)-get.guozhanRank(trigger.source.name2,trigger.source); if(rank==0) rank=Math.random()>0.5?1:-1; return (rank*get.attitude(player,trigger.source))>0?'副将':'主将'; }()); } 'step 1' var skills; if(result.control=='主将'){ trigger.source.showCharacter(0); game.broadcastAll(function(player){ player.node.avatar.classList.add('disabled'); },trigger.source); skills=lib.character[trigger.source.name][3]; game.log(trigger.source,'失去了主将技能'); } else{ trigger.source.showCharacter(1); game.broadcastAll(function(player){ player.node.avatar2.classList.add('disabled'); },trigger.source); skills=lib.character[trigger.source.name2][3]; game.log(trigger.source,'失去了副将技能'); } var list=[]; for(var i=0;i2) return 0; if(ui.selected.cards.length&&ui.selected.cards[0].name=='du') return 0; if(!ui.selected.cards.length&&card.name=='du') return 20; var player=get.owner(card); if(player.hp==player.maxHp||player.storage.gzrende<0||player.countCards('h')+player.storage.gzrende<=2){ if(ui.selected.cards.length){ return -1; } var players=game.filterPlayer(); for(var i=0;i=3&& get.attitude(players[i],player)>=3){ return 11-get.value(card); } } if(player.countCards('h')>player.hp) return 10-get.value(card); if(player.countCards('h')>2) return 6-get.value(card); return -1; } return 10-get.value(card); }, content:function(){ target.gain(cards,player); if(typeof player.storage.gzrende!='number'){ player.storage.gzrende=0; } if(player.storage.gzrende>=0){ player.storage.gzrende+=cards.length; if(player.storage.gzrende>=3){ player.recover(); player.storage.gzrende=-1; } } }, ai:{ order:function(skill,player){ if(player.hp==player.maxHp||player.storage.gzrende<0||player.countCards('h')+player.storage.gzrende<=2){ return 1; } return 10; }, result:{ target:function(player,target){ if(ui.selected.cards.length&&ui.selected.cards[0].name=='du'){ return -10; } if(target.hasJudge('lebu')) return 0; var nh=target.countCards('h'); var np=player.countCards('h'); if(player.hp==player.maxHp||player.storage.gzrende<0||player.countCards('h')+player.storage.gzrende<=2){ if(nh>=np-1&&np<=player.hp&&!target.hasSkill('haoshi')) return 0; } return Math.max(1,5-nh); } }, effect:{ target:function(card,player,target){ if(player==target&&get.type(card)=='equip'){ if(player.countCards('e',{subtype:get.subtype(card)})){ var players=game.filterPlayer(); for(var i=0;i0){ return 0; } } } } } }, threaten:0.8 } }, gzrende1:{ trigger:{player:'phaseUseBegin'}, silent:true, content:function(){ player.storage.gzrende=0; } }, gzzhiheng:{ inherit:'zhiheng', audio:'zhiheng', selectCard:function(){ var player=_status.event.player; var range1=[1,player.maxHp]; if(player.hasSkill('dinglanyemingzhu_skill')){ for(var i=0;i0; }, check:function(card){ return 5-get.value(card); } }, gzxiaoguo:{ inherit:'xiaoguo', audio:'xiaoguo', preHidden:true, content:function(){ "step 0" var nono=(Math.abs(get.attitude(player,trigger.player))<3); if(get.damageEffect(trigger.player,player,player)<=0){ nono=true; } var next=player.chooseToDiscard(get.prompt2('gzxiaoguo',trigger.player),{type:'basic'}); next.set('ai',function(card){ if(_status.event.nono) return 0; return 8-get.useful(card); }); next.set('logSkill',['gzxiaoguo',trigger.player]); next.set('nono',nono); next.setHiddenSkill('gzxiaoguo'); "step 1" if(result.bool){ var nono=(get.damageEffect(trigger.player,player,trigger.player)>=0); trigger.player.chooseToDiscard('弃置一张装备牌,或受到一点伤害','he',{type:'equip'}).set('ai',function(card){ if(_status.event.nono){ return 0; } if(_status.event.player.hp==1) return 10-get.value(card); return 9-get.value(card); }).set('nono',nono); } else{ event.finish(); } "step 2" if(!result.bool){ trigger.player.damage(); } }, }, _mingzhi1:{ trigger:{player:'phaseBeginStart'}, priority:19, forced:true, popup:false, content:function(){ "step 0" var choice=1; for(var i=0;i=2||(popu==1&&game.players.length<=4)){ return Math.random()<0.5?3:(Math.random()<0.5?2:1); } if(choice==0) return 0; if(get.population(group)>0&&player.wontYe()){ return Math.random()<0.2?(Math.random()<0.5?3:(Math.random()<0.5?2:1)):0; } var nming=0; for(var i=0;i=2||(popu==1&&game.players.length<=4)){ return true; } if(get.population(group)>0&&player.wontYe()){ return Math.random()<0.2?true:false; } var nming=0; for(var i=0;ievent.maxHp) player.recover(player.maxHp-event.maxHp); } }, gz_jun_liubei:{audio:true}, gz_jun_caocao:{audio:true}, gz_jun_sunquan:{audio:true}, gz_jun_zhangjiao:{audio:true}, _zhenfazhaohuan:{ enable:'phaseUse', usable:1, getConfig:function(player,target){ var config={}; var skills=player.getSkills(); for(var i=0;i(_status.yexinjia_list?_status.yexinjia_list.randomGet():0)); } else{ target.chat('拒绝'); game.delay(1.5); if(targets.length) event.goto(5); else event.goto(8); } 'step 7' game.broadcastAll(function(player,target,text){ player.identity='ye'; source.setIdentity(text,'ye'); player.setIdentity(text,'ye'); player.storage.yexinjia_friend=target; },target,source,result.control); _status.yexinjia_list.remove(result.control); target.markSkill('yexinjia_friend'); source.removeMark('yexinjia_mark',1); target.drawTo(4); target.recover(); 'step 8' if(event.targets2.length) event.goto(3); else delete _status.showYexings; }); }, getCharacterChoice:function(list,num){ var choice=list.splice(0,num).sort(function(a,b){ return (get.is.double(a)?1:-1)-(get.is.double(b)?1:-1); }); var map={wei:[],shu:[],wu:[],qun:[],key:[],jin:[],ye:[]}; for(var i=0;i=num){ break; } } } else{ if(!map[lib.character[list[i]][1]]&&!get.is.double(list[i])){ group=lib.character[list[i]][1]; if(group=='ye') group=null; choice.push(list[i]); list.splice(i--,1); if(choice.length>=num){ break; } } } } } return choice.randomSort(); }, getState:function(){ var state={}; for(var i in lib.playerOL){ var player=lib.playerOL[i]; state[i]={ identity:player.identity, //group:player.group, shown:player.ai.shown, }; } return state; }, updateState:function(state){ for(var i in state){ var player=lib.playerOL[i]; if(player){ player.identity=state[i].identity; //player.group=state[i].group; player.ai.shown=state[i].shown; } } }, getRoomInfo:function(uiintro){ var num,last; if(lib.configOL.initshow_draw=='off'){ num='关闭' } else{ num={mark:'标记',draw:'摸牌'}[lib.configOL.initshow_draw]; } uiintro.add('
    首亮奖励:'+num); uiintro.add('
    珠联璧合:'+(lib.configOL.zhulian?'开启':'关闭')); uiintro.add('
    出牌时限:'+lib.configOL.choose_timeout+'秒'); uiintro.add('
    国战牌堆:'+(lib.configOL.guozhanpile?'开启':'关闭')); uiintro.add('
    鏖战模式:'+(lib.configOL.aozhan?'开启':'关闭')); last=uiintro.add('
    观看下家副将:'+(lib.configOL.viewnext?'开启':'关闭')); last.style.paddingBottom='8px'; }, addRecord:function(bool){ if(typeof bool=='boolean'){ var data=lib.config.gameRecord.guozhan.data; var identity=game.me.identity; if(!data[identity]){ data[identity]=[0,0]; } if(bool){ data[identity][0]++; } else{ data[identity][1]++; } var list=lib.group.slice(0); list.add('ye'); var str=''; for(var i=0;i'; } } lib.config.gameRecord.guozhan.str=str; game.saveConfig('gameRecord',lib.config.gameRecord); } }, getIdentityList:function(player){ if(!player.isUnseen()) return; if(player==game.me) return; var list={ wei:'魏', shu:'蜀', wu:'吴', qun:'群', ye:'野', unknown:'猜' } var num=Math.floor((game.players.length+game.dead.length)/2); var noye=true; if(get.population('wei')>=num){ delete list.wei; noye=false; } if(get.population('shu')>=num){ delete list.shu; noye=false; } if(get.population('wu')>=num){ delete list.wu; noye=false; } if(get.population('qun')>=num){ delete list.qun; noye=false; } if(noye){ delete list.ye; } return list; }, getIdentityList2:function(list){ for(var i in list){ switch(i){ case 'unknown':list[i]='未知';break; case 'ye':list[i]='野心家';break; case 'qun':list[i]+='雄';break; case 'key':list[i]='Key';break; case 'jin':list[i]+='朝';break; default:list[i]+='国'; } } }, getVideoName:function(){ var str=get.translation(game.me.name1)+'/'+get.translation(game.me.name2); var str2=get.cnNumber(parseInt(get.config('player_number')))+'人'+ get.translation(lib.config.mode); if(game.me.identity=='ye'){ str2+=' - 野心家'; } var name=[str,str2]; return name; }, showIdentity:function(started){ if(game.phaseNumber==0&&!started) return; for(var i=0;i1){ if(!hiddens.length&&sides.length==2){ if(map[sides[0]].length==1&&!map[sides[1]].filter(function(i){ return i.identity!='ye'&&i.isUnseen(0); }).length) map[sides[0]][0].showGiveup(); if(map[sides[1]].length==1&&!map[sides[0]].filter(function(i){ return i.identity!='ye'&&i.isUnseen(0); }).length) map[sides[1]][0].showGiveup(); } } else{ var isYe=function(player){ return player.identity!='ye'&&lib.character[player.name1][1]=='ye'; } if(!hiddens.length){ if(map[sides[0]].length>1){ for(var i of map[sides[0]]){ if(isYe(i)){ game.showYexings(); return; } } } game.broadcastAll(function(id){ game.winner_id=id; },sides[0]); game.checkResult(); } else{ var identity=map[sides[0]][0].identity; if(identity=='ye') return; for(var i of map[sides[0]]){ if(isYe(i)) return; } for(var i of hiddens){ if(isYe(i)||i.getGuozhanGroup(2)!=identity||!i.wontYe()) return; } game.broadcastAll(function(id){ game.winner_id=id; },sides[0]); game.checkResult(); } } }, checkResult:function(){ _status.overing=true; var me=game.me._trueMe||game.me; for(var i=0;i'; td.link=i-1; seats.appendChild(td); td.addEventListener(lib.config.touchscreen?'touchend':'click',function(){ if(_status.dragged) return; if(_status.justdragged) return; if(_status.cheat_seat){ _status.cheat_seat.classList.remove('bluebg'); if(_status.cheat_seat==this){ delete _status.cheat_seat; return; } } this.classList.add('bluebg'); _status.cheat_seat=this; }); } dialog.content.appendChild(seats); if(game.me==game.zhu){ seats.previousSibling.style.display='none'; seats.style.display='none'; } dialog.add(ui.create.div('.placeholder.add-setting')); dialog.add(ui.create.div('.placeholder.add-setting')); if(get.is.phoneLayout()) dialog.add(ui.create.div('.placeholder.add-setting')); }; var removeSetting=function(){ var dialog=_status.event.dialog; if(dialog){ dialog.style.height=''; delete dialog._scrollset; var list=Array.from(dialog.querySelectorAll('.add-setting')); while(list.length){ list.shift().remove(); } ui.update(); } }; event.addSetting=addSetting; event.removeSetting=removeSetting; var chosen=lib.config.continue_name||[]; game.saveConfig('continue_name'); event.chosen=chosen; var i; event.list=[]; for(i in lib.character){ if(i.indexOf('gz_shibing')==0) continue; if(chosen.contains(i)) continue; if(lib.filter.characterDisabled(i)) continue; if(get.config('onlyguozhan')){ if(!lib.characterPack.mode_guozhan[i]) continue; if(get.is.jun(i)) continue; } if(lib.character[i][4].contains('hiddenSkill')) continue; if(lib.character[i][2]==3||lib.character[i][2]==4||lib.character[i][2]==5) event.list.push(i); } _status.characterlist=event.list.slice(0); _status.yeidentity=[]; if(_status.brawl&&_status.brawl.chooseCharacterFilter){ event.list=_status.brawl.chooseCharacterFilter(event.list); } event.list.randomSort(); // var list=event.list.splice(0,parseInt(get.config('choice_num'))); var list; if(_status.brawl&&_status.brawl.chooseCharacter){ list=_status.brawl.chooseCharacter(event.list,game.me); } else{ list=game.getCharacterChoice(event.list,parseInt(get.config('choice_num'))); } if(_status.auto){ event.ai(game.me,list); lib.init.onfree(); } else if(chosen.length){ game.me.init(chosen[0],chosen[1],false); lib.init.onfree(); } else{ var dialog=ui.create.dialog('选择角色','hidden',[list,'character']); if(!_status.brawl||!_status.brawl.noAddSetting){ if(get.config('change_identity')){ addSetting(dialog); } } var next=game.me.chooseButton(dialog,true,2).set('onfree',true); next.filterButton=function(button){ if(ui.dialog.buttons.length<=10){ for(var i=0;ilist.length){ num=5; } else if(lib.configOL.number*7>list.length){ num=6; } else{ num=7; } var filterButton=function(button){ if(ui.dialog){ if(ui.dialog.buttons.length<=10){ for(var i=0;i根据“烽火”的数量,所有吴势力角色可于其准备阶段开始时选择并获得其中一个技能直到回合结束:一张以上:〖英姿〗;两张以上:〖好施〗;三张以上:〖涉猎〗;四张以上:〖度势〗;五张以上:可额外选择一项。
    锁定技,当你受到【杀】或锦囊牌造成的伤害后,你将一张“烽火”置入弃牌堆。', yuanjiangfenghuotu_ab:'江图', yuanjiangfenghuotu_bg:'图', wuxin:'悟心', wuxin_info:'摸牌阶段开始时,你可以观看牌堆顶的X张牌(X为群势力角色的数量),然后将这些牌以任意顺序置于牌堆顶', hongfa:'弘法', hongfa_use:'天兵', hongfa_respond:'天兵', hongfa_info:'君主技,锁定技,此武将牌明置时,你获得“黄巾天兵符”;准备阶段开始时,若没有“天兵”,你将牌堆顶的X张牌置于“黄巾天兵符”上,称为“天兵”(X为群势力角色的数量)', wendao:'问道', wendao_info:'出牌阶段限一次,你可以弃置一张不为【太平要术】的红色牌,然后获得弃牌堆或场上的一张【太平要术】。', huangjintianbingfu:'黄巾天兵符', huangjintianbingfu_ab:'兵符', huangjintianbingfu_bg:'符', huangjintianbingfu_info:'锁定技 :当你计算群势力角色数时,每一张“天兵”均可视为一名群势力角色。
    当你失去体力时,你可改为将一张“天兵”置入弃牌堆。
    与你势力相同的角色可将一张“天兵”当作【杀】使用或打出。', wuhujiangdaqi:'五虎将大旗', wuhujiangdaqi_ab:'将旗', wuhujiangdaqi_bg:'旗', wuhujiangdaqi_info:'存活的蜀势力角色的技能按以下规则改动:
    武圣:将“红色牌”改为“任意牌”
    咆哮:增加描述“你使用的【杀】无视其他角色的防具”
    龙胆:增加描述“你发动〖龙胆〗使用或打出牌时摸一张牌”
    烈弓:增加描述“你的攻击范围+1”
    铁骑:将“一张明置的武将牌”改为“所有明置的武将牌”', zhangwu:'章武', zhangwu_info:'锁定技。当【飞龙夺凤】进入弃牌堆或其他角色的装备区时,你获得之。当你失去【飞龙夺风】时,展示之,然后将此牌置于牌堆底并摸两张牌', shouyue:'授钺', shouyue_info:'君主技。只要此武将牌处于明置状态,你便拥有“五虎将大旗”。', jizhao:'激诏', jizhao_bg:'诏', jizhao_info:'限定技。当你处于濒死状态时,你可以将手牌补至体力上限,体力回复至2点,失去技能〖授钺〗并获得技能〖仁德〗。', gzshoucheng:'守成', gzshoucheng_info:'当与你势力相同的一名角色于其回合外失去手牌时,若其没有手牌,则你可以令其摸一张牌。', gzmingshi:'名士', gzmingshi_info:'锁定技,当你受到伤害时,若伤害来源有暗置的武将牌,此伤害-1。', fengshi:'锋矢', fengshi_sha:'锋矢', fengshi_info:'阵法技,在一个围攻关系中,若你是围攻角色,则你或另一名围攻角色使用【杀】指定被围攻角色为目标后,可令该角色弃置装备区内的一张牌。', gzsuishi:'随势', gzsuishi2:'随势', gzsuishi_info:'锁定技,其他角色进入濒死状态时,若伤害来源与你势力相同,你摸一张牌;其他角色死亡时,若其与你势力相同,你失去1点体力。', baoling:'暴凌', baoling_info:'主将技,锁定技,出牌阶段结束时,若你有副将,则你移除副将,然后加3点体力上限,回复3点体力,失去技能〖暴凌〗并获得〖崩坏〗', yingyang:'鹰扬', yingyang_info:'当你的拼点牌亮出后,你可以令此牌的点数+3或-3(至多为K,至少为1)。', hunshang:'魂殇', hunshang_info:'副将技,此武将牌减少半个阴阳鱼;准备阶段,若你的体力值不大于1,则你本回合获得“英姿”和“英魂”', gzguixiu:'闺秀', gzguixiu_info:'当你明置此武将牌时,你可以摸两张牌;当你移除此武将牌时,你可以回复1点体力。', gzcunsi:'存嗣', gzcunsi_info:'出牌阶段,你可以移除此武将牌并选择一名角色,然后其获得技能〖勇决〗,若你选择的目标角色不是自己,则其摸两张牌。', gzyongjue:'勇决', gzyongjue_info:'与你势力相同的一名角色于其回合内使用【杀】结算完成后,若此牌是其本回合内使用的第一张牌,则其可以获得此牌对应的所有实体牌。', gzqianxi:'潜袭', gzqianxi_info:'准备阶段开始时,你可以进行判定,然后你选择距离为1的一名角色,直到回合结束,该角色不能使用或打出与结果颜色相同的手牌', gzshangyi:'尚义', gzshangyi_info:'出牌阶段限一次,你可以令一名其他角色观看你的手牌。若如此做,你选择一项:1.观看其手牌并可以弃置其中的一张黑色牌;2.观看其所有暗置的武将牌。', niaoxiang:'鸟翔', niaoxiang_sha:'鸟翔', niaoxiang_info:'阵法技,在同一个围攻关系中,若你是围攻角色,则你或另一名围攻角色使用【杀】指定被围攻角色为目标后,该角色需依次使用两张【闪】才能抵消。', yicheng:'疑城', yicheng_info:'当与你势力相同的一名角色成为【杀】的目标后,你可以令该角色摸一张牌,然后弃置一张牌。', yizhi:'遗志', yizhi_info:'副将技,此武将牌减少半个阴阳鱼。若你的主将拥有技能〖观星〗,则将其描述中的X改为5;若你的主将没有技能〖观星〗,则你视为拥有技能〖观星〗。', tianfu:'天覆', tianfu_info:'主将技,阵法技,若当前回合角色与你处于同一队列,则你视为拥有技能〖看破〗。', ziliang:'资粮', ziliang_info:'副将技,当与你势力相同的一名角色受到伤害后,你可以将一张“田”交给该角色 ', gzjixi:'急袭', gzjixi_info:'主将技,此武将牌减少半个阴阳鱼。你可以将一张“田”当作【顺手牵羊】使用。', huyuan:'护援', huyuan_info:'结束阶段开始时,你可以将一张装备牌置入一名角色的装备区,然后你可以弃置该角色距离为1的一名角色的一张牌。', heyi:'鹤翼', heyi_info:'阵法技,与你处于同一队列的其他角色视为拥有技能【飞影】。', gz_shibing1wei:'魏兵', gz_shibing2wei:'魏兵', gz_shibing1shu:'蜀兵', gz_shibing2shu:'蜀兵', gz_shibing1wu:'吴兵', gz_shibing2wu:'吴兵', gz_shibing1qun:'群兵', gz_shibing2qun:'群兵', gz_shibing1jin:'晋兵', gz_shibing2jin:'晋兵', gz_shibing1ye:'士兵', gz_shibing2ye:'士兵', gz_shibing1key:'键兵', gz_shibing2key:'键兵', gzduanchang:'断肠', gzduanchang_info:'锁定技,当你死亡时,你令杀死你的角色失去一张武将牌上的所有技能。', gzweimu:'帷幕', gzweimu_info:'锁定技,当你成为黑色锦囊牌的目标时,取消之。', gzqianxun:'谦逊', gzqianxun_info:'锁定技,当你成为【顺手牵羊】或【乐不思蜀】的目标时,取消之。', gzkongcheng:'空城', gzkongcheng_info:'锁定技,当你成为【杀】或【决斗】的目标时,若你没有手牌,则取消之', gzxiaoji:'枭姬', gzxiaoji_info:'当你失去装备区里的牌后,你可以摸两张牌。', gzrende:'仁德', gzrende_info:'出牌阶段,你可以将任意张手牌交给其他角色,然后若你于此阶段内给出第三张“仁德”牌时,你回复1点体力', gzzhiheng:'制衡', gzzhiheng_info:'出牌阶段限一次,你可以弃置至多X张牌(X为你的体力上限),然后摸等量的牌。', duoshi:'度势', duoshi_info:'出牌阶段限四次,你可以将一张红色手牌当做【以逸待劳】使用。', gzxiaoguo:'骁果', gzxiaoguo_info:'其他角色的结束阶段开始时,你可以弃置一张基本牌,令该角色选择一项:1.弃置一张装备牌;2.受到你对其造成的1点伤害。', gz_key_ushio:'冈崎汐', ushio_huanxin:'幻心', ushio_huanxin_info:'当你受到伤害后/使用【杀】造成伤害后/使用装备牌后,你可进行判定。然后你获得判定牌并弃置一张牌。', ushio_xilv:'汐旅', ushio_xilv2:'汐旅', ushio_xilv_info:'锁定技,此武将牌可作为任意单势力武将牌的副将。当你进行判定后,你令你的手牌上限+1直至你的下个结束阶段。', guozhan_default:"国战标准", guozhan_zhen:"君临天下·阵", guozhan_shi:"君临天下·势", guozhan_bian:"君临天下·变", guozhan_quan:"君临天下·权", guozhan_jun:"君主武将", guozhan_jin:'文德武备', guozhan_single:'君临天下EX', guozhan_double:'双势力武将', guozhan_yexinjia:'野心家武将', guozhan_zongheng:'纵横捭阖', guozhan_others:"其他", }, junList:['liubei','zhangjiao','sunquan','caocao'], guozhanPile_yingbian:[ ['spade',1,'juedou'], ['spade',1,'shandian'], ['spade',2,'cixiong'], ['spade',2,'bagua'], ['spade',2,'taigongyinfu'], ['spade',3,'shuiyanqijunx',null,['yingbian_zhuzhan']], ['spade',3,'zhujinqiyuan',null,['yingbian_zhuzhan']], ['spade',4,'guohe'], ['spade',4,'shuiyanqijunx',null,['yingbian_zhuzhan']], ['spade',5,'sha'], ['spade',5,'jueying'], ['spade',6,'qinggang'], ['spade',6,'sha','ice'], ['spade',7,'sha'], ['spade',7,'sha','ice'], ['spade',8,'sha','ice'], ['spade',8,'sha','ice'], ['spade',9,'sha'], ['spade',9,'jiu'], ['spade',10,'sha',null,['yingbian_canqu']], ['spade',10,'bingliang'], ['spade',11,'sha',null,['yingbian_canqu']], ['spade',11,'wuxie',null,['yingbian_kongchao']], ['spade',12,'zhangba'], ['spade',12,'tiesuo'], ['spade',13,'nanman',null,['yingbian_fujia']], ['spade',13,'wutiesuolian'], ['heart',1,'taoyuan'], ['heart',1,'wanjian'], ['heart',2,'shan'], ['heart',2,'chuqibuyi',null,['yingbian_zhuzhan']], ['heart',3,'wugu'], ['heart',3,'chuqibuyi',null,['yingbian_zhuzhan']], ['heart',4,'tao'], ['heart',4,'sha','fire',['yingbian_canqu']], ['heart',5,'qilin'], ['heart',5,'chitu'], ['heart',6,'tao'], ['heart',6,'lebu'], ['heart',7,'tao'], ['heart',7,'dongzhuxianji'], ['heart',8,'tao'], ['heart',8,'dongzhuxianji'], ['heart',9,'tao'], ['heart',9,'yuanjiao'], ['heart',10,'tao'], ['heart',10,'sha'], ['heart',11,'shan'], ['heart',11,'yiyi'], ['heart',12,'tao'], ['heart',12,'sha'], ['heart',12,'guohe'], ['heart',13,'shan'], ['heart',13,'zhuahuang'], ['diamond',1,'zhuge'], ['diamond',1,'wuxinghelingshan'], ['diamond',2,'shan'], ['diamond',2,'tao'], ['diamond',3,'shan'], ['diamond',3,'shunshou'], ['diamond',4,'yiyi'], ['diamond',4,'sha','fire',['yingbian_canqu']], ['diamond',5,'guanshi'], ['diamond',5,'sha','fire'], ['diamond',6,'shan'], ['diamond',6,'wuliu'], ['diamond',7,'shan',null,['yingbian_kongchao']], ['diamond',7,'shan',null,['yingbian_kongchao']], ['diamond',8,'shan',null,['yingbian_kongchao']], ['diamond',8,'shan',null,['yingbian_kongchao']], ['diamond',9,'shan'], ['diamond',9,'jiu'], ['diamond',10,'shan'], ['diamond',10,'sha'], ['diamond',11,'shan'], ['diamond',11,'sha'], ['diamond',12,'sha'], ['diamond',12,'sanjian'], ['diamond',12,'wuxie',null,['guo']], ['diamond',13,'shan'], ['diamond',13,'zixin'], ['club',1,'juedou'], ['club',1,'huxinjing'], ['club',2,'sha'], ['club',2,'tengjia'], ['club',2,'renwang'], ['club',3,'guohe'], ['club',3,'zhibi'], ['club',4,'sha',null,['yingbian_kongchao']], ['club',4,'zhibi'], ['club',5,'sha',null,['yingbian_kongchao']], ['club',5,'tongque'], ['club',6,'lebu'], ['club',6,'sha','thunder'], ['club',7,'nanman'], ['club',7,'sha','thunder'], ['club',8,'sha'], ['club',8,'sha','thunder'], ['club',9,'sha'], ['club',9,'jiu'], ['club',10,'sha'], ['club',10,'bingliang'], ['club',11,'sha'], ['club',11,'sha'], ['club',12,'zhujinqiyuan',null,['yingbian_zhuzhan']], ['club',12,'tiesuo'], ['club',13,'wuxie',null,['guo']], ['club',13,'tiesuo'], ], guozhanPile_old:[ ['spade',1,'juedou'], ['spade',1,'shandian'], ['spade',2,'cixiong'], ['spade',2,'bagua'], ['spade',2,'hanbing'], ['spade',3,'guohe'], ['spade',3,'shunshou'], ['spade',4,'guohe'], ['spade',4,'shunshou'], ['spade',5,'sha'], ['spade',5,'jueying'], ['spade',6,'qinggang'], ['spade',6,'sha','thunder'], ['spade',7,'sha'], ['spade',7,'sha','thunder'], ['spade',8,'sha'], ['spade',8,'sha'], ['spade',9,'sha'], ['spade',9,'jiu'], ['spade',10,'sha'], ['spade',10,'bingliang'], ['spade',11,'sha'], ['spade',11,'wuxie'], ['spade',12,'zhangba'], ['spade',12,'tiesuo'], ['spade',13,'nanman'], ['spade',13,'dawan'], ['club',1,'juedou'], ['club',1,'baiyin'], ['club',2,'sha'], ['club',2,'tengjia'], ['club',2,'renwang'], ['club',3,'sha'], ['club',3,'zhibi'], ['club',4,'sha'], ['club',4,'zhibi'], ['club',5,'sha'], ['club',5,'dilu'], ['club',6,'lebu'], ['club',6,'sha','thunder'], ['club',7,'nanman'], ['club',7,'sha','thunder'], ['club',8,'sha'], ['club',8,'sha','thunder'], ['club',9,'sha'], ['club',9,'jiu'], ['club',10,'sha'], ['club',10,'bingliang'], ['club',11,'sha'], ['club',11,'sha'], ['club',12,'jiedao'], ['club',12,'tiesuo'], ['club',13,'wuxie',null,['guo']], ['club',13,'tiesuo'], ['diamond',1,'zhuge'], ['diamond',1,'zhuque'], ['diamond',2,'shan'], ['diamond',2,'tao'], ['diamond',3,'shan'], ['diamond',3,'shunshou'], ['diamond',4,'yiyi'], ['diamond',4,'sha','fire'], ['diamond',5,'guanshi'], ['diamond',5,'sha','fire'], ['diamond',6,'shan'], ['diamond',6,'wuliu'], ['diamond',7,'shan'], ['diamond',7,'shan'], ['diamond',8,'shan'], ['diamond',8,'shan'], ['diamond',9,'shan'], ['diamond',9,'jiu'], ['diamond',10,'shan'], ['diamond',10,'sha'], ['diamond',11,'shan'], ['diamond',11,'sha'], ['diamond',12,'sha'], ['diamond',12,'sanjian'], ['diamond',12,'wuxie',null,['guo']], ['diamond',13,'shan'], ['diamond',13,'zixin'], ['heart',1,'taoyuan'], ['heart',1,'wanjian'], ['heart',2,'shan'], ['heart',2,'huogong'], ['heart',3,'wugu'], ['heart',3,'huogong'], ['heart',4,'tao'], ['heart',4,'sha','fire'], ['heart',5,'qilin'], ['heart',5,'chitu'], ['heart',6,'tao'], ['heart',6,'lebu'], ['heart',7,'tao'], ['heart',7,'wuzhong'], ['heart',8,'tao'], ['heart',8,'wuzhong'], ['heart',9,'tao'], ['heart',9,'yuanjiao'], ['heart',10,'tao'], ['heart',10,'sha'], ['heart',11,'shan'], ['heart',11,'yiyi'], ['heart',12,'tao'], ['heart',12,'sha'], ['heart',12,'guohe'], ['heart',13,'shan'], ['heart',13,'zhuahuang'], ], guozhanPile:[ ['spade',1,'juedou'], ['spade',1,'shandian'], ['spade',2,'feilongduofeng'], ['spade',2,'bagua'], ['spade',2,'hanbing'], ['spade',3,'guohe'], ['spade',3,'shunshou'], ['spade',4,'guohe'], ['spade',4,'shunshou'], ['spade',5,'sha'], ['spade',5,'jueying'], ['spade',6,'qinggang'], ['spade',6,'sha','thunder'], ['spade',7,'sha'], ['spade',7,'sha','thunder'], ['spade',8,'sha'], ['spade',8,'sha'], ['spade',9,'sha'], ['spade',9,'jiu'], ['spade',10,'sha'], ['spade',10,'bingliang'], ['spade',11,'sha'], ['spade',11,'wuxie'], ['spade',12,'zhangba'], ['spade',12,'tiesuo'], ['spade',13,'nanman'], ['spade',13,'dawan'], ['club',1,'juedou'], ['club',1,'baiyin'], ['club',2,'sha'], ['club',2,'tengjia'], ['club',2,'renwang'], ['club',3,'sha'], ['club',3,'zhibi'], ['club',4,'sha'], ['club',4,'zhibi'], ['club',5,'sha'], ['club',5,'dilu'], ['club',6,'lebu'], ['club',6,'sha','thunder'], ['club',7,'nanman'], ['club',7,'sha','thunder'], ['club',8,'sha'], ['club',8,'sha','thunder'], ['club',9,'sha'], ['club',9,'jiu'], ['club',10,'sha'], ['club',10,'bingliang'], ['club',11,'sha'], ['club',11,'sha'], ['club',12,'jiedao'], ['club',12,'tiesuo'], ['club',13,'wuxie',null,['guo']], ['club',13,'tiesuo'], ['diamond',1,'zhuge'], ['diamond',1,'zhuque'], ['diamond',2,'shan'], ['diamond',2,'tao'], ['diamond',3,'shan'], ['diamond',3,'shunshou'], ['diamond',4,'yiyi'], ['diamond',4,'sha','fire'], ['diamond',5,'guanshi'], ['diamond',5,'sha','fire'], ['diamond',6,'shan'], ['diamond',6,'wuliu'], ['diamond',7,'shan'], ['diamond',7,'shan'], ['diamond',8,'shan'], ['diamond',8,'shan'], ['diamond',9,'shan'], ['diamond',9,'jiu'], ['diamond',10,'shan'], ['diamond',10,'sha'], ['diamond',11,'shan'], ['diamond',11,'sha'], ['diamond',12,'sha'], ['diamond',12,'sanjian'], ['diamond',12,'wuxie',null,['guo']], ['diamond',13,'shan'], ['diamond',13,'zixin'], ['heart',1,'taoyuan'], ['heart',1,'wanjian'], ['heart',2,'shan'], ['heart',2,'huogong'], ['heart',3,'wugu'], ['heart',3,'taipingyaoshu'], ['heart',3,'huogong'], ['heart',4,'tao'], ['heart',4,'sha','fire'], ['heart',5,'qilin'], ['heart',5,'chitu'], ['heart',6,'tao'], ['heart',6,'lebu'], ['heart',7,'tao'], ['heart',7,'wuzhong'], ['heart',8,'tao'], ['heart',8,'wuzhong'], ['heart',9,'tao'], ['heart',9,'yuanjiao'], ['heart',10,'tao'], ['heart',10,'sha'], ['heart',11,'shan'], ['heart',11,'yiyi'], ['heart',12,'tao'], ['heart',12,'sha'], ['heart',12,'guohe'], ['heart',13,'shan'], ['heart',13,'zhuahuang'], ['spade',1,'xietianzi',null,['lianheng']], ['spade',2,'minguangkai'], ['spade',3,'huoshaolianying',null,['lianheng']], ['spade',4,'sha'], ['spade',5,'qinglong'], ['spade',6,'jiu',null,['lianheng']], ['spade',7,'sha'], ['spade',8,'sha'], ['spade',9,'sha','thunder'], ['spade',10,'sha','thunder'], ['spade',11,'sha','thunder',['lianheng']], ['spade',12,'lulitongxin'], ['spade',13,'wuxie'], ['heart',1,'lianjunshengyan'], ['heart',2,'diaohulishan'], ['heart',3,'jingfanma',null,['lianheng']], ['heart',4,'shan'], ['heart',5,'shan'], ['heart',6,'shan'], ['heart',7,'shan'], ['heart',8,'tao'], ['heart',9,'tao'], ['heart',10,'sha'], ['heart',11,'sha'], ['heart',12,'huoshaolianying',null,['lianheng']], ['heart',13,'shuiyanqijunx'], ['club',1,'yuxi'], ['club',2,'huxinjing',null,['lianheng']], ['club',3,'chiling'], ['club',4,'sha'], ['club',5,'sha','thunder',['lianheng']], ['club',6,'sha'], ['club',7,'sha'], ['club',8,'sha'], ['club',9,'jiu'], ['club',10,'lulitongxin'], ['club',11,'huoshaolianying',null,['lianheng']], ['club',12,'shuiyanqijunx'], ['club',13,'wuxie',null,['guo']], ['diamond',1,'xietianzi',null,['lianheng']], ['diamond',2,'tao'], ['diamond',3,'tao',null,['lianheng']], ['diamond',4,'xietianzi',null,['lianheng']], ['diamond',5,'muniu'], ['diamond',6,'shan'], ['diamond',7,'shan'], ['diamond',8,'sha','fire'], ['diamond',9,'sha','fire'], ['diamond',10,'diaohulishan',null,['lianheng']], ['diamond',11,'wuxie',null,['guo']], ['diamond',12,'fangtian'], ['diamond',13,'shan'], ['diamond',6,'dinglanyemingzhu'], ['heart',13,'liulongcanjia'], //['spade',12,'gz_haolingtianxia'], //['diamond',1,'gz_kefuzhongyuan'], //['heart',1,'gz_guguoanbang'], //['club',12,'gz_wenheluanwu'], ], element:{ content:{ hideCharacter:function(){ 'step 0' event.trigger('hideCharacterEnd'); 'step 1' event.trigger('hideCharacterAfter'); }, chooseJunlingFor:function(){ 'step 0' var list=['junling1','junling2','junling3','junling4','junling5','junling6']; list=list.randomGets(2).sort(); for(var i=0;i选项'+get.cnNumber(i+1,true)+':'+event.choiceList[i]+'
    '); controls.push('选项'+get.cnNumber(i+1,true)); } } else if(event.controls) controls=event.controls; else controls=['执行该军令','不执行该军令']; if(!event.ai) event.ai=function(){return Math.floor(controls.length*Math.random())}; player.chooseControl(controls).set('dialog',dialog).set('ai',event.ai); 'step 1' event.result={ index:result.index, control:result.control, }; }, carryOutJunling:function(){ 'step 0' switch(event.junling){ case 'junling1':{ if(targets[0].isAlive()){ player.line(targets,'green'); targets[0].damage(player); } break; } case 'junling2':player.draw();event.num=1;break; case 'junling3':player.loseHp();break; case 'junling4':player.addTempSkill('junling4_eff');player.addTempSkill('fengyin_vice');player.addTempSkill('fengyin_main');break; case 'junling5':player.turnOver();player.addTempSkill('junling5_eff');break; } 'step 1' if(event.junling=='junling2'&&source!=player&&player.countCards('he')>0){ player.chooseCard('交给'+get.translation(source)+'第'+get.cnNumber(event.num)+'张牌(共两张)','he',true); event.ing=true; } if(event.junling=='junling6'){ var position='',num0=0; if(player.countCards('h')){position+='h';num0++;} if(player.countCards('e')){position+='e';num0++;} player.chooseCard('选择一张手牌和一张装备区内牌(若有),然后弃置其余的牌',position,num0,function(card){ if(ui.selected.cards.length) return get.position(card)!=get.position(ui.selected.cards[0]); return true; },true).set('complexCard',true).set('ai',function(card){return get.value(card)}); } 'step 2' if(event.junling=='junling2'&&source!=player){ if(result.cards.length&&event.ing){ source.gain(result.cards,player,'giveAuto'); } event.num++; if(event.num<3){ event.ing=false; event.goto(1); } } if(event.junling=='junling6'){ var cards=player.getCards('he'); for(var i=0;imap[player].length) return false; } return true; }, isNotMajor:function(){ for(var i=0;i0){ for(var i=0;i0){ if(effect<1) c=0.5; else c=1; if(targets.length==1&&targets[0]==this); else if(targets.length==1) this.ai.shown+=0.2*c; else this.ai.shown+=0.1*c; } } if(this.ai.shown>0.95) this.ai.shown=0.95; if(this.ai.shown<-0.5) this.ai.shown=-0.5; }, } }, get:{ guozhanReverse:function(name1,name2){ if(get.is.double(name2)) return false; if(['gz_xunyou','gz_lvfan','gz_liubei'].contains(name2)) return true; if(name1=='gz_re_xushu') return true; if(name2=='gz_dengai') return lib.character[name1][2]%2==1; if(['gz_sunce','gz_jiangwei'].contains(name1)) return name2=='gz_zhoutai'||lib.character[name2][2]%2==1; return false; }, guozhanRank:function(name,player){ if(name.indexOf('gz_shibing')==0) return -1; if(name.indexOf('gz_jun_')==0) return 7; if(player){ var skills=lib.character[name][3].slice(0); for(var i=0;i0})) eff1=2; else{ if(get.damageEffect(targets[0],performer,source)>=0) eff1=2; else eff1=-2; if(get.damageEffect(targets[0],source,performer)>=0) eff2=2; else eff2=-2; } break; case 'junling2': if(performer.countCards('he')){eff1=1;eff2=0;} else{eff1=2;eff2=-1;} break; case 'junling3': if(performer.hp==1&&!performer.hasSkillTag('save',true)) eff2=-5; else{ if(performer==viewer){ if(performer.hasSkillTag('maihp',true)) eff2=3; else eff2=-2; } else{ if(performer.hasSkillTag('maihp',false)) eff2=3; else eff2=-2; } } break; case 'junling4':eff1=0;eff2=-2;break; case 'junling5': var td=performer.isTurnedOver(); if(td){ if(performer==viewer){ if(_status.currentPhase==performer&&performer.hasSkill('jushou')) eff2=-3; else eff2=3; } else eff2=3; } else{ if(performer==viewer){ if(performer.hasSkillTag('noturn',true)) eff2=0; else eff2=-3; } else{ if(performer.hasSkillTag('noturn',false)) eff2=0; else eff2=-3; } } break; case 'junling6': if(performer.countCards('h')>1) eff2+=1-performer.countCards('h'); if(performer.countCards('e')>1) eff2+=1-performer.countCards('e'); break; } return Math.sign(att1)*eff1+Math.sign(att2)*eff2; }, realAttitude:function(from,to,difficulty,toidentity){ if(from.identity==toidentity&&toidentity!='ye'){ return 4+difficulty; } if(from.identity=='unknown'&&lib.character[from.name1][1]==toidentity){ if(from.wontYe()) return 4+difficulty; } var groups=[]; var map={},sides=[],pmap=_status.connectMode?lib.playerOL:game.playerMap,player; for(var i of game.players){ if(i.identity=='unknown') continue; var added=false; for(var j of sides){ if(i.isFriendOf(pmap[j])){ added=true; map[j].push(i); if(i==this) player=j; break; } } if(!added){ map[i.playerid]=[i]; sides.push(i.playerid); if(i==this) player=i.playerid; } } for(var i in map) groups.push(map[i].length); var max=Math.max.apply(this,groups); if(max<=1) return -3; var from_p; if(from.identity=='unknown'&&from.wontYe()) from_p=get.population(lib.character[from.name1][1]); else from_p=game.countPlayer(function(current){ return current.isFriendOf(from); }); var to_p=game.countPlayer(function(current){ return current.isFriendOf(to); }); if(to_p==max) return -5; if(from_p==max) return -2-to_p; if(max>=game.players.length/2){ if(to_p<=from_p){ return 0.5; } return 0; } if(to_p=0.5) return att*to.ai.shown; var nshown=0; for(var i=0;i=game.players.length/2&&att>=0){ return 0; } return Math.min(0,Math.random()-0.5)+difficulty; } if(to.ai.shown>=0.2){ if(att>2){ return Math.max(0,Math.random()-0.5)+difficulty; } if(att>=0){ return 0; } return Math.min(0,Math.random()-0.7)+difficulty; } if(att>2){ return Math.max(0,Math.random()-0.7)+difficulty; } if(att>=0){ return Math.min(0,Math.random()-0.3)+difficulty; } return Math.min(0,Math.random()-0.5)+difficulty; }, }, help:{ '国战模式': '
    声明
    • 以下所有规则均为根据公开爆料整理,经村规改动后制定的临时规则。不代表任何官方意见。请以后续发布的官方规则作为标准。
    ' +'
    双势力武将
    • 双势力武将牌只能放在副将位置。主将可以为普通武将牌和野心家武将牌。
    • 双势力武将牌明置时,势力按照主将的势力进行结算(无论是否明置主将)。胜负条件与正常的单势力武将相同。
    • 变更副将时,可以选择包含原势力的双势力武将牌。左慈发动【役鬼】时,可以使用双势力武将牌同时指定两个不同势力的角色为目标。
    • 特殊地,“冈崎汐”作为多势力武将牌,结算流程和规则与其他双势力武将相同。
    ' +'
    野心家武将
    • 野心家武将只能放在主将位置。副将可以为任意非野心家武将牌。
    • 选择了野心家武将牌的角色(以下简称“野心家角色”)仅明置副将时,若副将为单势力武将牌,则势力暂时视为与该武将牌相同。若副将为双势力武将牌,则势力视为野心家。
    • 野心家角色明置主将时,其势力改为野心家。若其是首次明置该武将牌,则其获得一个“野心家”标记。
    • “野心家”标记可以当做“先驱”标记,“阴阳鱼”标记或是“珠联璧合”标记使用。当同时拥有两种标记时,优先弃置原装标记,下次发动时才弃置“野心家”标记。
    • 野心家角色变更副将时,若其主将未明置过,则按照副将的势力进行变更。若主将已经明置过,则可以选择所有的非野心家武将牌。左慈发动【役鬼】时,可以使用野心家武将牌同时指定所有势力的角色为目标。' +'
    • 当场上触发了胜利条件时,若这些角色中存在未明置过主将的野心家角色,则这些野心家角色选择是否“暴露野心”。若无人选择“是”且场上存在非野心家角色存活,则所有非野心家角色胜利,野心家角色失败。若有人选择“是”,则这些角色明置主将。然后若场上存活角色数大于等于3,则这些角色选择是否发起“拉拢人心”
    • 选择发起“拉拢人心”的野心家角色,令所有其他非野心家角色和非君主角色依次选择是否和该野心家角色“结盟”。若有人选择“是”,则野心家角色弃置“野心家”标记,且该角色将势力改为野心家,将手牌摸至四张并回复1点体力,且视为和发起“拉拢人心”的野心家角色势力相同,并终止对其他角色的询问。
    ' +'
    纵横捭阖
    • 当一名角色对目标角色发动具有拥有“纵横”衍生技的技能时,其可以令对方获得“纵横”衍生技直到其下回合结束。
    ', }, }; });