'use strict'; game.import('mode',function(lib,game,ui,get,ai,_status){ return { name:'guozhan', startBefore:function(){ var playback=localStorage.getItem(lib.configprefix+'playback'); for(var i in lib.characterPack.mode_guozhan){ if(!get.config('onlyguozhan')&&!playback){ if(lib.character[i.slice(3)]) continue; } lib.character[i]=lib.characterPack.mode_guozhan[i]; if(!lib.character[i][4]){ lib.character[i][4]=[]; } if(!lib.translate[i]){ lib.translate[i]=lib.translate[i.slice(3)]; } } for(var i in lib.character){ if(lib.character[i][1]=='shen'){ if(lib.character[i][4]&&(lib.group.contains(lib.character[i][4][0])||lib.character[i][4][0]=='key')){ lib.character[i][1]=lib.character[i][4][0]; } else{ lib.character[i][1]='qun'; } } } lib.card.sha.complexTarget=true; }, onreinit:function(){ var pack=lib.characterPack.mode_guozhan; for(var i in pack){ if(!lib.configOL.onlyguozhan){ if(lib.character[i.slice(3)]) continue; } 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)]; } } }, 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{ if(get.config('guozhanpile')){ lib.card.list=lib.guozhanPile.slice(0); game.fixedPile=true; } game.prepareArena(); // game.delay(); game.showChangeLog(); } if(!_status.connectMode){ _status.mode=get.config('guozhan_mode'); if(_status.brawl&&_status.brawl.submode){ _status.mode=_status.brawl.submode; } } "step 1" if(_status.connectMode){ if(lib.configOL.guozhanpile){ lib.card.list=lib.guozhanPile.slice(0); game.fixedPile=true; } game.broadcastAll(function(pack){ 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; return evt.dying.identity==lib.character[button.link][1]; } return true; } else{ if(typeof ui.selected.buttons[0].link!='string') return false; if(typeof button.link!='object') return false; var name=button.link[2]; if(player.storage.yigui.used.contains(name)) return false; var card={name:name}; if(button.link[3]) card.nature=button.link[3]; var info=get.info(card); var group=lib.character[ui.selected.buttons[0].link][1]; if(evt.type=='dying'){ return evt.filterCard(card,player,evt); } if(!lib.filter.filterCard(card,player,evt)) return false; else if(evt.filterCard&&!evt.filterCard(card,player,evt)) return false; if(info.changeTarget){ var list=game.filterPlayer(function(current){ return player.canUse(card,current); }); for(var i=0;i0; }); }, direct:true, content:function (){ 'step 0' player.chooseTarget(get.prompt2('xindiaodu'),function(card,player,current){ return current.isFriendOf(player)&¤t.countGainableCards(player,'e')>0; }).ai=function(target){ var num=1; if(target.hasSkill('gzxiaoji')) num+=2.5; if(target.isDamaged()&&target.getEquip('baiyin')) num+=2.5; if(target.hasSkill('xuanlve')) num+=2; return num; }; 'step 1' if(result.bool){ event.target1=result.targets[0]; player.logSkill('xindiaodu',event.target1); player.line(event.target1,'xindiaodu'); player.gainPlayerCard(event.target1,'e',true); } else event.finish(); 'step 2' if(result.bool){ event.card=result.cards[0]; player.chooseTarget('是否将'+get.translation(event.card)+'交给一名其他角色?',function(card,player,current){ return current!=player&¤t!=_status.event.target1&¤t.isFriendOf(player); }).set('target1',event.target1); } else event.finish(); 'step 3' if(result.bool){ var target=result.targets[0]; player.line(target,'green'); target.gain(card,player,'give'); } }, }, gzbuyi:{ trigger:{global:'dyingAfter'}, usable:1, filter:function(event,player){ if(!(event.player&&event.player.isAlive()&&event.source&&event.source.isAlive())) return false; return event.player.isFriendOf(player)&&event.reason&&event.reason.name=='damage'; }, check:function(event,player){return get.attitude(player,event.player)>0}, logTarget:'source', content:function(){ 'step 0' player.chooseJunlingFor(trigger.source); 'step 1' event.junling=result.junling; event.targets=result.targets; var choiceList=[]; choiceList.push('执行该军令'); choiceList.push('令'+get.translation(trigger.player)+(trigger.player==trigger.source?'(你)':'')+'回复一点体力'); trigger.source.chooseJunlingControl(player,result.junling,result.targets).set('prompt','补益').set('choiceList',choiceList).set('ai',function(){ if(get.recoverEffect(trigger.player,player,_status.event.player)>0) return 1; return (get.attitude(trigger.source,trigger.player)<0&&get.junlingEffect(player,result.junling,trigger.source,result.targets,trigger.source)>=-2)?1:0; return 0; }); 'step 2' if(result.index==0) trigger.source.carryOutJunling(player,event.junling,targets); else trigger.player.recover(player); }, audio:['buyi',2], }, keshou:{ trigger:{player:'damageBegin3'}, direct:true, filter:function(event,player){ return event.num>0; }, content:function(){ 'step 0' var check=(player.countCards('h',{color:'red'})>1||player.countCards('h',{color:'black'})>1); player.chooseCard(get.prompt2('keshou'),'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); 'step 1' if(result.cards){ player.logSkill('keshou'); player.discard(result.cards); trigger.num--; if(trigger.num<=0) trigger.cancel(); if(!game.hasPlayer(function(current){ return current!=player&¤t.isFriendOf(player); })) 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:{ 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 event.result.card.name=='sha'||event.result.card.name=='juedou'; }, content:function(){ 'step 0' player.gain(trigger.result.card,'gain2'); player.chooseBool('是否令当前回合角色获得【筑围】的加成效果?').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, intro:{ content:function(storage){if(storage) return '使用【杀】的次数上限+'+storage+',手牌上限+'+storage} } } } }, gzweidi:{ init:function(player){player.storage.gzweidi=[]}, enable:'phaseUse', usable:1, filter:function(event,player){ return player.storage.gzweidi.length>0 }, filterTarget:function(card,player,target){return target!=player&&player.storage.gzweidi.contains(target)}, content:function(){ 'step 0' player.chooseJunlingFor(target); 'step 1' event.junling=result.junling; event.targets=result.targets; var choiceList=['执行该军令']; if(target!=player) choiceList.push('令'+get.translation(player)+'获得你所有手牌,然后交给你等量的牌'); else choiceList.push('不执行该军令'); target.chooseJunlingControl(player,result.junling,result.targets).set('prompt','伪帝').set('choiceList',choiceList).set('ai',function(){ if(get.attitude(target,player)>=0) return get.junlingEffect(player,result.junling,target,result.targets,target)>=0?0:1; return get.junlingEffect(player,result.junling,target,result.targets,target)>=-1?0:1; }); 'step 2' if(result.index==0) target.carryOutJunling(player,event.junling,targets); else if(target!=player&&target.countCards('h')) { event.num=target.countCards('h'); player.gain(target.getCards('h'),target,'giveAuto'); player.chooseCard('交给'+get.translation(target)+get.cnNumber(event.num)+'张牌','he',event.num,true).set('ai',function(card){ return -get.value(card); }); } else event.finish(); 'step 3' if(result.cards){ target.gain(result.cards,player,'giveAuto'); } }, group:['gzweidi_ft','gzweidi_ftc'], ai:{ order:3, result:{ player:1, } }, subSkill:{ ft:{ sub:true, trigger:{global:'gainBefore'}, silent:true, filter:function(event,player){ if(player==event.player||player.storage.gzweidi.contains(event.player)||_status.currentPhase!=player) return false; if(event.cards.length){ if(event.getParent().name=='draw') return true; for(var i=0;i0}, content:function(){ 'step 0' event.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(current); }) }); var str=event.players.length?',然后对'+get.translation(event.players)+(event.players.length==1?'':'中的一名角色')+'造成一点伤害':''; var check=true; if(!event.players.length) check=false; else{ if(get.attitude(player,trigger.source)>=0) check=false; else if(!player.countCards('h',function(card){return get.value(card)<9})) check=false; } player.chooseCard('附敌

交给'+get.translation(trigger.source)+'一张手牌'+str+'
').set('aicheck',check).set('ai',function(card){ if(!_status.event.aicheck) return 0; return 9-get.value(card); }); 'step 1' if(result.cards){ player.logSkill('gzfudi',trigger.source); trigger.source.gain(result.cards,player,'giveAuto'); if(event.players.length==1) event.target=event.players[0]; else if(event.players.length) player.chooseTarget('附敌

对'+get.translation(event.players)+'中的一名角色造成一点伤害
',function(card,player,target){ return target.isFriendOf(_status.event.getTrigger().source)&&target.hp>=player.hp&&!game.hasPlayer(function(current){ return current.isFriendOf(target)&¤t.hp>target.hp; }) },true).set('ai',function(target){return get.damageEffect(target,player,player)}); else event.finish(); } else event.finish(); 'step 2' var target=event.target||result.targets[0]; if(target){ player.line(target,'green'); target.damage(player); } }, ai:{ maixie:true, maixie_defend:true, effect:{ target:function(card,player,target){ if(get.tag(card,'damage')){ if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; if(!target.countCards('h')) return [1,-1]; if(game.countPlayer(function(current){return current.isFriendOf(player)&¤t.hp>=target.hp-1})) return [1,0,0,-2]; } } } } }, congjian:{ trigger:{ player:'damageBegin3', source:'damageBegin1', }, forced:true, filter:function(event,player,name){ if(event.num<=0) return false; if(name=='damageBegin1'&&_status.currentPhase!=player&&event.notLink()) return true; if(name=='damageBegin3'&&_status.currentPhase==player) return true; return false; }, check:function(event,player){ return _status.currentPhase!=player; }, content:function(){trigger.num++}, ai:{ //damageBones:true, } }, jianan:{ audio:2, unique:true, forceunique:true, group:'wuziliangjiangdao', derivation:'wuziliangjiangdao', global:'g_jianan', }, g_jianan:{ trigger:{ player:['phaseZhunbeiBegin','phaseBefore','dieBegin'], }, audio:'jianan', forceaudio:true, filter:function(event,player,name){ if(name!='phaseZhunbeiBegin') return get.is.jun(player)&&player.identity=='wei'; return this.filter2.apply(this,arguments); }, filter2:function(event,player){ if(!get.zhu(player,'jianan')) return false; if(!player.countCards('he')) return false; return !player.isUnseen(); }, direct:true, content:function(){ 'step 0' if(event.triggername!='phaseZhunbeiBegin'){ event.trigger('jiananUpdate'); event.finish(); return; } var skills=['new_retuxi','qiaobian','gzxiaoguo','gzjieyue','new_duanliang']; game.countPlayer(function(current){ if(current==player) return; if(current.hasSkill('new_retuxi')) skills.remove('new_retuxi'); if(current.hasSkill('qiaobian')) skills.remove('qiaobian'); if(current.hasSkill('gzxiaoguo')) skills.remove('gzxiaoguo'); if(current.hasSkill('gzjieyue')) skills.remove('gzjieyue'); if(current.hasSkill('new_duanliang')) skills.remove('new_duanliang'); }); if(!skills.length) event.finish(); else{ event.skills=skills; var next=player.chooseToDiscard('he'); var str=''; for(var i=0;i1) rank=4; if(skills.contains('gzjieyue')&&player.countCards('h',function(card){ return get.value(card)<7; })>1) rank=5; if(skills.contains('qiaobian')&&player.countCards('h')>4) rank=6; if((get.guozhanRank(player.name1,player)3) return 'qiaobian'; if(skills.contains('gzjieyue')&&player.countCards('h',function(card){ return get.value(card)<7; })) return 'gzjieyue'; if(skills.contains('new_retuxi')) return 'new_retuxi'; return skills.randomGet(); }).set("prompt","选择获得其中的一个技能直到君主的回合开始"); 'step 4' var link=result.control; player.addTempSkill(link,"jiananUpdate"); player.addTempSkill("jianan_eff","jiananUpdate"); game.log(player,"获得了技能","#g【"+get.translation(result.control)+"】"); }, }, jianan_eff:{ ai:{nomingzhi:true} }, huibian:{ enable:'phaseUse', audio:2, usable:1, filter:function(event,player){ return game.countPlayer(function(current){ return current.identity=='wei'; })>1&&game.hasPlayer(function(current){ return current.isDamaged()&¤t.identity=='wei'; }); }, filterTarget:function(card,player,target){ if(ui.selected.targets.length) return target.isDamaged()&&target.identity=='wei'; return target.identity=='wei'; }, selectTarget:2, multitarget:true, targetprompt:['受到伤害
然后摸牌','回复体力'], content:function(){ 'step 0' targets[0].damage(player); 'step 1' if(targets[0].isAlive()) targets[0].draw(2); targets[1].recover(); }, ai:{ threaten:1.2, order:9, result:{ target:function(player,target){ if(ui.selected.targets.length) return 1; if(get.damageEffect(target,player,player)>0) return 2; if(target.hp>2) return 1; if(target.hp==1) return -1; return 0.1; } }, } }, gzzongyu:{ audio:2, unique:true, forceunique:true, group:['gzzongyu_others','gzzongyu_player'], ai:{ threaten:1.2, }, subSkill:{ others:{ trigger:{global:'equipAfter'}, direct:true, filter:function(event,player){ if(event.player==player||!player.countCards('e',{subtype:['equip3','equip4']})) return false; return event.card.name=='liulongcanjia'; }, check:function(event,player){ if(get.attitude(player,target)<=0) return player.countCards('e',{subtype:['equip4','equip4']})<2; return true; }, content:function(){ 'step 0' player.chooseBool('是否发动【总御】,与'+get.translation(trigger.player)+'交换装备区内坐骑牌?'); 'step 1' if(result.bool){ player.logSkill('gzzongyu',trigger.player); event.cards=[player.getCards('e',{subtype:['equip3','equip4']}),trigger.player.getCards('e',{name:'liulongcanjia'})]; player.lose(event.cards[0],ui.special); trigger.player.lose(event.cards[1],ui.special); if(event.cards[0].length) player.$give(event.cards[0],trigger.player); if(event.cards[1].length) trigger.player.$give(event.cards[1],player); } else event.finish(); 'step 2' for(var i=0;i0.7; return true; } }, 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('交给一名已确定势力角色一张基本牌'); player.chooseControl(choices).set('ai',function(){ if(choices.length>1){ var player=_status.event.player; if(!game.hasPlayer(function(current){ return !current.isUnseen()&¤t.getEquip('yuxi')||current.hasSkill('gzyongsi')&&!game.hasPlayer(function(current){ return current.getEquip('yuxi'); }); })&&game.hasPlayer(function(current){return current!=player&¤t.isUnseen()})){ var identity; for(var i=0;i=get.population(identity)) return 0; return 1; } return 0; }).set('prompt','征辟

选择一项
'); 'step 1' if(result.control=='选择一名未确定势力的角色') player.chooseTarget('征辟

选择一名未确定势力角色,你对其使用牌没有次数和距离限制直到回合结束
',function(card,player,target){ return target!=player&&target.identity=='unknown' },true); else player.chooseCardTarget({ prompt:'征辟

交给一名已确定势力角色一张基本牌,然后该角色交给你一张非基本牌或两张基本牌
', position:'h', filterCard:function(card){return get.type(card)=='basic'}, filterTarget:function(card,player,target){ return target!=player&&target.identity!='unknown'; }, ai1:function(card){return 5-get.value(card)}, ai2:function(target){ var player=_status.event.player; var att=get.attitude(player,target); if(att>0) return 0; return -(att-1)/target.countCards('h'); } }).set('forced',true); 'step 2' event.target=result.targets[0]; player.line(result.targets,'green'); if(result.cards.length){ event.cards=result.cards; result.targets[0].gain(result.cards,player,'give'); } else{ player.storage.gzzhengbi_eff1=result.targets[0]; player.addTempSkill('gzzhengbi_eff1'); event.finish(); } 'step 3' var choices=[]; if(target.countCards('he',{type:['trick','delay','equip']})) choices.push('一张非基本牌'); if(target.countCards('h',{type:'basic'})>1) choices.push('两张基本牌'); if(choices.length) target.chooseControl(choices).set('ai',function(event,player){ if(choices.length>1){ if(player.countCards('he',{type:['trick','delay','equip']},function(card){return get.value(card)<7})) return 0; return 1; } return 0; }).set('prompt','征辟

交给'+get.translation(player)+'
'); else{ if(target.countCards('h')){ var cards=target.getCards('h'); player.gain(cards,target,'giveAuto'); event.finish(); } else event.finish(); } 'step 4' var check=(result.control=='一张非基本牌'); target.chooseCard('he',(check?1:2),{type:(check?['trick','delay','equip']:'basic')},true); 'step 5' if(result.cards){ player.gain(result.cards,target,'giveAuto'); } }, subSkill:{ eff1:{ sub:true, mod:{ targetInRange:function (card,player,target){ if(target==player.storage.gzzhengbi_eff1) return true; }, cardUsable:function (card,player,num){ if(typeof num=='number'&&player.storage.gzzhengbi_eff1.isAlive()&&player.storage.gzzhengbi_eff1.isUnseen()) return num+100; }, playerEnabled:function (card,player,target){ if(player.storage.gzzhengbi_eff1.isAlive()&&player.storage.gzzhengbi_eff1.isUnseen()&&target!=player.storage.gzzhengbi_eff1){ var num=player.getCardUsable(card)-100; if(num<=0) return false; } }, }, onremove:true, }, eff2:{sub:true}, } }, gzfengying:{ limited:true, enable:'phaseUse', position:'h', filterCard:true, selectCard:-1, filter:function(event,player){ return !player.storage.gzfengying&&player.countCards('h')>0; }, 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; } }); 'step 1' if(result.bool){ event.target=result.targets[0]; player.logSkill('gzjieyue',result.targets); result.targets[0].gain(result.cards[0],player,'giveAuto'); player.chooseJunlingFor(result.targets[0]); } else event.finish(); 'step 2' event.junling=result.junling; event.targets=result.targets; var choiceList=[]; choiceList.push('执行该军令,然后'+get.translation(player)+'摸一张牌'); choiceList.push('令'+get.translation(player)+'摸牌阶段额外摸三张牌'); target.chooseJunlingControl(player,result.junling,result.targets).set('prompt','节钺').set('choiceList',choiceList).set('ai',function(){ if(get.attitude(target,player)>0) return get.junlingEffect(player,result.junling,target,result.targets,target)>1?0:1; return get.junlingEffect(player,result.junling,target,result.targets,target)>=-1?0:1; }); 'step 3' if(result.index==0){ target.carryOutJunling(player,event.junling,targets); player.draw(); } else player.addTempSkill('gzjieyue_eff'); }, ai:{threaten:2}, subSkill:{ eff:{ sub:true, trigger:{player:'phaseDrawBegin2'}, filter:function(event,player){ return !event.numFixed; }, forced:true, popup:false, content:function(){ trigger.num+=3; } } }, audio:['jieyue',2], }, jianglue:{ limited:true, 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)||current.isUnseen(); }).sort(lib.sort.seat); event.num=0; 'step 2' if(num0.5?0:1;}).prompt='选择并展示一张武将牌,然后执行军令'; } 'step 4' if(!event.list) event.list=[player]; if(event.carry){ if(event.showCharacter) event.current.showCharacter(result.index); event.current.carryOutJunling(player,event.junling,targets); event.list.push(event.current); } event.num++; if(event.num0) player.draw(player.storage.jianglue_count); }, marktext:'略', skillAnimation:'epic', animationColor:'soil', ai:{ order:4, result:{ player:function(player){ if(player.isUnseen()&&player.wontYe()){ if(get.population(player._group)>=game.players.length/4) return 1; return Math.random()>0.7?1:0; } else return 1; } } }, subSkill:{ count:{ sub:true, trigger:{global:'recoverAfter'}, silent:true, filter:function(event){return event.getParent('jianglue')}, content:function(){player.storage.jianglue_count++} } } }, gzxuanhuo:{ global:'gzxuanhuo_others', derivation:['fz_wusheng','fz_new_paoxiao','fz_new_longdan','fz_new_tieji','fz_liegong','fz_xinkuanggu'], ai:{ threaten:function(player,target){ if(game.hasPlayer(function(current){ return current!=target&¤t.isFriendOf(target); })) return 1.5; return 0.5; }, }, subSkill:{ others:{ enable:'phaseUse', usable:1, filter:function(event,player){ return (!player.isUnseen())&&player.countCards('he')>2&&game.hasPlayer(function(current){ return current!=player&¤t.hasSkill('gzxuanhuo')&&player.isFriendOf(current); }); }, prompt:function(){ var player=_status.event.player; var list=game.filterPlayer(function(current){ return current!=player&¤t.hasSkill('gzxuanhuo')&&player.isFriendOf(current); }); var str='选择两张牌。将第一张牌交给'+get.translation(list); if(list.length>1) str+='中的一人'; str+=',并弃置第二张牌'; return str; }, position:'he', filterCard:true, selectCard:2, check:function(card){ var player=_status.event.player; if(player.hasSkill('new_paoxiao',true)||player.getEquip('zhuge')||game.hasPlayer(function(current){ return current.hasSkill('new_paoxiao'); })) return 0; if(player.countCards('h',function(cardx){ return !ui.selected.cards.contains(cardx)&&cardx!=card&&cardx.name=='sha'&&player.hasUseTarget(cardx); })<2) return 0; if(get.position(card)=='h') return 6-get.value(card); return 5-get.value(card); }, filterTarget:function(card,player,target){return target!=player&&target.hasSkill('gzxuanhuo')&&target.isFriendOf(player)}, discard:false, lose:false, delay:false, content:function(){ 'step 0' if(player!=game.me&&!player.isOnline()) cards.reverse(); target.gain(cards[0],player); player.$giveAuto(cards[0],target); player.discard(cards[1]); 'step 1' var list=['wusheng','new_paoxiao','new_longdan','new_tieji','liegong','xinkuanggu']; for(var i=0;i0; }, content:function(){ 'step 0' event.num=trigger.num; 'step 1' event.num--; player.logSkill('enyuan_damage',trigger.source); trigger.source.chooseCard('交给'+get.translation(player)+'一张手牌,或失去一点体力','h').set('ai',function(card){ if(get.attitude(_status.event.player,_status.event.getParent().player)>0) return 11-get.value(card); return 7-get.value(card); }); 'step 2' if(result.bool){ player.gain(result.cards[0],trigger.source,'giveAuto'); } else trigger.source.loseHp(); if(event.num>0) event.goto(1); }, audio:'enyuan2', }, } }, "new_jushou":{ audio:"xinjushou", trigger:{ player:"phaseJieshuBegin", }, content:function (){ 'step 0' event.num=game.countGroup(); player.draw(event.num); if(event.num>2) player.turnOver(); 'step 1' player.chooseCard('h',true,'弃置一张手牌,若以此法弃置的是装备牌,则你改为使用之').set('ai',function(card){ if(get.type(card)=='equip'){ return 5-get.value(card); } return -get.value(card); }).set('filterCard',lib.filter.cardDiscardable); 'step 2' if(result.bool&&result.cards.length){ if(get.type(result.cards[0])=='equip'&&player.hasUseTarget(result.cards[0])){ player.chooseUseTarget(result.cards[0],true,'nopopup'); } else{ player.discard(result.cards[0]); } } }, ai:{ effect:{ target:function (card,player,target){ if(card.name=='guiyoujie') return [0,1]; }, }, }, }, "new_duanliang":{ subSkill:{ off:{ sub:true, }, }, mod:{ targetInRange:function (card,player,target){ if(card.name=='bingliang'){ return true; } }, }, audio:"duanliang1", enable:"chooseToUse", filterCard:function (card){ if(get.type(card)!='basic'&&get.type(card)!='equip') return false; return get.color(card)=='black'; }, filter:function (event,player){ if(player.hasSkill('new_duanliang_off')) return false; return player.countCards('he',{type:['basic','equip'],color:'black'}) }, position:"he", 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, 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); }); "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_fenji":{ audio:"fenji", trigger:{ global:"phaseAfter", }, filter:function (event,player){ if(event.player.countCards('h')==0&&event.player.isAlive()) return true; return false; }, check:function (event,player){ return get.attitude(player,event.player)>2; }, content:function (){ player.line(trigger.player,'green'); trigger.player.draw(2); player.loseHp(); }, }, "new_luanji":{ audio:"luanji", enable:"phaseUse", viewAs:{ name:"wanjian", }, filterCard:function (card,player){ if(!player.storage.new_luanji) return true; return !player.storage.new_luanji.contains(get.suit(card)); }, selectCard:2, 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":{ init:function (player){ if(player.storage.new_kongcheng==undefined) player.storage.new_kongcheng=[]; }, fixedGain:function(){ 'step 0' if(cards){ var owner=event.source||get.owner(cards[0]); if(owner){ var next=owner.lose(cards,ui.special,'toStorage').set('type','gain').set('forceDie',true); if(event.animate=='give'||event.visible==true) next.visible=true; event.relatedLose=next; } player.storage.new_kongcheng.addArray(cards); player.markSkill('new_kongcheng'); } else{ event.finish(); } 'step 1' if(event.animate=='draw'){ player.$draw(cards.length); game.pause(); setTimeout(function(){ game.resume(); },get.delayx(500,500)); } else if(event.animate=='gain'){ player.$gain(cards); game.pause(); setTimeout(function(){ game.resume(); },get.delayx(700,700)); } else if(event.animate=='gain2'||event.animate=='draw2'){ var gain2t=300; if(player.$gain2(cards)&&player==game.me){ gain2t=500; } game.pause(); setTimeout(function(){ game.resume(); },get.delayx(gain2t,gain2t)); } else if(event.source&&(event.animate=='give'||event.animate=='giveAuto')){ if(event.animate=='give') event.source['$'+event.animate](cards,player); else{ var givemap={hs:[],ots:[]}; for(var i=0;i0; }, content:function (){ player.gain(player.storage.new_kongcheng,'draw','fromStorage'); player.storage.new_kongcheng=[]; game.addVideo('storage',player,['new_kongcheng',get.cardsInfo(player.storage.new_kongcheng),'cards']); player.unmarkSkill('new_kongcheng'); }, 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:{ onunmark:function(storage,player){ if(storage&&storage.length){ player.$throw(storage,1000); game.cardsDiscard(storage); game.log(storage,'被置入了弃牌堆'); storage.length=0; } }, mark:function (dialog,content,player){ if(content&&content.length){ if(player==game.me||player.isUnderControl()){ dialog.addAuto(content); } else{ return '共有'+get.cnNumber(content.length)+'张牌'; } } }, content:function (content,player){ if(content&&content.length){ if(player==game.me||player.isUnderControl()){ return get.translation(content); } return '共有'+get.cnNumber(content.length)+'张牌'; } }, }, }, "new_keji":{ audio:"keji", forced:true, trigger:{ player:"phaseDiscardBegin", }, filter:function (event,player){ var list=[]; player.getHistory('useCard',function(evt){ if(evt.isPhaseUsing(player)){ var color=get.color(evt.card); if(color!='nocolor') list.add(color); } }); return list.length<=1; }, content:function (){ player.addTempSkill('keji_add','phaseAfter'); }, }, "keji_add":{ mod:{ maxHandcard:function (player,num){ return num+4; }, }, }, "new_mouduan":{ trigger:{ player:"phaseJieshuBegin", }, //priority:2, audio:"botu", filter:function (event,player){ var history=player.getHistory('useCard'); var suits=[]; var types=[]; for(var i=0;i=4||types.length>=3; }, check:function(event,player){ return player.canMoveCard(true); }, content:function (){ player.moveCard(); }, }, "new_longdan":{ group:["new_longdan_sha","new_longdan_shan","new_longdan_draw","new_longdan_shamiss","new_longdan_shanafter"], subSkill:{ shanafter:{ sub:true, audio:"longdan_sha", trigger:{ player:"useCard", }, //priority:1, filter:function (event,player){ return event.skill=='new_longdan_shan'&&event.getParent(2).name=='sha'; }, direct:true, content:function (){ "step 0" player.chooseTarget("是否发动【龙胆】令一名其他角色回复1点体力?",function(card,player,target){ return target!=_status.event.source&&target!=player&&target.isDamaged(); }).set('ai',function(target){ return get.attitude(_status.event.player,target); }).set('source',trigger.getParent(2).player); "step 1" if(result.bool&&result.targets&&result.targets.length){ player.line(result.targets[0],'green'); 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.line(result.targets[0],'green'); result.targets[0].damage(); } }, }, draw:{ trigger:{ player:["useCard","respond"], }, audio:"longdan_sha", forced:true, 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", }, viewAsFilter:function (player){ if(!player.countCards('h','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('h','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", }, prompt:"将一张杀当闪使用或打出", check:function (){return 1}, viewAsFilter:function (player){ if(!player.countCards('h','sha')) return false; }, ai:{ respondShan:true, skillTagFilter:function (player){ if(!player.countCards('h','sha')) return false; }, effect:{ target:function (card,player,target,current){ if(get.tag(card,'respondShan')&¤t<0) return 0.6 }, }, }, sub:true, }, }, }, "new_paoxiao":{ 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, 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, }, threaten:1.2, order:3, }, }, "baka_hunshang":{ skillAnimation:true, animationColor:'wood', audio:"hunshang", derivation:["baka_yingzi","baka_yinghun"], viceSkill:true, init:function (player){ if(player.checkViceSkill('baka_hunshang')&&!player.viceChanged){ player.removeMaxHp(); } }, trigger:{ player:"phaseZhunbeiBegin", }, filter:function (event,player){ return player.hp<=1; }, forced:true, //priority:3, content:function (){ player.addTempSkill('baka_yingzi','phaseAfter'); player.addTempSkill('baka_yinghun','phaseAfter'); }, ai:{ threaten:function (player,target){ if(target.hp==1) return 2; return 0.5; }, maixie:true, effect:{ target:function (card,player,target){ if(!target.hasFriend()) return; if(get.tag(card,'damage')==1&&target.hp==2&&!target.isTurnedOver()&& _status.currentPhase!=target&&get.distance(_status.currentPhase,target,'absolute')<=3) return [0.5,1]; }, }, }, }, "baka_yinghun":{ inherit:"gzyinghun", filter:function (event,player){ return player.isDamaged(); }, //priority:2, audio:"yinghun", audioname:["sunce"], trigger:{ player:"phaseZhunbeiBegin", }, direct:true, content:function (){ "step 0" player.chooseTarget(get.prompt2('gzyinghun'),function(card,player,target){ return player!=target; }).set('ai',function(target){ var player=_status.event.player; if(player.maxHp-player.hp==1&&target.countCards('he')==0){ return 0; } if(get.attitude(_status.event.player,target)>0){ return 10+get.attitude(_status.event.player,target); } if(player.maxHp-player.hp==1){ return -1; } return 1; }); "step 1" if(result.bool){ event.num=player.maxHp-player.hp; player.logSkill(event.name,result.targets); event.target=result.targets[0]; if(event.num==1){ event.directcontrol=true; } else{ var str1='摸'+get.cnNumber(event.num,true)+'弃一'; var str2='摸一弃'+get.cnNumber(event.num,true); player.chooseControl(str1,str2,function(event,player){ return _status.event.choice; }).set('choice',get.attitude(player,event.target)>0?str1:str2); event.str=str1; } } else{ event.finish(); } "step 2" if(event.directcontrol||result.control==event.str){ event.target.draw(event.num); event.target.chooseToDiscard(true,'he'); } else{ event.target.draw(); event.target.chooseToDiscard(event.num,true,'he'); } }, ai:{ threaten:function (player,target){ if(target.hp==target.maxHp) return 0.5; if(target.hp==1) return 2; if(target.hp==2) return 1.5; return 0.5; }, maixie:true, effect:{ target:function (card,player,target){ if(target.maxHp<=3) return; if(get.tag(card,'damage')){ if(target.hp==target.maxHp) return [0,1]; } if(get.tag(card,'recover')&&player.hp>=player.maxHp-1) return [0,0]; }, }, }, }, "baka_yingzi":{ mod:{ maxHandcardBase:function (player,num){ return player.maxHp; }, }, audio:"reyingzi", audioname:["sunce"], trigger:{ player:"phaseDrawBegin2", }, frequent:true, filter:function(event){return !event.numFixed}, content:function (){ trigger.num++; }, ai:{ threaten:1.3, }, }, "new_yiji":{ audio:"yiji", trigger:{ player:"damageEnd", }, frequent:true, filter:function (event){ return (event.num>0) }, content:function (){ "step 0" event.cards=game.cardsGotoOrdering(get.cards(2)).cards; "step 1" if(event.cards.length>1){ player.chooseCardButton('将“遗计”牌分配给任意角色',true,event.cards,[1,event.cards.length]).set('ai',function(button){ if(ui.selected.buttons.length==0) return 1; return 0; }); } else if(event.cards.length==1){ event._result={links:event.cards.slice(0),bool:true}; } else{ event.finish(); } "step 2" if(result.bool){ for(var i=0;i0){ return att/(1+target.countCards('h')); } else{ return att/100; } }).set('enemy',get.value(event.togive[0])<0); } "step 3" if(result.targets.length){ result.targets[0].gain(event.togive,'draw'); player.line(result.targets[0],'green'); game.log(result.targets[0],'获得了'+get.cnNumber(event.togive.length)+'张牌'); event.goto(1); } }, ai:{ maixie:true, "maixie_hp":true, effect:{ target:function (card,player,target){ if(get.tag(card,'damage')){ if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; if(!target.hasFriend()) return; var num=1; if(get.attitude(player,target)>0){ if(player.needsToDiscard()){ num=0.7; } else{ num=0.5; } } if(target.hp>=4) return [1,num*2]; if(target.hp==3) return [1,num*1.5]; if(target.hp==2) return [1,num*0.5]; } }, }, }, }, "new_jieming":{ audio:"jieming", trigger:{ player:"damageEnd", }, direct:true, content:function (){ "step 0" player.chooseTarget(get.prompt('new_jieming'),'令一名角色将手牌补至X张(X为其体力上限且至多为5)',function(card,player,target){ return target.countCards('h')2){ return Math.min(5,target.maxHp)-target.countCards('h'); } return att/3; }); "step 1" if(result.bool){ player.logSkill('new_jieming',result.targets); for(var i=0;i1){ if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; var max=0; var players=game.filterPlayer(); for(var i=0;i0){ max=Math.max(Math.min(5,players[i].hp)-players[i].countCards('h'),max); } } switch(max){ case 0:return 2; case 1:return 1.5; case 2:return [1,2]; default:return [0,max]; } } if((card.name=='tao'||card.name=='caoyao')&& target.hp>1&&target.countCards('h')<=target.hp) return [0,0]; }, }, }, }, "new_fangzhu":{ audio:"fangzhu", trigger:{ player:"damageEnd", }, direct:true, content:function (){ "step 0" player.chooseTarget(get.prompt2('new_fangzhu'),function(card,player,target){ return player!=target }).ai=function(target){ if(target.hasSkillTag('noturn')) return 0; var player=_status.event.player; if(get.attitude(_status.event.player,target)==0) return 0; if(get.attitude(_status.event.player,target)>0){ if(target.classList.contains('turnedover')) return 1000-target.countCards('h'); if(player.getDamagedHp()<3) return -1; return 100-target.countCards('h'); } else{ if(target.classList.contains('turnedover')) return -1; if(player.getDamagedHp()>=3) return -1; return 1+target.countCards('h'); } } "step 1" if(result.bool){ player.logSkill('new_fangzhu',result.targets); event.target=result.targets[0] event.target.chooseToDiscard('he').set('ai',function(card){ var player=_status.event.player; if(player.isTurnedOver()) return -1; return (player.hp*player.hp)-Math.max(1,get.value(card)); }).set('prompt','弃置一张牌并失去一点体力;或选择不弃置,将武将牌翻面并摸'+(player.getDamagedHp())+'张牌。'); } else event.finish(); "step 2" if(result.bool){ event.target.loseHp(); } else{ event.target.draw(player.getDamagedHp()); event.target.turnOver(); } }, ai:{ maixie:true, "maixie_hp":true, effect:{ target:function (card,player,target){ if(get.tag(card,'damage')){ if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; if(target.hp<=1) return; if(!target.hasFriend()) return; var hastarget=false; var turnfriend=false; var players=game.filterPlayer(); for(var i=0;i0&&players[i].isTurnedOver()){ hastarget=true; turnfriend=true; } } if(get.attitude(player,target)>0&&!hastarget) return; if(turnfriend||target.hp==target.maxHp) return [0.5,1]; if(target.hp>1) return [1,0.5]; } }, }, }, }, "fengyin_main":{ init:function (player,skill){ var skills=lib.character[player.name1][3]; for(var i=0;i0){ 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, filter:function (event,player){ if(event.num<=0||!event.source) return false; var n1=player.getNext(); var p1=player.getPrevious(); if(event.source!=n1&&event.source!=p1) return true; }, content:function (){ trigger.cancel(); }, ai:{ effect:{ target:function (card,player,target){ if(player.hasSkillTag('jueqing',false,target)) return; if(player==target.getNext()||player==target.getPrevious()) return; var num=get.tag(card,'damage'); if(num){ return 0; } }, }, }, }, hmkguishu:{ audio:'bmcanshi', enable:"phaseUse", filter:function (event,player){ return player.countCards('h',{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:"h", 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){ 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;i1) return false; } return true; }, content:function (){ var color=get.groupnature(player.group,"raw"); if(player.isUnseen()) color='fire'; player.$fullscreenpop('鏖战模式',color); game.broadcastAll(function(){ _status._aozhan=true; ui.aozhan=ui.create.div('.touchinfo.left',ui.window); ui.aozhan.innerHTML='鏖战模式'; if(ui.time3) ui.time3.style.display='none'; ui.aozhanInfo=ui.create.system('鏖战模式',null,true); lib.setPopped(ui.aozhanInfo,function(){ var uiintro=ui.create.dialog('hidden'); uiintro.add('鏖战模式'); var list=[ '当游戏中仅剩四名或更少角色时(七人以下游戏时改为三名或更少),若此时全场没有超过一名势力相同的角色,则从一个新的回合开始,游戏进入鏖战模式直至游戏结束。', '在鏖战模式下,任何角色均不是非转化的【桃】的合法目标。【桃】可以被当做【杀】或【闪】使用或打出。', '进入鏖战模式后,即使之后有两名或者更多势力相同的角色出现,仍然不会取消鏖战模式。' ]; var intro='
    '; 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')}); }, }, "xianqu_skill":{ ruleSkill:true, enable:"phaseUse", //filter:function (event,player){ //return player.countCards('h')<4; //}, usable:1, mark:true, intro:{ content:"◇出牌阶段,你可以弃置此标记,然后将手牌摸至四张并观看一名其他角色的一张武将牌。", }, content:function (){ "step 0" var num=4-player.countCards('h'); if(num) player.draw(num); 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); }); "step 1" 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_skill'); event.finish(); } "step 2" 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); } player.removeSkill('xianqu_skill'); }, ai:{ order:1, result:{ player:function(player){ if(4-player.countCards('h')<2) return 0; return 1; }, }, }, }, "zhulianbihe_skill":{ ruleSkill:true, group:["zhulianbihe_skill_draw","zhulianbihe_skill_tao"], mark:true, intro:{ content:"◇出牌阶段,你可以弃置此标记 然后摸两张牌。
    ◇你可以将此标记当做【桃】使用。", }, }, "yinyang_skill":{ ruleSkill:true, group:["yinyang_skill_draw","yinyang_skill_add"], mark:true, intro:{ content:"◇出牌阶段,你可以弃置此标记,然后摸一张牌。
    ◇弃牌阶段,你可以弃置此标记,然后本回合手牌上限+2。", }, }, "zhulianbihe_skill_draw":{ ruleSkill:true, enable:"phaseUse", usable:1, content:function (){ player.draw(2); player.removeSkill('zhulianbihe_skill'); }, ai:{ order:function (item,player){ var cards=player.getCards('h'); if(player.hp>=3){ if(cards.length>=3){ for(var i=0;i=1) return 7.2; } return 1; } else return 7.2; } if(player.hp=2){ if(cards.length<2){ for(var i=0;i=1) return 7.2; } return 1; } } return 1; }, result:{ player:2, }, }, }, "zhulianbihe_skill_tao":{ ruleSkill:true, enable:"chooseToUse", viewAs:{ name:"tao", }, filterCard:function (){return false}, selectCard:-1, precontent:function (){ player.removeSkill('zhulianbihe_skill'); }, ai:{ save:true, respondTao:true, }, }, "yinyang_skill_draw":{ ruleSkill:true, enable:"phaseUse", usable:1, content:function (){ player.draw(); player.removeSkill('yinyang_skill'); }, ai:{ order:function (item,player){ if(player.countCards('h')player.getHandcardLimit()) return 0; return 1; }, }, }, }, "yinyang_skill_add":{ ruleSkill:true, trigger:{ player:"phaseDiscardBefore", }, filter:function (event,player){ return player.needsToDiscard(); }, prompt:"是否弃置【阴阳鱼】标记,使本回合的手牌上限+2?", content:function (){ player.addTempSkill('yinyang_add','phaseAfter'); player.removeSkill('yinyang_skill'); }, }, "yinyang_add":{ mod:{ maxHandcard:function (player,num){ return num+2; }, }, }, /*----分界线----*/ _lianheng:{ mode:['guozhan'], enable:'phaseUse', usable:1, prompt:'将至多三张可合纵的牌交给一名与你势力不同的角色,或未确定势力的角色,若你交给与你势力不同的角色,则你摸等量的牌', filter:function(event,player){ return (player.getCards('h',function(card){ return card.hasTag('lianheng'); }).length); }, filterCard:function(card){ return card.hasTag('lianheng'); }, filterTarget:function(card,player,target){ if(target==player) return false; if(player.isUnseen()) return target.isUnseen(); if(player.identity=='ye') return true; return target.identity!=player.identity; }, check:function(card){ if(card.name=='tao') return 0; return 5-get.value(card); }, selectCard:[1,3], prepare:'give', discard:false, // delay:0.5, content:function(){ "step 0" target.gain(cards,player); "step 1" if(!target.isUnseen()){ player.draw(cards.length); } }, ai:{ basic:{ order:2 }, result:{ player:function(player,target){ var huoshao=false; for(var i=0;i=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.storage.qianhuan]); 'step 1' if(result.bool){ var card=result.links[0]; player.storage.qianhuan.remove(card); if(player.storage.qianhuan.length){ player.updateMarks('qianhuan'); } else{ player.unmarkSkill('qianhuan'); } game.cardsDiscard(card); player.$throw(card); player.logSkill('qianhuan',trigger.player); trigger.getParent().targets.remove(trigger.target); } } } } }, gzzhiman:{ audio:'zhiman', inherit:'zhiman', content:function(){ 'step 0' if(trigger.player.countGainableCards(player,'ej')){ player.gainPlayerCard(trigger.player,'ej',true); } trigger.cancel(); 'step 1' if(player.sameIdentityAs(trigger.player)){ trigger.player.mayChangeVice(); } } }, gzdiancai:{ audio:'diancai', trigger:{global:'phaseUseEnd'}, filter:function(event,player){ if(_status.currentPhase==player) return false; var num=0; player.getHistory('lose',function(evt){ if(evt.cards2&&evt.getParent('phaseUse')==event) num+=evt.cards2.length; }); return num>=player.hp; }, content:function(){ 'step 0' var num=player.maxHp-player.countCards('h'); if(num>0){ player.draw(num); } 'step 1' player.mayChangeVice(); }, }, /*diaodu:{ enable:'phaseUse', audio:2, usable:1, filterTarget:function(card,player,target){ return player.sameIdentityAs(target); }, selectTarget:-1, content:function(){ 'step 0' var use=target.countCards('h',{type:'equip'})>0; var move=false; var es=target.getCards('e'); if(es.length&&target.identity!='ye'){ move=game.hasPlayer(function(current){ if(current!=target&&target.identity!=current.identity){ for(var i=0;i=4; }); var vacancies={ equip1:0, equip2:0, equip3:0, equip4:0, equip5:0 }; for(var i=0;i0){ num++; if(num>=3){ return 1; } vacancies[type]--; } } } if(num&&player.hp==1){ return 0.5; } return 0; } } } }, xuanlve:{ trigger:{player:'loseAfter'}, direct:true, filter:function(event,player){ return event.es&&event.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){ return -get.attitude(_status.event.player,target); }); '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.storage.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.storage.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.storage.yuanjiangfenghuotu,true); 'step 1' if(result.bool){ player.$throw(result.links); var card=result.links[0]; game.cardsDiscard(card); player.storage.yuanjiangfenghuotu.remove(card); player.syncStorage('yuanjiangfenghuotu'); player.updateMarks('yuanjiangfenghuotu'); } } }, jiahe_put:{ enable:'phaseUse', audio:2, forceaudio:true, filter:function(event,player){ var zhu=get.zhu(player,'jiahe'); if(zhu&&zhu.storage.yuanjiangfenghuotu){ 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.storage.yuanjiangfenghuotu>=5){ return num-3; } return num+3; } else{ var player=_status.event.player; var zhu=get.zhu(player,'jiahe'); if(zhu.storage.yuanjiangfenghuotu>=5&&!player.hasSkillTag('noe')){ return num-5; } } return num; }, discard:false, lose:true, toStorage:true, prepare:function(cards,player){ var zhu=get.zhu(player,'jiahe'); player.$give(cards,zhu,false); player.line(zhu); }, content:function(){ var zhu=get.zhu(player,'jiahe'); zhu.storage.yuanjiangfenghuotu.add(cards[0]); zhu.syncStorage('yuanjiangfenghuotu'); zhu.updateMarks('yuanjiangfenghuotu'); //event.trigger('addCardToStorage'); }, ai:{ order: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.storage.yuanjiangfenghuotu&&zhu.storage.yuanjiangfenghuotu.length){ return true; } return false; }, content:function(){ 'step 0' var zhu=get.zhu(player,'jiahe'); event.num=zhu.storage.yuanjiangfenghuotu.length; 'step 1' var list=[]; if(event.num>=1&&!player.hasSkill('reyingzi')) list.push('reyingzi'); if(event.num>=2&&!player.hasSkill('haoshi')) list.push('haoshi'); if(event.num>=3&&!player.hasSkill('shelie')) list.push('shelie'); if(event.num>=4&&!player.hasSkill('duoshi')) list.push('duoshi'); if(!list.length){ event.finish(); return; } var prompt2='你可以获得下列一项技能直到回合结束'; if(list.length>=5){ if(event.done){ prompt2+=' (2/2)'; } else{ prompt2+=' (1/2)'; } } list.push('cancel2'); player.chooseControl(list).set('prompt',get.translation('yuanjiangfenghuotu')). set('prompt2',prompt2).set('centerprompt2',true).set('ai',function(evt,player){ var controls=_status.event.controls; if(controls.contains('haoshi')){ var nh=player.countCards('h'); if(player.hasSkill('reyingzi')){ if(nh==0) return 'haoshi'; } else{ if(nh<=1) return 'haoshi'; } } if(controls.contains('shelie')){ return 'shelie'; } if(controls.contains('reyingzi')){ return 'reyingzi'; } if(controls.contains('duoshi')){ return 'duoshi'; } return controls.randomGet(); }); 'step 2' if(result.control!='cancel2'){ player.addTempSkill(result.control); if(!event.done) player.logSkill('jiahe_put'); game.log(player,'获得了技能','【'+get.translation(result.control)+'】'); if(event.num>=5&&!event.done){ event.done=true; event.goto(1); } } } }, yuanjiangfenghuotu:{ unique:true, forceunique:true, nopop:true, mark:true, intro:{ content:'cards', onunmark:function(storage,player){ if(storage&&storage.length){ player.$throw(storage,1000); game.cardsDiscard(storage); game.log(storage,'被置入了弃牌堆'); storage.length=0; } }, mark:function(dialog,content,player){ if(content&&content.length){ dialog.addSmall(content); } dialog.addText('
    • 每名吴势力角色的出牌阶段限一次,该角色可以将一张装备牌置于“缘江烽火图”上,称之为“烽火”。
    • 根据“烽火”的数量,所有吴势力角色可于其准备阶段开始时选择并获得其中一个技能直到回合结束:一张以上~英姿;两张以上~好施;三张以上~涉猎;四张以上~度势;五张以上~可额外选择一项。
    • 锁定技,当你受到【杀】或锦囊牌造成的伤害后,你将一张“烽火”置入弃牌堆。',false) } } }, gzqice:{ enable:'phaseUse', usable:1, audio:"qice_backup", filter:function(event,player){ return player.countCards('h')>0 }, group:'gzqice_change', subSkill:{ change:{ trigger:{player:'useCardAfter'}, filter:function(event,player){ return event.skill=='gzqice_backup'; }, silent:true, content:function(){ player.mayChangeVice(); event.skill='gzqice'; event.trigger('skillAfter'); } } }, chooseButton:{ dialog:function(){ var list=[ 'taoyuan','wugu','juedou','huogong','jiedao','tiesuo','guohe','shunshou','wuzhong','wanjian','nanman', 'xietianzi','shuiyanqijunx','lulitongxin','lianjunshengyan','chiling','diaohulishan','yuanjiao','huoshaolianying','zhibi','yiyi', ]; for(var i=0;inum){ return false; } } else if(info.changeTarget){ var giveup=true; var list=game.filterPlayer(function(current){ return player.canUse(card,current); }); for(var i=0;inh){ select[1]=nh; } return select; }, filterTarget:function(card,player,target){ var info=get.info(card); if(info.changeTarget){ var targets=[target]; info.changeTarget(player,targets); if(targets.length>player.countCards('h')){ return false; } } return lib.filter.filterTarget(card,player,target); }, audio:'qice_backup', popname:true, viewAs:{name:links[0][2]}, ai1:function(){ return 1; } } }, prompt:function(links,player){ return '将全部手牌当作'+get.translation(links[0][2])+'使用'; } }, ai:{ order:1, result:{ player:function(player){ var num=0; var cards=player.getCards('h'); if(cards.length>=3&&player.hp>=3) return 0; for(var i=0;i=2; }, content:function(){ 'step 0' var list=player.storage.gzhuashen.slice(0); if(!list.length){ event.finish(); return; } player.chooseButton().set('ai',function(){ return Math.random()-0.3; }).set('createDialog',['是否替换一张“化身”?',[list,'character']]); 'step 1' if(result.bool){ player.logSkill('gzhuashen'); game.log(player,'替换了一张','#g化身'); lib.skill.gzhuashen.addCharacter(player,_status.characterlist.randomGet(),true); lib.skill.gzhuashen.removeCharacter(player,result.links[0]); game.delayx(); } } }, triggered:{}, flash:{ hookTrigger:{ log:function(player,skill){ var sources=lib.skill.gzhuashen.getSkillSources(player,skill); if(sources.length){ player.flashAvatar('gzhuashen',sources.randomGet()); player.storage.gzhuashen_removing.add(skill); } } }, trigger:{player:['useSkillBegin','useCard','respond']}, silent:true, filter:function(event,player){ return event.skill&&lib.skill.gzhuashen.getSkillSources(player,event.skill).length>0; }, content:function(){ lib.skill.gzhuashen_flash.hookTrigger.log(player,trigger.skill); } }, clear:{ trigger:{player:'phaseAfter'}, silent:true, content:function(){ player.storage.gzhuashen_trigger.length=0; } }, disallow:{ hookTrigger:{ block:function(event,player,name,skill){ for(var i=0;i0){ return true; } } return false; } } }, remove:{ trigger:{player:['useSkillAfter','useCardAfter','respondAfter','triggerAfter','skillAfter']}, hookTrigger:{ after:function(event,player){ if(event._direct&&!player.storage.gzhuashen_removing.contains(event.skill)) return false; if(lib.skill[event.skill].silent) return false; return lib.skill.gzhuashen.getSkillSources(player,event.skill).length>0; } }, silent:true, filter:function(event,player){ return event.skill&&lib.skill.gzhuashen.getSkillSources(player,event.skill).length>0; }, content:function(){ 'step 0' if(trigger.name=='trigger'){ player.storage.gzhuashen_trigger.push([trigger._trigger,trigger.triggername]); } var sources=lib.skill.gzhuashen.getSkillSources(player,trigger.skill); if(sources.length==1){ event.directresult=sources[0]; } else{ player.chooseButton(true).set('createDialog',['移除一张“化身”牌',[sources,'character']]); } 'step 1' if(!event.directresult&&result&&result.links[0]){ event.directresult=result.links[0]; } var name=event.directresult; lib.skill.gzhuashen.removeCharacter(player,name); game.log(player,'移除了化身牌','#g'+get.translation(name)); } } }, ai:{ nofrequent:true, skillTagFilter:function(player,tag,arg){ if(arg&&player.storage.gzhuashen){ if(lib.skill.gzhuashen.getSkillSources(player,arg).length>0){ return true; } } return false; } } }, gzxiongsuan:{ limited:true, audio:'xiongsuan', enable:'phaseUse', filterCard:true, filter:function(event,player){ return player.countCards('h'); }, filterTarget:function(card,player,target){ return target.sameIdentityAs(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','phaseZhunbeiBegin'); }, subSkill:{ restore:{ trigger:{global:'phaseAfter'}, silent: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', 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.storage.huangjintianbingfu&&zhu.storage.huangjintianbingfu.length>0){ return true; } return false; }, content:function(){ "step 0" var zhu=get.zhu(player,'hongfa'); player.chooseCardButton(get.prompt('huangjintianbingfu'),zhu.storage.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'); zhu.storage.huangjintianbingfu.remove(card); zhu.syncStorage('huangjintianbingfu'); zhu.updateMarks('huangjintianbingfu'); player.logSkill('hongfa_respond'); } } }, 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.storage.huangjintianbingfu&&zhu.storage.huangjintianbingfu.length>0){ return true; } return false; }, chooseButton:{ dialog:function(event,player){ var zhu=get.zhu(player,'hongfa'); return ui.create.dialog('黄巾天兵符',zhu.storage.huangjintianbingfu,'hidden'); }, backup:function(links,player){ return { filterCard:function(){return false}, selectCard:-1, viewAs:{name:'sha',cards:links}, cards:links, onuse:function(result,player){ result.cards=lib.skill[result.skill].cards; var card=result.cards[0]; var zhu=get.zhu(player,'hongfa'); zhu.storage.huangjintianbingfu.remove(card); zhu.syncStorage('huangjintianbingfu'); zhu.updateMarks('huangjintianbingfu'); 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.storage.huangjintianbingfu&&zhu.storage.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, init:function(player){ player.storage.huangjintianbingfu=[]; }, derivation:'huangjintianbingfu', unique:true, forceunique:true, trigger:{player:'phaseZhunbeiBegin'}, forced:true, filter:function(event,player){ return player.storage.huangjintianbingfu.length==0; }, content:function(){ var cards=get.cards(get.population('qun')); player.storage.huangjintianbingfu.addArray(cards); game.cardsGotoSpecial(cards); player.syncStorage('huangjintianbingfu'); player.updateMarks('huangjintianbingfu'); //event.trigger('addCardToStorage'); }, ai:{ threaten:2, }, group:'hongfa_hp', global:['hongfa_use','hongfa_respond'], subSkill:{ hp:{ audio:true, trigger:{player:'loseHpBefore'}, filter:function(event,player){ return player.storage.huangjintianbingfu.length>0; }, direct:true, content:function(){ 'step 0' player.chooseCardButton(get.prompt('hongfa'),player.storage.huangjintianbingfu).set('ai',function(){ return 1; }); 'step 1' if(result.bool){ var card=result.links[0]; game.cardsDiscard(card); player.storage.huangjintianbingfu.remove(card); player.$throw(card,1000); player.updateMarks('huangjintianbingfu'); player.syncStorage('huangjintianbingfu'); trigger.cancel(); player.logSkill('hongfa_hp'); game.delay(); } } } } }, 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:{ // unique:true, trigger:{player:'phaseDrawBegin1'}, // frequent:'check', // check:function(event,player){ // var num=get.population('qun'); // if(player.hasSkill('huangjintianbingfu')){ // num+=player.storage.huangjintianbingfu.length; // } // return num>event.num; // }, audio:2, content:function(){ 'step 0' var num=get.population('qun'); if(player.hasSkill('huangjintianbingfu')){ num+=player.storage.huangjintianbingfu.length; } player.chooseCardButton(num,true,get.cards(num),'按顺将卡牌置于牌堆顶(先选择的在上)').set('ai',function(button){ return get.value(button.link); }); 'step 1' if(result.bool){ var list=result.links.slice(0); while(list.length){ ui.cardPile.insertBefore(list.pop(),ui.cardPile.firstChild); } } } }, zhangwu:{ audio:2, unique:true, forceunique:true, ai:{ threaten:2, }, group:['zhangwu_gain','zhangwu_clear','zhangwu_count1','zhangwu_count2','zhangwu_count3'], subSkill:{ gain:{ audio:'zhangwu', trigger:{global:['discardAfter','respondAfter','useCardAfter','equipAfter', 'judgeAfter','useSkillAfter','phaseDrawBegin','phaseAfter']}, forced:true, filter:function(event,player){ if(player.storage.zhangwu){ for(var i=0;i
      【武圣】
      将“红色牌”改为“任意牌”
      【咆哮】
      增加描述“你使用的【杀】无视其他角色的防具”
      【龙胆】
      增加描述“你每发动一次‘龙胆’便摸一张牌”
      【烈弓】
      增加描述“你的攻击范围+1”
      【铁骑】
      将“一张明置的武将牌”改为“所有明置的武将牌”
      ", } }, jizhao:{ derivation:'rerende', unique:true, audio:2, enable:'chooseToUse', mark:true, skillAnimation:true, animationColor:'fire', init:function(player){ player.storage.jizhao=false; }, filter:function(event,player){ if(player.storage.jizhao) return false; if(event.type=='dying'){ if(player!=event.dying) return false; return true; } return false; }, content:function(){ 'step 0' player.awakenSkill('jizhao'); player.storage.jizhao=true; var num=player.maxHp-player.countCards('h'); if(num>0){ player.draw(num); } 'step 1' if(player.hp<2){ player.recover(2-player.hp); } 'step 2' player.removeSkill('shouyue'); player.removeSkill('wuhujiangdaqi'); player.addSkill('rerende'); }, ai:{ order:1, skillTagFilter:function(player){ if(player.storage.jizhao) return false; if(player.hp>0) return false; }, save:true, result:{ player:10 }, }, intro:{ content:'limited' } }, gzshoucheng:{ inherit:'shoucheng', audio:'shoucheng', filter:function(event,player){ if(event.player.isDead()||event.player.countCards('h')) return false; if(!event.player.isFriendOf(player)) return false; if(_status.currentPhase==event.player) return false; for(var i=0;i0; }, content:function(){ "step 0" player.chooseCardTarget({ filterCard:function(card){ return get.type(card)=='equip'; }, position:'he', filterTarget:function(card,player,target){ return target.isEmpty(get.subtype(card)); }, ai1:function(card){ return 6-get.value(card); }, ai2:function(target){ return get.attitude(_status.event.player,target)-3; }, prompt:get.prompt2('huyuan') }); "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){ return -get.attitude(_status.event.player,target); }).set('source',target); } else{ event.finish(); } "step 2" if(result.bool&&result.targets.length){ event.current.line(result.targets,'green'); player.discardPlayerCard(true,result.targets[0],'he'); } }, }, heyi:{ zhenfa:'inline', global:'heyi_distance' }, heyi_distance:{ mod:{ globalTo:function(from,to,distance){ if(game.hasPlayer(function(current){ return current.hasSkill('heyi')&¤t.inline(to)&¤t!=to; })){ return distance+1; } } } }, tianfu:{ init:function(player){ player.checkMainSkill('tianfu'); }, mainSkill:true, inherit:'kanpo', zhenfa:'inline', viewAsFilter:function(player){ return _status.currentPhase&&_status.currentPhase.inline(player)&&!player.hasSkill('kanpo')&&player.countCards('h',{color:'black'})>0; }, }, yizhi:{ init:function(player){ if(player.checkViceSkill('yizhi')&&!player.viceChanged){ player.removeMaxHp(); } }, viceSkill:true, inherit:'guanxing', filter:function(event,player){ return !player.hasSkill('guanxing'); } }, gzshangyi:{ audio:'shangyi', enable:'phaseUse', usable:1, filter:function(event,player){ return player.countCards('h')>0; }, filterTarget:function(card,player,target){ return player!=target&&(target.countCards('h')||target.isUnseen(2)); }, content:function(){ "step 0" target.viewHandcards(player); "step 1" if(!target.countCards('h')){ event._result={index:1}; } else if(!target.isUnseen(2)){ event._result={index:0}; } else{ player.chooseControl().set('choiceList',[ '观看'+get.translation(target)+'的手牌并可以弃置其中的一张黑色牌', '观看'+get.translation(target)+'的所有暗置的武将牌', ]); } "step 2" if(result.index==0){ player.discardPlayerCard(target,'h').set('filterButton',function(button){ return get.color(button.link)=='black'; }).set('visible',true); } else{ player.viewCharacter(target,2); } }, ai:{ order:11, result:{ target:function(player,target){ return -target.countCards('h'); } }, threaten:1.1 }, }, niaoxiang:{ zhenfa:'siege', audio:'zniaoxiang', global:'niaoxiang_sha' }, niaoxiang_sha:{ trigger:{player:'useCardToPlayered'}, filter:function(event,player){ if(event.card.name!='sha') return false; if(game.countPlayer()<4) return false; return player.siege(event.target)&&game.hasPlayer(function(current){ return current.hasSkill('niaoxiang')&¤t.siege(event.target); }); }, forced:true, audio:'zniaoxiang', forceaudio:true, logTarget:'target', content:function(){ var id=trigger.target.playerid; var map=trigger.getParent().customArgs; if(!map[id]) map[id]={}; if(typeof map[id].shanRequired=='number'){ map[id].shanRequired++; } else{ map[id].shanRequired=2; } } }, fengshi:{ audio:'zfengshi', zhenfa:'siege', global:'fengshi_sha' }, fengshi_sha:{ audio:'zfengshi', forceaudio:true, trigger:{player:'useCardToPlayered'}, filter:function(event,player){ if(event.card.name!='sha'||game.countPlayer()<4) return false; return player.siege(event.target)&&game.hasPlayer(function(current){ return current.hasSkill('fengshi')&¤t.siege(event.target); })&&event.target.countCards('e'); }, logTarget:'target', content:function(){ trigger.target.chooseToDiscard('e',true); } }, gzguixiu:{ audio:'guixiu', trigger:{player:['showCharacterAfter','removeCharacterBefore']}, filter:function(event,player){ if(event.name=='removeCharacter'||event.name=='changeVice') return event.toRemove=='gz_mifuren'&&player.isDamaged(); return event.toShow.contains('gz_mifuren'); }, content:function(){ if(trigger.name=='showCharacter'){ player.draw(2); } else{ player.recover(); } }, }, gzcunsi:{ derivation:'gzyongjue', enable:'phaseUse', audio:'cunsi', filter:function(event,player){ return player.checkMainSkill('gzcunsi',false)||player.checkViceSkill('gzcunsi',false); }, unique:true, forceunique:true, filterTarget:true, skillAnimation:true, animationColor:'orange', content:function(){ 'step 0' if(player.checkMainSkill('gzcunsi',false)){ player.removeCharacter(0); } else{ player.removeCharacter(1); } 'step 1' target.addSkill('gzyongjue'); if(target!=player){ target.draw(2); } }, ai:{ order:9, result:{ player:function(player,target){ var num=0; if(player.isDamaged()&&target.isFriendOf(player)){ num++; if(target.hasSkill('kanpo')) num+=0.5; if(target.hasSkill('liegong')) num+=0.5; if(target.hasSkill('tieji')) num+=0.5; if(target.hasSkill('gzrende')) num+=1.2; if(target.hasSkill('longdan')) num+=1.2; if(target.hasSkill('paoxiao')) num+=1.2; if(target.hasSkill('zhangwu')) num+=1.5; if(target!=player) num+=0.5; } return num; } } } }, gzyongjue:{ audio:'yongjue', trigger:{global:'useCardAfter'}, filter:function(event,player){ if(event==event.player.getHistory('useCard')[0]&&event.card.name=='sha'&&_status.currentPhase==event.player&&event.player.isFriendOf(player)){ for(var i=0;i0&&event.source&&event.source.isUnseen(2); }, content:function(){ trigger.num--; }, ai:{ effect:{ target:function(card,player,target){ if(player.hasSkillTag('jueqing',false,target)) return; if(!player.isUnseen(2)) return; var num=get.tag(card,'damage'); if(num){ if(num>1) return 0.5; return 0; } } } }, }, hunshang:{ init:function(player){ if(player.checkViceSkill('hunshang')&&!player.viceChanged){ player.removeMaxHp(); } }, group:['hunshang_yingzi','hunshang_yinghun'], }, hunshang_yingzi:{ inherit:'yingzi', filter:function(event,player){ return player.hp<=1&&!player.hasSkill('yingzi'); } }, hunshang_yinghun:{ inherit:'gzyinghun', filter:function(event,player){ return player.hp<=1&&player.isDamaged()&&!player.hasSkill('gzyinghun'); } }, yingyang:{ trigger:{player:'compare',target:'compare'}, filter:function(event){ return !event.iwhile; }, direct: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', 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); "step 1" if(result.bool){ var nono=(get.damageEffect(trigger.player,player,trigger.player)>=0); trigger.player.chooseToDiscard('弃置一张装备牌,或受到一点伤害','he',{type:'equip'}).set('ai',function(card){ if(_status.event.nono){ return 0; } if(_status.event.player.hp==1) return 10-get.value(card); return 9-get.value(card); }).set('nono',nono); } else{ event.finish(); } "step 2" if(!result.bool){ trigger.player.damage(); } }, }, _mingzhi1:{ trigger:{player:'phaseBeginStart'}, priority:19, forced:true, popup:false, content:function(){ "step 0" var choice=1; for(var i=0;i=2||(popu==1&&game.players.length<=4)){ return Math.random()<0.5?3:(Math.random()<0.5?2:1); } if(choice==0) return 0; if(get.population(group)>0&&player.wontYe()){ return Math.random()<0.2?(Math.random()<0.5?3:(Math.random()<0.5?2:1)):0; } var nming=0; for(var i=0;i=2||(popu==1&&game.players.length<=4)){ return true; } if(get.population(group)>0&&player.wontYe()){ return Math.random()<0.2?true:false; } var nming=0; for(var i=0;ievent.maxHp) player.recover(player.maxHp-event.maxHp); } }, gz_jun_liubei:{audio:true}, gz_jun_caocao:{audio:true}, gz_jun_sunquan:{audio:true}, gz_jun_zhangjiao:{audio:true}, _zhenfazhaohuan:{ enable:'phaseUse', usable:1, getConfig:function(player,target){ var config={}; var skills=player.getSkills(); for(var i=0;i=num){ break; } } } else{ if(!map[lib.character[list[i]][1]]){ group=lib.character[list[i]][1]; choice.push(list[i]); list.splice(i--,1); } } } } return choice; }, getState:function(){ var state={}; for(var i in lib.playerOL){ var player=lib.playerOL[i]; state[i]={ identity:player.identity, //group:player.group, shown:player.ai.shown, }; } return state; }, updateState:function(state){ for(var i in state){ var player=lib.playerOL[i]; if(player){ player.identity=state[i].identity; //player.group=state[i].group; player.ai.shown=state[i].shown; } } }, getRoomInfo:function(uiintro){ var num,last; if(lib.configOL.initshow_draw=='off'){ num='关闭' } else{ num={mark:'标记',draw:'摸牌'}[lib.configOL.initshow_draw]; } uiintro.add('
      首亮奖励:'+num); uiintro.add('
      珠联璧合:'+(lib.configOL.zhulian?'开启':'关闭')); uiintro.add('
      出牌时限:'+lib.configOL.choose_timeout+'秒'); uiintro.add('
      国战牌堆:'+(lib.configOL.guozhanpile?'开启':'关闭')); uiintro.add('
      鏖战模式:'+(lib.configOL.aozhan?'开启':'关闭')); uiintro.add('
      观看下家副将:'+(lib.configOL.viewnext?'开启':'关闭')); last=uiintro.add('
      国战武将:'+(lib.configOL.onlyguozhan?'开启':'关闭')); if(!lib.configOL.onlyguozhan){ // uiintro.add('
      屏蔽弱将:'+(lib.configOL.ban_weak?'开启':'关闭')); // last=uiintro.add('
      屏蔽强将:'+(lib.configOL.ban_strong?'开启':'关闭')); if(lib.configOL.banned.length){ last=uiintro.add('
      禁用武将:'+get.translation(lib.configOL.banned)); } if(lib.configOL.bannedcards.length){ last=uiintro.add('
      禁用卡牌:'+get.translation(lib.configOL.bannedcards)); } } 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; default:list[i]+='国'; } } }, getVideoName:function(){ var str=get.translation(game.me.name1)+'/'+get.translation(game.me.name2); var str2=get.cnNumber(parseInt(get.config('player_number')))+'人'+ get.translation(lib.config.mode); if(game.me.identity=='ye'){ str2+=' - 野心家'; } var name=[str,str2]; return name; }, showIdentity:function(started){ if(game.phaseNumber==0&&!started) return; for(var i=0;i1){ check=false; } } else{ if(hasunknown&&!game.hasPlayer(function(current){ return get.is.jun(current); })){ var players=game.players.concat(game.dead); var num=0; for(var i=0;iplayers.length/2){ check=false; } } } } if(check){ game.checkResult(); } else if(!hasunknown){ var ids=[]; var idmap={}; var idp={}; for(var i=0;i1&&idmap[id2]>1) return; if(idmap[id1]>1&&id1=='ye') return; if(idmap[id2]>1&&id2=='ye') return; if(idmap[id1]==1){ idp[id1].showGiveup(); } if(idmap[id2]==1){ idp[id2].showGiveup(); } } }, checkResult:function(){ _status.overing=true; for(var i=0;i0; }, chooseCharacter:function(){ var next=game.createEvent('chooseCharacter',false); next.showConfig=true; next.addPlayer=true; next.ai=function(player,list,back){ if(_status.brawl&&_status.brawl.chooseCharacterAi){ if(_status.brawl.chooseCharacterAi(player,list,back)!==false){ return; } } for(var i=0;i'; td.link=i-1; seats.appendChild(td); td.addEventListener(lib.config.touchscreen?'touchend':'click',function(){ if(_status.dragged) return; if(_status.justdragged) return; if(_status.cheat_seat){ _status.cheat_seat.classList.remove('bluebg'); if(_status.cheat_seat==this){ delete _status.cheat_seat; return; } } this.classList.add('bluebg'); _status.cheat_seat=this; }); } dialog.content.appendChild(seats); if(game.me==game.zhu){ seats.previousSibling.style.display='none'; seats.style.display='none'; } dialog.add(ui.create.div('.placeholder.add-setting')); dialog.add(ui.create.div('.placeholder.add-setting')); if(get.is.phoneLayout()) dialog.add(ui.create.div('.placeholder.add-setting')); }; var removeSetting=function(){ var dialog=_status.event.dialog; if(dialog){ dialog.style.height=''; delete dialog._scrollset; var list=Array.from(dialog.querySelectorAll('.add-setting')); while(list.length){ list.shift().remove(); } ui.update(); } }; event.addSetting=addSetting; event.removeSetting=removeSetting; var chosen=lib.config.continue_name||[]; game.saveConfig('continue_name'); event.chosen=chosen; var i; event.list=[]; for(i in lib.character){ if(i.indexOf('gz_shibing')==0) continue; if(chosen.contains(i)) continue; if(lib.filter.characterDisabled(i)) continue; if(get.config('onlyguozhan')){ if(!lib.characterPack.mode_guozhan[i]) continue; if(get.is.jun(i)) continue; } if(lib.character[i][2]==3||lib.character[i][2]==4||lib.character[i][2]==5) event.list.push(i); } _status.characterlist=event.list.slice(0); _status.yeidentity=[]; if(_status.brawl&&_status.brawl.chooseCharacterFilter){ event.list=_status.brawl.chooseCharacterFilter(event.list); } event.list.randomSort(); // var list=event.list.splice(0,parseInt(get.config('choice_num'))); var list; if(_status.brawl&&_status.brawl.chooseCharacter){ list=_status.brawl.chooseCharacter(event.list,game.me); } else{ list=game.getCharacterChoice(event.list,parseInt(get.config('choice_num'))); } if(_status.auto){ event.ai(game.me,list); lib.init.onfree(); } else if(chosen.length){ game.me.init(chosen[0],chosen[1],false); lib.init.onfree(); } else{ var dialog=ui.create.dialog('选择角色','hidden',[list,'character']); if(!_status.brawl||!_status.brawl.noAddSetting){ if(get.config('change_identity')){ addSetting(dialog); } } var next=game.me.chooseButton(dialog,true,2).set('onfree',true); next.filterButton=function(button){ if(ui.dialog.buttons.length<=10){ for(var i=0;ilist.length){ num=5; } else if(lib.configOL.number*7>list.length){ num=6; } else{ num=7; } var filterButton=function(button){ if(ui.dialog){ if(ui.dialog.buttons.length<=10){ for(var i=0;i根据“烽火”的数量,所有吴势力角色可于其准备阶段开始时选择并获得其中一个技能直到回合结束:一张以上:〖英姿〗;两张以上:〖好施〗;三张以上:〖涉猎〗;四张以上:〖度势〗;五张以上:可额外选择一项。
      锁定技,当你受到【杀】或锦囊牌造成的伤害后,你将一张“烽火”置入弃牌堆。', yuanjiangfenghuotu_ab:'江图', yuanjiangfenghuotu_bg:'图', wuxin:'悟心', wuxin_info:'摸牌阶段开始时,你可以观看牌堆顶的X张牌(X为群势力角色的数量),然后将这些牌以任意顺序置于牌堆顶', hongfa:'弘法', hongfa_use:'天兵', hongfa_respond:'天兵', hongfa_info:'君主技,锁定技,此武将牌明置时,你获得“黄巾天兵符”;准备阶段开始时,若没有“天兵”,你将牌堆顶的X张牌置于“黄巾天兵符”上,称为“天兵”(X为群势力角色的数量)', wendao:'问道', wendao_info:'出牌阶段限一次,你可以弃置一张不为【太平要术】的红色牌,然后获得弃牌堆或场上的一张【太平要术】。', huangjintianbingfu:'黄巾天兵符', huangjintianbingfu_ab:'兵符', huangjintianbingfu_bg:'符', huangjintianbingfu_info:'锁定技 :当你计算群势力角色数时,每一张“天兵”均可视为一名群势力角色。
      当你失去体力时,你可改为将一张“天兵”置入弃牌堆。
      与你势力相同的角色可将一张“天兵”当作【杀】使用或打出。', wuhujiangdaqi:'五虎将大旗', wuhujiangdaqi_ab:'将旗', wuhujiangdaqi_bg:'旗', wuhujiangdaqi_info:'存活的蜀势力角色的技能按以下规则改动:
      武圣:将“红色牌”改为“任意牌”
      咆哮:增加描述“你使用的【杀】无视其他角色的防具”
      龙胆:增加描述“你发动〖龙胆〗使用或打出牌时摸一张牌”
      烈弓:增加描述“你的攻击范围+1”
      铁骑:将“一张明置的武将牌”改为“所有明置的武将牌”', zhangwu:'章武', zhangwu_info:'锁定技。当【飞龙夺凤】进入弃牌堆或其他角色的装备区时,你获得之。当你失去【飞龙夺风】时,展示之,然后将此牌置于牌堆底并摸两张牌', shouyue:'授钺', shouyue_info:'君主技。只要此武将牌处于明置状态,你便拥有“五虎将大旗”。', jizhao:'激诏', jizhao_bg:'诏', jizhao_info:'限定技。当你处于濒死状态时,你可以将手牌补至体力上限,体力回复至2点,失去技能〖授钺〗并获得技能〖仁德〗。', gzshoucheng:'守成', gzshoucheng_info:'当与你势力相同的一名角色于其回合外失去手牌时,若其没有手牌,则你可以令其摸一张牌。', gzmingshi:'名士', gzmingshi_info:'锁定技,当你受到伤害时,若伤害来源有暗置的武将牌,此伤害-1。', fengshi:'锋矢', fengshi_sha:'锋矢', fengshi_info:'阵法技,在一个围攻关系中,若你是围攻角色,则你或另一名围攻角色使用【杀】指定被围攻角色为目标后,可令该角色弃置装备区内的一张牌。', gzsuishi:'随势', gzsuishi2:'随势', gzsuishi_info:'锁定技,其他角色进入濒死状态时,若伤害来源与你势力相同,你摸一张牌;其他角色死亡时,若其与你势力相同,你失去1点体力。', baoling:'暴凌', baoling_info:'主将技,锁定技,出牌阶段结束时,若你有副将,则你移除副将,然后加3点体力上限,回复3点体力,失去技能〖暴凌〗并获得〖崩坏〗', yingyang:'鹰扬', yingyang_info:'当你的拼点牌亮出后,你可以令此牌的点数+3或-3(至多为K,至少为1)。', hunshang:'魂殇', hunshang_info:'副将技,此武将牌减少半个阴阳鱼;准备阶段,若你的体力值不大于1,则你本回合获得“英姿”和“英魂”', gzguixiu:'闺秀', gzguixiu_info:'当你明置此武将牌时,你可以摸两张牌;当你移除此武将牌时,你可以回复1点体力。', gzcunsi:'存嗣', gzcunsi_info:'出牌阶段,你可以移除此武将牌并选择一名角色,然后其获得技能〖勇决〗,若你选择的目标角色不是自己,则其摸两张牌。', gzyongjue:'勇决', gzyongjue_info:'与你势力相同的一名角色于其回合内使用【杀】结算完成后,若此牌是其本回合内使用的第一张牌,则其可以获得此牌对应的所有实体牌。', gzqianxi:'潜袭', gzqianxi_info:'准备阶段开始时,你可以进行判定,然后你选择距离为1的一名角色,直到回合结束,该角色不能使用或打出与结果颜色相同的手牌', gzshangyi:'尚义', gzshangyi_info:'出牌阶段限一次,你可以令一名其他角色观看你的手牌。若如此做,你选择一项:1.观看其手牌并可以弃置其中的一张黑色牌;2.观看其所有暗置的武将牌。', niaoxiang:'鸟翔', niaoxiang_sha:'鸟翔', niaoxiang_info:'阵法技,在同一个围攻关系中,若你是围攻角色,则你或另一名围攻角色使用【杀】指定被围攻角色为目标后,该角色需依次使用两张【闪】才能抵消。', yicheng:'疑城', yicheng_info:'当与你势力相同的一名角色成为【杀】的目标后,你可以令该角色摸一张牌,然后弃置一张牌。', yizhi:'遗志', yizhi_info:'副将技,此武将牌减少半个阴阳鱼。若你的主将拥有技能〖观星〗,则将其描述中的X改为5;若你的主将没有技能〖观星〗,则你视为拥有技能〖观星〗。', tianfu:'天覆', tianfu_info:'主将技,阵法技,若当前回合角色与你处于同一队列,则你视为拥有技能〖看破〗。', ziliang:'资粮', ziliang_info:'副将技,当与你势力相同的一名角色受到伤害后,你可以将一张“田”交给该角色 ', gzjixi:'急袭', gzjixi_info:'主将技,此武将牌减少半个阴阳鱼。你可以将一张“田”当作【顺手牵羊】使用。', huyuan:'护援', huyuan_info:'结束阶段开始时,你可以将一张装备牌置入一名角色的装备区,然后你可以弃置该角色距离为1的一名角色的一张牌。', heyi:'鹤翼', heyi_info:'阵法技,与你处于同一队列的其他角色视为拥有技能【飞影】。', gz_shibing1wei:'魏兵', gz_shibing2wei:'魏兵', gz_shibing1shu:'蜀兵', gz_shibing2shu:'蜀兵', gz_shibing1wu:'吴兵', gz_shibing2wu:'吴兵', gz_shibing1qun:'群兵', gz_shibing2qun:'群兵', 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点伤害。', guozhan_default:"国战标准", guozhan_zhen:"君临天下·阵", guozhan_shi:"君临天下·势", guozhan_bian:"君临天下·变", guozhan_quan:"君临天下·权", guozhan_jun:"君主武将", guozhan_others:"其他", }, junList:['liubei','zhangjiao','sunquan','caocao'], 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'], ], element:{ content:{ chooseJunlingFor:function(){ 'step 0' var list=['junling1','junling2','junling3','junling4','junling5','junling6']; list=list.randomGets(2).sort(); for(var i=0;i选项'+get.cnNumber(i+1,true)+':'+event.choiceList[i]+'
      '); controls.push('选项'+get.cnNumber(i+1,true)); } } else if(event.controls) controls=event.controls; else controls=['执行该军令','不执行该军令']; if(!event.ai) event.ai=function(){return Math.floor(controls.length*Math.random())}; player.chooseControl(controls).set('dialog',dialog).set('ai',event.ai); 'step 1' event.result={ index:result.index, control:result.control, }; }, carryOutJunling:function(){ 'step 0' switch(event.junling){ case 'junling1':{ if(targets[0].isAlive()){ player.line(targets,'green'); targets[0].damage(player); } break; } case 'junling2':player.draw();event.num=1;break; case 'junling3':player.loseHp();break; case 'junling4':player.addTempSkill('junling4_eff');player.addTempSkill('fengyin_vice');player.addTempSkill('fengyin_main');break; case 'junling5':player.turnOver();player.addTempSkill('junling5_eff');break; } 'step 1' if(event.junling=='junling2'&&source!=player&&player.countCards('he')>0){ player.chooseCard('交给'+get.translation(source)+'第'+get.cnNumber(event.num)+'张牌(共两张)','he',true); event.ing=true; } if(event.junling=='junling6'){ var position='',num0=0; if(player.countCards('h')){position+='h';num0++;} if(player.countCards('e')){position+='e';num0++;} player.chooseCard('选择一张手牌和一张装备区内牌(若有),然后弃置其余的牌',position,num0,function(card){ if(ui.selected.cards.length) return get.position(card)!=get.position(ui.selected.cards[0]); return true; },true).set('complexCard',true).set('ai',function(card){return get.value(card)}); } 'step 2' if(event.junling=='junling2'&&source!=player){ if(result.cards.length&&event.ing){ source.gain(result.cards,player,'giveAuto'); } event.num++; if(event.num<3){ event.ing=false; event.goto(1); } } if(event.junling=='junling6'){ var cards=player.getCards('he'); for(var i=0;i0){ min=Math.min(min,num); } } } return get.population(this.identity)==min; }, logAi:function(targets,card){ if(this.ai.shown==1||this.isMad()) return; if(typeof targets=='number'){ this.ai.shown+=targets; } else{ var effect=0,c,shown; var info=get.info(card); if(info.ai&&info.ai.expose){ if(_status.event.name=='_wuxie'){ if(_status.event.source&&_status.event.source.ai.shown){ this.ai.shown+=0.2; } } else{ this.ai.shown+=info.ai.expose; } } if(targets.length>0){ 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(['gz_xunyou','gz_lvfan'].contains(name2)) return true; if(name2=='gz_dengai') return lib.character[name1][2]%2==1; if(['gz_sunce','gz_jiangwei'].contains(name1)) return name2=='gz_zhoutai'||lib.character[name2][2]%2==1; return false; }, guozhanRank:function(name,player){ if(name.indexOf('gz_shibing')==0) return -1; if(name.indexOf('gz_jun_')==0) return 7; if(player){ var skills=lib.character[name][3].slice(0); for(var i=0;i0})) eff1=2; else{ if(get.damageEffect(targets[0],performer,source)>=0) eff1=2; else eff1=-2; if(get.damageEffect(targets[0],source,performer)>=0) eff2=2; else eff2=-2; } break; case 'junling2': if(performer.countCards('he')){eff1=1;eff2=0;} else{eff1=2;eff2=-1;} break; case 'junling3': if(performer.hp==1&&!performer.hasSkillTag('save',true)) eff2=-5; else{ if(performer==viewer){ if(performer.hasSkillTag('maihp',true)) eff2=3; else eff2=-2; } else{ if(performer.hasSkillTag('maihp',false)) eff2=3; else eff2=-2; } } break; case 'junling4':eff1=0;eff2=-2;break; case 'junling5': var td=performer.isTurnedOver(); if(td){ if(performer==viewer){ if(_status.currentPhase==performer&&performer.hasSkill('jushou')) eff2=-3; else eff2=3; } else eff2=3; } else{ if(performer==viewer){ if(performer.hasSkillTag('noturn',true)) eff2=0; else eff2=-3; } else{ if(performer.hasSkillTag('noturn',false)) eff2=0; else eff2=-3; } } break; case 'junling6': if(performer.countCards('h')>1) eff2+=1-performer.countCards('h'); if(performer.countCards('e')>1) eff2+=1-performer.countCards('e'); break; } return Math.sign(att1)*eff1+Math.sign(att2)*eff2; }, realAttitude:function(from,toidentity,difficulty){ if(from.identity==toidentity&&toidentity!='ye'){ return 4+difficulty; } if(from.identity=='unknown'&&lib.character[from.name1][1]==toidentity){ if(from.wontYe()) return 4+difficulty; } var groups=[]; for(var i=0;i=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; }, } }; });