'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]){ var group=lib.character[i][4].find(group=>lib.group.includes(group)||group=='key'||group.startsWith('gzgroup:')); if(group){ if(group.startsWith('gzgroup:')) lib.character[i][1]=group.slice(8); else lib.character[i][1]=group; } else lib.character[i][1]='qun'; } else lib.character[i][1]='qun'; } } }, 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]){ var group=lib.character[i][4].find(group=>lib.group.includes(group)||group=='key'); if(group) lib.character[i][1]=group; else lib.character[i][1]='qun'; } 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'].includes(_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; lib.translate.gzwanyi_info='出牌阶段每项各限一次。你可以将一张带有“应变”标签的牌当做【逐近弃远】/【洞烛先机】/【水淹七军】/【出其不意】使用。'; 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; } if(get.config('separatism')) _status.separatism=true; } "step 1" if(_status.connectMode){ _status.mode=lib.configOL.guozhan_mode; if(!['normal','yingbian','old'].includes(_status.mode)) _status.mode='normal'; if(lib.configOL.separatism) _status.separatism=true; //决定牌堆 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; lib.translate.gzwanyi_info='出牌阶段每项各限一次。你可以将一张带有“应变”标签的牌当做【逐近弃远】/【洞烛先机】/【水淹七军】/【出其不意】使用。' break; default:lib.card.list=lib.guozhanPile.slice(0);break; } game.fixedPile=true; game.broadcastAll((mode,separatism)=>{ _status.mode=mode; if(separatism) _status.separatism=true; if(mode=='yingbian'){ delete lib.translate.shuiyanqijunx_info_guozhan; } for(var i=0;ilib.group.includes(group)||group=='key'); if(group) lib.character[i][1]=group; else lib.character[i][1]='qun'; } else lib.character[i][1]='qun'; } } //lib.characterReplace={}; },_status.mode,_status.separatism); game.randomMapOL(); } else{ //lib.characterReplace={}; for(var i=0;i0; }); }, direct:true, frequent:true, preHidden:true, content:function(){ 'step 0' player.chooseTarget(get.prompt2('gzdiaodu'),function(card,player,current){ return current.isFriendOf(player)&¤t.countGainableCards(player,'e')>0; }).set('ai',function(target){ var num=0; if(target.hasSkill('gzxiaoji')) num+=2.5; if(target.isDamaged()&&target.getEquip('baiyin')) num+=2.5; if(target.hasSkill('xuanlve')) num+=2; return num; }).setHiddenSkill('gzdiaodu'); 'step 1' if(result.bool){ var target=result.targets[0] event.target=target; player.logSkill('gzdiaodu',target); player.gainPlayerCard(target,'e',true); } else event.finish(); 'step 2' if(result.bool&&player.getCards('h').includes(result.cards[0])){ event.card=result.cards[0]; player.chooseTarget('将'+get.translation(event.card)+'交给另一名角色',function(card,player,current){ return current!=player&¤t!=_status.event.target; },true).set('target',target); } else event.finish(); 'step 3' if(result.bool){ var target=result.targets[0]; player.line(target,'green'); player.give(card,target); } }, group:'gzdiaodu_use', subSkill:{ use:{ trigger:{global:'useCard'}, filter:function(event,player){ return get.type(event.card)=='equip'&&event.player.isIn()&&event.player.isFriendOf(player)&&(player==event.player||player.hasSkill('gzdiaodu')); }, direct:true, content:function(){ 'step 0' var next=trigger.player.chooseBool(get.prompt('gzdiaodu'),'摸一张牌'); if(player.hasSkill('gzdiaodu')) next.set('frequentSkill','gzdiaodu'); if(player==trigger.player) next.setHiddenSkill('gzdiaodu'); 'step 1' if(result.bool){ player.logSkill('gzdiaodu',trigger.player); trigger.player.draw('nodelay'); } }, }, }, }, //徐庶 gzqiance:{ trigger:{global:'useCardToPlayered'}, filter:function(event,player){ if(!event.isFirstTarget||get.type/*2*/(event.card)!='trick') return false;//延时锦囊不能响应有个锤用 return event.player.isFriendOf(player)&&event.targets.some(target=>target.isMajor()); }, check:function(event,player){ var num=0,targets=event.targets.filter(target=>target.isMajor()); for(var target of targets) num+=get.sgn(get.attitude(player,target)*get.effect(target,event.card,event.player,player)); return num>=0; }, logTarget:'player', content:function(){ trigger.getParent().directHit.addArray(trigger.targets.filter(target=>target.isMajor())); }, }, gzjujian:{ init:function(player){ if(player.checkViceSkill('gzjujian')&&!player.viceChanged) player.removeMaxHp(); }, viceSkill:true, audio:'gzjiancai', trigger:{global:'dying'}, filter:function(event,player){ return event.player.isFriendOf(player); }, forced:true, logTarget:'player', content:function(){ trigger.player.recover(1-trigger.player.hp); player.changeVice(); }, }, //彭羕 gztongling:{ audio:'daming', trigger:{source:'damageSource'}, filter:function(event,player){ if(event.player.isFriendOf(player)) return false; return player.isPhaseUsing()&&event.player.isIn()&&!player.hasSkill('gztongling_used'); }, direct:true, content:function(){ 'step 0' var str=''; if(get.itemtype(trigger.cards)=='cards'&&trigger.cards.filterInD().length) str+=';未造成伤害,其获得'+get.translation(trigger.cards.filterInD()); player.chooseTarget(get.prompt('gztongling'),'令一名势力与你相同的角色选择是否对其使用一张牌。若使用且此牌:造成伤害,你与其各摸两张牌'+str,function(card,player,target){ return target.isFriendOf(player); }).set('ai',function(target){ var aim=_status.event.aim; var cards=target.getCards('hs',function(card){ return target.canUse(card,aim,false)&&get.effect(aim,card,target,player)>0&&get.effect(aim,card,target,target)>0; }) if(cards.length) return cards.some(card=>get.tag(card,'damage'))?2:1; return 0; }).set('aim',trigger.player); 'step 1' if(result.bool){ var target=result.targets[0]; event.target=target; player.logSkill('gztongling',target); player.addTempSkill('gztongling_used','phaseUseAfter'); player.line2([target,trigger.player]); target.chooseToUse(function(card,player,event){ return lib.filter.filterCard.apply(this,arguments); },'通令:是否对'+get.translation(trigger.player)+'使用一张牌?').set('targetRequired',true).set('complexSelect',true).set('filterTarget',function(card,player,target){ if(target!=_status.event.sourcex&&!ui.selected.targets.includes(_status.event.sourcex)) return false; return lib.filter.targetEnabled.apply(this,arguments); }).set('sourcex',trigger.player).set('addCount',false); } else event.finish(); 'step 2' if(result.bool){ if(target.hasHistory('sourceDamage',evt=>evt.getParent(4).name=='gztongling')){ player.draw(2,'nodelay'); target.draw(2); } else{ if(get.itemtype(trigger.cards)=='cards'&&trigger.cards.filterInD().length&&trigger.player.isIn()) trigger.player.gain(trigger.cards.filterInD(),'gain2'); } } }, subSkill:{used:{charlotte:true}}, }, gzjinyu:{ audio:'xiaoni', trigger:{player:'showCharacterAfter'}, filter:function(event,player){ if(!game.hasPlayer(function(current){ return get.distance(player,current)<=1; })) return false; return event.toShow.some(name=>lib.character[name][3].includes('gzjinyu')); }, logTarget:function(event,player){ return game.filterPlayer(function(current){ return get.distance(player,current)<=1; }).sortBySeat(player); }, forced:true, locked:false, content:function(){ 'step 0' event.targets=game.filterPlayer(function(current){ return get.distance(player,current)<=1; }).sortBySeat(player); 'step 1' var target=event.targets.shift(); event.target=target; if(!target.isUnseen(2)){ if(get.is.jun(target)) event._result={control:'副将'}; else{ target.chooseControl('主将','副将').set('prompt','近谀:请暗置一张武将牌').set('ai',function(){ var target=_status.event.player; if(target.name=='gz_pengyang') return '主将'; if(target.name2=='gz_pengyang') return '副将'; if(lib.character[target.name][3].some(skill=>{ var info=get.info(skill); return info&&info.ai&&info.ai.maixie; })) return '主将'; if(target.name=='gz_zhoutai') return '副将'; if(target.name2=='gz_zhoutai') return '主将'; return '副将'; }); } } else{ target.chooseToDiscard(2,'he',true); event.goto(3); } 'step 2' if(result.control) target.hideCharacter(result.control=='主将'?0:1); 'step 3' if(event.targets.length) event.goto(1); }, }, //公孙渊 gzrehuaiyi:{ audio:'gzhuaiyi', enable:'phaseUse', filter:function(event,player){ return player.countCards('h')>0; }, usable:1, delay:false, content:function(){ 'step 0' var map={} player.showHandcards(); for(var i of ['red','black','none']){ if(player.countCards('h',{color:i})) map[i]=true; } if(Object.keys(map).length<2) event.finish(); else event.map=map; 'step 1' var mapx={'red':'红色','black':'黑色','none':'无色'}; player.chooseControl(Object.keys(event.map).map(color=>mapx[color])).set('ai',function(){ var list=_status.event.controls; var map={'红色':'red','黑色':'black','无色':'none'}; return list.sort((a,b)=>player.countCards('h',{color:map[a]})-player.countCards('h',{color:map[b]}))[0]; }).set('prompt','怀异:弃置一种颜色的所有牌'); 'step 2' var map={'红色':'red','黑色':'black','无色':'none'}; var cards=player.getCards('h',{color:map[result.control]}); 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.isIn()&&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.includes(card); }); if(cards.length){ player.$give(cards,player,false); game.log(player,'将',cards,'置于了武将牌上'); player.loseToSpecial(cards,'gzrehuaiyi').visible=true; } else event.finish(); 'step 8' player.addSkill('gzrehuaiyi_unmark'); player.markSkill('gzrehuaiyi'); game.delayx(); }, ai:{ order:10, result:{ player:function(player,target){ var map={}; for(var i of ['red','black','none']){ if(player.countCards('h',{color:i})) map[i]=true; } if(Object.keys(map).length<2) return 0; var num=player.maxHp-player.countCards('s',function(card){ return card.hasGaintag('gzrehuaiyi'); }); if(player.countCards('h',{color:'red'})<=num) return 1; if(player.countCards('h',{color:'black'})<=num) return 1; return 0; }, } }, marktext:'异', intro:{ mark:function(dialog,storage,player){ var cards=player.getCards('s',function(card){ return card.hasGaintag('gzrehuaiyi'); }); if(!cards||!cards.length) return; dialog.addAuto(cards); }, markcount:function(storage,player){ return player.countCards('s',function(card){ return card.hasGaintag('gzrehuaiyi'); }); }, onunmark:function(storage,player){ var cards=player.getCards('s',function(card){ return card.hasGaintag('gzrehuaiyi'); }); if(cards.length){ player.loseToDiscardpile(cards); } }, }, mod:{ aiOrder:function(player,card,num){ if(get.itemtype(card)=='card'&&card.hasGaintag('gzrehuaiyi')) return num+(player.countCards('s',function(card){ return card.hasGaintag('gzrehuaiyi'); })>player.maxHp?0.5:-0.5); }, }, subSkill:{ unmark:{ trigger:{player:'loseAfter'}, filter:function(event,player){ if(!event.ss||!event.ss.length) return false; return !player.countCards('s',function(card){ return card.hasGaintag('gzrehuaiyi'); }); }, charlotte:true, forced:true, silent:true, content:function(){ player.unmarkSkill('gzrehuaiyi'); player.removeSkill('gzrehuaiyi_unmark'); }, }, }, }, gzrezisui:{ audio:'gzzisui', trigger:{player:'phaseDrawBegin2'}, filter:function(event,player){ return !event.numFixed&&player.countCards('s',function(card){ return card.hasGaintag('gzrehuaiyi'); })>0; }, forced:true, content:function(){ trigger.num+=player.countCards('s',function(card){ return card.hasGaintag('gzrehuaiyi'); }); }, group:'gzrezisui_die', subSkill:{ die:{ audio:'gzzisui', trigger:{player:'phaseJieshuBegin'}, filter:function(event,player){ return player.countCards('s',function(card){ return card.hasGaintag('gzrehuaiyi'); })>player.maxHp; }, forced:true, content:function(){ player.die(); }, }, }, }, //南华老仙 gztaidan:{ derivation:'taipingyaoshu', audio:'tianshu', locked:true, group:'gztaidan_taipingyaoshu', }, gztaidan_taipingyaoshu:{ equipSkill:true, mod:{ maxHandcard:function(player,num){ if(!player.hasEmptySlot(2)) return; if(player.hasSkill('huangjintianbingfu')){ num+=player.getExpansions('huangjintianbingfu').length; } return num+game.countPlayer(function(current){ return current.isFriendOf(player); }); } }, audio:'tianshu', inherit:'taipingyaoshu', filter:function(event,player){ if(!player.hasEmptySlot(2)) return false; return lib.skill.taipingyaoshu.filter(event,player); }, noHidden:true, ai:{ effect:{ target:function(card,player,target){ if(!target.hasEmptySlot(2)) return; if(player==target&&get.subtype(card)=='equip2'){ if(get.equipValue(card)<=7.5) return 0; } return lib.skill.taipingyaoshu.ai.effect.target.apply(this,arguments); }, }, }, }, gzrejinghe:{ audio:'jinghe', enable:'phaseUse', usable:1, //delay:0, content:function(){ 'step 0' if(!player.storage.gzrejinghe_tianshu){ var list=lib.skill.gzrejinghe.derivation.slice(0); list.remove('gzrejinghe_faq'); var list2=list.slice(0,get.rand(0,list.length)); list.removeArray(list2); list.addArray(list2); player.storage.gzrejinghe_tianshu=list; } else{ var first=player.storage.gzrejinghe_tianshu[0]; player.storage.gzrejinghe_tianshu.remove(first); player.storage.gzrejinghe_tianshu.push(first); } game.log(player,'转动了','#g“天书”'); player.markSkill('gzrejinghe'); var skill=player.storage.gzrejinghe_tianshu[0]; event.skill=skill; var cardname='gzrejinghe_'+skill; lib.card[cardname]={ fullimage:true, image:'character:re_nanhualaoxian' }; lib.translate[cardname]=get.translation(skill); event.videoId=lib.status.videoId++; game.broadcastAll(function(player,id,card){ ui.create.dialog(get.translation(player)+'转动了“天书”',[[card],'card']).videoId=id; },player,event.videoId,game.createCard(cardname,' ',' ')); game.delay(3); 'step 1' game.broadcastAll('closeDialog',event.videoId); var targets=game.filterPlayer(current=>!current.hasSkill(event.skill)); if(!targets.length){event.finish();return;} player.chooseTarget('经合:令一名角色获得技能【'+get.translation(event.skill)+'】',function(card,player,target){ return _status.event.targets.includes(target); },true).set('ai',function(target){ var player=_status.event.player; return get.attitude(player,target); }).set('targets',targets); 'step 2' if(result.bool){ var target=result.targets[0],skill=event.skill; player.line(target); player.addTempSkill('gzrejinghe_clear',{player:'phaseBegin'}); target.addAdditionalSkill('gzrejinghe_'+player.playerid,skill); target.popup(skill); game.log(target,'获得了技能','#g【'+get.translation(skill)+'】'); } }, intro:{ name:'写满技能的天书', markcount:()=>8, mark:function(dialog,storage,player){ dialog.content.style['overflow-x']='visible'; var list=player.storage.gzrejinghe_tianshu; var core=document.createElement('div'); var centerX=-10,centerY=80,radius=80; var radian=Math.PI*2/list.length; for(var i=0;i0) player.chooseToDiscard(num,'he',true); } else{ player.addMark('gzrebushi',player.hp); event.finish(); } 'step 1' player.removeMark('gzrebushi',player.countMark('gzrebushi')); if(!player.hasMark('gzrebushi')) player.unmarkSkill('gzrebushi'); }, ai:{mingzhi_no:true}, subSkill:{ give:{ trigger:{global:'phaseZhunbeiBegin'}, filter:function(event,player){ if(event.player==player) return false; return player.hasMark('gzrebushi')&&player.countCards('he'); }, direct:true, content:function(){ 'step 0' player.chooseCard(get.prompt('gzrebushi'),'he','失去1个“义舍”标记,将一张牌交给'+get.translation(trigger.player)+'并摸两张牌').set('ai',function(card){ var player=_status.event.player; var trigger=_status.event.getTrigger(); var target=trigger.player; var num=0,current=target; while(current!=player){ if(current.isFriendOf(player)&&!current.isTurnedOver()) num++; current=current.next; } if(num>=player.countMark('gzrebushi')&&!target.isFriendOf(player)) return -1; return 6-get.value(card); }); 'step 1' if(result.bool){ player.logSkill('gzrebushi',trigger.player); player.removeMark('gzrebushi',1); if(!player.hasMark('gzrebushi')) player.unmarkSkill('gzrebushi'); trigger.player.gain(result.cards,player,'giveAuto'); player.draw(2); } }, }, }, }, gzremidao:{ group:'gzremidao_change', audio:'gzmidao', trigger:{player:'phaseJieshuBegin'}, filter:function(event,player){ return !player.getExpansions('gzremidao').length; }, content:function(){ 'step 0' player.draw(2); 'step 1' var cards=player.getCards('he'); if(!cards.length) event.finish(); else if(cards.length<=2) event._result={bool:true,cards:cards}; else player.chooseCard(2,'he',true,'选择两张牌作为“米”'); 'step 2' if(result.bool) player.addToExpansion(result.cards,player,'give').gaintag.add('gzremidao'); }, marktext:'米', intro:{ content:'expansion', markcount:'expansion', }, onremove:function(player,skill){ var cards=player.getExpansions(skill); if(cards.length) player.loseToDiscardpile(cards); }, subSkill:{ change:{ trigger:{global:'judge'}, filter:function(event,player){ return player.getExpansions('gzremidao').length&&event.player.isAlive(); }, direct:true, content:function(){ 'step 0' var list=player.getExpansions('gzremidao'); player.chooseButton([get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+get.translation(trigger.player.judging[0])+ ','+get.prompt('gzremidao'),list,'hidden'],function(button){ var card=button.link; var trigger=_status.event.getTrigger(); var player=_status.event.player; var judging=_status.event.judging; var result=trigger.judge(card)-trigger.judge(judging); var attitude=get.attitude(player,trigger.player); if(result==0) return 0.5; return result*attitude; }).set('judging',trigger.player.judging[0]).set('filterButton',function(button){ var player=_status.event.player; var card=button.link; var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player); if(mod2!='unchanged') return mod2; var mod=game.checkMod(card,player,'unchanged','cardRespondable',player); if(mod!='unchanged') return mod; return true; }); 'step 1' if(result.bool){ event.forceDie=true; player.respond(result.links,'gzremidao','highlight','noOrdering'); result.cards=result.links; var card=result.cards[0]; event.card=card; } else event.finish(); 'step 2' if(result.bool){ if(trigger.player.judging[0].clone){ trigger.player.judging[0].clone.classList.remove('thrownhighlight'); game.broadcast(function(card){ if(card.clone) card.clone.classList.remove('thrownhighlight'); },trigger.player.judging[0]); game.addVideo('deletenode',player,get.cardsInfo([trigger.player.judging[0].clone])); } player.$gain2(trigger.player.judging[0]); player.gain(trigger.player.judging[0]); trigger.player.judging[0]=result.cards[0]; trigger.orderingCards.addArray(result.cards); game.log(trigger.player,'的判定牌改为',card); game.delay(2); } }, ai:{ rejudge:true, tag:{rejudge:0.6}, }, }, }, }, //许贡 gzbiaozhao:{ audio:'biaozhao', enable:'phaseUse', usable:1, filter:function(event,player){ var players=game.filterPlayer(current=>current!=player); if(players.length<2) return false; for(var i=0;i0&&targets[1].isAlive()){ player.chooseCard('he',true,'交给'+get.translation(targets[1])+'一张牌'); } else event.finish(); 'step 2' player.give(result.cards,targets[1]); player.draw(); }, ai:{ order:6, result:{ player:function(player,target){ if(ui.selected.targets.length) return 0.1; return get.effect(target,{name:'zhibi'},player,player)+0.1; }, target:function(player,target){ if(ui.selected.targets.length) return 2; return 0; }, }, }, }, gzyechou:{ audio:'yechou', trigger:{player:'die'}, forced:true, forceDie:true, skillAnimation:true, animationColor:'gray', logTarget:'source', filter:function(event,player){ return event.source&&event.source.isIn()&&player.canUse('sha',event.source,false); }, content:function(){ 'step 0' var target=trigger.source; event.target=target; target.addTempSkill('gzyechou_unsavable'); player.useCard({name:'sha',isCard:true},target).set('forceDie',true).set('oncard',function(){ _status.event.directHit.addArray(game.filterPlayer()); }); 'step 1' player.addTempSkill('gzyechou_unequip'); if(!target.isIn()||!player.canUse('sha',target,false)){ player.removeSkill('gzyechou_unequip'); event.goto(3); } else{ player.useCard({ name:'sha', isCard:true, storage:{gzyechou:true} },target).set('forceDie',true); } 'step 2' player.removeSkill('gzyechou_unequip'); if(!target.isIn()||!player.canUse('sha',target,false)){ event.goto(3); } else player.useCard({name:'sha',isCard:true},target).set('forceDie',true).set('oncard',function(){ _status.event.baseDamage++; }); 'step 3' target.removeSkill('gzyechou_unsavable'); }, ai:{ threaten:0.001, }, subSkill:{ unsavable:{ charlotte:true, mod:{ targetEnabled:function(card,player,target){ if(card.name=='tao'&&target.isDying()&&player.isFriendOf(target)&&target!=player) return false; }, }, }, unequip:{ charlotte:true, ai:{ unequip:true, skillTagFilter:function(player,tag,arg){ if(!arg||!arg.card||!arg.card.storage||!arg.card.storage.gzyechou) return false; }, }, }, }, }, //陈宫 gzyinpan:{ enable:'phaseUse', usable:1, filterTarget:lib.filter.notMe, content:function(){ 'step 0' event.targets=game.filterPlayer(function(current){ return current!=target&¤t.isEnemyOf(target) }).sortBySeat(); 'step 1' if(!event.target.isIn()){ event.finish(); return; } var target=targets.shift(); if(target.isIn()&&(_status.connectMode||!lib.config.skip_shan||target.hasSha())){ target.chooseToUse(function(card,player,event){ if(get.name(card)!='sha') return false; return lib.filter.filterCard.apply(this,arguments); },'是否对'+get.translation(event.target)+'使用一张【杀】?').set('targetRequired',true).set('complexSelect',true).set('filterTarget',function(card,player,target){ if(target!=_status.event.sourcex&&!ui.selected.targets.includes(_status.event.sourcex)) return false; return lib.filter.filterTarget.apply(this,arguments); }).set('sourcex',event.target); } if(targets.length>0) event.redo(); 'step 2' if(target.isIn()){ var dying=false; var num=target.getHistory('damage',function(evt){ if(evt.card&&evt.card.name=='sha'){ var evtx=evt.getParent('useCard'); if(evt.card==evtx.card&&evtx.getParent(2)==event){ if(evt._dyinged) dying=true; return true; } } }).length; if(num>0){ target.addTempSkill('gzyinpan_effect',{player:'phaseAfter'}); target.addMark('gzyinpan_effect',num,false); if(dying) target.recover(); } } }, ai:{ order:1, result:{target:-1}, }, subSkill:{ effect:{ mod:{ cardUsable:function(card,player,num){ if(card.name=='sha') return num+player.countMark('gzyinpan_effect'); }, }, onremove:true, charlotte:true, intro:{content:'使用【杀】的次数上限+#'} }, }, }, gzxingmou:{ trigger:{global:'gainAfter'}, forced:true, preHidden:true, filter:function(event,player){ return event.getParent().name=='draw'&&event.getParent(2).name=='die'; }, content:function(){ player.draw(); }, ai:{ noDieAfter:true, noDieAfter2:true, }, }, //朱儁 gzgongjian:{ audio:'gongjian', trigger:{global:'useCardToPlayered'}, filter:function(event,player){ if(!event.isFirstTarget||event.card.name!='sha') return false; var history=game.getAllGlobalHistory('useCard',function(evt){ return evt.card.name=='sha'; }); var evt=event.getParent(),index=history.indexOf(evt); if(index<1) return false; var evt0=history[index-1]; for(var i of evt.targets){ if(evt0.targets.includes(i)&&i.countCards('he')>0) return true; } return false; }, prompt2:'弃置这些角色的各两张牌', preHidden:['gzgongjian_gain'], subfrequent:['gain'], logTarget:function(event,player){ var history=game.getAllGlobalHistory('useCard',function(evt){ return evt.card.name=='sha'; }); var evt=event.getParent(),index=history.indexOf(evt); var evt0=history[index-1]; return evt.targets.filter(function(target){ return (evt0.targets.includes(target)&&target.countCards('he')>0); }); }, check:function(event,player){ var targets=lib.skill.gzgongjian.logTarget(event,player),att=0; for(var i of targets){ att+=get.attitude(player,i); } return att<0; }, content:function(){ var history=game.getAllGlobalHistory('useCard',function(evt){ return evt.card.name=='sha'; }); var evt=trigger.getParent(),index=history.indexOf(evt); var evt0=history[index-1]; var targets=evt.targets.filter(function(target){ return evt0.targets.includes(target); }).sortBySeat(); for(var i of targets) i.chooseToDiscard(true,'he',2); }, group:'gzgongjian_gain', subSkill:{ gain:{ audio:'gongjian', trigger:{ global:['loseAfter','loseAsyncAfter'], }, filter:function(event,player){ if(event.name=='lose'){ if(event.type!='discard'||event.player==player) return false; if((event.discarder||event.getParent(event.getParent(2).name=='chooseToDiscard'?3:2).player)!=player) return false; for(var i of event.cards2){ if(i.name=='sha') return true; } } else if(event.type=='discard'){ if(!event.discarder||event.discarder!=player) return false; var cards=event.getd(null,'cards2'); cards.removeArray(event.getd(player,'cards2')); for(var i of cards){ if(i.name=='sha') return true; } } return false; }, frequent:true, prompt2:function(event,player){ var cards=event.getd(null,'cards2'); cards.removeArray(event.getd(player,'cards2')); cards=cards.filter(card=>card.name=='sha'); return '获得'+get.translation(cards); }, content:function(){ var cards=trigger.getd(null,'cards2'); cards.removeArray(trigger.getd(player,'cards2')); cards=cards.filter(card=>card.name=='sha'); if(cards.length) player.gain(cards,'gain2'); }, }, }, }, gzkuimang:{ audio:'kuimang', trigger:{source:'die'}, forced:true, preHidden:true, filter:function(event,player){ var target=event.player; if(target.isFriendOf(player)) return false; var prev=target.getPrevious(),next=target.getNext(); return (prev&&prev.isFriendOf(target))||(next&&next.isFriendOf(target)); }, content:function(){ player.draw(2); }, }, //毌丘俭 gzzhengrong:{ audio:'drlt_zhenrong', trigger:{ source:'damageBegin3', player:['damageBegin1','chooseJunlingForBegin'], }, forced:true, preHidden:true, filter:function(event,player){ if(event.name!='damage') return true; if(player.identity!='unknown') return !game.hasPlayer(function(current){ return current!=player&¤t.isFriendOf(player); }); return !player.wontYe('wei')||!game.hasPlayer(current=>current.identity=='wei') }, check:function(event,player){ return !event.player.hasSkillTag('filterDamage',null,{ player:event.source, card:event.card, })&&get.damageEffect(event.player,event.source,player,_status.event.player)>0; }, content:function(){ trigger.num++; }, mod:{ globalFrom:function(player,target,num){ if(target.isMajor()) return num-1; }, }, ai:{halfneg:true}, }, gzhongju:{ audio:'drlt_hongju', enable:'phaseUse', limited:true, skillAnimation:true, animationColor:'thunder', filterTarget:lib.filter.notMe, content:function(){ 'step 0' player.awakenSkill('gzhongju'); event.players=game.filterPlayer(function(current){ return current!=player&¤t!=target; }).sortBySeat(); game.delayx(); player.chooseJunlingFor(event.players[0]).set('prompt','请选择一项“军令”'); 'step 1' event.junling=result.junling; event.targets=result.targets; event.num=0; player.carryOutJunling(player,event.junling,event.targets); 'step 2' if(num0?0:1; }); } else event.goto(4); 'step 3' if(result.index==0){ event.current.carryOutJunling(player,event.junling,event.targets); } else{ event.current.addTempSkill('diaohulishan'); } 'step 4' game.delayx(); event.num++; if(event.num=player.hp) return true; return lib.skill.gzjingce.getDiscardNum()>=player.hp; }, prompt2:function(event,player){ var num1=player.getHistory('useCard').length,num2=lib.skill.gzjingce.getDiscardNum(); if(num1>=player.hp&&num2>=player.hp) return '执行一套额外的摸牌阶段和出牌阶段'; return '执行一个额外的'+(num1>num2?'出牌阶段':'摸牌阶段'); }, preHidden:true, frequent:true, content:function(){ var num1=player.getHistory('useCard').length,num2=lib.skill.gzjingce.getDiscardNum(); var num3=player.hp; if(num2>=num3){ var next=player.phaseDraw(); event.next.remove(next); trigger.after.push(next); } if(num1>=num3){ var next=player.phaseUse(); event.next.remove(next); trigger.after.push(next); } }, ai:{threaten:2.6}, }, //黄权 gzdianhu:{ audio:'xinfu_dianhu', trigger:{player:'showCharacterAfter'}, forced:true, filter:function(event,player){ return event.toShow.includes('gz_xf_huangquan')&&!player.storage.gzdianhu_effect; }, content:function(){ 'step 0' player.chooseTarget('请选择【点虎】的目标',true,'给一名角色标上“虎”标记。当你或你的队友对该角色造成伤害后摸一张牌。',lib.filter.notMe).set('ai',function(target){ var player=_status.event.player; var distance=game.countPlayer(function(current){ if(current.isFriendOf(player)) return Math.pow(get.distance(current,target),1.2); }); return 10/distance; }); 'step 1' if(result.bool){ var target=result.targets[0]; player.logSkill('gzdianhu',target); target.markSkill('gzdianhu_mark'); player.addSkill('gzdianhu_effect'); player.markAuto('gzdianhu_effect',[target]); } }, subSkill:{ mark:{ mark:true, marktext:'虎', intro:{content:'已成为“点虎”目标'}, }, effect:{ trigger:{global:'damageEnd'}, forced:true, charlotte:true, filter:function(event,player){ if(!player.getStorage('gzdianhu_effect').includes(event.player)) return false; var source=event.source; return source&&source.isAlive()&&source.isFriendOf(player); }, logTarget:'source', content:function(){ trigger.source.draw(); }, }, }, }, gzjianji:{ audio:'xinfu_jianji', inherit:'xinfu_jianji', filterTarget:true, content:function(){ 'step 0' target.draw('visible'); 'step 1' var card=result[0]; if(card&&game.hasPlayer(function(current){ return target.canUse(card,current); })&&get.owner(card)==target){ target.chooseToUse({ prompt:'是否使用'+get.translation(card)+'?', filterCard:function(cardx,player,target){ return cardx==_status.event.cardx; }, cardx:card, }); } }, ai:{ order:10, result:{target:1}, }, }, //杨婉 gzyouyan:{ audio:'youyan', trigger:{ player:'loseAfter', global:'loseAsyncAfter', }, filter:function(event,player){ if(event.type!='discard'||event.getlx===false||player!=_status.currentPhase) return false; var evt=event.getl(player); if(!evt||!evt.cards2||!evt.cards2.length) return false; var list=[]; for(var i of evt.cards2){ list.add(get.suit(i,player)); if(list.length>=lib.suit.length) return false; } return true; }, usable:1, preHidden:true, content:function(){ var cards=get.cards(4); game.cardsGotoOrdering(cards); player.showCards(cards,get.translation(player)+'发动了【诱言】'); var evt=trigger.getl(player); var list=[]; for(var i of evt.cards2){ list.add(get.suit(i,player)); } cards=cards.filter(card=>!list.includes(get.suit(card,false))); if(cards.length) player.gain(cards,'gain2'); }, ai:{ effect:{ player_use:function(card,player,target){ if(typeof card=='object'&&player==_status.currentPhase&& (!player.storage.counttrigger||!player.storage.counttrigger.gzyouyan)&& player.needsToDiscard()==1&&card.cards&&card.cards.filter(function(i){ return get.position(i)=='h'; }).length>0&&!get.tag(card,'draw')&&!get.tag(card,'gain')&&!get.tag(card,'discard')) return 'zeroplayertarget'; }, }, }, }, gzzhuihuan:{ audio:'zhuihuan', trigger:{player:'phaseJieshuBegin'}, direct:true, preHidden:true, content:function(){ 'step 0' player.chooseTarget([1,2],'选择至多两名角色获得“追还”效果').setHiddenSkill('gzzhuihuan').set('ai',function(target){ return get.attitude(_status.event.player,target); }); 'step 1' if(result.bool){ var targets=result.targets.sortBySeat(); player.logSkill('gzzhuihuan',targets); event.targets=targets; } else event.finish(); 'step 2' var next=player.chooseTarget('选择一名角色获得反伤效果','被选择的目标角色下次受到伤害后,其对伤害来源造成1点伤害;未被选择的目标角色下次受到伤害后,伤害来源弃置两张牌。',function(card,player,target){ return _status.event.getParent().targets.includes(target); }).set('ai',function(target){ return get.attitude(_status.event.player,target); }); if(targets.length>1) next.set('forced',true); 'step 3' for(var target of targets){ player.addTempSkill('gzzhuihuan_timeout',{player:'phaseZhunbeiBegin'}); var id='gzzhuihuan_'+player.playerid; if(result.targets.includes(target)){ player.line(target,'fire'); target.addAdditionalSkill(id,'gzzhuihuan_damage'); } else{ player.line(target,'thunder'); target.addAdditionalSkill(id,'gzzhuihuan_discard'); } } }, subSkill:{ timeout:{ charlotte:true, onremove:function(player){ var id='gzzhuihuan_'+player.playerid; game.countPlayer((current)=>current.removeAdditionalSkill(id)); }, }, damage:{ charlotte:true, trigger:{player:'damageEnd'}, forced:true, forceDie:true, filter:function(event,player){ return event.source&&event.source.isAlive(); }, logTarget:'source', content:function(){ player.removeSkill('gzzhuihuan_damage'); trigger.source.damage(); }, mark:true, marktext:'追', intro:{ content:'当你下次受到伤害后,你对伤害来源造成1点伤害。', }, ai:{ threaten:0.5, }, }, discard:{ charlotte:true, trigger:{player:'damageEnd'}, forced:true, forceDie:true, filter:function(event,player){ return event.source&&event.source.isAlive(); }, logTarget:'source', content:function(){ player.removeSkill('gzzhuihuan_discard'); trigger.source.chooseToDiscard(2,'he',true); }, mark:true, marktext:'还', intro:{ content:'当你下次受到伤害后,你令伤害来源弃置两张牌。', }, ai:{ threaten:0.8, }, }, }, }, //海外田豫 gzzhenxi:{ audio:'twzhenxi', trigger:{player:'useCardToPlayered'}, filter:function(event,player){ if(event.card.name!='sha') return false; if(event.target.countCards('he')||player.hasCard(function(card){ return get.suit(card)=='diamond'&&get.type2(card)!='trick'&&player.canUse(get.autoViewAs({name:'lebu'},[card]),event.target); },'he')||player.hasCard(function(card){ return get.suit(card)=='club'&&get.type2(card)!='trick'&&player.canUse(get.autoViewAs({name:'bingliang'},[card]),event.target,false); },'he')) return true; return false; }, check:function(event,player){ return get.attitude(player,event.target)<0; }, direct:true, content:function(){ 'step 0' var target=trigger.target; event.target=target; var list=[],choiceList=[ '弃置'+get.translation(target)+'一张牌', '将一张♦非锦囊牌当做【乐不思蜀】或♣非锦囊牌当做【兵粮寸断】对'+get.translation(target)+'使用', '背水!若其有暗置的武将牌且你的武将牌均明置,你依次执行上述两项' ]; if(target.countDiscardableCards(player,'he')) list.push('选项一'); else choiceList[0]=''+choiceList[0]+''; if(player.countCards('he',function(card){ return get.suit(card)=='diamond'&&get.type2(card)!='trick'&&player.canUse(get.autoViewAs({name:'lebu'},[card]),target); })||(player.countCards('he',function(card){ return get.suit(card)=='club'&&get.type2(card)!='trick'&&player.canUse(get.autoViewAs({name:'bingliang'},[card]),target); }))) list.push('选项二'); else choiceList[1]=''+choiceList[1]+''; if(target.isUnseen(2)&&!player.isUnseen(2)) list.push('背水!'); else choiceList[2]=''+choiceList[2]+''; player.chooseControl(list,'cancel2').set('prompt',get.prompt('gzzhenxi',target)).set('choiceList',choiceList).set('ai',function(){ var player=_status.event.player,trigger=_status.event.getTrigger(),list=_status.event.list; if(get.attitude(player,trigger.target)>0) return 'cancel2'; if(list.includes('背水!')) return '背水!'; if(list.includes('选项二')) return '选项二'; return '选项一'; }).set('list',list).set('hiddenSkill','gzzhenxi'); 'step 1' if(result.control=='cancel2'){ event.finish(); return; } player.logSkill('gzzhenxi',target); event.choice=result.control; if(event.choice!='选项二'&&target.countDiscardableCards(player,'he')) player.discardPlayerCard(target,'he',true); 'step 2' if(event.choice!='选项一'&&!player.isUnseen(2)&&target.isUnseen(2)&& player.hasCard(function(card){ return get.suit(card)=='diamond'&&get.type2(card)!='trick'&&player.canUse(get.autoViewAs({name:'lebu'},[card]),target); },'he')||(player.hasCard(function(card){ return get.suit(card)=='club'&&get.type2(card)!='trick'&&player.canUse(get.autoViewAs({name:'bingliang'},[card]),target,false); },'he'))){ var next=game.createEvent('gzzhenxi_use'); next.player=player; next.target=target; next.setContent(lib.skill.gzzhenxi.contentx); } }, ai:{unequip_ai:true}, contentx:function(){ 'step 0' player.chooseCard({ position:'hes', forced:true, prompt:'震袭', prompt2:'将一张♦非锦囊牌当做【乐不思蜀】或♣非锦囊牌当做【兵粮寸断】对'+get.translation(target)+'使用', filterCard:function(card,player){ if(get.itemtype(card)!='card'||get.type2(card)=='trick'||!['diamond','club'].includes(get.suit(card))) return false; var cardx={name:get.suit(card)=='diamond'?'lebu':'bingliang'}; return player.canUse(get.autoViewAs(cardx,[card]),_status.event.getParent().target,false); }, }); 'step 1' if(result.bool) player.useCard({name:get.suit(result.cards[0],player)=='diamond'?'lebu':'bingliang'},target,result.cards); }, }, gzjiansu:{ init:function(player){ if(player.checkViceSkill('gzjiansu')&&!player.viceChanged) player.removeMaxHp(); }, viceSkill:true, audio:2, trigger:{ player:'gainAfter', global:'loseAsyncAfter', }, filter:function(event,player){ if(player==_status.currentPhase) return false; return event.getg(player).length; }, frequent:true, group:'gzjiansu_use', preHidden:['gzjiansu_use'], content:function(){ player.showCards(trigger.getg(player),get.translation(player)+'发动了【俭素】'); player.addGaintag(trigger.getg(player),'gzjiansu_tag'); player.markSkill('gzjiansu'); }, intro:{ mark:function(dialog,content,player){ var hs=player.getCards('h',function(card){ return card.hasGaintag('gzjiansu_tag'); }); if(hs.length) dialog.addSmall(hs); else dialog.addText('无已展示手牌'); }, content:function(content,player){ var hs=player.getCards('h',function(card){ return card.hasGaintag('gzjiansu_tag'); }); if(hs.length) return get.translation(hs); else return '无已展示手牌'; }, }, subSkill:{ use:{ audio:'gzjiansu', trigger:{player:'phaseUseBegin'}, filter:function(event,player){ var num=player.countCards('h',function(card){ return card.hasGaintag('gzjiansu_tag'); }); return num>0&&game.hasPlayer(function(current){ return current.isDamaged()&¤t.getDamagedHp()<=num; }); }, direct:true, content:function(){ 'step 0' player.chooseCardTarget({ prompt:get.prompt('gzjiansu'), prompt2:'弃置任意张“俭”,令一名体力值不大于你以此法弃置的牌数的角色回复1点体力', filterCard:function(card){ return get.itemtype(card)=='card'&&card.hasGaintag('gzjiansu_tag'); }, selectCard:[1,Infinity], filterTarget:function(card,player,target){ return target.isDamaged(); }, filterOk:function(){ return ui.selected.targets.length&&ui.selected.targets[0].hp<=ui.selected.cards.length; }, ai1:function(card){ if(ui.selected.targets.length&&ui.selected.targets[0].hp<=ui.selected.cards.length) return 0; return 6-get.value(card); }, ai2:function(target){ var player=_status.event.player; return get.recoverEffect(target,player,player); }, }).setHiddenSkill('gzjiansu_use'); 'step 1' if(result.bool){ var target=result.targets[0],cards=result.cards; player.logSkill('gzjiansu_use',target); player.discard(cards); target.recover(); } }, } }, }, //海外刘夫人 gzzhuidu:{ audio:'twzhuidu', trigger:{source:'damageBegin3'}, filter:function(event,player){ return player.isPhaseUsing(); }, check:function(event,player){ return get.attitude(player,event.player)<0; }, usable:1, logTarget:'player', content:function(){ 'step 0' var target=trigger.player; event.target=target; if(target.hasSex('female')&&target.countCards('e')>0) player.chooseToDiscard('he','追妒:是否弃置一张牌并令其执行两项?').set('ai',function(card){ return 8-get.value(card); }); else event.goto(2); 'step 1' if(result.bool){ event._result={control:'我全都要!'}; event.goto(3); } 'step 2' if(target.countCards('e')>0){ target.chooseControl().set('prompt','追妒:请选择一项').set('choiceList',[ '令'+get.translation(player)+'此次对你造成的伤害+1', '弃置装备区里的所有牌', ]).set('ai',function(){ var player=_status.event.player,cards=player.getCards('e'); if(player.hp<=2) return 1; if(get.value(cards)<=7) return 1; return 0; }); } else event._result={control:'选项一'}; 'step 3' player.line(target); if(result.control!='选项二') trigger.num++; if(result.control!='选项一') target.chooseToDiscard(target.countCards('e'),true,'e'); }, }, gzshigong:{ audio:'twshigong', trigger:{player:'dying'}, filter:function(event,player){ return _status.currentPhase&&_status.currentPhase!=player&&_status.currentPhase.isIn()&&player.hasViceCharacter()&&player.hp<=0; }, skillAnimation:true, animationColor:'gray', limited:true, logTarget:()=>_status.currentPhase, check:function(event,player){ 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.player.hp) return false; return true; }, content:function(){ 'step 0' var target=_status.currentPhase; event.target=target; player.awakenSkill('gzshigong'); var list=lib.character[player.name2][3].filter(function(skill){ return get.skillCategoriesOf(skill).length==0; }); if(!list.length){ event._result={control:'cancel2'}; event.goto(2); } else event.list=list; player.removeCharacter(1); 'step 1' target.chooseControl(event.list,'cancel2').set('choiceList',event.list.map(i=>{ return '
【'+get.translation(lib.translate[i+'_ab']||get.translation(i).slice(0,2))+'】
'+get.skillInfoTranslation(i,_status.currentPhase)+'
'; })).set('displayIndex',false).set('ai',function(){ if(get.attitude(_status.event.player,_status.event.getParent().player)>0) return 0; return [0,1].randomGet(); }).set('prompt',get.translation(player)+'对你发动了【示恭】').set('prompt2','获得一个技能并令其将体力回复至体力上限;或点击“取消”,令其将体力值回复至1点。'); 'step 2' if(result.control=='cancel2'){ player.recover(1-player.hp); event.finish(); } else{ target.addSkillLog(result.control); target.line(player); player.recover(player.maxHp-player.hp); } }, }, //海外服华雄 gzyaowu:{ audio:'new_reyaowu', limited:true, trigger:{source:'damageSource'}, filter:function(event,player){ if(player.isUnseen(0)&&lib.character[player.name1][3].includes('gzyaowu')) return true; if(player.isUnseen(1)&&lib.character[player.name2][3].includes('gzyaowu')) return true; return false; }, skillAnimation:true, animationColor:'fire', check:function(event,player){ return player.isDamaged()||player.hp<=2; }, content:function(){ player.awakenSkill('gzyaowu'); player.gainMaxHp(2); player.recover(2); player.addSkill('gzyaowu_die'); }, ai:{mingzhi_no:true}, subSkill:{ die:{ audio:'new_reyaowu', trigger:{player:'dieAfter'}, filter:function(event,player){ return game.hasPlayer(function(current){ return current!=player&¤t.isFriendOf(player); }); }, forced:true, forceDie:true, charlotte:true, skillAnimation:true, animationColor:'fire', logTarget:function(event,player){ return game.filterPlayer(function(current){ return current!=player&¤t.isFriendOf(player); }); }, content:function(){ for(var target of lib.skill.gzyaowu_die.logTarget(trigger,player)) target.loseHp(); }, }, }, }, gzshiyong:{ audio:'shiyong', derivation:'gzshiyongx', trigger:{player:'damageEnd'}, filter:function(event,player){ if(!event.card) return false; if(player.awakenedSkills.includes('gzyaowu')) return event.source&&event.source.isIn()&&get.color(event.card)!='black'; return get.color(event.card)!='red'; }, forced:true, logTarget:function(event,player){ if(player.awakenedSkills.includes('gzyaowu')) return event.source; return; }, content:function(){ (lib.skill.gzshiyong.logTarget(trigger,player)||player).draw(); }, }, //海外服夏侯尚 gztanfeng:{ audio:'twtanfeng', trigger:{player:'phaseZhunbeiBegin'}, filter:function(event,player){ return game.hasPlayer(function(current){ return !current.isFriendOf(player)&¤t.countDiscardableCards('hej',player)>0; }); }, direct:true, preHidden:true, content:function(){ 'step 0' player.chooseTarget(get.prompt2('gztanfeng'),function(card,player,target){ return !target.isFriendOf(player)&&target.countDiscardableCards(player,'hej')>0; }).set('ai',function(target){ var player=_status.event.player; if(target.hp+target.countCards('hs',{name:['tao','jiu']})<=2) return 3*get.effect(target,{name:'guohe'},player,player); return get.effect(target,{name:'guohe'},player,player); }).setHiddenSkill(event.name); 'step 1' if(result.bool){ var target=result.targets[0]; event.target=target; player.logSkill('gztanfeng',target); player.discardPlayerCard(target,'hej',true); } else event.finish(); 'step 2' target.chooseBool('是否受到'+get.translation(target)+'造成的1点火焰伤害,令其跳过一个阶段?').set('ai',()=>_status.event.choice).set('choice',get.damageEffect(target,player,target)>=-5); 'step 3' if(result.bool){ player.line(target); target.damage(1,'fire'); } else event.finish(); 'step 4' var list=[]; var list2=[]; event.map={phaseJudge:'判定阶段',phaseDraw:'摸牌阶段',phaseUse:'出牌阶段',phaseDiscard:'弃牌阶段'}; for(var i of ['phaseJudge','phaseDraw','phaseUse','phaseDiscard']){ if(!player.skipList.includes(i)){ i=event.map[i]; list.push(i); if(i!='判定阶段'&&i!='弃牌阶段') list2.push(i); } } target.chooseControl(list).set('prompt','探锋:令'+get.translation(player)+'跳过一个阶段').set('ai',function(){ return _status.event.choice; }).set('choice',function(){ var att=get.attitude(target,player); var num=player.countCards('j'); if(att>0){ if(list.includes('判定阶段')&&num>0) return '判定阶段'; return '弃牌阶段'; } if(list.includes('摸牌阶段')&&player.hasJudge('lebu')) return '摸牌阶段'; if(list.includes('出牌阶段')&&player.hasJudge('bingliang')||player.needsToDiscard()>0) return '出牌阶段'; return list2.randomGet(); }()); 'step 5' for(var i in event.map){ if(event.map[i]==result.control) player.skip(i); } target.popup(result.control); target.line(player); game.log(player,'跳过了','#y'+result.control); }, }, //杨芷 gzwanyi:{ audio:'wanyi', enable:'phaseUse', filter:function(event,player){ if(player.getStorage('gzwanyi2').length>=4) return false; if(_status.mode=='yingbian') return player.hasCard(function(i){ return get.is.yingbian(i); },'hs'); return player.hasCard(function(card){ return card.hasTag('lianheng'); },'hs'); }, chooseButton:{ dialog:function(event,player){ var list=['lianjunshengyan','huoshaolianying','xietianzi','lulitongxin']; if(_status.mode=='yingbian') list=['zhujinqiyuan','chuqibuyi','shuiyanqijunx','dongzhuxianji']; list.removeArray(player.getStorage('gzwanyi2')); return ui.create.dialog('婉嫕',[list,'vcard'],'hidden'); }, filter:function(button,player){ return lib.filter.filterCard({name:button.link[2]},player,_status.event.getParent()); }, check:function(button){ return _status.event.player.getUseValue({name:button.link[2]}); }, backup:function(links){ return { audio:'wanyi', popname:true, viewAs:{ name:links[0][2], }, filterCard:function(card){ if(_status.mode=='yingbian') return get.is.yingbian(card); return card.hasTag('lianheng'); }, check:function(card){ return 1/Math.max(1,get.value(card)); }, position:'hs', onuse:function(links,player){ if(!player.storage.gzwanyi2) player.storage.gzwanyi2=[]; player.storage.gzwanyi2.add(links.card.name); player.addTempSkill('gzwanyi2'); }, } }, prompt:function(links){ if(_status.mode=='yingbian') return '将一张应变牌当做'+get.translation(links[0][2])+'使用'; return '将一张合纵牌当做'+get.translation(links[0][2])+'使用'; }, }, subSkill:{backup:{}}, ai:{order:8,result:{player:1}}, }, gzwanyi2:{onremove:true}, gzmaihuo:{ audio:'maihuo', limited:true, trigger:{global:'useCardToTarget'}, logTarget:'player', filter:function(event,player){ return event.card.name=='sha'&&event.target.isIn()&&event.target.isFriendOf(player); }, preHidden:true, skillAnimation:true, animationColor:'thunder', check:function(event,player){ var source=event.player,targets=event.targets,card=event.card; for(var target of targets){ if(target.hasShan()||get.effect(target,card,source,player)>=0) continue; if(player.hp<=1||target.hp<=(event.getParent().baseDamage||1)) return true; } return false; }, content:function(){ player.awakenSkill('gzmaihuo'); trigger.targets.length=0; trigger.getParent().triggeredTargets2.length=0; player.addSkill('gzmaihuo_effect'); player.markAuto('gzmaihuo_effect',[trigger.player]); trigger.player.addMark('gzmaihuo_mark',1,false); }, subSkill:{ effect:{ audio:'maihuo', trigger:{global:'phaseBegin'}, forced:true, charlotte:true, popup:false, filter:function(event,player){ return player.getStorage('gzmaihuo_effect').includes(event.player)&&event.player.canUse('sha',player,false); }, content:function(){ 'step 0' var target=trigger.player; player.unmarkAuto('gzmaihuo_effect',[target]); target.removeMark('gzmaihuo_mark',1,false); target.useCard({name:'sha',isCard:true},player,'gzmaihuo_effect',false); 'step 1' if(!player.getStorage('gzmaihuo_effect').length) player.removeSkill('gzmaihuo_effect'); }, group:'gzmaihuo_remove', }, remove:{ trigger:{player:'damageBegin2'}, forced:true, filter:function(event,player){ return event.card&&event.card.name=='sha'&&event.getParent().skill=='gzmaihuo_effect'; }, content:function(){ trigger.cancel(); player.draw(2); if(player.checkMainSkill('gzmaihuo',false)){ player.removeCharacter(0); } else if(player.checkViceSkill('gzmaihuo',false)){ player.changeVice(); } }, }, mark:{ marktext:'祸', intro:{ content:'mark', onunmark:true, }, }, }, }, //羊徽瑜 gzcaiyuan:{ audio:2, trigger:{player:'phaseJieshuBegin'}, forced:true, preHidden:true, filter:function(event,player){ var num1=player.countCards('h'),num2=num1; player.getHistory('gain',function(evt){ num2-=evt.cards.length; }); player.getHistory('lose',function(evt){ if(evt.hs) num2+=evt.hs.length; }); return num1>=num2; }, content:function(){ player.chooseDrawRecover(2,true); }, }, //左棻 gzzhaosong:{ audio:'zhaosong', enable:'phaseUse', preHidden:['gzzhaosong_dying','gzzhaosong_sha'], filter:function(event,player){ return !player.getStorage('gzzhaosong').includes('效果②')&&game.hasPlayer((current)=>lib.skill.gzzhaosong.filterTarget(null,player,current)); }, filterTarget:function(card,player,target){ return target!=player&&(target.isUnseen(2)||target.countCards('h')>0); }, promptfunc:()=>'出牌阶段,你可观看一名其他角色的所有暗置武将牌和手牌,然后可以获得其区域内的一张牌。', content:function(){ player.markAuto('gzzhaosong',['效果②']); if(target.isUnseen(2)) player.viewCharacter(target,2); if(target.countCards('hej')>0) player.gainPlayerCard(target,'hej','visible'); }, ai:{ order:11, result:{ player:function(player,target){ return get.effect(target,{name:'zhibi'},player,player)+get.effect(target,{name:'shunshou_copy'},player,player); }, }, }, group:['gzzhaosong_dying','gzzhaosong_sha'], subSkill:{ dying:{ audio:'zhaosong', trigger:{global:'dying'}, logTarget:'player', filter:function(event,player){ return !player.getStorage('gzzhaosong').includes('效果①')&&event.player.isDying()&&event.player.hp<=0; }, prompt2:'令该角色回复至2点体力并摸一张牌', check:function(event,player){ return event.player.isFriendOf(player)&&get.attitude(player,event.player)>0; }, content:function(){ player.markAuto('gzzhaosong',['效果①']); var target=trigger.player,num=2-target.hp; if(num>0) target.recover(num); target.draw(); }, }, sha:{ audio:'zhaosong', trigger:{global:'useCard2'}, direct:true, filter:function(event,player){ if(event.card.name!='sha'||player.getStorage('gzzhaosong').includes('效果③')) return false; return game.hasPlayer(function(current){ return !event.targets.includes(current)&&lib.filter.filterTarget(event.card,event.player,current); }); }, content:function(){ 'step 0' player.chooseTarget([1,2],get.prompt('gzzhaosong'),'为'+get.translation(trigger.card)+'增加至多两个目标',function(card,player,target){ var event=_status.event.getTrigger(); return !event.targets.includes(target)&&lib.filter.filterTarget(event.card,event.player,target); }).set('ai',function(target){ var event=_status.event.getTrigger(); return get.effect(target,event.card,event.player,_status.event.player); }).set('goon',game.countPlayer(function(current){ return !trigger.targets.includes(current)&&lib.filter.filterTarget(trigger.card,trigger.player,current)&&get.effect(current,trigger.card,trigger.player,player)>0; })>=Math.min(2,game.countPlayer(function(current){ return !trigger.targets.includes(current)&&lib.filter.filterTarget(trigger.card,trigger.player,current); }))).setHiddenSkill('gzzhaosong_sha'); 'step 1' if(result.bool){ if(!event.isMine()&&!event.isOnline()) game.delayx(); } else event.finish(); 'step 2' var targets=result.targets; player.markAuto('gzzhaosong',['效果③']); player.logSkill('gzzhaosong_sha',targets); trigger.targets.addArray(targets); }, }, }, }, gzlisi:{ audio:'lisi', trigger:{global:'dieAfter'}, filter:function(event,player){ return event.player.isFriendOf(player)&&player.getStorage('gzzhaosong').length>0; }, direct:true, content:function(){ 'step 0' var list=player.getStorage('gzzhaosong').slice(0); list.push('cancel2'); player.chooseControl(list).set('prompt',get.prompt('gzlisi')).set('prompt2','恢复〖诏颂〗的一个已发动的选项'); 'step 1' if(result.control!='cancel2'){ player.logSkill('gzlisi'); player.unmarkAuto('gzzhaosong',[result.control]) } }, }, //杨艳 gzxuanbei:{ audio:'xuanbei', trigger:{player:'showCharacterAfter'}, filter:function(event,player){ return !player.storage.gzxuanbei&&event.toShow.includes('gz_yangyan'); }, forced:true, locked:false, content:function(){ 'step 0' player.storage.gzxuanbei=true; var cards=[]; while(cards.length<2){ var card=get.cardPile2(function(card){ if(cards.includes(card)) return false; return card.hasTag('lianheng')||get.is.yingbian(card); }); if(!card) break; else cards.push(card); } if(cards.length) player.gain(cards,'gain2'); if(cards.length<2) player.draw(2-cards.length); 'step 1' player.addTempSkill('gzxuanbei_effect'); }, group:'gzxuanbei_change', subSkill:{ effect:{ trigger:{player:'useCard'}, forced:true, popup:false, charlotte:true, filter:function(event,player){ return get.cardtag(event.card,'lianheng'); }, content:function(){ player.draw(); }, ai:{forceYingbian:true}, mark:true, intro:{content:'使用应变牌时直接获得强化,使用合纵牌时摸一张牌。'}, }, change:{ audio:'xuanbei', trigger:{player:'die'}, direct:true, forceDie:true, skillAnimation:true, animationColor:'thunder', content:function(){ 'step 0' player.chooseTarget(get.prompt('gzxuanbei'),'令一名其他角色变更副将',lib.filter.notMe).set('forceDie',true).set('ai',function(target){ var player=_status.event.player; var rank=get.guozhanRank(target.name2,target)<=3; var att=get.attitude(player,target); if(att>0){ return (4-rank)*att; } return -(rank-6)*att; }); 'step 1' if(result.bool){ var target=result.targets[0]; player.logSkill('gzxuanbei_change',target); game.delayx(); target.changeVice(); } }, }, }, }, //司马师 gzyimie:{ audio:'yimie', inherit:'yimie', round:1, init:function(player){ if(player.checkMainSkill('gzyimie')){ player.removeMaxHp(2); } }, }, gztairan:{ audio:'tairan', trigger:{player:'phaseUseBegin'}, check:function(event,player){ return player.isDamaged()&&player.hasCard(function(card){ return 5.5-get.value(card); },'he'); }, content:function(){ 'step 0' var list=[],num=0; if(player.isHealthy()||!player.hasCard(function(card){ return lib.filter.cardDiscardable(card,player,'gztairan'); },'he')) num=1; event.num=num; for(var i=num;i<=player.hp;i++){ list.push(i+'点'); } player.chooseControl(list).set('prompt','###请先失去任意点体力###此回合结束时,你将恢复等量的体力'); 'step 1' var num1=result.index+num; event.num1=num1; if(num1>0) player.loseHp(num1); 'step 2' if(player.isDamaged()&&player.hasCard(function(card){ return lib.filter.cardDiscardable(card,player,'gztairan') },'he')){ var next=player.chooseToDiscard('he',[1,player.getDamagedHp()],'然后请弃置任意张牌','此回合结束时,你将摸等量的牌。').set('ai',function(card){ return 5.5-get.value(card); }); if(event.num1==0) next.set('forced',true); } 'step 3' var num2=0; if(result.bool) num2=result.cards.length; var storage=[event.num1,num2]; player.addTempSkill('gztairan_effect'); player.storage.gztairan_effect=storage; }, subSkill:{ effect:{ audio:'tairan', trigger:{player:'phaseEnd'}, filter:function(event,player){ var storage=player.storage.gztairan_effect; return storage&&storage.length==2&&(storage[1]>0||player.isDamaged()); }, forced:true, charlotte:true, onremove:true, content:function(){ var storage=player.storage.gztairan_effect; if(storage[0]>0) player.recover(storage[0]); if(storage[1]>0) player.draw(storage[1]); }, }, }, }, //杜预 gzsanchen:{ audio:'sanchen', enable:'phaseUse', usable:1, filter:function(event,player){ var stat=player.getStat('sanchen'); return game.hasPlayer(function(current){ return (!stat||!stat.includes(current)); }); }, filterTarget:function(card,player,target){ var stat=player.getStat('sanchen'); return (!stat||!stat.includes(target)); }, content:function(){ 'step 0' var stat=player.getStat(); if(!stat.sanchen) stat.sanchen=[]; stat.sanchen.push(target); target.draw(3); 'step 1' if(!target.countCards('he')) event.finish(); else target.chooseToDiscard('he',true,3).set('ai',function(card){ var list=ui.selected.cards.map(function(i){ return get.type2(i); }); if(!list.includes(get.type2(card))) return 7-get.value(card); return -get.value(card); }); 'step 2' if(result.bool&&result.cards&&result.cards.length){ var list=[]; for(var i of result.cards) list.add(get.type2(i)); if(list.length==result.cards.length){ target.draw(); player.getStat('skill').gzsanchen--; player.addMark('gzsanchen',1); } } else{ target.draw(); player.getStat('skill').sanchen--; player.addMark('gzsanchen',1); } }, ai:{ order:9, threaten:1.7, result:{ target:function(player,target){ if(target.hasSkillTag('nogain')) return 0.1; return Math.sqrt(target.countCards('he')); }, }, }, marktext:'陈', intro:{ name2:'陈', content:'mark', }, }, gzpozhu:{ audio:'pozhu', enable:'phaseUse', mainSkill:true, init:function(player){ if(player.checkMainSkill('gzpozhu')){ player.removeMaxHp(); } }, viewAsFilter:function(player){ return !player.hasSkill('pozhu3',null,null,false)&&player.countMark('gzsanchen')>0&&player.countCards('hs')>0; }, viewAs:{name:'chuqibuyi'}, filterCard:true, position:'hs', check:function(card){ return 7-get.value(card); }, onuse:function(result,player){ player.removeMark('gzsanchen',1); }, group:'gzpozhu2', }, gzpozhu2:{ trigger:{player:'useCardAfter'}, silent:true, filter:function(event,player){ return event.skill=='gzpozhu'&&!player.getHistory('sourceDamage',function(evt){ return evt.card==event.card; }).length; }, content:function(){ player.addTempSkill('pozhu3'); }, }, //钟琰 gzbolan:{ audio:'bolan', global:'gzbolan_global', enable:'phaseUse', usable:1, content:function(){ 'step 0' if((event.num&&event.num>0)||!_status.characterlist.length){ event.finish(); return; } var character=_status.characterlist.randomGet(); var groups,double=get.is.double(character,true); if(double) groups=double.slice(0); else groups=[lib.character[character][1]]; event.groups=groups; event.videoId=lib.status.videoId++; game.broadcastAll(function(player,id,character){ ui.create.dialog(get.translation(player)+'发动了【博览】',[[character],'character']).videoId=id; },player,event.videoId,character); game.delay(3); 'step 1' game.broadcastAll('closeDialog',event.videoId); var list1=['wei','shu','wu','qun','jin'],list2=['gzqice','tiaoxin','gzzhiheng','new_chuli','gzsanchen']; var skills=[]; for(var i=0;i0) return 3; if(player.isHealthy()) return 1; return -1; }, }, }, }, }, }, //司马昭 gzchoufa:{ audio:'choufa', inherit:'choufa', content:function(){ 'step 0' player.choosePlayerCard(target,'h',true); 'step 1' player.showCards(result.cards,get.translation(player)+'对'+get.translation(target)+'发动了【筹伐】'); var type=get.type2(result.cards[0],target),hs=target.getCards('h',function(card){ return card!=result.cards[0]&&get.type2(card,target)!=type; }); if(hs.length){ target.addGaintag(hs,'xinchoufa'); target.addTempSkill('xinchoufa2'); } }, }, //张春华 gzhuishi:{ audio:2, trigger:{player:'phaseDrawBegin1'}, filter:function(event,player){ return ui.discardPile.childNodes.length>0; }, preHidden:true, prompt:function(){ return get.prompt('huishi')+'(可观看牌数:'+lib.skill.gzhuishi.getNum()+')'; }, check:function(event,player){ return lib.skill.gzhuishi.getNum()>3; }, getNum:function(){ var list=[]; list.push(ui.discardPile.lastChild); if(list[0].previousSibling) list.push(list[0].previousSibling); var num=0; for(var i of list){ var name=get.translation(i.name); if(name=='挟令') name='挟天子以令诸侯'; num+=name.length; } return num; }, content:function(){ 'step 0' trigger.changeToZero(); var cards=game.cardsGotoOrdering(get.cards(lib.skill.gzhuishi.getNum())).cards; var num=Math.ceil(cards.length/2); var next=player.chooseToMove('慧识:将'+get.cnNumber(num)+'张牌置于牌堆底并获得其余的牌',true); next.set('list',[ ['牌堆顶的展示牌',cards], ['牌堆底'], ]); next.set('filterMove',function(from,to,moved){ if(moved[0].includes(from)&&to==1) return moved[1].length<_status.event.num; return true; }); next.set('filterOk',function(moved){ return moved[1].length==_status.event.num; }); next.set('num',num); next.set('processAI',function(list){ var cards=list[0][1].slice(0).sort(function(a,b){ return get.value(b)-get.useful(a); }); return [cards,cards.splice(cards.length-_status.event.num)]; }); 'step 1' if(result.bool){ var list=result.moved; if(list[0].length) player.gain(list[0],'gain2'); while(list[1].length) ui.cardPile.appendChild(list[1].shift().fix()); } }, }, gzqingleng:{ audio:2, trigger:{global:'phaseEnd'}, direct:true, preHidden:true, filter:function(event,player){ var target=event.player; return target!=player&&target.isIn()&&target.isUnseen(2)&&player.countCards('he')>0&&player.canUse({name:'sha',nature:'ice'},target,false); }, content:function(){ 'step 0' player.chooseCard('he',get.prompt('gzqingleng',trigger.player),'将一张牌当做冰【杀】对其使用',function(card,player){ return player.canUse(get.autoViewAs({name:'sha',nature:'ice'},[card]),_status.event.target,false); }).set('target',trigger.player).set('ai',function(card){ if(get.effect(_status.event.target,get.autoViewAs({name:'sha',nature:'ice'},[card]),player)<=0) return false; return 6-get.value(card); }).setHiddenSkill(event.name); 'step 1' if(result.bool){ player.useCard(get.autoViewAs({name:'sha',nature:'ice'},result.cards),result.cards,false,trigger.player,'gzqingleng'); if(trigger.player.isUnseen()){ player.draw(); } } }, }, //司马懿 gzquanbian:{ audio:'quanbian', preHidden:true, trigger:{player:['useCard','respond']}, filter:function(event,player){ if(player.hasSkill('gzquanbian_blocker')) return false; var phase=event.getParent('phaseUse'); if(!phase||phase.player!=player) return false; var suit=get.suit(event.card); if(!lib.suit.includes(suit)||!lib.skill.quanbian.hasHand(event)) return false; return player.getHistory('useCard',function(evt){ return evt!=event&&get.suit(evt.card)==suit&&lib.skill.quanbian.hasHand(evt)&&evt.getParent('phaseUse')==phase; }).length+player.getHistory('respond',function(evt){ return evt!=event&&get.suit(evt.card)==suit&&lib.skill.quanbian.hasHand(evt)&&evt.getParent('phaseUse')==phase; }).length==0; }, content:function(){ 'step 0' var cards=get.cards(player.maxHp); for(var i=cards.length-1;i>=0;i--){ ui.cardPile.insertBefore(cards[i],ui.cardPile.firstChild); } game.updateRoundNumber(); player.chooseButton(['权变:选择获得一张牌',cards],true).set('ai',function(button){ var player=_status.event.player,card=button.link; var suit=get.suit(card,false),val=get.value(card); if(player.hasHistory('useCard',function(evt){ return get.suit(evt.card,false)==suit; })||player.hasHistory('respond',function(evt){ return get.suit(evt.card,false)==suit; })) return val; return val+8; }); 'step 1' if(result.bool){ var card=result.links[0]; player.gain(card,'gain2'); var suit=get.suit(card,false); if(player.hasHistory('useCard',function(evt){ return get.suit(evt.card,false)==suit; })||player.hasHistory('respond',function(evt){ return get.suit(evt.card,false)==suit; })) player.addTempSkill('gzquanbian_blocker'); } }, subSkill:{blocker:{charlotte:true}}, }, gzxiongzhi:{ audio:'xiongzhi', enable:'phaseUse', limited:true, skillAnimation:true, animationColor:'thunder', content:function(){ 'step 0' player.awakenSkill('gzxiongzhi'); event.cards=game.cardsGotoOrdering(get.cards(player.maxHp)).cards.slice(0); 'step 1' var card=cards.shift(); event.card=card; player.showCards(card); if(!player.hasUseTarget(card)){ if(cards.length>0) event.redo(); else event.finish(); } 'step 2' var next=player.chooseUseTarget(card,true); if(get.info(card).updateUsable=='phaseUse') next.addCount=false; 'step 3' if(result.bool&&cards.length>0) event.goto(1); }, ai:{ order:1, result:{ player:function(player){ if(!player.hasSkill('smyyingshi')) return 1; var cards=[]; for(var i=0;i0; }, logTarget:'player', content:function(){ player.discardPlayerCard(trigger.player,true,'he'); }, }, gzmingfa:{ audio:'dcmingfa', enable:'phaseUse', usable:1, filterTarget:function(card,player,target){ return player!=target&&target.isEnemyOf(player); }, content:function(){ player.markAuto('gzmingfa',targets); game.delayx(); }, onremove:true, ai:{ order:1, result:{target:-1}, }, group:'gzmingfa_effect', subSkill:{ effect:{ audio:'dcmingfa', trigger:{global:'phaseEnd'}, forced:true, filter:function(event,player){ return player.getStorage('gzmingfa').includes(event.player); }, logTarget:'player', content:function(){ var target=trigger.player; player.unmarkAuto('gzmingfa',[target]); if(target.isIn()){ var num=player.countCards('h')-target.countCards('h'); if(num>0){ target.damage(); player.gainPlayerCard(target,true,'h'); } else if(num<0){ player.draw(Math.min(5,-num)); } } }, }, }, }, //海外服国战 //杨修 gzdanlao:{ audio:'danlao', inherit:'danlao', preHidden:true, filter:function(event,player){ return get.type(event.card)=='trick'&&event.targets&&event.targets.length>1; }, }, gzjilei:{ inherit:'jilei', preHidden:true, content:function(){ 'step 0' player.chooseControl('basic','trick','equip','cancel2',function(){ var source=_status.event.source; if(get.attitude(_status.event.player,source)>0) return 'cancel2'; var list=['basic','trick','equip'].filter(function(name){ return (!source.storage.jilei2||!source.storage.jilei2.includes(name)); }); if(!list.length) return 'cancel2'; if(list.includes('trick')&&source.countCards('h',function(card){ return get.type(card,source)=='trick'&&source.hasValueTarget(card); })>1) return 'trick'; return list[0]; }).set('prompt',get.prompt2('jilei',trigger.source)).set('source',trigger.source).setHiddenSkill('gzjilei'); 'step 1' if(result.control!='cancel2'){ player.logSkill('gzjilei',trigger.source); player.chat(get.translation(result.control)+'牌'); game.log(player,'声明了','#y'+get.translation(result.control)+'牌'); trigger.source.addTempSkill('jilei2'); trigger.source.storage.jilei2.add(result.control); trigger.source.updateMarks('jilei2'); game.delayx(); } }, }, //诸葛瑾 gzhuanshi:{ audio:'huanshi', trigger:{global:'judge'}, direct:true, preHidden:true, filter:function(event,player){ return player.countCards('hes')>0&&event.player.isFriendOf(player); }, content:function(){ "step 0" player.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+ get.translation(trigger.player.judging[0])+','+get.prompt('gzhuanshi'),'hes',function(card){ var player=_status.event.player; var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player); if(mod2!='unchanged') return mod2; var mod=game.checkMod(card,player,'unchanged','cardRespondable',player); if(mod!='unchanged') return mod; return true; }).set('ai',function(card){ var trigger=_status.event.getTrigger(); var player=_status.event.player; var judging=_status.event.judging; var result=trigger.judge(card)-trigger.judge(judging); var attitude=get.attitude(player,trigger.player); if(attitude==0||result==0) return 0; if(attitude>0){ return result-get.value(card)/2; } else{ return -result-get.value(card)/2; } }).set('judging',trigger.player.judging[0]).setHiddenSkill('gzhuanshi'); "step 1" if(result.bool){ player.respond(result.cards,'gzhuanshi','highlight','noOrdering'); } else{ event.finish(); } "step 2" if(result.bool){ if(trigger.player.judging[0].clone){ trigger.player.judging[0].clone.classList.remove('thrownhighlight'); game.broadcast(function(card){ if(card.clone){ card.clone.classList.remove('thrownhighlight'); } },trigger.player.judging[0]); game.addVideo('deletenode',player,get.cardsInfo([trigger.player.judging[0].clone])); } game.cardsDiscard(trigger.player.judging[0]); trigger.player.judging[0]=result.cards[0]; trigger.orderingCards.addArray(result.cards); game.log(trigger.player,'的判定牌改为',result.cards[0]); game.delay(2); } }, ai:{ rejudge:true, tag:{ rejudge:1, } } }, gzhongyuan:{ audio:'hongyuan', enable:'phaseUse', usable:1, filter:function(event,player){ return player.hasCard(function(card){ return lib.skill.gzhongyuan.filterCard(card); },'h'); }, filterCard:function(card){ return !card.hasTag('lianheng')&&!card.hasGaintag('_lianheng'); }, position:'h', discard:false, lose:false, content:function(){ cards[0].addGaintag('_lianheng'); player.addTempSkill('gzhongyuan_clear') }, check:function(card){ return 4.5-get.value(card); }, group:'gzhongyuan_draw', preHidden:true, ai:{order:2,result:{player:1}}, subSkill:{ clear:{ charlotte:true, onremove:function(player){ player.removeGaintag('_lianheng'); }, }, draw:{ audio:'hongyuan', trigger:{player:'drawBefore'}, direct:true, filter:function(event,player){ return event.getParent().name=='_lianheng'&&game.hasPlayer(function(current){ return current!=player&¤t.isFriendOf(player); }); }, content:function(){ 'step 0' player.chooseTarget(get.prompt('gzhongyuan'),'将摸牌('+get.cnNumber(trigger.num)+'张)转移给一名同势力角色',function(card,player,target){ return target!=player&&target.isFriendOf(player); }).setHiddenSkill('gzhongyuan').set('ai',()=>-1); 'step 1' if(result.bool){ var target=result.targets[0]; player.logSkill('gzhongyuan',target); trigger.cancel(); target.draw(trigger.num); } }, }, }, }, gzmingzhe:{ audio:'mingzhe', trigger:{ player:['loseAfter','useCard','respond'], global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'], }, filter:function(event,player){ if(player==_status.currentPhase) return false; if(event.name=='useCard'||event.name=='respond'){ return get.color(event.card,false)=='red'&&player.hasHistory('lose',function(evt){ return evt.getParent()==event&&evt.hs&&evt.hs.length>0; }); } var evt=event.getl(player); if(!evt||!evt.es||!evt.es.length) return false; for(var i of evt.es){ if(get.color(i,player)=='red') return true; } return false; }, frequent:true, preHidden:true, content:function(){ player.draw(); }, }, //廖化 gzdangxian:{ trigger:{player:'phaseBegin'}, forced:true, preHidden:true, audio:'dangxian', audioname:['guansuo'], content:function(){ var next=player.phaseUse(); event.next.remove(next); trigger.next.push(next); }, group:'gzdangxian_show', subSkill:{ show:{ audio:'dangxian', trigger:{player:'showCharacterAfter'}, forced:true, filter:function(event,player){ return event.toShow.includes('gz_liaohua')&&!player.storage.gzdangxian_draw; }, content:function(){ player.storage.gzdangxian_draw=true; player.addMark('xianqu_mark',1) }, }, }, }, //新国标2022 //许褚 gzluoyi:{ audio:'luoyi', trigger:{player:'phaseDrawEnd'}, direct:true, preHidden:true, filter:function(event,player){ return player.countCards('he')>0; }, content:function(){ 'step 0' player.chooseToDiscard('he',get.prompt2('gzluoyi')).setHiddenSkill('gzluoyi').set('ai',function(card){ var player=_status.event.player; if(player.hasCard(function(cardx){ if(cardx==card) return false; return (cardx.name=='sha'||cardx.name=='juedou')&&player.hasValueTarget(cardx,null,true); },'hs')) return 5-get.value(card); return -get.value(card); }).logSkill='gzluoyi'; 'step 1' if(result.bool) player.addTempSkill('gzluoyi_buff') }, subSkill:{ buff:{ audio:'luoyi', charlotte:true, forced:true, trigger:{source:'damageBegin1'}, filter:function(event,player){ return event.card&&(event.card.name=='sha'||event.card.name=='juedou')&&event.getParent().type=='card'; }, content:function(){ trigger.num++; }, }, }, }, //典韦 gzqiangxi:{ audio:'qiangxi', inherit:'qiangxi', filterTarget:function(card,player,target){ return target!=player; }, }, //小乔 gztianxiang:{ audio:'tianxiang', audioname:['daxiaoqiao','re_xiaoqiao','ol_xiaoqiao'], trigger:{player:'damageBegin4'}, direct:true, preHidden:true, usable:1, filter:function(event,player){ return player.countCards('h',function(card){ return _status.connectMode||get.suit(card,player)=='heart'; })>0&&event.num>0; }, content:function(){ "step 0" player.chooseCardTarget({ filterCard:function(card,player){ return get.suit(card)=='heart'&&lib.filter.cardDiscardable(card,player); }, filterTarget:function(card,player,target){ return player!=target; }, ai1:function(card){ return 10-get.value(card); }, ai2:function(target){ var att=get.attitude(_status.event.player,target); var trigger=_status.event.getTrigger(); var da=0; if(_status.event.player.hp==1){ da=10; } var eff=get.damageEffect(target,trigger.source,target); if(att==0) return 0.1+da; if(eff>=0&&att>0){ return att+da; } if(att>0&&target.hp>1){ if(target.maxHp-target.hp>=3) return att*1.1+da; if(target.maxHp-target.hp>=2) return att*0.9+da; } return -att+da; }, prompt:get.prompt('gztianxiang'), prompt2:lib.translate.gztianxiang_info }).setHiddenSkill(event.name); "step 1" if(result.bool){ player.discard(result.cards); var target=result.targets[0]; player.chooseControlList(true,function(event,player){ var target=_status.event.target; var att=get.attitude(player,target); if(target.hasSkillTag('maihp')) att=-att; if(att>0){ return 0; } else{ return 1; } }, ['令'+get.translation(target)+'受到伤害来源对其造成的1点伤害,然后摸X张牌(X为其已损失体力值且至多为5)', '令'+get.translation(target)+'失去1点体力,然后获得'+get.translation(result.cards)]).set('target',target); player.logSkill(event.name,target); trigger.cancel(); event.target=target; event.card=result.cards[0]; } else{ player.storage.counttrigger.gztianxiang--; event.finish(); } "step 2" if(typeof result.index=='number'){ event.index=result.index; if(result.index){ event.related=event.target.loseHp(); } else{ event.related=event.target.damage(trigger.source||'nosource','nocard'); } } else event.finish(); "step 3" //if(event.related.cancelled||target.isDead()) return; if(event.index&&card.isInPile()) target.gain(card,'gain2'); else if(target.getDamagedHp()) target.draw(Math.min(5,target.getDamagedHp())); }, ai:{ maixie_defend:true, effect:{ target:function(card,player,target){ if(player.hasSkillTag('jueqing',false,target)) return; if(get.tag(card,'damage')&&target.countCards('he')>1) return 0.7; } }, } }, gzhongyan:{ mod:{ suit:function(card,suit){ if(suit=='spade') return 'heart'; }, maxHandcard:function(player,num){ if(player.hasCard(function(card){ return get.suit(card,player)=='heart'; },'e')) return num+1; }, } }, //黄忠 gzliegong:{ audio:'liegong', locked:false, mod:{ targetInRange:function(card,player,target){ if(card.name=='sha'&&target.countCards('h')0) return 2; return target.mayHaveShan(player,'use')?1:0; }); 'step 1' if(result.control!='cancel2'){ var target=trigger.target; player.logSkill('gzliegong',target); if(result.index==1){ game.log(trigger.card,'不可被',target,'响应'); trigger.directHit.add(target); } else { game.log(trigger.card,'对',target,'的伤害+1'); var map=trigger.getParent().customArgs,id=target.playerid; if(!map[id]) map[id]={}; if(!map[id].extraDamage) map[id].extraDamage=0; map[id].extraDamage++; } } }, }, //潘凤 gzkuangfu:{ audio:'kuangfu', trigger:{player:'useCardToPlayered'}, shaRelated:true, preHidden:true, logTarget:'target', filter:function(event,player){ return event.card.name=='sha'&&player.isPhaseUsing()&&!player.hasSkill('gzkuangfu_extra')&&event.target.countGainableCards(player,'e')>0; }, check:function(event,player){ if(get.attitude(player,event.target)>0||!event.target.hasCard(function(card){ return lib.filter.canBeGained(card,player,event.target)&&get.value(card,event.target)>0; },'e')) return false; return true; }, content:function(){ trigger.getParent()._gzkuangfued=true; player.gainPlayerCard(trigger.target,'e',true); player.addTempSkill('gzkuangfu_extra','phaseUseAfter'); }, subSkill:{ extra:{ trigger:{player:'useCardAfter'}, charlotte:true, forced:true, filter:function(event,player){ return event._gzkuangfued&&!player.hasHistory('sourceDamage',function(evt){ return evt.card&&event.card; })&&player.countCards('h')>0; }, content:function(){ player.chooseToDiscard('h',2,true); }, }, }, }, //吕布 gzwushuang:{ shaRelated:true, audio:'wushuang', audioname:['re_lvbu','shen_lvbu','lvlingqi'], forced:true, locked:true, group:['wushuang1','wushuang2'], preHidden:['wushuang1','wushuang2','gzwushuang'], trigger:{player:'useCard1'}, direct:true, filter:function(event,player){ if(event.card.name!='juedou'||!event.card.isCard) return false; if(event.targets){ if(game.hasPlayer(function(current){ return !event.targets.includes(current)&&lib.filter.targetEnabled2(event.card,player,current); })){ return true; } } return false; }, content:function(){ 'step 0' var num=game.countPlayer(function(current){ return !trigger.targets.includes(current)&&lib.filter.targetEnabled2(trigger.card,player,current); }); player.chooseTarget('无双:是否为'+get.translation(trigger.card)+'增加'+(num>1?'至多两个':'一个')+'目标?',[1,Math.min(2,num)],function(card,player,target){ var trigger=_status.event.getTrigger(); var card=trigger.card; return !trigger.targets.includes(target)&&lib.filter.targetEnabled2(card,player,target); }).set('ai',function(target){ var player=_status.event.player; var card=_status.event.getTrigger().card; return get.effect(target,card,player,player); }).setHiddenSkill('gzwushuang'); 'step 1' if(result.bool){ if(player!=game.me&&!player.isOnline()) game.delayx(); } else event.finish(); 'step 2' var targets=result.targets.sortBySeat(); player.logSkill('gzwushuang',targets); trigger.targets.addArray(targets); }, }, //夏侯渊 gzshensu:{ audio:'shensu1', audioname:['xiahouba','re_xiahouyuan','ol_xiahouyuan'], group:['shensu1','shensu2'], preHidden:['shensu1','shensu2','gzshensu'], trigger:{player:'phaseDiscardBegin'}, direct:true, filter:function(event,player){ return player.hp>0; }, content:function(){ 'step 0' player.chooseTarget(get.prompt('gzshensu'),'失去1点体力并跳过弃牌阶段,视为对一名其他角色使用使用一张无距离限制的【杀】',function(card,player,target){ return player.canUse('sha',target,false); }).setHiddenSkill('gzshensu').set('goon',player.needsToDiscard()).set('ai',function(target){ var player=_status.event.player; if(!_status.event.goon||player.hp<=target.hp) return false; return get.effect(target,{name:'sha',isCard:true},player,player); }); 'step 1' if(result.bool){ var target=result.targets[0]; player.logSkill('gzshensu',target); player.loseHp(); trigger.cancel(); player.useCard({name:'sha',isCard:true},target,false); } }, }, //吕玲绮 gzshenwei:{ audio:'llqshenwei', mainSkill:true, init:function(player){ if(player.checkMainSkill('gzshenwei')){ player.removeMaxHp(); } }, trigger:{player:'phaseDrawBegin2'}, forced:true, filter:(event,player)=>!event.numFixed&&player.isMaxHandcard(), 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('gzwushuang')&&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('gzwushuang','phaseUseEnd'); }, derivation:'gzwushuang', }, //荀谌 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.giver.give(result.cards,event.gainner,'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.giver.give(result.cards,event.gainner,'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(get.attitude(player,event.player)>0) return false; 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||event.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(Math.min(player.getHistory('useCard').length,5)); }, }, 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.hasNature('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').includes(target.identity)) return true; }, }, }, effect3:{ charlotte:true, audio:'gzxiongnve', mark:true, intro:{ content:'其他角色对你造成伤害时,此伤害-1', }, trigger:{player:'damageBegin3'}, filter:function(event,player){ return event.source&&event.source!=player; }, forced:true, logTarget:'source', content:function(){ trigger.num--; }, ai:{ effect:{ target:function(card,player,target){ if(target==player) return; 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' player.give(result.cards,target); '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', trigger:{player:'useCardToTargeted'}, preHidden:true, filter:function(event,player){ return (event.card.name=='sha'||event.card.name=='wanjian')&&event.target.isUnseen(2)&&event.target.isEnemyOf(player); }, logTarget:'target', content:function(){ var target=trigger.target; target.addTempSkill('huoshui_norespond'); target.markAuto('huoshui_norespond',[trigger.card]); }, }, huoshui_norespond:{ charlotte:true, trigger:{global:'useCardEnd'}, onremove:true, forced:true, popup:false, silent:true, firstDo:true, filter:function(event,player){ return player.getStorage('huoshui_norespond').includes(event.card); }, content:function(){ player.unmarkAuto('huoshui_norespond',[trigger.card]); if(!player.storage.huoshui_norespond.length) player.removeSkill('huoshui_norespond'); }, mod:{ cardEnabled:function(card){ if(card.name=='shan') return false; }, cardRespondable:function(card){ if(card.name=='shan') return false; }, }, }, 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.addTempClass('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.includes(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.includes(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(get.recoverEffect(target,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('daming'); '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,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.includes(target); }); next.set('prompt2','或点「取消」令其回复1点体力'); next.set('goon',get.recoverEffect(target,player,player)); 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(target.isDamaged()) 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.line(trigger.player); trigger.player.recover(); } }, }, 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.includes(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.includes(card); }; var hs=player.countCards('h',hhs); for(var i of list){ if(i.countCards('h',hhs)>hs) return false; } return true; }, }, }, }, }, //刘巴 gztongduo:{ audio:2, trigger:{global:'phaseJieshuBegin'}, direct:true, preHidden:true, filter:function(event,player){ if(player!=event.player&&!player.hasSkill('gztongduo')||!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('gztongduo'); 'step 1' if(result.bool){ player.logSkill('gztongduo',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(target,'he')>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, position:'he', 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 target.give(result.cards,player); '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.includes(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('gzfankui',{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&&event.card.isCard&&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.player.countGainableCards(player,'he')>0; }, logTarget:'player', content:function(){ 'step 0' player.addTempSkill('gzsuzhi_count'); player.addMark('gzsuzhi_count',1,false); if(trigger.delay==false) game.delay(); 'step 1' player.gainPlayerCard(trigger.player,'he',true); }, }, 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.includes(_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('yexinjia_mark')&&!current.hasMark('xianqu_mark')&&!current.hasMark('yinyang_mark')&&!current.hasMark('zhulianbihe_mark')) })){ player.chooseTarget('是否令一名己方角色获得“阴阳鱼”标记?',function(card,player,current){ return current.isFriendOf(player)&&(!current.hasMark('yexinjia_mark')&&!current.hasMark('xianqu_mark')&&!current.hasMark('yinyang_mark')&&!current.hasMark('zhulianbihe_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('he')>0; }, check:function(event,player){ return event.num==1; }, content:function(){ if(trigger.num==1) player.draw(); else player.chooseToDiscard(true,'he',2); }, }, gzzhuosheng:{ audio:'zhuosheng', 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; }, }, audio:'zhuosheng', 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].includes('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.includes(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.includes(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.includes(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.includes(event.targets[0])) trigger.targets.removeArray(event.targets); else trigger.targets.addArray(event.targets); } }, group:['gzzhuosheng2_equip','gzzhuosheng2_silent'], subSkill:{ equip:{ audio:'zhuosheng', 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.includes(_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.isFriendOf(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.includes(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' player.give(cards,target); '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').includes((target))) return -Infinity; }, }, }, gzzhidao:{ audio:2, trigger:{player:'phaseUseBegin'}, forced:true, preHidden:true, content:function(){ 'step 0' player.chooseTarget('请选择【雉盗】的目标','本回合内只能对自己和该角色使用牌,且第一次对其造成伤害时摸一张牌',lib.filter.notMe,true).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, forced:true, preHidden:['gzyjili_remove'], 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){ var evt=false; for(var i of lib.phaseName){ evt=event.getParent(i); if(evt&&evt.player) break; } return evt&&evt.player&&player.getHistory('damage',function(evtx){ return evtx.getParent(evt.name)==evt; }).length==1; }, content:function(){ trigger.cancel(); player.removeCharacter(player.name1=='gz_yanbaihu'?0:1); }, }, }, }, gzyjili2:{ trigger:{global:'useCardAfter'}, charlotte:true, popup:false, forced:true, filter:function(event,player){ return event.gzyjili&&event.gzyjili.includes(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); }, }, fengyang_old:{ audio:'fengyang', zhenfa:'inline', global:'fengyang_old_nogain', subSkill:{ nogain:{ mod:{ canBeDiscarded:function(card,player,target){ if(get.position(card)=='e'&&player.identity!=target.identity&&game.hasPlayer(function(current){ return current.hasSkill('fengyang_old')&&(current==target||target.inline(current)); })) return false; }, canBeGained:function(card,player,target){ if(get.position(card)=='e'&&player.identity!=target.identity&&game.hasPlayer(function(current){ return current.hasSkill('fengyang_old')&&(current==target||target.inline(current)); })) return false; }, }, }, }, }, gzrekuangcai:{ audio:'gzkuangcai', forced:true, preHidden:true, trigger:{player:'phaseDiscardBegin'}, filter:function(event,player){ return !player.getHistory('useCard').length||!player.getHistory('sourceDamage').length; }, check:function(event,player){ return !player.getHistory('useCard').length; }, content:function(){ lib.skill.rekuangcai.change(player,player.getHistory('useCard').length?-1:1); }, mod:{ targetInRange:function(card,player){ if(player==_status.currentPhase) return true; }, cardUsable:function(card,player){ if(player==_status.currentPhase) return Infinity; }, }, }, 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; }, cardRecastable: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 list=[],players=game.filterPlayer(); for(var target of players){ if(target.isUnseen()||target.isHealthy()) continue; var add=true; for(var i of list){ if(i.isFriendOf(target)){ add=false; break; } } if(add) list.add(target); } return 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' var cards=get.cards(4); game.cardsGotoOrdering(cards); var next=player.chooseToMove('恂恂:将两张牌置于牌堆顶',true); next.set('list',[ ['牌堆顶',cards], ['牌堆底'], ]); next.set('filterMove',function(from,to,moved){ if(to==1&&moved[1].length>=2) return false; return true; }); next.set('filterOk',function(moved){ return moved[1].length==2; }); next.set('processAI',function(list){ var cards=list[0][1].slice(0).sort(function(a,b){ return get.value(b)-get.value(a); }); return [cards,cards.splice(2)]; }) 'step 1' var top=result.moved[0]; var bottom=result.moved[1]; top.reverse(); 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].includes('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')>0; }).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]; target.give(result.cards,player).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){ player.give(result.cards,target); 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].includes('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.includes(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'].includes(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)+'的花色和伤害属性'); next.set('ai',()=>false); 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;i=0) return 0; if(target.countCards('e',function(card){ return get.value(card,target)>=7-player.hp; })>0) return 1; var dist=get.distance(player,target,'attack'); if(dist>1&&dist-target.countCards('e')<=1) return true; return 0; }); 'step 1' if(result.index==0) player.draw(); else{ target.discardPlayerCard(player,'e',true); target.loseHp(); } }, }, gzlixia:{ audio:2, trigger:{global:'phaseZhunbeiBegin'}, noHidden:true, direct:true, filter:function(event,player){ return player!=event.player&&!event.player.isFriendOf(player)&&player.countDiscardableCards(event.player,'e')>0; }, 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=['失去1点体力','令'+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.includes(name)||!lib.inpile.includes(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.includes('tao'))&& (!event.filterCard({name:'jiu'},player,event)||storage.used.includes('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.includes(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.includes(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;ifalse, selectCard:-1, complexCard:true, check:()=>1, popname:true, audio:'yigui', viewAs:{name:'shan',isCard:true}, onuse:function(result,player){ player.logSkill('yigui'); var character=lib.skill.yigui_gzshan_backup.character; player.flashAvatar('yigui',character); player.storage.yigui.character.remove(character); _status.characterlist.add(character); game.log(player,'从「魂」中移除了','#g'+get.translation(character)); player.syncStorage('yigui'); player.updateMarks('yigui'); player.storage.yigui.used.add(result.card.name); }, }; return next; }, }, ai:{ respondShan:true, skillTagFilter:function(player){ var storage=player.storage.yigui; if(!storage||!storage.character.length||storage.used.includes('shan')||!lib.inpile.includes('shan')) return false; }, order:0.1, result:{player:1}, }, }, yigui_gzwuxie:{ hiddenCard:function(player,name){ var storage=player.storage.yigui; if(name!='wuxie'||!storage||!storage.character.length||storage.used.includes(name)||!lib.inpile.includes(name)) return false; return true; }, enable:'chooseToUse', filter:function(event,player){ if(event.type!='wuxie'||!event.filterCard({name:'wuxie'},player,event)||!lib.inpile.includes('wuxie')) return false; var storage=player.storage.yigui,target=event.getParent(2).player; if(!storage||!target||!storage.character.length||storage.used.includes('wuxie')) return false; var identity=target.identity; return ['unknown','ye'].includes(identity)||storage.character.some(function(i){ if(lib.character[i][1]=='ye') return true; var double=get.is.double(i,true); var groups=(double?double:[lib.character[i][1]]); return groups.includes(identity); }); }, chooseButton:{ dialog:function(event,player){ var dialog=ui.create.dialog('役鬼','hidden'); dialog.add([player.storage.yigui.character,'character']); return dialog; }, filter:function(button,player){ var evt=_status.event.getParent('chooseToUse'); var target=evt.getParent(2).player,identity=target.identity; if(['unknown','ye'].includes(identity)) return true; if(lib.character[button.link][1]=='ye') return true; var double=get.is.double(button.link,true); var groups=(double?double:[lib.character[button.link][1]]); return groups.includes(identity); }, check:function(button){ return 1/(1+game.countPlayer(function(current){ return current.identity==button.link; })); }, backup:function(links,player){ var character=links[0]; var next={ character:character, filterCard:()=>false, selectCard:-1, complexCard:true, check:()=>1, popname:true, audio:'yigui', viewAs:{name:'wuxie',isCard:true}, onuse:function(result,player){ player.logSkill('yigui'); var character=lib.skill.yigui_gzwuxie_backup.character; player.flashAvatar('yigui',character); player.storage.yigui.character.remove(character); _status.characterlist.add(character); game.log(player,'从「魂」中移除了','#g'+get.translation(character)); player.syncStorage('yigui'); player.updateMarks('yigui'); player.storage.yigui.used.add(result.card.name); }, }; return next; }, }, ai:{ order:0.1, result:{player:1}, }, }, jihun:{ trigger:{ player:'damageEnd', global:'dyingAfter', }, audio:2, frequent:true, preHidden:true, filter:function(event,player){ return event.name=='damage'||(event.player.isAlive()&&!event.player.isFriendOf(player)) }, content:function(){ var list=_status.characterlist.randomGets(1); if(list.length){ _status.characterlist.removeArray(list); player.storage.yigui.character.addArray(list); lib.skill.gzhuashen.drawCharacter(player,list); player.syncStorage('yigui'); player.updateMarks('yigui'); game.log(player,'获得了'+get.cnNumber(list.length)+'张「魂」'); } }, }, 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?'(你)':'')+'回复1点体力'); 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; }); '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.includes(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){ player.give(result.cards,target); } }, 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.includes(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(){trigger.num++}, audio:['yongsi1',2], }, eff2:{ sub:true, trigger:{player:'phaseUseBegin'}, //priority:8, forced:true, noHidden:true, equipSkill:true, filter:function(event,player){ if(player.isDisabled(5)) return false; return game.hasPlayer(function(current){ return player.canUse('zhibi',current); })&&!game.hasPlayer(function(current){ return current.getEquips('yuxi').length>0; }); }, content:function(){ player.chooseUseTarget('玉玺(庸肆):选择知己知彼的目标',{name:'zhibi'}); }, audio:['yongsi1',2], }, eff3:{ sub:true, trigger:{global:'useCardToTargeted'}, //priority:16, forced:true, filter:function(event,player){ return event.target&&event.target==player&&event.card&&event.card.name=='zhibi' }, check:function(){return false}, content:function(){ player.showHandcards(); } } } }, gzfudi:{ trigger:{global:'damageEnd'}, direct:true, preHidden:true, audio:2, filter:function(event,player){return event.source&&event.source.isAlive()&&event.source!=player&&event.player==player&&player.countCards('h')&&event.num>0}, 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); player.give(result.cards,trigger.source); } 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.includes(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]; } } } } }, gzcongjian:{ 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', lordSkill:true, 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.includes('gzjieyue')&&player.countCards('h',function(card){ return get.value(card)<7; })>1) rank=5; if(skills.includes('qiaobian')&&player.countCards('h')>4) rank=6; if((get.guozhanRank(player.name1,player)3) return 'qiaobian'; if(skills.includes('gzjieyue')&&player.countCards('h',function(card){ return get.value(card)<7; })) return 'gzjieyue'; if(skills.includes('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.getEquips('yuxi').length>0; }); })&&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; player.give(result.cards,result.targets[0]); } 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'); target.give(cards,player); 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){ target.give(result.cards,player); } }, 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); player.give(result.cards[0],result.targets[0]); 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:{ audio:'rexuanhuo', global:'gzxuanhuo_others', derivation:['fz_new_rewusheng','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:{ audio:'rexuanhuo', forceaudio:true, 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=['new_rewusheng','gzpaoxiao','new_longdan','new_tieji','liegong','xinkuanggu']; player.chooseControl(list).set('ai',function(){ if(list.includes('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_new_rewusheng:{ audio:true, inherit:'new_rewusheng', }, 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:'reenyuan', 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:{ audio:'reenyuan', trigger:{target:'useCardToTargeted'}, forced:true, filter:function(event,player){ return event.card.name=='tao'&&event.player!=player; }, logTarget:'player', content:function(){trigger.player.draw()}, }, damage:{ audio:'reenyuan', 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)+'一张手牌,或失去1点体力','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){ trigger.source.give(result.cards[0],player,'giveAuto'); } else trigger.source.loseHp(); }, }, } }, gzjushou:{ audio:"xinjushou", trigger:{ player:"phaseJieshuBegin", }, preHidden:true, content:function(){ 'step 0' var list=[],players=game.filterPlayer(); for(var target of players){ if(target.isUnseen()) continue; var add=true; for(var i of list){ if(i.isFriendOf(target)){ add=false; break; } } if(add) list.add(target); } event.num=list.length; 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; } }, }, locked:false, 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.includes(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.includes(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; }, check:function(event,player){ return player.needsToDiscard(); }, content:function(){ player.addTempSkill('keji_add','phaseAfter'); }, }, "keji_add":{ charlotte:true, 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, locked:false, //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:"yinghun", audio:'yinghun_sunce', }, 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, content:function(){ 'step 0' event.cards=game.cardsGotoOrdering(get.cards(2)).cards; 'step 1' if(_status.connectMode) game.broadcastAll(function(){_status.noclearcountdown=true}); event.given_map={}; 'step 2' 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 3' if(result.bool){ event.cards.removeArray(result.links); event.togive=result.links.slice(0); player.chooseTarget('选择一名角色获得'+get.translation(result.links),true).set('ai',function(target){ var att=get.attitude(_status.event.player,target); if(_status.event.enemy){ return -att; } else if(att>0){ return att/(1+target.countCards('h')); } else{ return att/100; } }).set('enemy',get.value(event.togive[0],player,'raw')<0); } 'step 4' if(result.targets.length){ var id=result.targets[0].playerid,map=event.given_map; if(!map[id]) map[id]=[]; map[id].addArray(event.togive); } if(cards.length>0) event.goto(2); 'step 5' if(_status.connectMode){ game.broadcastAll(function(){delete _status.noclearcountdown;game.stopCountChoose()}); } var list=[]; for(var i in event.given_map){ var source=(_status.connectMode?lib.playerOL:game.playerMap)[i]; player.line(source,'green'); list.push([source,event.given_map[i]]); } game.loseAsync({ gain_list:list, giver:player, animate:'draw', }).setContent('gaincardMultiple'); }, 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 true;//target.countCards('h')2){ return Math.max(0,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;i0) result.targets[i].draw(num); } } }, ai:{ maixie:true, "maixie_hp":true, effect:{ target:function(card,player,target,current){ if(get.tag(card,'damage')&&target.hp>1){ 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,att=get.attitude(player,target); if(att==0) return 0; if(att>0){ if(target.isTurnedOver()) return 1000-target.countCards('h'); return -1; } else{ if(target.isTurnedOver()) return -1; if(player.getDamagedHp()>=3) return -1; return target.countCards('h')+1; } } "step 1" if(result.bool){ var target=result.targets[0]; event.target=target; player.logSkill('gzfangzhu',target); var num=player.getDamagedHp(); if(num>0) target.chooseToDiscard('he',num,'放逐:弃置'+get.cnNumber(num)+'张牌并失去1点体力','或者点击“取消”不弃牌,改为摸'+get.cnNumber(num)+'张牌并叠置').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)); }); else{ target.turnOver(); event.finish(); } } else event.finish(); "step 2" if(result.bool){ target.loseHp(); } else{ target.draw(player.getDamagedHp()); 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].includes(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].includes(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; if(get.tag(card,'damage')) return 'zeroplayertarget'; }, }, }, }, 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.hasCard(function(card){ return card.hasTag('lianheng')||card.hasGaintag('_lianheng'); },'h'); }, filterCard:function(card){ return card.hasTag('lianheng')||card.hasGaintag('_lianheng'); }, filterTarget:function(card,player,target){ if(target==player) return false; if(player.isUnseen()) return target.isUnseen(); return !target.isFriendOf(player); }, check:function(card){ if(card.name=='tao') return 0; return 5-get.value(card); }, selectCard:[1,3], discard:false, lose:false, delay:false, content:function(){ "step 0" player.give(cards,target); "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.includes(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); } } } } }, gzsanyao:{ audio:'sanyao', inherit:'sanyao', filterTarget:function(card,player,target){ return target.hp>player.hp||target.countCards('h')>player.countCards('h'); }, }, 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.isFriendOf(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.canEquip(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('jiahe_reyingzi')) list.push('reyingzi'); if(event.num>=2&&!player.hasSkill('jiahe_haoshi')) list.push('haoshi'); if(event.num>=3&&!player.hasSkill('jiahe_shelie')) list.push('shelie'); if(event.num>=4&&!player.hasSkill('jiahe_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.includes('haoshi')){ var nh=player.countCards('h'); if(player.hasSkill('reyingzi')){ if(nh==0) return 'haoshi'; } else{ if(nh<=1) return 'haoshi'; } } if(controls.includes('shelie')){ return 'shelie'; } if(controls.includes('reyingzi')){ return 'reyingzi'; } if(controls.includes('duoshi')){ return 'duoshi'; } return controls.randomGet(); }); 'step 2' if(result.control!='cancel2'){ var skill='jiahe_'+result.control; player.addTempSkill(skill); if(!event.done) player.logSkill('jiahe_put'); game.log(player,'获得了技能','【'+get.translation(skill)+'】'); if(event.num>=5&&!event.done){ event.done=true; event.goto(1); } } } }, jiahe_reyingzi:{ inherit:'reyingzi', }, jiahe_haoshi:{ inherit:'haoshi', }, jiahe_shelie:{ inherit:'shelie', }, jiahe_duoshi:{ inherit:'duoshi', }, 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); }, 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.includes(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, lordSkill: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, }, trigger:{ global:['loseAfter','cardsDiscardAfter','equipAfter'], }, forced:true, filter:function(event,player){ if(event.name=='equip'){ if(player==event.player) return false; if(event.card.name=='feilongduofeng'&&event.player.getCards('e').includes(event.card)) return true; return event.player.hasHistory('lose',function(evt){ if(evt.position!=ui.discardPile||evt.getParent().name!='equip') return false; for(var i of evt.cards){ if(i.name=='feilongduofeng'&&get.position(i,true)=='d') return true; } return false; }) } if(event.name=='lose'&&(event.position!=ui.discardPile||event.getParent().name=='equip')) return false; for(var i of event.cards){ if(i.name=='feilongduofeng'&&get.position(i,true)=='d') return true; } return false; }, logTarget:function(event,player){ if(event.name=='equip'&&event.card.name=='feilongduofeng'&&event.player.getCards('e').includes(event.card)) return event.player; return []; }, content:function(){ game.delayx(); var cards=[]; if(trigger.name=='equip'){ if(trigger.card.name=='feilongduofeng'&&trigger.player.getCards('e').includes(trigger.card)) cards.push(trigger.card); trigger.player.getHistory('lose',function(evt){ if(evt.position!=ui.discardPile||evt.getParent()!=trigger) return false; for(var i of evt.cards){ if(i.name=='feilongduofeng'&&get.position(i,true)=='d') cards.push(i); } return false; }) } if(trigger.name=='lose'){ for(var i of trigger.cards){ if(i.name=='feilongduofeng'&&get.position(i,true)=='d') cards.push(i); } } var owner=get.owner(cards[0]); if(owner) player.gain(cards,'give',owner,'bySelf'); else player.gain(cards,'gain2'); }, group:'zhangwu_draw', subSkill:{ draw:{ audio:'zhangwu', trigger:{ player:'loseEnd', global:['equipEnd','addJudgeEnd','gainEnd','loseAsyncEnd','addToExpansionEnd'], }, filter:function(event,player){ if(event.name=='lose'&&event.getParent().name=='useCard') return false; var evt=event.getl(player); return evt&&evt.player==player&&evt.cards2.filter(function(i){ return i.name=='feilongduofeng'&&get.owner(i)!=player; }).length>0; }, forced:true, content:function(){ 'step 0' var cards=[],evt=trigger.getl(player); cards.addArray(evt.cards2.filter(function(i){ return i.name=='feilongduofeng'&&get.owner(i)!=player; })); player.showCards(cards,get.translation(player)+'发动了【章武】'); for(var i of cards){ var owner=get.owner(i); if(owner) owner.lose(i,ui.cardPile)._triggered=null; else{ i.fix(); ui.cardPile.appendChild(i); } } 'step 1' player.draw(2); }, }, }, }, shouyue:{ unique:true, forceunique:true, group:'wuhujiangdaqi', derivation:'wuhujiangdaqi', mark:true, lordSkill:true, }, wuhujiangdaqi:{ unique:true, forceunique:true, nopop:true, mark:true, intro:{ content:"@
    【武圣】
    将“红色牌”改为“任意牌”
    【咆哮】
    增加描述“你使用的【杀】无视其他角色的防具”
    【龙胆】
    增加描述“你每发动一次‘龙胆’便摸一张牌”
    【烈弓】
    增加描述“你的攻击范围+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); }, }, gzyicheng:{ audio:'yicheng', trigger:{ global:['useCardToPlayered','useCardToTargeted'], }, preHidden:true, //frequent:true, direct:true, filter:function(event,player){ if(event.card.name!='sha') return false; if(event.name=='useCardToPlayered'&&!event.isFirstTarget) return false; var target=lib.skill.gzyicheng.logTarget(event,player); if(target==player) return true; return target.inline(player)&&target.isAlive()&&player.hasSkill('gzyicheng'); }, logTarget:function(event,player){ return event.name=='useCardToPlayered'?event.player:event.target; }, content:function(){ 'step 0' var target=lib.skill.gzyicheng.logTarget(trigger,player); event.target=target; target.chooseBool(get.prompt('gzyicheng'),'摸一张牌,然后弃置一张牌').set('frequentSkill','gzyicheng'); 'step 1' if(result.bool){ player.logSkill('gzyicheng',target); target.draw(); target.chooseToDiscard('he',true); } }, }, 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); player.give(card,trigger.player); } } }, gzhuyuan:{ audio:'huyuan', trigger:{player:'phaseJieshuBegin'}, direct:true, preHidden:true, filter:function(event,player){ return player.countCards('he')>0; }, content:function(){ 'step 0' player.chooseCardTarget({ filterCard:true, position:'he', filterTarget:function(card,player,target){ if(player==target) return false; var card=ui.selected.cards[0]; if(get.type(card)!='equip') return true; return target.canEquip(card); }, prompt:get.prompt2('gzhuyuan'), complexSelect:true, ai1:function(card){ if(!_status.event.goon) return false; var player=_status.event.player; if(get.type(card)!='equip') return 0; return 7.5-get.value(card); }, ai2:function(target){ if(!_status.event.goon) return false; var player=_status.event.player,card=ui.selected.cards[0]; return get.effect(target,card,player,player); }, goon:game.hasPlayer(function(current){ return get.effect(current,{name:'guohe_copy',position:'ej'},player,player)>0; }) }).setHiddenSkill('gzhuyuan'); 'step 1' if(result.bool){ var target=result.targets[0],card=result.cards[0]; player.logSkill('gzhuyuan',target); if(get.type(card)=='equip'){ player.$give(card,target,false); game.delayx(); target.equip(card); } else{ player.give(card,target); event.finish(); } } else event.finish(); 'step 2' if(game.hasPlayer(function(current){ return current.hasCard(function(card){ return lib.filter.canBeDiscarded(card,player,current); },'ej'); })){ player.chooseTarget('是否弃置场上的一张牌?',function(card,player,target){ return target.hasCard(function(card){ return lib.filter.canBeDiscarded(card,player,target); },'ej'); }).set('ai',function(target){ const player=_status.event.player; return get.effect(target,{name:'guohe_copy',position:'ej'},player,player); }) } else event.finish(); 'step 3' if(result.bool){ var target=result.targets[0]; player.line(target,'thunder'); player.discardPlayerCard(target,true,'ej'); } }, }, 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.canEquip(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); })){ 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, 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.includes('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:'yinghun', audio:'yinghun_sunce', filter:function(event,player){ return player.hp<=1&&player.isDamaged()&&!player.hasSkill('yinghun'); } }, 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('弃置一张装备牌,或受到1点伤害','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, ruleSkill:true, forced:true, popup:false, filter:function(event,player){ return player.isUnseen(2)&&!player.hasSkillTag('nomingzhi',false,null,true); }, content:function(){ 'step 0' if(player.phaseNumber==1&&player.isUnseen(0)&&(_status.connectMode?lib.configOL.junzhu:get.config('junzhu'))){ var name=player.name1; if(name.indexOf('gz_')!=0||!lib.junList.includes(name.slice(3))){ event.goto(3); } else{ event.junzhu_name='gz_jun_'+name.slice(3); player.chooseBool('是否将主武将牌替换为“'+get.translation(event.junzhu_name)+'”?'); } } else event.goto(3); 'step 1' if(result.bool){ var to=event.junzhu_name; event.maxHp=player.maxHp; player.reinit(player.name1,to,4); if(lib.skill[to]) game.trySkillAudio(to,player); player.showCharacter(0); var group=lib.character[to][1]; var yelist=game.filterPlayer(function(current){ if(current.identity!='ye') return false; if(current==player) return true; return current.group==group; }); if(yelist.length>0){ player.line(yelist,'green'); game.log(yelist,'失去了野心家身份'); game.broadcastAll(function(list,group){ for(var i=0;ievent.maxHp) player.recover(player.maxHp-event.maxHp); 'step 3' 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;i0){ target.chooseControl(list,'cancel2').set('prompt','是否响应'+get.translation(player)+'发起的阵法召唤?').set('ai',function(){ return Math.random()<0.5?0:1; }); } else event.goto(3); } else event.goto(3); 'step 2' if(result.control!='cancel2'){ if(result.control=='明置'+get.translation(target.name1)){ target.showCharacter(0); } else{ target.showCharacter(1); } } 'step 3' if(event.list.length) event.goto(1); 'step 4' game.delay(); }, ai:{ order:5, result:{ player:1 } } }, ushio_huanxin:{ trigger:{ player:['damageEnd','useCardAfter'], source:'damageSource', }, frequent:true, preHidden:true, filter:function(event,player,name){ if(name=='useCardAfter') return get.type(event.card)=='equip'; if(name=='damageEnd') return true; return event.getParent().name=='sha'; }, content:function(){ player.judge().set('callback',function(){ var card=event.judgeResult.card; if(card&&get.position(card,true)=='o'){ player.gain(card,'gain2'); player.chooseToDiscard(true,'he'); } }); }, }, ushio_xilv:{ trigger:{player:'judgeEnd'}, forced:true, preHidden:true, content:function(){ player.addTempSkill('ushio_xilv2',{player:'phaseJieshu'}); player.addMark('ushio_xilv2',1,false); }, }, ushio_xilv2:{ onremove:true, charlotte:true, mod:{ maxHandcard:function(player,num){ return num+player.countMark('ushio_xilv2'); } }, intro:{ content:'手牌上限+#', }, }, }, game:{ canReplaceViewpoint:()=>true, showYexings:function(){ if(_status.showYexings) return; _status.showYexings=true; var next=game.createEvent('showYexings',false); next.setContent(function(){ 'step 0' event.targets=game.filterPlayer(function(current){ return lib.character[current.name1][1]=='ye'; }).sortBySeat(_status.currentPhase); event.targets2=[]; 'step 1' var target=targets.shift(); event.target=target; target.chooseBool('是否【暴露野心】,展示主将并继续战斗?','若选择“否”,则视为本局游戏失败'); 'step 2' if(result.bool){ event.targets2.push(target); target.$fullscreenpop('暴露野心','thunder'); game.log(target,'暴露了野心'); target.showCharacter(0); game.delay(2); if(targets.length) event.goto(1); } else{ if(targets.length) event.goto(1); else{ var winner=game.findPlayer(function(current){ return lib.character[current.name1][1]!='ye'; }); if(winner){ game.broadcastAll(function(id){ game.winner_id=id; },winner.playerid); game.checkResult(); } delete _status.showYexings; event.finish(); } } 'step 3' var source=event.targets2.shift(); event.source=source; event.targets3=[]; //event.targets4=[source]; if(!_status.yexinjia_list) _status.yexinjia_list=['夏','商','周','秦','汉','隋','唐','宋','辽','金','元','明']; source.chooseControl(_status.yexinjia_list).set('prompt','请选择自己所属的野心家势力的标识').set('ai',()=>(_status.yexinjia_list?_status.yexinjia_list.randomGet():0)); 'step 4' var text,source=event.source; if(result.control){ text=result.control; _status.yexinjia_list.remove(result.control); } else text=_status.yexinjia_list.randomRemove(); lib.group.push(text); lib.translate[text+'2']=text; lib.groupnature[text]='kami'; event.text=text; game.broadcastAll(function(player,text){ player.identity=text; player.setIdentity(text,'kami'); },source,text); source.changeGroup(text); source.removeMark('yexinjia_mark',1); var targets=game.filterPlayer(function(current){ return current.identity!='ye'&¤t!=source&&!get.is.jun(current)&&!event.targets2.includes(current)&&!current.getStorage('yexinjia_friend').length; }); if(!targets.length) event.goto(8); else event.targets=targets; 'step 5' var source=event.source; var target=targets.shift(); event.target=target; source.line(target,'green'); target.chooseBool('是否响应'+get.translation(source)+'发起的【拉拢人心】?','将势力改为'+event.text).set('ai',_status.event.choice).set('choice',function(){ let fs=target.getFriends(true).length; if(game.players.length<=2*fs) return false; if(source.getFriends(true).length+fs>game.players.length/2) return true; if(target.isDamaged()||target.countCards('h')<4) return false; return true; }()); 'step 6' if(result.bool){ target.chat('加入'); //event.targets4.push(target); game.broadcastAll(function(player,text){ player.identity=text; player.setIdentity(text,'kami'); },target,event.text); target.changeGroup(event.text); } else{ target.chat('拒绝'); event.targets3.push(target); } game.delay(1.5); if(targets.length) event.goto(5); /* else if(event.targets4.length){ for(var i of event.targets4){ i.markAuto('yexinjia_friend',event.targets4.filter(j=>j!=i)); } } */ 'step 7' if(event.targets3.length){ for(var i of event.targets3){ i.drawTo(4); i.recover(); } } 'step 8' if(event.targets2.length) event.goto(3); else{ delete _status.showYexings; if(!game.hasPlayer(current=>{ return game.hasPlayer(target=>{ return !target.isFriendOf(current); }); })){ game.broadcastAll(function(id){ game.winner_id=id; },event.source.playerid); game.checkResult(); } } }); }, 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('
    群雄割据:'+(lib.configOL.separatism?'开启':'关闭')); 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=_status.separatism?get.modetrans({ mode:lib.config.mode, separatism:true }):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 ind=0;inddouble.includes(group)); return doublex.includes(group2); } else{ if(group1=='ye') return group2!='ye'; var double=get.is.double(name2,true); if(double) return double.includes(group1); return group1==group2; } }; for(var i=0;iget.is.double(mainx,true).includes(group)).randomGet(); else player.trueIdentity=get.is.double(mainx,true).find(group=>get.is.double(vicex,true).includes(group)); } else if(lib.character[mainx][1]=='ye'&&get.is.double(vicex,true)) player.trueIdentity=get.is.double(vicex,true).randomGet(); if(back){ list.remove(player.name1); list.remove(player.name2); 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.includes(i)) continue; if(lib.filter.characterDisabled(i)) continue; if(get.config('onlyguozhan')){ if(!lib.characterGuozhanFilter.some(pack=>lib.characterPack[pack][i])) continue; if(get.is.jun(i)) continue; } if(lib.character[i][4].includes('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;idouble.includes(group)); return doublex.includes(group2); } else{ if(group1=='ye') return group2!='ye'; var double=get.is.double(name2,true); if(double) return double.includes(group1); return group1==group2; } }; if(!ui.selected.buttons.length){ return ui.dialog.buttons.some(but=>{ if(but==button) return false; return filterChoice(button.link,but.link); }); } return filterChoice(ui.selected.buttons[0].link,button.link); }; next.switchToAuto=function(){ event.ai(game.me,list); ui.arena.classList.remove('selecting'); }; var createCharacterDialog=function(){ event.dialogxx=ui.create.characterDialog('heightset',function(i){ if(i.indexOf('gz_shibing')==0) return true; if(get.config('onlyguozhan')){ if(!lib.characterGuozhanFilter.some(pack=>lib.characterPack[pack][i])) return true; if(get.is.jun(i)) return true; } },get.config('onlyguozhanexpand')?'expandall':undefined,get.config('onlyguozhan')?'onlypack:mode_guozhan':undefined); if(ui.cheat2){ ui.cheat2.addTempClass('controlpressdownx',500); ui.cheat2.classList.remove('disabled'); } }; if(lib.onfree){ lib.onfree.push(createCharacterDialog); } else{ createCharacterDialog(); } ui.create.cheat2=function(){ ui.cheat2=ui.create.control('自由选将',function(){ if(this.dialog==_status.event.dialog){ if(game.changeCoin){ game.changeCoin(50); } this.dialog.close(); _status.event.dialog=this.backup; this.backup.open(); delete this.backup; game.uncheck(); game.check(); if(ui.cheat){ ui.cheat.addTempClass('controlpressdownx',500); ui.cheat.classList.remove('disabled'); } } else{ if(game.changeCoin){ game.changeCoin(-10); } this.backup=_status.event.dialog; _status.event.dialog.close(); _status.event.dialog=_status.event.parent.dialogxx; this.dialog=_status.event.dialog; this.dialog.open(); game.uncheck(); game.check(); if(ui.cheat){ ui.cheat.classList.add('disabled'); } } }); if(lib.onfree){ ui.cheat2.classList.add('disabled'); } } ui.create.cheat=function(){ _status.createControl=ui.cheat2; ui.cheat=ui.create.control('更换',function(){ if(ui.cheat2&&ui.cheat2.dialog==_status.event.dialog){ return; } if(game.changeCoin){ game.changeCoin(-3); } event.list=event.list.concat(list); event.list.randomSort(); // list=event.list.splice(0,parseInt(get.config('choice_num'))); list=game.getCharacterChoice(event.list,parseInt(get.config('choice_num'))); var buttons=ui.create.div('.buttons'); var node=_status.event.dialog.buttons[0].parentNode; _status.event.dialog.buttons=ui.create.buttons(list,'character',buttons); _status.event.dialog.content.insertBefore(buttons,node); buttons.addTempClass('start'); node.remove(); game.uncheck(); game.check(); }); delete _status.createControl; } if(!_status.brawl||!_status.brawl.chooseCharacterFixed){ if(!ui.cheat&&get.config('change_choice')) ui.create.cheat(); if(!ui.cheat2&&get.config('free_choose')) ui.create.cheat2(); } } "step 1" if(ui.cheat){ ui.cheat.close(); delete ui.cheat; } if(ui.cheat2){ ui.cheat2.close(); delete ui.cheat2; } if(result.buttons){ var name1=result.buttons[0].link,name2=result.buttons[1].link; event.choosen=[name1,name2]; if(get.is.double(name1,true)){ if(!get.is.double(name2,true)) event._result={control:lib.character[name2][1]}; else if(get.is.double(name1,true).removeArray(get.is.double(name2,true)).length==0||get.is.double(name2,true).removeArray(get.is.double(name1,true)).length==0) game.me.chooseControl(get.is.double(name2,true).filter(group=>get.is.double(name1,true).includes(group))).set('prompt','请选择你代表的势力').set('ai',()=>_status.event.controls.randomGet()); else event._result={control:get.is.double(name1,true).find(group=>get.is.double(name2,true).includes(group))}; } else if(lib.character[name1][1]=='ye'&&get.is.double(name2,true)) game.me.chooseControl(get.is.double(name2,true)).set('prompt','请选择副将代表的势力').set('ai',()=>_status.event.controls.randomGet()); } 'step 2' if(result&&result.control) game.me.trueIdentity=result.control; if(event.choosen){ game.me.init(event.choosen[0],event.choosen[1],false); game.addRecentCharacter(event.choosen[0],event.choosen[1]); } event.list.remove(game.me.name1); event.list.remove(game.me.name2); 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;idouble.includes(group)); return doublex.includes(group2); } else{ if(group1=='ye') return group2!='ye'; var double=get.is.double(name2,true); if(double) return double.includes(group1); return group1==group2; } }; if(!ui.selected.buttons.length){ return ui.dialog.buttons.some(but=>{ if(but==button) return false; return filterChoice(button.link,but.link); }); } return filterChoice(ui.selected.buttons[0].link,button.link); }; list.randomSort(); for(var i=0;idouble.includes(group)); return doublex.includes(group2); } else{ if(group1=='ye') return group2!='ye'; var double=get.is.double(name2,true); if(double) return double.includes(group1); return group1==group2; } }; for(var i=0;iget.is.double(name2,true).includes(group)); } else if(lib.character[name1][1]=='ye'&&get.is.double(name2,true)){ chosen.push(lib.playerOL[i]); chosenCharacter.push([name1,name2]); } } event.result2=result; if(chosen.length){ for(var i=0;iget.is.double(name1,true).includes(group)); } if(lib.character[name1][1]=='ye'){ str='请选择你的副将代表的势力'; choice=get.is.double(name2,true); } chosen[i]=[chosen[i],[str,[choice.map(function(i){ return ['','','group_'+i]; }),'vcard']],1,true]; } game.me.chooseButtonOL(chosen,function(player,result){ if(player==game.me) player.trueIdentity=result.links[0][2].slice(6); }).set('switchToAuto',function(){ _status.event.result='ai'; }).set('processAI',function(){ return { bool:true, links:[_status.event.dialog.buttons.randomGet().link], } }); } else event._result={}; 'step 2' if(!result) result={}; var result2=event.result2; game.broadcastAll(function(result,result2){ 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:'当与你势力相同的一名角色成为【杀】的目标后,你可以令该角色摸一张牌,然后弃置一张牌。', gzyicheng:'疑城', gzyicheng_info:'阵法技。当你和你队列中的角色使用【杀】指定第一个目标后,或成为【杀】的目标后,其可以摸一张牌,然后弃置一张牌。', yizhi:'遗志', yizhi_info:'副将技,此武将牌减少半个阴阳鱼。若你的主将拥有技能〖观星〗,则将其描述中的X改为5;若你的主将没有技能〖观星〗,则你视为拥有技能〖观星〗。', tianfu:'天覆', tianfu_info:'主将技,阵法技,若当前回合角色与你处于同一队列,则你视为拥有技能〖看破〗。', ziliang:'资粮', ziliang_info:'副将技,当与你势力相同的一名角色受到伤害后,你可以将一张“田”交给该角色。', gzjixi:'急袭', gzjixi_info:'主将技,此武将牌减少半个阴阳鱼。你可以将一张“田”当作【顺手牵羊】使用。', huyuan:'护援', huyuan_info:'结束阶段开始时,你可以将一张装备牌置入一名角色的装备区,然后你可以弃置该角色距离为1的一名角色的一张牌。', heyi:'鹤翼', heyi_info:'阵法技。与你处于同一队列的角色视为拥有技能〖飞影〗。', gzhuyuan:'护援', gzhuyuan_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点伤害。', gzdangxian:'当先', gzdangxian_info:'锁定技。当你首次明置此武将牌时,你获得一枚“先驱”标记。回合开始时,你获得一个额外的出牌阶段。', gzhuanshi:'缓释', gzhuanshi_info:'一名己方角色的判定牌生效前,你可打出一张牌代替之。', gzhongyuan:'弘援', gzhongyuan_info:'①出牌阶段限一次。你可以令一张没有「合纵」标签的卡牌视为拥有「合纵」标签直到本回合结束。②当你即将因合纵效果摸牌时,你可放弃摸牌,并令一名己方角色摸等量的牌。', gzmingzhe:'明哲', gzmingzhe_info:'你的回合外,当你使用或打出红色手牌,或失去装备区内的红色装备牌时,你可摸一张牌。', gzxiongzhi:'雄志', gzxiongzhi_info:'限定技。出牌阶段,你可依次展示牌堆顶的X张牌并使用之(X为你的体力上限)。', gzquanbian:'权变', gzquanbian_info:'当你于出牌阶段内使用/打出手牌时,若此牌有花色且你本回合内未使用/打出过该花色的其他手牌,则你可以观看牌堆顶X张牌,选择获得其中的一张并展示之。若你本回合使用过与得到的牌花色相同的牌,则你本回合内不能再发动〖权变〗。', gzhuishi:'慧识', gzhuishi_info:'摸牌阶段,你可以放弃摸牌,改为观看牌堆顶的X张牌,获得其中的一半(向下取整),然后将其余牌置入牌堆底。(X为弃牌堆顶的两张牌的名称字数之和)', gzqingleng:'清冷', gzqingleng_info:'一名角色的回合结束时,若其有未明置的,则你可将一张牌当无距离限制的冰属性【杀】对其使用;若其所有武将牌均未明置,则你摸一张牌。', gzchoufa:'筹伐', gzchoufa_info:'出牌阶段限一次,你可展示一名其他角色的一张手牌A。你令其所有类型与A不同的手牌的牌名均视为【杀】且均视为无属性直到本回合结束。', gzbolan:'博览', gzbolan_info:'每名角色的出牌阶段限一次。其可以随机展示武将牌堆顶的一张武将牌,然后根据此武将牌包含的势力选择获得一个技能直到回合结束:魏:〖奇策〗;蜀:〖挑衅〗;吴:〖制衡〗;群:〖除疠〗;晋:〖三陈〗。若该角色不为你,则其失去1点体力。', gzsanchen:'三陈', gzsanchen_info:'出牌阶段,你可选择一名本回合内未选择过的角色。其摸三张牌,然后弃置三张牌。若其未以此法弃置牌或以此法弃置的牌的类别均不相同,则你获得一枚“陈”且其摸一张牌;否则你本阶段内不能再发动〖三陈〗。', gzpozhu:'破竹', gzpozhu_info:'主将技。此武将牌减少半个阴阳鱼。出牌阶段,你可以移去一枚“陈”并将一张手牌当做【出其不意】使用。若你未因此牌造成过伤害,则你不能再发动〖破竹〗直到回合结束。', gzyimie:'夷灭', gzyimie_info:'主将技,此武将牌减少一整个阴阳鱼。每轮限一次,当你对其他角色造成伤害时,若伤害值X小于Y,则你可失去1点体力,将伤害值改为Y。此伤害结算结束后,其回复(Y-X)点体力。(Y为其体力值)', gztairan:'泰然', gztairan_info:'出牌阶段开始时,你可以失去任意点体力并弃置任意张牌(弃牌数不能大于你已损失的体力值)。若如此做,本回合结束时,你回复等量的体力并摸等量的牌。', gzxuanbei:'选备', gzxuanbei_info:'①当你首次明置此武将牌时,你获得两张拥有“应变”或“合纵”标签的牌(不足则摸牌),且你本回合内使用带有“应变”标签的牌时直接强化,使用带有“合纵”标签的牌时摸一张牌。②当你死亡时,你可以令一名其他角色变更副将。', gzzhaosong:'诏颂', gzzhaosong_info:'每局游戏每项限一次。①一名角色进入濒死状态时,你可以令其回复至2点体力并摸一张牌。②出牌阶段,你可观看一名其他角色的所有暗置武将牌和手牌,然后可以获得其区域内的一张牌。③一名角色使用【杀】选择唯一目标后,你可以为此【杀】增加两个目标。', gzlisi:'离思', gzlisi_info:'一名己方角色死亡后,你可以选择〖诏颂〗中的一个已发动过的选项,令其视为未发动过。', gzcaiyuan:'才媛', gzcaiyuan_info:'锁定技。结束阶段开始时,若你的手牌数大于本回合开始时的手牌数,则你摸两张牌或回复1点体力。', gzwanyi:'婉嫕', gzwanyi_info:'出牌阶段每项各限一次。你可以将一张带有“合纵”标签的牌当做【联军盛宴】/【火烧连营】/【挟天子以令诸侯】/【戮力同心】使用。', gzmaihuo:'埋祸', gzmaihuo_info:'限定技。当有己方角色成为【杀】的目标时,你可以取消此【杀】的所有目标。然后此【杀】的使用者下回合开始时,其视为对你使用一张【杀】。若此【杀】对你造成伤害,则你防止此伤害,摸两张牌并移除此武将牌(若此武将牌为副将则改为变更副将)。', gzzhenxi:'震袭', gzzhenxi_info:'当你使用【杀】指定目标后,你可以选择一项:1.弃置目标角色一张牌;2.将一张♦非锦囊牌当做【乐不思蜀】或♣非锦囊牌当做【兵粮寸断】对目标角色使用;3.背水:若其有暗置的武将牌且你的武将牌均明置,则你可以依次执行这两项。', gzjiansu:'俭素', gzjiansu_tag:'俭', gzjiansu_info:'副将技。此武将牌减少半个阴阳鱼。①当你于回合外得到牌后,你可以展示这些牌,称为“俭”。②出牌阶段开始时,你可以弃置任意张“俭”,令一名体力值不大于X的角色回复1点体力(X为你以此法弃置的牌数)。', gzzhuidu:'追妒', gzzhuidu_info:'出牌阶段限一次。当你造成伤害时,你可以令受伤角色选择一项:1.此伤害+1;2.弃置装备区里的所有牌。若该角色为女性,则你可以弃置一张牌,改为令其选择两项。', gzshigong:'示恭', gzshigong_info:'限定技。当你于回合外进入濒死状态时,你可以移除副将,然后令当前回合角色选择一项:1.获得你以此法移除的副将武将牌上的一个没有技能标签的技能,然后令你将体力值回复至体力上限;2.令你将体力值回复至1点。', gz_old_huaxiong:'华雄', gzyaowu:'耀武', gzyaowu_info:'限定技。当你造成伤害后,你可以明置此武将牌,然后你加2点体力上限并回复2点体力,修改〖恃勇〗,且当你死亡后,所有与你势力相同的角色失去1点体力。', gzshiyong:'恃勇', gzshiyong_info:'锁定技。当你受到牌造成的伤害后,若此牌不为红色,你摸一张牌。', gzshiyongx:'恃勇·改', gzshiyongx_info:'锁定技。当你受到牌造成的伤害后,若此牌不为黑色,伤害来源摸一张牌。', gztanfeng:'探锋', gztanfeng_info:'准备阶段,你可以弃置与你势力不同的一名角色区域内的一张牌,然后其可以令你对其造成1点火焰伤害,并令你跳过本回合的一个阶段(准备阶段和结束阶段除外)。', //官盗「群雄割据」 gzduanshi:'断势', gzduanshi_info:'主将技,锁定技。此武将牌减少半个阴阳鱼。当一名角色因杀死与你势力相同的角色而摸牌时,其少摸一张牌。然后你摸一张牌。', gzjingce:'精策', gzjingce_info:'回合结束时,若于本回合内进入弃牌堆的牌数不小于X,你可以执行一个额外的摸牌阶段;若你本回合使用过的牌数不小于X,你可以执行一个额外的出牌阶段(X为你的体力值)。', gzzhengrong:'征荣', gzzhengrong_info:'锁定技。①你至大势力角色的距离-1。②当你选择“军令”时,你令可选军令数量+1。③当你造成或受到伤害时,若你没有存活的队友,则此伤害+1。', gzhongju:'鸿举', gzhongju_info:'限定技。出牌阶段,你可以选择一名其他角色A并选择一个“军令”。你执行该军令,然后令除A以外的所有其他角色依次选择一项:⒈执行该军令。⒉于本回合视为移出游戏。', gzbiaozhao:'表召', gzbiaozhao_info:'出牌阶段限一次。你可以选择两名势力不同的其他角色A和B。你视为对A使用一张【知己知彼】,然后将一张牌交给B并摸一张牌。', gzyechou:'业仇', gzyechou_info:'锁定技。当你死亡时,你视为对杀死你的角色依次使用三张【杀】,其中第一张不可被响应,第二张无视防具,第三张对其造成的伤害+1。若其以此法进入濒死状态,则于本次濒死结算中除其外与其势力相同的角色不能对其使用【桃】。', //官盗「十年经典」 gzdianhu:'点虎', gzdianhu_info:'锁定技。当你首次明置此武将牌时,你选择一名其他角色。与你势力相同的角色对其造成伤害后,伤害来源摸一张牌。', gzjianji:'谏计', gzjianji_info:'出牌阶段限一次。你可以令一名角色摸一张牌并展示之,然后其可以使用此牌。', gzgongjian:'攻坚', gzgongjian_info:'①当其他角色的牌因弃置而进入弃牌堆后,若令其弃置这些牌的角色为你,你获得其中所有的【杀】。②每回合限一次,当一名角色使用【杀】指定目标后,若有目标与本局游戏上一张被使用的【杀】相同,你可以令这些目标弃置两张牌。', gzkuimang:'溃蟒', gzkuimang_info:'锁定技。当你杀死与你势力不同且处于队列的角色时,你摸两张牌。', gzyinpan:'引叛', gzyinpan_info:'出牌阶段限一次。你可以选择一名其他角色,令所有与其势力不同的角色依次选择是否对其使用一张【杀】。然后其下回合使用【杀】的次数上限+X(X为其以此法受到的伤害次数),若其以此法进入过濒死状态,其回复1点体力。', gzxingmou:'兴谋', gzxingmou_info:'锁定技。①你杀死其他角色或其他角色杀死你均不执行奖惩。②其他角色因执行奖惩而摸牌时,你摸一张牌。', //官正「十年踪迹十年心」 gzyouyan:'诱言', gzyouyan_info:'回合内限一次。当你的牌因弃置而进入弃牌堆后,你可以展示牌堆顶的四张牌,然后获得其中与你此次弃置的牌花色均不同的牌。', gzzhuihuan:'追还', gzzhuihuan_info:'结束阶段,你可以选择至多两名角色,然后依次为被选择的角色标记A或B(字母不能重复标记)。直到你的下回合开始,当A第一次受到伤害后,其对来源造成1点伤害;当B第一次受到伤害后,来源弃置两张手牌。', //插个眼,手杀国战新张鲁 gzrebushi:'布施', gzrebushi_info:'①回合结束后,你获得X个“义舍”标记(X为你的体力值)。②其他角色的准备阶段,你可以失去1个“义舍”标记,交给其一张牌并摸两张牌。③准备阶段,你须弃置Y张牌,然后失去所有“义舍”标记(Y为场上存活人数-你的体力值-2)。', gzremidao:'米道', gzremidao_info:'①结束阶段开始时,若你的武将牌上没有“米”,则你可以摸两张牌。若如此做,你将两张牌置于武将牌上,称为“米”。②一名角色的判定牌生效前,你可以打出一张“米”作为新的判定牌,然后你获得原判定牌。', jiahe_reyingzi:'英姿', jiahe_haoshi:'好施', jiahe_shelie:'涉猎', jiahe_duoshi:'度势', //国战典藏2023 gzdiaodu:'调度', gzdiaodu_info:'①与你势力相同的角色使用装备牌时,其可以摸一张牌。②出牌阶段开始时,你可以获得一名与你势力相同的角色的装备区里的一张牌,然后你将此牌交给另一名角色。', gzqiance:'谦策', gzqiance_info:'与你势力相同的角色使用锦囊牌指定第一个目标后,你可以令其中的所有大势力角色无法响应此牌。', gzjujian:'举荐', gzjujian_info:'副将技,锁定技。①此武将牌计算体力上限时减少半个阴阳鱼。②与你势力相同的角色进入濒死状态时,你可以令其将体力值回复至1点,然后你变更副将。', gztongling:'通令', gztongling_info:'出牌阶段限一次,当你对一名与你势力不同的角色A造成伤害后,你可以选择一名与你势力相同的角色B,令B选择是否对A使用一张牌。若B选择使用,则此牌结算后,若此牌造成过伤害,你和B各摸两张牌,否则A获得你对其造成伤害的牌。', gzjinyu:'近谀', gzjinyu_info:'当你明置此武将牌后,你令所有与你距离为1以内的角色依次执行以下效果:若其武将牌均明置,则其选择一张武将牌暗置,否则其弃置两张牌。', gzrehuaiyi:'怀异', gzrehuaiyi_info:'出牌阶段限一次,你可以展示所有手牌。若其中至少包含两种颜色,则你可以弃置其中一种颜色的所有牌,然后获得至多等量名角色的各一张牌。然后你将以此法得到的装备牌置于武将牌上,称为“异”。你可以将“异”如手牌般使用或打出。', gzrezisui:'恣睢', gzrezisui_info:'锁定技。①摸牌阶段,你多摸X张牌。②结束阶段,若X大于你的体力上限,你死亡(X为你武将牌上的“异”数)。', gztaidan:'太丹', gztaidan_taipingyaoshu:'太丹', gztaidan_info:'锁定技,若你的防具栏为空且你的防具栏未被废除,你视为装备【太平要术】。', gzrejinghe:'经合', gzrejinghe_info:'出牌阶段限一次,你可以转动“天书”,然后令一名角色获得“天书”向上一面的技能直到你的下个回合开始。', gzrejinghe_faq:'转动“天书”', gzrejinghe_faq_info:'
  • 若游戏未拥有“天书”,系统将[雷击,阴兵,活气,鬼助,仙授,论道,观月,言政]以顺时针方向组成圆环作为“天书”,并转动圆环将随机一个技能至于最上面。
  • 若游戏已拥有“天书”,则以逆时针方向转动转动“天书”至下个技能于最上面。', 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_tw:'海外服专属', guozhan_mobile:'移动版', guozhan_qunxiong:'群雄割据', guozhan_decade:'十年踪迹十年心', 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(event.num).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){ player.give(result.cards,source); } 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;i0){ num--; if(typeof this.singleHp=='boolean'){ if(this.singleHp){ this.singleHp=false; } else{ this.singleHp=true; this.maxHp--; } } else{ this.maxHp--; } } this.update(); }, hideCharacter:function(num,log){ if(this.isUnseen(2)){ return; } game.addVideo('hideCharacter',this,num); var toHide; var skills; switch(num){ case 0: if(log!==false) game.log(this,'暗置了主将'+get.translation(this.name1)); toHide=this.name1; skills=lib.character[this.name1][3]; this.name=this.name2; this.sex=lib.character[this.name2][0]; this.classList.add('unseen'); break; case 1: if(log!==false) game.log(this,'暗置了副将'+get.translation(this.name2)); toHide=this.name2; skills=lib.character[this.name2][3]; this.classList.add('unseen2'); break; } game.broadcast(function(player,name,sex,num,skills){ player.name=name; player.sex=sex; switch(num){ case 0:player.classList.add('unseen');break; case 1:player.classList.add('unseen2');break; } 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'].includes(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'].includes(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){ var getIdentity=function(player){ if(player.isUnseen()){ if(!player.wontYe()) return 'ye'; return player.getGuozhanGroup(0); } return player.identity; }; var fid=getIdentity(from); if(fid==toidentity&&toidentity!='ye'){ return 4+difficulty; } if(from.identity=='unknown'&&fid==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){ var num=map[i].length; groups.push(num); } 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(fid); else from_p=game.countPlayer(function(current){ return current.isFriendOf(from); }); var to_p=game.countPlayer(function(current){ return current.isFriendOf(to); }); if(to.identity=='ye') to_p+=1.5; 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:{ '国战模式': '
    声明
    • 以下所有规则均为根据公开爆料整理,经村规改动后制定的临时规则。不代表任何官方意见。请以后续发布的官方规则作为标准。
    ' +'
    双势力武将
    • 双势力武将牌可以和野心家武将牌/包含势力单武将牌/含有重叠势力的其他双势力武将牌组合,若你的主将为双势力武将,则:若你的副将为单势力武将牌,你的势力视为此势力;若你的副将为双势力武将,你的势力视为两张武将牌上的重叠势力(若重叠势力不止一个则需在游戏开始时选择一个作为自己的势力);野心家武将牌为主将,双势力武将牌为副将时,游戏开始时需选择一个副将所含势力作为副将的势力。
    • 变更副将时,可以选择包含原势力的双势力武将牌。左慈发动【役鬼】时,可以使用双势力武将牌同时指定两个不同势力的角色为目标。
    • 特殊地,“冈崎汐”作为多势力武将牌,结算流程和规则与其他双势力武将相同。
    ' +'
    野心家武将
    • 野心家武将只能放在主将位置。副将可以为任意非野心家武将牌。
    • 选择了野心家武将牌的角色(以下简称“野心家角色”)仅明置副将时,若副将为单势力武将牌,则势力暂时视为与该武将牌相同。若副将为双势力武将牌,则势力视为游戏开始时选择的副将代表的势力。
    • 野心家角色明置主将时,其势力改为野心家。若其是首次明置该武将牌,则其获得一个“野心家”标记。
    • “野心家”标记可以当做“先驱”标记,“阴阳鱼”标记或是“珠联璧合”标记使用。当同时拥有两种标记时,优先弃置原装标记,下次发动时才弃置“野心家”标记。
    • 野心家角色变更副将时,若其主将未明置过,则按照副将的势力进行变更。若主将已经明置过,则可以选择所有的非野心家武将牌。左慈发动【役鬼】时,可以使用野心家武将牌同时指定所有势力的角色为目标。' +'
    • 当场上触发了胜利条件时,若这些角色中存在未明置过主将的野心家角色,则这些野心家角色选择是否“暴露野心”。若无人选择“是”且场上存在非野心家角色存活,则所有非野心家角色胜利,野心家角色失败。若有人选择“是”,则这些角色明置主将,然后选择是否发起“拉拢人心”。
    • 选择发起“拉拢人心”的野心家角色选择一个新的势力作为自己的势力,弃置“野心家”标记,令所有其他非野心家角色且非君主且非已“结盟”角色依次选择是否和该野心家角色“结盟”。选择“是”的角色将势力改为和该野心家势力相同。此次“拉拢人心”对所有其他角色询问结束后,所有选择“否”的角色将手牌摸至四张并回复1点体力。
    ' +'
    纵横捭阖
    • 当一名角色对目标角色发动具有拥有“纵横”衍生技的技能时,其可以令对方获得“纵横”衍生技直到其下回合结束。
    ', }, }; });