'use strict'; game.import('mode',function(lib,game,ui,get,ai,_status){ return { name:'identity', start:function(){ "step 0" if(!lib.config.new_tutorial){ ui.arena.classList.add('only_dialog'); } _status.mode=get.config('identity_mode'); if(_status.brawl&&_status.brawl.submode){ _status.mode=_status.brawl.submode; } event.replacePile=function(){ var list=['shengdong','qijia','caomu','jinchan','zengbin','fulei','qibaodao','zhungangshuo','lanyinjia']; var map={ shunshou:'shengdong', jiedao:'qijia', bingliang:'caomu', wuxie:'jinchan', wuzhong:'zengbin', wugu:'zengbin', shandian:'fulei', qinggang:'qibaodao', qinglong:'zhungangshuo', bagua:'lanyinjia' }; for(var i=0;i<lib.card.list.length;i++){ var name=lib.card.list[i][2]; if(list.includes(name)){ lib.card.list.splice(i--,1); } else if(map[name]){ lib.card.list[i][2]=map[name]; lib.card.list[i]._replaced=true; } } } "step 1" 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){ if(_status.mode=='zhong'){ if(get.config('zhong_card')){ event.replacePile(); } game.prepareArena(8); } else if(_status.mode=='purple'){ game.prepareArena(8); } else{ game.prepareArena(); } if(!lib.config.new_tutorial){ game.delay(); } } "step 2" if(!lib.config.new_tutorial){ _status.new_tutorial=true; lib.init.onfree(); game.saveConfig('version',lib.version); var clear=function(){ ui.dialog.close(); while(ui.controls.length) ui.controls[0].close(); }; var clear2=function(){ ui.auto.show(); ui.arena.classList.remove('only_dialog'); }; var step1=function(){ ui.create.dialog('欢迎来到无名杀,是否进入新手向导?'); game.saveConfig('new_tutorial',true); ui.dialog.add('<div class="text center">跳过后,你可以在选项-其它中重置新手向导'); ui.auto.hide(); ui.create.control('跳过向导',function(){ clear(); clear2(); game.resume(); // lib.cheat.cfg(); // owidgets }); ui.create.control('继续',step2); } var step2=function(){ if(!lib.config.phonelayout){ clear(); ui.create.dialog('如果你在使用手机,可能会觉得按钮有点小'+ ',将布局改成移动可以使按钮变大'); ui.dialog.add('<div class="text center">你可以在选项-外观-布局中更改此设置'); var lcontrol=ui.create.control('使用移动布局',function(){ if(lib.config.phonelayout){ ui.control.firstChild.firstChild.innerHTML='使用移动布局'; game.saveConfig('phonelayout',false); lib.init.layout('mobile'); } else{ ui.control.firstChild.firstChild.innerHTML='使用默认布局'; game.saveConfig('phonelayout',true); lib.init.layout('mobile'); } }); ui.create.control('继续',step3); } else{ step3(); } }; var step3=function(){ if(lib.config.touchscreen){ clear(); ui.create.dialog('触屏模式中,下划可以显示菜单,上划可以切换托管,双指单击可以暂停'); ui.dialog.add('<div class="text center">你可以在选项-通用-中更改手势设置'); ui.create.control('继续',step4); } else{ step4(); } }; var step4=lib.genAsync(function*(){ clear(); ui.window.classList.add('noclick_important'); ui.click.configMenu(); ui.control.classList.add('noclick_click_important'); ui.control.style.top='calc(100% - 105px)'; yield new Promise(resolve => ui.create.control('在菜单中,可以进行各项设置',resolve)); ui.click.menuTab('选项'); yield new Promise(resolve => ui.controls[0].replace('如果你感到游戏较卡,可以开启流畅模式',resolve)); yield new Promise(resolve => ui.controls[0].replace('在技能一栏中,可以设置自动发动或双将禁配的技能',resolve)); ui.click.menuTab('武将'); yield new Promise(resolve => ui.controls[0].replace('在武将或卡牌一栏中,单击武将/卡牌可以将其禁用',resolve)); ui.click.menuTab('战局'); yield new Promise(resolve => ui.controls[0].replace('在战局中可以输入游戏命令,或者管理录像',resolve)); ui.click.menuTab('帮助'); yield new Promise(resolve => ui.controls[0].replace('在帮助中,可以检查更新和下载素材',resolve)); ui.click.configMenu(); ui.window.classList.remove('noclick_important'); ui.control.classList.remove('noclick_click_important'); ui.control.style.top=''; step5(); }); var step5=function(){ clear(); ui.create.dialog('如果还有其它问题,欢迎来到百度无名杀吧进行交流'); ui.create.control('完成',function(){ clear(); clear2(); game.resume(); }) }; game.pause(); step1(); } else{ if(!_status.connectMode){ game.showChangeLog(); } } "step 3" if(typeof _status.new_tutorial=='function'){ _status.new_tutorial(); } delete _status.new_tutorial; if(_status.connectMode){ game.waitForPlayer(function(){ if(lib.configOL.identity_mode=='zhong'||lib.configOL.identity_mode=='purple'){ lib.configOL.number=8; } }); } "step 4" var yearLimitCheck=()=>{ var next=game.createEvent('year_limit_pop',false); next.setContent(function(){ 'step 0' var str=get.cnNumber(game.shuffleNumber+1,true); game.me.$fullscreenpop(`第${str}年`,'thunder'); game.log('游戏进入了',`#y第${str}年`); if(game.shuffleNumber+1<game.countPlayer2()) event.finish(); else game.delay(2); 'step 1' game.me.$fullscreenpop('年份已到','metal'); game.log('年份已到,主忠方判定为胜利'); game.delay(2); 'step 2' game.over(game.me.identity=='zhu'||game.me.identity=='zhong'||game.me.identity=='mingzhong'||(game.me.identity=='commoner'&&game.me.isIn())); }); }; if(_status.connectMode){ _status.mode=lib.configOL.identity_mode; if(_status.mode=='zhong'){ lib.configOL.number=8; if(lib.configOL.zhong_card){ event.replacePile(); } } else if(_status.mode=='purple'){ lib.configOL.number=8; } else if(_status.mode=='normal'){ if(lib.configOL.enable_commoner||lib.configOL.double_nei){ var identity=lib.configOL.enable_commoner?'commoner':'nei'; for(var i=1;i<lib.config.mode_config.identity.identity.length;i++){ var list=lib.config.mode_config.identity.identity[i]; var toReplace; if(list.filter(i=>i=='nei').length>=2) toReplace='nei'; else if(list.filter(i=>i=='zhong').length>list.filter(i=>i=='fan').length/2) toReplace='zhong'; else toReplace='fan'; list.remove(toReplace); list.push(identity); } game.broadcast(identityList=>lib.config.mode_config.identity.identity=identityList,lib.config.mode_config.identity.identity); } } if(lib.configOL.number<2){ lib.configOL.number=2; } if(_status.mode!='purple'&&lib.configOL.enable_year_limit){ lib.onwash.push(yearLimitCheck); } game.randomMapOL(); } else{ if(_status.mode=='normal'&&(get.config('enable_commoner')||get.config('double_nei'))){ var identity=get.config('enable_commoner')?'commoner':'nei'; for(var i=1;i<lib.config.mode_config.identity.identity.length;i++){ var list=lib.config.mode_config.identity.identity[i]; var toReplace; if(list.filter(i=>i=='nei').length>=2) toReplace='nei'; else if(list.filter(i=>i=='zhong').length>list.filter(i=>i=='fan').length/2) toReplace='zhong'; else toReplace='fan'; list.remove(toReplace); list.push(identity); } } if(_status.mode!='purple'&&get.config('enable_year_limit')){ lib.onwash.push(yearLimitCheck); } for(var i=0;i<game.players.length;i++){ game.players[i].getId(); } if(_status.brawl&&_status.brawl.chooseCharacterBefore){ _status.brawl.chooseCharacterBefore(); } game.chooseCharacter(); } "step 5" if(ui.coin){ _status.coinCoeff=get.coinCoeff([game.me.name]); } if(game.players.length==2){ game.showIdentity(true); var map={}; for(var i in lib.playerOL){ map[i]=lib.playerOL[i].identity; } game.broadcast(function(map){ for(var i in map){ lib.playerOL[i].identity=map[i]; lib.playerOL[i].setIdentity(); lib.playerOL[i].ai.shown=1; } },map); } else{ for(var i=0;i<game.players.length;i++){ game.players[i].ai.shown=0; } } var stratagemMode=_status.mode=='stratagem'; if(stratagemMode){ var beginner; if(_status.cheat_seat){ var seat=_status.cheat_seat.link; beginner=seat==0?game.me:game.players[game.players.length-seat]; if(!beginner) beginner=game.me; delete _status.cheat_seat; } else{ beginner=game.players[Math.floor(Math.random()*game.players.length)]; } event.beginner=beginner; var stratagemBroadcast=()=>{ _status.stratagemFuryMax=3; ui.css.stratagemCardStyle=lib.init.sheet([ '.card.stratagem-fury-glow:before{', 'opacity:0.2;', 'box-shadow:rgba(0,0,0,0.2) 0 0 0 1px,rgb(255,109,12) 0 0 5px,rgb(255,0,0) 0 0 10px;', 'background-color:yellow;', '-webkit-filter:blur(5px);', 'filter:blur(5px);', '}' ].join('')); }; game.broadcastAll(stratagemBroadcast); if(_status.connectMode&&!_status.postReconnect.stratagemReinit) _status.postReconnect.stratagemReinit=[stratagemBroadcast,{}]; for(var current of game.players){ if(current.identity=='zhu') current.addSkill('stratagem_monarchy'); if(current.identity=='fan') current.addSkill('stratagem_revitalization'); } } if(game.zhu==game.me&&game.zhu.identity!='zhu'&&_status.brawl&&_status.brawl.identityShown){ delete game.zhu; } else{ if(!stratagemMode) game.zhu.ai.shown=1; if(game.zhu2){ game.zhong=game.zhu; game.zhu=game.zhu2; delete game.zhu2; if(game.zhong.sex=='male'&&game.zhong.maxHp<=4){ game.zhong.addSkill('dongcha'); } else{ game.zhong.addSkill('sheshen'); } } var enhance_zhu=false; if(_status.connectMode){ enhance_zhu=(!['zhong','stratagem','purple'].includes(_status.mode)&&lib.configOL.enhance_zhu&&get.population('fan')>=3); } else{ enhance_zhu=(!['zhong','stratagem','purple'].includes(_status.mode)&&get.config('enhance_zhu')&&get.population('fan')>=3); } if(enhance_zhu){ var skill; switch(game.zhu.name){ case 'key_yuri':skill='buqu';break; case 'liubei':skill='jizhen';break; case 'dongzhuo':skill='hengzheng';break; case 'sunquan':skill='batu';break; case 'sp_zhangjiao':skill='tiangong';break; case 'liushan':skill='shengxi';break; case 'sunce':skill='ciqiu';break; case 're_sunben':skill='ciqiu';break; case 'yuanshao':skill='geju';break; case 're_caocao':skill='dangping';break; case 'caopi':skill='junxing';break; case 'liuxie':skill='moukui';break; default:skill='tianming';break; } game.broadcastAll(function(player,skill){ player.addSkill(skill); player.storage.enhance_zhu=skill; },game.zhu,skill); } } game.syncState(); event.trigger('gameStart'); var players=get.players(lib.sort.position); var info=[]; for(var i=0;i<players.length;i++){ var ifo={ name:players[i].name1, name2:players[i].name2, identity:players[i].identity }; if(stratagemMode){ ifo.translate=lib.translate[game.players[i].name]; ifo.isCamouflaged=players[i].ai.stratagemCamouflage; } info.push(ifo); } _status.videoInited=true; game.addVideo('init',null,info); if(stratagemMode){ game.addVideo('arrangeLib',null,{ skill:{ stratagem_fury:{ mark:true, marktext:'🔥', intro:{ name:'怒气', content:'当前怒气值:#', }, }, }, }); for(var i=0;i<game.players.length;i++){ //game.addVideo('markSkill',game.players[i],['stratagem_fury']); game.players[i].ai.shown=0; } game.stratagemCamouflage(); } "step 6" if(_status.mode!='stratagem') event.beginner=_status.firstAct2||game.zhong||game.zhu||_status.firstAct||game.me; game.gameDraw(event.beginner,function(player){ if(_status.mode=='purple'&&player.seatNum>5) return 5; return 4; }); if(_status.connectMode&&lib.configOL.change_card) game.replaceHandcards(game.players.slice(0)); "step 7" game.phaseLoop(event.beginner); }, game:{ canReplaceViewpoint:()=>true, getState:function(){ var state={}; for(var i in lib.playerOL){ var player=lib.playerOL[i]; state[i]={identity:player.identity}; if(player==game.zhu){ state[i].zhu=true; } if(player==game.zhong){ state[i].zhong=true; } if(player.isZhu){ state[i].isZhu=true; } if(player.special_identity){ state[i].special_identity=player.special_identity; } state[i].shown=player.ai.shown; //state[i].group=player.group; } return state; }, updateState:function(state){ for(var i in state){ var player=lib.playerOL[i]; if(player){ player.identity=state[i].identity; if(state[i].identity=='rZhu'||state[i].identity=='bZhu') game[state[i].identity]=player; if(state[i].special_identity){ player.special_identity=state[i].special_identity; if(player.node.dieidentity){ player.node.dieidentity.innerHTML=get.translation(state[i].special_identity); player.node.identity.firstChild.innerHTML=get.translation(state[i].special_identity+'_bg'); } } if(state[i].zhu){ game.zhu=player; } if(state[i].isZhu){ player.isZhu=true; } if(state[i].zhong){ game.zhong=player; } player.ai.shown=state[i].shown; //player.group=state[i].group; //player.node.name.dataset.nature=get.groupnature(player.group); } } }, getRoomInfo:function(uiintro){ uiintro.add('<div class="text chat">游戏模式:'+(lib.configOL.identity_mode=='zhong'?'明忠':'标准')); uiintro.add('<div class="text chat">双将模式:'+(lib.configOL.double_character?'开启':'关闭')); if(lib.configOL.identity_mode!='zhong'){ if(lib.configOL.identity_mode=='stratagem'){ uiintro.add('<div class="text chat">首轮强化:'+(lib.configOL.round_one_use_fury?'开启':'关闭')); } else if(lib.configOL.identity_mode!='purple'){ uiintro.add('<div class="text chat">双内奸:'+(lib.configOL.double_nei?'开启':'关闭')); if(lib.configOL.identity_mode!='stratagem'){ uiintro.add('<div class="text chat">加强主公:'+(lib.configOL.enhance_zhu?'开启':'关闭')); uiintro.add('<div class="text chat">平民身份:'+(lib.configOL.enable_commoner?'开启':'关闭')); } uiintro.add('<div class="text chat">年机制:'+(lib.configOL.enable_year_limit?'开启':'关闭')); } } else{ uiintro.add('<div class="text chat">卡牌替换:'+(lib.configOL.zhong_card?'开启':'关闭')); } var last=uiintro.add('<div class="text chat">出牌时限:'+lib.configOL.choose_timeout+'秒'); // uiintro.add('<div class="text chat">屏蔽弱将:'+(lib.configOL.ban_weak?'开启':'关闭')); // var last=uiintro.add('<div class="text chat">屏蔽强将:'+(lib.configOL.ban_strong?'开启':'关闭')); if(lib.configOL.banned.length){ last=uiintro.add('<div class="text chat">禁用武将:'+get.translation(lib.configOL.banned)); } if(lib.configOL.bannedcards.length){ last=uiintro.add('<div class="text chat">禁用卡牌:'+get.translation(lib.configOL.bannedcards)); } last.style.paddingBottom='8px'; }, getIdentityList:function(player){ if(player.identityShown) return; if(player==game.me) return; if(_status.mode=='purple'){ if(_status.yeconfirm&&['rNei','bNei'].includes(game.me.identity)&&['rNei','bNei'].includes(player.identity)) return; if(player.identity.slice(0,1)=='r') return { cai2:'猜', rZhong:'忠', rNei:'内', rYe:'野', } return { cai:'猜', bZhong:'忠', bNei:'内', bYe:'野', } } else if(_status.mode=='zhong'){ if(player.fanfixed) return; if(game.zhu&&game.zhu.isZhu){ return { fan:'反', zhong:'忠', nei:'内', cai:'猜', } } else{ return { fan:'反', zhong:'忠', nei:'内', zhu:'主', cai:'猜', } } } else if(_status.mode=='stratagem'){ if(game.zhu&&game.zhu.isZhu&&game.zhu.identityShown||game.me.identity=='zhu'){ return { fan:'反', zhong:'忠', nei:'内', enemy:'敌', friend:'友', cai:'猜', } } else{ return { fan:'反', zhong:'忠', nei:'内', zhu:'主', enemy:'敌', friend:'友', cai:'猜', } } } else{ if(get.config('enable_commoner')){ return { fan:'反', zhong:'忠', nei:'内', commoner:'民', cai:'猜', } } else{ return { fan:'反', zhong:'忠', nei:'内', cai:'猜', } } } }, getIdentityList2:function(list){ for(var i in list){ switch(i){ case 'fan':list[i]='反贼';break; case 'zhong':list[i]='忠臣';break; case 'nei':list[i]='内奸';break; case 'commoner':list[i]='平民'; break; case 'zhu':list[i]='主公';break; case 'enemy':list[i]='敌方';break; case 'friend':list[i]='友方';break; case 'cai':case 'cai2':list[i]='未知';break; case 'rZhong':case 'bZhong':list[i]='前锋';break; case 'rNei':case 'bNei':list[i]='细作';break; case 'rYe':case 'bYe':list[i]='野心家';break; } } }, getVideoName:function(){ var str=get.translation(game.me.name); if(game.me.name2){ str+='/'+get.translation(game.me.name2); } var str2; if(game.identityVideoName) str2=game.identityVideoName; else{ switch(_status.mode){ case 'purple':str2='3v3v2 - '+(game.me.identity.indexOf('r')==0?'暖色':'冷色')+lib.translate[game.me.identity+'2'];break; case 'zhong':str2='忠胆英杰 - '+lib.translate[game.me.identity+'2'];break; case 'stratagem':str2=get.cnNumber(get.playerNumber())+'人谋攻'+'-'+lib.translate[game.me.identity+'2'];break; default:str2=get.cnNumber(get.playerNumber())+'人'+get.translation(lib.config.mode)+' - '+lib.translate[game.me.identity+'2'] } } var name=[ str, str2, ]; return name; }, addRecord:function(bool){ if(typeof bool=='boolean'){ var data=lib.config.gameRecord.identity.data; var identity=game.me.identity; if(identity=='mingzhong'){ identity='zhong'; } if(!data[identity]){ data[identity]=[0,0]; } if(bool){ data[identity][0]++; } else{ data[identity][1]++; } var list=['zhu','zhong','nei','fan','commoner']; var str=''; for(var i=0;i<list.length;i++){ if(data[list[i]]){ str+=lib.translate[list[i]+'2']+':'+data[list[i]][0]+'胜'+' '+data[list[i]][1]+'负<br>'; } } lib.config.gameRecord.identity.str=str; game.saveConfig('gameRecord',lib.config.gameRecord); } }, showIdentity:function(me){ for(var i=0;i<game.players.length;i++){ // if(me===false&&game.players[i]==game.me) continue; game.players[i].node.identity.classList.remove('guessing'); game.players[i].identityShown=true; game.players[i].ai.shown=1; game.players[i].setIdentity(game.players[i].identity); if(game.players[i].special_identity){ game.players[i].node.identity.firstChild.innerHTML=get.translation(game.players[i].special_identity+'_bg'); } if(game.players[i].identity=='zhu'){ game.players[i].isZhu=true; } } if(_status.clickingidentity){ for(var i=0;i<_status.clickingidentity[1].length;i++){ _status.clickingidentity[1][i].delete(); _status.clickingidentity[1][i].style.transform=''; } delete _status.clickingidentity; } }, checkResult:function(){ var me=game.me._trueMe||game.me; if(_status.brawl&&_status.brawl.checkResult){ _status.brawl.checkResult(); return; } else if(_status.mode=='purple'){ var winner=[]; var loser=[]; var ye=game.filterPlayer(function(current){ return ['rYe','bYe'].includes(current.identity); },null,true); var red=game.filterPlayer(function(current){ return ['rZhu','rZhong','bNei'].includes(current.identity); },null,true); var blue=game.filterPlayer(function(current){ return ['bZhu','bZhong','rNei'].includes(current.identity); },null,true) game.countPlayer2(function(current){ switch(current.identity){ case 'rZhu': if(ye.length==0&&game.bZhu.isDead()) winner.push(current); if(current.isDead()) loser.push(current); break; case 'rZhong': case 'bNei': if(ye.length==0&&game.bZhu.isDead()) winner.push(current); if(game.rZhu.isDead()) loser.push(current); break; case 'bZhu': if(ye.length==0&&game.rZhu.isDead()) winner.push(current); if(current.isDead()) loser.push(current); break; case 'bZhong': case 'rNei': if(ye.length==0&&game.rZhu.isDead()) winner.push(current); if(game.bZhu.isDead()) loser.push(current); break; default: if(red.length+blue.length==0) winner.push(current); else if(game.rZhu.isDead()&&game.bZhu.isDead()) loser.push(current); break; } },true); var winner2=winner.slice(0); var loser2=loser.slice(0); for(var i=0;i<winner.length;i++){ if(winner[i].isDead()) winner.splice(i--,1); } for(var i=0;i<loser.length;i++){ if(loser[i].isDead()) loser.splice(i--,1); } if(winner.length>0||loser.length==game.players.length){ game.broadcastAll(function(winner,loser){ _status.winner=winner; _status.loser=loser; },winner,loser); if(loser.length==game.players.length){ game.showIdentity(); game.over('游戏平局'); } else if(winner2.includes(me)){ game.showIdentity(); if(loser2.includes(me)) game.over(false); else game.over(true); } else{ game.showIdentity(); game.over(false); } } return; } if(!game.zhu){ if(get.population('fan')==0){ switch(me.identity){ case 'fan':game.over(false);break; case 'zhong':game.over(true);break; case 'commoner':game.over(true); break; default:game.over();break; } } else if(get.population('zhong')==0){ switch(me.identity){ case 'fan':game.over(true);break; case 'zhong':game.over(false);break; case 'commoner':game.over(true); break; default:game.over();break; } } return; } if(game.zhu.isAlive()&&get.population('fan')+get.population('nei')>0) return; if(game.zhong){ game.zhong.identity='zhong'; } game.showIdentity(); if(me.identity=='zhu'||me.identity=='zhong'||me.identity=='mingzhong'){ if(game.zhu.classList.contains('dead')){ game.over(false); } else{ game.over(true); } } else if(me.identity=='nei'){ if(game.players.length==(1+game.players.filter(i=>i.identity=='commoner').length)&&me.isAlive()){ game.over(true); } else{ game.over(false); } } else if(me.identity=='fan'){ if((get.population('fan')+get.population('zhong')>0||get.population('nei')>1)&& game.zhu.classList.contains('dead')){ game.over(true); } else{ game.over(false); } } else if(me.identity=='commoner'){ game.over(true); } }, checkOnlineResult:function(player){ if(_status.winner&&_status.loser){ if(_status.loser.length==game.players.length) return null; if(_status.loser.includes(player)) return false; if(_status.winner.includes(player)) return true; } if(game.zhu.isAlive()){ return (player.identity=='zhu'||player.identity=='zhong'||player.identity=='mingzhong'||player.identity=='commoner'&&player.isAlive()); } else if(game.players.length==(1+game.players.filter(i=>i.identity=='commoner').length)&&game.players[0].identity=='nei'||game.players[0].identity=='commoner'){ return player.isAlive(); } else{ return player.identity=='fan'||player.identity=='commoner'&&player.isAlive(); } }, chooseCharacterPurpleOL:function(){ var next=game.createEvent('chooseCharacter'); next.setContent(function(){ "step 0" ui.arena.classList.add('choose-character'); "step 1" var list=['rZhu','rZhong','rNei','rYe']; var list2=['bZhu','bZhong','bNei','bYe']; list.randomSort(); list2.randomSort(); var identityList=list.concat(list2); var num=get.rand(0,7); var players=game.players.slice(0); for(var i=0;i<num;i++){ players.push(players.shift()); } game.broadcastAll(function(players,identityList,list){ _status.mode='purple'; if(game.online) ui.arena.classList.add('choose-character'); for(var i=0;i<players.length;i++){ players[i].node.identity.classList.add('guessing'); players[i].identity=identityList[i]; players[i].setIdentity(list.includes(identityList[i])?'cai2':'cai'); if(['rZhu','bZhu'].includes(identityList[i])){ game[identityList[i]]=players[i]; players[i].setIdentity(identityList[i]); players[i].identityShown=true; players[i].node.identity.classList.remove('guessing'); } } game.zhu=game.rZhu; game.rZhu.isZhu=true; game.bZhu.isZhu=true; game.me.setIdentity(); game.me.node.identity.classList.remove('guessing'); },players,identityList,list); players.sortBySeat(game.zhu); for(var i=0;i<players.length;i++){ players[i].seatNum=i; } "step 2" var map={}; var map_zhu={}; event.mapNum={}; var list=[]; var libCharacter={}; for(var i=0;i<lib.configOL.characterPack.length;i++){ var pack=lib.characterPack[lib.configOL.characterPack[i]]; for(var j in pack){ // if(j=='zuoci') continue; if(lib.character[j]) libCharacter[j]=pack[j]; } } for(var i in libCharacter){ if(lib.filter.characterDisabled(i,libCharacter)) continue; if(i.indexOf('lingju')!=-1||get.is.double(i)) continue; var group=lib.character[i][1]; if(group=='shen') continue; if(!map[group]){ map[group]=[]; list.push(group); } map[group].push(i); if(lib.character[i][4]&&lib.character[i][4].includes('zhu')){ if(!map_zhu[group]){ map_zhu[group]=[]; } map_zhu[group].push(i); } } for(var i in map){ if(map[i].length<12){ delete map[i]; list.remove(i); } else event.mapNum[i]=map[i].length>15?5:3; } list.sort(function(a,b){ return lib.group.indexOf(a)-lib.group.indexOf(b); }); event.list=list; event.map=map; event.map_zhu=map_zhu; game.bZhu.chooseControl(list).set('prompt','请选择冷方武将势力').set('ai',function(){ return _status.event.choice; }).set('choice',event.list.randomGet()); "step 3" event.bZhu=result.control; event.list.remove(event.bZhu); game.rZhu.chooseControl(event.list).set('prompt','请选择暖方武将的势力').set('ai',function(){ return _status.event.choice; }).set('choice',event.list.randomGet()); "step 4" event.rZhu=result.control; var players=[game.rZhu,game.bZhu]; var list=[]; for(var i=0;i<players.length;i++){ var group=event[players[i].identity]; var str='选择角色'; var list2=event.map[group].randomGets(4); if(event.map_zhu[group]) list2.addArray(event.map_zhu[group].randomGets(2)); event.map[players[i].playerid]=list2; list.push([players[i],[str,[list2,'character']],true]); } game.me.chooseButtonOL(list,function(player,result){ if(game.online||player==game.me){ player.init(result.links[0]); if(!player.isInitFilter('noZhuHp')){ player.hp++; player.maxHp++; player.update(); } } }); "step 5" for(var i in result){ if(result[i]=='ai'||!result[i]||!result[i].links){ result[i]=event.map[i].randomGet(); } else{ result[i]=result[i].links } var group=lib.character[result[i][0]][1]; event.map[group].remove(result[i][0]); if(!lib.playerOL[i].name){ lib.playerOL[i].init(result[i][0]); } } game.broadcast(function(result){ for(var i in result){ if(!lib.playerOL[i].name){ lib.playerOL[i].init(result[i][0],result[i][1]); if(!lib.playerOL[i].isInitFilter('noZhuHp')){ lib.playerOL[i].hp++; lib.playerOL[i].maxHp++; lib.playerOL[i].update(); } } } },result); var list=[]; var players=game.players.slice(0); players.removeArray([game.rZhu,game.bZhu]); for(var i=0;i<players.length;i++){ var group=event[players[i].identity.slice(0,1)+'Zhu']; var str='选择角色'; var list2=event.map[group].randomRemove(event.mapNum[group]); event.map[players[i].playerid]=list2; list.push([players[i],[str,[list2,'character']],true]); } game.me.chooseButtonOL(list,function(player,result){ if(game.online||player==game.me){ player.init(result.links[0]); } }); "step 6" for(var i in result){ if(result[i]=='ai'||!result[i]||!result[i].links){ result[i]=event.map[i].randomGet(); } else{ result[i]=result[i].links } var group=lib.character[result[i][0]][1]; event.map[group].remove(result[i][0]); if(!lib.playerOL[i].name){ lib.playerOL[i].init(result[i][0]); } } game.broadcast(function(result){ for(var i in result){ if(!lib.playerOL[i].name){ lib.playerOL[i].init(result[i][0],result[i][1]); } } setTimeout(function(){ ui.arena.classList.remove('choose-character'); },500); },result); setTimeout(function(){ ui.arena.classList.remove('choose-character'); },500); }); }, chooseCharacterPurple:function(){ var next=game.createEvent('chooseCharacter'); next.setContent(function(){ "step 0" ui.arena.classList.add('choose-character'); game.no_continue_game=true; lib.init.onfree(); "step 1" var list=['rZhu','rZhong','rNei','rYe']; var list2=['bZhu','bZhong','bNei','bYe']; list.randomSort(); list2.randomSort(); var identityList=list.concat(list2); var num=get.rand(0,7); var players=game.players.slice(0); for(var i=0;i<num;i++){ players.push(players.shift()); } for(var i=0;i<players.length;i++){ players[i].node.identity.classList.add('guessing'); players[i].identity=identityList[i]; players[i].setIdentity(list.includes(identityList[i])?'cai2':'cai'); if(['rZhu','bZhu'].includes(identityList[i])){ game[identityList[i]]=players[i]; players[i].setIdentity(identityList[i]); players[i].identityShown=true; players[i].node.identity.classList.remove('guessing'); } } game.zhu=game.rZhu; game.rZhu.isZhu=true; game.bZhu.isZhu=true; game.me.setIdentity(); game.me.node.identity.classList.remove('guessing'); players.sortBySeat(game.zhu); for(var i=0;i<players.length;i++){ players[i].seatNum=i; } "step 2" var map={}; var map_zhu={}; var list=[]; for(var i in lib.character){ if(lib.filter.characterDisabled(i)) continue; if(i.indexOf('lingju')!=-1||get.is.double(i)) continue; var group=lib.character[i][1]; if(group=='shen') continue; if(!map[group]){ map[group]=[]; list.push(group); } map[group].push(i); if(lib.character[i][4]&&lib.character[i][4].includes('zhu')){ if(!map_zhu[group]){ map_zhu[group]=[]; } map_zhu[group].push(i); } } for(var i in map){ if(map[i].length<12){ delete map[i]; list.remove(i); } } list.sort(function(a,b){ return lib.group.indexOf(a)-lib.group.indexOf(b); }); event.list=list; event.map=map; event.map_zhu=map_zhu; game.bZhu.chooseControl(list).set('prompt','请选择冷方武将势力').set('ai',function(){ return _status.event.choice; }).set('choice',event.list.randomGet()); "step 3" event.bZhu=result.control; event.list.remove(event.bZhu); game.rZhu.chooseControl(event.list).set('prompt','请选择暖方武将的势力').set('ai',function(){ return _status.event.choice; }).set('choice',event.list.randomGet()); "step 4" event.rZhu=result.control; if(game.me==game.rZhu||game.me==game.bZhu){ event.isZhu=true; var list=event.map[event[game.me.identity]].randomGets(4); if(event.map_zhu[event[game.me.identity]]) list.addArray(event.map_zhu[event[game.me.identity]].randomGets(2)); game.me.chooseButton(true,['请选择您的武将牌',[list,'character']]); } "step 5" if(event.isZhu){ event.map[event[game.me.identity]].remove(result.links[0]); game.me.init(result.links[0]); } if(!game.rZhu.name){ var list=event.map[event.rZhu].randomGets(3); if(event.map_zhu[event.rZhu]) list.addArray(event.map_zhu[event.rZhu]); var character=list.randomGet(); event.map[event.rZhu].remove(character); game.rZhu.init(character); } if(!game.bZhu.name){ var list=event.map[event.bZhu].randomGets(4); if(event.map_zhu[event.bZhu]) list.addArray(event.map_zhu[event.bZhu].randomGets(2)); var character=list.randomGet(); event.map[event.bZhu].remove(character); game.bZhu.init(character); } if(!game.rZhu.isInitFilter('noZhuHp')){ game.rZhu.maxHp++; game.rZhu.hp++; game.rZhu.update(); } if(!game.bZhu.isInitFilter('noZhuHp')){ game.bZhu.maxHp++; game.bZhu.hp++; game.bZhu.update(); } if(!event.isZhu){ var group=game.me.identity.indexOf('r')==0?event.rZhu:event.bZhu; game.me.chooseButton(true,['请选择您的武将牌',[event.map[group].randomRemove(5),'character']]); } "step 6" if(!event.isZhu){ game.me.init(result.links[0]); } game.countPlayer(function(current){ if(!current.name){ var group=current.identity.indexOf('r')==0?event.rZhu:event.bZhu; current.init(event.map[group].randomRemove(1)[0]); } }); "step 7" setTimeout(function(){ ui.arena.classList.remove('choose-character'); },500); }); }, chooseCharacterStratagemOL:function(){ var next=game.createEvent('chooseCharacter'); next.setContent(function(){ 'step 0' ui.arena.classList.add('choose-character'); var i; var identityList=get.identityList(game.players.length); if(lib.configOL.double_nei){ switch(lib.configOL.number){ case 8: identityList.remove('fan'); identityList.push('nei'); break; case 7: identityList.remove('zhong'); identityList.push('nei'); break; case 6: identityList.remove('fan'); identityList.push('nei'); break; case 5: identityList.remove('fan'); identityList.push('nei'); break; case 4: identityList.remove('zhong'); identityList.push('nei'); break; case 3: identityList.remove('fan'); identityList.push('nei'); break; } } identityList.randomSort(); for(i=0;i<game.players.length;i++){ game.players[i].identity=identityList[i]; game.players[i].setIdentity('cai'); game.players[i].node.identity.classList.add('guessing'); if(identityList[i]=='zhu'){ game.zhu=game.players[i]; } game.players[i].identityShown=false; } game.zhu.isZhu=(game.zhu.identity=='zhu'); game.me.setIdentity(); game.me.node.identity.classList.remove('guessing'); for(var i=0;i<game.players.length;i++){ game.players[i].send(function(zhu,zhuid,me,identity){ for(var i in lib.playerOL){ lib.playerOL[i].setIdentity('cai'); lib.playerOL[i].node.identity.classList.add('guessing'); } zhu.identity=zhuid; if(zhuid=='zhu') zhu.isZhu=true; me.setIdentity(identity); me.node.identity.classList.remove('guessing'); ui.arena.classList.add('choose-character'); },game.zhu,game.zhu.identity,game.players[i],game.players[i].identity); } var list; var list3=[]; var list4=[]; event.list=[]; event.list2=[]; var libCharacter={}; for(var i=0;i<lib.configOL.characterPack.length;i++){ var pack=lib.characterPack[lib.configOL.characterPack[i]]; for(var j in pack){ if(lib.character[j]) libCharacter[j]=pack[j]; } } for(i in lib.characterReplace){ var ix=lib.characterReplace[i]; for(var j=0;j<ix.length;j++){ if(!libCharacter[ix[j]]||lib.filter.characterDisabled(ix[j])) ix.splice(j--,1); } if(ix.length){ event.list.push(i); event.list2.push(i); list4.addArray(ix); list3.push(i); } } game.broadcast(function(list){ for(var i in lib.characterReplace){ var ix=lib.characterReplace[i]; for(var j=0;j<ix.length;j++){ if(!list.includes(ix[j])) ix.splice(j--,1); } } },list4); for(i in libCharacter){ if(list4.includes(i)) continue; if(lib.filter.characterDisabled(i,libCharacter)) continue; event.list.push(i); event.list2.push(i); list4.push(i); list3.push(i); } _status.characterlist=list4.slice(0); list=list3.randomGets(5); "step 1" var list=[]; var selectButton=(lib.configOL.double_character?2:1); var num,num2=0; num=Math.floor(event.list.length/(game.players.length-1)); if(num>5){ num=5; } num2=event.list.length-num*(game.players.length-1); if(lib.configOL.double_nei){ num2=Math.floor(num2/2); } if(num2>2){ num2=2; } for(var i=0;i<game.players.length;i++){ var num3=0; if(game.players[i].identity=='nei'){ num3=num2; } var str='选择角色'; list.push([game.players[i],[str,[event.list.randomRemove(num+num3),'characterx']],selectButton,true]); } game.me.chooseButtonOL(list,function(player,result){ if(game.online||player==game.me) player.init(result.links[0],result.links[1]); }); 'step 2' var shen=[]; for(var i in result){ if(result[i]&&result[i].links){ for(var j=0;j<result[i].links.length;j++){ event.list2.remove(get.sourceCharacter(result[i].links[j])); } } } for(var i in result){ if(result[i]=='ai'){ result[i]=event.list2.randomRemove(lib.configOL.double_character?2:1); for(var j=0;j<result[i].length;j++){ var listx=lib.characterReplace[result[i][j]]; if(listx&&listx.length) result[i][j]=listx.randomGet(); } } else{ result[i]=result[i].links; } if(get.is.double(result[i][0])||lib.character[result[i][0]]&&lib.character[result[i][0]][1]=='shen'&&!lib.character[result[i][0]][4].includes('hiddenSkill')) shen.push(lib.playerOL[i]); } event.result2=result; if(shen.length){ var list=['wei','shu','wu','qun','jin','key']; for(var i=0;i<list.length;i++){ if(!lib.group.includes(list[i])) list.splice(i--,1); else list[i]=['','','group_'+list[i]]; } for(var i=0;i<shen.length;i++){ if(get.is.double(result[shen[i].playerid][0])){ shen[i]._groupChosen=true; shen[i]=[shen[i],['请选择你的势力',[get.is.double(result[shen[i].playerid][0],true).map(function(i){ return ['','','group_'+i]; }),'vcard']],1,true]; } else shen[i]=[shen[i],['请选择神武将的势力',[list,'vcard']],1,true]; } game.me.chooseButtonOL(shen,function(player,result){ if(player==game.me) player.changeGroup(result.links[0][2].slice(6),false,false); }).set('switchToAuto',function(){ _status.event.result='ai'; }).set('processAI',function(){ return { bool:true, links:[_status.event.dialog.buttons.randomGet().link], } }); } else event._result={}; 'step 3' if(!result) result={}; for(var i in result){ if(result[i]&&result[i].links) result[i]=result[i].links[0][2].slice(6); else if(result[i]=='ai') result[i]=function(){ return ['wei','shu','wu','qun','jin','key'].randomGet(); }(); } var result2=event.result2; game.broadcast(function(result,result2){ for(var i in result){ if(!lib.playerOL[i].name){ lib.playerOL[i].init(result[i][0],result[i][1]); } if(result2[i]&&result2[i].length) lib.playerOL[i].changeGroup(result2[i],false,false); } setTimeout(function(){ ui.arena.classList.remove('choose-character'); },500); },result2,result); for(var i in result2){ if(!lib.playerOL[i].name){ lib.playerOL[i].init(result2[i][0],result2[i][1]); } if(result[i]&&result[i].length) lib.playerOL[i].changeGroup(result[i],false,false); } for(var i=0;i<game.players.length;i++){ _status.characterlist.remove(game.players[i].name); _status.characterlist.remove(game.players[i].name1); _status.characterlist.remove(game.players[i].name2); } ['stratagem_gain','stratagem_insight','stratagem_expose'].forEach(globalSkill=>game.addGlobalSkill(globalSkill)); game.players.forEach(current=>{ current.storage.zhibi=[]; current.storage.stratagem_expose=[]; current.markSkill('stratagem_fury'); }); setTimeout(function(){ ui.arena.classList.remove('choose-character'); },500); }); }, chooseCharacter:function(){ if(_status.mode=='purple'){ game.chooseCharacterPurple(); return; } var next=game.createEvent('chooseCharacter'); next.showConfig=true; next.addPlayer=function(player){ var list=get.identityList(game.players.length-1); var list2=get.identityList(game.players.length); for(var i=0;i<list.length;i++) list2.remove(list[i]); player.identity=list2[0]; player.setIdentity('cai'); }; next.removePlayer=function(){ return game.players.randomGet(game.me,game.zhu); }; next.ai=function(player,list,list2,back){ if(_status.brawl&&_status.brawl.chooseCharacterAi){ if(_status.brawl.chooseCharacterAi(player,list,list2,back)!==false){ return; } } var stratagemMode=_status.event.stratagemMode; if(_status.event.zhongmode){ var listc=list.slice(0,2); for(var i=0;i<listc.length;i++){ var listx=lib.characterReplace[listc[i]]; if(listx&&listx.length) listc[i]=listx.randomGet(); } if(get.config('double_character')){ player.init(listc[0],listc[1]); } else{ player.init(listc[0]); } if(player.identity=='mingzhong'){ if(!player.isInitFilter('noZhuHp')){ player.hp++; player.maxHp++; player.update(); } } } else if(player.identity=='zhu'&&!stratagemMode){ list2.randomSort(); var choice,choice2; if(!_status.event.zhongmode&&Math.random()-0.8<0&&list2.length){ choice=list2[0]; choice2=list[0]; if(choice2==choice){ choice2=list[1]; } } else{ choice=list[0]; choice2=list[1]; } if(lib.characterReplace[choice]&&lib.characterReplace[choice].length) choice=lib.characterReplace[choice].randomGet(); if(lib.characterReplace[choice2]&&lib.characterReplace[choice2].length) choice2=lib.characterReplace[choice2].randomGet(); if(get.config('double_character')){ player.init(choice,choice2); } else{ player.init(choice); } if(game.players.length>4){ if(!player.isInitFilter('noZhuHp')){ player.hp++; player.maxHp++; player.update(); } } } else if(player.identity=='zhong'&&(Math.random()<0.5||['sunliang','key_akane'].includes(game.zhu.name))&&!stratagemMode){ var listc=list.slice(0); for(var i=0;i<listc.length;i++){ var listx=lib.characterReplace[listc[i]]; if(listx&&listx.length) listc[i]=listx.randomGet(); } var choice=0; for(var i=0;i<listc.length;i++){ if(lib.character[listc[i]][1]==game.zhu.group){ choice=i;break; } } if(get.config('double_character')){ player.init(listc[choice],listc[choice==0?choice+1:choice-1]); } else{ player.init(listc[choice]); } } else{ var listc=list.slice(0,2); for(var i=0;i<listc.length;i++){ var listx=lib.characterReplace[listc[i]]; if(listx&&listx.length) listc[i]=listx.randomGet(); } if(get.config('double_character')){ player.init(listc[0],listc[1]); } else{ player.init(listc[0]); } } if(back){ list.remove(get.sourceCharacter(player.name1)); list.remove(get.sourceCharacter(player.name2)); for(var i=0;i<list.length;i++){ back.push(list[i]); } } if(typeof lib.config.test_game=='string'&&player==game.me.next){ player.init(lib.config.test_game); } if(get.is.double(player.name1)){ player._groupChosen=true; player.group=get.is.double(player.name1,true).randomGet(); player.node.name.dataset.nature=get.groupnature(player.group); } else if(get.config('choose_group')&&player.group=='shen'&&!player.isUnseen(0)){ var list=lib.group.slice(0); list.remove('shen'); if(list.length) player.group=function(){ if(_status.mode!='zhong'&&game.zhu&&game.zhu.group){ if(['re_zhangjiao','liubei','re_liubei','caocao','re_caocao','sunquan','re_sunquan','zhangjiao','sp_zhangjiao','caopi','re_caopi','liuchen','caorui','sunliang','sunxiu','sunce','re_sunben','ol_liushan','re_liushan','key_akane','dongzhuo','re_dongzhuo','ol_dongzhuo','jin_simashi','caomao'].includes(game.zhu.name)) return game.zhu.group; if(game.zhu.name=='yl_yuanshu'){ if(player.identity=='zhong') list.remove('qun'); else return 'qun'; } if(['sunhao','xin_yuanshao','re_yuanshao','re_sunce','ol_yuanshao','yuanshu','jin_simazhao','liubian'].includes(game.zhu.name)){ if(player.identity!='zhong') list.remove(game.zhu.group); else return game.zhu.group; } } return list.randomGet(); }(); } player.node.name.dataset.nature=get.groupnature(player.group); } next.setContent(function(){ "step 0" ui.arena.classList.add('choose-character'); var i; var list; var list2=[]; var list3=[]; var list4=[]; var identityList; var chosen=lib.config.continue_name||[]; game.saveConfig('continue_name'); event.chosen=chosen; if(_status.mode=='zhong'){ event.zhongmode=true; identityList=['zhu','zhong','mingzhong','nei','fan','fan','fan','fan']; } else{ if(_status.mode=='stratagem') event.stratagemMode=true; identityList=get.identityList(game.players.length); } var stratagemMode=event.stratagemMode; var addSetting=function(dialog){ dialog.add('选择身份').classList.add('add-setting'); var table=document.createElement('div'); table.classList.add('add-setting'); table.style.margin='0'; table.style.width='100%'; table.style.position='relative'; var listi; if(event.zhongmode){ listi=['random','zhu','mingzhong','zhong','fan','nei']; } else{ listi=['random','zhu','zhong','fan','nei']; if(get.config('enable_commoner')&&!event.stratagemMode) listi.push('commoner'); } for(var i=0;i<listi.length;i++){ var td=ui.create.div('.shadowed.reduce_radius.pointerdiv.tdnode'); td.link=listi[i]; if(td.link===game.me.identity){ td.classList.add('bluebg'); } table.appendChild(td); td.innerHTML='<span>'+get.translation(listi[i]+'2')+'</span>'; td.addEventListener(lib.config.touchscreen?'touchend':'click',function(){ if(_status.dragged) return; if(_status.justdragged) return; _status.tempNoButton=true; setTimeout(function(){ _status.tempNoButton=false; },500); var link=this.link; if(game.zhu){ if(link!='random'){ _status.event.parent.fixedseat=get.distance(game.me,game.zhu,'absolute'); } if(game.zhu.name) game.zhu.uninit(); delete game.zhu.isZhu; delete game.zhu.identityShown; } var current=this.parentNode.querySelector('.bluebg'); if(current){ current.classList.remove('bluebg'); } current=_status.cheat_seat||seats.querySelector('.bluebg'); if(current){ current.classList.remove('bluebg'); } if(link=='random'){ if(event.zhongmode){ link=['zhu','zhong','nei','fan','mingzhong'].randomGet(); } else{ var listi=['zhu','zhong','nei','fan']; if(get.config('enable_commoner')&&!event.stratagemMode) listi.push('commoner'); link=listi.randomGet(); } for(var i=0;i<this.parentNode.childElementCount;i++){ if(this.parentNode.childNodes[i].link==link){ this.parentNode.childNodes[i].classList.add('bluebg'); } } } else{ this.classList.add('bluebg'); } num=get.config('choice_'+link); if(event.zhongmode){ num=6; if(link=='zhu'||link=='nei'||link=='mingzhong'){ num=8; } } _status.event.parent.swapnodialog=function(dialog,list){ var buttons=ui.create.div('.buttons'); var node=dialog.buttons[0].parentNode; dialog.buttons=ui.create.buttons(list,'characterx',buttons); dialog.content.insertBefore(buttons,node); buttons.addTempClass('start'); node.remove(); game.uncheck(); game.check(); if(event.stratagemMode) return; for(var i=0;i<seats.childElementCount;i++){ if(get.distance(game.zhu,game.me,'absolute')===seats.childNodes[i].link){ seats.childNodes[i].classList.add('bluebg'); } } } _status.event=_status.event.parent; _status.event.step=0; _status.event.identity=link; if(!event.stratagemMode){ if(link!=(event.zhongmode?'mingzhong':'zhu')){ seats.previousSibling.style.display=''; seats.style.display=''; } else{ seats.previousSibling.style.display='none'; seats.style.display='none'; } } game.resume(); }); } dialog.content.appendChild(table); dialog.add('选择座位').classList.add('add-setting'); var seats=document.createElement('div'); seats.classList.add('add-setting'); seats.style.margin='0'; seats.style.width='100%'; seats.style.position='relative'; for(var i=stratagemMode?1:2;i<=game.players.length;i++){ var td=ui.create.div('.shadowed.reduce_radius.pointerdiv.tdnode'); td.innerHTML=get.cnNumber(i,true); td.link=i-1; seats.appendChild(td); if(!stratagemMode&&get.distance(game.zhu,game.me,'absolute')===i-1){ td.classList.add('bluebg'); } 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; } } if(stratagemMode){ this.classList.add('bluebg'); _status.cheat_seat=this; } else{ if(get.distance(game.zhu,game.me,'absolute')==this.link) return; var current=this.parentNode.querySelector('.bluebg'); if(current){ current.classList.remove('bluebg'); } this.classList.add('bluebg'); for(var i=0;i<game.players.length;i++){ if(get.distance(game.players[i],game.me,'absolute')==this.link){ game.swapSeat(game.zhu,game.players[i],false);return; } } } }); } dialog.content.appendChild(seats); if(!stratagemMode&&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; event.list=[]; identityList.randomSort(); if(event.identity){ identityList.remove(event.identity); identityList.unshift(event.identity); if(event.fixedseat){ var zhuIdentity=(_status.mode=='zhong')?'mingzhong':'zhu'; if(zhuIdentity!=event.identity){ identityList.remove(zhuIdentity); identityList.splice(event.fixedseat,0,zhuIdentity); } delete event.fixedseat; } delete event.identity; } else if(_status.mode!='zhong'&&(!_status.brawl||!_status.brawl.identityShown)){ var ban_identity=[]; ban_identity.push(get.config('ban_identity')||'off'); if(ban_identity[0]!='off'){ ban_identity.push(get.config('ban_identity2')||'off'); if(ban_identity[1]!='off'){ ban_identity.push(get.config('ban_identity3')||'off'); } } ban_identity.remove('off'); if(ban_identity.length){ var identityList2=identityList.slice(0); for(var i=0;i<ban_identity.length;i++){ while(identityList2.includes(ban_identity[i])){ identityList2.remove(ban_identity[i]); } } ban_identity=identityList2.randomGet(); identityList.remove(ban_identity); identityList.splice(game.players.indexOf(game.me),0,ban_identity); } } for(i=0;i<game.players.length;i++){ if(_status.brawl&&_status.brawl.identityShown){ if(game.players[i].identity=='zhu') game.zhu=game.players[i]; if(!stratagemMode) game.players[i].identityShown=true; } else{ game.players[i].node.identity.classList.add('guessing'); game.players[i].identity=identityList[i]; game.players[i].setIdentity('cai'); if(event.zhongmode){ if(identityList[i]=='mingzhong'){ game.zhu=game.players[i]; } else if(identityList[i]=='zhu'){ game.zhu2=game.players[i]; } } else{ if(identityList[i]=='zhu'){ game.zhu=game.players[i]; } } game.players[i].identityShown=false; } } if(get.config('special_identity')&&!event.zhongmode&&!event.stratagemMode&&game.players.length==8){ for(var i=0;i<game.players.length;i++){ delete game.players[i].special_identity; } event.special_identity=[]; var zhongs=game.filterPlayer(function(current){ return current.identity=='zhong'; }); var fans=game.filterPlayer(function(current){ return current.identity=='fan'; }); if(fans.length>=1){ fans.randomRemove().special_identity='identity_zeishou'; event.special_identity.push('identity_zeishou'); } if(zhongs.length>1){ zhongs.randomRemove().special_identity='identity_dajiang'; zhongs.randomRemove().special_identity='identity_junshi'; event.special_identity.push('identity_dajiang'); event.special_identity.push('identity_junshi'); } else if(zhongs.length==1){ if(Math.random()<0.5){ zhongs.randomRemove().special_identity='identity_dajiang'; event.special_identity.push('identity_dajiang'); } else{ zhongs.randomRemove().special_identity='identity_junshi'; event.special_identity.push('identity_junshi'); } } } if(!game.zhu) game.zhu=game.me; else{ if(!stratagemMode){ game.zhu.setIdentity(); game.zhu.identityShown=true; game.zhu.node.identity.classList.remove('guessing'); } game.zhu.isZhu=(game.zhu.identity=='zhu'); game.me.setIdentity(); game.me.node.identity.classList.remove('guessing'); } //选将框分配 for(i in lib.characterReplace){ var ix=lib.characterReplace[i]; for(var j=0;j<ix.length;j++){ if(chosen.includes(ix[j])||lib.filter.characterDisabled(ix[j])) ix.splice(j--,1); } if(ix.length){ event.list.push(i); list4.addArray(ix); if(stratagemMode){ list3.push(i); } else{ var bool=false; for(var j of ix){ if(lib.character[j][4]&&lib.character[j][4].includes('zhu')){ bool=true;break; } } (bool?list2:list3).push(i); } } } for(i in lib.character){ if(list4.includes(i)) continue; if(chosen.includes(i)) continue; if(lib.filter.characterDisabled(i)) continue; event.list.push(i); list4.push(i); if(!stratagemMode&&lib.character[i][4]&&lib.character[i][4].includes('zhu')){ list2.push(i); } else{ list3.push(i); } } var getZhuList=function(){ if(stratagemMode){ list2.sort(lib.sort.character); return list2; } var limit_zhu=get.config('limit_zhu'); if(!limit_zhu||limit_zhu=='off') return list2.slice(0).sort(lib.sort.character); if(limit_zhu!='group'){ var num=(parseInt(limit_zhu)||6); return list2.randomGets(num).sort(lib.sort.character); } var getGroup=function(name){ var characterReplace = lib.characterReplace[name]; if(characterReplace && characterReplace[0] && lib.character[characterReplace[0]]) return lib.character[characterReplace[0]][1]; return lib.character[name][1]; } var list2x=list2.slice(0); list2x.randomSort(); for(var i=0;i<list2x.length;i++){ for(var j=i+1;j<list2x.length;j++){ if(getGroup(list2x[i])==getGroup(list2x[j])){ list2x.splice(j--,1); } } } list2x.sort(lib.sort.character); return list2x; } event.list.randomSort(); _status.characterlist=list4.slice(0).randomSort(); list3.randomSort(); if(_status.brawl&&_status.brawl.chooseCharacterFilter){ _status.brawl.chooseCharacterFilter(event.list,getZhuList(),list3); } var num=get.config('choice_'+game.me.identity); if(event.zhongmode){ num=6; if(game.me.identity=='zhu'||game.me.identity=='nei'||game.me.identity=='mingzhong'){ num=8; } } if(stratagemMode){ list=event.list.slice(0,num); } else if(game.zhu!=game.me){ event.ai(game.zhu,event.list,getZhuList()) event.list.remove(get.sourceCharacter(game.zhu.name1)); event.list.remove(get.sourceCharacter(game.zhu.name2)); if(_status.brawl&&_status.brawl.chooseCharacter){ list=_status.brawl.chooseCharacter(event.list,num); if(list===false||list==='nozhu'){ list=event.list.slice(0,num); } } else{ list=event.list.slice(0,num); } } else{ if(_status.brawl&&_status.brawl.chooseCharacter){ list=_status.brawl.chooseCharacter(getZhuList(),list3,num); if(list===false){ if(event.zhongmode){ list=list3.slice(0,6); } else{ list=getZhuList().concat(list3.slice(0,num)); } } else if(list==='nozhu'){ list=event.list.slice(0,num); } } else{ if(event.zhongmode){ list=list3.slice(0,8); } else{ list=getZhuList().concat(list3.slice(0,num)); } } } delete event.swapnochoose; var dialog; if(event.swapnodialog){ dialog=ui.dialog; event.swapnodialog(dialog,list); delete event.swapnodialog; } else{ var str='选择角色'; if(_status.brawl&&_status.brawl.chooseCharacterStr){ str=_status.brawl.chooseCharacterStr; } dialog=ui.create.dialog(str,'hidden',[list,'characterx']); if(!_status.brawl||!_status.brawl.noAddSetting){ if(get.config('change_identity')){ addSetting(dialog); } } } if(game.me.special_identity){ dialog.setCaption('选择角色('+get.translation(game.me.special_identity)+')'); game.me.node.identity.firstChild.innerHTML=get.translation(game.me.special_identity+'_bg'); } else{ dialog.setCaption('选择角色'); game.me.setIdentity(); } if(!event.chosen.length){ game.me.chooseButton(dialog,true).set('onfree',true).selectButton=function(){ if(_status.brawl&&_status.brawl.doubleCharacter) return 2; return get.config('double_character')?2:1 }; } else{ lib.init.onfree(); } ui.create.cheat=function(){ _status.createControl=ui.cheat2; ui.cheat=ui.create.control('更换',function(){ if(ui.cheat2&&ui.cheat2.dialog==_status.event.dialog){ return; } if(game.changeCoin){ game.changeCoin(-3); } if(game.zhu!=game.me){ event.list.randomSort(); if(_status.brawl&&_status.brawl.chooseCharacter){ list=_status.brawl.chooseCharacter(event.list,num); if(list===false||list==='nozhu'){ list=event.list.slice(0,num); } } else{ list=event.list.slice(0,num); } } else{ getZhuList().sort(lib.sort.character); list3.randomSort(); if(_status.brawl&&_status.brawl.chooseCharacter){ list=_status.brawl.chooseCharacter(getZhuList(),list3,num); if(list===false){ if(event.zhongmode){ list=list3.slice(0,6); } else{ list=getZhuList().concat(list3.slice(0,num)); } } else if(list==='nozhu'){ event.list.randomSort(); list=event.list.slice(0,num); } } else{ if(event.zhongmode){ list=list3.slice(0,6); } else{ list=getZhuList().concat(list3.slice(0,num)); } } } var buttons=ui.create.div('.buttons'); var node=_status.event.dialog.buttons[0].parentNode; _status.event.dialog.buttons=ui.create.buttons(list,'characterx',buttons); _status.event.dialog.content.insertBefore(buttons,node); buttons.addTempClass('start'); node.remove(); game.uncheck(); game.check(); }); delete _status.createControl; }; if(lib.onfree){ lib.onfree.push(function(){ event.dialogxx=ui.create.characterDialog('heightset'); if(ui.cheat2){ ui.cheat2.addTempClass('controlpressdownx',500); ui.cheat2.classList.remove('disabled'); } }); } else{ event.dialogxx=ui.create.characterDialog('heightset'); } ui.create.cheat2=function(){ ui.cheat2=ui.create.control('自由选将',function(){ if(this.dialog==_status.event.dialog){ if(game.changeCoin){ game.changeCoin(50); } this.dialog.close(); _status.event.dialog=this.backup; this.backup.open(); delete this.backup; game.uncheck(); game.check(); if(ui.cheat){ ui.cheat.addTempClass('controlpressdownx',500); ui.cheat.classList.remove('disabled'); } } else{ if(game.changeCoin){ game.changeCoin(-10); } this.backup=_status.event.dialog; _status.event.dialog.close(); _status.event.dialog=_status.event.parent.dialogxx; this.dialog=_status.event.dialog; this.dialog.open(); game.uncheck(); game.check(); if(ui.cheat){ ui.cheat.classList.add('disabled'); } } }); if(lib.onfree){ ui.cheat2.classList.add('disabled'); } } if(!_status.brawl||!_status.brawl.chooseCharacterFixed){ if(!ui.cheat&&get.config('change_choice')) ui.create.cheat(); if(!ui.cheat2&&get.config('free_choose')) ui.create.cheat2(); } "step 1" if(ui.cheat){ ui.cheat.close(); delete ui.cheat; } if(ui.cheat2){ ui.cheat2.close(); delete ui.cheat2; } if(event.chosen.length){ event.choosed=event.chosen; } else if(event.modchosen){ if(event.modchosen[0]=='random') event.modchosen[0]=result.buttons[0].link; else event.modchosen[1]=result.buttons[0].link; event.choosed=event.modchosen; } else if(result.buttons.length==2){ event.choosed=[result.buttons[0].link,result.buttons[1].link]; game.addRecentCharacter(result.buttons[0].link,result.buttons[1].link); } else{ event.choosed=[result.buttons[0].link]; game.addRecentCharacter(result.buttons[0].link); } var name=event.choosed[0]; if(get.is.double(name)){ game.me._groupChosen=true; game.me.chooseControl(get.is.double(name,true)).set('prompt','请选择你的势力'); } else if(lib.character[name][1]=='shen'&&!lib.character[name][4].includes('hiddenSkill')&&get.config('choose_group')){ var list=lib.group.slice(0); list.remove('shen'); game.me.chooseControl(list).set('prompt','请选择神武将的势力'); } "step 2" event.group=result.control||false; if(event.choosed.length==2){ game.me.init(event.choosed[0],event.choosed[1]); } else{ game.me.init(event.choosed[0]); } event.list.remove(get.sourceCharacter(game.me.name1)); event.list.remove(get.sourceCharacter(game.me.name2)); if(!event.stratagemMode&&game.me==game.zhu&&game.players.length>4){ if(!game.me.isInitFilter('noZhuHp')){ game.me.hp++; game.me.maxHp++; game.me.update(); } } for(var i=0;i<game.players.length;i++){ if((event.stratagemMode||game.players[i]!=game.zhu)&&game.players[i]!=game.me){ event.list.randomSort(); event.ai(game.players[i],event.list.splice(0,get.config('choice_'+game.players[i].identity)),null,event.list) } } "step 3" if(event.group){ game.me.group=event.group; game.me.node.name.dataset.nature=get.groupnature(game.me.group); game.me.update(); } for(var i=0;i<game.players.length;i++){ _status.characterlist.remove(game.players[i].name); _status.characterlist.remove(game.players[i].name1); _status.characterlist.remove(game.players[i].name2); } "step 4" if(event.stratagemMode){ ['stratagem_gain','stratagem_insight','stratagem_expose'].forEach(globalSkill=>game.addGlobalSkill(globalSkill)); game.players.forEach(i=>{ i.storage.zhibi=[]; i.storage.stratagem_expose=[]; i.markSkill('stratagem_fury'); }); } setTimeout(function(){ ui.arena.classList.remove('choose-character'); },500); if(event.special_identity){ for(var i=0;i<event.special_identity.length;i++){ game.zhu.addSkill(event.special_identity[i]); } } }); }, chooseCharacterOL:function(){ if(_status.mode=='purple'){ game.chooseCharacterPurpleOL(); return; } else if(_status.mode=='stratagem'){ game.chooseCharacterStratagemOL(); return; } var next=game.createEvent('chooseCharacter'); next.setContent(function(){ "step 0" ui.arena.classList.add('choose-character'); var i; var identityList; if(_status.mode=='zhong'){ event.zhongmode=true; identityList=['zhu','zhong','mingzhong','nei','fan','fan','fan','fan']; } else{ identityList=get.identityList(game.players.length); } identityList.randomSort(); for(i=0;i<game.players.length;i++){ game.players[i].identity=identityList[i]; game.players[i].setIdentity('cai'); game.players[i].node.identity.classList.add('guessing'); if(event.zhongmode){ if(identityList[i]=='mingzhong'){ game.zhu=game.players[i]; } else if(identityList[i]=='zhu'){ game.zhu2=game.players[i]; } } else{ if(identityList[i]=='zhu'){ game.zhu=game.players[i]; } } game.players[i].identityShown=false; } if(lib.configOL.special_identity&&!event.zhongmode&&game.players.length==8){ var map={}; var zhongs=game.filterPlayer(function(current){ return current.identity=='zhong'; }); var fans=game.filterPlayer(function(current){ return current.identity=='fan'; }); if(fans.length>=1){ map.identity_zeishou=fans.randomRemove(); } if(zhongs.length>1){ map.identity_dajiang=zhongs.randomRemove(); map.identity_junshi=zhongs.randomRemove(); } else if(zhongs.length==1){ if(Math.random()<0.5){ map.identity_dajiang=zhongs.randomRemove(); } else{ map.identity_junshi=zhongs.randomRemove(); } } game.broadcastAll(function(zhu,map){ for(var i in map){ map[i].special_identity=i; } },game.zhu,map); event.special_identity=map; } game.zhu.setIdentity(); game.zhu.identityShown=true; game.zhu.isZhu=(game.zhu.identity=='zhu'); game.zhu.node.identity.classList.remove('guessing'); game.me.setIdentity(); game.me.node.identity.classList.remove('guessing'); if(game.me.special_identity){ game.me.node.identity.firstChild.innerHTML=get.translation(game.me.special_identity+'_bg'); } for(var i=0;i<game.players.length;i++){ game.players[i].send(function(zhu,zhuid,me,identity){ for(var i in lib.playerOL){ lib.playerOL[i].setIdentity('cai'); lib.playerOL[i].node.identity.classList.add('guessing'); } zhu.identityShown=true; zhu.identity=zhuid; if(zhuid=='zhu') zhu.isZhu=true; zhu.setIdentity(); zhu.node.identity.classList.remove('guessing'); me.setIdentity(identity); me.node.identity.classList.remove('guessing'); if(me.special_identity){ me.node.identity.firstChild.innerHTML=get.translation(me.special_identity+'_bg'); } ui.arena.classList.add('choose-character'); },game.zhu,game.zhu.identity,game.players[i],game.players[i].identity); } var list; var list2=[]; var list3=[]; var list4=[]; event.list=[]; event.list2=[]; var libCharacter={}; for(var i=0;i<lib.configOL.characterPack.length;i++){ var pack=lib.characterPack[lib.configOL.characterPack[i]]; for(var j in pack){ // if(j=='zuoci') continue; if(lib.character[j]) libCharacter[j]=pack[j]; } } for(i in lib.characterReplace){ var ix=lib.characterReplace[i]; for(var j=0;j<ix.length;j++){ if(!libCharacter[ix[j]]||lib.filter.characterDisabled(ix[j])) ix.splice(j--,1); } if(ix.length){ event.list.push(i); event.list2.push(i); list4.addArray(ix); var bool=false; for(var j of ix){ if(libCharacter[j][4]&&libCharacter[j][4].includes('zhu')){ bool=true;break; } } (bool?list2:list3).push(i); } } game.broadcast(function(list){ for(var i in lib.characterReplace){ var ix=lib.characterReplace[i]; for(var j=0;j<ix.length;j++){ if(!list.includes(ix[j])) ix.splice(j--,1); } } },list4); for(i in libCharacter){ if(list4.includes(i)) continue; if(lib.filter.characterDisabled(i,libCharacter)) continue; event.list.push(i); event.list2.push(i); list4.push(i); if(libCharacter[i][4]&&libCharacter[i][4].includes('zhu')){ list2.push(i); } else{ list3.push(i); } } _status.characterlist=list4.slice(0); if(event.zhongmode){ list=event.list.randomGets(8); } else{ var getZhuList=function(list2){ var limit_zhu=lib.configOL.limit_zhu; if(!limit_zhu||limit_zhu=='off') return list2.slice(0).sort(lib.sort.character); if(limit_zhu!='group'){ var num=(parseInt(limit_zhu)||6); return list2.randomGets(num).sort(lib.sort.character); } var getGroup=function(name){ if(lib.characterReplace[name]) return lib.character[lib.characterReplace[name][0]][1]; return lib.character[name][1]; } var list2x=list2.slice(0); list2x.randomSort(); for(var i=0;i<list2x.length;i++){ for(var j=i+1;j<list2x.length;j++){ if(getGroup(list2x[i])==getGroup(list2x[j])){ list2x.splice(j--,1); } } } list2x.sort(lib.sort.character); return list2x; } list=getZhuList(list2).concat(list3.randomGets(5)); } var next=game.zhu.chooseButton(true); next.set('selectButton',(lib.configOL.double_character?2:1)); next.set('createDialog',['选择角色',[list,'characterx']]); next.set('ai',function(button){ return Math.random(); }); "step 1" if(!game.zhu.name){ game.zhu.init(result.links[0],result.links[1]) } event.list.remove(get.sourceCharacter(game.zhu.name1)); event.list.remove(get.sourceCharacter(game.zhu.name2)); event.list2.remove(get.sourceCharacter(game.zhu.name1)); event.list2.remove(get.sourceCharacter(game.zhu.name2)); if(game.players.length>4){ if(!game.zhu.isInitFilter('noZhuHp')){ game.zhu.maxHp++; game.zhu.hp++; game.zhu.update(); } } game.broadcast(function(zhu,name,name2,addMaxHp){ if(!zhu.name){ zhu.init(name,name2); } if(addMaxHp){ if(!zhu.isInitFilter('noZhuHp')){ zhu.maxHp++; zhu.hp++; zhu.update(); } } },game.zhu,result.links[0],result.links[1],game.players.length>4); if(game.zhu.group=='shen'&&!game.zhu.isUnseen(0)){ var list=['wei','shu','wu','qun','jin','key']; for(var i=0;i<list.length;i++){ if(!lib.group.includes(list[i])) list.splice(i--,1); else list[i]=['','','group_'+list[i]]; } game.zhu.chooseButton(['请选择神武将的势力',[list,'vcard']],true).set('ai',function(){ return Math.random(); }); } else if(get.is.double(game.zhu.name1)){ game.zhu._groupChosen=true; var list=get.is.double(game.zhu.name1,true); for(var i=0;i<list.length;i++){ if(!lib.group.includes(list[i])) list.splice(i--,1); else list[i]=['','','group_'+list[i]]; } game.zhu.chooseButton(['请选择你的势力',[list,'vcard']],true).set('ai',function(){ return Math.random(); }); } else event.goto(3); "step 2" var name=result.links[0][2].slice(6); game.zhu.changeGroup(name); "step 3" var list=[]; var selectButton=(lib.configOL.double_character?2:1); var num,num2=0; if(event.zhongmode){ num=6; } else{ num=Math.floor(event.list.length/(game.players.length-1)); if(num>5){ num=5; } num2=event.list.length-num*(game.players.length-1); if(lib.configOL.double_nei){ num2=Math.floor(num2/2); } if(num2>2){ num2=2; } } for(var i=0;i<game.players.length;i++){ if(game.players[i]!=game.zhu){ var num3=0; if(event.zhongmode){ if(game.players[i].identity=='nei'||game.players[i].identity=='zhu'){ num3=2; } } else{ if(game.players[i].identity=='nei'){ num3=num2; } } var str='选择角色'; if(game.players[i].special_identity){ str+='('+get.translation(game.players[i].special_identity)+')'; } list.push([game.players[i],[str,[event.list.randomRemove(num+num3),'characterx']],selectButton,true]); } } game.me.chooseButtonOL(list,function(player,result){ if(game.online||player==game.me) player.init(result.links[0],result.links[1]); }); "step 4" var shen=[]; for(var i in result){ if(result[i]&&result[i].links){ for(var j=0;j<result[i].links.length;j++){ event.list2.remove(get.sourceCharacter(result[i].links[j])); } } } for(var i in result){ if(result[i]=='ai'){ result[i]=event.list2.randomRemove(lib.configOL.double_character?2:1); for(var j=0;j<result[i].length;j++){ var listx=lib.characterReplace[result[i][j]]; if(listx&&listx.length) result[i][j]=listx.randomGet(); } } else{ result[i]=result[i].links; } if(get.is.double(result[i][0])|| lib.character[result[i][0]]&&lib.character[result[i][0]][1]=='shen'&&!lib.character[result[i][0]][4].includes('hiddenSkill')) shen.push(lib.playerOL[i]); } event.result2=result; if(shen.length){ var list=['wei','shu','wu','qun','jin','key']; for(var i=0;i<list.length;i++){ if(!lib.group.includes(list[i])) list.splice(i--,1); else list[i]=['','','group_'+list[i]]; } for(var i=0;i<shen.length;i++){ if(get.is.double(result[shen[i].playerid][0])){ shen[i]._groupChosen=true; shen[i]=[shen[i],['请选择你的势力',[get.is.double(result[shen[i].playerid][0],true).map(function(i){ return ['','','group_'+i]; }),'vcard']],1,true]; } else shen[i]=[shen[i],['请选择神武将的势力',[list,'vcard']],1,true]; } game.me.chooseButtonOL(shen,function(player,result){ if(player==game.me) player.changeGroup(result.links[0][2].slice(6),false,false); }).set('switchToAuto',function(){ _status.event.result='ai'; }).set('processAI',function(){ return { bool:true, links:[_status.event.dialog.buttons.randomGet().link], } }); } else event._result={}; "step 5" if(!result) result={}; for(var i in result){ if(result[i]&&result[i].links) result[i]=result[i].links[0][2].slice(6); else if(result[i]=='ai') result[i]=function(){ var player=lib.playerOL[i]; var list=['wei','shu','wu','qun','jin','key']; for(var ix=0;ix<list.length;ix++){ if(!lib.group.includes(list[ix])) list.splice(ix--,1); } if(_status.mode!='zhong'&&game.zhu&&game.zhu.group){ if(['re_zhangjiao','liubei','re_liubei','caocao','re_caocao','sunquan','re_sunquan','zhangjiao','sp_zhangjiao','caopi','re_caopi','liuchen','caorui','sunliang','sunxiu','sunce','re_sunben','ol_liushan','re_liushan','key_akane','dongzhuo','re_dongzhuo','ol_dongzhuo','jin_simashi','caomao'].includes(game.zhu.name)) return game.zhu.group; if(game.zhu.name=='yl_yuanshu'){ if(player.identity=='zhong') list.remove('qun'); else return 'qun'; } if(['sunhao','xin_yuanshao','re_yuanshao','re_sunce','ol_yuanshao','yuanshu','jin_simazhao','liubian'].includes(game.zhu.name)){ if(player.identity!='zhong') list.remove(game.zhu.group); else return game.zhu.group; } } return list.randomGet(); }(); } var result2=event.result2; game.broadcast(function(result,result2){ for(var i in result){ if(!lib.playerOL[i].name){ lib.playerOL[i].init(result[i][0],result[i][1]); } if(result2[i]&&result2[i].length) lib.playerOL[i].changeGroup(result2[i],false,false); } setTimeout(function(){ ui.arena.classList.remove('choose-character'); },500); },result2,result); for(var i in result2){ if(!lib.playerOL[i].name){ lib.playerOL[i].init(result2[i][0],result2[i][1]); } if(result[i]&&result[i].length) lib.playerOL[i].changeGroup(result[i],false,false); } if(event.special_identity){ for(var i in event.special_identity){ game.zhu.addSkill(i); } } for(var i=0;i<game.players.length;i++){ _status.characterlist.remove(game.players[i].name); _status.characterlist.remove(game.players[i].name1); _status.characterlist.remove(game.players[i].name2); } setTimeout(function(){ ui.arena.classList.remove('choose-character'); },500); }); }, stratagemCamouflage:function(){ var next=game.createEvent('stratagemCamouflage'); next.players=game.players.slice(); if(_status.connectMode){ next.setContent('stratagemCamouflageOL'); } else{ next.setContent('stratagemCamouflage'); } }, }, translate:{ zhu:"主", zhong:"忠", mingzhong:"忠", nei:"内", fan:"反", commoner:'民', cai:"猜", cai2:"猜", rZhu:"主", rZhong:"忠", rNei:"内", rYe:"野", rZhu2:"主帅", rZhong2:"前锋", rNei2:"细作", rYe2:"野心家", bZhu:"主", bZhong:"忠", bNei:"内", bYe:"野", bZhu2:"主帅", bZhong2:"前锋", bNei2:"细作", bYe2:"野心家", zhu2:"主公", zhong2:"忠臣", mingzhong2:"明忠", nei2:"内奸", fan2:"反贼", commoner2:'平民', random2:"随机", enemy:'敌', friend:'友', enemy2:'敌方', friend2:'友方', identity_junshi_bg:'师', identity_dajiang_bg:'将', identity_zeishou_bg:'首', identity_junshi:'军师', identity_dajiang:'大将', identity_zeishou:'贼首', ai_strategy_1:'均衡', ai_strategy_2:'偏反', ai_strategy_3:'偏主', ai_strategy_4:'酱油', ai_strategy_5:'天使', ai_strategy_6:'仇主', dongcha:'洞察', dongcha_info:'游戏开始时,随机一名反贼的身份对你可见;准备阶段,你可以弃置场上的一张牌。', sheshen:'舍身', sheshen_info:'锁定技,主公处于濒死状态即将死亡时,令主公+1体力上限,回复体力至X点(X为你的体力值数),获得你的所有牌,然后你死亡。', yexinbilu:'野心毕露', stratagem_insight:'洞察' }, element:{ player:{ insightInto:function(target){ var next=game.createEvent('stratagemInsight'); next.player=this; next.target=target; next.setContent('stratagemInsight'); return next; }, addExpose:function(num){ if(!game.zhu||!game.zhu.isZhu||!game.zhu.identityShown) return; if(typeof this.ai.shown=='number'&&!this.identityShown&&this.ai.shown<1){ this.ai.shown+=num; if(this.ai.shown>0.95){ this.ai.shown=0.95; } } return this; }, yexinbilu:function(){ game.broadcastAll(function(player){ player.showIdentity(); },this); this.gainMaxHp(); this.recover(); }, $dieAfter:function(){ if(_status.video) return; if(!this.node.dieidentity){ var str; if(this.special_identity){ str=get.translation(this.special_identity); } else{ str=get.translation(this.identity+'2'); } var node=ui.create.div('.damage.dieidentity',str,this); if(str=='野心家'){ node.style.fontSize='40px'; } ui.refresh(node); node.style.opacity=1; this.node.dieidentity=node; } var trans=this.style.transform; if(trans){ if(trans.indexOf('rotateY')!=-1){ this.node.dieidentity.style.transform='rotateY(180deg)'; } else if(trans.indexOf('rotateX')!=-1){ this.node.dieidentity.style.transform='rotateX(180deg)'; } else{ this.node.dieidentity.style.transform=''; } } else{ this.node.dieidentity.style.transform=''; } }, dieAfter2:function(source){ if(_status.mode=='stratagem') return; if(_status.mode=='purple'){ if(source){ if(this.identity=='rZhu'||this.identity=='bZhu'){ if(this.identity.slice(0,1)!=source.identity.slice(0,1)) source.recover(); } else if(this.identity=='rZhong'||this.identity=='bZhong'){ if(this.identity.slice(0,1)!=source.identity.slice(0,1)) source.draw(2); else if(source.identity.indexOf('Zhu')==1) source.discard(source.getCards('h')); } else if(this.identity=='rNei'||this.identity=='bNei'){ if(this.identity.slice(0,1)==source.identity.slice(0,1)) source.draw(3); } } if(!_status.yeconfirm){ _status.yeconfirm=true; game.addGlobalSkill('yexinbilu'); game.broadcastAll(function(){ if(game.me.identity=='rYe'||game.me.identity=='bYe'){ var player=game.findPlayer(function(current){ return current!=game.me&&(current.identity=='bYe'||current.identity=='rYe'); }); if(player){ player.showIdentity(); } } }); } } if(this.identity=='fan'&&source) source.draw(3); else if(this.identity=='commoner'&&source) source.draw(2); else if(this.identity=='mingzhong'&&source){ if(source.identity=='zhu'){ source.discard(source.getCards('he')); } else{ source.draw(3); } } else if(this.identity=='zhong'&&source&&source.identity=='zhu'&&source.isZhu){ source.discard(source.getCards('he')); } }, dieAfter:function(source){ if(!this.identityShown){ game.broadcastAll(function(player,identity,identity2){ player.setIdentity(player.identity); player.identityShown=true; player.node.identity.classList.remove('guessing'); if(identity){ player.node.identity.firstChild.innerHTML=get.translation(identity+'_bg'); game.log(player,'的身份是','#g'+get.translation(identity)); } else{ game.log(player,'的身份是','#g'+get.translation(identity2+'2')); } },this,this.special_identity,this.identity); } if(this.special_identity){ game.broadcastAll(function(zhu,identity){ zhu.removeSkill(identity); },game.zhu,this.special_identity); } game.checkResult(); if(_status.mode=='purple'){ var red=[]; var blue=[]; game.countPlayer(function(current){ var identity=current.identity.slice(1); if(identity!='Zhu'){ if(current.identity.indexOf('r')==0) red.push(current); else blue.push(current); } }); if(red.length<=1&&blue.length<=1) game.broadcastAll(game.showIdentity); return; } if(game.zhu&&game.zhu.isZhu){ if((get.population('zhong')+get.population('nei')==0|| get.population('zhong')+get.population('fan')==0)&&get.population('commoner')==0){ game.broadcastAll(function(){ if(game.showIdentity) game.showIdentity(); if(game.zhu&&game.zhu.isAlive()&&get.population('nei')==1&&get.config('nei_fullscreenpop')) game.me.$fullscreenpop('<span style="font-family:xinwei"><span data-nature="fire">主公</span><span data-nature="soil"> vs </span><span data-nature="thunder">内奸</span></span>',null,null,false); }); } } if(game.zhu&&game.zhu.storage.enhance_zhu&&get.population('fan')<3){ game.zhu.removeSkill(game.zhu.storage.enhance_zhu); delete game.zhu.storage.enhance_zhu; } if(this==game.zhong){ game.broadcastAll(function(player){ game.zhu=player; game.zhu.identityShown=true; game.zhu.ai.shown=1; game.zhu.setIdentity(); game.zhu.isZhu=true; var skills=player.getStockSkills(true,true).filter(skill=>{ if(player.hasSkill(skill)) return false; var info=get.info(skill); return info&&info.zhuSkill; }); if(skills.length){ player.addSkills(skills); } game.zhu.node.identity.classList.remove('guessing'); if(lib.config.animation&&!lib.config.low_performance) game.zhu.$legend(); delete game.zhong; if(_status.clickingidentity&&_status.clickingidentity[0]==game.zhu){ for(var i=0;i<_status.clickingidentity[1].length;i++){ _status.clickingidentity[1][i].delete(); _status.clickingidentity[1][i].style.transform=''; } delete _status.clickingidentity; } },game.zhu); game.delay(2); game.zhu.playerfocus(1000); } if(!_status.over){ var giveup; if(get.population('fan')+get.population('nei')==1){ for(var i=0;i<game.players.length;i++){ if(game.players[i].identity=='fan'||game.players[i].identity=='nei'){ giveup=game.players[i];break; } } } else if(get.population('zhong')+get.population('mingzhong')+get.population('nei')==0){ giveup=game.zhu; } if(giveup){ giveup.showGiveup(); } } }, logAi:function(targets,card){ if(this.ai.shown==1||this.isMad()) return; var stratagemMode=get.mode()=='identity'&&_status.mode=='stratagem'; if(stratagemMode&&(!game.zhu||!game.zhu.isZhu||!game.zhu.identityShown)) 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'&&card.name=='wuxie'){ const infomap=_status.event._info_map; if(infomap){ if(this!=infomap.target&&infomap.player&&infomap.player.ai.shown){ this.ai.shown+=0.2; } } } else{ this.ai.shown+=info.ai.expose; } } if(targets.length>0){ for(var i=0;i<targets.length;i++){ shown=Math.abs(targets[i].ai.shown); if(shown<0.2||targets[i].identity=='nei') c=0; else if(shown<0.4) c=0.5; else if(shown<0.6) c=0.8; else c=1; var eff=get.effect(targets[i],card,this); effect+=eff*c; if(eff==0&&shown==0&&['zhong','rZhong','bZhong'].includes(this.identity)&&targets[i]!=this){ effect+=0.1; } } } if(effect>0){ 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; } else if(effect<0&&this==game.me&&['nei','commoner','rYe','bYe'].includes(game.me.identity)){ if(targets.length==1&&targets[0]==this); else if(targets.length==1) this.ai.shown-=0.2; else this.ai.shown-=0.1; } } if(!stratagemMode&&this!=game.me) this.ai.shown*=2; if(this.ai.shown>0.95) this.ai.shown=0.95; if(this.ai.shown<-0.5) this.ai.shown=-0.5; if(_status.mode=='purple') return; if(stratagemMode) return; var marknow=(!_status.connectMode&&this!=game.me&&get.config('auto_mark_identity')&&this.ai.identity_mark!='finished'); // if(true){ if(marknow&&_status.clickingidentity&&_status.clickingidentity[0]==this){ for(var i=0;i<_status.clickingidentity[1].length;i++){ _status.clickingidentity[1][i].delete(); _status.clickingidentity[1][i].style.transform=''; } delete _status.clickingidentity; } if(!Array.isArray(targets)){ targets=[]; } var effect=0,c,shown; var zhu=game.zhu; if(_status.mode=='zhong'&&!game.zhu.isZhu){ zhu=game.zhong; } if(targets.length==1&&targets[0]==this){ effect=0; } else if(this.identity!='nei'&&this.identity!='commoner'){ if(this.ai.shown>0){ if(this.identity=='fan'){ effect=-1; } else{ effect=1; } } } else if(targets.length>0){ for(var i=0;i<targets.length;i++){ shown=Math.abs(targets[i].ai.shown); if(shown<0.2||targets[i].identity=='nei') c=0; else if(shown<0.4) c=0.5; else if(shown<0.6) c=0.8; else c=1; effect+=get.effect(targets[i],card,this,zhu)*c; } } if(this.identity=='nei'||this.identity=='commoner'){ if(effect>0){ if(this.ai.identity_mark=='fan'){ if(marknow) this.setIdentity(); this.ai.identity_mark='finished'; } else{ if(marknow) this.setIdentity('zhong'); this.ai.identity_mark='zhong'; } } else if(effect<0&&get.population('fan')>0){ if(this.ai.identity_mark=='zhong'){ if(marknow) this.setIdentity(); this.ai.identity_mark='finished'; } else{ if(marknow) this.setIdentity('fan'); this.ai.identity_mark='fan'; } } } else if(marknow){ if(effect>0&&this.identity!='fan'){ this.setIdentity('zhong'); this.ai.identity_mark='finished'; } else if(effect<0&&this.identity=='fan'){ this.setIdentity('fan'); this.ai.identity_mark='finished'; } } // } }, showIdentity:function(){ this.node.identity.classList.remove('guessing'); this.identityShown=true; this.ai.shown=1; this.setIdentity(); if(this.special_identity){ this.node.identity.firstChild.innerHTML=get.translation(this.special_identity+'_bg'); } if(this.identity=='zhu'){ this.isZhu=true; } else{ delete this.isZhu; } if(_status.clickingidentity){ for(var i=0;i<_status.clickingidentity[1].length;i++){ _status.clickingidentity[1][i].delete(); _status.clickingidentity[1][i].style.transform=''; } delete _status.clickingidentity; } } }, content:{ stratagemInsight:event=>{ 'step 0' game.log(player,'洞察了',target,'与其的阵营关系'); 'step 1' var storage=player.storage; if(!storage.zhibi) storage.zhibi=[]; var zhibi=storage.zhibi; if(!zhibi.includes(target)) zhibi.push(target); var insightResult=event.insightResult=get.insightResult(player,target); event.videoId=lib.status.videoId++; var send=(clientTarget,clientInsightResult,id)=>{ var classList=clientTarget.classList,nonStratagemInsightFlashing=classList.contains('flash-animation-iteration-count-infinite'); if(nonStratagemInsightFlashing) clientTarget.nonStratagemInsightFlashing=true; else classList.add('flash-animation-iteration-count-infinite'); var identity=get.translation(`${clientInsightResult}2`); clientTarget.prompt(identity,clientInsightResult); var dialog=ui.create.dialog(`${get.translation(clientTarget)}是${identity}<br>`,'forcebutton'); ui.create.spinningIdentityCard(clientInsightResult,dialog); var control=ui.create.control('ok',()=>{ dialog.close(); control.close(); _status.imchoosing=false; _status.event._result={ bool:true }; game.resume(); }); dialog.videoId=id; game.pause(); game.countChoose(); }; game.broadcastAll((clientPlayer,clientTarget,id)=>{ if(clientPlayer!=game.me) ui.create.dialog(`${get.translation(clientPlayer)}正在洞察${get.translation(clientTarget)}的阵营...<br>`).videoId=id; },player,target,event.videoId); if(event.isMine()) send(target,insightResult,event.videoId); else if(event.isOnline()){ player.send(send,target,insightResult,event.videoId); player.wait(); game.pause(); } 'step 2' game.broadcastAll('closeDialog',event.videoId); if(!_status.connectMode&&get.config('auto_mark_identity')&&!target.node.identity.firstChild.innerHTML.length) game.broadcastAll((clientPlayer,clientTarget,insightResult)=>{ if(clientPlayer.isUnderControl(true)) clientTarget.setIdentity(insightResult); },player,target,event.insightResult); var afterInsight=clientTarget=>{ clientTarget.unprompt(); if(clientTarget.nonStratagemInsightFlashing){ delete clientTarget.nonStratagemInsightFlashing; return; } var classList=clientTarget.classList; if(classList.contains('flash-animation-iteration-count-infinite')) classList.remove('flash-animation-iteration-count-infinite'); }; if(event.isMine()) afterInsight(target); else if(event.isOnline()) player.send(afterInsight,target); }, stratagemCamouflage:()=>{ 'step 0' var camouflaged=event.targets=game.players.filter(current=>current.identity=='fan'&&!current.ai.stratagemCamouflage).randomGets(Math.max(Math.round(get.population()/6),1)); camouflaged.forEach(current=>current.ai.stratagemCamouflage=true); var me=game.me; if(event.players.includes(me)&&me.identity=='nei'){ event.videoId=lib.status.videoId++; var rebel=get.translation('fan2'),dialog=ui.create.dialog(`${get.translation(camouflaged)}是${rebel}<br>`,'forcebutton'); ui.create.spinningIdentityCard('fan',dialog); dialog.videoId=event.videoId; camouflaged.forEach(victim=>{ var classList=victim.classList,nonCamouflageFlashing=classList.contains('flash-animation-iteration-count-infinite'); if(nonCamouflageFlashing) victim.nonCamouflageFlashing=true; else classList.add('flash-animation-iteration-count-infinite'); victim.prompt(rebel,'fan'); }); me.chooseControl('ok').set('dialog',dialog); } game.filterPlayer(current=>{ if(current.identity!='nei') return; var storage=current.storage; if(!storage.zhibi) storage.zhibi=[]; storage.zhibi.addArray(camouflaged); }); 'step 1' targets.forEach(current=>{ if(game.me.identity=='nei'&&get.config('nei_auto_mark_camouflage')) current.setIdentity(); current.unprompt(); if(current.nonCamouflageFlashing){ delete current.nonCamouflageFlashing; return; } var classList=current.classList; if(classList.contains('flash-animation-iteration-count-infinite')) classList.remove('flash-animation-iteration-count-infinite'); }); }, stratagemCamouflageOL:()=>{ 'step 0' var send=(clientCamouflaged,id,online)=>{ var me=game.me; if(me.identity=='nei'){ var storage=me.storage; if(!storage.zhibi) storage.zhibi=[]; storage.zhibi.addArray(clientCamouflaged); var rebel=get.translation('fan2'),dialog=ui.create.dialog(`${get.translation(clientCamouflaged)}是${rebel}<br>`,'forcebutton'); ui.create.spinningIdentityCard('fan',dialog); dialog.videoId=id; clientCamouflaged.forEach(victim=>{ var classList=victim.classList,nonCamouflageFlashing=classList.contains('flash-animation-iteration-count-infinite'); if(nonCamouflageFlashing) victim.nonCamouflageFlashing=true; else classList.add('flash-animation-iteration-count-infinite'); victim.prompt(rebel,'fan'); }); me.chooseControl('ok').set('dialog',dialog); } else ui.create.dialog('请等待内奸身份确认...').videoId=id; if(online) game.resume(); }; var camouflaged=event.targets=game.players.filter(current=>current.identity=='fan'&&!current.ai.stratagemCamouflage).randomGets(Math.max(Math.round(get.population()/6),1)); camouflaged.forEach(current=>current.ai.stratagemCamouflage=true); event.videoId=lib.status.videoId++; var time=10000; if(lib.configOL&&lib.configOL.choose_timeout) time=parseInt(lib.configOL.choose_timeout)*1000; var aiTargets=event.aiTargets=[]; event.players.forEach(current=>{ current.showTimer(time); if(current.isOnline()){ current.send(send,camouflaged,event.videoId,true); current.wait(); if(current.identity=='nei') event.withOL=true; return; } var me=game.me; if(current==me){ event.withMe=true; send(camouflaged,event.videoId); if(me.identity=='nei') me.wait(); else event._result={ bool:true }; return; } if(current.identity=='nei') aiTargets.push(current); }); if(!aiTargets.length) return; aiTargets.randomSort(); new Promise(resolve=>setTimeout(resolve,Math.ceil(5000+5000*Math.random()))).then(()=>{ var interval=setInterval(()=>{ aiTargets.shift(); if(aiTargets.length) return; clearInterval(interval); if(event.withAI) game.resume(); },Math.ceil(500+500*Math.random())) }); 'step 1' if(event.withMe) game.me.unwait(result); 'step 2' if(event.withOL&&!event.resultOL) game.pause(); 'step 3' if(!event.aiTargets.length) return; event.withAI=true; game.pause(); 'step 4' game.broadcastAll('closeDialog',event.videoId); event.players.forEach(current=>current.hideTimer()); var afterCamouflage=clientCamouflaged=>clientCamouflaged.forEach(victim=>{ victim.unprompt(); if(victim.nonCamouflageFlashing){ delete victim.nonCamouflageFlashing; return; } var classList=victim.classList; if(classList.contains('flash-animation-iteration-count-infinite')) classList.remove('flash-animation-iteration-count-infinite'); }); event.players.forEach(current=>{ if(current.isOnline()){ current.send(afterCamouflage,targets); return; } var me=game.me; if(current==me&&me.identity=='nei') afterCamouflage(targets); }); } } }, get:{ rawAttitude:function(from,to){ var x=0,num=0,temp,i; if(_status.ai.customAttitude){ for(i=0;i<_status.ai.customAttitude.length;i++){ temp=_status.ai.customAttitude[i](from,to); if(temp!=undefined){ x+=temp; num++; } } } if(num){ return x/num; } if(_status.mode=='purple'){ var real=get.realAttitude(from,to); if(from==to||to.identityShown||from.storage.zhibi&&from.storage.zhibi.includes(to)||(_status.yeconfirm&&['rYe','bYe'].includes(to.identity)&&['rYe','bYe'].includes(to.identity))) return real*1.1; return ((to.ai.shown+0.1)*real+(from.identity.slice(0,1)==to.identity.slice(0,1)?3:-3)*(1-to.ai.shown)) } else if(_status.mode=='stratagem'){ var x=0,num=0,temp,i; if(_status.ai.customAttitude){ for(i=0;i<_status.ai.customAttitude.length;i++){ temp=_status.ai.customAttitude[i](from,to); if(temp!=undefined){ x+=temp; num++; } } } if(num){ return x/num; } var real=get.realAttitude(from,to),zhibi=from.storage.zhibi,stratagem_expose=from.storage.stratagem_expose,followCamouflage=true; if(to.ai.shown) return to.ai.shown*(real+(from.identity==to.identity||from.identity=='zhu'&&to.identity=='zhong'||from.identity=='zhong'&&to.identity=='zhu'||from.identity=='nei'&&to.identity=='zhu'&&get.situation()<=1||(to.identity=='nei'&&get.situation()<=0&&['zhu','zhong'].includes(from.identity)||get.situation()>=3&&from.identity=='fan')?2.9:-2.9)) if(from==to||to.identityShown||((stratagem_expose&&stratagem_expose.includes(to))||(zhibi&&zhibi.includes(to)))&&!to.ai.stratagemCamouflage) return real*1.1; if(from.identity=='nei'&&to.ai.stratagemCamouflage) return real*1.1; if(to.identity=='nei'){ if(from.identity=='fan'){ if(get.population('zhong')==0){ if(zhibi){ var dead=game.dead.slice(); for(var current of dead){ if(from.storage.zhibi.includes(current)&¤t.ai.stratagemCamouflage){ if(from.storage.stratagem_expose&&from.storage.stratagem_expose.includes(to)) return -7; } } if(zhibi.includes(to)) return 3; } } } } if(to.identity=='fan'&&from.identity=='nei'&&zhibi.includes(game.zhu)&&game.players.filter(i=>i!=from&&!zhibi.includes(i)).map(i=>i.identity).reduce((p,c)=>(!p.includes(c)?(p.push(c)&&p):p),[]).length==1) return real; for(var fan of game.dead){ if(fan.identity!='fan'||!fan.storage.stratagem_revitalization) continue; for(var current of fan.storage.stratagem_expose){ if(to==current){ return real; } } } if(from.identity=='fan'&&to.identity=='fan'){ if(from.ai.stratagemCamouflage){ var zhu=game.zhu&&game.zhu.isZhu&&game.zhu.identityShown?game.zhu:undefined; if(zhu){ if(zhu.storage.stratagem_expose&&zhu.storage.stratagem_expose.includes(to)) return 0; } if(zhibi&&zhibi.includes(to)) return -7; } if(to.ai.stratagemCamouflage){ var zhu=game.zhu&&game.zhu.isZhu&&game.zhu.identityShown?game.zhu:undefined; if(zhu){ if(zhu.storage.stratagem_expose&&zhu.storage.stratagem_expose.includes(to)) return 0; } if(zhibi&&zhibi.includes(to)) return -7; } } if(from.identity!='nei'&&zhibi&&zhibi.includes(to)&&!to.identityShown&&(followCamouflage&&to.ai.stratagemCamouflage)) return -5; if(from.identity!='nei'&&stratagem_expose&&stratagem_expose.includes(to)&&!to.identityShown) return -5; if(zhibi){ for(var to2 of zhibi){ if(to2.storage.stratagem_expose){ if(to2.ai.stratagemCamouflage){ for(var to3 of to2.storage.stratagem_expose){ if(zhibi.slice().addArray(stratagem_expose).includes(to3)){ if(to==to2){ return real; } } else if(to==to3){ return Math.abs(real+10)/10; } } }else{ for(var to3 of to2.storage.stratagem_expose){ if(!zhibi.slice().addArray(stratagem_expose).includes(to3)&&to==to3){ return get.rawAttitude(to3,to)*Math.sign(real); } } } } } } return Math.max(-1,Math.min(-0.1,(-Math.min(5,to.countCards('hes')/2+1)/5-Math.max(0,5-to.hp)/4)/2)); } //正常身份模式态度 var difficulty=0; if(to==game.me) difficulty=2-get.difficulty(); if(from==to||to.identityShown||(from.storage.dongcha==to)||to.identityShown||from.storage.zhibi&&from.storage.zhibi.includes(to)){ return get.realAttitude(from,to)+difficulty*1.5; } else{ if(from.identity=='zhong'&&to.ai.shown==0&&from.ai.tempIgnore&& !from.ai.tempIgnore.includes(to)){ for(var i=0;i<game.players.length;i++){ if(game.players[i].ai.shown==0&&game.players[i].identity=='fan'){ return -0.1+difficulty*1.5; } } } var aishown=to.ai.shown; if((to.identity=='nei'||to.identity=='commoner')&&to.ai.shown<1&&(to.ai.identity_mark=='fan'||to.ai.identity_mark=='zhong')){ aishown=0.5; } else if(aishown==0&&to.identity!='fan'&&to.identity!='zhu'){ var fanshown=true; for(var i=0;i<game.players.length;i++){ if(game.players[i].identity=='fan'&&game.players[i].ai.shown==0&&game.players[i]!=from){ fanshown=false;break; } } if(fanshown) aishown=0.3; } return get.realAttitude(from,to)*aishown+difficulty*1.5; } }, realAttitude:function(from,to){ if(_status.mode=='purple'){ if(['rZhu','rZhong','bNei'].includes(from.identity)){ if(to.identity=='rZhu') return 8; if(['rZhong','bNei'].includes(to.identity)) return 7; return -7; } else if(['bZhu','bZhong','rNei'].includes(from.identity)){ if(to.identity=='bZhu') return 8; if(['bZhong','rNei'].includes(to.identity)) return 7; return -7; } else{ if(['rYe','bYe'].includes(to.identity)) return 7; if(['rZhu','bZhu'].includes(to.identity)&&game.hasPlayer(function(current){ return ['rZhong','bZhong','rNei','bNei'].includes(current.identity); })) return 6.5; return -7; } } else if(_status.mode=='stratagem'){ if(!game.zhu){ if(from.identity=='nei'||to.identity=='nei') return -1; if(from.identity==to.identity) return 6; return -6; } var situation=get.situation(); var identity=from.identity; var identity2=to.identity; if(identity2=='zhu'&&!to.isZhu){ identity2='zhong'; if(from==to) return 10; } if(from!=to&&to.identity=='nei'&&to.ai.shown<1&&(to.ai.identity_mark=='fan'||to.ai.identity_mark=='zhong')){ identity2=to.ai.identity_mark; } if(from.identity!='nei'&&from!=to&&get.population('fan')==0&&identity2=='zhong'){ for(var i=0;i<game.players.length;i++){ if(game.players[i].identity=='nei' && game.players[i].ai.identity_mark=='zhong' && game.players[i].ai.shown<1){ identity2='nei';break; } } } switch (identity){ case 'zhu': switch (identity2){ case 'zhu':return 10; case 'zhong':return 6; case 'nei': if(game.players.length==2) return -10; if(to.identity=='zhong') return 0; if(get.population('fan')==0){ if(to.ai.identity_mark=='zhong'&&to.ai.shown<1) return 0; return -1; } if(get.population('fan')==1&&get.population('nei')==1&&game.players.length==3){ var fan; for(var i=0;i<game.players.length;i++){ if(game.players[i].identity=='fan'){ fan=game.players[i];break; } } if(fan){ if(to.hp>1&&to.hp>fan.hp&&to.countCards('he')>fan.countCards('he')){ return -3; } } return 0; } if(situation>1) return Math.max((situation-8)/3,-2); return Math.min(3,get.population('fan')); case 'fan': if(get.population('fan')==1&&get.population('nei')==1&&game.players.length==3){ var nei; for(var i=0;i<game.players.length;i++){ if(game.players[i].identity=='nei'){ nei=game.players[i];break; } } if(nei){ if(nei.hp>1&&nei.hp>to.hp&&nei.countCards('he')>to.countCards('he')){ return 0; } } return -3; } return -4; } break; case 'zhong': switch (identity2){ case 'zhu':return 10; case 'zhong': if(from==to) return 5; if(get.population('zhong')>1) return 3; return 4; case 'nei': if(get.population('fan')==0&&get.population('zhong')==1) return -2; if(get.population('zhong')>=1) return Math.min(3,-situation); return 3; case 'fan':return -8; } break; case 'nei': if(identity2=='zhu'&&game.players.length==2) return -10; if(from!=to&&identity2!='zhu'&&game.players.length==3) return -8; var strategy=get.aiStrategy(); if(strategy==4){ if(from==to) return 10; return 0; } var num; switch (identity2){ case 'zhu': if(strategy==6) return -1; if(strategy==5) return 10; if(to.hp<=0) return 10; if(get.population('fan')==1){ var fan; for(var i=0;i<game.players.length;i++){ if(game.players[i].identity=='fan'){ fan=game.players[i];break; } } if(fan){ if(to.hp>1&&to.hp>fan.hp&&to.countCards('he')>fan.countCards('he')){ return -3; } } return 0; } else{ if(situation>1||get.population('fan')==0) num=0; else num=get.population('fan')+Math.max(0,3-game.zhu.hp); } if(strategy==2) num--; if(strategy==3) num++; return num; case 'zhong': if(strategy==5) return Math.min(0,-situation); if(strategy==6) return Math.max(-1,-situation); if(get.population('fan')==0) num=-5; else if(situation<=0) num=0; else if(game.zhu&&game.zhu.hp<2) num=0; else if(game.zhu&&game.zhu.hp==2) num=-1; else if(game.zhu&&game.zhu.hp<=2&&situation>1) num=-1; else num=-2; if(strategy==2) num--; if(strategy==3) num++; return num; case 'nei': if(from==to) return 10; if(from.ai.friend.includes(to)) return 5; if(get.population('fan')+get.population('zhong')>0) return 0; return -5; case 'fan': if(strategy==5) return Math.max(-1,situation); if(strategy==6) return Math.min(0,situation); if((game.zhu&&game.zhu.hp<=2&&situation<0)||situation<-1) num=-3; else if(situation<0||get.population('zhong')==0) num=-2; else if((game.zhu&&game.zhu.hp>=4&&situation>0)||situation>1) num=1; else num=0; if(strategy==2) num++; if(strategy==3) num--; return num; } break; case 'fan': switch (identity2){ case 'zhu': if(get.population('nei')>0){ if(situation==1) return -6; if(situation>1) return -5; } return -8; case 'zhong': if(game.zhu.hp>=3&&to.hp==1){ return -10; } return -7; case 'nei': if(get.population('fan')==1) return 0; if(get.population('zhong')==0) return -2; if(game.zhu&&game.zhu.hp<=2&&game.zhu.identityShown) return -1; return 3; case 'fan': return 5; } } } //正常身份模式态度 if(!game.zhu){ if(from.identity=='nei'||to.identity=='nei'||from.identity=='commoner'||to.identity=='commoner') return -1; if(from.identity==to.identity) return 6; return -6; } var situation=get.situation(); var identity=from.identity; var identity2=to.identity; if(identity2=='zhu'&&!to.isZhu){ identity2='zhong'; if(from==to) return 10; } if(from!=to&&to.identity=='nei'&&to.ai.shown<1&&(to.ai.identity_mark=='fan'||to.ai.identity_mark=='zhong')){ identity2=to.ai.identity_mark; } if(from.identity!='nei'&&from.identity!='commoner'&&from!=to&&get.population('fan')==0&&identity2=='zhong'){ for(var i=0;i<game.players.length;i++){ if(game.players[i].identity=='nei'&& game.players[i].ai.identity_mark=='zhong'&& game.players[i].ai.shown<1){ identity2='nei';break; } else if(game.players[i].identity=='commoner'&& game.players[i].ai.identity_mark=='zhong'&& game.players[i].ai.shown<1){ identity2='commoner'; break; } } } var zhongmode=false; if(!game.zhu.isZhu){ zhongmode=true; } switch(identity){ case 'zhu': switch(identity2){ case 'zhu': return 10; case 'zhong':case 'mingzhong': return 6; case 'nei': if(game.players.length==2) return -10; if(to.identity=='zhong') return 0; if(get.population('fan')==0){ if(to.ai.identity_mark=='zhong'&&to.ai.shown<1) return 0; return -0.5; } if(zhongmode&&to.ai.sizhong&&to.ai.shown<1) return 6; if(get.population('fan')==1&&get.population('nei')==1&&game.players.length==3){ var fan; for(var i=0;i<game.players.length;i++){ if(game.players[i].identity=='fan'){ fan=game.players[i];break; } } if(fan){ if(to.hp>1&&to.hp>fan.hp&&to.countCards('he')>fan.countCards('he')){ return -3; } } return 0; } if(situation>1) return 0; return Math.min(3,get.population('fan')); case 'fan': if(get.population('fan')==1&&get.population('nei')==1&&game.players.length==3){ var nei; for(var i=0;i<game.players.length;i++){ if(game.players[i].identity=='nei'){ nei=game.players[i];break; } } if(nei){ if(nei.hp>1&&nei.hp>to.hp&&nei.countCards('he')>to.countCards('he')){ return 0; } } return -3; } return -4; case 'commoner': if(to.identity=='zhong') return 0; if(get.population('fan')==0){ if(to.ai.identity_mark=='zhong'&&to.ai.shown<1) return 0; return -0.5; } if(zhongmode&&to.ai.sizhong&&to.ai.shown<1) return 6; if(game.players.length==3){ var fan; for(var i=0; i<game.players.length; i++){ if(game.players[i].identity=='fan'){ fan=game.players[i]; break; } } if(fan){ if(to.hp>1&&to.hp>fan.hp&&to.countCards('he')>fan.countCards('he')){ return -3; } } return 3; } if(situation<0&&game.zhu&&game.zhu.hp<=2) return -3.8; return Math.max(-4,2-get.population('fan')); } break; case 'zhong':case 'mingzhong': switch(identity2){ case 'zhu': return 10; case 'zhong':case 'mingzhong': return 4; case 'nei': if(get.population('fan')==0) return -2; if(zhongmode&&to.ai.sizhong&&to.ai.shown<1) return 6; return Math.min(3,-situation); case 'fan': return -8; case 'commoner': return Math.min(3,Math.max(-3,situation-0.2)); } break; case 'nei': if(identity2=='zhu'&&game.players.length==2) return -10; if(from!=to&&identity2!='zhu'&&identity2!='commoner'&&game.players.length==3) return -8; var strategy=get.aiStrategy(); if(strategy==4){ if(from==to) return 10; return 0; } var num; switch(identity2){ case 'zhu': if(strategy==6) return -1; if(strategy==5) return 10; if(to.hp<=0) return 10; if(get.population('fan')==1){ var fan; for(var i=0;i<game.players.length;i++){ if(game.players[i].identity=='fan'){ fan=game.players[i];break; } } if(fan){ if(to.hp>1&&to.hp>fan.hp&&to.countCards('he')>fan.countCards('he')){ return -1.7; } } return 0; } else{ if(situation>1||get.population('fan')==0) num=0; else num=get.population('fan')+Math.max(0,3-game.zhu.hp); } if(strategy==2) num--; if(strategy==3) num++; return num; case 'zhong': if(strategy==5) return Math.min(0,-situation); if(strategy==6) return Math.max(-1,-situation); if(get.population('fan')==0) num=-5; else if(situation<=0) num=0; else if(game.zhu&&game.zhu.hp<2) num=0; else if(game.zhu&&game.zhu.hp==2) num=-1; else if(game.zhu&&game.zhu.hp<=2&&situation>1) num=-1; else num=-2; if(zhongmode&&situation<2){ num=4; } if(strategy==2) num--; if(strategy==3) num++; return num; case 'mingzhong': if(zhongmode){ if(from.ai.sizhong==undefined){ from.ai.sizhong=(Math.random()<0.5); } if(from.ai.sizhong) return 6; } if(strategy==5) return Math.min(0,-situation); if(strategy==6) return Math.max(-1,-situation); if(get.population('fan')==0) num=-5; else if(situation<=0) num=0; else num=-3; if(strategy==2) num--; if(strategy==3) num++; return num; case 'nei': if(from==to) return 10; if(from.ai.friend.includes(to)) return 5; if(get.population('fan')+get.population('zhong')>0) return 0; return -5; case 'fan': if(strategy==5) return Math.max(-1,situation); if(strategy==6) return Math.min(0,situation); if((game.zhu&&game.zhu.hp<=2&&situation<0)||situation<-1) num=-3; else if(situation<0||get.population('zhong')+get.population('mingzhong')==0) num=-2; else if((game.zhu&&game.zhu.hp>=4&&situation>0)||situation>1) num=1; else num=0; if(strategy==2) num++; if(strategy==3) num--; return num; case 'commoner': if(game.players.length<=4) return 5; return Math.min(Math.max(-situation,-2),2); } break; case 'fan': switch(identity2){ case 'zhu': if(get.population('nei')>0){ if(situation==1) return -6; if(situation>1) return -5; } return -8; case 'zhong': if(!zhongmode&&game.zhu.hp>=3&&to.hp==1){ return -10; } return -7; case 'mingzhong':return -5; case 'nei': if(zhongmode&&to.ai.sizhong) return -7; if(get.population('fan')==1) return 0; if(get.population('zhong')+get.population('mingzhong')==0) return -7; if(game.zhu&&game.zhu.hp<=2) return -1; return Math.min(3,situation); case 'fan': return 5; case 'commoner': return 2*get.population('fan')-3; } break; case 'commoner': switch(identity2){ case 'zhu': if(situation>0) return 2*Math.min(4,(to.hp+to.countCards('h')/4-2)); if(situation>=-3&&game.zhu) return (to.hp-2)+to.countCards('h')/4; //return Math.min(-0.1,5-game.zhu.hp); return to.hp+to.countCards('h')/3-4; case 'zhong': if(situation>0){ if(to.hp>=2) return Math.min(3,Math.max(1,to.hp+to.countCards('h')/4-4)); else return 0; } return -2; case 'nei': if(game.players.length==3&&get.population('nei')==1) return Math.min(3.5,(to.hp-1.5)+to.countCards('h')/3)-(to.hp<(game.zhu?game.zhu.hp:0)?4:0); if(game.players.length<=4&&get.population('nei')==1) return Math.min(5,(to.hp-1.5)+to.countCards('h')/3); if(situation>0) return -3; return 0; case 'fan': if(situation<0) return to.hp+to.countCards('h')/4-1.7*get.population('fan')+2; else if(situation==0) return 0; return 0.55*get.population('fan')-2.1; case 'commoner': return from==to?10:(to.hp<=2?-2:0); } break; } }, situation:function(absolute){ var i,j,player; var zhuzhong=0,total=0,zhu,fan=0; for(i=0;i<game.players.length;i++){ player=game.players[i]; var php=player.hp; if(player.hasSkill('benghuai')&&php>4){ php=4; } else if(php>6){ php=6; } j=player.countCards('h')+player.countCards('e')*1.5+php*2; if(player.identity=='zhu'){ zhuzhong+=j*1.2+5; total+=j*1.2+5; zhu=j; } else if(player.identity=='zhong'||player.identity=='mingzhong'){ zhuzhong+=j*0.8+3; total+=j*0.8+3; } else if(player.identity=='fan'){ zhuzhong-=j+4; total+=j+4; fan+=j+4; } } if(absolute) return zhuzhong; var result=parseInt(10*Math.abs(zhuzhong/total)); if(zhuzhong<0) result=-result; if(!game.zhong){ if(zhu<12&&fan>30) result--; if(zhu<6&&fan>15) result--; if(zhu<4) result--; } return result; }, insightResult:function(from,to){ var friend='friend',enemy='enemy'; if(from.identity=='nei') return to.identity; if(to.identity=='nei') return friend; if(from.ai.stratagemCamouflage||to.ai.stratagemCamouflage) return enemy; if(from.identity==to.identity||from.identity=='zhu'&&to.identity=='zhong'||from.identity=='zhong'&&to.identity=='zhu') return friend; return enemy; } }, skill:{ stratagem_gain:{ silent:true, charlotte:true, ruleSkill:true, trigger:{ player:['phaseBegin','damageEnd'] }, content:()=>{ player.changeFury(trigger.name=='damage'?trigger.num:1,true); } }, stratagem_insight:{ trigger:{ source:'damageSource', global:'loseHpEnd' }, filter:(event,player)=>{ if(!player.storage.stratagem_fury) return false; const target=event.player; if(target==player||!target.isIn()||target.identityShown) return false; let source=event.source; if(event.name=='loseHp'){ const trigger=event.getParent()._trigger; if(trigger) source=trigger.source; } return player==source; }, logTarget:'player', prompt2:event=>`消耗1点怒气,洞察${get.translation(event.player)}的身份`, check:(event,player)=>{ const storage=player.storage,zhibi=storage.zhibi; if(zhibi&&zhibi.includes(event.player)) return false; const stratagemExpose=storage.stratagem_expose; if(stratagemExpose&&stratagemExpose.includes(event.player)) return false; if(get.population('zhong')==0&&player.identity=='fan') return false; return Math.abs(get.attitude(player,event.player))<=1; }, content:()=>{ player.changeFury(-1,true); player.insightInto(trigger.player); } }, stratagem_monarchy:{ trigger:{ player:['dying','phaseZhunbeiBegin'], global:'dieAfter', }, forced:true, priority:100, popup:false, unique:true, firstDo:true, silent:true, charlotte:true, ruleSkill:true, filter:(event,player,name)=>{ if(player.storage.stratagem_monarchy||player.identity!='zhu') return false; if(name=='dieAfter') return game.dead.length>=Math.max(Math.round(get.population()/3),2); return name=='dying'||game.roundNumber>=Math.max(Math.round(get.population()/2),3); }, content:()=>{ 'step 0' if(event.triggername=='dying') game.delayx(); 'step 1' player.storage.stratagem_monarchy=true; game.broadcastAll(clientPlayer=>{ if(!game.zhu) game.zhu=clientPlayer; clientPlayer.identityShown=true; clientPlayer.ai.shown=1; clientPlayer.setIdentity(); clientPlayer.isZhu=true; clientPlayer.node.identity.classList.remove('guessing'); var config=lib.config; if(config.animation&&!config.low_performance) clientPlayer.$legend(); var clickingIdentity=_status.clickingidentity; if(!clickingIdentity||clickingIdentity[0]!=clientPlayer) return; clickingIdentity[1].forEach(element=>{ element.delete(); element.style.transform=''; }); delete _status.clickingidentity; },player); game.addVideo('showIdentity',player,'zhu'); game.delay(2); player.playerfocus(1000); event.trigger('zhuUpdate'); 'step 2' player.recover(); player.draw(); 'step 3' const skills = player.getStockSkills(true,true).filter(stockSkill=>{ if(player.hasSkill(stockSkill)) return; var info=get.info(stockSkill); if(!info||!info.zhuSkill) return; return true; }); if(skills.length) player.addSkills(skills) } }, stratagem_revitalization:{ trigger:{ player:'dying', }, forced:true, unique:true, silent:true, charlotte:true, ruleSkill:true, filter:(event,player)=>{ const storage=player.storage; return !storage.stratagem_revitalization&&player.ai.stratagemCamouflage&&game.dead.length<Math.max(Math.round(get.population()/6),1)&&storage.stratagem_fury>=2; }, content:()=>{ 'step 0' game.delayx(); 'step 1' player.storage.stratagem_revitalization=true; game.broadcastAll(clientPlayer=>{ clientPlayer.identityShown=true; clientPlayer.ai.shown=1; clientPlayer.setIdentity(); clientPlayer.node.identity.classList.remove('guessing'); if(lib.config.animation&&!lib.config.low_performance) clientPlayer.$thunder(); },player); game.addVideo('showIdentity',player,'fan'); game.delay(2); player.playerfocus(800); 'step 2' player.changeFury(-player.storage.stratagem_fury,true); player.discard(player.getCards('hej')); player.link(false); player.turnOver(false); player.recover(2-player.hp); player.draw(3); } }, stratagem_expose:{ trigger:{player:'useCard'}, forced:true, silent:true, popup:false, filter:(event,player)=>{ const targets=event.targets; if(targets.length!=1) return false; const target=targets[0]; return target==player&&(target.identityShown||player.storage.zhibi.includes(target)||game.hasPlayer2(current=>{ if(!current.identityShown) return false; const storage=current.storage; return (storage.stratagem_revitalization||storage.stratagem_monarchy)&&storage.stratagem_expose.includes(target); })); }, content:()=>{ var storage=trigger.targets[0].storage; if(!storage.stratagem_expose) storage.stratagem_expose=[]; storage.stratagem_expose.add(player); } }, yexinbilu:{ enable:'phaseUse', filter:function(event,player){ return player.identity=='rYe'||player.identity=='bYe'; }, skillAnimation:'legend', animationColor:'thunder', content:function(){ game.removeGlobalSkill('yexinbilu'); player.yexinbilu(); }, ai:{ order:10, result:{ player:function(player){ return 1-game.countPlayer(function(current){ return current!=player&&(current.identity=='rYe'||current.identity=='bYe')&&(current==game.me||current.isOnline()); }) }, }, }, }, identity_junshi:{ name:'军师', mark:true, intro:{ content:'准备阶段开始时,可以观看牌堆顶的三张牌,然后将这些牌以任意顺序置于牌堆顶或牌堆底' }, trigger:{player:'phaseZhunbeiBegin'}, silent:true, content:function(){ "step 0" var cards=get.cards(3); game.cardsGotoOrdering(cards); var next=player.chooseToMove(); next.set('list',[ ['牌堆顶',cards], ['牌堆底'], ]); next.set('prompt','观星:点击将牌移动到牌堆顶或牌堆底'); next.processAI=function(list){ var cards=list[0][1],player=_status.event.player; var top=[]; var judges=player.getCards('j'); var stopped=false; if(!player.hasWuxie()){ for(var i=0;i<judges.length;i++){ var judge=get.judge(judges[i]); cards.sort(function(a,b){ return judge(b)-judge(a); }); if(judge(cards[0])<0){ stopped=true;break; } else{ top.unshift(cards.shift()); } } } var bottom; if(!stopped){ cards.sort(function(a,b){ return get.value(b,player)-get.value(a,player); }); while(cards.length){ if(get.value(cards[0],player)<=5) break; top.unshift(cards.shift()); } } bottom=cards; return [top,bottom]; } "step 1" var top=result.moved[0]; var bottom=result.moved[1]; top.reverse(); for(var i=0;i<top.length;i++){ ui.cardPile.insertBefore(top[i],ui.cardPile.firstChild); } for(i=0;i<bottom.length;i++){ ui.cardPile.appendChild(bottom[i]); } player.popup(get.cnNumber(top.length)+'上'+get.cnNumber(bottom.length)+'下'); game.log(player,'将'+get.cnNumber(top.length)+'张牌置于牌堆顶'); game.updateRoundNumber(); game.delayx(); } }, identity_dajiang:{ name:'大将', mark:true, intro:{ content:'手牌上限+1' }, mod:{ maxHandcard:function(player,num){ return num+1; } } }, identity_zeishou:{ name:'贼首', mark:true, intro:{ content:'手牌上限-1' }, mod:{ maxHandcard:function(player,num){ return num-1; } } }, dongcha:{ trigger:{player:'phaseBegin'}, direct:true, unique:true, filter:function(event,player){ return game.hasPlayer(function(current){ return current.countCards('ej'); }); }, forceunique:true, content:function(){ 'step 0' player.chooseTarget(get.prompt('dongcha'),function(card,player,target){ return target.countCards('ej')>0; }).set('ai',function(target){ var player=_status.event.player; var att=get.attitude(player,target); if(att>0){ var js=target.getCards('j'); if(js.length){ var jj=js[0].viewAs?{name:js[0].viewAs}:js[0]; if(jj.name=='guohe'||js.length>1||get.effect(target,jj,target,player)<0){ return 2*att; } } if(target.getEquip('baiyin')&&target.isDamaged()&& get.recoverEffect(target,player,player)>0){ if(target.hp==1&&!target.hujia) return 1.6*att; if(target.hp==2) return 0.01*att; return 0; } } var es=target.getCards('e'); var noe=target.hasSkillTag('noe'); var noe2=(es.length==1&&es[0].name=='baiyin'&&target.isDamaged()); if(noe||noe2) return 0; if(att<=0&&!es.length) return 1.5*att; return -1.5*att; }); 'step 1' if(result.bool){ event.target=result.targets[0]; event.target.addExpose(0.1); player.logSkill('dongcha',event.target); game.delayx(); } else{ event.finish(); } 'step 2' if(event.target){ player.discardPlayerCard('ej',true,event.target); } }, group:['dongcha_begin','dongcha_log'], subSkill:{ begin:{ trigger:{global:'gameStart'}, forced:true, popup:false, content:function(){ var list=[]; for(var i=0;i<game.players.length;i++){ if(game.players[i].identity=='fan'){ list.push(game.players[i]); } } var target=list.randomGet(); player.storage.dongcha=target; if(!_status.connectMode){ if(player==game.me){ target.setIdentity('fan'); target.node.identity.classList.remove('guessing'); target.fanfixed=true; player.line(target,'green'); player.popup('dongcha'); } } else{ player.chooseControl('ok').set('dialog',[get.translation(target)+'是反贼',[[target.name],'character']]); } } }, log:{ trigger:{player:'useCard'}, forced:true, popup:false, filter:function(event,player){ return event.targets.length==1&&event.targets[0]==player.storage.dongcha&&event.targets[0].ai.shown<0.95; }, content:function(){ trigger.targets[0].addExpose(0.2); } } } }, sheshen:{ trigger:{global:'dieBefore'}, forced:true, unique:true, forceunique:true, filter:function(event,player){ return event.player==game.zhu&&player.hp>0; }, logTarget:'player', content:function(){ 'step 0' trigger.player.gainMaxHp(); 'step 1' var dh=player.hp-trigger.player.hp; if(dh>0){ trigger.player.recover(dh); } 'step 2' var cards=player.getCards('he'); if(cards.length){ trigger.player.gain(cards,player); player.$giveAuto(cards,trigger.player); } 'step 3' trigger.cancel(); player.die(); } } }, help:{ '身份模式':'<div style="margin:10px">选项</div><ul style="margin-top:0"><li>加强主公<br>反贼人数多于2时主公会额外增加一个技能(每个主公的额外技能固定,非常备主公增加天命)'+ '<li>特殊身份<br><ul style="padding-left:20px;padding-top:5px"><li>军师:忠臣身份。只要军师存活,主公在准备阶段开始时,可以观看牌堆顶的三张牌,然后将这些牌以任意顺序置于牌堆顶或牌堆底<li>大将:忠臣身份。只要大将存活,主公手牌上限+1<li>贼首:反贼身份,只要贼首存活,主公手牌上限-1</ul></ul>'+ '<li>平民身份<br>英盗版三国杀于2017标准版中提出的新概念。平民的获胜条件为:当其他身份的角色达成了其获胜条件,且你存活,你也获胜;同时内奸的获胜条件改为:主公死亡时,场上所有忠臣和反贼均已死亡。即内奸可以和与平民共同胜利。杀死平民的角色的奖惩为:摸两张牌。'+ '<li>年机制<br>英盗版三国杀于2019标准版中提出的新概念。“年”是一个全局概念,游戏开始时为第一年,当牌堆洗牌时,年数+1。一局游戏的限定年数为本局游戏开始时玩家总数。当年数增加后,若当前年数已超过限定年数,则主忠方直接获胜,若平民存活则平民也获胜。', '明忠模式':'<div style="margin:10px">明忠模式(忠胆英杰)</div><ul style="margin-top:0"><li>本模式需要8名玩家进行游戏,使用的身份牌为:1主公、2忠臣、4反贼和1内奸。游戏开始时,每名玩家随机获得一个身份,由系统随机选择一名忠臣身份的玩家亮出身份(将忠臣牌正面朝上放在面前),其他身份(包括主公)的玩家不亮出身份。<li>'+ '首先由亮出身份的忠臣玩家随机获得六张武将牌,挑选一名角色,并将选好的武将牌展示给其他玩家。之后其余每名玩家随机获得三张武将牌,各自从其中挑选一张同时亮出<li>'+ '亮出身份牌的忠臣增加1点体力上限。角色濒死和死亡的结算及胜利条件与普通身份局相同。', '谋攻模式':'<div style="margin:10px">模式命名由来</div><ul style="margin-top:0"><li>《谋攻篇》一词出自《孙子兵法·谋攻篇》,是春秋时期兵法家孙武创作的一篇散文。《谋攻篇》故知胜有五:知可以战与不可以战者胜,识众寡之用者胜,上下同欲者胜,以虞待不虞者胜,将能而君不御者胜。</ul>'+ '<div style="margin:10px">游戏规则</div><ul style="margin-top:0"><li>谋攻篇模式为六名玩家参与的全暗身份模式,引入新机制“怒气”,玩家可以消耗怒气探查其他角色的身份是敌人或者队友,或使用怒气强化手牌,以达到识别出队友并击杀敌人的目标。'+ '<li>各身份玩家的胜利条件与身份局中对应身份的胜利条件一致,且该模式下没有奖惩。'+ '<li>当主公进入濒死、场上有两名角色阵亡、第三轮的主公准备阶段,主公将会翻开身份牌,回复1点体力并摸一张牌,并获得武将牌上的主公技。'+ '<li>内奸在游戏开始时将会得知一名反贼的身份,并令该反贼被“伪装”。本局游戏内,被“伪装”的反贼在被任何人探查身份时,结果都提示为“敌人”。作为补偿,其第一次进入濒死时,若场上没有角色死亡且其怒气值不小于2,其弃置区域内所有牌,重置武将牌,将体力回复至2点并摸三张牌。'+ '<li>特殊地,内奸在被所有角色探查时,都提示为“队友”;内奸在进行探查时,直接得知目标的身份。</ul>'+ '<div style="margin:10px">新机制“怒气”</div><ul style="margin-top:0"><li>一名角色在回合开始时或受到1点伤害后,将获得1点怒气;怒气上限为3。<li>一名角色令其他角色扣减体力后,该角色可以消耗1点怒气,查探扣减体力的角色是敌或友。</ul>'+ '<div style="margin:10px">强化卡牌规则</div><ul style="margin-top:0"><li>在第二轮游戏开始后,当你需要使用一张“强化表”内的牌时,你可以通过消耗怒气将此牌强化。'+ '<li>可强化卡牌<br><ul style="padding-left:20px;padding-top:5px">'+ '<li>【杀】:消耗1点怒气进行强化,你令响应此杀所需使用的【闪】数+1'+ '<li>【闪】:消耗1点怒气进行强化,使用时视为两张【闪】的效果'+ '<li>【决斗】:消耗2点怒气进行强化,对此牌的目标造成伤害时,伤害+1'+ '<li>【火攻】:消耗2点怒气进行强化,造成的伤害+1'+ '<li>【桃】:消耗3点怒气进行强化,回复的体力+1</ul></ul>', '3v3v2':'<div style="margin:10px">3v3v2模式</div><ul style="margin-top:0"><li>游戏准备<br>本模式需要8名玩家进行游戏。游戏开始前,所有玩家随机分成两组,每组四人,分别称为「冷色阵营」和「暖色阵营」,然后分发身份牌,抽取到「主帅」身份的玩家亮出身份牌。'+ '<li>身份牌<br>每组的身份分为四种。<br>主帅(主)和前锋(忠):联合对方阵营的细作,击杀己方细作,对方阵营的主帅和前锋以及所有的野心家。<br>细作(内):帮助对方阵营的主帅和前锋,击杀对方细作,己方阵营的主帅和前锋以及所有的野心家。<br>野心家(野):联合对方阵营中的野心家,击杀所有其他角色,成为最后的生还者。<br>'+ '<li>胜负判定<br>冷色主帅,先锋和暖色细作在所有野心家和对方主帅全部阵亡后视为胜利,在冷色主帅阵亡后视为游戏失败。<br>暖色主帅,先锋和冷色细作在所有野心家和对方主帅阵亡后视为胜利,在暖色主帅阵亡后视为失败。<br>野心家在所有不为野心家的角色阵亡后视为胜利,在双方主帅全部阵亡而有非野心家角色存活时失败。<br>当有角色阵亡后,若有角色满足胜利条件,游戏结束。若所有角色均满足失败条件,则游戏平局。若一名角色满足失败条件,即使其满足胜利条件,也视为游戏失败。<br>'+ '<li>游戏流程<br>在「游戏准备」中的工作完成后,冷色主帅选择一个势力,然后暖色主帅选择一个其他势力,作为双方各自的势力将池。<br>双方主帅从各自的势力将池中获得两张常备主公武将牌和四张非常备主公武将牌,然后选择一张作为武将牌,将其他的武将牌放回势力将池并洗混。然后双方的其他玩家从各自的势力将池中随机获得五张武将牌,选择一张作为自己的武将牌。<br>暖色主帅成为游戏的一号位,双方主帅各加1点体力和体力上限。七号位和八号位的起始手牌+1。<br>当场上第一次有玩家死亡时,野心家确认彼此的身份牌,然后获得技能〖野心毕露〗:出牌阶段,你可以明置身份牌,加1点体力上限和体力值。若如此做,所有的野心家失去技能〖野心毕露〗<br>'+'<li>击杀奖惩<br>杀死颜色不同的主帅的角色回复1点体力,杀死颜色不同的先锋的角色摸两张牌,杀死颜色相同的细作的角色摸三张牌,杀死颜色相同的先锋的主帅弃置所有手牌。<br>'+ '<li>制作团队<br>游戏出品:紫星居<br>游戏设计:食茸貳拾肆<br>游戏开发:食茸貳拾肆、紫髯的小乔、聆星Mine、空城琴音依旧弥漫、丽景原同志、雪之彩翼、拉普拉斯、明月照沟渠<br>程序化:无名杀<br>鸣谢:荆哲、魔风、萨巴鲁酱、这就是秋夜</ul></ul>', } }; });