'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)&&current.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>',
		}
	};
});